@tixyel/streamelements 6.2.1 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +95 -94
- package/dist/index.es.js +21 -5
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/modules/EventProvider.ts","../src/modules/useStorage.ts","../src/client/client.ts","../src/actions/command.ts","../src/data/collection/css.ts","../src/utils/color.ts","../src/data/collection/avatars.ts","../src/data/collection/badges.ts","../src/data/collection/emotes.ts","../src/data/collection/items.ts","../src/data/collection/messages.ts","../src/data/collection/names.ts","../src/data/collection/tiers.ts","../src/data/collection/tts.ts","../src/data/collection/youtube-emotes.ts","../src/data/index.ts","../src/helper/index.ts","../src/actions/button.ts","../src/local/index.ts","../src/modules/useQueue.ts","../src/modules/useComms.ts","../src/client/listener.ts","../src/streamelements/api.ts","../src/utils/alejo.ts","../src/multistream/comfyJs.ts","../src/modules/useLogger.ts","../src/main.ts"],"sourcesContent":["/**\n * EventProvider class for managing event listeners and emitters.\n * This class allows you to register event listeners, emit events, and manage event subscriptions.\n * @example\n * ```typescript\n * type TestEvents = {\n * load: [event: { type: 'load' }];\n * event: [event: { type: 'event' }];\n * };\n *\n * class Test extends EventProvider<TestEvents> {}\n *\n * const test = new Test();\n * test.once('load', (data) => {});\n * test.emit('load', { type: 'load' });\n *\n * test.on('event', (data) => {});\n * test.emit('event', { type: 'event' });\n * ```\n */\nexport class EventProvider<EventMap extends Record<string, any[]> = Record<string, any[]>> {\n /**\n * Stores registered event listeners.\n */\n private registeredEvents: { [K in keyof EventMap]?: Array<(this: this, ...args: EventMap[K]) => any> } = {};\n\n /**\n * Emits an event to all registered listeners.\n * Returns an array of return values from the listeners.\n * @param eventName The name of the event.\n * @param args Arguments to pass to the listeners.\n */\n emit<K extends keyof EventMap>(eventName: K, ...args: EventMap[K]): any[] {\n const listeners = this.registeredEvents[eventName] || [];\n\n return listeners.map((listener) => listener.apply(this, args));\n }\n\n /**\n * Registers an event listener.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n on<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n if (typeof callback !== 'function') {\n throw new TypeError('Callback must be a function');\n }\n\n if (!this.registeredEvents[eventName]) {\n this.registeredEvents[eventName] = [];\n }\n\n this.registeredEvents[eventName]!.push(callback);\n\n return this;\n }\n\n /**\n * Removes a specific event listener.\n * @param eventName The name of the event.\n * @param callback The callback function to remove.\n */\n off<K extends keyof EventMap>(eventName: K, callback?: (this: this, ...args: EventMap[K]) => any): this {\n const listeners = this.registeredEvents[eventName] || [];\n\n if (!callback) {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n\n this.registeredEvents[eventName] = listeners.filter((fn) => fn !== callback);\n\n return this;\n }\n\n /**\n * Registers a listener that is executed only once.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n once<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n const wrapper = (...args: EventMap[K]) => {\n this.off(eventName, wrapper);\n callback.apply(this, args);\n };\n\n this.on(eventName, wrapper);\n\n return this;\n }\n\n /**\n * Removes all listeners for a specific event.\n * @param eventName The name of the event.\n */\n removeAllListeners<K extends keyof EventMap>(eventName: K): this {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport { EventProvider } from './EventProvider.js';\nimport { USE_SE_API } from '../main.js';\nimport { PathValue } from '../types/path.js';\nimport type { JSONObject } from '../types/json.js';\n\ntype UseStorageEvents<T> = {\n load: [T | null];\n update: [T];\n};\n\ntype UseStorageOptions<T> = {\n id?: string;\n data: T;\n};\n\nexport const usedStorages: Array<useStorage<any>> = [];\n\nexport class useStorage<T extends JSONObject> extends EventProvider<UseStorageEvents<T>> {\n private SE_API: StreamElements.SE_API | null = null;\n\n /** The unique identifier for the storage instance. */\n public id: string = 'default';\n public loaded: boolean = false;\n public data!: T;\n\n constructor(options: UseStorageOptions<T>) {\n super();\n\n this.id = options.id || this.id;\n this.data = options.data ?? ({} as T);\n\n usedStorages.push(this);\n\n USE_SE_API?.then((se) => {\n this.SE_API = se;\n\n se!.store\n .get<T>(this.id)\n .then((save) => {\n this.data = save ?? this.data;\n\n this.loaded = true;\n\n this.emit('load', this.data);\n\n if (JSON.stringify(this.data) !== JSON.stringify(save)) {\n this.emit('update', this.data);\n }\n })\n .catch(() => {\n this.loaded = true;\n\n this.emit('load', this.data);\n });\n });\n }\n\n /**\n * Saves the current data to storage.\n * @param data Data to save (defaults to current)\n */\n private save(data: T = this.data): void {\n if (this.loaded && this.SE_API) {\n if (JSON.stringify(this.data) !== JSON.stringify(data)) {\n this.data = data;\n\n this.SE_API.store.set<T>(this.id, this.data);\n\n this.emit('update', this.data);\n }\n }\n }\n\n /**\n * Updates the storage data and emits an update event\n * @param data Data to update (defaults to current)\n */\n public update(data: Partial<T> = this.data): void {\n if (this.loaded && JSON.stringify(this.data) !== JSON.stringify(data)) {\n const newData = { ...this.data, ...data };\n\n this.save(newData);\n }\n }\n\n /**\n * Adds a value to the storage at the specified path.\n * @param path Path to add the value to\n * @param value Value to add\n */\n public add<P extends string>(path: P, value: PathValue<T, P>): void {\n if (!this.loaded) return;\n\n useStorage.setByPath(this.data, path, value);\n\n this.save(this.data);\n }\n\n /**\n * Clears all data from the storage.\n */\n public clear(): void {\n if (this.loaded) {\n this.data = {} as T;\n\n this.save(this.data);\n }\n }\n\n /**\n * Sets a value in the storage at the specified path.\n * @param obj The object to set the value in\n * @param path The path to set the value at\n * @param value The value to set\n * @returns The updated object\n */\n static setByPath<P extends string, T extends object>(\n obj: T,\n path: P,\n value: PathValue<T, P>,\n ): void {\n const keys = path.split('.');\n let current: any = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (typeof current[keys[i]] !== 'object' || current[keys[i]] == null) {\n current[keys[i]] = {};\n }\n\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return current;\n }\n\n public override on<K extends keyof UseStorageEvents<T>>(\n eventName: K,\n callback: (this: useStorage<T>, ...args: UseStorageEvents<T>[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [this.data]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { Provider } from '../types/client.js';\nimport { StreamElements } from '../types/streamelements/main.js';\nimport { EventProvider } from '../modules/EventProvider.js';\nimport { useStorage } from '../modules/useStorage.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\nimport { Alejo } from '../utils/alejo.js';\n\ntype ClientEvents = {\n load: [event: StreamElements.Event.onWidgetLoad];\n action: [action: Button | Command, type: 'created' | 'executed' | 'removed'];\n session: [session: StreamElements.Session.Data];\n event:\n | [provider: 'streamelements', event: StreamElements.Event.Provider.StreamElements.Events]\n | [provider: 'twitch', event: StreamElements.Event.Provider.Twitch.Events]\n | [provider: 'youtube', event: StreamElements.Event.Provider.YouTube.Events]\n | [provider: 'kick', event: StreamElements.Event.Provider.Kick.Events]\n | [provider: 'facebook', event: StreamElements.Event.Provider.Facebook.Events];\n};\n\nexport type ClientStorageOptions<T> = {\n value: T;\n timestamp: number;\n expire: number;\n};\n\nexport type ClientStorage = {\n user: Record<string, ClientStorageOptions<string>>;\n avatar: Record<string, ClientStorageOptions<string>>;\n pronoun: Record<string, ClientStorageOptions<Alejo.Pronouns.name>>;\n emote: Record<string, ClientStorageOptions<string>>;\n};\n\nexport type ClientOptions = {\n id?: string;\n debug?: boolean | (() => boolean);\n};\n\nexport class Client extends EventProvider<ClientEvents> {\n public id: string = 'default';\n public debug: boolean = false;\n\n public storage!: useStorage<ClientStorage>;\n\n public fields: StreamElements.Event.onWidgetLoad['fieldData'] = {};\n\n public session!: StreamElements.Session.Data;\n\n public loaded: boolean = false;\n\n constructor(options: ClientOptions) {\n super();\n\n this.id = options.id || this.id;\n\n this.storage = new useStorage<ClientStorage>({\n id: this.id,\n data: {\n user: {},\n avatar: {},\n pronoun: {},\n emote: {},\n },\n });\n\n this.on('load', () => {\n this.debug = Boolean(typeof options.debug === 'function' ? options.debug() : options.debug);\n });\n\n window.client = this;\n }\n\n public actions: {\n commands: Command[];\n buttons: Button[];\n } = {\n commands: [],\n buttons: [],\n };\n\n public details!: {\n provider: Provider | 'local';\n user: StreamElements.Event.onWidgetLoad['channel'];\n currency: StreamElements.Event.onWidgetLoad['currency'];\n overlay: StreamElements.Event.onWidgetLoad['overlay'];\n };\n\n public cache: {\n /**\n * Avatar cache duration in minutes.\n */\n avatar: number;\n /**\n * Pronoun cache duration in minutes.\n */\n pronoun: number;\n /**\n * Emote cache duration in minutes.\n */\n emote: number;\n } = {\n avatar: 30,\n pronoun: 60,\n emote: 120,\n };\n\n override on<K extends keyof ClientEvents>(\n eventName: K,\n callback: (this: Client, ...args: ClientEvents[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [\n {\n channel: this.details.user,\n currency: this.details.currency,\n fieldData: this.fields,\n recents: [],\n session: {\n data: this.session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: this.details.overlay,\n emulated: false,\n } as StreamElements.Event.onWidgetLoad,\n ] as unknown as ClientEvents[K]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport { Client } from '../client/client.js';\nimport { logger } from '../main.js';\n\ninterface CommandOptions {\n prefix?: string;\n name: string;\n description?: string;\n arguments?: boolean;\n run: (this: Client, args: string[], event: CommandEvent) => void;\n test?: string;\n aliases?: string[];\n permissions?: string[] | boolean;\n admins?: string[];\n}\n\ntype CommandEvent =\n | { provider: 'twitch'; data: StreamElements.Event.Provider.Twitch.Message }\n | { provider: 'youtube'; data: StreamElements.Event.Provider.YouTube.Message }\n | { provider: 'kick'; data: any };\n\nexport class Command {\n prefix: string = '!';\n\n name!: string;\n description!: string;\n\n arguments: boolean = false;\n\n test: string | (() => string) = `${this.prefix}${this.name} arg1 arg2`;\n\n aliases: string[] = [];\n permissions?: string[] | boolean = undefined;\n admins: string[] = [];\n\n constructor(options: CommandOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.prefix = options.prefix ?? this.prefix;\n this.name = options.name;\n this.description = options.description ?? this.description;\n this.arguments = options.arguments ?? this.arguments;\n\n this.run = options.run;\n\n this.test = options.test ?? this.test;\n this.aliases = options.aliases ?? this.aliases;\n this.permissions = options.permissions ?? this.permissions;\n this.admins = options.admins ?? this.admins;\n\n // Register the command in the client actions\n window.client.actions.commands.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n run(this: Client, args: string[], event: CommandEvent): void {}\n\n verify(nickname: string, roles: string[], args: string[]): boolean {\n if (this.arguments === true && (!args || !args.length)) {\n return false;\n }\n\n if (this.admins.some((a) => nickname.toLocaleLowerCase() === a.toLocaleLowerCase())) {\n return true;\n }\n\n if (this.permissions === true || typeof this.permissions === 'undefined' || (Array.isArray(this.permissions) && !this.permissions.length)) {\n return true;\n }\n\n if (\n Array.isArray(this.permissions) &&\n (this.permissions.some((p) => nickname.toLowerCase() === p.toLowerCase() || roles.map((r) => r.toLowerCase()).includes(p.toLowerCase())) ||\n this.permissions.includes('*'))\n ) {\n return true;\n }\n\n return false;\n }\n\n parse(text: string, event: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const args = text\n .replace(this.prefix, '')\n .split(' ')\n .slice(1)\n .map((a) => a.trim());\n\n var nickname: string = '';\n var roles: string[] = [];\n\n const rAliases = { bits: 'cheer', premium: 'prime' };\n\n switch (event.provider) {\n case 'twitch': {\n const data = event.data;\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n if (data.event.data.tags?.badges) {\n const tags = data.event.data.tags.badges.toString().replace(/\\/\\d+/g, '').split(',');\n\n roles = tags.map((t) => (t in rAliases ? rAliases[t as keyof typeof rAliases] : t));\n }\n\n break;\n }\n case 'youtube': {\n const data = event.data;\n\n const rMap = {\n isVerified: 'verified',\n isChatOwner: 'owner',\n isChatSponsor: 'sponsor',\n isChatModerator: 'moderator',\n };\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n roles = Object.entries(data.event.data.authorDetails)\n .filter(([k, v]) => k.startsWith('is') && v)\n .map(([k]) => rMap[k as keyof typeof rMap])\n .filter(Boolean);\n\n if (roles.includes('sponsor')) {\n roles.push('premium');\n roles.push('prime');\n }\n if (roles.includes('owner')) {\n roles.push('moderator');\n roles.push('broadcaster');\n }\n\n break;\n }\n case 'kick': {\n return false;\n\n break;\n }\n }\n\n const verify = this.verify(nickname, roles, args);\n\n if (verify === true) {\n this.run.apply(window.client, [args, event]);\n }\n\n return verify;\n }\n\n remove(): void {\n if (!(window.client instanceof Client)) return;\n\n const index = window.client.actions.commands.indexOf(this);\n\n if (index > -1) {\n window.client.actions.commands.splice(index, 1);\n window.client.emit('action', this, 'removed');\n }\n }\n\n static execute(received: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const data = received.data;\n\n try {\n if (window.client.actions.commands.length && window.client.actions.commands.some((c) => data.event.data.text.startsWith(c.prefix))) {\n const commands = window.client.actions.commands.filter((c) => {\n var nameAndAliases = [c.name, ...(c.aliases ?? [])];\n var commandMatch = data.event.data.text.replace(c.prefix, '').split(' ')[0];\n\n return nameAndAliases.includes(commandMatch);\n });\n\n if (commands.length && commands.every((command) => command instanceof Command)) {\n commands.forEach((command) => {\n command.parse(data.event.data.text, received);\n\n window.client.emit('action', command, 'executed');\n\n logger.received(`Command executed: ${data.event.data.text} by ${data.event.data.nick || data.event.data.displayName}`, data);\n });\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","export const css_color_names = [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n];\n\nexport default css_color_names;\n","import { css_color_names } from '../data/collection/css.js';\n\n/**\n * Parse a color string to RGBA components\n * @param str - color string\n * @param format - format of the input color string\n * @returns - RGBA components or null if parsing fails\n */\nexport function parseToRGBA(str: string, format: string | false): { r: number; g: number; b: number; a: number } | null {\n if (!format) return null;\n\n switch (format) {\n case 'hex': {\n const hex = str.replace('#', '');\n let r = 0,\n g = 0,\n b = 0,\n a = 1;\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n } else if (hex.length === 4) {\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n a = parseInt(hex[3] + hex[3], 16) / 255;\n } else if (hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n a = parseInt(hex.slice(6, 8), 16) / 255;\n }\n\n return { r, g, b, a };\n }\n\n case 'rgb':\n case 'rgba': {\n const match = str.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)/);\n if (!match) return null;\n\n return {\n r: parseInt(match[1]),\n g: parseInt(match[2]),\n b: parseInt(match[3]),\n a: match[4] ? parseFloat(match[4]) : 1,\n };\n }\n\n case 'hsl':\n case 'hsla': {\n const match = str.match(/hsla?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)/);\n if (!match) return null;\n\n const h = parseInt(match[1]);\n const s = parseInt(match[2]);\n const l = parseInt(match[3]);\n const a = match[4] ? parseFloat(match[4]) : 1;\n\n const rgb = hslToRgb(h, s, l);\n return { ...rgb, a };\n }\n\n case 'css-color-name': {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n ctx.fillStyle = str;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data;\n\n return { r, g, b, a: 1 };\n }\n\n default:\n return null;\n }\n}\n\n/**\n * Convert RGBA to Hex\n * @param rgba - RGBA components\n * @param includeAlpha - Whether to include alpha in the hex string\n * @returns Hex color string\n */\nexport function rgbaToHex(rgba: { r: number; g: number; b: number; a: number }, includeAlpha: boolean = true): string {\n const toHex = (n: number) => Math.round(n).toString(16).padStart(2, '0');\n\n let hex = `#${toHex(rgba.r)}${toHex(rgba.g)}${toHex(rgba.b)}`;\n\n if (includeAlpha && rgba.a < 1) {\n hex += toHex(rgba.a * 255);\n }\n\n return hex;\n}\n\n/**\n * Convert RGB to HSL\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns HSL components\n */\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (delta !== 0) {\n s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / delta + 2) / 6;\n break;\n case b:\n h = ((r - g) / delta + 4) / 6;\n break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/**\n * Convert HSL to RGB\n * @param h - Hue (0-360)\n * @param s - Saturation (0-100)\n * @param l - Lightness (0-100)\n * @returns RGB components\n */\nexport function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n\n/**\n * Find the closest CSS color name to the given RGB values\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns Closest CSS color name\n */\nexport async function findClosestColorName(r: number, g: number, b: number): Promise<string> {\n const cssColors = css_color_names;\n\n let closestColor = cssColors[0];\n let minDistance = Infinity;\n\n for await (const colorName of cssColors) {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const ctx = canvas.getContext('2d');\n\n if (!ctx) continue;\n\n ctx.fillStyle = colorName;\n ctx.fillRect(0, 0, 1, 1);\n\n const [cr, cg, cb] = ctx.getImageData(0, 0, 1, 1).data;\n\n const distance = Math.sqrt(Math.pow(r - cr, 2) + Math.pow(g - cg, 2) + Math.pow(b - cb, 2));\n\n if (distance < minDistance) {\n minDistance = distance;\n closestColor = colorName;\n }\n\n if (distance === 0) break;\n }\n\n return closestColor;\n}\n","export const avatars = [\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/13e5fa74-defa-11e9-809c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/dbdc9198-def8-11e9-8681-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/998f01ae-def8-11e9-b95c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/de130ab0-def7-11e9-b668-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ebe4cd89-b4f4-4cd9-adac-2f30151b4209-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/215b7342-def9-11e9-9a66-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ead5c8b2-a4c9-4724-b1dd-9f00b46cbd3d-profile_image-300x300.png',\n];\n\nexport default avatars;\n","import { Twitch } from '../../types/twitch.js';\n\nexport const badges: Record<Twitch.roles, Twitch.badge> = {\n '100 bits': {\n type: '100 bits',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3',\n description: '100 bits badge',\n },\n 'no audio': {\n type: 'no audio',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/aef2cd08-f29b-45a1-8c12-d44d7fd5e6f0/3',\n description: 'Individuals with unreliable or no sound can select this badge',\n },\n 'no video': {\n type: 'no video',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/199a0dba-58f3-494e-a7fc-1fa0a1001fb8/3',\n description: 'Individuals with unreliable or no video can select this badge',\n },\n 'bot': {\n type: 'bot',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/df9095f6-a8a0-4cc2-bb33-d908c0adffb8/3',\n description: 'Twitch bot',\n },\n 'twitch staff': {\n type: 'twitch staff',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d97c37bd-a6f5-4c38-8f57-4e4bef88af34/3',\n description: 'Twitch Staff',\n },\n 'admins': {\n type: 'admins',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/9ef7e029-4cdf-4d4d-a0d5-e2b3fb2583fe/3',\n description: 'Admins',\n },\n 'artist': {\n type: 'artist',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/4300a897-03dc-4e83-8c0e-c332fee7057f/3',\n description: 'Artist',\n },\n 'game developer': {\n type: 'game developer',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/85856a4a-eb7d-4e26-a43e-d204a977ade4/3',\n description: 'Game Developer',\n },\n 'prime': {\n type: 'prime',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/a1dd5073-19c3-4911-8cb4-c464a7bc1510/3',\n description: 'Prime',\n },\n 'turbo': {\n type: 'turbo',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/bd444ec6-8f34-4bf9-91f4-af1e3428d80f/3',\n description: 'Turbo',\n },\n 'subscriber': {\n type: 'subscriber',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5d9f2208-5dd8-11e7-8513-2ff4adfae661/3',\n description: 'Subscriber',\n },\n 'broadcaster': {\n type: 'broadcaster',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5527c58c-fb7d-422d-b71b-f309dcb85cc1/3',\n description: 'Broadcaster',\n },\n 'verified': {\n type: 'verified',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/3',\n description: 'Verified',\n },\n 'moderator': {\n type: 'moderator',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3',\n description: 'Moderator',\n },\n 'vip': {\n type: 'vip',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3',\n description: 'VIP',\n },\n};\n\nexport default badges;\n","import { BttvEmote, SeventvEmote, TwitchEmote } from '../../types/emote.js';\n\nexport const emotes: Array<TwitchEmote | BttvEmote | SeventvEmote> = Object.values([\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/3.0',\n },\n 'start': 0,\n 'end': 13,\n },\n {\n 'type': 'twitch',\n 'name': 'BrainSlug',\n 'id': '115233',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/3.0',\n },\n 'start': 14,\n 'end': 23,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/3.0',\n },\n 'start': 24,\n 'end': 32,\n },\n {\n 'type': 'twitch',\n 'name': 'TakeNRG',\n 'id': '112292',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/3.0',\n },\n 'start': 33,\n 'end': 40,\n },\n {\n 'type': 'twitch',\n 'name': 'DxCat',\n 'id': '110734',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/3.0',\n },\n 'start': 41,\n 'end': 46,\n },\n {\n 'type': 'twitch',\n 'name': 'VoHiYo',\n 'id': '81274',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/3.0',\n },\n 'start': 47,\n 'end': 53,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/3.0',\n },\n 'start': 54,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'KomodoHype',\n 'id': '81273',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/3.0',\n },\n 'start': 66,\n 'end': 76,\n },\n {\n 'type': 'twitch',\n 'name': 'duDudu',\n 'id': '62834',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/3.0',\n },\n 'start': 77,\n 'end': 83,\n },\n {\n 'type': 'twitch',\n 'name': 'CoolCat',\n 'id': '58127',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/3.0',\n },\n 'start': 84,\n 'end': 91,\n },\n {\n 'type': 'twitch',\n 'name': 'KappaPride',\n 'id': '55338',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/3.0',\n },\n 'start': 92,\n 'end': 102,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/3.0',\n },\n 'start': 103,\n 'end': 113,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/3.0',\n },\n 'start': 114,\n 'end': 124,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/3.0',\n },\n 'start': 125,\n 'end': 131,\n },\n {\n 'type': 'twitch',\n 'name': 'Kappa',\n 'id': '25',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/3.0',\n },\n 'start': 132,\n 'end': 137,\n },\n {\n 'type': 'twitch',\n 'name': 'MrDestructoid',\n 'id': '28',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/3.0',\n },\n 'start': 138,\n 'end': 151,\n },\n {\n 'type': 'twitch',\n 'name': '<3',\n 'id': '9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/3.0',\n },\n 'start': 152,\n 'end': 154,\n },\n {\n 'type': 'twitch',\n 'name': 'HSWP',\n 'id': '446979',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/3.0',\n },\n 'start': 155,\n 'end': 159,\n },\n {\n 'type': 'twitch',\n 'name': 'Shush',\n 'id': 'emotesv2_819621bcb8f44566a1bd8ea63d06c58f',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/3.0',\n },\n 'start': 160,\n 'end': 165,\n },\n {\n 'type': 'twitch',\n 'name': 'IronmouseLuv',\n 'id': 'emotesv2_54c53ae67ad746d2bc866b6fc779183c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/3.0',\n },\n 'start': 166,\n 'end': 178,\n },\n\n {\n 'type': 'twitch',\n 'name': 'KPOPTT',\n 'id': '304047269',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/3.0',\n },\n 'start': 0,\n 'end': 5,\n },\n {\n 'type': 'twitch',\n 'name': 'FrogPonder',\n 'id': 'emotesv2_a3cdcbfcae9b41bb8215b012362eea35',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/3.0',\n },\n 'start': 7,\n 'end': 16,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeCheer',\n 'id': 'emotesv2_dd4f4f9cea1a4039ad3390e20900abe4',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/3.0',\n },\n 'start': 18,\n 'end': 26,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeFail',\n 'id': 'emotesv2_0330a84e75ad48c1821c1d29a7dadd4d',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/3.0',\n },\n 'start': 28,\n 'end': 35,\n },\n {\n 'type': 'twitch',\n 'name': 'HypePopcorn',\n 'id': 'emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/3.0',\n },\n 'start': 37,\n 'end': 47,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/3.0',\n },\n 'start': 49,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/3.0',\n },\n 'start': 66,\n 'end': 80,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/3.0',\n },\n 'start': 81,\n 'end': 95,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/3.0',\n },\n 'start': 96,\n 'end': 108,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/3.0',\n },\n 'start': 109,\n 'end': 122,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/3.0',\n },\n 'start': 123,\n 'end': 139,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/3.0',\n },\n 'start': 140,\n 'end': 148,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/3.0',\n },\n 'start': 149,\n 'end': 162,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/3.0',\n },\n 'start': 163,\n 'end': 175,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/3.0',\n },\n 'start': 176,\n 'end': 184,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/3.0',\n },\n 'start': 185,\n 'end': 194,\n },\n {\n 'type': 'twitch',\n 'name': 'SoonerLater',\n 'id': '2113050',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/3.0',\n },\n 'start': 195,\n 'end': 206,\n },\n {\n 'type': 'twitch',\n 'name': 'FBCatch',\n 'id': '1441281',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/3.0',\n },\n 'start': 207,\n 'end': 214,\n },\n {\n 'type': 'twitch',\n 'name': 'FBBlock',\n 'id': '1441276',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/3.0',\n },\n 'start': 215,\n 'end': 222,\n },\n {\n 'type': 'twitch',\n 'name': 'PixelBob',\n 'id': '1547903',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/3.0',\n },\n 'start': 223,\n 'end': 231,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/3.0',\n },\n 'start': 232,\n 'end': 235,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/3.0',\n },\n 'start': 236,\n 'end': 244,\n },\n {\n 'type': 'twitch',\n 'name': 'PopCorn',\n 'id': '724216',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/3.0',\n },\n 'start': 245,\n 'end': 252,\n },\n {\n 'type': 'twitch',\n 'name': 'EarthDay',\n 'id': '959018',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/3.0',\n },\n 'start': 253,\n 'end': 261,\n },\n {\n 'type': 'twitch',\n 'name': 'TwitchUnity',\n 'id': '196892',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/3.0',\n },\n 'start': 262,\n 'end': 273,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid4',\n 'id': '191767',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/3.0',\n },\n 'start': 274,\n 'end': 280,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid3',\n 'id': '191764',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/3.0',\n },\n 'start': 281,\n 'end': 287,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid2',\n 'id': '191763',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/3.0',\n },\n 'start': 288,\n 'end': 294,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid1',\n 'id': '191762',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/3.0',\n },\n 'start': 295,\n 'end': 301,\n },\n {\n 'type': 'twitch',\n 'name': 'CrreamAwk',\n 'id': '191313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/3.0',\n },\n 'start': 302,\n 'end': 311,\n },\n {\n 'type': 'twitch',\n 'name': 'DinoDance',\n 'id': 'emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/3.0',\n },\n 'start': 46,\n 'end': 55,\n },\n {\n 'type': 'twitch',\n 'name': 'PopNemo',\n 'id': 'emotesv2_5d523adb8bbb4786821cd7091e47da21',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/3.0',\n },\n 'start': 56,\n 'end': 63,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/3.0',\n },\n 'start': 0,\n 'end': 15,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/3.0',\n },\n 'start': 17,\n 'end': 30,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/3.0',\n },\n 'start': 32,\n 'end': 45,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/3.0',\n },\n 'start': 47,\n 'end': 58,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/3.0',\n },\n 'start': 60,\n 'end': 72,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/3.0',\n },\n 'start': 74,\n 'end': 89,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/3.0',\n },\n 'start': 91,\n 'end': 98,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/3.0',\n },\n 'start': 100,\n 'end': 112,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/3.0',\n },\n 'start': 114,\n 'end': 125,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/3.0',\n },\n 'start': 127,\n 'end': 134,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/3.0',\n },\n 'start': 136,\n 'end': 144,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/3.0',\n },\n 'start': 146,\n 'end': 153,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/3.0',\n },\n 'start': 155,\n 'end': 157,\n },\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/3.0',\n },\n 'start': 159,\n 'end': 171,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/3.0',\n },\n 'start': 173,\n 'end': 180,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/3.0',\n },\n 'start': 182,\n 'end': 192,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/3.0',\n },\n 'start': 194,\n 'end': 199,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/3.0',\n },\n 'start': 201,\n 'end': 210,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/3.0',\n },\n 'start': 223,\n 'end': 232,\n },\n {\n 'type': '7tv',\n 'name': 'CookieTime',\n 'id': '635b0184ea9ce7391cbf77d6',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/1x.webp',\n '2': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/2x.webp',\n '3': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/3x.webp',\n '4': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/4x.webp',\n },\n 'start': 0,\n 'end': 10,\n 'coords': {\n 'x': 0,\n 'y': 0,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'catJAM',\n 'id': '5f1b0186cf6d2144653d2970',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/1x',\n '2': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/2x',\n '4': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/3x',\n },\n 'start': 0,\n 'end': 6,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': ':tf:',\n 'id': '54fa8f1401e468494b85b537',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/3x',\n },\n 'start': 7,\n 'end': 11,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'AngelThump',\n 'id': '566ca1a365dbbdab32ec055b',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/1x',\n '2': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/2x',\n '4': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/3x',\n },\n 'start': 12,\n 'end': 22,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 334,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ariW',\n 'id': '56fa09f18eff3b595e93ac26',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/1x',\n '2': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/2x',\n '4': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x',\n },\n 'start': 23,\n 'end': 27,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'BroBalt',\n 'id': '54fbf00a01abde735115de5c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/3x',\n },\n 'start': 28,\n 'end': 35,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 184,\n 'height': 120,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bttvNice',\n 'id': '54fab7d2633595ca4c713abf',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/1x',\n '2': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/2x',\n '4': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/3x',\n },\n 'start': 36,\n 'end': 44,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 168,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bUrself',\n 'id': '566c9f3b65dbbdab32ec052e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/3x',\n },\n 'start': 45,\n 'end': 52,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'c!',\n 'id': '6468f7acaee1f7f47567708e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/1x',\n '2': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/2x',\n '4': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/3x',\n },\n 'start': 53,\n 'end': 55,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CandianRage',\n 'id': '54fbf09c01abde735115de61',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/3x',\n },\n 'start': 56,\n 'end': 67,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CiGrip',\n 'id': '54fa8fce01e468494b85b53c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/3x',\n },\n 'start': 68,\n 'end': 74,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ConcernDoge',\n 'id': '566c9f6365dbbdab32ec0532',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/3x',\n },\n 'start': 75,\n 'end': 86,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 101,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CruW',\n 'id': '55471c2789d53f2d12781713',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/1x',\n '2': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/2x',\n '4': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/3x',\n },\n 'start': 87,\n 'end': 91,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'cvHazmat',\n 'id': '5e76d338d6581c3724c0f0b2',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/1x',\n '2': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/2x',\n '4': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/3x',\n },\n 'start': 92,\n 'end': 100,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'D:',\n 'id': '55028cd2135896936880fdd7',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/1x',\n '2': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/2x',\n '4': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/3x',\n },\n 'start': 101,\n 'end': 103,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'haHAA',\n 'id': '555981336ba1901877765555',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/1x',\n '2': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/2x',\n '4': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/3x',\n },\n 'start': 104,\n 'end': 109,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'LuL',\n 'id': '567b00c61ddbe1786688a633',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/1x',\n '2': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/2x',\n '4': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/3x',\n },\n 'start': 110,\n 'end': 113,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'DuckerZ',\n 'id': '573d38b50ffbf6cc5cc38dc9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/1x',\n '2': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/2x',\n '4': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/3x',\n },\n 'start': 114,\n 'end': 121,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 149,\n 'height': 112,\n },\n },\n {\n 'type': 'ffz',\n 'name': 'CatBag',\n 'id': '25927',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.frankerfacez.com/emote/25927/1',\n '2': 'https://cdn.frankerfacez.com/emote/25927/2',\n '4': 'https://cdn.frankerfacez.com/emote/25927/4',\n },\n 'start': 122,\n 'end': 128,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 143,\n 'height': 128,\n },\n },\n]).reduce(\n (acc, emote) => {\n if (!acc.some((e) => e.name === emote.name)) {\n acc.push({\n ...emote,\n start: 0,\n end: 0,\n } as TwitchEmote | BttvEmote | SeventvEmote);\n }\n\n return acc;\n },\n [] as Array<TwitchEmote | BttvEmote | SeventvEmote>,\n);\n\nexport default emotes;\n","export const items: any[] = [];\n\nexport default items;\n","export const messages = [\n 'Hello everyone!',\n 'PogChamp',\n 'This stream is amazing!',\n 'catJAM catJAM catJAM',\n 'LUL that was funny',\n 'GG!',\n 'First time here, loving it!',\n 'DinoDance',\n 'Can we get some hype in chat?',\n 'TransgenderPride PansexualPride NonbinaryPride',\n 'POGGERS',\n 'I just followed! PogChamp',\n 'Great gameplay btw',\n 'LUL LUL LUL',\n 'This is so wholesome AngelThump',\n 'catJAM vibing',\n 'haHAA',\n 'Wait what just happened? D:',\n 'GlitchCat GlitchCat',\n 'Best stream on Twitch right now!',\n 'DarkMode gang where you at?',\n 'PogChamp PogChamp PogChamp PogChamp',\n 'Anyone else eating? DoritosChip',\n 'I love this community!',\n 'TheIlluminati confirmed',\n 'bUrself be yourself!',\n 'CookieTime nom nom',\n 'imGlitch technical difficulties',\n 'This music is fire catJAM',\n 'bttvNice',\n 'LesbianPride GayPride BisexualPride',\n 'SSSsss Minecraft time',\n 'PopNemo',\n 'Going to bed, good night everyone!',\n 'Just got here, what did I miss?',\n ':tf: trollface',\n 'ariW wave',\n 'BroBalt nice one',\n 'AsexualPride IntersexPride GenderFluidPride',\n 'This chat is moving so fast!',\n 'CandianRage',\n 'PunchTrees PunchTrees',\n 'CiGrip',\n 'ConcernDoge hmm',\n 'CruW salute',\n 'cvHazmat stay safe',\n 'DuckerZ quack',\n 'BloodTrail hunting time',\n 'CatBag kitty!',\n 'c! poggers',\n];\n\nexport default messages;\n","export const names = ['Local', 'Tixyel', 'Urie_s2', 'itzzcatt', 'BeniArts', 'Cupidiko', 'shy_madeit'];\n\nexport default names;\n","export const tiers = ['1000', '2000', '3000', 'prime'];\n\nexport default tiers;\n","export const tts = [\n 'Filiz',\n 'Astrid',\n 'Tatyana',\n 'Maxim',\n 'Carmen',\n 'Ines',\n 'Cristiano',\n 'Vitoria',\n 'Ricardo',\n 'Maja',\n 'Jan',\n 'Jacek',\n 'Ewa',\n 'Ruben',\n 'Lotte',\n 'Liv',\n 'Seoyeon',\n 'Takumi',\n 'Mizuki',\n 'Giorgio',\n 'Carla',\n 'Bianca',\n 'Karl',\n 'Dora',\n 'Mathieu',\n 'Celine',\n 'Chantal',\n 'Penelope',\n 'Miguel',\n 'Mia',\n 'Enrique',\n 'Conchita',\n 'Geraint',\n 'Salli',\n 'Matthew',\n 'Kimberly',\n 'Kendra',\n 'Justin',\n 'Joey',\n 'Joanna',\n 'Ivy',\n 'Raveena',\n 'Aditi',\n 'Emma',\n 'Brian',\n 'Amy',\n 'Russell',\n 'Nicole',\n 'Vicki',\n 'Marlene',\n 'Hans',\n 'Naja',\n 'Mads',\n 'Gwyneth',\n 'Zhiyu',\n 'Tracy',\n 'Danny',\n 'Huihui',\n 'Yaoyao',\n 'Kangkang',\n 'HanHan',\n 'Zhiwei',\n 'Asaf',\n 'An',\n 'Stefanos',\n 'Filip',\n 'Ivan',\n 'Heidi',\n 'Herena',\n 'Kalpana',\n 'Hemant',\n 'Matej',\n 'Andika',\n 'Rizwan',\n 'Lado',\n 'Valluvar',\n 'Linda',\n 'Heather',\n 'Sean',\n 'Michael',\n 'Karsten',\n 'Guillaume',\n 'Pattara',\n 'Jakub',\n 'Szabolcs',\n 'Hoda',\n 'Naayf',\n];\n\nexport default tts;\n","export const youtube_emotes = [\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/flower-rainbow-heart-red',\n 'shortcuts': [':pride-flower-rainbow-heart:'],\n 'searchTerms': ['pride-flower-rainbow-heart'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/8cF4z9clPGshgty6vT3ImAtx_CUvz3TMY-SAu_UKw-x1Z9-2KzcK4OuyAIROrKhyvcabrw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/8cF4z9clPGshgty6vT3ImAtx_CUvz3TMY-SAu_UKw-x1Z9-2KzcK4OuyAIROrKhyvcabrw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flower-rainbow-heart',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 0,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-green-earth-head',\n 'shortcuts': [':pride-person-earth-intersex:'],\n 'searchTerms': ['pride-person-earth-intersex'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Gr-3he7L8jjQFj7aI0kSY1eV4aIsy-vT7Hk5shdakigG9aAJO_uMBmV6haCtK1OHjTEjj1o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Gr-3he7L8jjQFj7aI0kSY1eV4aIsy-vT7Hk5shdakigG9aAJO_uMBmV6haCtK1OHjTEjj1o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-earth-intersex',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 1,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-heart-lesbian',\n 'shortcuts': [':pride-person-heart-lesbian:'],\n 'searchTerms': ['pride-person-heart-lesbian'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tKVZ2TfK5tMLvF88cnz2YNVwuHNgr0eDR9Ef8J0OCkZEHXLFUtH3f6-xSHhqhwd2sL3Tu4I=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tKVZ2TfK5tMLvF88cnz2YNVwuHNgr0eDR9Ef8J0OCkZEHXLFUtH3f6-xSHhqhwd2sL3Tu4I=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-heart-lesbian',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 2,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-flower-nonbinary',\n 'shortcuts': [':pride-person-flower-nonbinary:'],\n 'searchTerms': ['pride-person-flower-nonbinary'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/le1X4KHLOmK5K1s5xu-owmP_eZK4D0ExyjnMCS6UNqZa-Zh4uEzz3mZnU3jBlLfi14Zpngw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/le1X4KHLOmK5K1s5xu-owmP_eZK4D0ExyjnMCS6UNqZa-Zh4uEzz3mZnU3jBlLfi14Zpngw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-flower-nonbinary',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 3,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/flower-rainbow-heart-pansexual',\n 'shortcuts': [':pride-flower-pansexual:'],\n 'searchTerms': ['pride-flower-pansexual'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/blSdVv_UpdTn8BIWU6u9oCWhdtpc0-a-3dJeaRX9As6ftLc0OGPJ1PveQEJbUEDzf6by2Xi9=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/blSdVv_UpdTn8BIWU6u9oCWhdtpc0-a-3dJeaRX9As6ftLc0OGPJ1PveQEJbUEDzf6by2Xi9=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flower-pansexual',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 4,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/heart-stripes-pride-flag',\n 'shortcuts': [':pride-heart-rainbow-philly:'],\n 'searchTerms': ['pride-heart-rainbow-philly'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7iYeXsmU2YMcKsKalaKJhirWdDASATIpl_c7Ib7akaRhvz8GChI4xpM0d0dtASjmmWPbg1NG=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7iYeXsmU2YMcKsKalaKJhirWdDASATIpl_c7Ib7akaRhvz8GChI4xpM0d0dtASjmmWPbg1NG=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-heart-rainbow-philly',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 5,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/symbol-turquoise-flowers-transgender',\n 'shortcuts': [':pride-flowers-turquoise-transgender:'],\n 'searchTerms': ['pride-flowers-turquoise-transgender'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ovz1T6ay1D1GNFXwwYibZeu_rV5_iSRXWSHR2thQDLLWejVQMqWPUhsUWrMMw1tlBwllYA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ovz1T6ay1D1GNFXwwYibZeu_rV5_iSRXWSHR2thQDLLWejVQMqWPUhsUWrMMw1tlBwllYA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flowers-turquoise-transgender',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 6,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hand-rainbow-fan-open',\n 'shortcuts': [':pride-fan-rainbow-open:'],\n 'searchTerms': ['pride-fan-rainbow-open'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/lDH5aORWtlc42NxTwiP3aIUIjttLVvE4Q_xIJDuu55DKvYSLeDIysOEKtGuMmEtOLgvZ_zTX=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/lDH5aORWtlc42NxTwiP3aIUIjttLVvE4Q_xIJDuu55DKvYSLeDIysOEKtGuMmEtOLgvZ_zTX=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-fan-rainbow-open',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 7,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-pink-hair-earrings',\n 'shortcuts': [':pride-face-pink-earrings:'],\n 'searchTerms': ['pride-face-pink-earrings'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/utFog-w4fqgJ05xfQFjSdy8jvRBtFCeuWRkLH3IaVJ4WCBrdjDbXzXOprJA_h6MPOuksv0c=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/utFog-w4fqgJ05xfQFjSdy8jvRBtFCeuWRkLH3IaVJ4WCBrdjDbXzXOprJA_h6MPOuksv0c=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-pink-earrings',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 8,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/unicorn-white-rainbow-mane',\n 'shortcuts': [':pride-unicorn-rainbow-mane:'],\n 'searchTerms': ['pride-unicorn-rainbow-mane'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/fvdANfncTw5aDF8GBq20kHicN5rMVoCMTM3FY8MQbZH9sZXvHy5o48yvHZWN4No5rz8b7-0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/fvdANfncTw5aDF8GBq20kHicN5rMVoCMTM3FY8MQbZH9sZXvHy5o48yvHZWN4No5rz8b7-0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-unicorn-rainbow-mane',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 9,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/people-embracing-two',\n 'shortcuts': [':pride-people-embracing-two:'],\n 'searchTerms': ['pride-people-embracing-two'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/h1zJqFv2R4LzS3ZUpVyHhprCHQTIhbSecqu2Lid23byl5hD5cJdnshluOCyRdldYkWCUNg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/h1zJqFv2R4LzS3ZUpVyHhprCHQTIhbSecqu2Lid23byl5hD5cJdnshluOCyRdldYkWCUNg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-people-embracing-two',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 10,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-green-hair-tears',\n 'shortcuts': [':pride-face-green-tears:'],\n 'searchTerms': ['pride-face-green-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2BNf4_qBG7mqt1sN-JwThp1srHlDr03xoya9hpIvbgS65HwLaaDz46r3A6dy8JnO2GtLNag=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2BNf4_qBG7mqt1sN-JwThp1srHlDr03xoya9hpIvbgS65HwLaaDz46r3A6dy8JnO2GtLNag=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-green-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 11,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/megaphone-rainbow-handle',\n 'shortcuts': [':pride-megaphone-rainbow-handle:'],\n 'searchTerms': ['pride-megaphone-rainbow-handle'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cop1MU9YkEuUxbe8d1NhPl1S9uJ60YSVTMM1gelP7Cy0BICa6Ey_TpxEFFdYITtsUK1cSg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cop1MU9YkEuUxbe8d1NhPl1S9uJ60YSVTMM1gelP7Cy0BICa6Ey_TpxEFFdYITtsUK1cSg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-megaphone-rainbow-handle',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 12,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hand-brown-yellow-nails',\n 'shortcuts': [':pride-hand-yellow-nails:'],\n 'searchTerms': ['pride-hand-yellow-nails'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/1dEPlxkQ1RdZkPo5CLgYvneMQ-BBo63b3nnASEAXoccnVktMjgviKqMj1pjPiK2zTPTc7g=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/1dEPlxkQ1RdZkPo5CLgYvneMQ-BBo63b3nnASEAXoccnVktMjgviKqMj1pjPiK2zTPTc7g=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-hand-yellow-nails',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 13,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-orange-hair-flowing',\n 'shortcuts': [':pride-face-orange-flowing:'],\n 'searchTerms': ['pride-face-orange-flowing'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/RuhTeU8YiT0_NaOYjMmXv77eEw5eO5Bdzfr7ouS0u3ZAK2J4coKGe5g4fN8mJV85jC63hw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/RuhTeU8YiT0_NaOYjMmXv77eEw5eO5Bdzfr7ouS0u3ZAK2J4coKGe5g4fN8mJV85jC63hw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-orange-flowing',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 14,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/CIW60IPp_dYCFcuqTgodEu4IlQ',\n 'shortcuts': [':yt:'],\n 'searchTerms': ['yt'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/IkpeJf1g9Lq0WNjvSa4XFq4LVNZ9IP5FKW8yywXb12djo1OGdJtziejNASITyq4L0itkMNw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/IkpeJf1g9Lq0WNjvSa4XFq4LVNZ9IP5FKW8yywXb12djo1OGdJtziejNASITyq4L0itkMNw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'yt',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 15,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/CN2m5cKr49sCFYbFggodDFEKrg',\n 'shortcuts': [':oops:'],\n 'searchTerms': ['oops'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/PFoVIqIiFRS3aFf5-bt_tTC0WrDm_ylhF4BKKwgqAASNb7hVgx_adFP-XVhFiJLXdRK0EQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/PFoVIqIiFRS3aFf5-bt_tTC0WrDm_ylhF4BKKwgqAASNb7hVgx_adFP-XVhFiJLXdRK0EQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'oops',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 16,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/X_zdXMHgJaPa8gTGt4f4Ag',\n 'shortcuts': [':buffering:'],\n 'searchTerms': ['buffering'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5gfMEfdqO9CiLwhN9Mq7VI6--T2QFp8AXNNy5Fo7btfY6fRKkThWq35SCZ6SPMVCjg-sUA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5gfMEfdqO9CiLwhN9Mq7VI6--T2QFp8AXNNy5Fo7btfY6fRKkThWq35SCZ6SPMVCjg-sUA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'buffering',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 17,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/1v50XorRJ8GQ8gTz_prwAg',\n 'shortcuts': [':stayhome:'],\n 'searchTerms': ['stayhome'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_1FGHypiub51kuTiNBX1a0H3NyFih3TnHX7bHU06j_ajTzT0OQfMLl9RI1SiQoxtgA2Grg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_1FGHypiub51kuTiNBX1a0H3NyFih3TnHX7bHU06j_ajTzT0OQfMLl9RI1SiQoxtgA2Grg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'stayhome',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 18,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/8P50XuS9Oo7h8wSqtIagBA',\n 'shortcuts': [':dothefive:'],\n 'searchTerms': ['dothefive'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-nM0DOd49969h3GNcl705Ti1fIf1ZG_E3JxcOUVV-qPfCW6jY8xZ98caNLHkVSGRTSEb7Y9y=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-nM0DOd49969h3GNcl705Ti1fIf1ZG_E3JxcOUVV-qPfCW6jY8xZ98caNLHkVSGRTSEb7Y9y=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'dothefive',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 19,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Fv90Xq-vJcPq8gTqzreQAQ',\n 'shortcuts': [':elbowbump:'],\n 'searchTerms': ['elbowbump'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2ou58X5XuhTrxjtIM2wew1f-HKRhN_T5SILQgHE-WD9dySzzJdGwL4R1gpKiJXcbtq6sjQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2ou58X5XuhTrxjtIM2wew1f-HKRhN_T5SILQgHE-WD9dySzzJdGwL4R1gpKiJXcbtq6sjQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'elbowbump',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 20,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Iv90XouTLuOR8gSxxrToBA',\n 'shortcuts': [':goodvibes:'],\n 'searchTerms': ['goodvibes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2CvFOwgKpL29mW_C51XvaWa7Eixtv-3tD1XvZa1_WemaDDL2AqevKbTZ1rdV0OWcnOZRag=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2CvFOwgKpL29mW_C51XvaWa7Eixtv-3tD1XvZa1_WemaDDL2AqevKbTZ1rdV0OWcnOZRag=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'goodvibes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 21,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Rf90XtDbG8GQ8gTz_prwAg',\n 'shortcuts': [':thanksdoc:'],\n 'searchTerms': ['thanksdoc'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/bUnO_VwXW2hDf-Da8D64KKv6nBJDYUBuo13RrOg141g2da8pi9-KClJYlUDuqIwyPBfvOO8=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/bUnO_VwXW2hDf-Da8D64KKv6nBJDYUBuo13RrOg141g2da8pi9-KClJYlUDuqIwyPBfvOO8=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'thanksdoc',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 22,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/VP90Xv_wG82o8wTCi7CQAw',\n 'shortcuts': [':videocall:'],\n 'searchTerms': ['videocall'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/k5v_oxUzRWmTOXP0V6WJver6xdS1lyHMPcMTfxn23Md6rmixoR5RZUusFbZi1uZwjF__pv4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/k5v_oxUzRWmTOXP0V6WJver6xdS1lyHMPcMTfxn23Md6rmixoR5RZUusFbZi1uZwjF__pv4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'videocall',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 23,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/dv90XtfhAurw8gTgzar4DA',\n 'shortcuts': [':virtualhug:'],\n 'searchTerms': ['virtualhug'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/U1TjOZlqtS58NGqQhE8VWDptPSrmJNkrbVRp_8jI4f84QqIGflq2Ibu7YmuOg5MmVYnpevc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/U1TjOZlqtS58NGqQhE8VWDptPSrmJNkrbVRp_8jI4f84QqIGflq2Ibu7YmuOg5MmVYnpevc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'virtualhug',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 24,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hf90Xv-jHeOR8gSxxrToBA',\n 'shortcuts': [':yougotthis:'],\n 'searchTerms': ['yougotthis'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/s3uOe4lUx3iPIt1h901SlMp_sKCTp3oOVj1JV8izBw_vDVLxFqk5dq-3NX-nK_gnUwVEXld3=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/s3uOe4lUx3iPIt1h901SlMp_sKCTp3oOVj1JV8izBw_vDVLxFqk5dq-3NX-nK_gnUwVEXld3=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'yougotthis',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 25,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/lP90XvOhCZGl8wSO1JmgAw',\n 'shortcuts': [':sanitizer:'],\n 'searchTerms': ['sanitizer'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EJ_8vc4Gl-WxCWBurHwwWROAHrPzxgePodoNfkRY1U_I8L1O2zlqf7-wfUtTeyzq2qHNnocZ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EJ_8vc4Gl-WxCWBurHwwWROAHrPzxgePodoNfkRY1U_I8L1O2zlqf7-wfUtTeyzq2qHNnocZ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'sanitizer',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 26,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/uP90Xq6wNYrK8gTUoo3wAg',\n 'shortcuts': [':takeout:'],\n 'searchTerms': ['takeout'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FizHI5IYMoNql9XeP7TV3E0ffOaNKTUSXbjtJe90e1OUODJfZbWU37VqBbTh-vpyFHlFIS0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FizHI5IYMoNql9XeP7TV3E0ffOaNKTUSXbjtJe90e1OUODJfZbWU37VqBbTh-vpyFHlFIS0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'takeout',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 27,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/fAF1XtDQMIrK8gTUoo3wAg',\n 'shortcuts': [':hydrate:'],\n 'searchTerms': ['hydrate'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tpgZgmhX8snKniye36mnrDVfTnlc44EK92EPeZ0m9M2EPizn1vKEGJzNYdp7KQy6iNZlYDc1=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tpgZgmhX8snKniye36mnrDVfTnlc44EK92EPeZ0m9M2EPizn1vKEGJzNYdp7KQy6iNZlYDc1=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hydrate',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 28,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/vQF1XpyaG_XG8gTs77bACQ',\n 'shortcuts': [':chillwcat:'],\n 'searchTerms': ['chillwcat'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/y03dFcPc1B7CO20zgQYzhcRPka5Bhs6iSg57MaxJdhaLidFvvXBLf_i4_SHG7zJ_2VpBMNs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/y03dFcPc1B7CO20zgQYzhcRPka5Bhs6iSg57MaxJdhaLidFvvXBLf_i4_SHG7zJ_2VpBMNs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'chillwcat',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 29,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ygF1XpGUMMjk8gSDrI2wCw',\n 'shortcuts': [':chillwdog:'],\n 'searchTerms': ['chillwdog'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Ir9mDxzUi0mbqyYdJ3N9Lq7bN5Xdt0Q7fEYFngN3GYAcJT_tccH1as1PKmInnpt2cbWOam4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Ir9mDxzUi0mbqyYdJ3N9Lq7bN5Xdt0Q7fEYFngN3GYAcJT_tccH1as1PKmInnpt2cbWOam4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'chillwdog',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 30,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/8gF1Xp_zK8jk8gSDrI2wCw',\n 'shortcuts': [':elbowcough:'],\n 'searchTerms': ['elbowcough'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DTR9bZd1HOqpRJyz9TKiLb0cqe5Hb84Yi_79A6LWlN1tY-5kXqLDXRmtYVKE9rcqzEghmw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DTR9bZd1HOqpRJyz9TKiLb0cqe5Hb84Yi_79A6LWlN1tY-5kXqLDXRmtYVKE9rcqzEghmw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'elbowcough',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 31,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/EAJ1XrS7PMGQ8gTz_prwAg',\n 'shortcuts': [':learning:'],\n 'searchTerms': ['learning'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ZuBuz8GAQ6IEcQc7CoJL8IEBTYbXEvzhBeqy1AiytmhuAT0VHjpXEjd-A5GfR4zDin1L53Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ZuBuz8GAQ6IEcQc7CoJL8IEBTYbXEvzhBeqy1AiytmhuAT0VHjpXEjd-A5GfR4zDin1L53Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'learning',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 32,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/JAJ1XpGpJYnW8wTupZu4Cw',\n 'shortcuts': [':washhands:'],\n 'searchTerms': ['washhands'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qXUeUW0KpKBc9Z3AqUqr_0B7HbW1unAv4qmt7-LJGUK_gsFBIaHISWJNt4n3yvmAnQNZHE-u=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qXUeUW0KpKBc9Z3AqUqr_0B7HbW1unAv4qmt7-LJGUK_gsFBIaHISWJNt4n3yvmAnQNZHE-u=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'washhands',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 33,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/PAJ1XsOOI4fegwOo57ewAg',\n 'shortcuts': [':socialdist:'],\n 'searchTerms': ['socialdist'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/igBNi55-TACUi1xQkqMAor-IEXmt8He56K7pDTG5XoTsbM-rVswNzUfC5iwnfrpunWihrg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/igBNi55-TACUi1xQkqMAor-IEXmt8He56K7pDTG5XoTsbM-rVswNzUfC5iwnfrpunWihrg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'socialdist',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 34,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/egJ1XufTKYfegwOo57ewAg',\n 'shortcuts': [':shelterin:'],\n 'searchTerms': ['shelterin'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/gjC5x98J4BoVSEPfFJaoLtc4tSBGSEdIlfL2FV4iJG9uGNykDP9oJC_QxAuBTJy6dakPxVeC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/gjC5x98J4BoVSEPfFJaoLtc4tSBGSEdIlfL2FV4iJG9uGNykDP9oJC_QxAuBTJy6dakPxVeC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'shelterin',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 35,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/G8AfY6yWGuKuhL0PlbiA2AE',\n 'shortcuts': [':hand-pink-waving:'],\n 'searchTerms': ['hand-pink-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/KOxdr_z3A5h1Gb7kqnxqOCnbZrBmxI2B_tRQ453BhTWUhYAlpg5ZP8IKEBkcvRoY8grY91Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/KOxdr_z3A5h1Gb7kqnxqOCnbZrBmxI2B_tRQ453BhTWUhYAlpg5ZP8IKEBkcvRoY8grY91Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-pink-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 36,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/KsIfY6LzFoLM6AKanYDQAg',\n 'shortcuts': [':face-blue-smiling:'],\n 'searchTerms': ['face-blue-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cktIaPxFwnrPwn-alHvnvedHLUJwbHi8HCK3AgbHpphrMAW99qw0bDfxuZagSY5ieE9BBrA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cktIaPxFwnrPwn-alHvnvedHLUJwbHi8HCK3AgbHpphrMAW99qw0bDfxuZagSY5ieE9BBrA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 37,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/W8IfY_bwAfiPq7IPvNCA2AU',\n 'shortcuts': [':face-red-droopy-eyes:'],\n 'searchTerms': ['face-red-droopy-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/oih9s26MOYPWC_uL6tgaeOlXSGBv8MMoDrWzBt-80nEiVSL9nClgnuzUAKqkU9_TWygF6CI=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/oih9s26MOYPWC_uL6tgaeOlXSGBv8MMoDrWzBt-80nEiVSL9nClgnuzUAKqkU9_TWygF6CI=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-droopy-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 38,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/b8IfY7zOK9iVkNAP_I2A-AY',\n 'shortcuts': [':face-purple-crying:'],\n 'searchTerms': ['face-purple-crying'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/g6_km98AfdHbN43gvEuNdZ2I07MmzVpArLwEvNBwwPqpZYzszqhRzU_DXALl11TchX5_xFE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/g6_km98AfdHbN43gvEuNdZ2I07MmzVpArLwEvNBwwPqpZYzszqhRzU_DXALl11TchX5_xFE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-crying',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 39,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hcIfY57lBJXp6AKBx4CoCA',\n 'shortcuts': [':text-green-game-over:'],\n 'searchTerms': ['text-green-game-over'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cr36FHhSiMAJUSpO9XzjbOgxhtrdJNTVJUlMJeOOfLOFzKleAKT2SEkZwbqihBqfTXYCIg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cr36FHhSiMAJUSpO9XzjbOgxhtrdJNTVJUlMJeOOfLOFzKleAKT2SEkZwbqihBqfTXYCIg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'text-green-game-over',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 40,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ssIfY7OFG5OykQOpn4CQCw',\n 'shortcuts': [':person-turqouise-waving:'],\n 'searchTerms': ['person-turqouise-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/uNSzQ2M106OC1L3VGzrOsGNjopboOv-m1bnZKFGuh0DxcceSpYHhYbuyggcgnYyaF3o-AQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/uNSzQ2M106OC1L3VGzrOsGNjopboOv-m1bnZKFGuh0DxcceSpYHhYbuyggcgnYyaF3o-AQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turqouise-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 41,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/xsIfY4OqCd2T29sP54iAsAw',\n 'shortcuts': [':face-green-smiling:'],\n 'searchTerms': ['face-green-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/G061SAfXg2bmG1ZXbJsJzQJpN8qEf_W3f5cb5nwzBYIV58IpPf6H90lElDl85iti3HgoL3o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/G061SAfXg2bmG1ZXbJsJzQJpN8qEf_W3f5cb5nwzBYIV58IpPf6H90lElDl85iti3HgoL3o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-green-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 42,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/2sIfY8vIG8z96ALulYDQDQ',\n 'shortcuts': [':face-orange-frowning:'],\n 'searchTerms': ['face-orange-frowning'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Ar8jaEIxzfiyYmB7ejDOHba2kUMdR37MHn_R39mtxqO5CD4aYGvjDFL22DW_Cka6LKzhGDk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Ar8jaEIxzfiyYmB7ejDOHba2kUMdR37MHn_R39mtxqO5CD4aYGvjDFL22DW_Cka6LKzhGDk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-frowning',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 43,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/7cIfY5niDOmSkNAP08CA6A4',\n 'shortcuts': [':eyes-purple-crying:'],\n 'searchTerms': ['eyes-purple-crying'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FrYgdeZPpvXs-6Mp305ZiimWJ0wV5bcVZctaUy80mnIdwe-P8HRGYAm0OyBtVx8EB9_Dxkc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FrYgdeZPpvXs-6Mp305ZiimWJ0wV5bcVZctaUy80mnIdwe-P8HRGYAm0OyBtVx8EB9_Dxkc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'eyes-purple-crying',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 44,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/A8MfY-_pEIKNr8oP78-AGA',\n 'shortcuts': [':face-fuchsia-wide-eyes:'],\n 'searchTerms': ['face-fuchsia-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/zdcOC1SMmyXJOAddl9DYeEFN9YYcn5mHemJCdRFQMtDuS0V-IyE-5YjNUL1tduX1zs17tQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/zdcOC1SMmyXJOAddl9DYeEFN9YYcn5mHemJCdRFQMtDuS0V-IyE-5YjNUL1tduX1zs17tQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 45,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/E8MfY5u7JPSXkNAP95GAmAE',\n 'shortcuts': [':cat-orange-whistling:'],\n 'searchTerms': ['cat-orange-whistling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/0ocqEmuhrKCK87_J21lBkvjW70wRGC32-Buwk6TP4352CgcNjL6ug8zcsel6JiPbE58xhq5g=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/0ocqEmuhrKCK87_J21lBkvjW70wRGC32-Buwk6TP4352CgcNjL6ug8zcsel6JiPbE58xhq5g=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'cat-orange-whistling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 46,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/LsMfY8P6G-yckNAPjoWA8AI',\n 'shortcuts': [':face-blue-wide-eyes:'],\n 'searchTerms': ['face-blue-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2Ht4KImoWDlCddiDQVuzSJwpEb59nZJ576ckfaMh57oqz2pUkkgVTXV8osqUOgFHZdUISJM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2Ht4KImoWDlCddiDQVuzSJwpEb59nZJ576ckfaMh57oqz2pUkkgVTXV8osqUOgFHZdUISJM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 47,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Z8MfY8mzLbnovwK5roC4Bg',\n 'shortcuts': [':face-orange-raised-eyebrow:'],\n 'searchTerms': ['face-orange-raised-eyebrow'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/JbCfmOgYI-mO17LPw8e_ycqbBGESL8AVP6i7ZsBOVLd3PEpgrfEuJ9rEGpP_unDcqgWSCg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/JbCfmOgYI-mO17LPw8e_ycqbBGESL8AVP6i7ZsBOVLd3PEpgrfEuJ9rEGpP_unDcqgWSCg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-raised-eyebrow',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 48,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hcMfY5_zAbbxvwKLooCoCA',\n 'shortcuts': [':face-fuchsia-tongue-out:'],\n 'searchTerms': ['face-fuchsia-tongue-out'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EURfJZi_heNulV3mfHzXBk8PIs9XmZ9lOOYi5za6wFMCGrps4i2BJX9j-H2gK6LIhW6h7sY=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EURfJZi_heNulV3mfHzXBk8PIs9XmZ9lOOYi5za6wFMCGrps4i2BJX9j-H2gK6LIhW6h7sY=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-tongue-out',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 49,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ygF1XpGUMMjk8gSDrI2wCx',\n 'shortcuts': [':face-orange-biting-nails:'],\n 'searchTerms': ['face-orange-biting-nails'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/HmsXEgqUogkQOnL5LP_FdPit9Z909RJxby-uYcPxBLNhaPyqPTcGwvGaGPk2hzB_cC0hs_pV=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/HmsXEgqUogkQOnL5LP_FdPit9Z909RJxby-uYcPxBLNhaPyqPTcGwvGaGPk2hzB_cC0hs_pV=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-biting-nails',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 50,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/m8MfY4jbFsWJhL0PyouA2Ak',\n 'shortcuts': [':face-red-heart-shape:'],\n 'searchTerms': ['face-red-heart-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/I0Mem9dU_IZ4a9cQPzR0pUJ8bH-882Eg0sDQjBmPcHA6Oq0uXOZcsjPvPbtormx91Ha2eRA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/I0Mem9dU_IZ4a9cQPzR0pUJ8bH-882Eg0sDQjBmPcHA6Oq0uXOZcsjPvPbtormx91Ha2eRA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-heart-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 51,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/6_cfY8HJH8bV5QS5yYDYDg',\n 'shortcuts': [':face-fuchsia-poop-shape:'],\n 'searchTerms': ['face-fuchsia-poop-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_xlyzvSimqMzhdhODyqUBLXIGA6F_d5en2bq-AIfc6fc3M7tw2jucuXRIo5igcW3g9VVe3A=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_xlyzvSimqMzhdhODyqUBLXIGA6F_d5en2bq-AIfc6fc3M7tw2jucuXRIo5igcW3g9VVe3A=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-poop-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 52,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/DfgfY9LaNdmMq7IPuI2AaA',\n 'shortcuts': [':face-purple-wide-eyes:'],\n 'searchTerms': ['face-purple-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5RDrtjmzRQKuVYE_FKPUHiGh7TNtX5eSNe6XzcSytMsHirXYKunxpyAsVacTFMg0jmUGhQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5RDrtjmzRQKuVYE_FKPUHiGh7TNtX5eSNe6XzcSytMsHirXYKunxpyAsVacTFMg0jmUGhQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 53,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/HvgfY93GEYmqvwLUuYDwAQ',\n 'shortcuts': [':glasses-purple-yellow-diamond:'],\n 'searchTerms': ['glasses-purple-yellow-diamond'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EnDBiuksboKsLkxp_CqMWlTcZtlL77QBkbjz_rLedMSDzrHmy_6k44YWFy2rk4I0LG6K2KI=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EnDBiuksboKsLkxp_CqMWlTcZtlL77QBkbjz_rLedMSDzrHmy_6k44YWFy2rk4I0LG6K2KI=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'glasses-purple-yellow-diamond',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 54,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/NvgfY9aeC_OFvOMPkrOAsAM',\n 'shortcuts': [':face-pink-tears:'],\n 'searchTerms': ['face-pink-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/RL5QHCNcO_Mc98SxFEblXZt9FNoh3bIgsjm0Kj8kmeQJWMeTu7JX_NpICJ6KKwKT0oVHhAA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/RL5QHCNcO_Mc98SxFEblXZt9FNoh3bIgsjm0Kj8kmeQJWMeTu7JX_NpICJ6KKwKT0oVHhAA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-pink-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 55,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/UvgfY_vqE92T29sPvqiAkAU',\n 'shortcuts': [':body-blue-raised-arms:'],\n 'searchTerms': ['body-blue-raised-arms'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2Jds3I9UKOfgjid97b_nlDU4X2t5MgjTof8yseCp7M-6ZhOhRkPGSPfYwmE9HjCibsfA1Uzo=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2Jds3I9UKOfgjid97b_nlDU4X2t5MgjTof8yseCp7M-6ZhOhRkPGSPfYwmE9HjCibsfA1Uzo=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-blue-raised-arms',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 56,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/YvgfY-LIBpjChgHKyYCQBg',\n 'shortcuts': [':hand-orange-covering-eyes:'],\n 'searchTerms': ['hand-orange-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/y8ppa6GcJoRUdw7GwmjDmTAnSkeIkUptZMVQuFmFaTlF_CVIL7YP7hH7hd0TJbd8p9w67IM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/y8ppa6GcJoRUdw7GwmjDmTAnSkeIkUptZMVQuFmFaTlF_CVIL7YP7hH7hd0TJbd8p9w67IM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-orange-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 57,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ePgfY-K2Kp6Mr8oP1oqAwAc',\n 'shortcuts': [':trophy-yellow-smiling:'],\n 'searchTerms': ['trophy-yellow-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7tf3A_D48gBg9g2N0Rm6HWs2aqzshHU4CuVubTXVxh1BP7YDBRC6pLBoC-ibvr-zCl_Lgg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7tf3A_D48gBg9g2N0Rm6HWs2aqzshHU4CuVubTXVxh1BP7YDBRC6pLBoC-ibvr-zCl_Lgg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'trophy-yellow-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 58,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/jPgfY5j2IIud29sP3ZeA4Ag',\n 'shortcuts': [':eyes-pink-heart-shape:'],\n 'searchTerms': ['eyes-pink-heart-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5vzlCQfQQdzsG7nlQzD8eNjtyLlnATwFwGvrMpC8dgLcosNhWLXu8NN9qIS3HZjJYd872dM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5vzlCQfQQdzsG7nlQzD8eNjtyLlnATwFwGvrMpC8dgLcosNhWLXu8NN9qIS3HZjJYd872dM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'eyes-pink-heart-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 59,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/oPgfY_DoKfSXkNAPq8-AgAo',\n 'shortcuts': [':face-turquoise-covering-eyes:'],\n 'searchTerms': ['face-turquoise-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/H2HNPRO8f4SjMmPNh5fl10okSETW7dLTZtuE4jh9D6pSmaUiLfoZJ2oiY-qWU3Owfm1IsXg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/H2HNPRO8f4SjMmPNh5fl10okSETW7dLTZtuE4jh9D6pSmaUiLfoZJ2oiY-qWU3Owfm1IsXg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 60,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/tPgfY7mSO4XovQKzmYCgCw',\n 'shortcuts': [':hand-green-crystal-ball:'],\n 'searchTerms': ['hand-green-crystal-ball'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qZfJrWDEmR03FIak7PMNRNpMjNsCnOzD9PqK8mOpAp4Kacn_uXRNJNb99tE_1uyEbvgJReF2=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qZfJrWDEmR03FIak7PMNRNpMjNsCnOzD9PqK8mOpAp4Kacn_uXRNJNb99tE_1uyEbvgJReF2=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-green-crystal-ball',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 61,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/zPgfY66lCJGRhL0Pz6iA4Aw',\n 'shortcuts': [':face-turquoise-drinking-coffee:'],\n 'searchTerms': ['face-turquoise-drinking-coffee'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/myqoI1MgFUXQr5fuWTC9mz0BCfgf3F8GSDp06o1G7w6pTz48lwARjdG8vj0vMxADvbwA1dA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/myqoI1MgFUXQr5fuWTC9mz0BCfgf3F8GSDp06o1G7w6pTz48lwARjdG8vj0vMxADvbwA1dA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-drinking-coffee',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 62,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/4PgfY73cJprKCq-_gIAO',\n 'shortcuts': [':body-green-covering-eyes:'],\n 'searchTerms': ['body-green-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/UR8ydcU3gz360bzDsprB6d1klFSQyVzgn-Fkgu13dIKPj3iS8OtG1bhBUXPdj9pMwtM00ro=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/UR8ydcU3gz360bzDsprB6d1klFSQyVzgn-Fkgu13dIKPj3iS8OtG1bhBUXPdj9pMwtM00ro=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-green-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 63,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/-fgfY9DIGYjbhgHLzoDIDw',\n 'shortcuts': [':goat-turquoise-white-horns:'],\n 'searchTerms': ['goat-turquoise-white-horns'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/jMnX4lu5GnjBRgiPtX5FwFmEyKTlWFrr5voz-Auko35oP0t3-zhPxR3PQMYa-7KhDeDtrv4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/jMnX4lu5GnjBRgiPtX5FwFmEyKTlWFrr5voz-Auko35oP0t3-zhPxR3PQMYa-7KhDeDtrv4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'goat-turquoise-white-horns',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 64,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/EvkfY6uNC5OykQOewoCQAQ',\n 'shortcuts': [':hand-purple-blue-peace:'],\n 'searchTerms': ['hand-purple-blue-peace'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-sC8wj6pThd7FNdslEoJlG4nB9SIbrJG3CRGh7-bNV0RVfcrJuwiWHoUZ6UmcVs7sQjxTg4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-sC8wj6pThd7FNdslEoJlG4nB9SIbrJG3CRGh7-bNV0RVfcrJuwiWHoUZ6UmcVs7sQjxTg4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-purple-blue-peace',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 65,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/LfkfY_zhH4GFr8oP4aKA6AI',\n 'shortcuts': [':face-blue-question-mark:'],\n 'searchTerms': ['face-blue-question-mark'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Wx4PMqTwG3f4gtR7J9Go1s8uozzByGWLSXHzrh3166ixaYRinkH_F05lslfsRUsKRvHXrDk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Wx4PMqTwG3f4gtR7J9Go1s8uozzByGWLSXHzrh3166ixaYRinkH_F05lslfsRUsKRvHXrDk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-question-mark',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 66,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/RPkfY8TPGsCakNAP-JWAoAQ',\n 'shortcuts': [':face-blue-covering-eyes:'],\n 'searchTerms': ['face-blue-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/kj3IgbbR6u-mifDkBNWVcdOXC-ut-tiFbDpBMGVeW79c2c54n5vI-HNYCOC6XZ9Bzgupc10=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/kj3IgbbR6u-mifDkBNWVcdOXC-ut-tiFbDpBMGVeW79c2c54n5vI-HNYCOC6XZ9Bzgupc10=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 67,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Mm5IY53bH7SEq7IP-MWAkAM',\n 'shortcuts': [':face-purple-smiling-fangs:'],\n 'searchTerms': ['face-purple-smiling-fangs'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/k1vqi6xoHakGUfa0XuZYWHOv035807ARP-ZLwFmA-_NxENJMxsisb-kUgkSr96fj5baBOZE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/k1vqi6xoHakGUfa0XuZYWHOv035807ARP-ZLwFmA-_NxENJMxsisb-kUgkSr96fj5baBOZE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-smiling-fangs',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 68,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/UW5IY-ibBqa8jgTymoCIBQ',\n 'shortcuts': [':face-purple-sweating:'],\n 'searchTerms': ['face-purple-sweating'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tRnrCQtEKlTM9YLPo0vaxq9mDvlT0mhDld2KI7e_nDRbhta3ULKSoPVHZ1-bNlzQRANmH90=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tRnrCQtEKlTM9YLPo0vaxq9mDvlT0mhDld2KI7e_nDRbhta3ULKSoPVHZ1-bNlzQRANmH90=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-sweating',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 69,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Ym5IY7-0LoqA29sPq9CAkAY',\n 'shortcuts': [':face-purple-smiling-tears:'],\n 'searchTerms': ['face-purple-smiling-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/MJV1k3J5s0hcUfuo78Y6MKi-apDY5NVDjO9Q7hL8fU4i0cIBgU-cU4rq4sHessJuvuGpDOjJ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/MJV1k3J5s0hcUfuo78Y6MKi-apDY5NVDjO9Q7hL8fU4i0cIBgU-cU4rq4sHessJuvuGpDOjJ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-smiling-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 70,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/dG5IY-mhEof9jgSykoCgBw',\n 'shortcuts': [':face-blue-star-eyes:'],\n 'searchTerms': ['face-blue-star-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/m_ANavMhp6cQ1HzX0HCTgp_er_yO2UA28JPbi-0HElQgnQ4_q5RUhgwueTpH-st8L3MyTA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/m_ANavMhp6cQ1HzX0HCTgp_er_yO2UA28JPbi-0HElQgnQ4_q5RUhgwueTpH-st8L3MyTA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-star-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 71,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hm5IY4W-H9SO5QS6n4CwCA',\n 'shortcuts': [':face-blue-heart-eyes:'],\n 'searchTerms': ['face-blue-heart-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/M9tzKd64_r3hvgpTSgca7K3eBlGuyiqdzzhYPp7ullFAHMgeFoNLA0uQ1dGxj3fXgfcHW4w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/M9tzKd64_r3hvgpTSgca7K3eBlGuyiqdzzhYPp7ullFAHMgeFoNLA0uQ1dGxj3fXgfcHW4w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-heart-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 72,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/mW5IY47PMcSnkMkPo6OAyAk',\n 'shortcuts': [':face-blue-three-eyes:'],\n 'searchTerms': ['face-blue-three-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/nSQHitVplLe5uZC404dyAwv1f58S3PN-U_799fvFzq-6b3bv-MwENO-Zs1qQI4oEXCbOJg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/nSQHitVplLe5uZC404dyAwv1f58S3PN-U_799fvFzq-6b3bv-MwENO-Zs1qQI4oEXCbOJg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-three-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 73,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/rW5IY_26FryOq7IPlL2A6Ao',\n 'shortcuts': [':face-blue-droopy-eyes:'],\n 'searchTerms': ['face-blue-droopy-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/hGPqMUCiXGt6zuX4dHy0HRZtQ-vZmOY8FM7NOHrJTta3UEJksBKjOcoE6ZUAW9sz7gIF_nk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/hGPqMUCiXGt6zuX4dHy0HRZtQ-vZmOY8FM7NOHrJTta3UEJksBKjOcoE6ZUAW9sz7gIF_nk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-droopy-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 74,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/v25IY7KcJIGOr8oPz4OA-As',\n 'shortcuts': [':planet-orange-purple-ring:'],\n 'searchTerms': ['planet-orange-purple-ring'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/xkaLigm3P4_1g4X1JOtkymcC7snuJu_C5YwIFAyQlAXK093X0IUjaSTinMTLKeRZ6280jXg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/xkaLigm3P4_1g4X1JOtkymcC7snuJu_C5YwIFAyQlAXK093X0IUjaSTinMTLKeRZ6280jXg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'planet-orange-purple-ring',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 75,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-podium-blue',\n 'shortcuts': [':person-yellow-podium-blue:'],\n 'searchTerms': ['person-yellow-podium-blue'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/N28nFDm82F8kLPAa-jY_OySFsn3Ezs_2Bl5kdxC8Yxau5abkj_XZHYsS3uYKojs8qy8N-9w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/N28nFDm82F8kLPAa-jY_OySFsn3Ezs_2Bl5kdxC8Yxau5abkj_XZHYsS3uYKojs8qy8N-9w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-yellow-podium-blue',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 76,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/baseball-white-cap-out',\n 'shortcuts': [':baseball-white-cap-out:'],\n 'searchTerms': ['baseball-white-cap-out'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/8DaGaXfaBN0c-ZsZ-1WqPJ6H9TsJOlUUQQEoXvmdROphZE9vdRtN0867Gb2YZcm2x38E9Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/8DaGaXfaBN0c-ZsZ-1WqPJ6H9TsJOlUUQQEoXvmdROphZE9vdRtN0867Gb2YZcm2x38E9Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'baseball-white-cap-out',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 77,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/whistle-red-blow',\n 'shortcuts': [':whistle-red-blow:'],\n 'searchTerms': ['whistle-red-blow'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DBu1ZfPJTnX9S1RyKKdBY-X_CEmj7eF6Uzl71j5jVBz5y4k9JcKnoiFtImAbeu4u8M2X8tU=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DBu1ZfPJTnX9S1RyKKdBY-X_CEmj7eF6Uzl71j5jVBz5y4k9JcKnoiFtImAbeu4u8M2X8tU=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'whistle-red-blow',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 78,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-crowd-surf',\n 'shortcuts': [':person-turquoise-crowd-surf:'],\n 'searchTerms': ['person-turquoise-crowd-surf'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Q0wFvHZ5h54xGSTo-JeGst6InRU3yR6NdBRoyowaqGY66LPzdcrV2t-wBN21kBIdb2TeNA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Q0wFvHZ5h54xGSTo-JeGst6InRU3yR6NdBRoyowaqGY66LPzdcrV2t-wBN21kBIdb2TeNA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-crowd-surf',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 79,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/finger-red-number-one',\n 'shortcuts': [':finger-red-number-one:'],\n 'searchTerms': ['finger-red-number-one'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Hbk0wxBzPTBCDvD_y4qdcHL5_uu7SeOnaT2B7gl9GLB4u8Ecm9OaXCGSMMUBFeNGl5Q3fHJ2=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Hbk0wxBzPTBCDvD_y4qdcHL5_uu7SeOnaT2B7gl9GLB4u8Ecm9OaXCGSMMUBFeNGl5Q3fHJ2=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'finger-red-number-one',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 80,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/text-yellow-goal',\n 'shortcuts': [':text-yellow-goal:'],\n 'searchTerms': ['text-yellow-goal'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tnHp8rHjXecGbGrWNcs7xss_aVReaYE6H-QWRCXYg_aaYszHXnbP_pVADnibUiimspLvgX0L=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tnHp8rHjXecGbGrWNcs7xss_aVReaYE6H-QWRCXYg_aaYszHXnbP_pVADnibUiimspLvgX0L=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'text-yellow-goal',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 81,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/medal-yellow-first-red',\n 'shortcuts': [':medal-yellow-first-red:'],\n 'searchTerms': ['medal-yellow-first-red'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EEHiiIalCBKuWDPtNOjjvmEZ-KRkf5dlgmhe5rbLn8aZQl-pNz_paq5UjxNhCrI019TWOQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EEHiiIalCBKuWDPtNOjjvmEZ-KRkf5dlgmhe5rbLn8aZQl-pNz_paq5UjxNhCrI019TWOQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'medal-yellow-first-red',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 82,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-wheelchair-race',\n 'shortcuts': [':person-blue-wheelchair-race:'],\n 'searchTerms': ['person-blue-wheelchair-race'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ZepxPGk5TwzrKAP9LUkzmKmEkbaF5OttNyybwok6mJENw3p0lxDXkD1X2_rAwGcUM0L-D04=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ZepxPGk5TwzrKAP9LUkzmKmEkbaF5OttNyybwok6mJENw3p0lxDXkD1X2_rAwGcUM0L-D04=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-wheelchair-race',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 83,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/card-red-penalty',\n 'shortcuts': [':card-red-penalty:'],\n 'searchTerms': ['card-red-penalty'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/uRDUMIeAHnNsaIaShtRkQ6hO0vycbNH_BQT7i3PWetFJb09q88RTjxwzToBy9Cez20D7hA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/uRDUMIeAHnNsaIaShtRkQ6hO0vycbNH_BQT7i3PWetFJb09q88RTjxwzToBy9Cez20D7hA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'card-red-penalty',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 84,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/stopwatch-blue-hand-timer',\n 'shortcuts': [':stopwatch-blue-hand-timer:'],\n 'searchTerms': ['stopwatch-blue-hand-timer'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DCvefDAiskRfACgolTlvV1kMfiZVcG50UrmpnRrg3k0udFWG2Uo9zFMaJrJMSJYwcx6fMgk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DCvefDAiskRfACgolTlvV1kMfiZVcG50UrmpnRrg3k0udFWG2Uo9zFMaJrJMSJYwcx6fMgk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'stopwatch-blue-hand-timer',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 85,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-turquoise-speaker-shape',\n 'shortcuts': [':face-turquoise-speaker-shape:'],\n 'searchTerms': ['face-turquoise-speaker-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/WTFFqm70DuMxSC6ezQ5Zs45GaWD85Xwrd9Sullxt54vErPUKb_o0NJQ4kna5m7rvjbRMgr3A=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/WTFFqm70DuMxSC6ezQ5Zs45GaWD85Xwrd9Sullxt54vErPUKb_o0NJQ4kna5m7rvjbRMgr3A=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-speaker-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 86,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/octopus-red-waving',\n 'shortcuts': [':octopus-red-waving:'],\n 'searchTerms': ['octopus-red-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L9Wo5tLT_lRQX36iZO_fJqLJR4U74J77tJ6Dg-QmPmSC_zhVQ-NodMRc9T0ozwvRXRaT43o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L9Wo5tLT_lRQX36iZO_fJqLJR4U74J77tJ6Dg-QmPmSC_zhVQ-NodMRc9T0ozwvRXRaT43o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'octopus-red-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 87,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/pillow-turquoise-hot-chocolate',\n 'shortcuts': [':pillow-turquoise-hot-chocolate:'],\n 'searchTerms': ['pillow-turquoise-hot-chocolate'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cAR4cehRxbn6dPbxKIb-7ShDdWnMxbaBqy2CXzBW4aRL3IqXs3rxG0UdS7IU71OEU7LSd20q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cAR4cehRxbn6dPbxKIb-7ShDdWnMxbaBqy2CXzBW4aRL3IqXs3rxG0UdS7IU71OEU7LSd20q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pillow-turquoise-hot-chocolate',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 88,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hourglass-purple-sand-orange',\n 'shortcuts': [':hourglass-purple-sand-orange:'],\n 'searchTerms': ['hourglass-purple-sand-orange'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/MFDLjasPt5cuSM_tK5Fnjaz_k08lKHdX_Mf7JkI6awaHriC3rGL7J_wHxyG6PPhJ8CJ6vsQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/MFDLjasPt5cuSM_tK5Fnjaz_k08lKHdX_Mf7JkI6awaHriC3rGL7J_wHxyG6PPhJ8CJ6vsQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hourglass-purple-sand-orange',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 89,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/fish-orange-wide-eyes',\n 'shortcuts': [':fish-orange-wide-eyes:'],\n 'searchTerms': ['fish-orange-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/iQLKgKs7qL3091VHgVgpaezc62uPewy50G_DoI0dMtVGmQEX5pflZrUxWfYGmRfzfUOOgJs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/iQLKgKs7qL3091VHgVgpaezc62uPewy50G_DoI0dMtVGmQEX5pflZrUxWfYGmRfzfUOOgJs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'fish-orange-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 90,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/popcorn-yellow-striped-smile',\n 'shortcuts': [':popcorn-yellow-striped-smile:'],\n 'searchTerms': ['popcorn-yellow-striped-smile'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/TW_GktV5uVYviPDtkCRCKRDrGlUc3sJ5OHO81uqdMaaHrIQ5-sXXwJfDI3FKPyv4xtGpOlg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/TW_GktV5uVYviPDtkCRCKRDrGlUc3sJ5OHO81uqdMaaHrIQ5-sXXwJfDI3FKPyv4xtGpOlg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'popcorn-yellow-striped-smile',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 91,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/penguin-blue-waving-tear',\n 'shortcuts': [':penguin-blue-waving-tear:'],\n 'searchTerms': ['penguin-blue-waving-tear'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/p2u7dcfZau4_bMOMtN7Ma8mjHX_43jOjDwITf4U9adT44I-y-PT7ddwPKkfbW6Wx02BTpNoC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/p2u7dcfZau4_bMOMtN7Ma8mjHX_43jOjDwITf4U9adT44I-y-PT7ddwPKkfbW6Wx02BTpNoC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'penguin-blue-waving-tear',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 92,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/clock-turquoise-looking-up',\n 'shortcuts': [':clock-turquoise-looking-up:'],\n 'searchTerms': ['clock-turquoise-looking-up'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tDnDkDZykkJTrsWEJPlRF30rmbek2wcDcAIymruOvSLTsUFIZHoAiYTRe9OtO-80lDfFGvo=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tDnDkDZykkJTrsWEJPlRF30rmbek2wcDcAIymruOvSLTsUFIZHoAiYTRe9OtO-80lDfFGvo=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'clock-turquoise-looking-up',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 93,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-red-smiling-live',\n 'shortcuts': [':face-red-smiling-live:'],\n 'searchTerms': ['face-red-smiling-live'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/14Pb--7rVcqnHvM7UlrYnV9Rm4J-uojX1B1kiXYvv1my-eyu77pIoPR5sH28-eNIFyLaQHs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/14Pb--7rVcqnHvM7UlrYnV9Rm4J-uojX1B1kiXYvv1my-eyu77pIoPR5sH28-eNIFyLaQHs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-smiling-live',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 94,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hands-yellow-heart-red',\n 'shortcuts': [':hands-yellow-heart-red:'],\n 'searchTerms': ['hands-yellow-heart-red'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qWSu2zrgOKLKgt_E-XUP9e30aydT5aF3TnNjvfBL55cTu1clP8Eoh5exN3NDPEVPYmasmoA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qWSu2zrgOKLKgt_E-XUP9e30aydT5aF3TnNjvfBL55cTu1clP8Eoh5exN3NDPEVPYmasmoA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hands-yellow-heart-red',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 95,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/volcano-green-lava-orange',\n 'shortcuts': [':volcano-green-lava-orange:'],\n 'searchTerms': ['volcano-green-lava-orange'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_IWOdMxapt6IBY5Cb6LFVkA3J77dGQ7P2fuvYYv1-ahigpVfBvkubOuGLSCyFJ7jvis-X8I=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_IWOdMxapt6IBY5Cb6LFVkA3J77dGQ7P2fuvYYv1-ahigpVfBvkubOuGLSCyFJ7jvis-X8I=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'volcano-green-lava-orange',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 96,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-waving-speech',\n 'shortcuts': [':person-turquoise-waving-speech:'],\n 'searchTerms': ['person-turquoise-waving-speech'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/gafhCE49PH_9q-PuigZaDdU6zOKD6grfwEh1MM7fYVs7smAS_yhYCBipq8gEiW73E0apKTzi=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/gafhCE49PH_9q-PuigZaDdU6zOKD6grfwEh1MM7fYVs7smAS_yhYCBipq8gEiW73E0apKTzi=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-waving-speech',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 97,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-orange-tv-shape',\n 'shortcuts': [':face-orange-tv-shape:'],\n 'searchTerms': ['face-orange-tv-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EVK0ik6dL5mngojX9I9Juw4iFh053emP0wcUjZH0whC_LabPq-DZxN4Jg-tpMcEVfJ0QpcJ4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EVK0ik6dL5mngojX9I9Juw4iFh053emP0wcUjZH0whC_LabPq-DZxN4Jg-tpMcEVfJ0QpcJ4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-tv-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 98,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-blue-spam-shape',\n 'shortcuts': [':face-blue-spam-shape:'],\n 'searchTerms': ['face-blue-spam-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/hpwvR5UgJtf0bGkUf8Rn-jTlD6DYZ8FPOFY7rhZZL-JHj_7OPDr7XUOesilRPxlf-aW42Zg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/hpwvR5UgJtf0bGkUf8Rn-jTlD6DYZ8FPOFY7rhZZL-JHj_7OPDr7XUOesilRPxlf-aW42Zg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-spam-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 99,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-fuchsia-flower-shape',\n 'shortcuts': [':face-fuchsia-flower-shape:'],\n 'searchTerms': ['face-fuchsia-flower-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/o9kq4LQ0fE_x8yxj29ZeLFZiUFpHpL_k2OivHbjZbttzgQytU49Y8-VRhkOP18jgH1dQNSVz=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/o9kq4LQ0fE_x8yxj29ZeLFZiUFpHpL_k2OivHbjZbttzgQytU49Y8-VRhkOP18jgH1dQNSVz=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-flower-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 100,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-holding-pencil',\n 'shortcuts': [':person-blue-holding-pencil:'],\n 'searchTerms': ['person-blue-holding-pencil'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/TKgph5IHIHL-A3fgkrGzmiNXzxJkibB4QWRcf_kcjIofhwcUK_pWGUFC4xPXoimmne3h8eQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/TKgph5IHIHL-A3fgkrGzmiNXzxJkibB4QWRcf_kcjIofhwcUK_pWGUFC4xPXoimmne3h8eQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-holding-pencil',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 101,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/body-turquoise-yoga-pose',\n 'shortcuts': [':body-turquoise-yoga-pose:'],\n 'searchTerms': ['body-turquoise-yoga-pose'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/GW3otW7CmWpuayb7Ddo0ux5c-OvmPZ2K3vaytJi8bHFjcn-ulT8vcHMNcqVqMp1j2lit2Vw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/GW3otW7CmWpuayb7Ddo0ux5c-OvmPZ2K3vaytJi8bHFjcn-ulT8vcHMNcqVqMp1j2lit2Vw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-turquoise-yoga-pose',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 102,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/location-yellow-teal-bars',\n 'shortcuts': [':location-yellow-teal-bars:'],\n 'searchTerms': ['location-yellow-teal-bars'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/YgeWJsRspSlAp3BIS5HMmwtpWtMi8DqLg9fH7DwUZaf5kG4yABfE1mObAvjCh0xKX_HoIR23=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/YgeWJsRspSlAp3BIS5HMmwtpWtMi8DqLg9fH7DwUZaf5kG4yABfE1mObAvjCh0xKX_HoIR23=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'location-yellow-teal-bars',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 103,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-writing-headphones',\n 'shortcuts': [':person-turquoise-writing-headphones:'],\n 'searchTerms': ['person-turquoise-writing-headphones'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DC4KrwzNkVxLZa2_KbKyjZTUyB9oIvH5JuEWAshsMv9Ctz4lEUVK0yX5PaMsTK3gGS-r9w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DC4KrwzNkVxLZa2_KbKyjZTUyB9oIvH5JuEWAshsMv9Ctz4lEUVK0yX5PaMsTK3gGS-r9w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-writing-headphones',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 104,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-wizard-wand',\n 'shortcuts': [':person-turquoise-wizard-wand:'],\n 'searchTerms': ['person-turquoise-wizard-wand'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/OiZeNvmELg2PQKbT5UCS0xbmsGbqRBSbaRVSsKnRS9gvJPw7AzPp-3ysVffHFbSMqlWKeQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/OiZeNvmELg2PQKbT5UCS0xbmsGbqRBSbaRVSsKnRS9gvJPw7AzPp-3ysVffHFbSMqlWKeQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-wizard-wand',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 105,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-eating-spaghetti',\n 'shortcuts': [':person-blue-eating-spaghetti:'],\n 'searchTerms': ['person-blue-eating-spaghetti'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/AXZ8POmCHoxXuBaRxX6-xlT5M-nJZmO1AeUNo0t4o7xxT2Da2oGy347sHpMM8shtUs7Xxh0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/AXZ8POmCHoxXuBaRxX6-xlT5M-nJZmO1AeUNo0t4o7xxT2Da2oGy347sHpMM8shtUs7Xxh0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-eating-spaghetti',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 106,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-turquoise-music-note',\n 'shortcuts': [':face-turquoise-music-note:'],\n 'searchTerms': ['face-turquoise-music-note'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-K6oRITFKVU8V4FedrqXGkV_vTqUufVCQpBpyLK6w3chF4AS1kzT0JVfJxhtlfIAw5jrNco=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-K6oRITFKVU8V4FedrqXGkV_vTqUufVCQpBpyLK6w3chF4AS1kzT0JVfJxhtlfIAw5jrNco=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-music-note',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 107,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-pink-swaying-hair',\n 'shortcuts': [':person-pink-swaying-hair:'],\n 'searchTerms': ['person-pink-swaying-hair'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L8cwo8hEoVhB1k1TopQaeR7oPTn7Ypn5IOae5NACgQT0E9PNYkmuENzVqS7dk2bYRthNAkQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L8cwo8hEoVhB1k1TopQaeR7oPTn7Ypn5IOae5NACgQT0E9PNYkmuENzVqS7dk2bYRthNAkQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-pink-swaying-hair',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 108,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-speaking-microphone',\n 'shortcuts': [':person-blue-speaking-microphone:'],\n 'searchTerms': ['person-blue-speaking-microphone'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FMaw3drKKGyc6dk3DvtHbkJ1Ki2uD0FLqSIiFDyuChc1lWcA9leahX3mCFMBIWviN2o8eyc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FMaw3drKKGyc6dk3DvtHbkJ1Ki2uD0FLqSIiFDyuChc1lWcA9leahX3mCFMBIWviN2o8eyc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-speaking-microphone',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 109,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/rocket-red-countdown-liftoff',\n 'shortcuts': [':rocket-red-countdown-liftoff:'],\n 'searchTerms': ['rocket-red-countdown-liftoff'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/lQZFYAeWe5-SJ_fz6dCAFYz1MjBnEek8DvioGxhlj395UFTSSHqYAmfhJN2i0rz3fDD5DQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/lQZFYAeWe5-SJ_fz6dCAFYz1MjBnEek8DvioGxhlj395UFTSSHqYAmfhJN2i0rz3fDD5DQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'rocket-red-countdown-liftoff',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 110,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-purple-rain-drops',\n 'shortcuts': [':face-purple-rain-drops:'],\n 'searchTerms': ['face-purple-rain-drops'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/woHW5Jl2RD0qxijnl_4vx4ZhP0Zp65D4Ve1DM_HrwJW-Kh6bQZoRjesGnEwjde8F4LynrQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/woHW5Jl2RD0qxijnl_4vx4ZhP0Zp65D4Ve1DM_HrwJW-Kh6bQZoRjesGnEwjde8F4LynrQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-rain-drops',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 111,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-pink-drinking-tea',\n 'shortcuts': [':face-pink-drinking-tea:'],\n 'searchTerms': ['face-pink-drinking-tea'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/WRLIgKpnClgYOZyAwnqP-Edrdxu6_N19qa8gsB9P_6snZJYIMu5YBJX8dlM81YG6H307KA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/WRLIgKpnClgYOZyAwnqP-Edrdxu6_N19qa8gsB9P_6snZJYIMu5YBJX8dlM81YG6H307KA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-pink-drinking-tea',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 112,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-purple-stage-event',\n 'shortcuts': [':person-purple-stage-event:'],\n 'searchTerms': ['person-purple-stage-event'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/YeVVscOyRcDJAhKo2bMwMz_B6127_7lojqafTZECTR9NSEunYO5zEi7R7RqxBD7LYLxfNnXe=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/YeVVscOyRcDJAhKo2bMwMz_B6127_7lojqafTZECTR9NSEunYO5zEi7R7RqxBD7LYLxfNnXe=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-purple-stage-event',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 113,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-purple-open-box',\n 'shortcuts': [':face-purple-open-box:'],\n 'searchTerms': ['face-purple-open-box'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7lJM2sLrozPtNLagPTcN0xlcStWpAuZEmO2f4Ej5kYgSp3woGdq3tWFrTH30S3mD2PyjlQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7lJM2sLrozPtNLagPTcN0xlcStWpAuZEmO2f4Ej5kYgSp3woGdq3tWFrTH30S3mD2PyjlQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-open-box',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 114,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/COLRg9qOwdQCFce-qgodrbsLaA',\n 'shortcuts': [':awesome:'],\n 'searchTerms': ['awesome'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/xqqFxk7nC5nYnjy0oiSPpeWX4yu4I-ysb3QJMOuVml8dHWz82FvF8bhGVjlosZRIG_XxHA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/xqqFxk7nC5nYnjy0oiSPpeWX4yu4I-ysb3QJMOuVml8dHWz82FvF8bhGVjlosZRIG_XxHA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'awesome',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 115,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CMKC7uKOwdQCFce-qgodqbsLaA',\n 'shortcuts': [':gar:'],\n 'searchTerms': ['gar'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/pxQTF9D-uxlSIgoopRcS8zAZnBBEPp2R9bwo5qIc3kc7PF2k18so72-ohINWPa6OvWudEcsC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/pxQTF9D-uxlSIgoopRcS8zAZnBBEPp2R9bwo5qIc3kc7PF2k18so72-ohINWPa6OvWudEcsC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'gar',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 116,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CJiQ8uiOwdQCFcx9qgodysAOHg',\n 'shortcuts': [':jakepeter:'],\n 'searchTerms': ['jakepeter'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/iq0g14tKRcLwmfdpHULRMeUGfpWUlUyJWr0adf1K1-dStgPOguOe8eo5bKrxmCqIOlu-J18=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/iq0g14tKRcLwmfdpHULRMeUGfpWUlUyJWr0adf1K1-dStgPOguOe8eo5bKrxmCqIOlu-J18=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'jakepeter',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 117,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CI3h3uDJitgCFdARTgodejsFWg',\n 'shortcuts': [':wormRedBlue:'],\n 'searchTerms': ['wormRedBlue'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/QrjYSGexvrRfCVpWrgctyB3shVRAgKmXtctM1vUnA78taji1zYNWwrHs1GKBpdpG5A6yK_k=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/QrjYSGexvrRfCVpWrgctyB3shVRAgKmXtctM1vUnA78taji1zYNWwrHs1GKBpdpG5A6yK_k=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormRedBlue',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 118,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CI69oYTKitgCFdaPTgodsHsP5g',\n 'shortcuts': [':wormOrangeGreen:'],\n 'searchTerms': ['wormOrangeGreen'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/S-L8lYTuP13Ds9TJZ2UlxdjDiwNRFPnj0o4x6DAecyJLXDdQ941upYRhxalbjzpJn5USU_k=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/S-L8lYTuP13Ds9TJZ2UlxdjDiwNRFPnj0o4x6DAecyJLXDdQ941upYRhxalbjzpJn5USU_k=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormOrangeGreen',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 119,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CKzQr47KitgCFdCITgodq6EJZg',\n 'shortcuts': [':wormYellowRed:'],\n 'searchTerms': ['wormYellowRed'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L9TQqjca5x7TE8ZB-ifFyU51xWXArz47rJFU7Pg2KgWMut5th9qsU-pCu1zIF98szO5wNXE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L9TQqjca5x7TE8ZB-ifFyU51xWXArz47rJFU7Pg2KgWMut5th9qsU-pCu1zIF98szO5wNXE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormYellowRed',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 120,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CPGD8Iu8kN4CFREChAod9OkLmg',\n 'shortcuts': [':ytg:'],\n 'searchTerms': ['ytg'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7PgbidnZLTC-38qeoqYensfXg7s7EC1Dudv9q9l8aIjqLgnfvpfhnEBH_7toCmVmqhIe4I45=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7PgbidnZLTC-38qeoqYensfXg7s7EC1Dudv9q9l8aIjqLgnfvpfhnEBH_7toCmVmqhIe4I45=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'ytg',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 121,\n },\n];\n\nexport default youtube_emotes;\n","import {\n avatars as A,\n badges as B,\n css_color_names as CSS,\n emotes as E,\n items as I,\n messages as M,\n names as N,\n tiers as T,\n tts as TTS,\n youtube_emotes as Y,\n} from './collection/index.js';\n\nexport namespace Data {\n export const avatars = A;\n export const badges = B;\n export const css_color_names = CSS;\n export const emotes = E;\n export const items = I;\n export const messages = M;\n export const names = N;\n export const tiers = T;\n export const tts = TTS;\n export const youtube_emotes = Y;\n}\n","import { ClientEvents, Emote, Provider, StreamElements, Twitch } from '../types/index.js';\nimport { findClosestColorName, parseToRGBA, rgbaToHex, rgbToHsl } from '../utils/color.js';\nimport { Data } from '../data/index.js';\n\nexport namespace Helper {\n export namespace number {\n /**\n * Translate number to words\n * @param num - Number to translate\n * @param type - Translation type\n * @returns - Number in words\n * @example\n * ```javascript\n * const cardinal = Simulation.number.translate(42, 'cardinal');\n * console.log(cardinal); // \"forty-two\"\n * ```\n */\n export function translate(\n num: number,\n type: 'cardinal' | 'ordinal' | 'suffix' = 'cardinal',\n ): string {\n const CARDINALS = {\n single: ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'],\n tens: [\n 'ten',\n 'eleven',\n 'twelve',\n 'thirteen',\n 'fourteen',\n 'fifteen',\n 'sixteen',\n 'seventeen',\n 'eighteen',\n 'nineteen',\n ],\n decades: ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'],\n };\n const ORDINALS = {\n single: [\n 'zeroth',\n 'first',\n 'second',\n 'third',\n 'fourth',\n 'fifth',\n 'sixth',\n 'seventh',\n 'eighth',\n 'ninth',\n ],\n tens: [\n 'tenth',\n 'eleventh',\n 'twelfth',\n 'thirteenth',\n 'fourteenth',\n 'fifteenth',\n 'sixteenth',\n 'seventeenth',\n 'eighteenth',\n 'nineteenth',\n ],\n decades: [\n 'twentieth',\n 'thirtieth',\n 'fortieth',\n 'fiftieth',\n 'sixtieth',\n 'seventieth',\n 'eightieth',\n 'ninetieth',\n ],\n };\n const SUFFIXES = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'];\n const SCALES = [\n '',\n 'thousand',\n 'million',\n 'billion',\n 'trillion',\n 'quadrillion',\n 'quintillion',\n ];\n const SCALES_ORD = SCALES.map((s) => (s ? `${s}th` : ''));\n\n num = Math.abs(Math.floor(num));\n\n if (type === 'suffix') {\n const rem100 = num % 100;\n if (rem100 >= 11 && rem100 <= 13) return `${num}th`;\n const rem10 = num % 10;\n return `${num}${SUFFIXES[rem10]}`;\n }\n\n function below100(n: number, kind: 'cardinal' | 'ordinal'): string {\n if (n < 10) return kind === 'ordinal' ? ORDINALS.single[n] : CARDINALS.single[n];\n if (n < 20) return kind === 'ordinal' ? ORDINALS.tens[n - 10] : CARDINALS.tens[n - 10];\n const decade = Math.floor(n / 10);\n const single = n % 10;\n if (single === 0)\n return kind === 'ordinal' ? ORDINALS.decades[decade - 2] : CARDINALS.decades[decade - 2];\n const tensPart = CARDINALS.decades[decade - 2];\n const unitPart = kind === 'ordinal' ? ORDINALS.single[single] : CARDINALS.single[single];\n return `${tensPart}-${unitPart}`;\n }\n\n function below1000(n: number, kind: 'cardinal' | 'ordinal'): string {\n if (n === 0) return kind === 'ordinal' ? ORDINALS.single[0] : CARDINALS.single[0];\n const hundreds = Math.floor(n / 100);\n const rest = n % 100;\n const parts: string[] = [];\n if (hundreds > 0) {\n if (kind === 'ordinal' && rest === 0)\n parts.push(`${CARDINALS.single[hundreds]} hundredth`);\n else parts.push(`${CARDINALS.single[hundreds]} hundred`);\n }\n if (rest > 0) parts.push(below100(rest, kind));\n return parts.join(' ');\n }\n\n if (num < 1000) return below1000(num, type);\n\n const groups: number[] = [];\n let n = num;\n while (n > 0) {\n groups.push(n % 1000);\n n = Math.floor(n / 1000);\n }\n\n let lastNonZeroIndex = -1;\n for (let i = 0; i < groups.length; i++) if (groups[i] !== 0) lastNonZeroIndex = i;\n\n const parts: string[] = [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const g = groups[i];\n if (g === 0) continue;\n const scale = SCALES[i];\n\n if (type === 'cardinal') {\n let segment = below1000(g, 'cardinal');\n if (scale) segment += ` ${scale}`;\n parts.push(segment);\n } else {\n const isLastNonZero = i === lastNonZeroIndex;\n if (isLastNonZero) {\n if (i > 0) {\n const segment = below1000(g, 'cardinal');\n const ordScale = SCALES_ORD[i];\n parts.push(segment ? `${segment} ${ordScale}` : ordScale);\n } else {\n const segment = below1000(g, 'ordinal');\n parts.push(segment);\n }\n } else {\n let segment = below1000(g, 'cardinal');\n if (scale) segment += ` ${scale}`;\n parts.push(segment);\n }\n }\n }\n\n return parts.join(', ');\n }\n\n /**\n * Balances a number within a specified range\n * @param amount - Number to balance\n * @param min - Minimum value\n * @param max - Maximum value\n * @param decimals - Number of decimal places to round to (default is 0)\n * @returns - Balanced number\n * @example\n * ```javascript\n * const balancedValue = Simulation.number.balance(150, 0, 100);\n * console.log(balancedValue); // 100\n * ```\n */\n export function balance(\n amount: number,\n min: number = 0,\n max: number = 100,\n decimals: number = 0,\n ): number {\n const result = Math.min(Math.max(amount, min), max);\n\n return round(result, decimals);\n }\n\n /**\n * Rounds a number to a specified number of decimal places\n * @param value - Number to round\n * @param decimals - Number of decimal places (default is 2)\n * @returns Rounded number\n * @example\n * ```javascript\n * const roundedValue = Simulation.number.round(3.14159, 3);\n * console.log(roundedValue); // 3.142\n * ```\n */\n export function round(value: number, decimals: number = 2): number {\n const factor = Math.pow(10, decimals);\n\n return Math.round(value * factor) / factor;\n }\n\n /**\n * Generate random number\n * @param min - Minimum value\n * @param max - Maximum value\n * @param float - Number of decimal places (0 for integer)\n * @returns - Random number\n * @example\n * ```javascript\n * const intNumber = number.random(1, 10);\n * console.log(intNumber); // e.g. 7\n *\n * const floatNumber = number.random(1, 10, 2);\n * console.log(floatNumber); // e.g. 3.14\n * ```\n */\n export function number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n }\n }\n\n export namespace element {\n export interface ScaleOptions<T extends HTMLElement> {\n /**\n * The parent element to use for scaling calculations. If not provided, the element's parent will be used.\n */\n parent?: HTMLElement;\n /**\n * The preferred dimension to base the scaling on. Can be 'width', 'height', or 'auto' (default).\n */\n prefer?: 'width' | 'height' | 'auto';\n /**\n * The minimum percentage of the parent size to scale to. Default is 0.\n */\n min?: number;\n /**\n * The maximum percentage of the parent size to scale to. Default is 1 (100%).\n */\n max?: number;\n /**\n * A callback function that is called after scaling is applied.\n * @param this - The HTML element being scaled.\n * @param number - The scale factor applied to the element.\n * @param element - The HTML element being scaled.\n * @returns void\n */\n apply?: (this: T, number: number, element: T) => void;\n }\n\n export type FitTextOptions = {\n minFontSize?: number;\n maxFontSize?: number;\n parent?: HTMLElement;\n };\n\n /**\n * Merges outer span styles with inner span styles in the provided HTML string.\n * @param outerStyle - The style string to be applied to the outer span.\n * @param innerHTML - The inner HTML string which may contain a span with its own styles.\n * @returns A new HTML string with merged styles applied to a single span.\n * @example\n * ```javascript\n * const result = mergeSpanStyles(\"color: red; font-weight: bold;\", '<span style=\"font-size: 14px;\">Hello World</span>');\n * console.log(result); // Output: '<span style=\"font-size: 14px; color: red; font-weight: bold;\">Hello World</span>'\n * ```\n */\n export function mergeSpanStyles(\n outerStyle: string,\n innerHTML: string,\n className?: string,\n ): string {\n const match = innerHTML.match(/^<span(?: class=\"[^\"]*\")? style=\"([^\"]*)\">(.*)<\\/span>$/s);\n\n if (match) {\n const innerStyle = match[1];\n const content = match[2];\n const innerClass = match[0].match(/class=\"([^\"]*)\"/)?.[1] || '';\n\n let mergedStyle = [innerStyle, outerStyle]\n .filter((a) => a.length)\n .map((s) => {\n if (s.endsWith(';')) return s.slice(0, -1);\n else return s;\n })\n .join('; ')\n .replace(/\\s*;\\s*/g, '; ')\n .trim();\n\n if (!mergedStyle.endsWith(';')) mergedStyle += ';';\n\n return `<span${innerClass ? ` class=\"${innerClass} ${className ?? ''}\"` : ''}${mergedStyle ? ` style=\"${mergedStyle}\"` : ''}>${content}</span>`;\n } else {\n if (outerStyle && outerStyle.length && !outerStyle.endsWith(';')) outerStyle += ';';\n\n return `<span${className ? ` class=\"${className}\"` : ''}${outerStyle ? ` style=\"${outerStyle}\"` : ''}>${innerHTML}</span>`;\n }\n }\n\n /**\n * Scales an HTML element to fit within its parent element based on specified minimum and maximum scale factors.\n * @param element - The HTML element to be scaled.\n * @param min - Minimum scale factor (default is 0).\n * @param max - Maximum scale factor (default is 1).\n * @param options - Optional settings for scaling.\n * @returns - An object containing the new width, height, and scale factor, or void if not applied.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * scale(element, 0.5, 1, { return: false });\n * ```\n */\n export function scale(\n element: HTMLElement,\n min: number = 0,\n max: number = 1,\n options?: { return: boolean; parent: HTMLElement; base: 'width' | 'height' },\n ): { width: number; height: number; scale: number } | void {\n const { return: returnOnly = false, parent: customParent, base } = options || {};\n\n const parent = customParent || element.parentElement || document.body;\n\n if (!parent) {\n throw new Error('No parent element found for scaling');\n }\n\n const parentRect = parent.getBoundingClientRect();\n const elementWidth = element.offsetWidth;\n const elementHeight = element.offsetHeight;\n\n if (elementWidth === 0 || elementHeight === 0) {\n throw new Error('Element has zero width or height, cannot scale');\n }\n\n // Calculate scales for both dimensions\n const scaleX = (parentRect.width * max) / elementWidth;\n const scaleY = (parentRect.height * max) / elementHeight;\n\n // Determine final scale based on base option or use smaller scale\n let finalScale =\n base === 'width' ? scaleX : base === 'height' ? scaleY : Math.min(scaleX, scaleY);\n\n // Apply minimum constraint if needed\n if (min > 0) {\n const minScaleX = (parentRect.width * min) / elementWidth;\n const minScaleY = (parentRect.height * min) / elementHeight;\n const minScale = Math.max(minScaleX, minScaleY);\n\n finalScale = Math.max(minScale, finalScale);\n }\n\n const result = {\n width: elementWidth * finalScale,\n height: elementHeight * finalScale,\n scale: finalScale,\n };\n\n if (returnOnly) {\n return result;\n }\n\n element.style.transform = `scale(${finalScale})`;\n element.style.transformOrigin = 'center center';\n\n return result;\n }\n\n /**\n * Scales an HTML element to fit within its parent element based on specified options.\n * @param element - The HTML element to be scaled.\n * @param options - Optional settings for scaling.\n * @returns The scale factor applied to the element.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * const scaleFactor scalev2(element, {\n * min: 0.5,\n * max: 1,\n * prefer: 'width',\n * apply: (scale, el) => el.style.transform = `scale(${scale})`\n * });\n * console.log(`Element scaled by a factor of ${scaleFactor}`);\n * ```\n */\n export function scalev2<T extends HTMLElement>(\n element: T,\n options: ScaleOptions<T> = {},\n ): number {\n const {\n parent = element.parentElement,\n prefer = 'auto',\n min = 0,\n max = 1,\n apply = () => {},\n } = options;\n\n if (!parent) {\n throw new Error('No parent element found for scaling');\n }\n\n const parentClientRect = parent.getBoundingClientRect();\n const elementClientRect = element.getBoundingClientRect();\n\n const parentWidth = parentClientRect.width;\n const parentHeight = parentClientRect.height;\n\n const elementWidth = elementClientRect.width;\n const elementHeight = elementClientRect.height;\n\n let scaleXmin = (parentWidth * min) / elementWidth;\n let scaleYmin = (parentHeight * min) / elementHeight;\n\n let scaleXmax = (parentWidth * max) / elementWidth;\n let scaleYmax = (parentHeight * max) / elementHeight;\n\n let scaleValue = Math.min(scaleXmax, scaleYmax);\n\n const minScale = Math.max(scaleXmin, scaleYmin);\n scaleValue = Math.max(scaleValue, minScale);\n\n const finalScaleX = elementWidth * scaleValue;\n const finalScaleY = elementHeight * scaleValue;\n\n if (prefer === 'width') {\n scaleValue = Math.max(scaleXmin, Math.min(scaleXmax, parentWidth / elementWidth));\n } else if (prefer === 'height') {\n scaleValue = Math.max(scaleYmin, Math.min(scaleYmax, parentHeight / elementHeight));\n } else {\n if (finalScaleX > parentWidth) {\n scaleValue = Math.max(scaleXmin, Math.min(scaleXmax, parentWidth / elementWidth));\n } else if (finalScaleY > parentHeight) {\n scaleValue = Math.max(scaleYmin, Math.min(scaleYmax, parentHeight / elementHeight));\n }\n }\n\n apply.apply(element, [scaleValue, element]);\n\n return scaleValue;\n }\n\n /**\n * Fits the text within the parent element by adjusting the font size.\n * @param element - The HTML element containing the text to be fitted.\n * @param compressor - A multiplier to adjust the fitting sensitivity (default is 1).\n * @param options - Optional settings for fitting text.\n * @returns The HTML element with adjusted font size.\n * @example\n * ```javascript\n * const element = document.getElementById('myTextElement');\n * fitText(element, 1, { minFontSize: 12, maxFontSize: 36 });\n * console.log(`Adjusted font size: ${element.style.fontSize}`);\n * ```\n */\n export function fitText(\n element: HTMLElement,\n compressor: number = 1,\n options: FitTextOptions = {},\n ) {\n const fontSize = parseFloat(getComputedStyle(element).getPropertyValue('font-size'));\n\n const settings = {\n minFontSize: options?.minFontSize ?? 0,\n maxFontSize: options?.maxFontSize ?? fontSize,\n };\n\n const parent = options?.parent || element.parentElement;\n\n if (!parent) {\n throw new Error('No parent element found for fitting text');\n }\n\n const parentWidth = parent.clientWidth * compressor;\n const elWidth = element.offsetWidth;\n\n const ratio = parentWidth / elWidth;\n const value = fontSize * ratio;\n\n const result = number.balance(value, settings.minFontSize, settings.maxFontSize);\n\n element.style.fontSize = result + 'px';\n\n return element;\n }\n\n /**\n * Wraps formatted HTML text with containers and splits characters into indexed spans.\n * Adds 'container' class and data-index to all parent elements, and wraps each character in a span with class 'char' and data-index.\n * @param htmlString - The input HTML string containing formatted text elements (span, strong, em, etc).\n * @param startIndex - The starting index for the data-index attribute (default is 0).\n * @returns - A new HTML string with containers and character-level indexing.\n * @example\n * ```javascript\n * const result = splitTextToChars('<span>TesTe</span> <strong>bold</strong>', 0);\n * console.log(result);\n * // Output: '<span class=\"container\" data-index=\"0\"><span class=\"char\" data-index=\"0\">T</span><span class=\"char\" data-index=\"1\">e</span>...'\n * ```\n */\n export function splitTextToChars(htmlString: string, startIndex: number = 0): string {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, 'text/html');\n\n let charIndex = startIndex;\n\n function processNode(node: Node): Node | DocumentFragment {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || '';\n\n // Split only non-whitespace or preserve whitespace if it's significant\n const chars = text.split('').map((char, index) => {\n const span = document.createElement('span');\n\n span.classList.add('char');\n span.dataset.index = String(charIndex);\n span.dataset.exclusivityIndex = String(charIndex);\n span.style.setProperty('--char-index', String(charIndex));\n span.style.setProperty('--exclusivity-index', String(charIndex));\n\n if (char === ' ' || char === '\\n' || char === '\\t') {\n span.style.whiteSpace = 'pre-wrap';\n }\n\n span.textContent = char;\n\n charIndex++;\n\n return span;\n });\n\n const fragment = document.createDocumentFragment();\n chars.forEach((char) => fragment.appendChild(char));\n\n return fragment;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clone = node.cloneNode(false) as HTMLElement;\n\n // Add container class and data-index to parent elements\n clone.classList.add('container');\n clone.dataset.index = String(charIndex);\n clone.style.setProperty('--char-index', String(charIndex));\n\n // Process child nodes\n node.childNodes.forEach((child) => {\n const processed = processNode(child);\n\n if (processed instanceof DocumentFragment) {\n clone.appendChild(processed);\n } else if (processed instanceof Node) {\n clone.appendChild(processed);\n }\n });\n\n return clone;\n }\n\n return node.cloneNode(true);\n }\n\n const body = doc.body;\n const processed = document.createElement('div');\n\n body.childNodes.forEach((node) => {\n // Skip empty text nodes at the root level\n if (node.nodeType === Node.TEXT_NODE && !node.textContent?.trim()) {\n return;\n }\n\n const result = processNode(node);\n\n if (result instanceof DocumentFragment) {\n processed.appendChild(result);\n } else if (result instanceof Node) {\n processed.appendChild(result);\n }\n });\n\n // Join root-level text nodes and elements while preserving spacing\n let html = '';\n Array.from(processed.childNodes).forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n } else {\n html += (node as HTMLElement).outerHTML;\n }\n });\n\n return html;\n }\n }\n\n export namespace object {\n /**\n * Flattens a nested object into a single-level object with dot-separated keys.\n * @param obj - The nested object to be flattened.\n * @param prefix - The prefix to be added to each key (used for recursion).\n * @returns A flattened object with dot-separated keys.\n * @example\n * ```javascript\n * const nestedObj = { a: { b: 1, c: { d: 2 } }, e: [3, 4] };\n * const flatObj = flatten(nestedObj);\n * console.log(flatObj);\n * // Output: { 'a.b': '1', 'a.c.d': '2', 'e:0': '3', 'e:1': '4' }\n * ```\n */\n export function flatten(\n obj: Record<string, any>,\n stringify: boolean = true,\n prefix: string = '',\n ): Record<string, typeof stringify extends true ? string : string | number | boolean> {\n const result = {} as Record<\n string,\n typeof stringify extends true ? string : string | number | boolean\n >;\n\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n const value = obj[key];\n const path = prefix ? `${prefix}.${key}` : key;\n\n // Handle null and undefined\n if (value === null || value === undefined) {\n result[path] = String(value);\n\n continue;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n result[path] = 'NaN';\n\n continue;\n }\n\n if (typeof value === 'number' && !isNaN(value)) {\n result[path] = stringify ? String(value) : value;\n\n continue;\n }\n\n // Handle Date objects\n if (value instanceof Date) {\n result[path] = value.toISOString();\n\n continue;\n }\n\n // Handle Map objects\n if (value instanceof Map) {\n value.forEach((v, k) => {\n result[`${path}.${k}`] = JSON.stringify(v);\n });\n\n continue;\n }\n\n // Handle Array objects\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n const itemPath = `${path}:${i}`;\n\n if (typeof v === 'object') {\n Object.assign(result, flatten(v, stringify, itemPath));\n } else {\n result[itemPath] = stringify ? String(v) : v;\n }\n });\n\n continue;\n }\n\n // Handle nested objects\n if (typeof value === 'object') {\n Object.assign(result, flatten(value, stringify, path));\n continue;\n }\n\n // Handle primitive values (string, number, boolean, etc.)\n result[path] = String(value);\n }\n\n return result;\n }\n\n /**\n * Returns the entries of an object as an array of key-value pairs, with proper typing.\n * @param obj - The object to retrieve entries from.\n * @returns An array of key-value pairs from the object, typed as an array of tuples with key and value types.\n */\n export function entries<K extends string, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][];\n }\n\n /**\n * Returns the values of an object as an array, with proper typing.\n * @param obj - The object to retrieve values from.\n * @returns An array of values from the object, typed as an array of the value type.\n */\n export function values<K extends string, V>(obj: Record<K, V>): V[] {\n return Object.values(obj) as V[];\n }\n\n /**\n * Returns the keys of an object as an array of strings, with proper typing.\n * @param obj - The object to retrieve keys from.\n * @returns An array of keys from the object, typed as an array of strings.\n */\n export function keys<K extends string, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[];\n }\n }\n\n export namespace message {\n export type BadgeOptions =\n | Twitch.roles[]\n | Twitch.roles\n | `${Twitch.roles}, ${Twitch.roles}`\n | `${Twitch.roles}, ${Twitch.roles}, ${Twitch.roles}`;\n export type TwitchResult = {\n keys: Twitch.roles[];\n badges: Twitch.badge[];\n };\n export type YouTubeResult = {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n };\n\n /**\n * Finds emotes in a given text.\n * @param text - The text to search for emotes.\n * @param emotes - An array of emotes to search for. Defaults to Local data emotes.\n * @returns An array of emotes found in the text with their positions.\n */\n export function findEmotesInText(text: string, emotes: Emote[] = Data.emotes): Emote[] {\n const result: Emote[] = [];\n\n emotes.forEach((emote) => {\n const name = emote.name;\n\n let searchIndex = 0;\n let start = 0;\n\n while (searchIndex < text.length) {\n const index = text.indexOf(name, start);\n\n if (index === -1) break;\n\n const before = index > 0 ? text[index - 1] : ' ';\n const after = index + name.length < text.length ? text[index + name.length] : ' ';\n\n if (/\\s/.test(before) && /\\s/.test(after)) {\n result.push({ ...emote, start: index, end: index + name.length });\n }\n\n start = index + 1;\n }\n });\n\n return result.sort((a, b) => a.start - b.start);\n }\n\n /**\n * Replaces emotes in the text with corresponding HTML image tags.\n * @param text - The text containing emotes.\n * @param emotes - An array of emotes with their positions in the text.\n * @returns The text with emotes replaced by HTML image tags.\n */\n export function replaceEmotesWithHTML(text: string, emotes: Emote[]): string {\n if (!emotes.length) return text;\n\n let result = '';\n let index = 0;\n\n emotes.forEach((emote) => {\n result += text.substring(index, emote.start);\n\n const emotesArray = Array.from({ ...emote.urls, length: 5 })\n .slice(1)\n .reverse()\n .filter(Boolean);\n\n const imgUrl = emotesArray[0] || emote.urls['1'];\n\n result += `<img src=\"${imgUrl}\" alt=\"${emote.name}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`;\n\n index = emote.end;\n });\n\n result += text.substring(index);\n\n return result;\n }\n\n /**\n * Replaces YouTube emotes in the text with corresponding HTML image tags.\n * @param text - The text containing YouTube emotes.\n * @param emotes - An array of YouTube emotes. Defaults to Local data YouTube emotes.\n * @returns The text with YouTube emotes replaced by HTML image tags.\n */\n export function replaceYoutubeEmotesWithHTML(\n text: string,\n emotes = Data.youtube_emotes,\n ): string {\n const emoteCodesInside = Array.from(text.matchAll(/:(.*?):/gim), (x) => x[0]);\n\n emoteCodesInside.forEach((code) => {\n const emote = emotes.find(\n (e) => e.shortcuts.includes(code) || e.searchTerms.includes(code.slice(1, -1)),\n );\n\n if (emote) {\n const url = emote.image.thumbnails.at(-1)?.url;\n const alt = emote.image.accessibility.accessibilityData.label;\n\n if (url) {\n text = text.replace(\n code,\n `<img src=\"${url}\" alt=\"${alt}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`,\n );\n }\n }\n });\n\n return text;\n }\n\n /**\n * Generates badge data based on the provided badges and platform.\n * @param badges - The badges to generate. Can be an array or a comma-separated string.\n * @param provider - The platform provider ('twitch' or 'youtube'). Defaults to 'twitch'.\n * @returns A promise that resolves to the generated badge data.\n * @example\n * ```javascript\n * // Generate Twitch badges\n * const twitchBadges = await generateBadges(['broadcaster', 'moderator'], 'twitch');\n * // Generate YouTube badges\n * const youtubeBadges = await generateBadges('sponsor, moderator', 'youtube');\n * ```\n */\n export async function generateBadges<T extends Provider>(\n badges: BadgeOptions = [],\n provider: T,\n ): Promise<T extends 'twitch' ? TwitchResult : YouTubeResult> {\n if (!Array.isArray(badges) && typeof badges === 'string') {\n badges = badges.split(',').map((e) => e.trim()) as Twitch.roles[];\n }\n\n if (!badges || !badges.length) {\n var max = random.number(1, 3);\n\n for await (const _ of Array.from({ length: max }, () => '')) {\n var current = random.array(Object.keys(Data.badges))[0] as Twitch.roles;\n\n if (!badges.includes(current) && Array.isArray(badges)) {\n badges.push(current);\n } else {\n badges = [current];\n }\n }\n }\n\n var result;\n\n switch (provider) {\n case 'twitch': {\n result = {\n keys: Array.from(badges).filter((e) => e in Data.badges) as Twitch.roles[],\n badges: Array.from(badges)\n .slice(0, 3)\n .map((badge) => Data.badges[badge])\n .filter(Boolean) as Twitch.badge[],\n };\n\n break;\n }\n\n case 'youtube': {\n var details = {\n 'verified': { isVerified: true },\n 'broadcaster': { isChatOwner: true },\n 'host': { isChatOwner: true },\n 'sponsor': { isChatSponsor: true },\n 'subscriber': { isChatSponsor: true },\n 'moderator': { isChatModerator: true },\n };\n\n result = Object.entries(badges).reduce(\n (acc, [key]) => {\n if (key in details) {\n Object.assign(acc, details[key as keyof typeof details]);\n }\n\n return acc;\n },\n {\n isVerified: false,\n isChatOwner: false,\n isChatSponsor: false,\n isChatModerator: false,\n } as {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n },\n );\n\n break;\n }\n }\n\n return result as T extends 'twitch' ? TwitchResult : YouTubeResult;\n }\n }\n\n export namespace event {\n /**\n * Parses the provider information from the event detail object.\n * @param detail - The event detail object received from the StreamElements event.\n * @returns An object containing the provider and the original event data.\n */\n export function parseProvider(detail: StreamElements.Event.onEventReceived) {\n var provider: Provider =\n // @ts-ignore\n detail.event?.provider ||\n // @ts-ignore\n detail.event?.service ||\n // @ts-ignore\n detail.event?.data?.provider ||\n // @ts-ignore\n window.client.details.provider;\n\n const actAsStreamElements = [\n 'kvstore:update',\n 'bot:counter',\n 'alertService:toggleSound',\n 'tip-latest',\n 'event:test',\n 'event:skip',\n ] as StreamElements.Event.onEventReceived['listener'][];\n\n if (actAsStreamElements.some((l) => l === detail.listener)) provider = 'streamelements';\n\n const received = { provider: provider, data: detail } as ClientEvents;\n\n return received;\n }\n }\n\n export namespace string {\n export type Modifier = (\n value: string,\n param: string | null | undefined,\n values: { amount?: number; count?: number },\n ) => string;\n\n // Global presets that can be configured and reused across templates.\n // Each preset value is a modifier group string, e.g. \"BOLD,COLOR:#ff0056\".\n export const PRESETS: Record<string, string> = {};\n\n /**\n * Replaces occurrences in a string based on a pattern with the result of an asynchronous callback function.\n * @param string - The input string to perform replacements on.\n * @param pattern - The pattern to match in the string (can be a string or a regular expression).\n * @param callback - An asynchronous callback function that takes the matched substring and any captured groups as arguments and returns the replacement string.\n * @returns A promise that resolves to the modified string with replacements applied.\n * @example\n * ```javascript\n * const result = await string.replace(\"Hello World\", /World/, async (match) => {\n * return await fetchSomeData(match); // Assume this function fetches data asynchronously\n * });\n * console.log(result); // Output will depend on the fetched data\n * ```\n */\n export async function replace(\n string: string,\n pattern: string,\n callback: (match: string, ...groups: string[]) => Promise<string> | string,\n ): Promise<string> {\n const promises: Array<Promise<string>> = [];\n\n string.replace(pattern, (match: string, ...groups: string[]) => {\n const promise = typeof callback === 'function' ? callback(match, ...groups) : match;\n\n promises.push(Promise.resolve(promise));\n\n return match;\n });\n\n const replacements = await Promise.all(promises);\n\n return string.replace(pattern, () => replacements.shift() ?? '');\n }\n\n /**\n * Capitalizes the first letter of a given string.\n * @param string - The input string to be capitalized.\n * @returns The capitalized string.\n * @example\n * ```javascript\n * const result = string.capitalize(\"hello world\");\n * console.log(result); // Output: \"Hello world\"\n * ```\n */\n export function capitalize(string: string): Capitalize<string> {\n return (string.charAt(0).toUpperCase() + string.slice(1)) as Capitalize<string>;\n }\n\n /**\n * Composes a template string by replacing placeholders with corresponding values and applying optional modifiers.\n * @param template - The template string containing placeholders in the format {key} and optional modifiers in the format [MODIFIER:param=value].\n * @param values - An object containing key-value pairs to replace the placeholders in the template.\n * @param options - Optional settings for the composition process.\n * @returns The composed string with placeholders replaced and modifiers applied.\n * @example\n * ```javascript\n * const { string } = Tixyel.Helper;\n *\n * // Basic usage with placeholders and simple modifiers\n * const template1 = \"Hello, {username}! You have {amount} [UPC=messages] and your name is [CAP=name].\";\n * const values1 = { username: \"john_doe\", amount: 5, name: \"john\" };\n * const result1 = string.compose(template1, values1);\n * // \"Hello, john_doe! You have 5 MESSAGES and your name is John.\"\n *\n * // Multiple modifiers in a single block (HTML enabled)\n * const template2 = \"[COLOR:#ff0056,BOLD={username}]\";\n * const values2 = { username: \"john_doe\" };\n * const result2 = string.compose(template2, values2, { html: true });\n * // '<span class=\"color bold\" style=\"color: #ff0056; font-weight: bold;\">john_doe</span>'\n *\n * // Conditional rendering with IF (supports ===, >=, &&, ||, !, etc.)\n * const template3 = \"[IF=vip && status === 'live'?VIP Online|Offline]\";\n * const values3 = { status: 'live', vip: true };\n * const result3 = string.compose(template3, values3);\n * // \"VIP Online\"\n *\n * // Pluralization using amount / count or an explicit key\n * const template4 = \"You have {amount} [PLURAL=message|messages].\";\n * const values4 = { amount: 1 };\n * const values5 = { amount: 3 };\n * const result4a = string.compose(template4, values4); // \"You have 1 message.\"\n * const result4b = string.compose(template4, values5); // \"You have 3 messages.\"\n *\n * // Number formatting\n * const template5 = \"Total: [NUMBER:2=amount] {currency}\";\n * const values6 = { amount: 1234.5, currency: '$' };\n * const result5 = string.compose(template5, values6);\n * // e.g. \"Total: 1,234.50 $\" (locale dependent)\n *\n * // Date and time formatting\n * const template6 = \"Created at: [DATE:iso=createdAt] ([DATE:relative=createdAt])\";\n * const values7 = { createdAt: new Date('2020-01-02T03:04:05.000Z') };\n * const result6 = string.compose(template6, values7);\n * // e.g. \"Created at: 2020-01-02T03:04:05.000Z (Xs ago)\"\n *\n * // MAP / SWITCH style mapping\n * const template7 = \"Status: [MAP:status=live:Online|offline:Offline|default:Unknown]\";\n * const values8 = { status: 'offline' };\n * const result7 = string.compose(template7, values8);\n * // \"Status: Offline\"\n *\n * // Escaping HTML\n * const template8 = \"[ESCAPE={message}]\";\n * const values9 = { message: '<b>Danger & \"HTML\"</b>' };\n * const result8 = string.compose(template8, values9);\n * // \"<b>Danger & "HTML"</b>\"\n *\n * // Using global presets\n * Helper.string.PRESETS['alert'] = 'BOLD,COLOR:#ff0056';\n * const template10 = \"[PRESET:alert={username}]\";\n * const values11 = { username: 'john_doe' };\n * const result10 = string.compose(template10, values11, { html: true });\n * // '<span class=\"color bold\" style=\"color: #ff0056; font-weight: bold;\">john_doe</span>'\n * ```\n */\n export function compose(\n template: string,\n values: Record<string, any> = {},\n options: {\n method?: 'loop' | 'index';\n html?: boolean;\n debug?: boolean;\n modifiers?: Record<string, Modifier>;\n aliases?: Record<string, string[]>;\n } = {\n method: 'index',\n html: false,\n debug: false,\n modifiers: {},\n aliases: {},\n },\n ): string {\n const { mergeSpanStyles } = element;\n\n const span = (style: string, value: string, className?: string) => {\n if (options.html) {\n return mergeSpanStyles(style, value, className);\n } else {\n return value;\n }\n };\n\n const baseValues = {\n skip: '<br/>',\n newline: '<br/>',\n ...values,\n };\n\n let defaultCurrency = '$';\n let defaultCurrencyCode = 'USD';\n\n if (typeof window !== 'undefined') {\n try {\n const client: any = (window as any).client;\n const currency = client?.details?.currency;\n\n if (currency?.symbol) defaultCurrency = String(currency.symbol);\n if (currency?.code) defaultCurrencyCode = String(currency.code);\n } catch {\n // ignore – fall back to defaults\n }\n }\n\n const flatten: Record<string, string> = Object.entries(object.flatten(baseValues)).reduce(\n (acc, [k, v]) => {\n acc[k] = String(v);\n\n if (['username', 'name', 'nick', 'nickname', 'sender'].some((e) => k === e)) {\n const username =\n acc?.username || acc?.name || acc?.nick || acc?.nickname || acc?.sender;\n\n acc['username'] = acc.username || username;\n acc['usernameAt'] = `@${acc.username}`;\n acc['name'] = acc.name || username;\n acc['nick'] = acc.nick || username;\n acc['nickname'] = acc.nickname || username;\n acc['sender'] = acc.sender || username;\n acc['senderAt'] = `@${acc.sender}`;\n }\n\n if (['amount', 'count'].some((e) => k === e)) {\n acc['amount'] = String(acc?.amount || acc.count || v);\n acc['count'] = String(acc?.count || acc?.amount || v);\n }\n\n acc['currency'] = acc.currency || defaultCurrency;\n acc['currencyCode'] = acc.currencyCode || defaultCurrencyCode;\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const REGEX = {\n PLACEHOLDERS: /{([^}]+)}/g,\n MODIFIERS: /\\[([^\\]=]+)=([^\\]]+)\\]/g,\n };\n\n var amount = parseFloat(flatten?.amount ?? flatten?.count ?? 0);\n\n function getNumericFromKeyOrValue(\n keyOrValue: string,\n valuesMap: Record<string, string>,\n ): number | null {\n const trimmed = keyOrValue?.trim?.() ?? '';\n if (!trimmed.length) return null;\n\n const fromValues = (valuesMap as any)[trimmed];\n const candidate = fromValues !== undefined ? fromValues : trimmed;\n const num = parseFloat(String(candidate).replace(/\\s/g, ''));\n\n return isNaN(num) ? null : num;\n }\n\n function formatNumber(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const decimals = !isNaN(Number(param)) ? Math.max(0, parseInt(String(param))) : 0;\n\n const num = getNumericFromKeyOrValue(value, valuesMap);\n if (num === null) return value;\n\n try {\n return num.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n } catch {\n return num.toFixed(decimals);\n }\n }\n\n function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const past = diffMs >= 0;\n const abs = Math.abs(diffMs);\n\n const sec = Math.floor(abs / 1000);\n const min = Math.floor(sec / 60);\n const hour = Math.floor(min / 60);\n const day = Math.floor(hour / 24);\n const month = Math.floor(day / 30);\n const year = Math.floor(day / 365);\n\n const suffix = past ? 'ago' : 'from now';\n\n if (year > 0) return `${year}y ${suffix}`;\n if (month > 0) return `${month}mo ${suffix}`;\n if (day > 0) return `${day}d ${suffix}`;\n if (hour > 0) return `${hour}h ${suffix}`;\n if (min > 0) return `${min}m ${suffix}`;\n return `${Math.max(sec, 0)}s ${suffix}`;\n }\n\n function formatDateLike(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const keyOrLiteral = value?.trim?.() ?? '';\n if (!keyOrLiteral.length) return value;\n\n const raw = (valuesMap as any)[keyOrLiteral] ?? keyOrLiteral;\n const date = new Date(raw);\n\n if (isNaN(date.getTime())) return value;\n\n const mode = (param ?? 'date').toString().toLowerCase();\n\n try {\n switch (mode) {\n case 'time':\n return date.toLocaleTimeString();\n case 'datetime':\n case 'full':\n return date.toLocaleString();\n case 'relative':\n case 'ago':\n return formatRelativeTime(date);\n case 'iso':\n return date.toISOString();\n case 'date':\n default:\n return date.toLocaleDateString();\n }\n } catch {\n return value;\n }\n }\n\n function pluralize(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const text = value ?? '';\n const [singular, plural = singular] = text.split('|', 2);\n\n const key = param?.trim();\n let source: any = undefined;\n\n if (key && (valuesMap as any)[key] !== undefined) {\n source = (valuesMap as any)[key];\n } else {\n source = (valuesMap as any).amount ?? (valuesMap as any).count;\n }\n\n const num = parseFloat(String(source));\n if (isNaN(num)) return singular;\n\n const isPlural = Math.abs(num) !== 1;\n return isPlural ? plural : singular;\n }\n\n function mapSwitch(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const key = param?.trim() ?? '';\n const targetRaw =\n key && (valuesMap as any)[key] !== undefined ? (valuesMap as any)[key] : '';\n const target = String(targetRaw);\n\n const entries = (value ?? '')\n .split('|')\n .map((p) => p.trim())\n .filter((p) => p.length);\n let defaultResult: string | undefined;\n\n for (const entry of entries) {\n const idx = entry.indexOf(':');\n if (idx === -1) continue;\n\n const mapKey = entry.slice(0, idx).trim();\n const mapValue = entry.slice(idx + 1);\n\n if (!mapKey.length) continue;\n\n if (mapKey.toLowerCase() === 'default') {\n defaultResult = mapValue;\n continue;\n }\n\n if (target === mapKey) return mapValue;\n }\n\n return defaultResult ?? '';\n }\n\n function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n function parseLiteralOrValue(token: string, valuesMap: Record<string, string>): any {\n let trimmed = token.trim();\n\n if (!trimmed.length) return undefined;\n\n const firstChar = trimmed[0];\n const lastChar = trimmed[trimmed.length - 1];\n\n if ((firstChar === '\"' && lastChar === '\"') || (firstChar === \"'\" && lastChar === \"'\")) {\n return trimmed.slice(1, -1);\n }\n\n const lowered = trimmed.toLowerCase();\n if (lowered === 'true') return true;\n if (lowered === 'false') return false;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return parseFloat(trimmed);\n\n const fromValues = valuesMap?.[trimmed];\n if (fromValues === undefined) return trimmed;\n\n const fromValuesStr = String(fromValues).trim();\n const fromValuesLower = fromValuesStr.toLowerCase();\n\n if (fromValuesLower === 'true') return true;\n if (fromValuesLower === 'false') return false;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(fromValuesStr)) return parseFloat(fromValuesStr);\n\n return fromValues;\n }\n\n function coerceToBoolean(value: any): boolean {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return false;\n\n const str = String(value).trim().toLowerCase();\n if (!str.length) return false;\n\n if (['false', '0', 'no', 'off', 'null', 'undefined', 'nan'].includes(str)) return false;\n\n return true;\n }\n\n function evaluateAtomicCondition(\n expression: string,\n valuesMap: Record<string, string>,\n ): boolean {\n let expr = expression.trim();\n if (!expr.length) return false;\n\n let invert = false;\n while (expr.startsWith('!')) {\n invert = !invert;\n expr = expr.slice(1).trim();\n }\n\n const operators = ['===', '!==', '==', '!=', '>=', '<=', '>', '<'];\n let op: string | null = null;\n let left = expr;\n let right = '';\n\n for (const candidate of operators) {\n const idx = expr.indexOf(candidate);\n if (idx !== -1) {\n op = candidate;\n left = expr.slice(0, idx);\n right = expr.slice(idx + candidate.length);\n break;\n }\n }\n\n let result: boolean;\n\n if (!op) {\n const value = parseLiteralOrValue(left, valuesMap);\n result = coerceToBoolean(value);\n } else {\n const leftVal = parseLiteralOrValue(left, valuesMap);\n const rightVal = parseLiteralOrValue(right, valuesMap);\n\n switch (op) {\n case '===':\n result = leftVal === rightVal;\n break;\n case '!==':\n result = leftVal !== rightVal;\n break;\n case '==':\n // eslint-disable-next-line eqeqeq\n result = (leftVal as any) == (rightVal as any);\n break;\n case '!=':\n // eslint-disable-next-line eqeqeq\n result = (leftVal as any) != (rightVal as any);\n break;\n case '>=':\n result = (leftVal as any) >= (rightVal as any);\n break;\n case '<=':\n result = (leftVal as any) <= (rightVal as any);\n break;\n case '>':\n result = (leftVal as any) > (rightVal as any);\n break;\n case '<':\n result = (leftVal as any) < (rightVal as any);\n break;\n default:\n result = false;\n break;\n }\n }\n\n return invert ? !result : result;\n }\n\n function evaluateConditionExpression(\n expression: string,\n valuesMap: Record<string, string>,\n ): boolean {\n let expr = expression.trim();\n if (!expr.length) return false;\n\n let invert = false;\n while (expr.startsWith('!')) {\n invert = !invert;\n expr = expr.slice(1).trim();\n }\n\n const orParts = expr\n .split('||')\n .map((p) => p.trim())\n .filter((p) => p.length);\n if (!orParts.length) return invert ? true : false;\n\n let result = false;\n\n for (const orPart of orParts) {\n const andParts = orPart\n .split('&&')\n .map((p) => p.trim())\n .filter((p) => p.length);\n if (!andParts.length) continue;\n\n let andResult = true;\n for (const andPart of andParts) {\n const partResult = evaluateAtomicCondition(andPart, valuesMap);\n andResult = andResult && partResult;\n if (!andResult) break;\n }\n\n result = result || andResult;\n if (result) break;\n }\n\n return invert ? !result : result;\n }\n\n const HTML_MODIFIERS: Record<string, Modifier> = {\n COLOR: (value, param) =>\n span(param && !!color.validate(param) ? `color: ${param}` : '', value, 'color'),\n WEIGHT: (value, param) =>\n span(param && !isNaN(parseInt(param)) ? `font-weight: ${param}` : '', value, 'weight'),\n SEMIBOLD: (value) => span('font-weight: 600', value, 'semibold'),\n BOLD: (value) => span('font-weight: bold', value, 'bold'),\n BLACK: (value) => span('font-weight: 900', value, 'black'),\n LIGHT: (value) => span('font-weight: lighter', value, 'light'),\n STRONG: (value) => span('font-weight: bolder', value, 'strong'),\n ITALIC: (value) => span('font-style: italic', value, 'italic'),\n UNDERLINE: (value) => span('text-decoration: underline', value, 'underline'),\n STRIKETHROUGH: (value) => span('text-decoration: line-through', value, 'strikethrough'),\n SUB: (value) => span('vertical-align: sub', value, 'sub'),\n SUP: (value) => span('vertical-align: super', value, 'sup'),\n LARGER: (value) => span('font-size: larger', value, 'larger'),\n SMALL: (value) => span('font-size: smaller', value, 'small'),\n SHADOW: (value, param) => span(`text-shadow: ${param}`, value, 'shadow'),\n SIZE: (value, param) => span(param ? `font-size: ${param}` : '', value, 'size'),\n };\n\n const STRING_MODIFIERS: Record<string, Modifier> = {\n BT1: (value) => (amount > 1 ? value : ''),\n BT0: (value) => (amount > 0 ? value : ''),\n ST1: (value) => (amount < 1 ? value : ''),\n ST0: (value) => (amount < 0 ? value : ''),\n UPC: (value) => value.toUpperCase(),\n LOW: (value) => value.toLowerCase(),\n REV: (value) => value.split('').reverse().join(''),\n CAP: (value) => value.charAt(0).toUpperCase() + value.slice(1).toLowerCase(),\n NUMBER: (value, param, valuesMap) =>\n formatNumber(value, param, valuesMap as Record<string, string>),\n PLURAL: (value, param, valuesMap) =>\n pluralize(value, param, valuesMap as Record<string, string>),\n DATE: (value, param, valuesMap) =>\n formatDateLike(value, param, valuesMap as Record<string, string>),\n MAP: (value, param, valuesMap) =>\n mapSwitch(value, param, valuesMap as Record<string, string>),\n ESCAPE: (value) => escapeHtml(value),\n IF: (value, _param, valuesMap) => {\n const text = value ?? '';\n\n const [rawCondition, rest] = text.split('?', 2);\n if (!rest) return text;\n\n const [whenTrue, whenFalse = ''] = rest.split('|', 2);\n\n const condition = evaluateConditionExpression(\n rawCondition,\n valuesMap as Record<string, string>,\n );\n\n return condition ? whenTrue : whenFalse;\n },\n PRESET: (value, param) => {\n const name = param?.trim() ?? '';\n if (!name.length) return value;\n\n const group = PRESETS[name];\n if (!group || !group.length) return value;\n\n const modifiers = group\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part.length)\n .map((part) => {\n const [mName, mParam] = part.split(':');\n return { name: mName.trim(), param: mParam?.trim() ?? null };\n });\n\n let result = value;\n for (const { name: mName, param: mParam } of modifiers) {\n result = applyModifier(result, mName, mParam);\n }\n\n return result;\n },\n FALLBACK: (value, param) => (value.length ? value : (param ?? value)),\n };\n\n const MODIFIERS: Record<string, Modifier> = {\n ...STRING_MODIFIERS,\n ...(options?.html ? HTML_MODIFIERS : {}),\n ...(options.modifiers ?? {}),\n };\n\n const ALIASES = {\n UPC: ['UPPERCASE', 'UPPER', 'UPP'],\n LOW: ['LOWERCASE', 'LOWER', 'LWC'],\n REV: ['REVERSE', 'RVS'],\n CAP: ['CAPITALIZE', 'CAPITAL'],\n NUMBER: ['NUMBER', 'NUM', 'FORMAT_NUMBER', 'FMT_NUM'],\n PLURAL: ['PLURAL', 'PL', 'PLR'],\n DATE: ['DATE', 'DATETIME', 'TIME', 'DT'],\n MAP: ['MAP', 'SWITCH'],\n ESCAPE: ['ESCAPE', 'ESC', 'ESC_HTML', 'ESCAPE_HTML'],\n PRESET: ['PRESET', 'STYLE', 'THEME'],\n BT1: ['BIGGER_THAN_1', 'GREATER_THAN_1', 'GT1'],\n BT0: ['BIGGER_THAN_0', 'GREATER_THAN_0', 'GT0'],\n ST1: ['SMALLER_THAN_1', 'LESS_THAN_1', 'LT1'],\n ST0: ['SMALLER_THAN_0', 'LESS_THAN_0', 'LT0'],\n COLOR: ['COLOUR', 'CLR', 'HIGHLIGHT'],\n BOLD: ['BOLDEN', 'B'],\n STRONG: ['STRONGEN', 'STRONG'],\n ITALIC: ['ITALICIZE', 'ITALIC', 'I'],\n UNDERLINE: ['U', 'INS', 'INSET', 'I'],\n STRIKETHROUGH: ['STRIKE', 'S', 'DELETE', 'D'],\n SUB: ['SUBSCRIPT', 'SUBS'],\n SUP: ['SUPERSCRIPT', 'SUPS'],\n LARGER: ['LARGER', 'LG'],\n SMALL: ['SMALLER', 'SM'],\n SHADOW: ['SHADOW', 'SHD'],\n FALLBACK: ['FALLBACK', 'FB'],\n IF: ['IF', 'COND', 'CONDITION'],\n ...(options.aliases ?? {}),\n };\n\n function applyModifier(\n value: string,\n name: string,\n param: string | null | undefined,\n ): string {\n const canonical = Object.entries(ALIASES).find(([key, aliases]) => {\n if (aliases.some((alias) => alias.toUpperCase() === name.toUpperCase())) return true;\n else if (key.toUpperCase() === name.toUpperCase()) return true;\n else return false;\n });\n const use = canonical ? canonical[0] : name.toUpperCase();\n\n try {\n if (MODIFIERS[use])\n return MODIFIERS[use](value, typeof param === 'string' ? param.trim() : null, flatten);\n else if (options?.html) return span('', value, use.toLowerCase());\n else return value;\n } catch (error) {\n if (\n options?.debug &&\n typeof console !== 'undefined' &&\n typeof console.error === 'function'\n ) {\n console.error('[Helper.string.compose] Modifier error', { name, param, error });\n }\n return value;\n }\n }\n\n function replaceAll(string: string): string {\n let str = string;\n let match;\n\n while ((match = REGEX.MODIFIERS.exec(str)) !== null) {\n const [fullMatch, modifierGroup, value] = match;\n\n const modifiers = modifierGroup\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part.length)\n .map((part) => {\n const [name, param] = part.split(':');\n return { name: name.trim(), param: param?.trim() ?? null };\n });\n\n let newValue = replaceAll(value);\n\n for (const { name, param } of modifiers) {\n newValue = applyModifier(newValue, name, param);\n }\n\n str = str.replace(fullMatch, newValue ?? '');\n\n REGEX.MODIFIERS.lastIndex = 0;\n }\n\n return str;\n }\n\n function parseModifiers(str: string): string {\n let i = 0;\n const len = str.length;\n\n function parseText(stopChar?: string): string {\n let out = '';\n while (i < len) {\n if (str[i] === '\\\\') {\n if (i + 1 < len) {\n out += str[i + 1];\n i += 2;\n } else {\n i++;\n }\n } else if (str[i] === '[' && (!stopChar || stopChar !== '[')) {\n out += parseModifier();\n } else if (stopChar && str[i] === stopChar) {\n i++;\n break;\n } else {\n out += str[i++];\n }\n }\n return out;\n }\n\n function parseModifier(): string {\n i++;\n const modifiers: { name: string; param: string | null }[] = [];\n\n while (i < len && str[i] !== '=') {\n if (str[i] === ',') {\n i++;\n continue;\n }\n\n let name = '';\n while (i < len && /[A-Za-z0-9]/.test(str[i])) name += str[i++];\n\n let param: string | null = null;\n if (str[i] === ':') {\n i++;\n const paramStart = i;\n while (i < len && str[i] !== ',' && str[i] !== '=') i++;\n param = str.slice(paramStart, i);\n }\n\n if (name.length) {\n modifiers.push({ name, param });\n }\n\n if (str[i] === ',') {\n i++;\n }\n }\n\n if (str[i] === '=') i++;\n\n const value = parseText(']');\n\n return modifiers.reduce((val, { name, param }) => applyModifier(val, name, param), value);\n }\n\n return parseText();\n }\n\n let result = template.replace(REGEX.PLACEHOLDERS, (_, key: string) =>\n typeof flatten[key] === 'string' || typeof flatten[key] === 'number'\n ? String(flatten[key])\n : (key ?? key),\n );\n\n result = options.method === 'loop' ? replaceAll(result) : parseModifiers(result);\n\n return result;\n }\n }\n\n export namespace sound {\n export let playing: boolean = false;\n export let audio: AudioContext;\n\n /**\n * Play sound from URL with optional volume and replace parameters\n * @param url - Sound URL to play\n * @param volume - Volume level from 0 to 100 (default: 100)\n * @param replace - If true, replaces currently playing sound (default: false)\n */\n export function play(url: string, volume: number = 100, replace = false) {\n if (!url || !url.length) {\n throw new Error('No sound URL provided');\n }\n\n try {\n if (replace && playing && audio && audio.state !== 'closed') audio.close();\n\n let ctx = new AudioContext();\n let gainNode = ctx.createGain();\n gainNode.connect(ctx.destination);\n\n if (replace) {\n audio = ctx;\n playing = true;\n }\n\n fetch(url)\n .then((data) => data.arrayBuffer())\n .then((arrayBuffer) => ctx.decodeAudioData(arrayBuffer))\n .then((decodedAudio) => {\n if (ctx.state !== 'closed') {\n const playSound = ctx.createBufferSource();\n playSound.buffer = decodedAudio;\n playSound.connect(gainNode);\n gainNode.gain.value = volume / 100;\n playSound.start(ctx.currentTime);\n }\n });\n } catch (error) {\n throw new Error(`Error playing sound: ${error}`);\n }\n }\n }\n\n export namespace color {\n /**\n * Generate opacity hex value\n * @param opacity - Opacity value from 0 to 100\n * @param color - Hex color code\n * @returns - Hex color code with opacity\n */\n export function opacity(opacity: number = 100, color: string = '') {\n color = color.length > 7 ? color?.substring(0, 6) : color;\n opacity = opacity > 1 ? opacity / 100 : opacity;\n\n let result = Math.round(Math.min(Math.max(opacity, 0), 1) * 255)\n .toString(16)\n .toLowerCase()\n .padStart(2, '0');\n\n return color + result;\n }\n\n /**\n * Extract color and opacity from hex code\n * @param hex - Hex color code\n * @returns - Object with color and opacity\n */\n export function extract(hex: string) {\n if (!hex.startsWith('#') || hex.length <= 7) {\n return {\n color: hex,\n opacity: 100,\n };\n }\n\n var color = hex.slice(-2);\n var decimal = parseInt(color, 16) / 255;\n var percentage = Math.round(decimal * 100);\n var color = hex.length > 7 ? hex.slice(0, 7) : hex;\n\n return {\n color: color,\n opacity: percentage,\n };\n }\n\n /**\n * Validate color string format\n * @param str - Color string to validate\n * @returns Detected color format or false if invalid\n * @example\n * ```javascript\n * const format1 = color.validate(\"#FF5733\"); // \"hex\"\n * const format2 = color.validate(\"rgb(255, 87, 51)\"); // \"rgb\"\n * const format3 = color.validate(\"hsl(14, 100%, 60%)\"); // \"hsl\"\n * const format4 = color.validate(\"orangered\"); // \"css-color-name\"\n * const format5 = color.validate(\"invalid-color\"); // false\n * ```\n */\n export function validate(str: string) {\n if (typeof str !== 'string' || !String(str).trim().length) return false;\n\n const s = str.trim();\n\n // HEX (#FFF, #FFFFFF, #FFFFFFFF)\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(s) || /^#([A-Fa-f0-9]{4}|[A-Fa-f0-9]{8})$/.test(s)) {\n return 'hex';\n }\n\n // rgb(255, 255, 255)\n if (/^rgb\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*\\)$/.test(s)) {\n return 'rgb';\n }\n\n // rgba(255, 255, 255, 0.5)\n if (/^rgba\\(\\s*(?:\\d{1,3}\\s*,\\s*){3}(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'rgba';\n }\n\n // hsl(360, 100%, 100%)\n if (/^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/.test(s)) {\n return 'hsl';\n }\n\n // hsla(360, 100%, 100%, 0.5)\n if (/^hsla\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*,\\s*(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'hsla';\n }\n\n if (Data.css_color_names.includes(s.toLowerCase())) {\n return 'css-color-name';\n }\n\n return false;\n }\n\n /**\n * Convert color to different format\n * @param str - Color string to convert (e.g. \"#FF5733\", \"rgb(255, 87, 51)\")\n * @param format - Target format\n * @returns - Converted color string\n * @example\n * ```javascript\n * const hexColor = color.convert(\"rgb(255, 87, 51)\", \"hex\"); // \"#FF5733\"\n * const rgbColor = color.convert(\"#FF5733\", \"rgb\"); // \"rgb(255, 87, 51)\"\n * const hslColor = color.convert(\"#FF5733\", \"hsl\"); // \"hsl(14, 100%, 60%)\"\n * const colorName = color.convert(\"#FF5733\", \"css-color-name\"); // \"orangered\"\n * ```\n */\n export async function convert(\n str: string,\n format: 'hex' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name',\n ): Promise<string | null> {\n const valid = validate(str);\n\n if (!valid) throw new Error(`Invalid color format: ${str}`);\n\n if (valid === format) throw new Error(`Color is already in the desired format: ${format}`);\n\n const rgba = parseToRGBA(str.trim(), valid);\n\n if (!rgba) throw new Error(`Failed to parse color: ${str}`);\n\n switch (format) {\n case 'hex': {\n return rgbaToHex(rgba, false);\n }\n case 'rgb': {\n return `rgb(${rgba.r}, ${rgba.g}, ${rgba.b})`;\n }\n case 'rgba': {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n case 'hsl': {\n const hsl = rgbToHsl(rgba.r, rgba.g, rgba.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n case 'hsla': {\n const hsl = rgbToHsl(rgba.r, rgba.g, rgba.b);\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${rgba.a})`;\n }\n case 'css-color-name': {\n return await findClosestColorName(rgba.r, rgba.g, rgba.b);\n }\n default: {\n return null;\n }\n }\n }\n }\n\n export namespace random {\n /**\n * Generate random color\n * @param type - Color format\n * @returns - Random color in specified format\n * @example\n * ```javascript\n * const hexColor = random.color('hex');\n * console.log(hexColor); // e.g. #3e92cc\n *\n * const rgbColor = random.color('rgb');\n * console.log(rgbColor); // e.g. rgb(62, 146, 204)\n * ```\n */\n export function color(\n type: 'hex' | 'hexa' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' = 'hex',\n ) {\n switch (type) {\n default:\n case 'hex': {\n return `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n }\n case 'hexa': {\n const hex = `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n\n const alpha = Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0');\n\n return hex + alpha;\n }\n case 'rgb': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n case 'rgba': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n const a = Math.random().toFixed(2);\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n case 'hsl': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsla': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n const a = Math.random().toFixed(2);\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n }\n case 'css-color-name': {\n var names = Data.css_color_names;\n\n return array(names)[0];\n }\n }\n }\n\n /**\n * Generate random number\n * @param min - Minimum value\n * @param max - Maximum value\n * @param float - Number of decimal places (0 for integer)\n * @returns - Random number\n * @example\n * ```javascript\n * const intNumber = random.number(1, 10);\n * console.log(intNumber); // e.g. 7\n *\n * const floatNumber = random.number(1, 10, 2);\n * console.log(floatNumber); // e.g. 3.14\n * ```\n */\n export function number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n }\n\n /**\n * Generate random boolean\n * @param threshold - Threshold between 0 and 1\n * @returns - Random boolean\n * @example\n * ```javascript\n * const boolValue = random.boolean(0.7);\n * console.log(boolValue); // e.g. true (70% chance)\n * ```\n */\n export function boolean(threshold: number = 0.5): boolean {\n return Math.random() > threshold;\n }\n\n /**\n * Generate random string\n * @param length - Length of the string\n * @param chars - Characters to use\n * @returns - Random string\n * @example\n * ```javascript\n * const randString = random.string(10);\n * console.log(randString); // e.g. \"aZ3bT9xYqP\"\n * ```\n */\n export function string(\n length: number,\n chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',\n ): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return result;\n }\n\n /**\n * Pick random element from array\n * @param arr - Array to pick from\n * @returns - Random element and its index\n * @example\n * ```javascript\n * const [element, index] = random.array(['apple', 'banana', 'cherry']);\n * console.log(element, index); // e.g. \"banana\", 1\n * ```\n */\n export function array<T>(arr: T[]): [value: T, index: number] {\n const index = number(0, arr.length - 1);\n\n return [arr[index], index];\n }\n\n /**\n * Generate random date\n * @param start - Start date\n * @param end - End date\n * @returns - Random date between start and end\n * @example\n * ```javascript\n * const randDate = random.date(new Date(2020, 0, 1), new Date());\n * console.log(randDate); // e.g. 2022-05-15T10:30:00.000Z\n * ```\n */\n export function date(start: Date = new Date(2000, 0, 1), end: Date = new Date()): Date {\n const date = new Date(number(start.getTime(), end.getTime()));\n\n return date;\n }\n\n /**\n * Generate ISO date string offset by days\n * @param daysAgo - Number of days to go back\n * @returns - ISO date string\n * @example\n * ```javascript\n * const isoDate = random.daysOffset(7);\n * console.log(isoDate); // e.g. \"2024-06-10T14:23:45.678Z\"\n *\n * const isoDate30 = random.daysOffset(30);\n * console.log(isoDate30); // e.g. \"2024-05-18T09:15:30.123Z\"\n * ```\n */\n export function daysOffset(daysAgo: number): string {\n const now = Date.now();\n const past = now - number(0, daysAgo * 24 * 60 * 60 * 1000);\n\n return new Date(past).toISOString();\n }\n\n /**\n * Generate UUID v4\n * @returns - UUID string\n * @example\n * ```javascript\n * const uuid = random.uuid();\n * console.log(uuid); // e.g. \"3b12f1df-5232-4e3a-9a0c-3f9f1b1b1b1b\"\n * ```\n */\n export function uuid(): string {\n return crypto.randomUUID();\n }\n }\n\n export namespace fn {\n /**\n * Apply function with given thisArg and arguments\n * @param fn - Function to apply\n * @param thisArg - Value to use as this when calling fn\n * @param args - Arguments to pass to fn\n * @returns Result of calling fn with thisArg and args\n */\n export function apply<TThis, TArgs extends unknown[], TReturn>(\n fn: (this: TThis, ...args: TArgs) => TReturn,\n thisArg: TThis,\n args: TArgs,\n ): TReturn {\n return fn.apply(thisArg, args);\n }\n\n /**\n * Call function with given thisArg and arguments\n * @param fn - Function to call\n * @param thisArg - Value to use as this when calling fn\n * @param args - Arguments to pass to fn\n * @returns Result of calling fn with thisArg and args\n */\n export function call<TThis, TArgs extends unknown[], TReturn>(\n fn: (this: TThis, ...args: TArgs) => TReturn,\n thisArg: TThis,\n ...args: TArgs\n ): TReturn {\n return fn.call(thisArg, ...args);\n }\n }\n\n export namespace utils {\n /**\n * Delays execution for a specified number of milliseconds.\n * @param ms - The number of milliseconds to delay.\n * @returns A Promise that resolves after the specified delay.\n */\n export function delay<R extends any, M extends number>(\n ms: M,\n callback?: () => R,\n ): Promise<R | null> {\n return new Promise((resolve) =>\n setTimeout(() => {\n if (callback) {\n const result = callback();\n resolve(result ?? null);\n } else resolve(null);\n }, ms),\n );\n }\n\n /**\n * Returns typed entries of an object.\n * @param obj - The object to get entries from.\n * @returns An array of key-value pairs from the object.\n */\n export function typedEntries<K extends string, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][];\n }\n\n /**\n * Returns typed values of an object.\n * @param obj - The object to get values from.\n * @returns An array of values from the object.\n */\n export function typedValues<K extends string, V>(obj: Record<K, V>): V[] {\n return Object.values(obj) as V[];\n }\n\n /**\n * Returns typed keys of an object.\n * @param obj - The object to get keys from.\n * @returns An array of keys from the object.\n */\n export function typedKeys<K extends string, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[];\n }\n\n /**\n * Selects an item based on weighted probabilities.\n * @param items - An object where keys are items and values are their weights.\n * @returns A randomly selected item based on the given probabilities.\n */\n export function probability<K extends string, V extends number>(\n items: Record<K, V>,\n ): K | undefined {\n const total = (Object.values(items) as number[]).reduce((acc, val) => acc + val, 0);\n const sorted = typedEntries(items).sort((a, b) => b[1] - a[1]);\n const rand = Math.random() * total;\n\n let cumulative = 0;\n\n for (const [item, weight] of sorted) {\n cumulative += weight;\n\n if (rand < cumulative) {\n return item;\n }\n }\n\n return undefined;\n }\n }\n}\n","import { Client } from '../client/client.js';\nimport { Helper } from '../helper/index.js';\nimport { logger } from '../main.js';\nimport { StreamElements } from '../types/index.js';\n\ninterface ButtonOptions {\n field: string | ((field: string, value: string | boolean | number) => boolean);\n template?: string;\n name?: string;\n value?: string;\n run: (field: string, value: string | boolean | number) => void;\n}\n\n/**\n * Represents a button action that can be triggered by custom fields in StreamElements.\n * The button can be configured with a template and a name, and it will execute a specified function when triggered.\n * @example\n * ```javascript\n * const button = new Button({\n * field: (field, value) => field.startsWith('message-') && field.split('-')[1],\n * template: 'message-{role}',\n * // name: '[CAP={role}] role message',\n * name: 'Generate {role} message',\n * run(field, value) {\n * console.log(`Button ${field} was clicked with value: ${value}`);\n * }\n * })\n *\n * const field = button.generate([{ role: 'broadcaster' }, { role: 'moderator' }]);\n * // This will create buttons with fields \"message-broadcaster\" and \"message-moderator\" and names \"Generate broadcaster message\" and \"Generate moderator message\".\n * // field['message-broadcaster'] => { type: 'button', label: 'Generate broadcaster message' }\n * // field['message-moderator'] => { type: 'button', label: 'Generate moderator message' }\n *\n * // When a custom field with the name \"message-broadcaster\" or \"message-moderator\" is triggered, the run function will be called with the field and value.\n * ```\n */\nexport class Button {\n field: ButtonOptions['field'] = 'button';\n template: string = 'button';\n name: string = 'Button';\n value: string = '';\n\n run!: ButtonOptions['run'];\n\n constructor(options: ButtonOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.field = options.field ?? this.field;\n this.template = options.template ?? (typeof this.field === 'string' ? this.field : this.template);\n this.name = options.name ?? this.name;\n this.value = options.value ?? this.value;\n this.run = options.run;\n\n // Register the button in the client actions\n window.client.actions.buttons.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n generate(values: Array<Record<string, string | number>>) {\n const fields = Helper.utils.typedValues(values).reduce(\n (acc, values, index) => {\n const key = Helper.string.compose(this.template, { index, ...values }, { html: false });\n const name = Helper.string.compose(this.name, { index, ...values }, { html: false });\n\n acc[key] = {\n type: 'button',\n label: name,\n };\n\n let value: string | number | boolean = Helper.string.compose(String(this.value), { index, ...values }, { html: false });\n\n if (!isNaN(Number(value))) value = Number(value);\n else if (value.toLowerCase() === 'true') value = true;\n else if (value.toLowerCase() === 'false') value = false;\n\n if (typeof value !== 'undefined' && !!value && (typeof value === 'string' ? value.length : true)) {\n acc[key].value = value;\n }\n\n return acc;\n },\n {} as Record<string, StreamElements.CustomField.Schema>,\n );\n\n // let result = Helper.string.compose(this.template, values, { html: false });\n\n return fields;\n }\n\n parse(field: string, value: string | boolean | number): Button {\n /**\n * Extract the actual field name by removing the template part from the provided field.\n * For example, if the template is \"button-{id}\" and the field is \"button-123\",\n * this will extract \"123\" as the actual field name.\n */\n var f = field.replace(typeof this.field === 'string' ? this.field : (this.template.replace(/\\{[^}]*\\}/g, '') ?? ''), '').trim();\n\n try {\n this.run.apply(window.client, [f.length ? f : (field ?? field), value]);\n } catch (error) {\n throw new Error(`Error running button \"${this.field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return this;\n }\n\n remove(): void {\n if (!(window.client instanceof Client)) return;\n\n const index = window.client.actions.buttons.indexOf(this);\n\n if (index > -1) {\n window.client.actions.buttons.splice(index, 1);\n window.client.emit('action', this, 'removed');\n }\n }\n\n static execute(field: string, value: string | boolean | number): boolean {\n try {\n if (!(window.client instanceof Client)) return false;\n\n if (window.client.actions.buttons.length) {\n const buttons = window.client.actions.buttons.filter((b) => {\n /**\n * Check if the button's field matches the provided field.\n */\n if (typeof b.field === 'string') return b.field === field;\n /**\n * If the button's field is a function, call it with the provided field and value to determine a match.\n */\n if (typeof b.field === 'function') return b.field(field, value);\n\n return false;\n });\n\n if (buttons.length && buttons.every((b) => b instanceof Button)) {\n buttons.forEach((button) => {\n try {\n button.parse(field, value);\n\n window.client.emit('action', button, 'executed');\n\n logger.received(`Button executed: ${field}${value ? ` with value: ${value}` : ''}`);\n } catch (error) {\n logger.error(`Error executing button \"${field}\": ${error instanceof Error ? error.message : error}`);\n }\n });\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport type { ClientEvents, Provider } from '../types/client.js';\nimport { logger } from '../main.js';\nimport { useQueue } from '../modules/useQueue.js';\nimport { Helper } from '../helper/index.js';\nimport { Data } from '../data/index.js';\n\nexport namespace Local {\n type Queue = useQueue<\n | { listener: 'onEventReceived'; data: StreamElements.Event.onEventReceived; session?: boolean }\n | { listener: 'onWidgetLoad'; data: StreamElements.Event.onWidgetLoad }\n | { listener: 'onSessionUpdate'; data: StreamElements.Event.onSessionUpdate }\n >;\n\n export var queue: Queue | undefined;\n\n export const generate = {\n session: {\n types: {\n name: { type: 'string', options: Data.names.filter((e) => e.length) },\n tier: { type: 'string', options: Data.tiers.filter((e) => e.length) },\n message: { type: 'string', options: Data.messages.filter((e) => e.length) },\n item: { type: 'array', options: Data.items },\n avatar: { type: 'string', options: Data.avatars.filter((e) => e.length) },\n } as Record<string, StreamElements.Session.Config.Any>,\n\n available(): StreamElements.Session.Config.Available.Data {\n const types = this.types;\n\n return {\n follower: {\n latest: { name: types.name },\n session: { count: { type: 'int', min: 50, max: 200 } },\n week: { count: { type: 'int', min: 200, max: 1000 } },\n month: { count: { type: 'int', min: 1000, max: 3000 } },\n goal: { amount: { type: 'int', min: 3000, max: 7000 } },\n total: { count: { type: 'int', min: 7000, max: 10000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: { name: types.name, createdAt: { type: 'date', range: 400 } },\n },\n },\n subscriber: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n message: types.message,\n },\n 'new-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'resub-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'gifted-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n tier: types.tier,\n sender: types.name,\n },\n session: { count: { type: 'int', min: 10, max: 40 } },\n 'new-session': { count: { type: 'int', min: 10, max: 40 } },\n 'resub-session': { count: { type: 'int', min: 10, max: 40 } },\n 'gifted-session': { count: { type: 'int', min: 10, max: 40 } },\n week: { count: { type: 'int', min: 40, max: 100 } },\n month: { count: { type: 'int', min: 100, max: 200 } },\n goal: { amount: { type: 'int', min: 200, max: 300 } },\n total: { count: { type: 'int', min: 300, max: 400 } },\n points: { amount: { type: 'int', min: 100, max: 400 } },\n 'alltime-gifter': { name: types.name, amount: { type: 'int', min: 300, max: 400 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n host: {\n latest: { name: types.name, amount: { type: 'int', min: 1, max: 10 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 1, max: 10 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n raid: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n charityCampaignDonation: {\n latest: { name: types.name, amount: { type: 'int', min: 50, max: 150 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 50, max: 200 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 500 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 800 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1000 },\n },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 800 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1000 },\n },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 50, max: 150 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheer: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n message: types.message,\n },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 1000 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 5000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 5000, max: 12000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 12000, max: 20000 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 1000 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 5000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 5000, max: 12000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 12000, max: 20000 },\n },\n session: { amount: { type: 'int', min: 200, max: 1000 } },\n week: { amount: { type: 'int', min: 1000, max: 5000 } },\n month: { amount: { type: 'int', min: 5000, max: 12000 } },\n goal: { amount: { type: 'int', min: 12000, max: 18000 } },\n total: { amount: { type: 'int', min: 18000, max: 20000 } },\n count: { count: { type: 'int', min: 200, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheerPurchase: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 400, max: 800 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1500 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1500, max: 2000 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1500 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1500, max: 2000 },\n },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n superchat: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n hypetrain: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n active: { type: 'int', min: 0, max: 1 },\n level: { type: 'int', min: 5, max: 10 },\n levelChanged: { type: 'int', min: 0, max: 5 },\n _type: { type: 'array', options: ['follower', 'subscriber', 'cheer', 'donation'] },\n },\n 'level-goal': { amount: { type: 'int', min: 0, max: 100 } },\n 'level-progress': {\n amount: { type: 'int', min: 0, max: 100 },\n percent: { type: 'int', min: 0, max: 100 },\n },\n total: { amount: { type: 'int', min: 0, max: 100 } },\n 'latest-top-contributors': { type: 'recent', amount: 25, value: { name: types.name } },\n },\n 'channel-points': {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n message: types.message,\n redemption: { type: 'array', options: ['Reward 1', 'Reward 2', 'Reward 3'] },\n },\n },\n tip: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n merch: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n },\n 'goal-orders': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-items': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-total': { amount: { type: 'int', min: 0, max: 100 } },\n recent: { type: 'recent', amount: 25, value: { name: types.name } },\n },\n purchase: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n avatar: types.avatar,\n message: types.message,\n },\n },\n };\n },\n\n async get(startSession?: StreamElements.Session.Data): Promise<StreamElements.Session.Data> {\n const available = this.available();\n\n if (startSession) return startSession;\n\n const generate = (\n available:\n | StreamElements.Session.Config.Available.Data\n | StreamElements.Session.Config.Available.Category\n | StreamElements.Session.Config.Any,\n ): any => {\n const generateRecentData = (config: StreamElements.Session.Config.Any): Array<any> => {\n if (!config || !('amount' in config)) return [];\n\n const items: Array<{ createdAt: string }> = [];\n\n for (let i = 0; i < config.amount; i++) {\n items.push(generate(config.value));\n }\n\n return items.sort(\n (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n );\n };\n\n const generateObjectData = (config: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const key in config) {\n const processedKey = key.replace('_type', 'type');\n\n result[processedKey] = generate(config[key]);\n }\n\n return result;\n };\n\n const processTypedConfig = (config: StreamElements.Session.Config.Any): any => {\n if (!config) return config;\n\n switch (config.type) {\n case 'int':\n return Helper.random.number(config.min, config.max);\n case 'string':\n return Helper.random.array(config.options)[0];\n case 'date':\n return Helper.random.daysOffset(config.range);\n case 'array':\n return Helper.random.array(config.options)[0];\n case 'recent':\n return generateRecentData(config);\n default:\n return config;\n }\n };\n\n // Main generation logic\n\n // Handle primitive values (non-objects)\n if (typeof available !== 'object' || available === null) {\n return available;\n }\n\n // Handle typed configurations (objects with a 'type' property)\n if ('type' in available && typeof available.type === 'string') {\n return processTypedConfig(available);\n }\n\n // Handle generic objects - recursively process each property\n return generateObjectData(available);\n };\n\n var session: StreamElements.Session.Data = Object.entries(generate(available)).reduce(\n (acc, [key, value]) => {\n Object.entries(value as any).forEach(\n ([subKey, subValue]) =>\n //\n (acc[`${key}-${subKey}`] = subValue),\n );\n\n return acc;\n },\n {} as Record<string, any>,\n ) as StreamElements.Session.Data;\n\n return session;\n },\n },\n event: {\n /**\n * Simulates the onWidgetLoad event for a widget.\n * @param fields - The field values to be included in the event.\n * @param session - The session data to be included in the event.\n * @param currency - The currency to be used (default is 'USD').\n * @returns A Promise that resolves to the simulated onWidgetLoad event data.\n */\n async onWidgetLoad(\n fields: Record<string, StreamElements.CustomField.Value>,\n session: StreamElements.Session.Data,\n currency: 'BRL' | 'USD' | 'EUR' = 'USD',\n ): Promise<StreamElements.Event.onWidgetLoad> {\n const currencies = {\n BRL: { code: 'BRL', name: 'Brazilian Real', symbol: 'R$' },\n USD: { code: 'USD', name: 'US Dollar', symbol: '$' },\n EUR: { code: 'EUR', name: 'Euro', symbol: '€' },\n };\n\n return {\n channel: {\n username: 'local',\n apiToken: '',\n id: '',\n providerId: '',\n avatar: '',\n },\n currency: currencies[currency] ?? currencies.USD,\n fieldData: fields,\n recents: [],\n session: {\n data: session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: {\n isEditorMode: true,\n muted: false,\n },\n emulated: true,\n };\n },\n /**\n * Simulates the onSessionUpdate event for a widget.\n * @param session - The session data to be included in the event.\n * @returns A Promise that resolves to the simulated onSessionUpdate event data.\n */\n async onSessionUpdate(\n session?: StreamElements.Session.Data,\n update?: ClientEvents,\n ): Promise<StreamElements.Event.onSessionUpdate> {\n session ??= await Local.generate.session.get();\n\n if (update) {\n const orderByDateDesc = (a: { createdAt: string }, b: { createdAt: string }) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();\n\n switch (update.provider) {\n case 'twitch': {\n const data = update.data;\n\n switch (data.listener) {\n case 'cheer-latest': {\n const amount = data.event.amount;\n const name = data.event.displayName ?? data.event.name;\n const message = data.event.message;\n\n session['cheer-latest'] = { name, amount, message };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`cheer-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`cheer-${type}-top-donator`];\n\n const donatorCurrent = session['cheer-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['cheer-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['cheer-session'].amount += amount;\n session['cheer-week'].amount += amount;\n session['cheer-month'].amount += amount;\n session['cheer-total'].amount += amount;\n session['cheer-count'].count += 1;\n session['cheer-goal'].amount += amount;\n session['cheer-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['cheer-recent'] = (session['cheer-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n case 'follower-latest': {\n const name = data.event.displayName ?? data.event.name;\n\n session['follower-latest'].name = name;\n\n session['follower-session'].count += 1;\n session['follower-week'].count += 1;\n session['follower-month'].count += 1;\n session['follower-total'].count += 1;\n session['follower-goal'].amount += 1;\n session['follower-recent'].unshift({\n name: name,\n createdAt: new Date().toISOString(),\n });\n session['follower-recent'] = (session['follower-recent'] || []).sort(\n orderByDateDesc,\n );\n\n break;\n }\n case 'subscriber-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n const tier = data.event.tier;\n const message = data.event.message;\n\n session['subscriber-latest'] = { name, amount, tier, message: message ?? '' };\n\n if (\n !session['subscriber-recent'].find(\n (e) => e.name.toLowerCase() === name.toLowerCase(),\n )\n ) {\n session['subscriber-new-latest'] = { name, amount, message: message ?? '' };\n session['subscriber-new-session'].count += 1;\n } else if (amount > 1) {\n session['subscriber-resub-latest'] = { name, amount, message: message ?? '' };\n session['subscriber-resub-session'].count += 1;\n }\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n const sender = data.event.sender;\n // gift\n session['subscriber-gifted-latest'] = {\n name,\n amount,\n tier,\n message: message ?? '',\n sender,\n };\n session['subscriber-gifted-session'].count += 1;\n\n session['subscriber-alltime-gifter'] = { name: sender, amount };\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n }\n\n session['subscriber-session'].count += amount;\n session['subscriber-week'].count += amount;\n session['subscriber-month'].count += amount;\n session['subscriber-total'].count += amount;\n session['subscriber-goal'].amount += amount;\n session['subscriber-points'].amount += amount;\n\n session['subscriber-recent'].unshift({\n name: name,\n amount: amount,\n tier: tier,\n createdAt: new Date().toISOString(),\n });\n session['subscriber-recent'] = (session['subscriber-recent'] || []).sort(\n orderByDateDesc,\n );\n\n break;\n }\n case 'raid-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['raid-latest'] = { name, amount };\n\n session['raid-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['raid-recent'] = (session['raid-recent'] || []).sort(orderByDateDesc);\n break;\n }\n }\n\n break;\n }\n\n case 'youtube': {\n const data = update.data;\n\n switch (data.listener) {\n case 'superchat-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['superchat-latest'] = {\n name: name.toLowerCase(),\n displayName: name,\n amount,\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n providerId: '',\n avatar: '',\n };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`superchat-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`superchat-${type}-top-donator`];\n\n const donatorCurrent = session['superchat-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['superchat-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['superchat-session'].amount += amount;\n session['superchat-week'].amount += amount;\n session['superchat-month'].amount += amount;\n session['superchat-total'].amount += amount;\n session['superchat-count'].count += 1;\n session['superchat-goal'].amount += amount;\n session['superchat-recent'].unshift({\n name: name.toLowerCase(),\n displayName: name,\n amount: amount,\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n avatar: '',\n providerId: '',\n });\n // session['superchat-recent'] = (session['superchat-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n }\n\n break;\n }\n\n case 'streamelements': {\n const data = update.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['tip-latest'] = { name, amount };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`tip-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`tip-${type}-top-donator`];\n\n const donatorCurrent = session['tip-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['tip-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['tip-session'].amount += amount;\n session['tip-week'].amount += amount;\n session['tip-month'].amount += amount;\n session['tip-total'].amount += amount;\n session['tip-count'].count += 1;\n session['tip-goal'].amount += amount;\n session['tip-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['tip-recent'] = (session['tip-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n case 'event:test': {\n break;\n }\n }\n\n break;\n }\n }\n }\n\n return { session, emulated: true };\n },\n /**\n * Simulates the onEventReceived event for a widget.\n * @param provider - The provider of the event (default is 'random').\n * @param type - The type of event to simulate (default is 'random').\n * @param options - Additional options to customize the event data.\n * @returns A Promise that resolves to the simulated onEventReceived event data, or null if the event type is not supported.\n * @example\n * ```javascript\n * // Simulate a random event\n * const randomEvent = await Local .generate.event.onEventReceived();\n *\n * // Simulate a Twitch message event with custom options\n * const twitchMessageEvent = await Local .generate.event.onEventReceived('twitch', 'message', { name: 'Streamer', message: 'Hello World!' });\n * ```\n */\n async onEventReceived(\n provider: Provider | 'random' = 'random',\n type:\n | StreamElements.Event.onEventReceived['listener']\n | 'random'\n | 'tip'\n | 'cheer'\n | 'follower'\n | 'raid'\n | 'subscriber' = 'random',\n options: Record<string, string | number | boolean> = {},\n ): Promise<StreamElements.Event.onEventReceived | null> {\n const available: Record<Provider, string[]> = {\n twitch: [\n 'message',\n 'follower-latest',\n 'cheer-latest',\n 'raid-latest',\n 'subscriber-latest',\n ],\n streamelements: ['tip-latest'],\n youtube: ['message', 'superchat-latest', 'subscriber-latest', 'sponsor-latest'],\n kick: [],\n facebook: [],\n };\n\n switch (provider) {\n default:\n case 'random': {\n var randomProvider = Helper.random.array(\n Object.keys(available).filter((e) => available[e as Provider].length),\n )[0] as Provider;\n var randomEvent = Helper.random.array(\n available[randomProvider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(randomProvider, randomEvent);\n }\n\n case 'twitch': {\n switch (\n type as\n | StreamElements.Event.Provider.Twitch.Events['listener']\n | 'random'\n | 'cheer'\n | 'follower'\n | 'raid'\n | 'subscriber'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var badges = await Helper.message.generateBadges(\n (options?.badges as Helper.message.BadgeOptions) ?? [],\n provider,\n );\n\n var emotes = Helper.message.findEmotesInText(message);\n var renderedText = Helper.message.replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Helper.random.color('hex');\n var userId =\n (options?.userId as string) ??\n Helper.random.number(10000000, 99999999).toString();\n var msgId = (options?.msgId as string) ?? Helper.random.uuid();\n var time = (options?.time as number) ?? Date.now();\n\n var channel = (options?.channel as string) ?? client.details.user.username;\n\n const event: StreamElements.Event.Provider.Twitch.Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n time: time,\n tags: {\n 'badge-info': `${badges.keys.map((key) => `${key}/${Helper.random.number(1, 5)}`).join(',')}`,\n 'badges': badges.keys.join('/1,'),\n\n 'mod': badges.keys.includes('moderator') ? '1' : '0',\n 'subscriber': badges.keys.includes('subscriber') ? '1' : '0',\n 'turbo': badges.keys.includes('turbo') ? '1' : '0',\n\n 'tmi-sent-ts': time.toString(),\n\n 'user-id': userId,\n 'user-type': '',\n\n 'color': color,\n 'display-name': name,\n 'emotes': '',\n\n 'client-nonce': Helper.random.string(16),\n 'flags': '',\n 'id': msgId,\n 'first-msg': '0',\n 'returning-chatter': '0',\n },\n nick: name.toLowerCase(),\n displayName: name,\n displayColor: color,\n channel: channel,\n text: message,\n isAction: false,\n userId: userId,\n msgId: msgId,\n badges: badges.badges,\n emotes: emotes,\n },\n renderedText: renderedText,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'cheer':\n case 'cheer-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 10000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Cheer & {\n event: { provider: Provider };\n } = {\n listener: 'cheer-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n message: message,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'cheer',\n originalEventName: 'cheer-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'follower':\n case 'follower-latest': {\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Follower & {\n event: { provider: Provider };\n } = {\n listener: 'follower-latest',\n event: {\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'follower',\n originalEventName: 'follower-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'raid':\n case 'raid-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(1, 100);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Raid & {\n event: { provider: Provider };\n } = {\n listener: 'raid-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'raid',\n originalEventName: 'raid-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var tier =\n (options?.tier as string) ??\n Helper.random.array(['1000', '2000', '3000', 'prime'])[0];\n var amount = (options?.amount as number) ?? Helper.random.number(1, 24);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var sender =\n (options?.sender as string) ??\n Helper.random.array(Data.names.filter((e) => e.length && e !== name))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as StreamElements.Event.Provider.Twitch.gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as StreamElements.Event.Provider.Twitch.community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as StreamElements.Event.Provider.Twitch.spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Helper.random.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: StreamElements.Event.Provider.Twitch.Subscriber & {\n event: { provider: Provider };\n } = {\n listener: 'subscriber-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n tier: tier as StreamElements.Event.Provider.Twitch.SubscriberTier,\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'delete-message': {\n const event: StreamElements.Event.Provider.Twitch.DeleteMessage & {\n event: { provider: Provider };\n } = {\n listener: 'delete-message',\n event: {\n msgId: (options?.id as string) ?? Helper.random.uuid(),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'delete-messages': {\n const event: StreamElements.Event.Provider.Twitch.DeleteMessages & {\n event: { provider: Provider };\n } = {\n listener: 'delete-messages',\n event: {\n userId:\n (options?.id as string) ??\n Helper.random.number(10000000, 99999999).toString(),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n\n case 'streamelements': {\n switch (\n type as\n | StreamElements.Event.Provider.StreamElements.Events['listener']\n | 'random'\n | 'tip'\n | 'mute'\n | 'unmute'\n | 'skip'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'tip':\n case 'tip-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.StreamElements.Tip & {\n event: { provider: Provider };\n } = {\n listener: 'tip-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'tip',\n originalEventName: 'tip-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'kvstore:update': {\n const event: StreamElements.Event.Provider.StreamElements.KVStore & {\n event: { provider: Provider };\n } = {\n listener: 'kvstore:update',\n event: {\n data: {\n key: `customWidget.${(options?.key as string) ?? 'sampleKey'}`,\n value: (options?.value as string) ?? 'sampleValue',\n },\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'bot:counter': {\n const event: StreamElements.Event.Provider.StreamElements.BotCounter & {\n event: { provider: Provider };\n } = {\n listener: 'bot:counter',\n event: {\n counter: (options?.counter as string) ?? 'sampleCounter',\n value: (options?.value as number) ?? Helper.random.number(0, 100),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'mute':\n case 'unmute':\n case 'alertService:toggleSound': {\n var muted = (options?.muted as boolean) ?? !client.details.overlay.muted;\n\n const event: StreamElements.Event.Provider.StreamElements.AlertService & {\n event: { provider: Provider };\n } = {\n listener: 'alertService:toggleSound',\n event: {\n muted,\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'skip':\n case 'event:skip': {\n const event: StreamElements.Event.Provider.StreamElements.EventSkip & {\n event: { provider: Provider };\n } = {\n listener: 'event:skip',\n event: {\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n\n case 'youtube': {\n switch (\n type as\n | StreamElements.Event.Provider.YouTube.Events['listener']\n | 'random'\n | 'message'\n | 'superchat'\n | 'subscriber'\n | 'sponsor'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n const badges = await Helper.message.generateBadges(\n (options?.badges as Helper.message.BadgeOptions) ?? [],\n provider,\n );\n\n var emotes = Helper.message.findEmotesInText(message);\n var renderedText = Helper.message.replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Helper.random.color('hex');\n var userId =\n (options?.userId as string) ??\n Helper.random.number(10000000, 99999999).toString();\n var msgId = (options?.msgId as string) ?? Helper.random.uuid();\n var time = (options?.time as number) ?? Date.now();\n\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n\n var channel = (options?.channel as string) ?? client.details.user.username;\n\n const event: StreamElements.Event.Provider.YouTube.Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n kind: '',\n etag: '',\n id: '',\n snippet: {\n type: '',\n liveChatId: '',\n authorChannelId: channel,\n publishedAt: new Date().toISOString(),\n hasDisplayContent: true,\n displayMessage: message,\n textMessageDetails: {\n messageText: message,\n },\n },\n authorDetails: {\n channelId: channel,\n channelUrl: '',\n displayName: name,\n profileImageUrl: avatar,\n ...badges,\n },\n msgId: msgId,\n userId: userId,\n nick: name.toLowerCase(),\n badges: [],\n displayName: name,\n isAction: false,\n time: time,\n tags: [],\n displayColor: color,\n channel: channel,\n text: message,\n avatar: avatar,\n emotes: [],\n },\n renderedText: message,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.YouTube.Subscriber & {\n event: { provider: Provider };\n } = {\n listener: 'subscriber-latest',\n event: {\n avatar,\n displayName: name,\n name: name.toLowerCase(),\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'superchat':\n case 'superchat-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.YouTube.Superchat & {\n event: { provider: Provider };\n } = {\n listener: 'superchat-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'sponsor':\n case 'sponsor-latest': {\n var tier =\n (options?.tier as string) ?? Helper.random.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Helper.random.number(1, 24);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var sender =\n (options?.sender as string) ??\n Helper.random.array(Data.names.filter((e) => e.length && e !== name))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as StreamElements.Event.Provider.YouTube.gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as StreamElements.Event.Provider.YouTube.community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as StreamElements.Event.Provider.YouTube.spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Helper.random.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: StreamElements.Event.Provider.YouTube.Sponsor & {\n event: { provider: Provider };\n } = {\n listener: 'sponsor-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'sponsor',\n originalEventName: 'sponsor-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n }\n },\n },\n };\n\n export const emulate = {\n twitch: {\n message(\n data: Partial<{\n name: string;\n message: string;\n badges: Helper.message.BadgeOptions;\n color: string;\n userId: string;\n msgId: string;\n channel: string;\n time: number;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'message',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n deleteMessage(msgId: string) {\n if (!msgId || typeof msgId !== 'string') return;\n\n const event: StreamElements.Event.Provider.Twitch.DeleteMessage = {\n listener: 'delete-message',\n event: {\n msgId: msgId,\n },\n };\n\n Local.emulate.send('onEventReceived', event);\n },\n deleteMessages(userId: string) {\n if (!userId || typeof userId !== 'string') return;\n\n const event: StreamElements.Event.Provider.Twitch.DeleteMessages = {\n listener: 'delete-messages',\n event: {\n userId: userId,\n },\n };\n\n Local.emulate.send('onEventReceived', event);\n },\n follower(\n data: Partial<{\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'follower-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n raid(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'raid-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n cheer(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n message: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'cheer-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(\n data: Partial<{\n tier: '1000' | '2000' | '3000' | 'prime';\n amount: number;\n avatar: string;\n name: string;\n sender: string;\n message: string;\n subType: 'default' | 'gift' | 'community' | 'spam';\n }> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'subscriber-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n streamelements: {\n tip(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'streamelements',\n 'tip-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n youtube: {\n message(\n data: Partial<{\n name: string;\n message: string;\n badges: Helper.message.BadgeOptions;\n color: string;\n userId: string;\n msgId: string;\n channel: string;\n time: number;\n avatar: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'message',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(\n data: Partial<{\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'subscriber-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n superchat(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'superchat-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n sponsor(\n data: Partial<{\n tier: '1000' | '2000' | '3000';\n amount: number;\n avatar: string;\n name: string;\n sender: string;\n message: string;\n subType: 'default' | 'gift' | 'community' | 'spam';\n }> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'sponsor-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n kick: {},\n facebook: {},\n\n send<T extends 'onEventReceived' | 'onSessionUpdate' | 'onWidgetLoad'>(\n listener: T,\n event: T extends 'onEventReceived'\n ? StreamElements.Event.onEventReceived\n : T extends 'onSessionUpdate'\n ? StreamElements.Event.onSessionUpdate\n : StreamElements.Event.onWidgetLoad,\n ): void {\n if (!Local.queue) {\n logger.warn('Local queue is not initialized.');\n\n window.dispatchEvent(new CustomEvent(listener, { detail: event }));\n\n return;\n }\n\n switch (listener) {\n case 'onEventReceived': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onEventReceived,\n session: listener === 'onEventReceived' ? true : undefined,\n });\n\n break;\n }\n case 'onSessionUpdate': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onSessionUpdate,\n });\n\n break;\n }\n case 'onWidgetLoad': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onWidgetLoad,\n });\n\n break;\n }\n }\n },\n };\n\n export async function start(\n fieldsFile: string[] = ['fields.json', 'cf.json', 'field.json', 'customfields.json'],\n dataFiles: string[] = ['data.json', 'fielddata.json', 'fd.json', 'DATA.json'],\n session?: StreamElements.Session.Data,\n ) {\n const localFiles = {\n fields: fieldsFile.find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n data: dataFiles.find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n };\n\n const data: Record<string, string | number | boolean> = await fetch(\n './' + (localFiles.data ?? 'data.json'),\n {\n cache: 'no-store',\n },\n )\n .then((res) => res.json())\n .catch(() => ({}));\n\n await fetch('./' + (localFiles.fields ?? 'fields.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .then(async (customfields: Record<string, StreamElements.CustomField.Schema>) => {\n const fields = Object.entries(customfields)\n .filter(([_, { value }]) => value != undefined)\n .reduce(\n (acc, [key, { value }]) => {\n if (data && data[key] !== undefined) value = data[key];\n\n acc[key] = value;\n\n return acc;\n },\n {\n ...data,\n } as Record<string, StreamElements.CustomField.Value>,\n );\n\n const load = await Local.generate.event.onWidgetLoad(\n fields,\n await Local.generate.session.get(session),\n );\n\n window.dispatchEvent(new CustomEvent('onWidgetLoad', { detail: load }));\n });\n }\n}\n","import { EventProvider } from './EventProvider.js';\nimport { Client } from '../client/client.js';\nimport { logger } from '../main.js';\n\ntype QueueEvents<T> = {\n load: [];\n cancel: [];\n update: [\n queue: QueueItem<T>[],\n priorityQueue: QueueItem<T>[],\n history: QueueItem<T>[],\n timeouts: Array<ReturnType<typeof setTimeout>>,\n ];\n process: [item: QueueItem<T>, queue: useQueue<T>];\n};\n\ntype QueueProps = {\n isoDate: string;\n isLoop: boolean;\n isPriority: boolean;\n isImmediate: boolean;\n};\n\ntype QueueItem<T> = { value: T } & QueueProps;\n\ntype QueueProcessor<T> = (this: useQueue<T>, item: T, queue: useQueue<T>) => Promise<any>;\n\ntype QueueDuration = number | boolean | undefined;\n\ninterface QueueOptions<T> {\n /**\n * Duration between processing each item in milliseconds. Set to `0` or `false` for immediate processing.\n */\n duration?: QueueDuration | 'client';\n /**\n * Function to process each item in the queue.\n */\n processor: QueueProcessor<T>;\n}\n\n/**\n * A utility class to manage a queue of items with support for priority, looping, and immediate processing.\n * @template T - The type of items in the queue.\n * @extends EventProvider<QueueEvents<T>>\n * @example\n * ```javascript\n * const myQueue = new useQueue({\n * duration: 1000,\n * processor: async function (item) {\n * console.log('Processing item:', item);\n * },\n * });\n *\n * myQueue.enqueue('Item 1');\n * myQueue.enqueue('Item 2', { isPriority: true });\n * ```\n */\nexport class useQueue<T> extends EventProvider<QueueEvents<T>> {\n queue: QueueItem<T>[] = [];\n priorityQueue: QueueItem<T>[] = [];\n history: QueueItem<T>[] = [];\n\n private timeouts: Array<ReturnType<typeof setTimeout>> = [];\n\n public running: boolean = false;\n\n public duration: QueueDuration = undefined;\n\n private loaded: boolean = false;\n\n public processor!: QueueProcessor<T>;\n\n private readonly clientWaitRetryDelay = 50;\n\n constructor(options: QueueOptions<T>) {\n super();\n\n if (!options.processor || typeof options.processor !== 'function') {\n throw new Error('A valid processor function must be provided to useQueue.');\n }\n\n this.processor = options.processor;\n\n if (options.duration !== 'client') this.duration = options.duration ?? 0;\n\n this.waitForClientAndBindLoad(options.duration);\n }\n\n private waitForClientAndBindLoad(duration: QueueDuration | 'client' = this.duration) {\n if (!(window?.client instanceof Client)) {\n setTimeout(() => this.waitForClientAndBindLoad(duration), this.clientWaitRetryDelay);\n\n return;\n }\n\n window.client.on('load', () => {\n if (duration === 'client')\n this.duration = (window.client.fields?.widgetDuration ?? 0) as number;\n\n this.emit('load');\n\n this.loaded = true;\n });\n }\n\n /**\n * Enqueue an item or multiple items into the queue with optional processing options.\n * @param value - The item or items to be enqueued. Can be a single value of type T or an array of objects containing the value and options.\n * @param options - Optional processing options for the item(s) being enqueued. Ignored if an array of items is provided, as each item can have its own options.\n * @returns The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.enqueue('Single Item', { isPriority: true });\n * myQueue.enqueue([\n * { value: 'Item 1', options: { isPriority: true } },\n * { value: 'Item 2', options: { isLoop: true } }\n * ]);\n * ```\n */\n public enqueue(value: T, options?: Partial<QueueProps>): this;\n public enqueue(items: { value: T; options?: Partial<QueueProps> }[]): this;\n public enqueue(\n valueOrItems: T | { value: T; options?: Partial<QueueProps> }[],\n options: Partial<QueueProps> = {},\n ): this {\n const hadItems = this.hasItems();\n\n const entries: { value: T; options: Partial<QueueProps> }[] = Array.isArray(valueOrItems)\n ? valueOrItems.map((entry) => ({ value: entry.value, options: entry.options ?? {} }))\n : [{ value: valueOrItems as T, options }];\n\n for (const entry of entries) {\n const item: QueueItem<T> = {\n isoDate: new Date().toISOString(),\n isLoop: entry.options?.isLoop ?? false,\n isPriority: entry.options?.isPriority ?? false,\n isImmediate: entry.options?.isImmediate ?? false,\n value: entry.value,\n };\n\n if (item.isPriority && item.isImmediate) {\n this.cancel();\n this.priorityQueue.unshift(item);\n } else {\n const targetQueue = item.isPriority ? this.priorityQueue : this.queue;\n\n targetQueue.push(item);\n }\n }\n\n // Always process immediately if it's not running and the queue was empty before\n if (this.running === false && hadItems === false) {\n this.run();\n }\n\n this.emit('update', this.queue, this.priorityQueue, this.history, this.timeouts);\n\n return this;\n }\n\n private async run() {\n if (!this.hasItems()) {\n this.running = false;\n return;\n }\n\n this.running = true;\n\n await this.next();\n\n if (typeof this.duration === 'number' && this.duration > 0) {\n this.timeouts.push(setTimeout(() => this.run(), this.duration));\n } else if (this.duration === 0 || (this.duration !== -1 && this.duration !== false)) {\n this.run();\n }\n }\n\n private async next() {\n const nextItem =\n this.priorityQueue.length > 0 ? this.priorityQueue.shift() : this.queue.shift();\n\n if (!nextItem) {\n this.running = false;\n\n return;\n }\n\n try {\n await this.processor.apply(this, [nextItem.value, this]);\n\n this.emit('process', nextItem, this);\n } catch (error) {\n logger.error(\n `Error during item processing: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n this.history.push(nextItem);\n\n const targetQueue = nextItem.isPriority ? this.priorityQueue : this.queue;\n\n if (nextItem.isLoop) targetQueue.push(nextItem);\n }\n\n /**\n * Resume processing the queue if it is paused. If the queue is already running, it will be restarted, which can be useful if new items have been added or if you want to reset the processing timer.\n * If the queue was empty before, it will start processing immediately.\n * @returns - The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.resume();\n * ```\n */\n public resume() {\n if (this.running) {\n this.cancel();\n }\n\n if (this.hasItems()) this.run();\n\n return this;\n }\n\n /**\n * Update the queue's state with new values. This can be used to replace the current queue, priority queue, history, or timeouts with new data. If the queue is not currently running and there are items in the queue after the update, it will start processing immediately.\n * @param save - An object containing the new state for the queue, priority queue, history, and timeouts. Each property is optional, and if not provided, the current state will be retained.\n * @returns - The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.update({\n * queue: newQueueItems,\n * priorityQueue: newPriorityItems,\n * history: newHistory,\n * });\n * ```\n */\n public update(save: Partial<useQueue<T>>): this {\n this.queue = save.queue ?? this.queue;\n this.priorityQueue = save.priorityQueue ?? this.priorityQueue;\n this.history = save.history ?? this.history;\n\n if (this.hasItems() && this.running === false) {\n window.client?.on('load', () => this.run());\n }\n\n return this;\n }\n\n /**\n * Cancel all pending timeouts and stop the queue from processing further items. This will clear any scheduled processing and prevent any new items from being processed until `resume()` is called again. The current state of the queue, priority queue, and history will be retained, allowing you to resume processing later without losing any data.\n */\n public cancel() {\n if (this.running) {\n this.timeouts.forEach((timeout) => clearTimeout(timeout));\n this.timeouts = [];\n this.running = false;\n\n this.emit('cancel');\n }\n }\n\n /**\n * Check if there are any items in the queue or priority queue. This method returns `true` if there are items waiting to be processed in either the main queue or the priority queue, and `false` if both queues are empty.\n * @returns - A boolean indicating whether there are items in the queue or priority queue.\n */\n public hasItems(): boolean {\n return this.queue.length > 0 || this.priorityQueue.length > 0;\n }\n\n public override on<K extends keyof QueueEvents<T>>(\n eventName: K,\n callback: (this: useQueue<T>, ...args: QueueEvents<T>[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { USE_SE_API } from '../main.js';\nimport { StreamElements } from '../types/index.js';\nimport { EventProvider } from './EventProvider.js';\n\ntype MessageMap = Record<string, any>;\n\ntype MessageTuple<T extends MessageMap> = {\n [K in keyof T]: [key: K, data: T[K]];\n}[keyof T];\n\ntype BaseEvents<T extends MessageMap> = {\n load: [];\n message: MessageTuple<T>;\n};\n\ntype UseCommsOptions = {\n id?: string;\n};\n\ntype UseCommItem<T extends MessageMap> = {\n nonce: string;\n key: keyof T;\n value: T[keyof T];\n timestamp: string;\n};\n\nexport const usedComms: Array<useComms<any>> = [];\n\n/**\n * A module for handling communications between different widgets inside streamelements.\n * @example\n * ```ts\n * type CommsMessages = {\n * hello: { loaded: boolean };\n * update: { value: number };\n * reload: {};\n * tags: string[];\n * }\n *\n * const comms = new useComms<CommsMessages>();\n *\n * comms.on('message', (message, data) => {\n * switch (message) {\n * case 'hello': {}\n * case 'update': {}\n * case 'reload': {}\n * case 'tags': {}\n * }\n * })\n * ```\n */\nexport class useComms<T extends MessageMap> extends EventProvider<BaseEvents<T>> {\n private SE_API: StreamElements.SE_API | null = null;\n\n public id: string = 'widget communications';\n public loaded: boolean = false;\n\n private history: Array<UseCommItem<T>> = [];\n private detected = new Set<string>();\n\n constructor(options: UseCommsOptions = {}) {\n super();\n\n this.id = options.id || this.id;\n\n usedComms.push(this);\n\n USE_SE_API?.then(async (se) => {\n this.loaded = true;\n this.SE_API = se;\n\n Promise.all([\n async () => {\n const history = await se.store.get<Array<UseCommItem<T>>>(this.id);\n\n if (history) {\n this.history = history.slice(-10);\n }\n },\n async () => {\n const detected = await se.store.get<string[]>(this.id + '_detected');\n\n if (detected) {\n this.detected = new Set(detected);\n }\n },\n ]);\n });\n }\n\n public async send<K extends keyof T>(key: K, data: T[K]) {\n if (this.SE_API) {\n // this.SE_API.store.set(this.id, { message: key, data });\n\n const message = {\n nonce: Math.random().toString(36).substring(2),\n key,\n value: data,\n timestamp: new Date().toISOString(),\n };\n\n this.history.push(message);\n\n this.SE_API.store.set(this.id, this.history);\n this.SE_API.store.set(this.id + '_detected', Array.from(this.detected));\n }\n }\n\n public update(history: Array<UseCommItem<T>>) {\n if (!history.length) {\n return;\n }\n\n this.history = history;\n\n const messages = history.filter((message) => !this.detected.has(message.nonce));\n\n messages.forEach((message) => {\n this.detected.add(message.nonce);\n\n this.emit('message', message.key, message.value);\n });\n }\n\n public override on<K extends keyof BaseEvents<T>>(\n eventName: K,\n callback: (this: useComms<T>, ...args: BaseEvents<T>[K]) => void,\n ) {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { Client, ClientStorageOptions } from './client.js';\nimport { usedStorages } from '../modules/useStorage.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\nimport { logger } from '../main.js';\nimport { Local } from '../local/index.js';\nimport { useQueue } from '../modules/useQueue.js';\nimport { Helper } from '../helper/index.js';\nimport { usedComms } from '../modules/useComms.js';\n\nif (typeof window !== undefined) {\n window.addEventListener('load', () => {\n if (window.client instanceof Client) {\n Local.queue = new useQueue({\n duration: 'client',\n processor: async function processor(received) {\n window.dispatchEvent(new CustomEvent(received.listener, { detail: received.data }));\n\n if (received.listener === 'onEventReceived' && received.session) {\n const sessionEvent = await Local.generate.event.onSessionUpdate(\n client.session,\n Helper.event.parseProvider(received.data),\n );\n\n window.dispatchEvent(new CustomEvent('onSessionUpdate', { detail: sessionEvent }));\n }\n },\n });\n }\n });\n\n window.addEventListener('onWidgetLoad', async (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.fields = detail.fieldData;\n client.session = detail.session.data;\n\n client.details = {\n ...client.details,\n user: detail.channel,\n currency: detail.currency,\n overlay: detail.overlay,\n };\n\n if (detail.channel.id && !detail.emulated) {\n await fetch(`https://api.streamelements.com/kappa/v2/channels/${detail.channel.id}/`)\n .then((res) => res.json())\n .then((profile) => {\n if (profile.provider) {\n client.details.provider = profile.provider;\n\n return profile.provider;\n } else {\n client.details.provider = 'local';\n }\n })\n .catch(() => {\n client.details.provider = 'local';\n });\n } else {\n client.details.provider = 'local';\n }\n\n client.emit('load', detail);\n\n if (client.debug) {\n logger.received('Widget loaded!', data.detail);\n\n const fieldData = data.detail.fieldData;\n\n if (Object.keys(fieldData).length) logger.received('Field data:', fieldData);\n }\n\n client.loaded = true;\n\n client.storage.on('load', (data) => {\n if (client.debug && data) {\n logger.debug(\n '[Client]',\n 'Storage loaded for client',\n `\"${client.id}\";`,\n `Provider: \"${client.details.provider}\";`,\n data,\n );\n } else if (client.debug) {\n logger.debug(\n '[Client]',\n 'Storage loaded for client',\n `\"${client.id}\";`,\n `Provider: \"${client.details.provider}\";`,\n 'No data found.',\n );\n }\n\n if (data) {\n const clearExpired = <T extends Record<string, ClientStorageOptions<string>>>(\n data: T,\n ) => {\n const now = Date.now();\n const cleanedData: any = {};\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const entry = data[key];\n\n if (entry.expire && entry.expire > now) {\n cleanedData[key] = entry;\n }\n }\n }\n\n return cleanedData as T;\n };\n\n const users = clearExpired(data['user'] || {});\n const avatars = clearExpired(data['avatar'] || {});\n const pronouns = clearExpired(data['pronoun'] || {});\n const emotes = clearExpired(data['emote'] || {});\n\n client.storage.update({\n user: users,\n avatar: avatars,\n pronoun: pronouns,\n emote: emotes,\n });\n }\n\n if (detail.channel.providerId.length) {\n client.storage.add(`avatar.${detail.channel.providerId.toLowerCase()}`, {\n value: detail.channel.avatar,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.avatar * 60 * 1000,\n });\n }\n });\n }\n });\n\n window.addEventListener('onSessionUpdate', (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.session = detail.session;\n\n client.emit('session', detail.session);\n\n if (client.debug) {\n logger.debug('[Client]', 'Session updated', detail.session);\n }\n }\n });\n\n window.addEventListener('onEventReceived', ({ detail }) => {\n if (window.client instanceof Client) {\n const received = Helper.event.parseProvider(detail);\n\n switch (received.provider) {\n case 'streamelements': {\n const data = received.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const event = data.event;\n\n break;\n }\n case 'event:skip': {\n const event = data.event;\n\n break;\n }\n case 'event:test': {\n switch (data.event.listener) {\n case 'widget-button': {\n const event = data.event;\n\n Button.execute(event.field, event.value);\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n break;\n }\n\n // ... alot more\n }\n\n break;\n }\n case 'kvstore:update': {\n const event = data.event;\n\n if (usedStorages.length) {\n var storage = usedStorages.find(\n (s) =>\n s.id === event.data.key.replace('customWidget.', '') || s.id === event.data.key,\n );\n\n if (storage) {\n // @ts-ignore\n storage.update(event.data.value);\n }\n }\n\n if (usedComms.length) {\n const comm = usedComms.find(\n (c) =>\n c.id === event.data.key.replace('customWidget.', '') || c.id === event.data.key,\n );\n\n if (comm) {\n // @ts-ignore\n comm.update(event.data.value);\n }\n }\n\n break;\n }\n case 'bot:counter': {\n const event = data.event;\n\n break;\n }\n case 'alertService:toggleSound': {\n const event = data.event;\n\n client.details.overlay.muted = Boolean(event.muted);\n\n break;\n }\n }\n\n window.client.emit('event', 'streamelements', received.data);\n\n break;\n }\n case 'twitch': {\n const data = received.data;\n\n switch (data.listener) {\n case 'delete-message': {\n const event = data.event;\n\n break;\n }\n case 'delete-messages': {\n const event = data.event;\n\n break;\n }\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'twitch', data: data });\n\n break;\n }\n case 'follower-latest': {\n const event = data.event;\n\n break;\n }\n case 'cheer-latest': {\n const event = data.event;\n\n break;\n }\n case 'subscriber-latest': {\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // gift\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n const event = data.event;\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'raid-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n window.client.emit('event', 'twitch', received.data);\n\n break;\n }\n case 'youtube': {\n const data = received.data;\n\n switch (data.listener) {\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'youtube', data: data });\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n\n break;\n }\n case 'sponsor-latest': {\n const event = data.event;\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // gift\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n const event = data.event;\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'superchat-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n window.client.emit('event', 'youtube', received.data);\n\n break;\n }\n case 'kick': {\n const data = received.data;\n\n window.client.emit('event', 'kick', received.data);\n\n break;\n }\n case 'facebook': {\n const data = received.data;\n\n window.client.emit('event', 'facebook', received.data);\n\n break;\n }\n }\n\n const excludeListeners: Array<(typeof received.data)['listener']> = [\n 'bot:counter',\n 'alertService:toggleSound',\n 'event',\n 'event:skip',\n 'event:test',\n 'kvstore:update',\n ];\n\n if (client.debug && !excludeListeners.some((e) => e === received.data.listener)) {\n logger.received(\n '[Client]',\n `Event ${received.data.listener} received from ${received.provider}`,\n received.data.event,\n );\n }\n }\n });\n}\n","import { StreamElements } from '../types/streamelements/main.js';\n\nconst LOCAL_SE_API: StreamElements.SE_API & { store: { list: Record<string, any> } } = {\n getOverlayStatus: () => {\n return {\n isEditorMode: false,\n muted: false,\n };\n },\n resumeQueue: () => {},\n responses: {} as Record<string, any>,\n sendMessage(message: string, data: object) {},\n counters: {\n get(key: string): number | null {\n return null;\n },\n },\n sanitize(message: string): string {\n return message;\n },\n cheerFilter(message: string): string {\n return message;\n },\n setField(key: string, value: string | number | boolean | undefined, reload: boolean) {},\n\n store: {\n set: function (name: string, obj: any) {\n this.list[name] = obj;\n\n localStorage.setItem('SE_API-STORE', JSON.stringify(LOCAL_SE_API.store.list));\n },\n get: async function (name: string) {\n if (this.list[name]) return this.list[name];\n else return null;\n },\n list: {} as Record<string, any>,\n },\n};\n\nexport async function initializeLocalSEAPI() {\n let lastStore = localStorage.getItem('SE_API-STORE') ?? '';\n\n let result = lastStore ? JSON.parse(lastStore) : {};\n\n LOCAL_SE_API.store.list = result;\n\n return LOCAL_SE_API;\n}\n","export namespace Alejo {\n export namespace Pronouns {\n export type name =\n | 'hehim'\n | 'sheher'\n | 'theythem'\n | 'shethem'\n | 'hethem'\n | 'heshe'\n | 'xexem'\n | 'faefaer'\n | 'vever'\n | 'aeaer'\n | 'ziehir'\n | 'perper'\n | 'eem'\n | 'itits';\n\n export type display =\n | 'He/Him'\n | 'She/Her'\n | 'They/Them'\n | 'She/They'\n | 'He/They'\n | 'He/She'\n | 'Xe/Xem'\n | 'Fae/Faer'\n | 'Ve/Ver'\n | 'Ae/Aer'\n | 'Zie/Hir'\n | 'Per/Per'\n | 'E/Em'\n | 'It/Its';\n\n export enum map {\n hehim = 'He/Him',\n sheher = 'She/Her',\n theythem = 'They/Them',\n shethem = 'She/They',\n hethem = 'He/They',\n heshe = 'He/She',\n xexem = 'Xe/Xem',\n faefaer = 'Fae/Faer',\n vever = 'Ve/Ver',\n aeaer = 'Ae/Aer',\n ziehir = 'Zie/Hir',\n perper = 'Per/Per',\n eem = 'E/Em',\n itits = 'It/Its',\n }\n }\n\n export async function list(): Promise<typeof Pronouns.map> {\n try {\n const data = (await fetch('https://pronouns.alejo.io/api/pronouns').then((res) => res.json())) as {\n display: Pronouns.display;\n name: Pronouns.name;\n }[];\n\n if (Array.isArray(data) && data.length) {\n const built = Object.fromEntries(data.map(({ name, display }) => [name, display] as const)) as Record<Pronouns.name, Pronouns.display>;\n\n return { ...Pronouns.map, ...built } as typeof Pronouns.map;\n }\n } catch {}\n\n return { ...Pronouns.map } as typeof Pronouns.map;\n }\n\n export type user = {\n id: string;\n login: string;\n pronoun_id: Pronouns.name;\n };\n\n export async function get(username: string) {\n if (!username) throw new Error('Username is required to fetch Alejo data.');\n\n username = username.toLowerCase();\n\n if (username in client.storage.data.pronoun && client.storage.data.pronoun[username].expire > Date.now()) {\n return client.storage.data.pronoun[username].value;\n } else {\n try {\n const data = await fetch(`https://pronouns.alejo.io/api/users/${username}`)\n .then((res) => res.json())\n .then(([data]) => data as Alejo.user | undefined);\n\n if (data) {\n client.storage.add(`pronoun.${username}`, {\n value: data.pronoun_id,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.pronoun * 60 * 1000,\n });\n\n return client.storage.data.pronoun[username].value ?? data.pronoun_id;\n }\n } catch (error) {\n throw new Error(`Failed to fetch pronoun data for user \"${username}\": ${error instanceof Error ? error.message : error}`);\n }\n }\n }\n}\n","import { EventProvider } from '../modules/EventProvider.js';\nimport { logger } from '../main.js';\n\nimport type {\n OnErrorHandler,\n OnCommandHandler,\n OnChatHandler,\n OnWhisperHandler,\n OnMessageDeletedHandler,\n OnJoinHandler,\n OnPartHandler,\n OnHostedHandler,\n OnRaidHandler,\n OnSubHandler,\n OnResubHandler,\n OnSubGiftHandler,\n OnSubMysteryGiftHandler,\n OnGiftSubContinueHandler,\n OnCheerHandler,\n OnRewardHandler,\n OnConnectedHandler,\n OnReconnectHandler,\n OnChatModeHandler,\n ComfyJSInstance,\n} from 'comfy.js';\nimport { Local } from '../local/index.js';\nimport { Helper } from '../helper/index.js';\n\ntype ComfyEvents = {\n load: [instance: ComfyJSInstance];\n error: Parameters<OnErrorHandler>;\n command: Parameters<OnCommandHandler>;\n chat: Parameters<OnChatHandler>;\n whisper: Parameters<OnWhisperHandler>;\n messageDeleted: Parameters<OnMessageDeletedHandler>;\n join: Parameters<OnJoinHandler>;\n part: Parameters<OnPartHandler>;\n hosted: Parameters<OnHostedHandler>;\n raid: Parameters<OnRaidHandler>;\n sub: Parameters<OnSubHandler>;\n resub: Parameters<OnResubHandler>;\n subGift: Parameters<OnSubGiftHandler>;\n subMysteryGift: Parameters<OnSubMysteryGiftHandler>;\n giftSubContinue: Parameters<OnGiftSubContinueHandler>;\n cheer: Parameters<OnCheerHandler>;\n chatMode: Parameters<OnChatModeHandler>;\n reward: Parameters<OnRewardHandler>;\n connected: Parameters<OnConnectedHandler>;\n reconnect: Parameters<OnReconnectHandler>;\n};\n\n/**\n * Creates and manages a ComfyJS instance for Twitch chat interaction.\n */\nexport class useComfyJs extends EventProvider<ComfyEvents> {\n public instance!: ComfyJSInstance;\n\n public username!: string;\n public password?: string;\n public channels!: string[];\n\n public isDebug: boolean = false;\n private init: boolean = false;\n\n public emulate: boolean = false;\n\n /**\n * Initializes a new ComfyJS instance and connects to Twitch chat.\n * @param options - Configuration options for ComfyJS instance.\n * @param emulate - Whether to emulate chat messages in the Local module.\n */\n constructor(\n options: {\n username: string;\n password?: string;\n channels: string[];\n isDebug?: boolean;\n init?: boolean;\n },\n emulate: boolean,\n ) {\n super();\n\n this.username = options.username;\n this.password = options.password;\n this.channels = options.channels;\n this.isDebug = Boolean(options.isDebug);\n this.init = Boolean(options.init);\n this.emulate = emulate;\n\n this.load()\n .then((comfyJS) => {\n this.instance = comfyJS;\n\n this.emit('load', comfyJS);\n this.connect();\n })\n .catch((err) => {\n logger.error('useComfyJs: Failed to load ComfyJS', err);\n });\n }\n\n /**\n * Loads the ComfyJS script if not already loaded.\n * @returns A promise that resolves to the ComfyJS instance.\n */\n private load(): Promise<ComfyJSInstance> {\n if (typeof window.ComfyJS === 'undefined' || !window.ComfyJS) {\n return new Promise((resolve, reject) => {\n if (this.emulate && !client) {\n return reject(\n new Error('useComfyJs: Cannot emulate chat messages without a Client instance.'),\n );\n }\n\n const script = document.createElement('script');\n\n script.src = 'https://cdn.jsdelivr.net/npm/comfy.js@1.1.29/dist/comfy.min.js';\n script.type = 'text/javascript';\n script.async = true;\n\n script.onload = () => resolve(window.ComfyJS as ComfyJSInstance);\n script.onerror = (err) => reject(err);\n\n document.head.appendChild(script);\n });\n } else return Promise.resolve(window.ComfyJS as ComfyJSInstance);\n }\n\n /**\n * Connects event handlers to the ComfyJS instance.\n */\n private connect() {\n this.instance.onError = (error) => {\n this.emit('error', error);\n\n if (client.debug) logger.error('[Client]', 'ComfyJS Error:', error);\n };\n\n this.instance.onCommand = (user, command, message, flags, extra) => {\n this.emit('command', user, command, message, flags, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Command: !${command} ${message} (User: ${user})`);\n\n if (this.emulate) {\n const roles = {\n ...flags,\n broadcaster: flags.broadcaster,\n moderator: flags.mod,\n vip: flags.vip,\n subscriber: flags.subscriber,\n founder: flags.founder,\n };\n\n const data = {\n name: user,\n message: `!${command} ${message}`,\n badges: Object.entries(roles)\n .map(([role, hasRole]) => (hasRole ? role : null))\n .filter(Boolean) as Helper.message.BadgeOptions,\n color: extra.userColor,\n time: new Date(extra.timestamp).getTime(),\n userId: extra.userId,\n msgId: extra.id,\n channel: extra.channel,\n };\n\n Local.emulate.twitch.message(data);\n }\n };\n this.instance.onChat = (user, message, flags, self, extra) => {\n this.emit('chat', user, message, flags, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Chat: ${message} (User: ${user})`);\n\n if (this.emulate) {\n const roles = {\n ...flags,\n ...extra.userBadges,\n broadcaster: flags.broadcaster,\n moderator: flags.mod,\n vip: flags.vip,\n subscriber: flags.subscriber,\n founder: flags.founder,\n };\n\n Local.emulate.twitch.message({\n name: user,\n message: message,\n badges: Object.entries(roles)\n .map(([role, hasRole]) => (hasRole ? role : null))\n .filter(Boolean) as Helper.message.BadgeOptions,\n color: extra.userColor,\n time: new Date(extra.timestamp).getTime(),\n userId: extra.userId,\n msgId: extra.id,\n channel: extra.channel,\n });\n }\n };\n this.instance.onWhisper = (user, message, flags, self, extra) => {\n this.emit('whisper', user, message, flags, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Whisper: ${message} (User: ${user})`);\n };\n this.instance.onMessageDeleted = (id, extra) => {\n this.emit('messageDeleted', id, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Message Deleted: ${id}`);\n\n if (this.emulate) {\n Local.emulate.twitch.deleteMessage(id);\n }\n };\n this.instance.onJoin = (user, self, extra) => {\n this.emit('join', user, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Join: ${user}`);\n };\n this.instance.onPart = (user, self, extra) => {\n this.emit('part', user, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Part: ${user}`);\n };\n this.instance.onHosted = (user, viewers, autohost, extra) => {\n this.emit('hosted', user, viewers, autohost, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Hosted: ${user} (${viewers} viewers)`);\n };\n this.instance.onRaid = (user, viewers, extra) => {\n this.emit('raid', user, viewers, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Raid: ${user} (${viewers} viewers)`);\n\n if (this.emulate) {\n Local.emulate.twitch.raid({\n name: user,\n amount: viewers,\n });\n }\n };\n this.instance.onSub = (user, message, subTierInfo, extra) => {\n this.emit('sub', user, message, subTierInfo, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Sub: ${user} (${subTierInfo.plan})`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: user,\n message: message,\n tier: tier,\n subType: 'default',\n });\n }\n };\n this.instance.onResub = (user, message, streakMonths, cumulativeMonths, subTierInfo, extra) => {\n this.emit('resub', user, message, streakMonths, cumulativeMonths, subTierInfo, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Resub: ${user} (${cumulativeMonths} months)`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: user,\n message: message,\n tier: tier,\n amount: cumulativeMonths,\n subType: 'default',\n });\n }\n };\n this.instance.onSubGift = (\n gifterUser,\n streakMonths,\n recipientUser,\n senderCount,\n subTierInfo,\n extra,\n ) => {\n this.emit(\n 'subGift',\n gifterUser,\n streakMonths,\n recipientUser,\n senderCount,\n subTierInfo,\n extra,\n );\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Sub Gift: ${gifterUser} gifted ${senderCount} subs`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: recipientUser,\n message: '',\n sender: gifterUser,\n tier,\n amount: senderCount,\n subType: 'gift',\n });\n }\n };\n this.instance.onSubMysteryGift = (gifterUser, numbOfSubs, senderCount, subTierInfo, extra) => {\n this.emit('subMysteryGift', gifterUser, numbOfSubs, senderCount, subTierInfo, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Sub Mystery Gift: ${gifterUser} gifted ${numbOfSubs} subs`,\n );\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: gifterUser,\n message: '',\n amount: numbOfSubs,\n tier: tier,\n subType: 'community',\n });\n }\n };\n this.instance.onGiftSubContinue = (user, sender, extra) => {\n this.emit('giftSubContinue', user, sender, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Gift Sub Continue: ${user} continued their gifted sub from ${sender}`,\n );\n\n if (this.emulate) {\n Local.emulate.twitch.subscriber({\n name: user,\n message: '',\n sender: sender,\n tier: '1000',\n subType: 'gift',\n });\n }\n };\n this.instance.onCheer = (user, message, bits, flags, extra) => {\n this.emit('cheer', user, message, bits, flags, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Cheer: ${user} cheered ${bits} bits - ${message}`);\n\n if (this.emulate) {\n Local.emulate.twitch.cheer({\n name: user,\n message: message,\n amount: bits,\n });\n }\n };\n this.instance.onChatMode = (flags, channel) => {\n this.emit('chatMode', flags, channel);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Chat Mode Changed on ${channel}`);\n };\n this.instance.onReward = (user, reward, cost, message, extra) => {\n this.emit('reward', user, reward, cost, message, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Reward: ${user} redeemed ${reward} for ${cost} - ${message}`,\n );\n };\n this.instance.onConnected = (address, port, isFirstConnect) => {\n this.emit('connected', address, port, isFirstConnect);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Connected: ${address}:${port} (First Connect: ${isFirstConnect})`,\n );\n };\n this.instance.onReconnect = (reconnectCount) => {\n this.emit('reconnect', reconnectCount);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Reconnect: Attempt #${reconnectCount}`);\n };\n\n if (this.init) {\n this.instance.Init(this.username, this.password, this.channels, this.isDebug);\n }\n }\n}\n","interface Theme {\n color?: string;\n background?: string;\n bold?: boolean;\n italic?: boolean;\n fontSize?: number;\n icon?: string;\n}\n\ninterface Options {\n enabled?: boolean;\n prefix?: string | (() => string);\n}\n\ntype LogMethod = (...args: unknown[]) => void;\n\nexport class useLogger {\n public enabled: boolean;\n public prefix: string | (() => string);\n\n constructor(options: Options = {}) {\n this.enabled = options.enabled ?? true;\n this.prefix = options.prefix ?? '';\n }\n\n public apply(theme: Theme): LogMethod {\n const style = this.style(theme);\n const icon = theme.icon ? `${theme.icon} ` : '';\n\n return (...args: unknown[]): void => {\n if (!this.enabled || typeof console === 'undefined') return;\n\n let prefix: string = '';\n\n if (typeof this.prefix === 'function') prefix = this.prefix();\n else if (typeof this.prefix === 'string') prefix = this.prefix;\n\n const primitives: unknown[] = [];\n const objects: unknown[] = [];\n\n args.forEach((arg) => {\n if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {\n primitives.push(arg);\n } else {\n objects.push(arg);\n }\n });\n\n // Log with style\n\n if (primitives.length > 0) {\n const message = primitives.join(' ');\n console.log(`%c${prefix.endsWith(' ') ? prefix : prefix.trim() + ' '}${icon}${message}`, style, ...objects);\n } else if (objects.length > 0) {\n console.log(`%c${prefix.endsWith(' ') ? prefix : prefix.trim() + ' '}${icon}`, style, ...objects);\n }\n };\n }\n\n private style(theme: Theme): string {\n const styles: string[] = [];\n\n if (theme.background && theme.background !== 'transparent') {\n styles.push(`background: ${theme.background}`);\n styles.push('padding: 2px 6px');\n styles.push('border-radius: 3px');\n }\n if (theme.color) styles.push(`color: ${theme.color}`);\n if (theme.bold) styles.push('font-weight: bold');\n if (theme.italic) styles.push('font-style: italic');\n if (theme.fontSize) styles.push(`font-size: ${theme.fontSize}px`);\n\n return styles.join('; ');\n }\n\n public group(label: string): void {\n if (!this.enabled || !console.group) return;\n\n console.group(label);\n }\n\n public groupCollapsed(label: string): void {\n if (!this.enabled || !console.groupCollapsed) return;\n\n console.groupCollapsed(label);\n }\n\n public groupEnd(): void {\n if (!this.enabled || !console.groupEnd) return;\n\n console.groupEnd();\n }\n\n public table(data: unknown): void {\n if (!this.enabled || !console.table) return;\n\n console.table(data);\n }\n\n public time(label: string): void {\n if (!this.enabled || !console.time) return;\n\n console.time(label);\n }\n\n public timeEnd(label: string): void {\n if (!this.enabled || !console.timeEnd) return;\n\n console.timeEnd(label);\n }\n\n readonly error = this.apply({\n color: '#721c24',\n background: '#f8d7da',\n bold: true,\n italic: false,\n icon: '✖',\n });\n\n readonly warn = this.apply({\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n });\n\n readonly success = this.apply({\n color: '#155724',\n background: '#d4edda',\n bold: true,\n italic: false,\n fontSize: 18,\n icon: '✔',\n });\n\n readonly info = this.apply({\n color: '#0c5460',\n background: '#d1ecf1',\n fontSize: 12,\n icon: 'ℹ',\n });\n\n readonly debug = this.apply({\n color: '#8c9ba8',\n background: 'transparent',\n fontSize: 12,\n icon: '●',\n });\n\n readonly alert = this.apply({\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n icon: '⚠',\n });\n\n readonly status = this.apply({\n color: '#0c5460',\n background: '#d1ecf1',\n bold: true,\n italic: false,\n fontSize: 12,\n icon: '·',\n });\n\n readonly received = this.apply({\n color: '#E6BBFF',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n icon: '⬇',\n });\n\n readonly simple = this.apply({\n color: '#f6c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n icon: '☼',\n });\n}\n","import './client/listener.js';\n\nimport { Button } from './actions/button.js';\nimport { Command } from './actions/command.js';\nimport { Client } from './client/client.js';\nimport { Local } from './local/index.js';\nimport { initializeLocalSEAPI } from './streamelements/api.js';\nimport { StreamElements } from './types/index.js';\nimport { Alejo } from './utils/alejo.js';\nimport { useComfyJs } from './multistream/comfyJs.js';\nimport { EventProvider } from './modules/EventProvider.js';\nimport { useLogger } from './modules/useLogger.js';\nimport { useQueue } from './modules/useQueue.js';\nimport { usedStorages, useStorage } from './modules/useStorage.js';\nimport { Helper } from './helper/index.js';\nimport { Data } from './data/index.js';\nimport { useComms, usedComms } from './modules/useComms.js';\n\nexport const USE_SE_API: Promise<StreamElements.SE_API> =\n typeof SE_API !== 'undefined' ? Promise.resolve(SE_API) : Promise.resolve(initializeLocalSEAPI());\n\nexport const logger = new useLogger();\n\nexport const main = {\n SeAPI: USE_SE_API,\n\n Client,\n Helper,\n Local,\n Data,\n logger,\n\n modules: { EventProvider, useStorage, useQueue, useLogger, useComms },\n actions: { Button, Command },\n multistream: { useComfyJs },\n data: { usedStorages, usedComms },\n pronouns: { Alejo },\n};\n\nif (typeof window !== 'undefined') {\n (window as any).Tixyel = main;\n} else {\n (globalThis as any).Tixyel = main;\n}\n"],"names":["EventProvider","eventName","args","listener","callback","listeners","fn","wrapper","usedStorages","useStorage","options","USE_SE_API","se","save","data","newData","path","value","obj","keys","current","i","Client","Command","event","nickname","roles","a","p","r","text","rAliases","t","rMap","k","v","verify","index","received","c","commands","nameAndAliases","commandMatch","command","logger","css_color_names","parseToRGBA","str","format","hex","g","b","match","h","s","l","hslToRgb","canvas","ctx","rgbaToHex","rgba","includeAlpha","toHex","n","rgbToHsl","max","min","delta","hue2rgb","q","findClosestColorName","cssColors","closestColor","minDistance","colorName","cr","cg","cb","distance","avatars","badges","emotes","acc","emote","e","items","messages","names","tiers","tts","youtube_emotes","Data","A","B","CSS","E","I","M","N","T","TTS","Y","Helper","number","_number","translate","num","type","CARDINALS","ORDINALS","SUFFIXES","SCALES","SCALES_ORD","rem100","rem10","below100","kind","decade","single","tensPart","unitPart","below1000","hundreds","rest","parts","groups","lastNonZeroIndex","scale","segment","ordScale","balance","amount","decimals","result","round","factor","float","rand","element","mergeSpanStyles","outerStyle","innerHTML","className","innerStyle","content","innerClass","mergedStyle","returnOnly","customParent","base","parent","parentRect","elementWidth","elementHeight","scaleX","scaleY","finalScale","minScaleX","minScaleY","minScale","scalev2","prefer","apply","parentClientRect","elementClientRect","parentWidth","parentHeight","scaleXmin","scaleYmin","scaleXmax","scaleYmax","scaleValue","finalScaleX","finalScaleY","fitText","compressor","fontSize","settings","elWidth","ratio","splitTextToChars","htmlString","startIndex","doc","charIndex","processNode","node","chars","char","span","fragment","clone","child","processed","body","html","object","flatten","stringify","prefix","key","itemPath","entries","values","message","findEmotesInText","name","searchIndex","start","before","after","replaceEmotesWithHTML","imgUrl","replaceYoutubeEmotesWithHTML","x","code","url","alt","generateBadges","provider","random","_","badge","details","parseProvider","detail","string","replace","pattern","promises","promise","replacements","capitalize","compose","template","style","baseValues","defaultCurrency","defaultCurrencyCode","currency","username","REGEX","getNumericFromKeyOrValue","keyOrValue","valuesMap","trimmed","fromValues","formatNumber","param","formatRelativeTime","date","now","diffMs","past","abs","sec","hour","day","month","year","suffix","formatDateLike","keyOrLiteral","raw","mode","pluralize","singular","plural","source","mapSwitch","targetRaw","target","defaultResult","entry","idx","mapKey","mapValue","escapeHtml","parseLiteralOrValue","token","firstChar","lastChar","lowered","fromValuesStr","fromValuesLower","coerceToBoolean","evaluateAtomicCondition","expression","expr","invert","operators","op","left","right","candidate","leftVal","rightVal","evaluateConditionExpression","orParts","orPart","andParts","andResult","andPart","partResult","HTML_MODIFIERS","color","MODIFIERS","_param","rawCondition","whenTrue","whenFalse","group","modifiers","part","mName","mParam","applyModifier","ALIASES","canonical","aliases","alias","use","error","replaceAll","fullMatch","modifierGroup","newValue","parseModifiers","len","parseText","stopChar","out","parseModifier","paramStart","val","sound","play","volume","gainNode","arrayBuffer","decodedAudio","playSound","opacity","extract","decimal","percentage","validate","convert","valid","hsl","alpha","array","boolean","threshold","length","arr","end","daysOffset","daysAgo","uuid","thisArg","call","utils","delay","ms","resolve","typedEntries","typedValues","typedKeys","probability","total","sorted","cumulative","item","weight","Button","field","f","buttons","button","Local","types","startSession","available","generate","generateRecentData","config","generateObjectData","processedKey","processTypedConfig","session","subKey","subValue","fields","currencies","update","orderByDateDesc","topDonation","topDonator","donatorCurrent","curr","donatorNew","tier","sender","randomProvider","randomEvent","renderedText","userId","msgId","time","channel","avatar","addons","subTypes","subType","muted","fieldsFile","dataFiles","localFiles","file","res","customfields","load","useQueue","duration","valueOrItems","hadItems","nextItem","targetQueue","timeout","usedComms","useComms","history","detected","sessionEvent","client","profile","fieldData","clearExpired","cleanedData","users","pronouns","storage","comm","excludeListeners","LOCAL_SE_API","reload","initializeLocalSEAPI","lastStore","Alejo","Pronouns","map","list","built","display","get","useComfyJs","emulate","comfyJS","err","reject","script","user","flags","extra","role","hasRole","self","id","viewers","autohost","subTierInfo","streakMonths","cumulativeMonths","gifterUser","recipientUser","senderCount","numbOfSubs","bits","reward","cost","address","port","isFirstConnect","reconnectCount","useLogger","theme","icon","primitives","objects","arg","styles","label","main"],"mappings":"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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/modules/EventProvider.ts","../src/modules/useStorage.ts","../src/client/client.ts","../src/actions/command.ts","../src/data/collection/css.ts","../src/utils/color.ts","../src/data/collection/avatars.ts","../src/data/collection/badges.ts","../src/data/collection/emotes.ts","../src/data/collection/items.ts","../src/data/collection/messages.ts","../src/data/collection/names.ts","../src/data/collection/tiers.ts","../src/data/collection/tts.ts","../src/data/collection/youtube-emotes.ts","../src/data/index.ts","../src/helper/index.ts","../src/actions/button.ts","../src/local/index.ts","../src/modules/useQueue.ts","../src/modules/useComms.ts","../src/client/listener.ts","../src/streamelements/api.ts","../src/utils/alejo.ts","../src/multistream/comfyJs.ts","../src/modules/useLogger.ts","../src/main.ts"],"sourcesContent":["/**\n * EventProvider class for managing event listeners and emitters.\n * This class allows you to register event listeners, emit events, and manage event subscriptions.\n * @example\n * ```typescript\n * type TestEvents = {\n * load: [event: { type: 'load' }];\n * event: [event: { type: 'event' }];\n * };\n *\n * class Test extends EventProvider<TestEvents> {}\n *\n * const test = new Test();\n * test.once('load', (data) => {});\n * test.emit('load', { type: 'load' });\n *\n * test.on('event', (data) => {});\n * test.emit('event', { type: 'event' });\n * ```\n */\nexport class EventProvider<EventMap extends Record<string, any[]> = Record<string, any[]>> {\n /**\n * Stores registered event listeners.\n */\n private registeredEvents: { [K in keyof EventMap]?: Array<(this: this, ...args: EventMap[K]) => any> } = {};\n\n /**\n * Emits an event to all registered listeners.\n * Returns an array of return values from the listeners.\n * @param eventName The name of the event.\n * @param args Arguments to pass to the listeners.\n */\n emit<K extends keyof EventMap>(eventName: K, ...args: EventMap[K]): any[] {\n const listeners = this.registeredEvents[eventName] || [];\n\n return listeners.map((listener) => listener.apply(this, args));\n }\n\n /**\n * Registers an event listener.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n on<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n if (typeof callback !== 'function') {\n throw new TypeError('Callback must be a function');\n }\n\n if (!this.registeredEvents[eventName]) {\n this.registeredEvents[eventName] = [];\n }\n\n this.registeredEvents[eventName]!.push(callback);\n\n return this;\n }\n\n /**\n * Removes a specific event listener.\n * @param eventName The name of the event.\n * @param callback The callback function to remove.\n */\n off<K extends keyof EventMap>(eventName: K, callback?: (this: this, ...args: EventMap[K]) => any): this {\n const listeners = this.registeredEvents[eventName] || [];\n\n if (!callback) {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n\n this.registeredEvents[eventName] = listeners.filter((fn) => fn !== callback);\n\n return this;\n }\n\n /**\n * Registers a listener that is executed only once.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n once<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n const wrapper = (...args: EventMap[K]) => {\n this.off(eventName, wrapper);\n callback.apply(this, args);\n };\n\n this.on(eventName, wrapper);\n\n return this;\n }\n\n /**\n * Removes all listeners for a specific event.\n * @param eventName The name of the event.\n */\n removeAllListeners<K extends keyof EventMap>(eventName: K): this {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport { EventProvider } from './EventProvider.js';\nimport { USE_SE_API } from '../main.js';\nimport { PathValue } from '../types/path.js';\nimport type { JSONObject } from '../types/json.js';\n\ntype UseStorageEvents<T> = {\n load: [T | null];\n update: [T];\n};\n\ntype UseStorageOptions<T> = {\n id?: string;\n data: T;\n};\n\nexport const usedStorages: Array<useStorage<any>> = [];\n\nexport class useStorage<T extends JSONObject> extends EventProvider<UseStorageEvents<T>> {\n private SE_API: StreamElements.SE_API | null = null;\n\n /** The unique identifier for the storage instance. */\n public id: string = 'default';\n public loaded: boolean = false;\n public data!: T;\n\n constructor(options: UseStorageOptions<T>) {\n super();\n\n this.id = options.id || this.id;\n this.data = options.data ?? ({} as T);\n\n usedStorages.push(this);\n\n USE_SE_API?.then((se) => {\n this.SE_API = se;\n\n se!.store\n .get<T>(this.id)\n .then((save) => {\n this.data = save ?? this.data;\n\n this.loaded = true;\n\n this.emit('load', this.data);\n\n if (JSON.stringify(this.data) !== JSON.stringify(save)) {\n this.emit('update', this.data);\n }\n })\n .catch(() => {\n this.loaded = true;\n\n this.emit('load', this.data);\n });\n });\n }\n\n /**\n * Saves the current data to storage.\n * @param data Data to save (defaults to current)\n */\n private save(data: T = this.data): void {\n if (this.loaded && this.SE_API) {\n if (JSON.stringify(this.data) !== JSON.stringify(data)) {\n this.data = data;\n\n this.SE_API.store.set<T>(this.id, this.data);\n\n this.emit('update', this.data);\n }\n }\n }\n\n /**\n * Updates the storage data and emits an update event\n * @param data Data to update (defaults to current)\n */\n public update(data: Partial<T> = this.data): void {\n if (this.loaded && JSON.stringify(this.data) !== JSON.stringify(data)) {\n const newData = { ...this.data, ...data };\n\n this.save(newData);\n }\n }\n\n /**\n * Adds a value to the storage at the specified path.\n * @param path Path to add the value to\n * @param value Value to add\n */\n public add<P extends string>(path: P, value: PathValue<T, P>): void {\n if (!this.loaded) return;\n\n useStorage.setByPath(this.data, path, value);\n\n this.save(this.data);\n }\n\n /**\n * Clears all data from the storage.\n */\n public clear(): void {\n if (this.loaded) {\n this.data = {} as T;\n\n this.save(this.data);\n }\n }\n\n /**\n * Sets a value in the storage at the specified path.\n * @param obj The object to set the value in\n * @param path The path to set the value at\n * @param value The value to set\n * @returns The updated object\n */\n static setByPath<P extends string, T extends object>(\n obj: T,\n path: P,\n value: PathValue<T, P>,\n ): void {\n const keys = path.split('.');\n let current: any = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (typeof current[keys[i]] !== 'object' || current[keys[i]] == null) {\n current[keys[i]] = {};\n }\n\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return current;\n }\n\n public override on<K extends keyof UseStorageEvents<T>>(\n eventName: K,\n callback: (this: useStorage<T>, ...args: UseStorageEvents<T>[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [this.data]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { Provider } from '../types/client.js';\nimport { StreamElements } from '../types/streamelements/main.js';\nimport { EventProvider } from '../modules/EventProvider.js';\nimport { useStorage } from '../modules/useStorage.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\nimport { Alejo } from '../utils/alejo.js';\n\ntype ClientEvents = {\n load: [event: StreamElements.Event.onWidgetLoad];\n action: [action: Button | Command, type: 'created' | 'executed' | 'removed'];\n session: [session: StreamElements.Session.Data];\n event:\n | [provider: 'streamelements', event: StreamElements.Event.Provider.StreamElements.Events]\n | [provider: 'twitch', event: StreamElements.Event.Provider.Twitch.Events]\n | [provider: 'youtube', event: StreamElements.Event.Provider.YouTube.Events]\n | [provider: 'kick', event: StreamElements.Event.Provider.Kick.Events]\n | [provider: 'facebook', event: StreamElements.Event.Provider.Facebook.Events];\n};\n\nexport type ClientStorageOptions<T> = {\n value: T;\n timestamp: number;\n expire: number;\n};\n\nexport type ClientStorage = {\n user: Record<string, ClientStorageOptions<string>>;\n avatar: Record<string, ClientStorageOptions<string>>;\n pronoun: Record<string, ClientStorageOptions<Alejo.Pronouns.name>>;\n emote: Record<string, ClientStorageOptions<string>>;\n};\n\nexport type ClientOptions = {\n id?: string;\n debug?: boolean | (() => boolean);\n};\n\nexport class Client extends EventProvider<ClientEvents> {\n public id: string = 'default';\n public debug: boolean = false;\n\n public storage!: useStorage<ClientStorage>;\n\n public fields: StreamElements.Event.onWidgetLoad['fieldData'] = {};\n\n public session!: StreamElements.Session.Data;\n\n public loaded: boolean = false;\n\n constructor(options: ClientOptions) {\n super();\n\n this.id = options.id || this.id;\n\n this.storage = new useStorage<ClientStorage>({\n id: this.id,\n data: {\n user: {},\n avatar: {},\n pronoun: {},\n emote: {},\n },\n });\n\n this.on('load', () => {\n this.debug = Boolean(typeof options.debug === 'function' ? options.debug() : options.debug);\n });\n\n window.client = this;\n }\n\n public actions: {\n commands: Command[];\n buttons: Button[];\n } = {\n commands: [],\n buttons: [],\n };\n\n public details!: {\n provider: Provider | 'local';\n user: StreamElements.Event.onWidgetLoad['channel'];\n currency: StreamElements.Event.onWidgetLoad['currency'];\n overlay: StreamElements.Event.onWidgetLoad['overlay'];\n };\n\n public cache: {\n /**\n * Avatar cache duration in minutes.\n */\n avatar: number;\n /**\n * Pronoun cache duration in minutes.\n */\n pronoun: number;\n /**\n * Emote cache duration in minutes.\n */\n emote: number;\n } = {\n avatar: 30,\n pronoun: 60,\n emote: 120,\n };\n\n override on<K extends keyof ClientEvents>(\n eventName: K,\n callback: (this: Client, ...args: ClientEvents[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [\n {\n channel: this.details.user,\n currency: this.details.currency,\n fieldData: this.fields,\n recents: [],\n session: {\n data: this.session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: this.details.overlay,\n emulated: false,\n } as StreamElements.Event.onWidgetLoad,\n ] as unknown as ClientEvents[K]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport { Client } from '../client/client.js';\nimport { logger } from '../main.js';\n\ninterface CommandOptions {\n prefix?: string;\n name: string;\n description?: string;\n arguments?: boolean;\n run: (this: Client, args: string[], event: CommandEvent) => void;\n test?: string;\n aliases?: string[];\n permissions?: string[] | boolean;\n admins?: string[];\n}\n\ntype CommandEvent =\n | { provider: 'twitch'; data: StreamElements.Event.Provider.Twitch.Message }\n | { provider: 'youtube'; data: StreamElements.Event.Provider.YouTube.Message }\n | { provider: 'kick'; data: any };\n\nexport class Command {\n prefix: string = '!';\n\n name!: string;\n description!: string;\n\n arguments: boolean = false;\n\n test: string | (() => string) = `${this.prefix}${this.name} arg1 arg2`;\n\n aliases: string[] = [];\n permissions?: string[] | boolean = undefined;\n admins: string[] = [];\n\n constructor(options: CommandOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.prefix = options.prefix ?? this.prefix;\n this.name = options.name;\n this.description = options.description ?? this.description;\n this.arguments = options.arguments ?? this.arguments;\n\n this.run = options.run;\n\n this.test = options.test ?? this.test;\n this.aliases = options.aliases ?? this.aliases;\n this.permissions = options.permissions ?? this.permissions;\n this.admins = options.admins ?? this.admins;\n\n // Register the command in the client actions\n window.client.actions.commands.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n run(this: Client, args: string[], event: CommandEvent): void {}\n\n verify(nickname: string, roles: string[], args: string[]): boolean {\n if (this.arguments === true && (!args || !args.length)) {\n return false;\n }\n\n if (this.admins.some((a) => nickname.toLocaleLowerCase() === a.toLocaleLowerCase())) {\n return true;\n }\n\n if (this.permissions === true || typeof this.permissions === 'undefined' || (Array.isArray(this.permissions) && !this.permissions.length)) {\n return true;\n }\n\n if (\n Array.isArray(this.permissions) &&\n (this.permissions.some((p) => nickname.toLowerCase() === p.toLowerCase() || roles.map((r) => r.toLowerCase()).includes(p.toLowerCase())) ||\n this.permissions.includes('*'))\n ) {\n return true;\n }\n\n return false;\n }\n\n parse(text: string, event: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const args = text\n .replace(this.prefix, '')\n .split(' ')\n .slice(1)\n .map((a) => a.trim());\n\n var nickname: string = '';\n var roles: string[] = [];\n\n const rAliases = { bits: 'cheer', premium: 'prime' };\n\n switch (event.provider) {\n case 'twitch': {\n const data = event.data;\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n if (data.event.data.tags?.badges) {\n const tags = data.event.data.tags.badges.toString().replace(/\\/\\d+/g, '').split(',');\n\n roles = tags.map((t) => (t in rAliases ? rAliases[t as keyof typeof rAliases] : t));\n }\n\n break;\n }\n case 'youtube': {\n const data = event.data;\n\n const rMap = {\n isVerified: 'verified',\n isChatOwner: 'owner',\n isChatSponsor: 'sponsor',\n isChatModerator: 'moderator',\n };\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n roles = Object.entries(data.event.data.authorDetails)\n .filter(([k, v]) => k.startsWith('is') && v)\n .map(([k]) => rMap[k as keyof typeof rMap])\n .filter(Boolean);\n\n if (roles.includes('sponsor')) {\n roles.push('premium');\n roles.push('prime');\n }\n if (roles.includes('owner')) {\n roles.push('moderator');\n roles.push('broadcaster');\n }\n\n break;\n }\n case 'kick': {\n return false;\n\n break;\n }\n }\n\n const verify = this.verify(nickname, roles, args);\n\n if (verify === true) {\n this.run.apply(window.client, [args, event]);\n }\n\n return verify;\n }\n\n remove(): void {\n if (!(window.client instanceof Client)) return;\n\n const index = window.client.actions.commands.indexOf(this);\n\n if (index > -1) {\n window.client.actions.commands.splice(index, 1);\n window.client.emit('action', this, 'removed');\n }\n }\n\n static execute(received: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const data = received.data;\n\n try {\n if (window.client.actions.commands.length && window.client.actions.commands.some((c) => data.event.data.text.startsWith(c.prefix))) {\n const commands = window.client.actions.commands.filter((c) => {\n var nameAndAliases = [c.name, ...(c.aliases ?? [])];\n var commandMatch = data.event.data.text.replace(c.prefix, '').split(' ')[0];\n\n return nameAndAliases.includes(commandMatch);\n });\n\n if (commands.length && commands.every((command) => command instanceof Command)) {\n commands.forEach((command) => {\n command.parse(data.event.data.text, received);\n\n window.client.emit('action', command, 'executed');\n\n logger.received(`Command executed: ${data.event.data.text} by ${data.event.data.nick || data.event.data.displayName}`, data);\n });\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","export const css_color_names = [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n];\n\nexport default css_color_names;\n","import { css_color_names } from '../data/collection/css.js';\n\n/**\n * Parse a color string to RGBA components\n * @param str - color string\n * @param format - format of the input color string\n * @returns - RGBA components or null if parsing fails\n */\nexport function parseToRGBA(str: string, format: string | false): { r: number; g: number; b: number; a: number } | null {\n if (!format) return null;\n\n switch (format) {\n case 'hex': {\n const hex = str.replace('#', '');\n let r = 0,\n g = 0,\n b = 0,\n a = 1;\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n } else if (hex.length === 4) {\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n a = parseInt(hex[3] + hex[3], 16) / 255;\n } else if (hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n a = parseInt(hex.slice(6, 8), 16) / 255;\n }\n\n return { r, g, b, a };\n }\n\n case 'rgb':\n case 'rgba': {\n const match = str.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)/);\n if (!match) return null;\n\n return {\n r: parseInt(match[1]),\n g: parseInt(match[2]),\n b: parseInt(match[3]),\n a: match[4] ? parseFloat(match[4]) : 1,\n };\n }\n\n case 'hsl':\n case 'hsla': {\n const match = str.match(/hsla?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)/);\n if (!match) return null;\n\n const h = parseInt(match[1]);\n const s = parseInt(match[2]);\n const l = parseInt(match[3]);\n const a = match[4] ? parseFloat(match[4]) : 1;\n\n const rgb = hslToRgb(h, s, l);\n return { ...rgb, a };\n }\n\n case 'css-color-name': {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n ctx.fillStyle = str;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data;\n\n return { r, g, b, a: 1 };\n }\n\n default:\n return null;\n }\n}\n\n/**\n * Convert RGBA to Hex\n * @param rgba - RGBA components\n * @param includeAlpha - Whether to include alpha in the hex string\n * @returns Hex color string\n */\nexport function rgbaToHex(rgba: { r: number; g: number; b: number; a: number }, includeAlpha: boolean = true): string {\n const toHex = (n: number) => Math.round(n).toString(16).padStart(2, '0');\n\n let hex = `#${toHex(rgba.r)}${toHex(rgba.g)}${toHex(rgba.b)}`;\n\n if (includeAlpha && rgba.a < 1) {\n hex += toHex(rgba.a * 255);\n }\n\n return hex;\n}\n\n/**\n * Convert RGB to HSL\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns HSL components\n */\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (delta !== 0) {\n s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / delta + 2) / 6;\n break;\n case b:\n h = ((r - g) / delta + 4) / 6;\n break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/**\n * Convert HSL to RGB\n * @param h - Hue (0-360)\n * @param s - Saturation (0-100)\n * @param l - Lightness (0-100)\n * @returns RGB components\n */\nexport function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n\n/**\n * Find the closest CSS color name to the given RGB values\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns Closest CSS color name\n */\nexport async function findClosestColorName(r: number, g: number, b: number): Promise<string> {\n const cssColors = css_color_names;\n\n let closestColor = cssColors[0];\n let minDistance = Infinity;\n\n for await (const colorName of cssColors) {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const ctx = canvas.getContext('2d');\n\n if (!ctx) continue;\n\n ctx.fillStyle = colorName;\n ctx.fillRect(0, 0, 1, 1);\n\n const [cr, cg, cb] = ctx.getImageData(0, 0, 1, 1).data;\n\n const distance = Math.sqrt(Math.pow(r - cr, 2) + Math.pow(g - cg, 2) + Math.pow(b - cb, 2));\n\n if (distance < minDistance) {\n minDistance = distance;\n closestColor = colorName;\n }\n\n if (distance === 0) break;\n }\n\n return closestColor;\n}\n","export const avatars = [\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/13e5fa74-defa-11e9-809c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/dbdc9198-def8-11e9-8681-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/998f01ae-def8-11e9-b95c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/de130ab0-def7-11e9-b668-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ebe4cd89-b4f4-4cd9-adac-2f30151b4209-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/215b7342-def9-11e9-9a66-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ead5c8b2-a4c9-4724-b1dd-9f00b46cbd3d-profile_image-300x300.png',\n];\n\nexport default avatars;\n","import { Twitch } from '../../types/twitch.js';\n\nexport const badges: Record<Twitch.roles, Twitch.badge> = {\n '100 bits': {\n type: '100 bits',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3',\n description: '100 bits badge',\n },\n 'no audio': {\n type: 'no audio',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/aef2cd08-f29b-45a1-8c12-d44d7fd5e6f0/3',\n description: 'Individuals with unreliable or no sound can select this badge',\n },\n 'no video': {\n type: 'no video',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/199a0dba-58f3-494e-a7fc-1fa0a1001fb8/3',\n description: 'Individuals with unreliable or no video can select this badge',\n },\n 'bot': {\n type: 'bot',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/df9095f6-a8a0-4cc2-bb33-d908c0adffb8/3',\n description: 'Twitch bot',\n },\n 'twitch staff': {\n type: 'twitch staff',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d97c37bd-a6f5-4c38-8f57-4e4bef88af34/3',\n description: 'Twitch Staff',\n },\n 'admins': {\n type: 'admins',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/9ef7e029-4cdf-4d4d-a0d5-e2b3fb2583fe/3',\n description: 'Admins',\n },\n 'artist': {\n type: 'artist',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/4300a897-03dc-4e83-8c0e-c332fee7057f/3',\n description: 'Artist',\n },\n 'game developer': {\n type: 'game developer',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/85856a4a-eb7d-4e26-a43e-d204a977ade4/3',\n description: 'Game Developer',\n },\n 'prime': {\n type: 'prime',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/a1dd5073-19c3-4911-8cb4-c464a7bc1510/3',\n description: 'Prime',\n },\n 'turbo': {\n type: 'turbo',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/bd444ec6-8f34-4bf9-91f4-af1e3428d80f/3',\n description: 'Turbo',\n },\n 'subscriber': {\n type: 'subscriber',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5d9f2208-5dd8-11e7-8513-2ff4adfae661/3',\n description: 'Subscriber',\n },\n 'broadcaster': {\n type: 'broadcaster',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5527c58c-fb7d-422d-b71b-f309dcb85cc1/3',\n description: 'Broadcaster',\n },\n 'verified': {\n type: 'verified',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/3',\n description: 'Verified',\n },\n 'moderator': {\n type: 'moderator',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3',\n description: 'Moderator',\n },\n 'vip': {\n type: 'vip',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3',\n description: 'VIP',\n },\n};\n\nexport default badges;\n","import { BttvEmote, SeventvEmote, TwitchEmote } from '../../types/emote.js';\n\nexport const emotes: Array<TwitchEmote | BttvEmote | SeventvEmote> = Object.values([\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/3.0',\n },\n 'start': 0,\n 'end': 13,\n },\n {\n 'type': 'twitch',\n 'name': 'BrainSlug',\n 'id': '115233',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/3.0',\n },\n 'start': 14,\n 'end': 23,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/3.0',\n },\n 'start': 24,\n 'end': 32,\n },\n {\n 'type': 'twitch',\n 'name': 'TakeNRG',\n 'id': '112292',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/3.0',\n },\n 'start': 33,\n 'end': 40,\n },\n {\n 'type': 'twitch',\n 'name': 'DxCat',\n 'id': '110734',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/3.0',\n },\n 'start': 41,\n 'end': 46,\n },\n {\n 'type': 'twitch',\n 'name': 'VoHiYo',\n 'id': '81274',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/3.0',\n },\n 'start': 47,\n 'end': 53,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/3.0',\n },\n 'start': 54,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'KomodoHype',\n 'id': '81273',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/3.0',\n },\n 'start': 66,\n 'end': 76,\n },\n {\n 'type': 'twitch',\n 'name': 'duDudu',\n 'id': '62834',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/3.0',\n },\n 'start': 77,\n 'end': 83,\n },\n {\n 'type': 'twitch',\n 'name': 'CoolCat',\n 'id': '58127',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/3.0',\n },\n 'start': 84,\n 'end': 91,\n },\n {\n 'type': 'twitch',\n 'name': 'KappaPride',\n 'id': '55338',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/3.0',\n },\n 'start': 92,\n 'end': 102,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/3.0',\n },\n 'start': 103,\n 'end': 113,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/3.0',\n },\n 'start': 114,\n 'end': 124,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/3.0',\n },\n 'start': 125,\n 'end': 131,\n },\n {\n 'type': 'twitch',\n 'name': 'Kappa',\n 'id': '25',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/3.0',\n },\n 'start': 132,\n 'end': 137,\n },\n {\n 'type': 'twitch',\n 'name': 'MrDestructoid',\n 'id': '28',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/3.0',\n },\n 'start': 138,\n 'end': 151,\n },\n {\n 'type': 'twitch',\n 'name': '<3',\n 'id': '9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/3.0',\n },\n 'start': 152,\n 'end': 154,\n },\n {\n 'type': 'twitch',\n 'name': 'HSWP',\n 'id': '446979',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/3.0',\n },\n 'start': 155,\n 'end': 159,\n },\n {\n 'type': 'twitch',\n 'name': 'Shush',\n 'id': 'emotesv2_819621bcb8f44566a1bd8ea63d06c58f',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/3.0',\n },\n 'start': 160,\n 'end': 165,\n },\n {\n 'type': 'twitch',\n 'name': 'IronmouseLuv',\n 'id': 'emotesv2_54c53ae67ad746d2bc866b6fc779183c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/3.0',\n },\n 'start': 166,\n 'end': 178,\n },\n\n {\n 'type': 'twitch',\n 'name': 'KPOPTT',\n 'id': '304047269',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/3.0',\n },\n 'start': 0,\n 'end': 5,\n },\n {\n 'type': 'twitch',\n 'name': 'FrogPonder',\n 'id': 'emotesv2_a3cdcbfcae9b41bb8215b012362eea35',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/3.0',\n },\n 'start': 7,\n 'end': 16,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeCheer',\n 'id': 'emotesv2_dd4f4f9cea1a4039ad3390e20900abe4',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/3.0',\n },\n 'start': 18,\n 'end': 26,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeFail',\n 'id': 'emotesv2_0330a84e75ad48c1821c1d29a7dadd4d',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/3.0',\n },\n 'start': 28,\n 'end': 35,\n },\n {\n 'type': 'twitch',\n 'name': 'HypePopcorn',\n 'id': 'emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/3.0',\n },\n 'start': 37,\n 'end': 47,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/3.0',\n },\n 'start': 49,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/3.0',\n },\n 'start': 66,\n 'end': 80,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/3.0',\n },\n 'start': 81,\n 'end': 95,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/3.0',\n },\n 'start': 96,\n 'end': 108,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/3.0',\n },\n 'start': 109,\n 'end': 122,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/3.0',\n },\n 'start': 123,\n 'end': 139,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/3.0',\n },\n 'start': 140,\n 'end': 148,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/3.0',\n },\n 'start': 149,\n 'end': 162,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/3.0',\n },\n 'start': 163,\n 'end': 175,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/3.0',\n },\n 'start': 176,\n 'end': 184,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/3.0',\n },\n 'start': 185,\n 'end': 194,\n },\n {\n 'type': 'twitch',\n 'name': 'SoonerLater',\n 'id': '2113050',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/3.0',\n },\n 'start': 195,\n 'end': 206,\n },\n {\n 'type': 'twitch',\n 'name': 'FBCatch',\n 'id': '1441281',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/3.0',\n },\n 'start': 207,\n 'end': 214,\n },\n {\n 'type': 'twitch',\n 'name': 'FBBlock',\n 'id': '1441276',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/3.0',\n },\n 'start': 215,\n 'end': 222,\n },\n {\n 'type': 'twitch',\n 'name': 'PixelBob',\n 'id': '1547903',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/3.0',\n },\n 'start': 223,\n 'end': 231,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/3.0',\n },\n 'start': 232,\n 'end': 235,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/3.0',\n },\n 'start': 236,\n 'end': 244,\n },\n {\n 'type': 'twitch',\n 'name': 'PopCorn',\n 'id': '724216',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/3.0',\n },\n 'start': 245,\n 'end': 252,\n },\n {\n 'type': 'twitch',\n 'name': 'EarthDay',\n 'id': '959018',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/3.0',\n },\n 'start': 253,\n 'end': 261,\n },\n {\n 'type': 'twitch',\n 'name': 'TwitchUnity',\n 'id': '196892',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/3.0',\n },\n 'start': 262,\n 'end': 273,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid4',\n 'id': '191767',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/3.0',\n },\n 'start': 274,\n 'end': 280,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid3',\n 'id': '191764',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/3.0',\n },\n 'start': 281,\n 'end': 287,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid2',\n 'id': '191763',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/3.0',\n },\n 'start': 288,\n 'end': 294,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid1',\n 'id': '191762',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/3.0',\n },\n 'start': 295,\n 'end': 301,\n },\n {\n 'type': 'twitch',\n 'name': 'CrreamAwk',\n 'id': '191313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/3.0',\n },\n 'start': 302,\n 'end': 311,\n },\n {\n 'type': 'twitch',\n 'name': 'DinoDance',\n 'id': 'emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/3.0',\n },\n 'start': 46,\n 'end': 55,\n },\n {\n 'type': 'twitch',\n 'name': 'PopNemo',\n 'id': 'emotesv2_5d523adb8bbb4786821cd7091e47da21',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/3.0',\n },\n 'start': 56,\n 'end': 63,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/3.0',\n },\n 'start': 0,\n 'end': 15,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/3.0',\n },\n 'start': 17,\n 'end': 30,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/3.0',\n },\n 'start': 32,\n 'end': 45,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/3.0',\n },\n 'start': 47,\n 'end': 58,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/3.0',\n },\n 'start': 60,\n 'end': 72,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/3.0',\n },\n 'start': 74,\n 'end': 89,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/3.0',\n },\n 'start': 91,\n 'end': 98,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/3.0',\n },\n 'start': 100,\n 'end': 112,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/3.0',\n },\n 'start': 114,\n 'end': 125,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/3.0',\n },\n 'start': 127,\n 'end': 134,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/3.0',\n },\n 'start': 136,\n 'end': 144,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/3.0',\n },\n 'start': 146,\n 'end': 153,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/3.0',\n },\n 'start': 155,\n 'end': 157,\n },\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/3.0',\n },\n 'start': 159,\n 'end': 171,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/3.0',\n },\n 'start': 173,\n 'end': 180,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/3.0',\n },\n 'start': 182,\n 'end': 192,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/3.0',\n },\n 'start': 194,\n 'end': 199,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/3.0',\n },\n 'start': 201,\n 'end': 210,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/3.0',\n },\n 'start': 223,\n 'end': 232,\n },\n {\n 'type': '7tv',\n 'name': 'CookieTime',\n 'id': '635b0184ea9ce7391cbf77d6',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/1x.webp',\n '2': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/2x.webp',\n '3': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/3x.webp',\n '4': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/4x.webp',\n },\n 'start': 0,\n 'end': 10,\n 'coords': {\n 'x': 0,\n 'y': 0,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'catJAM',\n 'id': '5f1b0186cf6d2144653d2970',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/1x',\n '2': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/2x',\n '4': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/3x',\n },\n 'start': 0,\n 'end': 6,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': ':tf:',\n 'id': '54fa8f1401e468494b85b537',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/3x',\n },\n 'start': 7,\n 'end': 11,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'AngelThump',\n 'id': '566ca1a365dbbdab32ec055b',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/1x',\n '2': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/2x',\n '4': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/3x',\n },\n 'start': 12,\n 'end': 22,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 334,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ariW',\n 'id': '56fa09f18eff3b595e93ac26',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/1x',\n '2': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/2x',\n '4': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x',\n },\n 'start': 23,\n 'end': 27,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'BroBalt',\n 'id': '54fbf00a01abde735115de5c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/3x',\n },\n 'start': 28,\n 'end': 35,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 184,\n 'height': 120,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bttvNice',\n 'id': '54fab7d2633595ca4c713abf',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/1x',\n '2': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/2x',\n '4': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/3x',\n },\n 'start': 36,\n 'end': 44,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 168,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bUrself',\n 'id': '566c9f3b65dbbdab32ec052e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/3x',\n },\n 'start': 45,\n 'end': 52,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'c!',\n 'id': '6468f7acaee1f7f47567708e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/1x',\n '2': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/2x',\n '4': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/3x',\n },\n 'start': 53,\n 'end': 55,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CandianRage',\n 'id': '54fbf09c01abde735115de61',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/3x',\n },\n 'start': 56,\n 'end': 67,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CiGrip',\n 'id': '54fa8fce01e468494b85b53c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/3x',\n },\n 'start': 68,\n 'end': 74,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ConcernDoge',\n 'id': '566c9f6365dbbdab32ec0532',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/3x',\n },\n 'start': 75,\n 'end': 86,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 101,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CruW',\n 'id': '55471c2789d53f2d12781713',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/1x',\n '2': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/2x',\n '4': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/3x',\n },\n 'start': 87,\n 'end': 91,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'cvHazmat',\n 'id': '5e76d338d6581c3724c0f0b2',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/1x',\n '2': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/2x',\n '4': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/3x',\n },\n 'start': 92,\n 'end': 100,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'D:',\n 'id': '55028cd2135896936880fdd7',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/1x',\n '2': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/2x',\n '4': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/3x',\n },\n 'start': 101,\n 'end': 103,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'haHAA',\n 'id': '555981336ba1901877765555',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/1x',\n '2': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/2x',\n '4': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/3x',\n },\n 'start': 104,\n 'end': 109,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'LuL',\n 'id': '567b00c61ddbe1786688a633',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/1x',\n '2': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/2x',\n '4': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/3x',\n },\n 'start': 110,\n 'end': 113,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'DuckerZ',\n 'id': '573d38b50ffbf6cc5cc38dc9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/1x',\n '2': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/2x',\n '4': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/3x',\n },\n 'start': 114,\n 'end': 121,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 149,\n 'height': 112,\n },\n },\n {\n 'type': 'ffz',\n 'name': 'CatBag',\n 'id': '25927',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.frankerfacez.com/emote/25927/1',\n '2': 'https://cdn.frankerfacez.com/emote/25927/2',\n '4': 'https://cdn.frankerfacez.com/emote/25927/4',\n },\n 'start': 122,\n 'end': 128,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 143,\n 'height': 128,\n },\n },\n]).reduce(\n (acc, emote) => {\n if (!acc.some((e) => e.name === emote.name)) {\n acc.push({\n ...emote,\n start: 0,\n end: 0,\n } as TwitchEmote | BttvEmote | SeventvEmote);\n }\n\n return acc;\n },\n [] as Array<TwitchEmote | BttvEmote | SeventvEmote>,\n);\n\nexport default emotes;\n","export const items: any[] = [];\n\nexport default items;\n","export const messages = [\n 'Hello everyone!',\n 'PogChamp',\n 'This stream is amazing!',\n 'catJAM catJAM catJAM',\n 'LUL that was funny',\n 'GG!',\n 'First time here, loving it!',\n 'DinoDance',\n 'Can we get some hype in chat?',\n 'TransgenderPride PansexualPride NonbinaryPride',\n 'POGGERS',\n 'I just followed! PogChamp',\n 'Great gameplay btw',\n 'LUL LUL LUL',\n 'This is so wholesome AngelThump',\n 'catJAM vibing',\n 'haHAA',\n 'Wait what just happened? D:',\n 'GlitchCat GlitchCat',\n 'Best stream on Twitch right now!',\n 'DarkMode gang where you at?',\n 'PogChamp PogChamp PogChamp PogChamp',\n 'Anyone else eating? DoritosChip',\n 'I love this community!',\n 'TheIlluminati confirmed',\n 'bUrself be yourself!',\n 'CookieTime nom nom',\n 'imGlitch technical difficulties',\n 'This music is fire catJAM',\n 'bttvNice',\n 'LesbianPride GayPride BisexualPride',\n 'SSSsss Minecraft time',\n 'PopNemo',\n 'Going to bed, good night everyone!',\n 'Just got here, what did I miss?',\n ':tf: trollface',\n 'ariW wave',\n 'BroBalt nice one',\n 'AsexualPride IntersexPride GenderFluidPride',\n 'This chat is moving so fast!',\n 'CandianRage',\n 'PunchTrees PunchTrees',\n 'CiGrip',\n 'ConcernDoge hmm',\n 'CruW salute',\n 'cvHazmat stay safe',\n 'DuckerZ quack',\n 'BloodTrail hunting time',\n 'CatBag kitty!',\n 'c! poggers',\n];\n\nexport default messages;\n","export const names = ['Local', 'Tixyel', 'Urie_s2', 'itzzcatt', 'BeniArts', 'Cupidiko', 'shy_madeit'];\n\nexport default names;\n","export const tiers = ['1000', '2000', '3000', 'prime'];\n\nexport default tiers;\n","export const tts = [\n 'Filiz',\n 'Astrid',\n 'Tatyana',\n 'Maxim',\n 'Carmen',\n 'Ines',\n 'Cristiano',\n 'Vitoria',\n 'Ricardo',\n 'Maja',\n 'Jan',\n 'Jacek',\n 'Ewa',\n 'Ruben',\n 'Lotte',\n 'Liv',\n 'Seoyeon',\n 'Takumi',\n 'Mizuki',\n 'Giorgio',\n 'Carla',\n 'Bianca',\n 'Karl',\n 'Dora',\n 'Mathieu',\n 'Celine',\n 'Chantal',\n 'Penelope',\n 'Miguel',\n 'Mia',\n 'Enrique',\n 'Conchita',\n 'Geraint',\n 'Salli',\n 'Matthew',\n 'Kimberly',\n 'Kendra',\n 'Justin',\n 'Joey',\n 'Joanna',\n 'Ivy',\n 'Raveena',\n 'Aditi',\n 'Emma',\n 'Brian',\n 'Amy',\n 'Russell',\n 'Nicole',\n 'Vicki',\n 'Marlene',\n 'Hans',\n 'Naja',\n 'Mads',\n 'Gwyneth',\n 'Zhiyu',\n 'Tracy',\n 'Danny',\n 'Huihui',\n 'Yaoyao',\n 'Kangkang',\n 'HanHan',\n 'Zhiwei',\n 'Asaf',\n 'An',\n 'Stefanos',\n 'Filip',\n 'Ivan',\n 'Heidi',\n 'Herena',\n 'Kalpana',\n 'Hemant',\n 'Matej',\n 'Andika',\n 'Rizwan',\n 'Lado',\n 'Valluvar',\n 'Linda',\n 'Heather',\n 'Sean',\n 'Michael',\n 'Karsten',\n 'Guillaume',\n 'Pattara',\n 'Jakub',\n 'Szabolcs',\n 'Hoda',\n 'Naayf',\n];\n\nexport default tts;\n","export const youtube_emotes = [\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/flower-rainbow-heart-red',\n 'shortcuts': [':pride-flower-rainbow-heart:'],\n 'searchTerms': ['pride-flower-rainbow-heart'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/8cF4z9clPGshgty6vT3ImAtx_CUvz3TMY-SAu_UKw-x1Z9-2KzcK4OuyAIROrKhyvcabrw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/8cF4z9clPGshgty6vT3ImAtx_CUvz3TMY-SAu_UKw-x1Z9-2KzcK4OuyAIROrKhyvcabrw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flower-rainbow-heart',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 0,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-green-earth-head',\n 'shortcuts': [':pride-person-earth-intersex:'],\n 'searchTerms': ['pride-person-earth-intersex'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Gr-3he7L8jjQFj7aI0kSY1eV4aIsy-vT7Hk5shdakigG9aAJO_uMBmV6haCtK1OHjTEjj1o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Gr-3he7L8jjQFj7aI0kSY1eV4aIsy-vT7Hk5shdakigG9aAJO_uMBmV6haCtK1OHjTEjj1o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-earth-intersex',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 1,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-heart-lesbian',\n 'shortcuts': [':pride-person-heart-lesbian:'],\n 'searchTerms': ['pride-person-heart-lesbian'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tKVZ2TfK5tMLvF88cnz2YNVwuHNgr0eDR9Ef8J0OCkZEHXLFUtH3f6-xSHhqhwd2sL3Tu4I=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tKVZ2TfK5tMLvF88cnz2YNVwuHNgr0eDR9Ef8J0OCkZEHXLFUtH3f6-xSHhqhwd2sL3Tu4I=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-heart-lesbian',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 2,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-flower-nonbinary',\n 'shortcuts': [':pride-person-flower-nonbinary:'],\n 'searchTerms': ['pride-person-flower-nonbinary'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/le1X4KHLOmK5K1s5xu-owmP_eZK4D0ExyjnMCS6UNqZa-Zh4uEzz3mZnU3jBlLfi14Zpngw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/le1X4KHLOmK5K1s5xu-owmP_eZK4D0ExyjnMCS6UNqZa-Zh4uEzz3mZnU3jBlLfi14Zpngw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-person-flower-nonbinary',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 3,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/flower-rainbow-heart-pansexual',\n 'shortcuts': [':pride-flower-pansexual:'],\n 'searchTerms': ['pride-flower-pansexual'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/blSdVv_UpdTn8BIWU6u9oCWhdtpc0-a-3dJeaRX9As6ftLc0OGPJ1PveQEJbUEDzf6by2Xi9=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/blSdVv_UpdTn8BIWU6u9oCWhdtpc0-a-3dJeaRX9As6ftLc0OGPJ1PveQEJbUEDzf6by2Xi9=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flower-pansexual',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 4,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/heart-stripes-pride-flag',\n 'shortcuts': [':pride-heart-rainbow-philly:'],\n 'searchTerms': ['pride-heart-rainbow-philly'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7iYeXsmU2YMcKsKalaKJhirWdDASATIpl_c7Ib7akaRhvz8GChI4xpM0d0dtASjmmWPbg1NG=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7iYeXsmU2YMcKsKalaKJhirWdDASATIpl_c7Ib7akaRhvz8GChI4xpM0d0dtASjmmWPbg1NG=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-heart-rainbow-philly',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 5,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/symbol-turquoise-flowers-transgender',\n 'shortcuts': [':pride-flowers-turquoise-transgender:'],\n 'searchTerms': ['pride-flowers-turquoise-transgender'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ovz1T6ay1D1GNFXwwYibZeu_rV5_iSRXWSHR2thQDLLWejVQMqWPUhsUWrMMw1tlBwllYA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ovz1T6ay1D1GNFXwwYibZeu_rV5_iSRXWSHR2thQDLLWejVQMqWPUhsUWrMMw1tlBwllYA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-flowers-turquoise-transgender',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 6,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hand-rainbow-fan-open',\n 'shortcuts': [':pride-fan-rainbow-open:'],\n 'searchTerms': ['pride-fan-rainbow-open'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/lDH5aORWtlc42NxTwiP3aIUIjttLVvE4Q_xIJDuu55DKvYSLeDIysOEKtGuMmEtOLgvZ_zTX=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/lDH5aORWtlc42NxTwiP3aIUIjttLVvE4Q_xIJDuu55DKvYSLeDIysOEKtGuMmEtOLgvZ_zTX=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-fan-rainbow-open',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 7,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-pink-hair-earrings',\n 'shortcuts': [':pride-face-pink-earrings:'],\n 'searchTerms': ['pride-face-pink-earrings'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/utFog-w4fqgJ05xfQFjSdy8jvRBtFCeuWRkLH3IaVJ4WCBrdjDbXzXOprJA_h6MPOuksv0c=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/utFog-w4fqgJ05xfQFjSdy8jvRBtFCeuWRkLH3IaVJ4WCBrdjDbXzXOprJA_h6MPOuksv0c=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-pink-earrings',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 8,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/unicorn-white-rainbow-mane',\n 'shortcuts': [':pride-unicorn-rainbow-mane:'],\n 'searchTerms': ['pride-unicorn-rainbow-mane'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/fvdANfncTw5aDF8GBq20kHicN5rMVoCMTM3FY8MQbZH9sZXvHy5o48yvHZWN4No5rz8b7-0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/fvdANfncTw5aDF8GBq20kHicN5rMVoCMTM3FY8MQbZH9sZXvHy5o48yvHZWN4No5rz8b7-0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-unicorn-rainbow-mane',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 9,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/people-embracing-two',\n 'shortcuts': [':pride-people-embracing-two:'],\n 'searchTerms': ['pride-people-embracing-two'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/h1zJqFv2R4LzS3ZUpVyHhprCHQTIhbSecqu2Lid23byl5hD5cJdnshluOCyRdldYkWCUNg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/h1zJqFv2R4LzS3ZUpVyHhprCHQTIhbSecqu2Lid23byl5hD5cJdnshluOCyRdldYkWCUNg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-people-embracing-two',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 10,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-green-hair-tears',\n 'shortcuts': [':pride-face-green-tears:'],\n 'searchTerms': ['pride-face-green-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2BNf4_qBG7mqt1sN-JwThp1srHlDr03xoya9hpIvbgS65HwLaaDz46r3A6dy8JnO2GtLNag=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2BNf4_qBG7mqt1sN-JwThp1srHlDr03xoya9hpIvbgS65HwLaaDz46r3A6dy8JnO2GtLNag=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-green-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 11,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/megaphone-rainbow-handle',\n 'shortcuts': [':pride-megaphone-rainbow-handle:'],\n 'searchTerms': ['pride-megaphone-rainbow-handle'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cop1MU9YkEuUxbe8d1NhPl1S9uJ60YSVTMM1gelP7Cy0BICa6Ey_TpxEFFdYITtsUK1cSg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cop1MU9YkEuUxbe8d1NhPl1S9uJ60YSVTMM1gelP7Cy0BICa6Ey_TpxEFFdYITtsUK1cSg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-megaphone-rainbow-handle',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 12,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hand-brown-yellow-nails',\n 'shortcuts': [':pride-hand-yellow-nails:'],\n 'searchTerms': ['pride-hand-yellow-nails'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/1dEPlxkQ1RdZkPo5CLgYvneMQ-BBo63b3nnASEAXoccnVktMjgviKqMj1pjPiK2zTPTc7g=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/1dEPlxkQ1RdZkPo5CLgYvneMQ-BBo63b3nnASEAXoccnVktMjgviKqMj1pjPiK2zTPTc7g=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-hand-yellow-nails',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 13,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-orange-hair-flowing',\n 'shortcuts': [':pride-face-orange-flowing:'],\n 'searchTerms': ['pride-face-orange-flowing'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/RuhTeU8YiT0_NaOYjMmXv77eEw5eO5Bdzfr7ouS0u3ZAK2J4coKGe5g4fN8mJV85jC63hw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/RuhTeU8YiT0_NaOYjMmXv77eEw5eO5Bdzfr7ouS0u3ZAK2J4coKGe5g4fN8mJV85jC63hw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pride-face-orange-flowing',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 14,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/CIW60IPp_dYCFcuqTgodEu4IlQ',\n 'shortcuts': [':yt:'],\n 'searchTerms': ['yt'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/IkpeJf1g9Lq0WNjvSa4XFq4LVNZ9IP5FKW8yywXb12djo1OGdJtziejNASITyq4L0itkMNw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/IkpeJf1g9Lq0WNjvSa4XFq4LVNZ9IP5FKW8yywXb12djo1OGdJtziejNASITyq4L0itkMNw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'yt',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 15,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/CN2m5cKr49sCFYbFggodDFEKrg',\n 'shortcuts': [':oops:'],\n 'searchTerms': ['oops'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/PFoVIqIiFRS3aFf5-bt_tTC0WrDm_ylhF4BKKwgqAASNb7hVgx_adFP-XVhFiJLXdRK0EQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/PFoVIqIiFRS3aFf5-bt_tTC0WrDm_ylhF4BKKwgqAASNb7hVgx_adFP-XVhFiJLXdRK0EQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'oops',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 16,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/X_zdXMHgJaPa8gTGt4f4Ag',\n 'shortcuts': [':buffering:'],\n 'searchTerms': ['buffering'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5gfMEfdqO9CiLwhN9Mq7VI6--T2QFp8AXNNy5Fo7btfY6fRKkThWq35SCZ6SPMVCjg-sUA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5gfMEfdqO9CiLwhN9Mq7VI6--T2QFp8AXNNy5Fo7btfY6fRKkThWq35SCZ6SPMVCjg-sUA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'buffering',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 17,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/1v50XorRJ8GQ8gTz_prwAg',\n 'shortcuts': [':stayhome:'],\n 'searchTerms': ['stayhome'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_1FGHypiub51kuTiNBX1a0H3NyFih3TnHX7bHU06j_ajTzT0OQfMLl9RI1SiQoxtgA2Grg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_1FGHypiub51kuTiNBX1a0H3NyFih3TnHX7bHU06j_ajTzT0OQfMLl9RI1SiQoxtgA2Grg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'stayhome',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 18,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/8P50XuS9Oo7h8wSqtIagBA',\n 'shortcuts': [':dothefive:'],\n 'searchTerms': ['dothefive'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-nM0DOd49969h3GNcl705Ti1fIf1ZG_E3JxcOUVV-qPfCW6jY8xZ98caNLHkVSGRTSEb7Y9y=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-nM0DOd49969h3GNcl705Ti1fIf1ZG_E3JxcOUVV-qPfCW6jY8xZ98caNLHkVSGRTSEb7Y9y=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'dothefive',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 19,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Fv90Xq-vJcPq8gTqzreQAQ',\n 'shortcuts': [':elbowbump:'],\n 'searchTerms': ['elbowbump'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2ou58X5XuhTrxjtIM2wew1f-HKRhN_T5SILQgHE-WD9dySzzJdGwL4R1gpKiJXcbtq6sjQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2ou58X5XuhTrxjtIM2wew1f-HKRhN_T5SILQgHE-WD9dySzzJdGwL4R1gpKiJXcbtq6sjQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'elbowbump',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 20,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Iv90XouTLuOR8gSxxrToBA',\n 'shortcuts': [':goodvibes:'],\n 'searchTerms': ['goodvibes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2CvFOwgKpL29mW_C51XvaWa7Eixtv-3tD1XvZa1_WemaDDL2AqevKbTZ1rdV0OWcnOZRag=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2CvFOwgKpL29mW_C51XvaWa7Eixtv-3tD1XvZa1_WemaDDL2AqevKbTZ1rdV0OWcnOZRag=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'goodvibes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 21,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Rf90XtDbG8GQ8gTz_prwAg',\n 'shortcuts': [':thanksdoc:'],\n 'searchTerms': ['thanksdoc'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/bUnO_VwXW2hDf-Da8D64KKv6nBJDYUBuo13RrOg141g2da8pi9-KClJYlUDuqIwyPBfvOO8=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/bUnO_VwXW2hDf-Da8D64KKv6nBJDYUBuo13RrOg141g2da8pi9-KClJYlUDuqIwyPBfvOO8=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'thanksdoc',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 22,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/VP90Xv_wG82o8wTCi7CQAw',\n 'shortcuts': [':videocall:'],\n 'searchTerms': ['videocall'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/k5v_oxUzRWmTOXP0V6WJver6xdS1lyHMPcMTfxn23Md6rmixoR5RZUusFbZi1uZwjF__pv4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/k5v_oxUzRWmTOXP0V6WJver6xdS1lyHMPcMTfxn23Md6rmixoR5RZUusFbZi1uZwjF__pv4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'videocall',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 23,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/dv90XtfhAurw8gTgzar4DA',\n 'shortcuts': [':virtualhug:'],\n 'searchTerms': ['virtualhug'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/U1TjOZlqtS58NGqQhE8VWDptPSrmJNkrbVRp_8jI4f84QqIGflq2Ibu7YmuOg5MmVYnpevc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/U1TjOZlqtS58NGqQhE8VWDptPSrmJNkrbVRp_8jI4f84QqIGflq2Ibu7YmuOg5MmVYnpevc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'virtualhug',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 24,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hf90Xv-jHeOR8gSxxrToBA',\n 'shortcuts': [':yougotthis:'],\n 'searchTerms': ['yougotthis'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/s3uOe4lUx3iPIt1h901SlMp_sKCTp3oOVj1JV8izBw_vDVLxFqk5dq-3NX-nK_gnUwVEXld3=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/s3uOe4lUx3iPIt1h901SlMp_sKCTp3oOVj1JV8izBw_vDVLxFqk5dq-3NX-nK_gnUwVEXld3=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'yougotthis',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 25,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/lP90XvOhCZGl8wSO1JmgAw',\n 'shortcuts': [':sanitizer:'],\n 'searchTerms': ['sanitizer'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EJ_8vc4Gl-WxCWBurHwwWROAHrPzxgePodoNfkRY1U_I8L1O2zlqf7-wfUtTeyzq2qHNnocZ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EJ_8vc4Gl-WxCWBurHwwWROAHrPzxgePodoNfkRY1U_I8L1O2zlqf7-wfUtTeyzq2qHNnocZ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'sanitizer',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 26,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/uP90Xq6wNYrK8gTUoo3wAg',\n 'shortcuts': [':takeout:'],\n 'searchTerms': ['takeout'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FizHI5IYMoNql9XeP7TV3E0ffOaNKTUSXbjtJe90e1OUODJfZbWU37VqBbTh-vpyFHlFIS0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FizHI5IYMoNql9XeP7TV3E0ffOaNKTUSXbjtJe90e1OUODJfZbWU37VqBbTh-vpyFHlFIS0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'takeout',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 27,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/fAF1XtDQMIrK8gTUoo3wAg',\n 'shortcuts': [':hydrate:'],\n 'searchTerms': ['hydrate'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tpgZgmhX8snKniye36mnrDVfTnlc44EK92EPeZ0m9M2EPizn1vKEGJzNYdp7KQy6iNZlYDc1=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tpgZgmhX8snKniye36mnrDVfTnlc44EK92EPeZ0m9M2EPizn1vKEGJzNYdp7KQy6iNZlYDc1=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hydrate',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 28,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/vQF1XpyaG_XG8gTs77bACQ',\n 'shortcuts': [':chillwcat:'],\n 'searchTerms': ['chillwcat'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/y03dFcPc1B7CO20zgQYzhcRPka5Bhs6iSg57MaxJdhaLidFvvXBLf_i4_SHG7zJ_2VpBMNs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/y03dFcPc1B7CO20zgQYzhcRPka5Bhs6iSg57MaxJdhaLidFvvXBLf_i4_SHG7zJ_2VpBMNs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'chillwcat',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 29,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ygF1XpGUMMjk8gSDrI2wCw',\n 'shortcuts': [':chillwdog:'],\n 'searchTerms': ['chillwdog'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Ir9mDxzUi0mbqyYdJ3N9Lq7bN5Xdt0Q7fEYFngN3GYAcJT_tccH1as1PKmInnpt2cbWOam4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Ir9mDxzUi0mbqyYdJ3N9Lq7bN5Xdt0Q7fEYFngN3GYAcJT_tccH1as1PKmInnpt2cbWOam4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'chillwdog',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 30,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/8gF1Xp_zK8jk8gSDrI2wCw',\n 'shortcuts': [':elbowcough:'],\n 'searchTerms': ['elbowcough'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DTR9bZd1HOqpRJyz9TKiLb0cqe5Hb84Yi_79A6LWlN1tY-5kXqLDXRmtYVKE9rcqzEghmw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DTR9bZd1HOqpRJyz9TKiLb0cqe5Hb84Yi_79A6LWlN1tY-5kXqLDXRmtYVKE9rcqzEghmw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'elbowcough',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 31,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/EAJ1XrS7PMGQ8gTz_prwAg',\n 'shortcuts': [':learning:'],\n 'searchTerms': ['learning'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ZuBuz8GAQ6IEcQc7CoJL8IEBTYbXEvzhBeqy1AiytmhuAT0VHjpXEjd-A5GfR4zDin1L53Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ZuBuz8GAQ6IEcQc7CoJL8IEBTYbXEvzhBeqy1AiytmhuAT0VHjpXEjd-A5GfR4zDin1L53Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'learning',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 32,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/JAJ1XpGpJYnW8wTupZu4Cw',\n 'shortcuts': [':washhands:'],\n 'searchTerms': ['washhands'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qXUeUW0KpKBc9Z3AqUqr_0B7HbW1unAv4qmt7-LJGUK_gsFBIaHISWJNt4n3yvmAnQNZHE-u=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qXUeUW0KpKBc9Z3AqUqr_0B7HbW1unAv4qmt7-LJGUK_gsFBIaHISWJNt4n3yvmAnQNZHE-u=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'washhands',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 33,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/PAJ1XsOOI4fegwOo57ewAg',\n 'shortcuts': [':socialdist:'],\n 'searchTerms': ['socialdist'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/igBNi55-TACUi1xQkqMAor-IEXmt8He56K7pDTG5XoTsbM-rVswNzUfC5iwnfrpunWihrg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/igBNi55-TACUi1xQkqMAor-IEXmt8He56K7pDTG5XoTsbM-rVswNzUfC5iwnfrpunWihrg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'socialdist',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 34,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/egJ1XufTKYfegwOo57ewAg',\n 'shortcuts': [':shelterin:'],\n 'searchTerms': ['shelterin'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/gjC5x98J4BoVSEPfFJaoLtc4tSBGSEdIlfL2FV4iJG9uGNykDP9oJC_QxAuBTJy6dakPxVeC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/gjC5x98J4BoVSEPfFJaoLtc4tSBGSEdIlfL2FV4iJG9uGNykDP9oJC_QxAuBTJy6dakPxVeC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'shelterin',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 35,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/G8AfY6yWGuKuhL0PlbiA2AE',\n 'shortcuts': [':hand-pink-waving:'],\n 'searchTerms': ['hand-pink-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/KOxdr_z3A5h1Gb7kqnxqOCnbZrBmxI2B_tRQ453BhTWUhYAlpg5ZP8IKEBkcvRoY8grY91Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/KOxdr_z3A5h1Gb7kqnxqOCnbZrBmxI2B_tRQ453BhTWUhYAlpg5ZP8IKEBkcvRoY8grY91Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-pink-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 36,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/KsIfY6LzFoLM6AKanYDQAg',\n 'shortcuts': [':face-blue-smiling:'],\n 'searchTerms': ['face-blue-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cktIaPxFwnrPwn-alHvnvedHLUJwbHi8HCK3AgbHpphrMAW99qw0bDfxuZagSY5ieE9BBrA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cktIaPxFwnrPwn-alHvnvedHLUJwbHi8HCK3AgbHpphrMAW99qw0bDfxuZagSY5ieE9BBrA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 37,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/W8IfY_bwAfiPq7IPvNCA2AU',\n 'shortcuts': [':face-red-droopy-eyes:'],\n 'searchTerms': ['face-red-droopy-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/oih9s26MOYPWC_uL6tgaeOlXSGBv8MMoDrWzBt-80nEiVSL9nClgnuzUAKqkU9_TWygF6CI=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/oih9s26MOYPWC_uL6tgaeOlXSGBv8MMoDrWzBt-80nEiVSL9nClgnuzUAKqkU9_TWygF6CI=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-droopy-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 38,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/b8IfY7zOK9iVkNAP_I2A-AY',\n 'shortcuts': [':face-purple-crying:'],\n 'searchTerms': ['face-purple-crying'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/g6_km98AfdHbN43gvEuNdZ2I07MmzVpArLwEvNBwwPqpZYzszqhRzU_DXALl11TchX5_xFE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/g6_km98AfdHbN43gvEuNdZ2I07MmzVpArLwEvNBwwPqpZYzszqhRzU_DXALl11TchX5_xFE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-crying',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 39,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hcIfY57lBJXp6AKBx4CoCA',\n 'shortcuts': [':text-green-game-over:'],\n 'searchTerms': ['text-green-game-over'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cr36FHhSiMAJUSpO9XzjbOgxhtrdJNTVJUlMJeOOfLOFzKleAKT2SEkZwbqihBqfTXYCIg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cr36FHhSiMAJUSpO9XzjbOgxhtrdJNTVJUlMJeOOfLOFzKleAKT2SEkZwbqihBqfTXYCIg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'text-green-game-over',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 40,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ssIfY7OFG5OykQOpn4CQCw',\n 'shortcuts': [':person-turqouise-waving:'],\n 'searchTerms': ['person-turqouise-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/uNSzQ2M106OC1L3VGzrOsGNjopboOv-m1bnZKFGuh0DxcceSpYHhYbuyggcgnYyaF3o-AQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/uNSzQ2M106OC1L3VGzrOsGNjopboOv-m1bnZKFGuh0DxcceSpYHhYbuyggcgnYyaF3o-AQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turqouise-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 41,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/xsIfY4OqCd2T29sP54iAsAw',\n 'shortcuts': [':face-green-smiling:'],\n 'searchTerms': ['face-green-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/G061SAfXg2bmG1ZXbJsJzQJpN8qEf_W3f5cb5nwzBYIV58IpPf6H90lElDl85iti3HgoL3o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/G061SAfXg2bmG1ZXbJsJzQJpN8qEf_W3f5cb5nwzBYIV58IpPf6H90lElDl85iti3HgoL3o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-green-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 42,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/2sIfY8vIG8z96ALulYDQDQ',\n 'shortcuts': [':face-orange-frowning:'],\n 'searchTerms': ['face-orange-frowning'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Ar8jaEIxzfiyYmB7ejDOHba2kUMdR37MHn_R39mtxqO5CD4aYGvjDFL22DW_Cka6LKzhGDk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Ar8jaEIxzfiyYmB7ejDOHba2kUMdR37MHn_R39mtxqO5CD4aYGvjDFL22DW_Cka6LKzhGDk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-frowning',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 43,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/7cIfY5niDOmSkNAP08CA6A4',\n 'shortcuts': [':eyes-purple-crying:'],\n 'searchTerms': ['eyes-purple-crying'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FrYgdeZPpvXs-6Mp305ZiimWJ0wV5bcVZctaUy80mnIdwe-P8HRGYAm0OyBtVx8EB9_Dxkc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FrYgdeZPpvXs-6Mp305ZiimWJ0wV5bcVZctaUy80mnIdwe-P8HRGYAm0OyBtVx8EB9_Dxkc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'eyes-purple-crying',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 44,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/A8MfY-_pEIKNr8oP78-AGA',\n 'shortcuts': [':face-fuchsia-wide-eyes:'],\n 'searchTerms': ['face-fuchsia-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/zdcOC1SMmyXJOAddl9DYeEFN9YYcn5mHemJCdRFQMtDuS0V-IyE-5YjNUL1tduX1zs17tQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/zdcOC1SMmyXJOAddl9DYeEFN9YYcn5mHemJCdRFQMtDuS0V-IyE-5YjNUL1tduX1zs17tQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 45,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/E8MfY5u7JPSXkNAP95GAmAE',\n 'shortcuts': [':cat-orange-whistling:'],\n 'searchTerms': ['cat-orange-whistling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/0ocqEmuhrKCK87_J21lBkvjW70wRGC32-Buwk6TP4352CgcNjL6ug8zcsel6JiPbE58xhq5g=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/0ocqEmuhrKCK87_J21lBkvjW70wRGC32-Buwk6TP4352CgcNjL6ug8zcsel6JiPbE58xhq5g=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'cat-orange-whistling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 46,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/LsMfY8P6G-yckNAPjoWA8AI',\n 'shortcuts': [':face-blue-wide-eyes:'],\n 'searchTerms': ['face-blue-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2Ht4KImoWDlCddiDQVuzSJwpEb59nZJ576ckfaMh57oqz2pUkkgVTXV8osqUOgFHZdUISJM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2Ht4KImoWDlCddiDQVuzSJwpEb59nZJ576ckfaMh57oqz2pUkkgVTXV8osqUOgFHZdUISJM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 47,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Z8MfY8mzLbnovwK5roC4Bg',\n 'shortcuts': [':face-orange-raised-eyebrow:'],\n 'searchTerms': ['face-orange-raised-eyebrow'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/JbCfmOgYI-mO17LPw8e_ycqbBGESL8AVP6i7ZsBOVLd3PEpgrfEuJ9rEGpP_unDcqgWSCg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/JbCfmOgYI-mO17LPw8e_ycqbBGESL8AVP6i7ZsBOVLd3PEpgrfEuJ9rEGpP_unDcqgWSCg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-raised-eyebrow',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 48,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hcMfY5_zAbbxvwKLooCoCA',\n 'shortcuts': [':face-fuchsia-tongue-out:'],\n 'searchTerms': ['face-fuchsia-tongue-out'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EURfJZi_heNulV3mfHzXBk8PIs9XmZ9lOOYi5za6wFMCGrps4i2BJX9j-H2gK6LIhW6h7sY=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EURfJZi_heNulV3mfHzXBk8PIs9XmZ9lOOYi5za6wFMCGrps4i2BJX9j-H2gK6LIhW6h7sY=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-tongue-out',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 49,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ygF1XpGUMMjk8gSDrI2wCx',\n 'shortcuts': [':face-orange-biting-nails:'],\n 'searchTerms': ['face-orange-biting-nails'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/HmsXEgqUogkQOnL5LP_FdPit9Z909RJxby-uYcPxBLNhaPyqPTcGwvGaGPk2hzB_cC0hs_pV=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/HmsXEgqUogkQOnL5LP_FdPit9Z909RJxby-uYcPxBLNhaPyqPTcGwvGaGPk2hzB_cC0hs_pV=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-biting-nails',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 50,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/m8MfY4jbFsWJhL0PyouA2Ak',\n 'shortcuts': [':face-red-heart-shape:'],\n 'searchTerms': ['face-red-heart-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/I0Mem9dU_IZ4a9cQPzR0pUJ8bH-882Eg0sDQjBmPcHA6Oq0uXOZcsjPvPbtormx91Ha2eRA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/I0Mem9dU_IZ4a9cQPzR0pUJ8bH-882Eg0sDQjBmPcHA6Oq0uXOZcsjPvPbtormx91Ha2eRA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-heart-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 51,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/6_cfY8HJH8bV5QS5yYDYDg',\n 'shortcuts': [':face-fuchsia-poop-shape:'],\n 'searchTerms': ['face-fuchsia-poop-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_xlyzvSimqMzhdhODyqUBLXIGA6F_d5en2bq-AIfc6fc3M7tw2jucuXRIo5igcW3g9VVe3A=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_xlyzvSimqMzhdhODyqUBLXIGA6F_d5en2bq-AIfc6fc3M7tw2jucuXRIo5igcW3g9VVe3A=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-poop-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 52,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/DfgfY9LaNdmMq7IPuI2AaA',\n 'shortcuts': [':face-purple-wide-eyes:'],\n 'searchTerms': ['face-purple-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5RDrtjmzRQKuVYE_FKPUHiGh7TNtX5eSNe6XzcSytMsHirXYKunxpyAsVacTFMg0jmUGhQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5RDrtjmzRQKuVYE_FKPUHiGh7TNtX5eSNe6XzcSytMsHirXYKunxpyAsVacTFMg0jmUGhQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 53,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/HvgfY93GEYmqvwLUuYDwAQ',\n 'shortcuts': [':glasses-purple-yellow-diamond:'],\n 'searchTerms': ['glasses-purple-yellow-diamond'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EnDBiuksboKsLkxp_CqMWlTcZtlL77QBkbjz_rLedMSDzrHmy_6k44YWFy2rk4I0LG6K2KI=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EnDBiuksboKsLkxp_CqMWlTcZtlL77QBkbjz_rLedMSDzrHmy_6k44YWFy2rk4I0LG6K2KI=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'glasses-purple-yellow-diamond',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 54,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/NvgfY9aeC_OFvOMPkrOAsAM',\n 'shortcuts': [':face-pink-tears:'],\n 'searchTerms': ['face-pink-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/RL5QHCNcO_Mc98SxFEblXZt9FNoh3bIgsjm0Kj8kmeQJWMeTu7JX_NpICJ6KKwKT0oVHhAA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/RL5QHCNcO_Mc98SxFEblXZt9FNoh3bIgsjm0Kj8kmeQJWMeTu7JX_NpICJ6KKwKT0oVHhAA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-pink-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 55,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/UvgfY_vqE92T29sPvqiAkAU',\n 'shortcuts': [':body-blue-raised-arms:'],\n 'searchTerms': ['body-blue-raised-arms'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/2Jds3I9UKOfgjid97b_nlDU4X2t5MgjTof8yseCp7M-6ZhOhRkPGSPfYwmE9HjCibsfA1Uzo=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/2Jds3I9UKOfgjid97b_nlDU4X2t5MgjTof8yseCp7M-6ZhOhRkPGSPfYwmE9HjCibsfA1Uzo=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-blue-raised-arms',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 56,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/YvgfY-LIBpjChgHKyYCQBg',\n 'shortcuts': [':hand-orange-covering-eyes:'],\n 'searchTerms': ['hand-orange-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/y8ppa6GcJoRUdw7GwmjDmTAnSkeIkUptZMVQuFmFaTlF_CVIL7YP7hH7hd0TJbd8p9w67IM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/y8ppa6GcJoRUdw7GwmjDmTAnSkeIkUptZMVQuFmFaTlF_CVIL7YP7hH7hd0TJbd8p9w67IM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-orange-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 57,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/ePgfY-K2Kp6Mr8oP1oqAwAc',\n 'shortcuts': [':trophy-yellow-smiling:'],\n 'searchTerms': ['trophy-yellow-smiling'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7tf3A_D48gBg9g2N0Rm6HWs2aqzshHU4CuVubTXVxh1BP7YDBRC6pLBoC-ibvr-zCl_Lgg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7tf3A_D48gBg9g2N0Rm6HWs2aqzshHU4CuVubTXVxh1BP7YDBRC6pLBoC-ibvr-zCl_Lgg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'trophy-yellow-smiling',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 58,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/jPgfY5j2IIud29sP3ZeA4Ag',\n 'shortcuts': [':eyes-pink-heart-shape:'],\n 'searchTerms': ['eyes-pink-heart-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/5vzlCQfQQdzsG7nlQzD8eNjtyLlnATwFwGvrMpC8dgLcosNhWLXu8NN9qIS3HZjJYd872dM=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/5vzlCQfQQdzsG7nlQzD8eNjtyLlnATwFwGvrMpC8dgLcosNhWLXu8NN9qIS3HZjJYd872dM=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'eyes-pink-heart-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 59,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/oPgfY_DoKfSXkNAPq8-AgAo',\n 'shortcuts': [':face-turquoise-covering-eyes:'],\n 'searchTerms': ['face-turquoise-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/H2HNPRO8f4SjMmPNh5fl10okSETW7dLTZtuE4jh9D6pSmaUiLfoZJ2oiY-qWU3Owfm1IsXg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/H2HNPRO8f4SjMmPNh5fl10okSETW7dLTZtuE4jh9D6pSmaUiLfoZJ2oiY-qWU3Owfm1IsXg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 60,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/tPgfY7mSO4XovQKzmYCgCw',\n 'shortcuts': [':hand-green-crystal-ball:'],\n 'searchTerms': ['hand-green-crystal-ball'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qZfJrWDEmR03FIak7PMNRNpMjNsCnOzD9PqK8mOpAp4Kacn_uXRNJNb99tE_1uyEbvgJReF2=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qZfJrWDEmR03FIak7PMNRNpMjNsCnOzD9PqK8mOpAp4Kacn_uXRNJNb99tE_1uyEbvgJReF2=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-green-crystal-ball',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 61,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/zPgfY66lCJGRhL0Pz6iA4Aw',\n 'shortcuts': [':face-turquoise-drinking-coffee:'],\n 'searchTerms': ['face-turquoise-drinking-coffee'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/myqoI1MgFUXQr5fuWTC9mz0BCfgf3F8GSDp06o1G7w6pTz48lwARjdG8vj0vMxADvbwA1dA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/myqoI1MgFUXQr5fuWTC9mz0BCfgf3F8GSDp06o1G7w6pTz48lwARjdG8vj0vMxADvbwA1dA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-drinking-coffee',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 62,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/4PgfY73cJprKCq-_gIAO',\n 'shortcuts': [':body-green-covering-eyes:'],\n 'searchTerms': ['body-green-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/UR8ydcU3gz360bzDsprB6d1klFSQyVzgn-Fkgu13dIKPj3iS8OtG1bhBUXPdj9pMwtM00ro=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/UR8ydcU3gz360bzDsprB6d1klFSQyVzgn-Fkgu13dIKPj3iS8OtG1bhBUXPdj9pMwtM00ro=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-green-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 63,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/-fgfY9DIGYjbhgHLzoDIDw',\n 'shortcuts': [':goat-turquoise-white-horns:'],\n 'searchTerms': ['goat-turquoise-white-horns'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/jMnX4lu5GnjBRgiPtX5FwFmEyKTlWFrr5voz-Auko35oP0t3-zhPxR3PQMYa-7KhDeDtrv4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/jMnX4lu5GnjBRgiPtX5FwFmEyKTlWFrr5voz-Auko35oP0t3-zhPxR3PQMYa-7KhDeDtrv4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'goat-turquoise-white-horns',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 64,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/EvkfY6uNC5OykQOewoCQAQ',\n 'shortcuts': [':hand-purple-blue-peace:'],\n 'searchTerms': ['hand-purple-blue-peace'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-sC8wj6pThd7FNdslEoJlG4nB9SIbrJG3CRGh7-bNV0RVfcrJuwiWHoUZ6UmcVs7sQjxTg4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-sC8wj6pThd7FNdslEoJlG4nB9SIbrJG3CRGh7-bNV0RVfcrJuwiWHoUZ6UmcVs7sQjxTg4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hand-purple-blue-peace',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 65,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/LfkfY_zhH4GFr8oP4aKA6AI',\n 'shortcuts': [':face-blue-question-mark:'],\n 'searchTerms': ['face-blue-question-mark'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Wx4PMqTwG3f4gtR7J9Go1s8uozzByGWLSXHzrh3166ixaYRinkH_F05lslfsRUsKRvHXrDk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Wx4PMqTwG3f4gtR7J9Go1s8uozzByGWLSXHzrh3166ixaYRinkH_F05lslfsRUsKRvHXrDk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-question-mark',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 66,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/RPkfY8TPGsCakNAP-JWAoAQ',\n 'shortcuts': [':face-blue-covering-eyes:'],\n 'searchTerms': ['face-blue-covering-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/kj3IgbbR6u-mifDkBNWVcdOXC-ut-tiFbDpBMGVeW79c2c54n5vI-HNYCOC6XZ9Bzgupc10=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/kj3IgbbR6u-mifDkBNWVcdOXC-ut-tiFbDpBMGVeW79c2c54n5vI-HNYCOC6XZ9Bzgupc10=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-covering-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 67,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Mm5IY53bH7SEq7IP-MWAkAM',\n 'shortcuts': [':face-purple-smiling-fangs:'],\n 'searchTerms': ['face-purple-smiling-fangs'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/k1vqi6xoHakGUfa0XuZYWHOv035807ARP-ZLwFmA-_NxENJMxsisb-kUgkSr96fj5baBOZE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/k1vqi6xoHakGUfa0XuZYWHOv035807ARP-ZLwFmA-_NxENJMxsisb-kUgkSr96fj5baBOZE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-smiling-fangs',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 68,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/UW5IY-ibBqa8jgTymoCIBQ',\n 'shortcuts': [':face-purple-sweating:'],\n 'searchTerms': ['face-purple-sweating'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tRnrCQtEKlTM9YLPo0vaxq9mDvlT0mhDld2KI7e_nDRbhta3ULKSoPVHZ1-bNlzQRANmH90=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tRnrCQtEKlTM9YLPo0vaxq9mDvlT0mhDld2KI7e_nDRbhta3ULKSoPVHZ1-bNlzQRANmH90=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-sweating',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 69,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/Ym5IY7-0LoqA29sPq9CAkAY',\n 'shortcuts': [':face-purple-smiling-tears:'],\n 'searchTerms': ['face-purple-smiling-tears'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/MJV1k3J5s0hcUfuo78Y6MKi-apDY5NVDjO9Q7hL8fU4i0cIBgU-cU4rq4sHessJuvuGpDOjJ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/MJV1k3J5s0hcUfuo78Y6MKi-apDY5NVDjO9Q7hL8fU4i0cIBgU-cU4rq4sHessJuvuGpDOjJ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-smiling-tears',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 70,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/dG5IY-mhEof9jgSykoCgBw',\n 'shortcuts': [':face-blue-star-eyes:'],\n 'searchTerms': ['face-blue-star-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/m_ANavMhp6cQ1HzX0HCTgp_er_yO2UA28JPbi-0HElQgnQ4_q5RUhgwueTpH-st8L3MyTA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/m_ANavMhp6cQ1HzX0HCTgp_er_yO2UA28JPbi-0HElQgnQ4_q5RUhgwueTpH-st8L3MyTA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-star-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 71,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hm5IY4W-H9SO5QS6n4CwCA',\n 'shortcuts': [':face-blue-heart-eyes:'],\n 'searchTerms': ['face-blue-heart-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/M9tzKd64_r3hvgpTSgca7K3eBlGuyiqdzzhYPp7ullFAHMgeFoNLA0uQ1dGxj3fXgfcHW4w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/M9tzKd64_r3hvgpTSgca7K3eBlGuyiqdzzhYPp7ullFAHMgeFoNLA0uQ1dGxj3fXgfcHW4w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-heart-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 72,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/mW5IY47PMcSnkMkPo6OAyAk',\n 'shortcuts': [':face-blue-three-eyes:'],\n 'searchTerms': ['face-blue-three-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/nSQHitVplLe5uZC404dyAwv1f58S3PN-U_799fvFzq-6b3bv-MwENO-Zs1qQI4oEXCbOJg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/nSQHitVplLe5uZC404dyAwv1f58S3PN-U_799fvFzq-6b3bv-MwENO-Zs1qQI4oEXCbOJg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-three-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 73,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/rW5IY_26FryOq7IPlL2A6Ao',\n 'shortcuts': [':face-blue-droopy-eyes:'],\n 'searchTerms': ['face-blue-droopy-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/hGPqMUCiXGt6zuX4dHy0HRZtQ-vZmOY8FM7NOHrJTta3UEJksBKjOcoE6ZUAW9sz7gIF_nk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/hGPqMUCiXGt6zuX4dHy0HRZtQ-vZmOY8FM7NOHrJTta3UEJksBKjOcoE6ZUAW9sz7gIF_nk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-droopy-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 74,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/v25IY7KcJIGOr8oPz4OA-As',\n 'shortcuts': [':planet-orange-purple-ring:'],\n 'searchTerms': ['planet-orange-purple-ring'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/xkaLigm3P4_1g4X1JOtkymcC7snuJu_C5YwIFAyQlAXK093X0IUjaSTinMTLKeRZ6280jXg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/xkaLigm3P4_1g4X1JOtkymcC7snuJu_C5YwIFAyQlAXK093X0IUjaSTinMTLKeRZ6280jXg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'planet-orange-purple-ring',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 75,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-yellow-podium-blue',\n 'shortcuts': [':person-yellow-podium-blue:'],\n 'searchTerms': ['person-yellow-podium-blue'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/N28nFDm82F8kLPAa-jY_OySFsn3Ezs_2Bl5kdxC8Yxau5abkj_XZHYsS3uYKojs8qy8N-9w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/N28nFDm82F8kLPAa-jY_OySFsn3Ezs_2Bl5kdxC8Yxau5abkj_XZHYsS3uYKojs8qy8N-9w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-yellow-podium-blue',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 76,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/baseball-white-cap-out',\n 'shortcuts': [':baseball-white-cap-out:'],\n 'searchTerms': ['baseball-white-cap-out'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/8DaGaXfaBN0c-ZsZ-1WqPJ6H9TsJOlUUQQEoXvmdROphZE9vdRtN0867Gb2YZcm2x38E9Q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/8DaGaXfaBN0c-ZsZ-1WqPJ6H9TsJOlUUQQEoXvmdROphZE9vdRtN0867Gb2YZcm2x38E9Q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'baseball-white-cap-out',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 77,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/whistle-red-blow',\n 'shortcuts': [':whistle-red-blow:'],\n 'searchTerms': ['whistle-red-blow'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DBu1ZfPJTnX9S1RyKKdBY-X_CEmj7eF6Uzl71j5jVBz5y4k9JcKnoiFtImAbeu4u8M2X8tU=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DBu1ZfPJTnX9S1RyKKdBY-X_CEmj7eF6Uzl71j5jVBz5y4k9JcKnoiFtImAbeu4u8M2X8tU=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'whistle-red-blow',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 78,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-crowd-surf',\n 'shortcuts': [':person-turquoise-crowd-surf:'],\n 'searchTerms': ['person-turquoise-crowd-surf'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Q0wFvHZ5h54xGSTo-JeGst6InRU3yR6NdBRoyowaqGY66LPzdcrV2t-wBN21kBIdb2TeNA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Q0wFvHZ5h54xGSTo-JeGst6InRU3yR6NdBRoyowaqGY66LPzdcrV2t-wBN21kBIdb2TeNA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-crowd-surf',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 79,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/finger-red-number-one',\n 'shortcuts': [':finger-red-number-one:'],\n 'searchTerms': ['finger-red-number-one'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/Hbk0wxBzPTBCDvD_y4qdcHL5_uu7SeOnaT2B7gl9GLB4u8Ecm9OaXCGSMMUBFeNGl5Q3fHJ2=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/Hbk0wxBzPTBCDvD_y4qdcHL5_uu7SeOnaT2B7gl9GLB4u8Ecm9OaXCGSMMUBFeNGl5Q3fHJ2=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'finger-red-number-one',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 80,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/text-yellow-goal',\n 'shortcuts': [':text-yellow-goal:'],\n 'searchTerms': ['text-yellow-goal'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tnHp8rHjXecGbGrWNcs7xss_aVReaYE6H-QWRCXYg_aaYszHXnbP_pVADnibUiimspLvgX0L=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tnHp8rHjXecGbGrWNcs7xss_aVReaYE6H-QWRCXYg_aaYszHXnbP_pVADnibUiimspLvgX0L=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'text-yellow-goal',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 81,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/medal-yellow-first-red',\n 'shortcuts': [':medal-yellow-first-red:'],\n 'searchTerms': ['medal-yellow-first-red'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EEHiiIalCBKuWDPtNOjjvmEZ-KRkf5dlgmhe5rbLn8aZQl-pNz_paq5UjxNhCrI019TWOQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EEHiiIalCBKuWDPtNOjjvmEZ-KRkf5dlgmhe5rbLn8aZQl-pNz_paq5UjxNhCrI019TWOQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'medal-yellow-first-red',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 82,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-wheelchair-race',\n 'shortcuts': [':person-blue-wheelchair-race:'],\n 'searchTerms': ['person-blue-wheelchair-race'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/ZepxPGk5TwzrKAP9LUkzmKmEkbaF5OttNyybwok6mJENw3p0lxDXkD1X2_rAwGcUM0L-D04=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/ZepxPGk5TwzrKAP9LUkzmKmEkbaF5OttNyybwok6mJENw3p0lxDXkD1X2_rAwGcUM0L-D04=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-wheelchair-race',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 83,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/card-red-penalty',\n 'shortcuts': [':card-red-penalty:'],\n 'searchTerms': ['card-red-penalty'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/uRDUMIeAHnNsaIaShtRkQ6hO0vycbNH_BQT7i3PWetFJb09q88RTjxwzToBy9Cez20D7hA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/uRDUMIeAHnNsaIaShtRkQ6hO0vycbNH_BQT7i3PWetFJb09q88RTjxwzToBy9Cez20D7hA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'card-red-penalty',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 84,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/stopwatch-blue-hand-timer',\n 'shortcuts': [':stopwatch-blue-hand-timer:'],\n 'searchTerms': ['stopwatch-blue-hand-timer'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DCvefDAiskRfACgolTlvV1kMfiZVcG50UrmpnRrg3k0udFWG2Uo9zFMaJrJMSJYwcx6fMgk=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DCvefDAiskRfACgolTlvV1kMfiZVcG50UrmpnRrg3k0udFWG2Uo9zFMaJrJMSJYwcx6fMgk=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'stopwatch-blue-hand-timer',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 85,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-turquoise-speaker-shape',\n 'shortcuts': [':face-turquoise-speaker-shape:'],\n 'searchTerms': ['face-turquoise-speaker-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/WTFFqm70DuMxSC6ezQ5Zs45GaWD85Xwrd9Sullxt54vErPUKb_o0NJQ4kna5m7rvjbRMgr3A=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/WTFFqm70DuMxSC6ezQ5Zs45GaWD85Xwrd9Sullxt54vErPUKb_o0NJQ4kna5m7rvjbRMgr3A=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-speaker-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 86,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/octopus-red-waving',\n 'shortcuts': [':octopus-red-waving:'],\n 'searchTerms': ['octopus-red-waving'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L9Wo5tLT_lRQX36iZO_fJqLJR4U74J77tJ6Dg-QmPmSC_zhVQ-NodMRc9T0ozwvRXRaT43o=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L9Wo5tLT_lRQX36iZO_fJqLJR4U74J77tJ6Dg-QmPmSC_zhVQ-NodMRc9T0ozwvRXRaT43o=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'octopus-red-waving',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 87,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/pillow-turquoise-hot-chocolate',\n 'shortcuts': [':pillow-turquoise-hot-chocolate:'],\n 'searchTerms': ['pillow-turquoise-hot-chocolate'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/cAR4cehRxbn6dPbxKIb-7ShDdWnMxbaBqy2CXzBW4aRL3IqXs3rxG0UdS7IU71OEU7LSd20q=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/cAR4cehRxbn6dPbxKIb-7ShDdWnMxbaBqy2CXzBW4aRL3IqXs3rxG0UdS7IU71OEU7LSd20q=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'pillow-turquoise-hot-chocolate',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 88,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hourglass-purple-sand-orange',\n 'shortcuts': [':hourglass-purple-sand-orange:'],\n 'searchTerms': ['hourglass-purple-sand-orange'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/MFDLjasPt5cuSM_tK5Fnjaz_k08lKHdX_Mf7JkI6awaHriC3rGL7J_wHxyG6PPhJ8CJ6vsQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/MFDLjasPt5cuSM_tK5Fnjaz_k08lKHdX_Mf7JkI6awaHriC3rGL7J_wHxyG6PPhJ8CJ6vsQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hourglass-purple-sand-orange',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 89,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/fish-orange-wide-eyes',\n 'shortcuts': [':fish-orange-wide-eyes:'],\n 'searchTerms': ['fish-orange-wide-eyes'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/iQLKgKs7qL3091VHgVgpaezc62uPewy50G_DoI0dMtVGmQEX5pflZrUxWfYGmRfzfUOOgJs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/iQLKgKs7qL3091VHgVgpaezc62uPewy50G_DoI0dMtVGmQEX5pflZrUxWfYGmRfzfUOOgJs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'fish-orange-wide-eyes',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 90,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/popcorn-yellow-striped-smile',\n 'shortcuts': [':popcorn-yellow-striped-smile:'],\n 'searchTerms': ['popcorn-yellow-striped-smile'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/TW_GktV5uVYviPDtkCRCKRDrGlUc3sJ5OHO81uqdMaaHrIQ5-sXXwJfDI3FKPyv4xtGpOlg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/TW_GktV5uVYviPDtkCRCKRDrGlUc3sJ5OHO81uqdMaaHrIQ5-sXXwJfDI3FKPyv4xtGpOlg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'popcorn-yellow-striped-smile',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 91,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/penguin-blue-waving-tear',\n 'shortcuts': [':penguin-blue-waving-tear:'],\n 'searchTerms': ['penguin-blue-waving-tear'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/p2u7dcfZau4_bMOMtN7Ma8mjHX_43jOjDwITf4U9adT44I-y-PT7ddwPKkfbW6Wx02BTpNoC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/p2u7dcfZau4_bMOMtN7Ma8mjHX_43jOjDwITf4U9adT44I-y-PT7ddwPKkfbW6Wx02BTpNoC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'penguin-blue-waving-tear',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 92,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/clock-turquoise-looking-up',\n 'shortcuts': [':clock-turquoise-looking-up:'],\n 'searchTerms': ['clock-turquoise-looking-up'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/tDnDkDZykkJTrsWEJPlRF30rmbek2wcDcAIymruOvSLTsUFIZHoAiYTRe9OtO-80lDfFGvo=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/tDnDkDZykkJTrsWEJPlRF30rmbek2wcDcAIymruOvSLTsUFIZHoAiYTRe9OtO-80lDfFGvo=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'clock-turquoise-looking-up',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 93,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-red-smiling-live',\n 'shortcuts': [':face-red-smiling-live:'],\n 'searchTerms': ['face-red-smiling-live'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/14Pb--7rVcqnHvM7UlrYnV9Rm4J-uojX1B1kiXYvv1my-eyu77pIoPR5sH28-eNIFyLaQHs=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/14Pb--7rVcqnHvM7UlrYnV9Rm4J-uojX1B1kiXYvv1my-eyu77pIoPR5sH28-eNIFyLaQHs=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-red-smiling-live',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 94,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/hands-yellow-heart-red',\n 'shortcuts': [':hands-yellow-heart-red:'],\n 'searchTerms': ['hands-yellow-heart-red'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/qWSu2zrgOKLKgt_E-XUP9e30aydT5aF3TnNjvfBL55cTu1clP8Eoh5exN3NDPEVPYmasmoA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/qWSu2zrgOKLKgt_E-XUP9e30aydT5aF3TnNjvfBL55cTu1clP8Eoh5exN3NDPEVPYmasmoA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'hands-yellow-heart-red',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 95,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/volcano-green-lava-orange',\n 'shortcuts': [':volcano-green-lava-orange:'],\n 'searchTerms': ['volcano-green-lava-orange'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/_IWOdMxapt6IBY5Cb6LFVkA3J77dGQ7P2fuvYYv1-ahigpVfBvkubOuGLSCyFJ7jvis-X8I=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/_IWOdMxapt6IBY5Cb6LFVkA3J77dGQ7P2fuvYYv1-ahigpVfBvkubOuGLSCyFJ7jvis-X8I=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'volcano-green-lava-orange',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 96,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-waving-speech',\n 'shortcuts': [':person-turquoise-waving-speech:'],\n 'searchTerms': ['person-turquoise-waving-speech'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/gafhCE49PH_9q-PuigZaDdU6zOKD6grfwEh1MM7fYVs7smAS_yhYCBipq8gEiW73E0apKTzi=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/gafhCE49PH_9q-PuigZaDdU6zOKD6grfwEh1MM7fYVs7smAS_yhYCBipq8gEiW73E0apKTzi=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-waving-speech',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 97,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-orange-tv-shape',\n 'shortcuts': [':face-orange-tv-shape:'],\n 'searchTerms': ['face-orange-tv-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/EVK0ik6dL5mngojX9I9Juw4iFh053emP0wcUjZH0whC_LabPq-DZxN4Jg-tpMcEVfJ0QpcJ4=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/EVK0ik6dL5mngojX9I9Juw4iFh053emP0wcUjZH0whC_LabPq-DZxN4Jg-tpMcEVfJ0QpcJ4=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-orange-tv-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 98,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-blue-spam-shape',\n 'shortcuts': [':face-blue-spam-shape:'],\n 'searchTerms': ['face-blue-spam-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/hpwvR5UgJtf0bGkUf8Rn-jTlD6DYZ8FPOFY7rhZZL-JHj_7OPDr7XUOesilRPxlf-aW42Zg=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/hpwvR5UgJtf0bGkUf8Rn-jTlD6DYZ8FPOFY7rhZZL-JHj_7OPDr7XUOesilRPxlf-aW42Zg=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-blue-spam-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 99,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-fuchsia-flower-shape',\n 'shortcuts': [':face-fuchsia-flower-shape:'],\n 'searchTerms': ['face-fuchsia-flower-shape'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/o9kq4LQ0fE_x8yxj29ZeLFZiUFpHpL_k2OivHbjZbttzgQytU49Y8-VRhkOP18jgH1dQNSVz=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/o9kq4LQ0fE_x8yxj29ZeLFZiUFpHpL_k2OivHbjZbttzgQytU49Y8-VRhkOP18jgH1dQNSVz=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-fuchsia-flower-shape',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 100,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-holding-pencil',\n 'shortcuts': [':person-blue-holding-pencil:'],\n 'searchTerms': ['person-blue-holding-pencil'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/TKgph5IHIHL-A3fgkrGzmiNXzxJkibB4QWRcf_kcjIofhwcUK_pWGUFC4xPXoimmne3h8eQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/TKgph5IHIHL-A3fgkrGzmiNXzxJkibB4QWRcf_kcjIofhwcUK_pWGUFC4xPXoimmne3h8eQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-holding-pencil',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 101,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/body-turquoise-yoga-pose',\n 'shortcuts': [':body-turquoise-yoga-pose:'],\n 'searchTerms': ['body-turquoise-yoga-pose'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/GW3otW7CmWpuayb7Ddo0ux5c-OvmPZ2K3vaytJi8bHFjcn-ulT8vcHMNcqVqMp1j2lit2Vw=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/GW3otW7CmWpuayb7Ddo0ux5c-OvmPZ2K3vaytJi8bHFjcn-ulT8vcHMNcqVqMp1j2lit2Vw=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'body-turquoise-yoga-pose',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 102,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/location-yellow-teal-bars',\n 'shortcuts': [':location-yellow-teal-bars:'],\n 'searchTerms': ['location-yellow-teal-bars'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/YgeWJsRspSlAp3BIS5HMmwtpWtMi8DqLg9fH7DwUZaf5kG4yABfE1mObAvjCh0xKX_HoIR23=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/YgeWJsRspSlAp3BIS5HMmwtpWtMi8DqLg9fH7DwUZaf5kG4yABfE1mObAvjCh0xKX_HoIR23=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'location-yellow-teal-bars',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 103,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-writing-headphones',\n 'shortcuts': [':person-turquoise-writing-headphones:'],\n 'searchTerms': ['person-turquoise-writing-headphones'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/DC4KrwzNkVxLZa2_KbKyjZTUyB9oIvH5JuEWAshsMv9Ctz4lEUVK0yX5PaMsTK3gGS-r9w=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/DC4KrwzNkVxLZa2_KbKyjZTUyB9oIvH5JuEWAshsMv9Ctz4lEUVK0yX5PaMsTK3gGS-r9w=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-writing-headphones',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 104,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-turquoise-wizard-wand',\n 'shortcuts': [':person-turquoise-wizard-wand:'],\n 'searchTerms': ['person-turquoise-wizard-wand'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/OiZeNvmELg2PQKbT5UCS0xbmsGbqRBSbaRVSsKnRS9gvJPw7AzPp-3ysVffHFbSMqlWKeQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/OiZeNvmELg2PQKbT5UCS0xbmsGbqRBSbaRVSsKnRS9gvJPw7AzPp-3ysVffHFbSMqlWKeQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-turquoise-wizard-wand',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 105,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-eating-spaghetti',\n 'shortcuts': [':person-blue-eating-spaghetti:'],\n 'searchTerms': ['person-blue-eating-spaghetti'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/AXZ8POmCHoxXuBaRxX6-xlT5M-nJZmO1AeUNo0t4o7xxT2Da2oGy347sHpMM8shtUs7Xxh0=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/AXZ8POmCHoxXuBaRxX6-xlT5M-nJZmO1AeUNo0t4o7xxT2Da2oGy347sHpMM8shtUs7Xxh0=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-eating-spaghetti',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 106,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-turquoise-music-note',\n 'shortcuts': [':face-turquoise-music-note:'],\n 'searchTerms': ['face-turquoise-music-note'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/-K6oRITFKVU8V4FedrqXGkV_vTqUufVCQpBpyLK6w3chF4AS1kzT0JVfJxhtlfIAw5jrNco=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/-K6oRITFKVU8V4FedrqXGkV_vTqUufVCQpBpyLK6w3chF4AS1kzT0JVfJxhtlfIAw5jrNco=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-turquoise-music-note',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 107,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-pink-swaying-hair',\n 'shortcuts': [':person-pink-swaying-hair:'],\n 'searchTerms': ['person-pink-swaying-hair'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L8cwo8hEoVhB1k1TopQaeR7oPTn7Ypn5IOae5NACgQT0E9PNYkmuENzVqS7dk2bYRthNAkQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L8cwo8hEoVhB1k1TopQaeR7oPTn7Ypn5IOae5NACgQT0E9PNYkmuENzVqS7dk2bYRthNAkQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-pink-swaying-hair',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 108,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-blue-speaking-microphone',\n 'shortcuts': [':person-blue-speaking-microphone:'],\n 'searchTerms': ['person-blue-speaking-microphone'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/FMaw3drKKGyc6dk3DvtHbkJ1Ki2uD0FLqSIiFDyuChc1lWcA9leahX3mCFMBIWviN2o8eyc=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/FMaw3drKKGyc6dk3DvtHbkJ1Ki2uD0FLqSIiFDyuChc1lWcA9leahX3mCFMBIWviN2o8eyc=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-blue-speaking-microphone',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 109,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/rocket-red-countdown-liftoff',\n 'shortcuts': [':rocket-red-countdown-liftoff:'],\n 'searchTerms': ['rocket-red-countdown-liftoff'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/lQZFYAeWe5-SJ_fz6dCAFYz1MjBnEek8DvioGxhlj395UFTSSHqYAmfhJN2i0rz3fDD5DQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/lQZFYAeWe5-SJ_fz6dCAFYz1MjBnEek8DvioGxhlj395UFTSSHqYAmfhJN2i0rz3fDD5DQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'rocket-red-countdown-liftoff',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 110,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-purple-rain-drops',\n 'shortcuts': [':face-purple-rain-drops:'],\n 'searchTerms': ['face-purple-rain-drops'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/woHW5Jl2RD0qxijnl_4vx4ZhP0Zp65D4Ve1DM_HrwJW-Kh6bQZoRjesGnEwjde8F4LynrQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/woHW5Jl2RD0qxijnl_4vx4ZhP0Zp65D4Ve1DM_HrwJW-Kh6bQZoRjesGnEwjde8F4LynrQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-rain-drops',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 111,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-pink-drinking-tea',\n 'shortcuts': [':face-pink-drinking-tea:'],\n 'searchTerms': ['face-pink-drinking-tea'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/WRLIgKpnClgYOZyAwnqP-Edrdxu6_N19qa8gsB9P_6snZJYIMu5YBJX8dlM81YG6H307KA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/WRLIgKpnClgYOZyAwnqP-Edrdxu6_N19qa8gsB9P_6snZJYIMu5YBJX8dlM81YG6H307KA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-pink-drinking-tea',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 112,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/person-purple-stage-event',\n 'shortcuts': [':person-purple-stage-event:'],\n 'searchTerms': ['person-purple-stage-event'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/YeVVscOyRcDJAhKo2bMwMz_B6127_7lojqafTZECTR9NSEunYO5zEi7R7RqxBD7LYLxfNnXe=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/YeVVscOyRcDJAhKo2bMwMz_B6127_7lojqafTZECTR9NSEunYO5zEi7R7RqxBD7LYLxfNnXe=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'person-purple-stage-event',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 113,\n },\n {\n 'emojiId': 'UCkszU2WH9gy1mb0dV-11UJg/face-purple-open-box',\n 'shortcuts': [':face-purple-open-box:'],\n 'searchTerms': ['face-purple-open-box'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7lJM2sLrozPtNLagPTcN0xlcStWpAuZEmO2f4Ej5kYgSp3woGdq3tWFrTH30S3mD2PyjlQ=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7lJM2sLrozPtNLagPTcN0xlcStWpAuZEmO2f4Ej5kYgSp3woGdq3tWFrTH30S3mD2PyjlQ=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'face-purple-open-box',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 114,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/COLRg9qOwdQCFce-qgodrbsLaA',\n 'shortcuts': [':awesome:'],\n 'searchTerms': ['awesome'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/xqqFxk7nC5nYnjy0oiSPpeWX4yu4I-ysb3QJMOuVml8dHWz82FvF8bhGVjlosZRIG_XxHA=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/xqqFxk7nC5nYnjy0oiSPpeWX4yu4I-ysb3QJMOuVml8dHWz82FvF8bhGVjlosZRIG_XxHA=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'awesome',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 115,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CMKC7uKOwdQCFce-qgodqbsLaA',\n 'shortcuts': [':gar:'],\n 'searchTerms': ['gar'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/pxQTF9D-uxlSIgoopRcS8zAZnBBEPp2R9bwo5qIc3kc7PF2k18so72-ohINWPa6OvWudEcsC=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/pxQTF9D-uxlSIgoopRcS8zAZnBBEPp2R9bwo5qIc3kc7PF2k18so72-ohINWPa6OvWudEcsC=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'gar',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 116,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CJiQ8uiOwdQCFcx9qgodysAOHg',\n 'shortcuts': [':jakepeter:'],\n 'searchTerms': ['jakepeter'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/iq0g14tKRcLwmfdpHULRMeUGfpWUlUyJWr0adf1K1-dStgPOguOe8eo5bKrxmCqIOlu-J18=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/iq0g14tKRcLwmfdpHULRMeUGfpWUlUyJWr0adf1K1-dStgPOguOe8eo5bKrxmCqIOlu-J18=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'jakepeter',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 117,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CI3h3uDJitgCFdARTgodejsFWg',\n 'shortcuts': [':wormRedBlue:'],\n 'searchTerms': ['wormRedBlue'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/QrjYSGexvrRfCVpWrgctyB3shVRAgKmXtctM1vUnA78taji1zYNWwrHs1GKBpdpG5A6yK_k=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/QrjYSGexvrRfCVpWrgctyB3shVRAgKmXtctM1vUnA78taji1zYNWwrHs1GKBpdpG5A6yK_k=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormRedBlue',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 118,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CI69oYTKitgCFdaPTgodsHsP5g',\n 'shortcuts': [':wormOrangeGreen:'],\n 'searchTerms': ['wormOrangeGreen'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/S-L8lYTuP13Ds9TJZ2UlxdjDiwNRFPnj0o4x6DAecyJLXDdQ941upYRhxalbjzpJn5USU_k=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/S-L8lYTuP13Ds9TJZ2UlxdjDiwNRFPnj0o4x6DAecyJLXDdQ941upYRhxalbjzpJn5USU_k=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormOrangeGreen',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 119,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CKzQr47KitgCFdCITgodq6EJZg',\n 'shortcuts': [':wormYellowRed:'],\n 'searchTerms': ['wormYellowRed'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/L9TQqjca5x7TE8ZB-ifFyU51xWXArz47rJFU7Pg2KgWMut5th9qsU-pCu1zIF98szO5wNXE=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/L9TQqjca5x7TE8ZB-ifFyU51xWXArz47rJFU7Pg2KgWMut5th9qsU-pCu1zIF98szO5wNXE=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'wormYellowRed',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 120,\n },\n {\n 'emojiId': 'UCzC5CNksIBaiT-NdMJjJNOQ/CPGD8Iu8kN4CFREChAod9OkLmg',\n 'shortcuts': [':ytg:'],\n 'searchTerms': ['ytg'],\n 'image': {\n 'thumbnails': [\n {\n 'url': 'https://yt3.ggpht.com/7PgbidnZLTC-38qeoqYensfXg7s7EC1Dudv9q9l8aIjqLgnfvpfhnEBH_7toCmVmqhIe4I45=w24-h24-c-k-nd',\n 'width': 24,\n 'height': 24,\n },\n {\n 'url': 'https://yt3.ggpht.com/7PgbidnZLTC-38qeoqYensfXg7s7EC1Dudv9q9l8aIjqLgnfvpfhnEBH_7toCmVmqhIe4I45=w48-h48-c-k-nd',\n 'width': 48,\n 'height': 48,\n },\n ],\n 'accessibility': {\n 'accessibilityData': {\n 'label': 'ytg',\n },\n },\n },\n 'isCustomEmoji': true,\n 'index': 121,\n },\n];\n\nexport default youtube_emotes;\n","import {\n avatars as A,\n badges as B,\n css_color_names as CSS,\n emotes as E,\n items as I,\n messages as M,\n names as N,\n tiers as T,\n tts as TTS,\n youtube_emotes as Y,\n} from './collection/index.js';\n\nexport namespace Data {\n export const avatars = A;\n export const badges = B;\n export const css_color_names = CSS;\n export const emotes = E;\n export const items = I;\n export const messages = M;\n export const names = N;\n export const tiers = T;\n export const tts = TTS;\n export const youtube_emotes = Y;\n}\n","import { ClientEvents, Emote, Provider, StreamElements, Twitch } from '../types/index.js';\nimport { findClosestColorName, parseToRGBA, rgbaToHex, rgbToHsl } from '../utils/color.js';\nimport { Data } from '../data/index.js';\n\nexport namespace Helper {\n export namespace number {\n /**\n * Translate number to words\n * @param num - Number to translate\n * @param type - Translation type\n * @returns - Number in words\n * @example\n * ```javascript\n * const cardinal = Simulation.number.translate(42, 'cardinal');\n * console.log(cardinal); // \"forty-two\"\n * ```\n */\n export function translate(\n num: number,\n type: 'cardinal' | 'ordinal' | 'suffix' = 'cardinal',\n ): string {\n const CARDINALS = {\n single: ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'],\n tens: [\n 'ten',\n 'eleven',\n 'twelve',\n 'thirteen',\n 'fourteen',\n 'fifteen',\n 'sixteen',\n 'seventeen',\n 'eighteen',\n 'nineteen',\n ],\n decades: ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'],\n };\n const ORDINALS = {\n single: [\n 'zeroth',\n 'first',\n 'second',\n 'third',\n 'fourth',\n 'fifth',\n 'sixth',\n 'seventh',\n 'eighth',\n 'ninth',\n ],\n tens: [\n 'tenth',\n 'eleventh',\n 'twelfth',\n 'thirteenth',\n 'fourteenth',\n 'fifteenth',\n 'sixteenth',\n 'seventeenth',\n 'eighteenth',\n 'nineteenth',\n ],\n decades: [\n 'twentieth',\n 'thirtieth',\n 'fortieth',\n 'fiftieth',\n 'sixtieth',\n 'seventieth',\n 'eightieth',\n 'ninetieth',\n ],\n };\n const SUFFIXES = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'];\n const SCALES = [\n '',\n 'thousand',\n 'million',\n 'billion',\n 'trillion',\n 'quadrillion',\n 'quintillion',\n ];\n const SCALES_ORD = SCALES.map((s) => (s ? `${s}th` : ''));\n\n num = Math.abs(Math.floor(num));\n\n if (type === 'suffix') {\n const rem100 = num % 100;\n if (rem100 >= 11 && rem100 <= 13) return `${num}th`;\n const rem10 = num % 10;\n return `${num}${SUFFIXES[rem10]}`;\n }\n\n function below100(n: number, kind: 'cardinal' | 'ordinal'): string {\n if (n < 10) return kind === 'ordinal' ? ORDINALS.single[n] : CARDINALS.single[n];\n if (n < 20) return kind === 'ordinal' ? ORDINALS.tens[n - 10] : CARDINALS.tens[n - 10];\n const decade = Math.floor(n / 10);\n const single = n % 10;\n if (single === 0)\n return kind === 'ordinal' ? ORDINALS.decades[decade - 2] : CARDINALS.decades[decade - 2];\n const tensPart = CARDINALS.decades[decade - 2];\n const unitPart = kind === 'ordinal' ? ORDINALS.single[single] : CARDINALS.single[single];\n return `${tensPart}-${unitPart}`;\n }\n\n function below1000(n: number, kind: 'cardinal' | 'ordinal'): string {\n if (n === 0) return kind === 'ordinal' ? ORDINALS.single[0] : CARDINALS.single[0];\n const hundreds = Math.floor(n / 100);\n const rest = n % 100;\n const parts: string[] = [];\n if (hundreds > 0) {\n if (kind === 'ordinal' && rest === 0)\n parts.push(`${CARDINALS.single[hundreds]} hundredth`);\n else parts.push(`${CARDINALS.single[hundreds]} hundred`);\n }\n if (rest > 0) parts.push(below100(rest, kind));\n return parts.join(' ');\n }\n\n if (num < 1000) return below1000(num, type);\n\n const groups: number[] = [];\n let n = num;\n while (n > 0) {\n groups.push(n % 1000);\n n = Math.floor(n / 1000);\n }\n\n let lastNonZeroIndex = -1;\n for (let i = 0; i < groups.length; i++) if (groups[i] !== 0) lastNonZeroIndex = i;\n\n const parts: string[] = [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const g = groups[i];\n if (g === 0) continue;\n const scale = SCALES[i];\n\n if (type === 'cardinal') {\n let segment = below1000(g, 'cardinal');\n if (scale) segment += ` ${scale}`;\n parts.push(segment);\n } else {\n const isLastNonZero = i === lastNonZeroIndex;\n if (isLastNonZero) {\n if (i > 0) {\n const segment = below1000(g, 'cardinal');\n const ordScale = SCALES_ORD[i];\n parts.push(segment ? `${segment} ${ordScale}` : ordScale);\n } else {\n const segment = below1000(g, 'ordinal');\n parts.push(segment);\n }\n } else {\n let segment = below1000(g, 'cardinal');\n if (scale) segment += ` ${scale}`;\n parts.push(segment);\n }\n }\n }\n\n return parts.join(', ');\n }\n\n /**\n * Balances a number within a specified range\n * @param amount - Number to balance\n * @param min - Minimum value\n * @param max - Maximum value\n * @param decimals - Number of decimal places to round to (default is 0)\n * @returns - Balanced number\n * @example\n * ```javascript\n * const balancedValue = Simulation.number.balance(150, 0, 100);\n * console.log(balancedValue); // 100\n * ```\n */\n export function balance(\n amount: number,\n min: number = 0,\n max: number = 100,\n decimals: number = 0,\n ): number {\n const result = Math.min(Math.max(amount, min), max);\n\n return round(result, decimals);\n }\n\n /**\n * Rounds a number to a specified number of decimal places\n * @param value - Number to round\n * @param decimals - Number of decimal places (default is 2)\n * @returns Rounded number\n * @example\n * ```javascript\n * const roundedValue = Simulation.number.round(3.14159, 3);\n * console.log(roundedValue); // 3.142\n * ```\n */\n export function round(value: number, decimals: number = 2): number {\n const factor = Math.pow(10, decimals);\n\n return Math.round(value * factor) / factor;\n }\n\n /**\n * Generate random number\n * @param min - Minimum value\n * @param max - Maximum value\n * @param float - Number of decimal places (0 for integer)\n * @returns - Random number\n * @example\n * ```javascript\n * const intNumber = number.random(1, 10);\n * console.log(intNumber); // e.g. 7\n *\n * const floatNumber = number.random(1, 10, 2);\n * console.log(floatNumber); // e.g. 3.14\n * ```\n */\n export function number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n }\n }\n\n export namespace element {\n export interface ScaleOptions<T extends HTMLElement> {\n /**\n * The parent element to use for scaling calculations. If not provided, the element's parent will be used.\n */\n parent?: HTMLElement;\n /**\n * The preferred dimension to base the scaling on. Can be 'width', 'height', or 'auto' (default).\n */\n prefer?: 'width' | 'height' | 'auto';\n /**\n * The minimum percentage of the parent size to scale to. Default is 0.\n */\n min?: number;\n /**\n * The maximum percentage of the parent size to scale to. Default is 1 (100%).\n */\n max?: number;\n /**\n * A callback function that is called after scaling is applied.\n * @param this - The HTML element being scaled.\n * @param number - The scale factor applied to the element.\n * @param element - The HTML element being scaled.\n * @returns void\n */\n apply?: (this: T, number: number, element: T) => void;\n }\n\n export type FitTextOptions = {\n minFontSize?: number;\n maxFontSize?: number;\n parent?: HTMLElement;\n };\n\n /**\n * Merges outer span styles with inner span styles in the provided HTML string.\n * @param outerStyle - The style string to be applied to the outer span.\n * @param innerHTML - The inner HTML string which may contain a span with its own styles.\n * @returns A new HTML string with merged styles applied to a single span.\n * @example\n * ```javascript\n * const result = mergeSpanStyles(\"color: red; font-weight: bold;\", '<span style=\"font-size: 14px;\">Hello World</span>');\n * console.log(result); // Output: '<span style=\"font-size: 14px; color: red; font-weight: bold;\">Hello World</span>'\n * ```\n */\n export function mergeSpanStyles(\n outerStyle: string,\n innerHTML: string,\n className?: string,\n ): string {\n const match = innerHTML.match(/^<span(?: class=\"[^\"]*\")? style=\"([^\"]*)\">(.*)<\\/span>$/s);\n\n if (match) {\n const innerStyle = match[1];\n const content = match[2];\n const innerClass = match[0].match(/class=\"([^\"]*)\"/)?.[1] || '';\n\n let mergedStyle = [innerStyle, outerStyle]\n .filter((a) => a.length)\n .map((s) => {\n if (s.endsWith(';')) return s.slice(0, -1);\n else return s;\n })\n .join('; ')\n .replace(/\\s*;\\s*/g, '; ')\n .trim();\n\n if (!mergedStyle.endsWith(';')) mergedStyle += ';';\n\n return `<span${innerClass ? ` class=\"${innerClass} ${className ?? ''}\"` : ''}${mergedStyle ? ` style=\"${mergedStyle}\"` : ''}>${content}</span>`;\n } else {\n if (outerStyle && outerStyle.length && !outerStyle.endsWith(';')) outerStyle += ';';\n\n return `<span${className ? ` class=\"${className}\"` : ''}${outerStyle ? ` style=\"${outerStyle}\"` : ''}>${innerHTML}</span>`;\n }\n }\n\n /**\n * Scales an HTML element to fit within its parent element based on specified minimum and maximum scale factors.\n * @param element - The HTML element to be scaled.\n * @param min - Minimum scale factor (default is 0).\n * @param max - Maximum scale factor (default is 1).\n * @param options - Optional settings for scaling.\n * @returns - An object containing the new width, height, and scale factor, or void if not applied.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * scale(element, 0.5, 1, { return: false });\n * ```\n */\n export function scale(\n element: HTMLElement,\n min: number = 0,\n max: number = 1,\n options?: { return: boolean; parent: HTMLElement; base: 'width' | 'height' },\n ): { width: number; height: number; scale: number } | void {\n const { return: returnOnly = false, parent: customParent, base } = options || {};\n\n const parent = customParent || element.parentElement || document.body;\n\n if (!parent) {\n throw new Error('No parent element found for scaling');\n }\n\n const parentRect = parent.getBoundingClientRect();\n const elementWidth = element.offsetWidth;\n const elementHeight = element.offsetHeight;\n\n if (elementWidth === 0 || elementHeight === 0) {\n throw new Error('Element has zero width or height, cannot scale');\n }\n\n // Calculate scales for both dimensions\n const scaleX = (parentRect.width * max) / elementWidth;\n const scaleY = (parentRect.height * max) / elementHeight;\n\n // Determine final scale based on base option or use smaller scale\n let finalScale =\n base === 'width' ? scaleX : base === 'height' ? scaleY : Math.min(scaleX, scaleY);\n\n // Apply minimum constraint if needed\n if (min > 0) {\n const minScaleX = (parentRect.width * min) / elementWidth;\n const minScaleY = (parentRect.height * min) / elementHeight;\n const minScale = Math.max(minScaleX, minScaleY);\n\n finalScale = Math.max(minScale, finalScale);\n }\n\n const result = {\n width: elementWidth * finalScale,\n height: elementHeight * finalScale,\n scale: finalScale,\n };\n\n if (returnOnly) {\n return result;\n }\n\n element.style.transform = `scale(${finalScale})`;\n element.style.transformOrigin = 'center center';\n\n return result;\n }\n\n /**\n * Scales an HTML element to fit within its parent element based on specified options.\n * @param element - The HTML element to be scaled.\n * @param options - Optional settings for scaling.\n * @returns The scale factor applied to the element.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * const scaleFactor scalev2(element, {\n * min: 0.5,\n * max: 1,\n * prefer: 'width',\n * apply: (scale, el) => el.style.transform = `scale(${scale})`\n * });\n * console.log(`Element scaled by a factor of ${scaleFactor}`);\n * ```\n */\n export function scalev2<T extends HTMLElement>(\n element: T,\n options: ScaleOptions<T> = {},\n ): number {\n const {\n parent = element.parentElement,\n prefer = 'auto',\n min = 0,\n max = 1,\n apply = () => {},\n } = options;\n\n if (!parent) {\n throw new Error('No parent element found for scaling');\n }\n\n const parentClientRect = parent.getBoundingClientRect();\n const elementClientRect = element.getBoundingClientRect();\n\n const parentWidth = parentClientRect.width;\n const parentHeight = parentClientRect.height;\n\n const elementWidth = elementClientRect.width;\n const elementHeight = elementClientRect.height;\n\n let scaleXmin = (parentWidth * min) / elementWidth;\n let scaleYmin = (parentHeight * min) / elementHeight;\n\n let scaleXmax = (parentWidth * max) / elementWidth;\n let scaleYmax = (parentHeight * max) / elementHeight;\n\n let scaleValue = Math.min(scaleXmax, scaleYmax);\n\n const minScale = Math.max(scaleXmin, scaleYmin);\n scaleValue = Math.max(scaleValue, minScale);\n\n const finalScaleX = elementWidth * scaleValue;\n const finalScaleY = elementHeight * scaleValue;\n\n if (prefer === 'width') {\n scaleValue = Math.max(scaleXmin, Math.min(scaleXmax, parentWidth / elementWidth));\n } else if (prefer === 'height') {\n scaleValue = Math.max(scaleYmin, Math.min(scaleYmax, parentHeight / elementHeight));\n } else {\n if (finalScaleX > parentWidth) {\n scaleValue = Math.max(scaleXmin, Math.min(scaleXmax, parentWidth / elementWidth));\n } else if (finalScaleY > parentHeight) {\n scaleValue = Math.max(scaleYmin, Math.min(scaleYmax, parentHeight / elementHeight));\n }\n }\n\n apply.apply(element, [scaleValue, element]);\n\n return scaleValue;\n }\n\n /**\n * Fits the text within the parent element by adjusting the font size.\n * @param element - The HTML element containing the text to be fitted.\n * @param compressor - A multiplier to adjust the fitting sensitivity (default is 1).\n * @param options - Optional settings for fitting text.\n * @returns The HTML element with adjusted font size.\n * @example\n * ```javascript\n * const element = document.getElementById('myTextElement');\n * fitText(element, 1, { minFontSize: 12, maxFontSize: 36 });\n * console.log(`Adjusted font size: ${element.style.fontSize}`);\n * ```\n */\n export function fitText(\n element: HTMLElement,\n compressor: number = 1,\n options: FitTextOptions = {},\n ) {\n const fontSize = parseFloat(getComputedStyle(element).getPropertyValue('font-size'));\n\n const settings = {\n minFontSize: options?.minFontSize ?? 0,\n maxFontSize: options?.maxFontSize ?? fontSize,\n };\n\n const parent = options?.parent || element.parentElement;\n\n if (!parent) {\n throw new Error('No parent element found for fitting text');\n }\n\n const parentWidth = parent.clientWidth * compressor;\n const elWidth = element.offsetWidth;\n\n const ratio = parentWidth / elWidth;\n const value = fontSize * ratio;\n\n const result = number.balance(value, settings.minFontSize, settings.maxFontSize);\n\n element.style.fontSize = result + 'px';\n\n return element;\n }\n\n /**\n * Wraps formatted HTML text with containers and splits characters into indexed spans.\n * Adds 'container' class and data-index to all parent elements, and wraps each character in a span with class 'char' and data-index.\n * @param htmlString - The input HTML string containing formatted text elements (span, strong, em, etc).\n * @param startIndex - The starting index for the data-index attribute (default is 0).\n * @returns - A new HTML string with containers and character-level indexing.\n * @example\n * ```javascript\n * const result = splitTextToChars('<span>TesTe</span> <strong>bold</strong>', 0);\n * console.log(result);\n * // Output: '<span class=\"container\" data-index=\"0\"><span class=\"char\" data-index=\"0\">T</span><span class=\"char\" data-index=\"1\">e</span>...'\n * ```\n */\n export function splitTextToChars(htmlString: string, startIndex: number = 0): string {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, 'text/html');\n\n let charIndex = startIndex;\n\n function processNode(node: Node): Node | DocumentFragment {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || '';\n\n // Split only non-whitespace or preserve whitespace if it's significant\n const chars = text.split('').map((char, index) => {\n const span = document.createElement('span');\n\n span.classList.add('char');\n span.dataset.index = String(charIndex);\n span.dataset.exclusivityIndex = String(charIndex);\n span.style.setProperty('--char-index', String(charIndex));\n span.style.setProperty('--exclusivity-index', String(charIndex));\n\n if (char === ' ' || char === '\\n' || char === '\\t') {\n span.style.whiteSpace = 'pre-wrap';\n }\n\n span.textContent = char;\n\n charIndex++;\n\n return span;\n });\n\n const fragment = document.createDocumentFragment();\n chars.forEach((char) => fragment.appendChild(char));\n\n return fragment;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clone = node.cloneNode(false) as HTMLElement;\n\n // Add container class and data-index to parent elements\n clone.classList.add('container');\n clone.dataset.index = String(charIndex);\n clone.style.setProperty('--char-index', String(charIndex));\n\n // Process child nodes\n node.childNodes.forEach((child) => {\n const processed = processNode(child);\n\n if (processed instanceof DocumentFragment) {\n clone.appendChild(processed);\n } else if (processed instanceof Node) {\n clone.appendChild(processed);\n }\n });\n\n return clone;\n }\n\n return node.cloneNode(true);\n }\n\n const body = doc.body;\n const processed = document.createElement('div');\n\n body.childNodes.forEach((node) => {\n // Skip empty text nodes at the root level\n if (node.nodeType === Node.TEXT_NODE && !node.textContent?.trim()) {\n return;\n }\n\n const result = processNode(node);\n\n if (result instanceof DocumentFragment) {\n processed.appendChild(result);\n } else if (result instanceof Node) {\n processed.appendChild(result);\n }\n });\n\n // Join root-level text nodes and elements while preserving spacing\n let html = '';\n Array.from(processed.childNodes).forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n } else {\n html += (node as HTMLElement).outerHTML;\n }\n });\n\n return html;\n }\n }\n\n export namespace object {\n /**\n * Flattens a nested object into a single-level object with dot-separated keys.\n * @param obj - The nested object to be flattened.\n * @param prefix - The prefix to be added to each key (used for recursion).\n * @returns A flattened object with dot-separated keys.\n * @example\n * ```javascript\n * const nestedObj = { a: { b: 1, c: { d: 2 } }, e: [3, 4] };\n * const flatObj = flatten(nestedObj);\n * console.log(flatObj);\n * // Output: { 'a.b': '1', 'a.c.d': '2', 'e:0': '3', 'e:1': '4' }\n * ```\n */\n export function flatten(\n obj: Record<string, any>,\n stringify: boolean = true,\n prefix: string = '',\n ): Record<string, typeof stringify extends true ? string : string | number | boolean> {\n const result = {} as Record<\n string,\n typeof stringify extends true ? string : string | number | boolean\n >;\n\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n const value = obj[key];\n const path = prefix ? `${prefix}.${key}` : key;\n\n // Handle null and undefined\n if (value === null || value === undefined) {\n result[path] = String(value);\n\n continue;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n result[path] = 'NaN';\n\n continue;\n }\n\n if (typeof value === 'number' && !isNaN(value)) {\n result[path] = stringify ? String(value) : value;\n\n continue;\n }\n\n // Handle Date objects\n if (value instanceof Date) {\n result[path] = value.toISOString();\n\n continue;\n }\n\n // Handle Map objects\n if (value instanceof Map) {\n value.forEach((v, k) => {\n result[`${path}.${k}`] = JSON.stringify(v);\n });\n\n continue;\n }\n\n // Handle Array objects\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n const itemPath = `${path}:${i}`;\n\n if (typeof v === 'object') {\n Object.assign(result, flatten(v, stringify, itemPath));\n } else {\n result[itemPath] = stringify ? String(v) : v;\n }\n });\n\n continue;\n }\n\n // Handle nested objects\n if (typeof value === 'object') {\n Object.assign(result, flatten(value, stringify, path));\n continue;\n }\n\n // Handle primitive values (string, number, boolean, etc.)\n result[path] = String(value);\n }\n\n return result;\n }\n\n /**\n * Returns the entries of an object as an array of key-value pairs, with proper typing.\n * @param obj - The object to retrieve entries from.\n * @returns An array of key-value pairs from the object, typed as an array of tuples with key and value types.\n */\n export function entries<K extends string, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][];\n }\n\n /**\n * Returns the values of an object as an array, with proper typing.\n * @param obj - The object to retrieve values from.\n * @returns An array of values from the object, typed as an array of the value type.\n */\n export function values<K extends string, V>(obj: Record<K, V>): V[] {\n return Object.values(obj) as V[];\n }\n\n /**\n * Returns the keys of an object as an array of strings, with proper typing.\n * @param obj - The object to retrieve keys from.\n * @returns An array of keys from the object, typed as an array of strings.\n */\n export function keys<K extends string, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[];\n }\n }\n\n export namespace message {\n export type BadgeOptions =\n | Twitch.roles[]\n | Twitch.roles\n | `${Twitch.roles}, ${Twitch.roles}`\n | `${Twitch.roles}, ${Twitch.roles}, ${Twitch.roles}`;\n\n export type TwitchResult = {\n keys: Twitch.roles[];\n badges: Twitch.badge[];\n };\n\n export type YouTubeResult = {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n };\n\n /**\n * Finds emotes in a given text.\n * @param text - The text to search for emotes.\n * @param emotes - An array of emotes to search for. Defaults to Local data emotes.\n * @returns An array of emotes found in the text with their positions.\n */\n export function findEmotesInText(text: string, emotes: Emote[] = Data.emotes): Emote[] {\n const result: Emote[] = [];\n\n emotes.forEach((emote) => {\n const name = emote.name;\n\n let searchIndex = 0;\n let start = 0;\n\n while (searchIndex < text.length) {\n const index = text.indexOf(name, start);\n\n if (index === -1) break;\n\n const before = index > 0 ? text[index - 1] : ' ';\n const after = index + name.length < text.length ? text[index + name.length] : ' ';\n\n if (/\\s/.test(before) && /\\s/.test(after)) {\n result.push({ ...emote, start: index, end: index + name.length });\n }\n\n start = index + 1;\n }\n });\n\n return result.sort((a, b) => a.start - b.start);\n }\n\n /**\n * Replaces emotes in the text with corresponding HTML image tags.\n * @param text - The text containing emotes.\n * @param emotes - An array of emotes with their positions in the text.\n * @returns The text with emotes replaced by HTML image tags.\n */\n export function replaceEmotesWithHTML(text: string, emotes: Emote[]): string {\n if (!emotes.length) return text;\n\n let result = '';\n let index = 0;\n\n emotes.forEach((emote) => {\n result += text.substring(index, emote.start);\n\n const emotesArray = Array.from({ ...emote.urls, length: 5 })\n .slice(1)\n .reverse()\n .filter(Boolean);\n\n const imgUrl = emotesArray[0] || emote.urls['1'];\n\n result += `<img src=\"${imgUrl}\" alt=\"${emote.name}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`;\n\n index = emote.end;\n });\n\n result += text.substring(index);\n\n return result;\n }\n\n /**\n * Replaces YouTube emotes in the text with corresponding HTML image tags.\n * @param text - The text containing YouTube emotes.\n * @param emotes - An array of YouTube emotes. Defaults to Local data YouTube emotes.\n * @returns The text with YouTube emotes replaced by HTML image tags.\n */\n export function replaceYoutubeEmotesWithHTML(\n text: string,\n emotes = Data.youtube_emotes,\n ): string {\n const emoteCodesInside = Array.from(text.matchAll(/:(.*?):/gim), (x) => x[0]);\n\n emoteCodesInside.forEach((code) => {\n const emote = emotes.find(\n (e) => e.shortcuts.includes(code) || e.searchTerms.includes(code.slice(1, -1)),\n );\n\n if (emote) {\n const url = emote.image.thumbnails.at(-1)?.url;\n const alt = emote.image.accessibility.accessibilityData.label;\n\n if (url) {\n text = text.replace(\n code,\n `<img src=\"${url}\" alt=\"${alt}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`,\n );\n }\n }\n });\n\n return text;\n }\n\n /**\n * Generates badge data based on the provided badges and platform.\n * @param badges - The badges to generate. Can be an array or a comma-separated string.\n * @param provider - The platform provider ('twitch' or 'youtube'). Defaults to 'twitch'.\n * @returns A promise that resolves to the generated badge data.\n * @example\n * ```javascript\n * // Generate Twitch badges\n * const twitchBadges = await generateBadges(['broadcaster', 'moderator'], 'twitch');\n * // Generate YouTube badges\n * const youtubeBadges = await generateBadges('sponsor, moderator', 'youtube');\n * ```\n */\n export async function generateBadges<T extends Provider>(\n badges: BadgeOptions = [],\n provider: T,\n ): Promise<T extends 'twitch' ? TwitchResult : YouTubeResult> {\n if (!Array.isArray(badges) && typeof badges === 'string') {\n badges = badges.split(',').map((e) => e.trim()) as Twitch.roles[];\n }\n\n if (!badges || !badges.length) {\n var max = random.number(1, 3);\n\n for await (const _ of Array.from({ length: max }, () => '')) {\n var current = random.array(Object.keys(Data.badges))[0] as Twitch.roles;\n\n if (!badges.includes(current) && Array.isArray(badges)) {\n badges.push(current);\n } else {\n badges = [current];\n }\n }\n }\n\n var result;\n\n switch (provider) {\n case 'twitch': {\n result = {\n keys: Array.from(badges).filter((e) => e in Data.badges) as Twitch.roles[],\n badges: Array.from(badges)\n .slice(0, 3)\n .map((badge) => Data.badges[badge])\n .filter(Boolean) as Twitch.badge[],\n };\n\n break;\n }\n\n case 'youtube': {\n var details = {\n 'verified': { isVerified: true },\n 'broadcaster': { isChatOwner: true },\n 'host': { isChatOwner: true },\n 'sponsor': { isChatSponsor: true },\n 'subscriber': { isChatSponsor: true },\n 'moderator': { isChatModerator: true },\n };\n\n result = Object.entries(badges).reduce(\n (acc, [key]) => {\n if (key in details) {\n Object.assign(acc, details[key as keyof typeof details]);\n }\n\n return acc;\n },\n {\n isVerified: false,\n isChatOwner: false,\n isChatSponsor: false,\n isChatModerator: false,\n } as {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n },\n );\n\n break;\n }\n }\n\n return result as T extends 'twitch' ? TwitchResult : YouTubeResult;\n }\n }\n\n export namespace event {\n /**\n * Parses the provider information from the event detail object.\n * @param detail - The event detail object received from the StreamElements event.\n * @returns An object containing the provider and the original event data.\n */\n export function parseProvider(detail: StreamElements.Event.onEventReceived) {\n var provider: Provider =\n // @ts-ignore\n detail.event?.provider ||\n // @ts-ignore\n detail.event?.service ||\n // @ts-ignore\n detail.event?.data?.provider ||\n // @ts-ignore\n window.client.details.provider;\n\n const actAsStreamElements = [\n 'kvstore:update',\n 'bot:counter',\n 'alertService:toggleSound',\n 'tip-latest',\n 'event:test',\n 'event:skip',\n ] as StreamElements.Event.onEventReceived['listener'][];\n\n if (actAsStreamElements.some((l) => l === detail.listener)) provider = 'streamelements';\n\n const received = { provider: provider, data: detail } as ClientEvents;\n\n return received;\n }\n }\n\n export namespace string {\n export type Modifier = (\n value: string,\n param: string | null | undefined,\n values: { amount?: number; count?: number },\n ) => string;\n\n // Global presets that can be configured and reused across templates.\n // Each preset value is a modifier group string, e.g. \"BOLD,COLOR:#ff0056\".\n export const PRESETS: Record<string, string> = {};\n\n /**\n * Replaces occurrences in a string based on a pattern with the result of an asynchronous callback function.\n * @param string - The input string to perform replacements on.\n * @param pattern - The pattern to match in the string (can be a string or a regular expression).\n * @param callback - An asynchronous callback function that takes the matched substring and any captured groups as arguments and returns the replacement string.\n * @returns A promise that resolves to the modified string with replacements applied.\n * @example\n * ```javascript\n * const result = await string.replace(\"Hello World\", /World/, async (match) => {\n * return await fetchSomeData(match); // Assume this function fetches data asynchronously\n * });\n * console.log(result); // Output will depend on the fetched data\n * ```\n */\n export async function replace(\n string: string,\n pattern: string,\n callback: (match: string, ...groups: string[]) => Promise<string> | string,\n ): Promise<string> {\n const promises: Array<Promise<string>> = [];\n\n string.replace(pattern, (match: string, ...groups: string[]) => {\n const promise = typeof callback === 'function' ? callback(match, ...groups) : match;\n\n promises.push(Promise.resolve(promise));\n\n return match;\n });\n\n const replacements = await Promise.all(promises);\n\n return string.replace(pattern, () => replacements.shift() ?? '');\n }\n\n /**\n * Capitalizes the first letter of a given string.\n * @param string - The input string to be capitalized.\n * @returns The capitalized string.\n * @example\n * ```javascript\n * const result = string.capitalize(\"hello world\");\n * console.log(result); // Output: \"Hello world\"\n * ```\n */\n export function capitalize(string: string): Capitalize<string> {\n return (string.charAt(0).toUpperCase() + string.slice(1)) as Capitalize<string>;\n }\n\n /**\n * Composes a template string by replacing placeholders with corresponding values and applying optional modifiers.\n * @param template - The template string containing placeholders in the format {key} and optional modifiers in the format [MODIFIER:param=value].\n * @param values - An object containing key-value pairs to replace the placeholders in the template.\n * @param options - Optional settings for the composition process.\n * @returns The composed string with placeholders replaced and modifiers applied.\n * @example\n * ```javascript\n * const { string } = Tixyel.Helper;\n *\n * // Basic usage with placeholders and simple modifiers\n * const template1 = \"Hello, {username}! You have {amount} [UPC=messages] and your name is [CAP=name].\";\n * const values1 = { username: \"john_doe\", amount: 5, name: \"john\" };\n * const result1 = string.compose(template1, values1);\n * // \"Hello, john_doe! You have 5 MESSAGES and your name is John.\"\n *\n * // Multiple modifiers in a single block (HTML enabled)\n * const template2 = \"[COLOR:#ff0056,BOLD={username}]\";\n * const values2 = { username: \"john_doe\" };\n * const result2 = string.compose(template2, values2, { html: true });\n * // '<span class=\"color bold\" style=\"color: #ff0056; font-weight: bold;\">john_doe</span>'\n *\n * // Conditional rendering with IF (supports ===, >=, &&, ||, !, etc.)\n * const template3 = \"[IF=vip && status === 'live'?VIP Online|Offline]\";\n * const values3 = { status: 'live', vip: true };\n * const result3 = string.compose(template3, values3);\n * // \"VIP Online\"\n *\n * // Pluralization using amount / count or an explicit key\n * const template4 = \"You have {amount} [PLURAL=message|messages].\";\n * const values4 = { amount: 1 };\n * const values5 = { amount: 3 };\n * const result4a = string.compose(template4, values4); // \"You have 1 message.\"\n * const result4b = string.compose(template4, values5); // \"You have 3 messages.\"\n *\n * // Number formatting\n * const template5 = \"Total: [NUMBER:2=amount] {currency}\";\n * const values6 = { amount: 1234.5, currency: '$' };\n * const result5 = string.compose(template5, values6);\n * // e.g. \"Total: 1,234.50 $\" (locale dependent)\n *\n * // Date and time formatting\n * const template6 = \"Created at: [DATE:iso=createdAt] ([DATE:relative=createdAt])\";\n * const values7 = { createdAt: new Date('2020-01-02T03:04:05.000Z') };\n * const result6 = string.compose(template6, values7);\n * // e.g. \"Created at: 2020-01-02T03:04:05.000Z (Xs ago)\"\n *\n * // MAP / SWITCH style mapping\n * const template7 = \"Status: [MAP:status=live:Online|offline:Offline|default:Unknown]\";\n * const values8 = { status: 'offline' };\n * const result7 = string.compose(template7, values8);\n * // \"Status: Offline\"\n *\n * // Escaping HTML\n * const template8 = \"[ESCAPE={message}]\";\n * const values9 = { message: '<b>Danger & \"HTML\"</b>' };\n * const result8 = string.compose(template8, values9);\n * // \"<b>Danger & "HTML"</b>\"\n *\n * // Using global presets\n * Helper.string.PRESETS['alert'] = 'BOLD,COLOR:#ff0056';\n * const template10 = \"[PRESET:alert={username}]\";\n * const values11 = { username: 'john_doe' };\n * const result10 = string.compose(template10, values11, { html: true });\n * // '<span class=\"color bold\" style=\"color: #ff0056; font-weight: bold;\">john_doe</span>'\n * ```\n */\n export function compose(\n template: string,\n values: Record<string, any> = {},\n options: {\n method?: 'loop' | 'index';\n html?: boolean;\n debug?: boolean;\n modifiers?: Record<string, Modifier>;\n aliases?: Record<string, string[]>;\n } = {\n method: 'index',\n html: false,\n debug: false,\n modifiers: {},\n aliases: {},\n },\n ): string {\n const { mergeSpanStyles } = element;\n\n const span = (style: string, value: string, className?: string) => {\n if (options.html) {\n return mergeSpanStyles(style, value, className);\n } else {\n return value;\n }\n };\n\n const baseValues = {\n skip: '<br/>',\n newline: '<br/>',\n ...values,\n };\n\n let defaultCurrency = '$';\n let defaultCurrencyCode = 'USD';\n\n if (typeof window !== 'undefined') {\n try {\n const client: any = (window as any).client;\n const currency = client?.details?.currency;\n\n if (currency?.symbol) defaultCurrency = String(currency.symbol);\n if (currency?.code) defaultCurrencyCode = String(currency.code);\n } catch {\n // ignore – fall back to defaults\n }\n }\n\n const flatten: Record<string, string> = Object.entries(object.flatten(baseValues)).reduce(\n (acc, [k, v]) => {\n acc[k] = String(v);\n\n if (['username', 'name', 'nick', 'nickname', 'sender'].some((e) => k === e)) {\n const username =\n acc?.username || acc?.name || acc?.nick || acc?.nickname || acc?.sender;\n\n acc['username'] = acc.username || username;\n acc['usernameAt'] = `@${acc.username}`;\n acc['name'] = acc.name || username;\n acc['nick'] = acc.nick || username;\n acc['nickname'] = acc.nickname || username;\n acc['sender'] = acc.sender || username;\n acc['senderAt'] = `@${acc.sender}`;\n }\n\n if (['amount', 'count'].some((e) => k === e)) {\n acc['amount'] = String(acc?.amount || acc.count || v);\n acc['count'] = String(acc?.count || acc?.amount || v);\n }\n\n acc['currency'] = acc.currency || defaultCurrency;\n acc['currencyCode'] = acc.currencyCode || defaultCurrencyCode;\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const REGEX = {\n PLACEHOLDERS: /{([^}]+)}/g,\n MODIFIERS: /\\[([^\\]=]+)=([^\\]]+)\\]/g,\n };\n\n var amount = parseFloat(flatten?.amount ?? flatten?.count ?? 0);\n\n function getNumericFromKeyOrValue(\n keyOrValue: string,\n valuesMap: Record<string, string>,\n ): number | null {\n const trimmed = keyOrValue?.trim?.() ?? '';\n if (!trimmed.length) return null;\n\n const fromValues = (valuesMap as any)[trimmed];\n const candidate = fromValues !== undefined ? fromValues : trimmed;\n const num = parseFloat(String(candidate).replace(/\\s/g, ''));\n\n return isNaN(num) ? null : num;\n }\n\n function formatNumber(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const decimals = !isNaN(Number(param)) ? Math.max(0, parseInt(String(param))) : 0;\n\n const num = getNumericFromKeyOrValue(value, valuesMap);\n if (num === null) return value;\n\n try {\n return num.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n } catch {\n return num.toFixed(decimals);\n }\n }\n\n function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const past = diffMs >= 0;\n const abs = Math.abs(diffMs);\n\n const sec = Math.floor(abs / 1000);\n const min = Math.floor(sec / 60);\n const hour = Math.floor(min / 60);\n const day = Math.floor(hour / 24);\n const month = Math.floor(day / 30);\n const year = Math.floor(day / 365);\n\n const suffix = past ? 'ago' : 'from now';\n\n if (year > 0) return `${year}y ${suffix}`;\n if (month > 0) return `${month}mo ${suffix}`;\n if (day > 0) return `${day}d ${suffix}`;\n if (hour > 0) return `${hour}h ${suffix}`;\n if (min > 0) return `${min}m ${suffix}`;\n return `${Math.max(sec, 0)}s ${suffix}`;\n }\n\n function formatDateLike(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const keyOrLiteral = value?.trim?.() ?? '';\n if (!keyOrLiteral.length) return value;\n\n const raw = (valuesMap as any)[keyOrLiteral] ?? keyOrLiteral;\n const date = new Date(raw);\n\n if (isNaN(date.getTime())) return value;\n\n const mode = (param ?? 'date').toString().toLowerCase();\n\n try {\n switch (mode) {\n case 'time':\n return date.toLocaleTimeString();\n case 'datetime':\n case 'full':\n return date.toLocaleString();\n case 'relative':\n case 'ago':\n return formatRelativeTime(date);\n case 'iso':\n return date.toISOString();\n case 'date':\n default:\n return date.toLocaleDateString();\n }\n } catch {\n return value;\n }\n }\n\n function pluralize(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const text = value ?? '';\n const [singular, plural = singular] = text.split('|', 2);\n\n const key = param?.trim();\n let source: any = undefined;\n\n if (key && (valuesMap as any)[key] !== undefined) {\n source = (valuesMap as any)[key];\n } else {\n source = (valuesMap as any).amount ?? (valuesMap as any).count;\n }\n\n const num = parseFloat(String(source));\n if (isNaN(num)) return singular;\n\n const isPlural = Math.abs(num) !== 1;\n return isPlural ? plural : singular;\n }\n\n function mapSwitch(\n value: string,\n param: string | null | undefined,\n valuesMap: Record<string, string>,\n ): string {\n const key = param?.trim() ?? '';\n const targetRaw =\n key && (valuesMap as any)[key] !== undefined ? (valuesMap as any)[key] : '';\n const target = String(targetRaw);\n\n const entries = (value ?? '')\n .split('|')\n .map((p) => p.trim())\n .filter((p) => p.length);\n let defaultResult: string | undefined;\n\n for (const entry of entries) {\n const idx = entry.indexOf(':');\n if (idx === -1) continue;\n\n const mapKey = entry.slice(0, idx).trim();\n const mapValue = entry.slice(idx + 1);\n\n if (!mapKey.length) continue;\n\n if (mapKey.toLowerCase() === 'default') {\n defaultResult = mapValue;\n continue;\n }\n\n if (target === mapKey) return mapValue;\n }\n\n return defaultResult ?? '';\n }\n\n function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n function parseLiteralOrValue(token: string, valuesMap: Record<string, string>): any {\n let trimmed = token.trim();\n\n if (!trimmed.length) return undefined;\n\n const firstChar = trimmed[0];\n const lastChar = trimmed[trimmed.length - 1];\n\n if ((firstChar === '\"' && lastChar === '\"') || (firstChar === \"'\" && lastChar === \"'\")) {\n return trimmed.slice(1, -1);\n }\n\n const lowered = trimmed.toLowerCase();\n if (lowered === 'true') return true;\n if (lowered === 'false') return false;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return parseFloat(trimmed);\n\n const fromValues = valuesMap?.[trimmed];\n if (fromValues === undefined) return trimmed;\n\n const fromValuesStr = String(fromValues).trim();\n const fromValuesLower = fromValuesStr.toLowerCase();\n\n if (fromValuesLower === 'true') return true;\n if (fromValuesLower === 'false') return false;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(fromValuesStr)) return parseFloat(fromValuesStr);\n\n return fromValues;\n }\n\n function coerceToBoolean(value: any): boolean {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return false;\n\n const str = String(value).trim().toLowerCase();\n if (!str.length) return false;\n\n if (['false', '0', 'no', 'off', 'null', 'undefined', 'nan'].includes(str)) return false;\n\n return true;\n }\n\n function evaluateAtomicCondition(\n expression: string,\n valuesMap: Record<string, string>,\n ): boolean {\n let expr = expression.trim();\n if (!expr.length) return false;\n\n let invert = false;\n while (expr.startsWith('!')) {\n invert = !invert;\n expr = expr.slice(1).trim();\n }\n\n const operators = ['===', '!==', '==', '!=', '>=', '<=', '>', '<'];\n let op: string | null = null;\n let left = expr;\n let right = '';\n\n for (const candidate of operators) {\n const idx = expr.indexOf(candidate);\n if (idx !== -1) {\n op = candidate;\n left = expr.slice(0, idx);\n right = expr.slice(idx + candidate.length);\n break;\n }\n }\n\n let result: boolean;\n\n if (!op) {\n const value = parseLiteralOrValue(left, valuesMap);\n result = coerceToBoolean(value);\n } else {\n const leftVal = parseLiteralOrValue(left, valuesMap);\n const rightVal = parseLiteralOrValue(right, valuesMap);\n\n switch (op) {\n case '===':\n result = leftVal === rightVal;\n break;\n case '!==':\n result = leftVal !== rightVal;\n break;\n case '==':\n // eslint-disable-next-line eqeqeq\n result = (leftVal as any) == (rightVal as any);\n break;\n case '!=':\n // eslint-disable-next-line eqeqeq\n result = (leftVal as any) != (rightVal as any);\n break;\n case '>=':\n result = (leftVal as any) >= (rightVal as any);\n break;\n case '<=':\n result = (leftVal as any) <= (rightVal as any);\n break;\n case '>':\n result = (leftVal as any) > (rightVal as any);\n break;\n case '<':\n result = (leftVal as any) < (rightVal as any);\n break;\n default:\n result = false;\n break;\n }\n }\n\n return invert ? !result : result;\n }\n\n function evaluateConditionExpression(\n expression: string,\n valuesMap: Record<string, string>,\n ): boolean {\n let expr = expression.trim();\n if (!expr.length) return false;\n\n let invert = false;\n while (expr.startsWith('!')) {\n invert = !invert;\n expr = expr.slice(1).trim();\n }\n\n const orParts = expr\n .split('||')\n .map((p) => p.trim())\n .filter((p) => p.length);\n if (!orParts.length) return invert ? true : false;\n\n let result = false;\n\n for (const orPart of orParts) {\n const andParts = orPart\n .split('&&')\n .map((p) => p.trim())\n .filter((p) => p.length);\n if (!andParts.length) continue;\n\n let andResult = true;\n for (const andPart of andParts) {\n const partResult = evaluateAtomicCondition(andPart, valuesMap);\n andResult = andResult && partResult;\n if (!andResult) break;\n }\n\n result = result || andResult;\n if (result) break;\n }\n\n return invert ? !result : result;\n }\n\n const HTML_MODIFIERS: Record<string, Modifier> = {\n COLOR: (value, param) =>\n span(param && !!color.validate(param) ? `color: ${param}` : '', value, 'color'),\n WEIGHT: (value, param) =>\n span(param && !isNaN(parseInt(param)) ? `font-weight: ${param}` : '', value, 'weight'),\n SEMIBOLD: (value) => span('font-weight: 600', value, 'semibold'),\n BOLD: (value) => span('font-weight: bold', value, 'bold'),\n BLACK: (value) => span('font-weight: 900', value, 'black'),\n LIGHT: (value) => span('font-weight: lighter', value, 'light'),\n STRONG: (value) => span('font-weight: bolder', value, 'strong'),\n ITALIC: (value) => span('font-style: italic', value, 'italic'),\n UNDERLINE: (value) => span('text-decoration: underline', value, 'underline'),\n STRIKETHROUGH: (value) => span('text-decoration: line-through', value, 'strikethrough'),\n SUB: (value) => span('vertical-align: sub', value, 'sub'),\n SUP: (value) => span('vertical-align: super', value, 'sup'),\n LARGER: (value) => span('font-size: larger', value, 'larger'),\n SMALL: (value) => span('font-size: smaller', value, 'small'),\n SHADOW: (value, param) => span(`text-shadow: ${param}`, value, 'shadow'),\n SIZE: (value, param) => span(param ? `font-size: ${param}` : '', value, 'size'),\n };\n\n const STRING_MODIFIERS: Record<string, Modifier> = {\n BT1: (value) => (amount > 1 ? value : ''),\n BT0: (value) => (amount > 0 ? value : ''),\n ST1: (value) => (amount < 1 ? value : ''),\n ST0: (value) => (amount < 0 ? value : ''),\n UPC: (value) => value.toUpperCase(),\n LOW: (value) => value.toLowerCase(),\n REV: (value) => value.split('').reverse().join(''),\n CAP: (value) => value.charAt(0).toUpperCase() + value.slice(1).toLowerCase(),\n NUMBER: (value, param, valuesMap) =>\n formatNumber(value, param, valuesMap as Record<string, string>),\n PLURAL: (value, param, valuesMap) =>\n pluralize(value, param, valuesMap as Record<string, string>),\n DATE: (value, param, valuesMap) =>\n formatDateLike(value, param, valuesMap as Record<string, string>),\n MAP: (value, param, valuesMap) =>\n mapSwitch(value, param, valuesMap as Record<string, string>),\n ESCAPE: (value) => escapeHtml(value),\n IF: (value, _param, valuesMap) => {\n const text = value ?? '';\n\n const [rawCondition, rest] = text.split('?', 2);\n if (!rest) return text;\n\n const [whenTrue, whenFalse = ''] = rest.split('|', 2);\n\n const condition = evaluateConditionExpression(\n rawCondition,\n valuesMap as Record<string, string>,\n );\n\n return condition ? whenTrue : whenFalse;\n },\n PRESET: (value, param) => {\n const name = param?.trim() ?? '';\n if (!name.length) return value;\n\n const group = PRESETS[name];\n if (!group || !group.length) return value;\n\n const modifiers = group\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part.length)\n .map((part) => {\n const [mName, mParam] = part.split(':');\n return { name: mName.trim(), param: mParam?.trim() ?? null };\n });\n\n let result = value;\n for (const { name: mName, param: mParam } of modifiers) {\n result = applyModifier(result, mName, mParam);\n }\n\n return result;\n },\n FALLBACK: (value, param) => (value.length ? value : (param ?? value)),\n };\n\n const MODIFIERS: Record<string, Modifier> = {\n ...STRING_MODIFIERS,\n ...(options?.html ? HTML_MODIFIERS : {}),\n ...(options.modifiers ?? {}),\n };\n\n const ALIASES = {\n UPC: ['UPPERCASE', 'UPPER', 'UPP'],\n LOW: ['LOWERCASE', 'LOWER', 'LWC'],\n REV: ['REVERSE', 'RVS'],\n CAP: ['CAPITALIZE', 'CAPITAL'],\n NUMBER: ['NUMBER', 'NUM', 'FORMAT_NUMBER', 'FMT_NUM'],\n PLURAL: ['PLURAL', 'PL', 'PLR'],\n DATE: ['DATE', 'DATETIME', 'TIME', 'DT'],\n MAP: ['MAP', 'SWITCH'],\n ESCAPE: ['ESCAPE', 'ESC', 'ESC_HTML', 'ESCAPE_HTML'],\n PRESET: ['PRESET', 'STYLE', 'THEME'],\n BT1: ['BIGGER_THAN_1', 'GREATER_THAN_1', 'GT1'],\n BT0: ['BIGGER_THAN_0', 'GREATER_THAN_0', 'GT0'],\n ST1: ['SMALLER_THAN_1', 'LESS_THAN_1', 'LT1'],\n ST0: ['SMALLER_THAN_0', 'LESS_THAN_0', 'LT0'],\n COLOR: ['COLOUR', 'CLR', 'HIGHLIGHT'],\n BOLD: ['BOLDEN', 'B'],\n STRONG: ['STRONGEN', 'STRONG'],\n ITALIC: ['ITALICIZE', 'ITALIC', 'I'],\n UNDERLINE: ['U', 'INS', 'INSET', 'I'],\n STRIKETHROUGH: ['STRIKE', 'S', 'DELETE', 'D'],\n SUB: ['SUBSCRIPT', 'SUBS'],\n SUP: ['SUPERSCRIPT', 'SUPS'],\n LARGER: ['LARGER', 'LG'],\n SMALL: ['SMALLER', 'SM'],\n SHADOW: ['SHADOW', 'SHD'],\n FALLBACK: ['FALLBACK', 'FB'],\n IF: ['IF', 'COND', 'CONDITION'],\n ...(options.aliases ?? {}),\n };\n\n function applyModifier(\n value: string,\n name: string,\n param: string | null | undefined,\n ): string {\n const canonical = Object.entries(ALIASES).find(([key, aliases]) => {\n if (aliases.some((alias) => alias.toUpperCase() === name.toUpperCase())) return true;\n else if (key.toUpperCase() === name.toUpperCase()) return true;\n else return false;\n });\n const use = canonical ? canonical[0] : name.toUpperCase();\n\n try {\n if (MODIFIERS[use])\n return MODIFIERS[use](value, typeof param === 'string' ? param.trim() : null, flatten);\n else if (options?.html) return span('', value, use.toLowerCase());\n else return value;\n } catch (error) {\n if (\n options?.debug &&\n typeof console !== 'undefined' &&\n typeof console.error === 'function'\n ) {\n console.error('[Helper.string.compose] Modifier error', { name, param, error });\n }\n return value;\n }\n }\n\n function replaceAll(string: string): string {\n let str = string;\n let match;\n\n while ((match = REGEX.MODIFIERS.exec(str)) !== null) {\n const [fullMatch, modifierGroup, value] = match;\n\n const modifiers = modifierGroup\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part.length)\n .map((part) => {\n const [name, param] = part.split(':');\n return { name: name.trim(), param: param?.trim() ?? null };\n });\n\n let newValue = replaceAll(value);\n\n for (const { name, param } of modifiers) {\n newValue = applyModifier(newValue, name, param);\n }\n\n str = str.replace(fullMatch, newValue ?? '');\n\n REGEX.MODIFIERS.lastIndex = 0;\n }\n\n return str;\n }\n\n function parseModifiers(str: string): string {\n let i = 0;\n const len = str.length;\n\n function parseText(stopChar?: string): string {\n let out = '';\n while (i < len) {\n if (str[i] === '\\\\') {\n if (i + 1 < len) {\n out += str[i + 1];\n i += 2;\n } else {\n i++;\n }\n } else if (str[i] === '[' && (!stopChar || stopChar !== '[')) {\n out += parseModifier();\n } else if (stopChar && str[i] === stopChar) {\n i++;\n break;\n } else {\n out += str[i++];\n }\n }\n return out;\n }\n\n function parseModifier(): string {\n i++;\n const modifiers: { name: string; param: string | null }[] = [];\n\n while (i < len && str[i] !== '=') {\n if (str[i] === ',') {\n i++;\n continue;\n }\n\n let name = '';\n while (i < len && /[A-Za-z0-9]/.test(str[i])) name += str[i++];\n\n let param: string | null = null;\n if (str[i] === ':') {\n i++;\n const paramStart = i;\n while (i < len && str[i] !== ',' && str[i] !== '=') i++;\n param = str.slice(paramStart, i);\n }\n\n if (name.length) {\n modifiers.push({ name, param });\n }\n\n if (str[i] === ',') {\n i++;\n }\n }\n\n if (str[i] === '=') i++;\n\n const value = parseText(']');\n\n return modifiers.reduce((val, { name, param }) => applyModifier(val, name, param), value);\n }\n\n return parseText();\n }\n\n let result = template.replace(REGEX.PLACEHOLDERS, (_, key: string) =>\n typeof flatten[key] === 'string' || typeof flatten[key] === 'number'\n ? String(flatten[key])\n : (key ?? key),\n );\n\n result = options.method === 'loop' ? replaceAll(result) : parseModifiers(result);\n\n return result;\n }\n }\n\n export namespace sound {\n export let playing: boolean = false;\n export let audio: AudioContext;\n\n /**\n * Play sound from URL with optional volume and replace parameters\n * @param url - Sound URL to play\n * @param volume - Volume level from 0 to 100 (default: 100)\n * @param replace - If true, replaces currently playing sound (default: false)\n */\n export function play(url: string, volume: number = 100, replace = false) {\n if (!url || !url.length) {\n throw new Error('No sound URL provided');\n }\n\n try {\n if (replace && playing && audio && audio.state !== 'closed') audio.close();\n\n let ctx = new AudioContext();\n let gainNode = ctx.createGain();\n gainNode.connect(ctx.destination);\n\n if (replace) {\n audio = ctx;\n playing = true;\n }\n\n fetch(url)\n .then((data) => data.arrayBuffer())\n .then((arrayBuffer) => ctx.decodeAudioData(arrayBuffer))\n .then((decodedAudio) => {\n if (ctx.state !== 'closed') {\n const playSound = ctx.createBufferSource();\n playSound.buffer = decodedAudio;\n playSound.connect(gainNode);\n gainNode.gain.value = volume / 100;\n playSound.start(ctx.currentTime);\n }\n });\n } catch (error) {\n throw new Error(`Error playing sound: ${error}`);\n }\n }\n }\n\n export namespace color {\n /**\n * Generate opacity hex value\n * @param opacity - Opacity value from 0 to 100\n * @param color - Hex color code\n * @returns - Hex color code with opacity\n */\n export function opacity(opacity: number = 100, color: string = '') {\n color = color.length > 7 ? color?.substring(0, 6) : color;\n opacity = opacity > 1 ? opacity / 100 : opacity;\n\n let result = Math.round(Math.min(Math.max(opacity, 0), 1) * 255)\n .toString(16)\n .toLowerCase()\n .padStart(2, '0');\n\n return color + result;\n }\n\n /**\n * Extract color and opacity from hex code\n * @param hex - Hex color code\n * @returns - Object with color and opacity\n */\n export function extract(hex: string) {\n if (!hex.startsWith('#') || hex.length <= 7) {\n return {\n color: hex,\n opacity: 100,\n };\n }\n\n var color = hex.slice(-2);\n var decimal = parseInt(color, 16) / 255;\n var percentage = Math.round(decimal * 100);\n var color = hex.length > 7 ? hex.slice(0, 7) : hex;\n\n return {\n color: color,\n opacity: percentage,\n };\n }\n\n /**\n * Validate color string format\n * @param str - Color string to validate\n * @returns Detected color format or false if invalid\n * @example\n * ```javascript\n * const format1 = color.validate(\"#FF5733\"); // \"hex\"\n * const format2 = color.validate(\"rgb(255, 87, 51)\"); // \"rgb\"\n * const format3 = color.validate(\"hsl(14, 100%, 60%)\"); // \"hsl\"\n * const format4 = color.validate(\"orangered\"); // \"css-color-name\"\n * const format5 = color.validate(\"invalid-color\"); // false\n * ```\n */\n export function validate(str: string) {\n if (typeof str !== 'string' || !String(str).trim().length) return false;\n\n const s = str.trim();\n\n // HEX (#FFF, #FFFFFF, #FFFFFFFF)\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(s) || /^#([A-Fa-f0-9]{4}|[A-Fa-f0-9]{8})$/.test(s)) {\n return 'hex';\n }\n\n // rgb(255, 255, 255)\n if (/^rgb\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*\\)$/.test(s)) {\n return 'rgb';\n }\n\n // rgba(255, 255, 255, 0.5)\n if (/^rgba\\(\\s*(?:\\d{1,3}\\s*,\\s*){3}(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'rgba';\n }\n\n // hsl(360, 100%, 100%)\n if (/^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/.test(s)) {\n return 'hsl';\n }\n\n // hsla(360, 100%, 100%, 0.5)\n if (/^hsla\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*,\\s*(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'hsla';\n }\n\n if (Data.css_color_names.includes(s.toLowerCase())) {\n return 'css-color-name';\n }\n\n return false;\n }\n\n /**\n * Convert color to different format\n * @param str - Color string to convert (e.g. \"#FF5733\", \"rgb(255, 87, 51)\")\n * @param format - Target format\n * @returns - Converted color string\n * @example\n * ```javascript\n * const hexColor = color.convert(\"rgb(255, 87, 51)\", \"hex\"); // \"#FF5733\"\n * const rgbColor = color.convert(\"#FF5733\", \"rgb\"); // \"rgb(255, 87, 51)\"\n * const hslColor = color.convert(\"#FF5733\", \"hsl\"); // \"hsl(14, 100%, 60%)\"\n * const colorName = color.convert(\"#FF5733\", \"css-color-name\"); // \"orangered\"\n * ```\n */\n export async function convert(\n str: string,\n format: 'hex' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name',\n ): Promise<string | null> {\n const valid = validate(str);\n\n if (!valid) throw new Error(`Invalid color format: ${str}`);\n\n if (valid === format) throw new Error(`Color is already in the desired format: ${format}`);\n\n const rgba = parseToRGBA(str.trim(), valid);\n\n if (!rgba) throw new Error(`Failed to parse color: ${str}`);\n\n switch (format) {\n case 'hex': {\n return rgbaToHex(rgba, false);\n }\n case 'rgb': {\n return `rgb(${rgba.r}, ${rgba.g}, ${rgba.b})`;\n }\n case 'rgba': {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n }\n case 'hsl': {\n const hsl = rgbToHsl(rgba.r, rgba.g, rgba.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n case 'hsla': {\n const hsl = rgbToHsl(rgba.r, rgba.g, rgba.b);\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${rgba.a})`;\n }\n case 'css-color-name': {\n return await findClosestColorName(rgba.r, rgba.g, rgba.b);\n }\n default: {\n return null;\n }\n }\n }\n }\n\n export namespace random {\n /**\n * Generate random color\n * @param type - Color format\n * @returns - Random color in specified format\n * @example\n * ```javascript\n * const hexColor = random.color('hex');\n * console.log(hexColor); // e.g. #3e92cc\n *\n * const rgbColor = random.color('rgb');\n * console.log(rgbColor); // e.g. rgb(62, 146, 204)\n * ```\n */\n export function color(\n type: 'hex' | 'hexa' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' = 'hex',\n ) {\n switch (type) {\n default:\n case 'hex': {\n return `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n }\n case 'hexa': {\n const hex = `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n\n const alpha = Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0');\n\n return hex + alpha;\n }\n case 'rgb': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n case 'rgba': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n const a = Math.random().toFixed(2);\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n case 'hsl': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsla': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n const a = Math.random().toFixed(2);\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n }\n case 'css-color-name': {\n var names = Data.css_color_names;\n\n return array(names)[0];\n }\n }\n }\n\n /**\n * Generate random number\n * @param min - Minimum value\n * @param max - Maximum value\n * @param float - Number of decimal places (0 for integer)\n * @returns - Random number\n * @example\n * ```javascript\n * const intNumber = random.number(1, 10);\n * console.log(intNumber); // e.g. 7\n *\n * const floatNumber = random.number(1, 10, 2);\n * console.log(floatNumber); // e.g. 3.14\n * ```\n */\n export function number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n }\n\n /**\n * Generate random boolean\n * @param threshold - Threshold between 0 and 1\n * @returns - Random boolean\n * @example\n * ```javascript\n * const boolValue = random.boolean(0.7);\n * console.log(boolValue); // e.g. true (70% chance)\n * ```\n */\n export function boolean(threshold: number = 0.5): boolean {\n return Math.random() > threshold;\n }\n\n /**\n * Generate random string\n * @param length - Length of the string\n * @param chars - Characters to use\n * @returns - Random string\n * @example\n * ```javascript\n * const randString = random.string(10);\n * console.log(randString); // e.g. \"aZ3bT9xYqP\"\n * ```\n */\n export function string(\n length: number,\n chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',\n ): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return result;\n }\n\n /**\n * Pick random element from array\n * @param arr - Array to pick from\n * @returns - Random element and its index\n * @example\n * ```javascript\n * const [element, index] = random.array(['apple', 'banana', 'cherry']);\n * console.log(element, index); // e.g. \"banana\", 1\n * ```\n */\n export function array<T>(arr: T[]): [value: T, index: number] {\n const index = number(0, arr.length - 1);\n\n return [arr[index], index];\n }\n\n /**\n * Generate random date\n * @param start - Start date\n * @param end - End date\n * @returns - Random date between start and end\n * @example\n * ```javascript\n * const randDate = random.date(new Date(2020, 0, 1), new Date());\n * console.log(randDate); // e.g. 2022-05-15T10:30:00.000Z\n * ```\n */\n export function date(start: Date = new Date(2000, 0, 1), end: Date = new Date()): Date {\n const date = new Date(number(start.getTime(), end.getTime()));\n\n return date;\n }\n\n /**\n * Generate ISO date string offset by days\n * @param daysAgo - Number of days to go back\n * @returns - ISO date string\n * @example\n * ```javascript\n * const isoDate = random.daysOffset(7);\n * console.log(isoDate); // e.g. \"2024-06-10T14:23:45.678Z\"\n *\n * const isoDate30 = random.daysOffset(30);\n * console.log(isoDate30); // e.g. \"2024-05-18T09:15:30.123Z\"\n * ```\n */\n export function daysOffset(daysAgo: number): string {\n const now = Date.now();\n const past = now - number(0, daysAgo * 24 * 60 * 60 * 1000);\n\n return new Date(past).toISOString();\n }\n\n /**\n * Generate UUID v4\n * @returns - UUID string\n * @example\n * ```javascript\n * const uuid = random.uuid();\n * console.log(uuid); // e.g. \"3b12f1df-5232-4e3a-9a0c-3f9f1b1b1b1b\"\n * ```\n */\n export function uuid(): string {\n return crypto.randomUUID();\n }\n }\n\n export namespace fn {\n /**\n * Apply function with given thisArg and arguments\n * @param fn - Function to apply\n * @param thisArg - Value to use as this when calling fn\n * @param args - Arguments to pass to fn\n * @returns Result of calling fn with thisArg and args\n */\n export function apply<TThis, TArgs extends unknown[], TReturn>(\n fn: (this: TThis, ...args: TArgs) => TReturn,\n thisArg: TThis,\n args: TArgs,\n ): TReturn {\n return fn.apply(thisArg, args);\n }\n\n /**\n * Call function with given thisArg and arguments\n * @param fn - Function to call\n * @param thisArg - Value to use as this when calling fn\n * @param args - Arguments to pass to fn\n * @returns Result of calling fn with thisArg and args\n */\n export function call<TThis, TArgs extends unknown[], TReturn>(\n fn: (this: TThis, ...args: TArgs) => TReturn,\n thisArg: TThis,\n ...args: TArgs\n ): TReturn {\n return fn.call(thisArg, ...args);\n }\n }\n\n export namespace utils {\n /**\n * Delays execution for a specified number of milliseconds.\n * @param ms - The number of milliseconds to delay.\n * @returns A Promise that resolves after the specified delay.\n */\n export function delay<R extends any, M extends number>(\n ms: M,\n callback?: () => R,\n ): Promise<R | null> {\n return new Promise((resolve) =>\n setTimeout(() => {\n if (callback) {\n const result = callback();\n resolve(result ?? null);\n } else resolve(null);\n }, ms),\n );\n }\n\n /**\n * Returns typed entries of an object.\n * @param obj - The object to get entries from.\n * @returns An array of key-value pairs from the object.\n */\n export function typedEntries<K extends string, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][];\n }\n\n /**\n * Returns typed values of an object.\n * @param obj - The object to get values from.\n * @returns An array of values from the object.\n */\n export function typedValues<K extends string, V>(obj: Record<K, V>): V[] {\n return Object.values(obj) as V[];\n }\n\n /**\n * Returns typed keys of an object.\n * @param obj - The object to get keys from.\n * @returns An array of keys from the object.\n */\n export function typedKeys<K extends string, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[];\n }\n\n /**\n * Selects an item based on weighted probabilities.\n * @param items - An object where keys are items and values are their weights.\n * @returns A randomly selected item based on the given probabilities.\n */\n export function probability<K extends string, V extends number>(\n items: Record<K, V>,\n ): K | undefined {\n const total = (Object.values(items) as number[]).reduce((acc, val) => acc + val, 0);\n const sorted = typedEntries(items).sort((a, b) => b[1] - a[1]);\n const rand = Math.random() * total;\n\n let cumulative = 0;\n\n for (const [item, weight] of sorted) {\n cumulative += weight;\n\n if (rand < cumulative) {\n return item;\n }\n }\n\n return undefined;\n }\n }\n}\n","import { Client } from '../client/client.js';\nimport { Helper } from '../helper/index.js';\nimport { logger } from '../main.js';\nimport { StreamElements } from '../types/index.js';\n\ninterface ButtonOptions {\n field: string | ((field: string, value: string | boolean | number) => boolean);\n template?: string;\n name?: string;\n value?: string;\n run: (field: string, value: string | boolean | number) => void;\n}\n\n/**\n * Represents a button action that can be triggered by custom fields in StreamElements.\n * The button can be configured with a template and a name, and it will execute a specified function when triggered.\n * @example\n * ```javascript\n * const button = new Button({\n * field: (field, value) => field.startsWith('message-') && field.split('-')[1],\n * template: 'message-{role}',\n * // name: '[CAP={role}] role message',\n * name: 'Generate {role} message',\n * run(field, value) {\n * console.log(`Button ${field} was clicked with value: ${value}`);\n * }\n * })\n *\n * const field = button.generate([{ role: 'broadcaster' }, { role: 'moderator' }]);\n * // This will create buttons with fields \"message-broadcaster\" and \"message-moderator\" and names \"Generate broadcaster message\" and \"Generate moderator message\".\n * // field['message-broadcaster'] => { type: 'button', label: 'Generate broadcaster message' }\n * // field['message-moderator'] => { type: 'button', label: 'Generate moderator message' }\n *\n * // When a custom field with the name \"message-broadcaster\" or \"message-moderator\" is triggered, the run function will be called with the field and value.\n * ```\n */\nexport class Button {\n field: ButtonOptions['field'] = 'button';\n template: string = 'button';\n name: string = 'Button';\n value: string = '';\n\n run!: ButtonOptions['run'];\n\n constructor(options: ButtonOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.field = options.field ?? this.field;\n this.template = options.template ?? (typeof this.field === 'string' ? this.field : this.template);\n this.name = options.name ?? this.name;\n this.value = options.value ?? this.value;\n this.run = options.run;\n\n // Register the button in the client actions\n window.client.actions.buttons.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n generate(values: Array<Record<string, string | number>>) {\n const fields = Helper.utils.typedValues(values).reduce(\n (acc, values, index) => {\n const key = Helper.string.compose(this.template, { index, ...values }, { html: false });\n const name = Helper.string.compose(this.name, { index, ...values }, { html: false });\n\n acc[key] = {\n type: 'button',\n label: name,\n };\n\n let value: string | number | boolean = Helper.string.compose(String(this.value), { index, ...values }, { html: false });\n\n if (!isNaN(Number(value))) value = Number(value);\n else if (value.toLowerCase() === 'true') value = true;\n else if (value.toLowerCase() === 'false') value = false;\n\n if (typeof value !== 'undefined' && !!value && (typeof value === 'string' ? value.length : true)) {\n acc[key].value = value;\n }\n\n return acc;\n },\n {} as Record<string, StreamElements.CustomField.Schema>,\n );\n\n // let result = Helper.string.compose(this.template, values, { html: false });\n\n return fields;\n }\n\n parse(field: string, value: string | boolean | number): Button {\n /**\n * Extract the actual field name by removing the template part from the provided field.\n * For example, if the template is \"button-{id}\" and the field is \"button-123\",\n * this will extract \"123\" as the actual field name.\n */\n var f = field.replace(typeof this.field === 'string' ? this.field : (this.template.replace(/\\{[^}]*\\}/g, '') ?? ''), '').trim();\n\n try {\n this.run.apply(window.client, [f.length ? f : (field ?? field), value]);\n } catch (error) {\n throw new Error(`Error running button \"${this.field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return this;\n }\n\n remove(): void {\n if (!(window.client instanceof Client)) return;\n\n const index = window.client.actions.buttons.indexOf(this);\n\n if (index > -1) {\n window.client.actions.buttons.splice(index, 1);\n window.client.emit('action', this, 'removed');\n }\n }\n\n static execute(field: string, value: string | boolean | number): boolean {\n try {\n if (!(window.client instanceof Client)) return false;\n\n if (window.client.actions.buttons.length) {\n const buttons = window.client.actions.buttons.filter((b) => {\n /**\n * Check if the button's field matches the provided field.\n */\n if (typeof b.field === 'string') return b.field === field;\n /**\n * If the button's field is a function, call it with the provided field and value to determine a match.\n */\n if (typeof b.field === 'function') return b.field(field, value);\n\n return false;\n });\n\n if (buttons.length && buttons.every((b) => b instanceof Button)) {\n buttons.forEach((button) => {\n try {\n button.parse(field, value);\n\n window.client.emit('action', button, 'executed');\n\n logger.received(`Button executed: ${field}${value ? ` with value: ${value}` : ''}`);\n } catch (error) {\n logger.error(`Error executing button \"${field}\": ${error instanceof Error ? error.message : error}`);\n }\n });\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { StreamElements } from '../types/streamelements/main.js';\nimport type { ClientEvents, Provider } from '../types/client.js';\nimport { logger } from '../main.js';\nimport { useQueue } from '../modules/useQueue.js';\nimport { Helper } from '../helper/index.js';\nimport { Data } from '../data/index.js';\n\nexport namespace Local {\n type Queue = useQueue<\n | { listener: 'onEventReceived'; data: StreamElements.Event.onEventReceived; session?: boolean }\n | { listener: 'onWidgetLoad'; data: StreamElements.Event.onWidgetLoad }\n | { listener: 'onSessionUpdate'; data: StreamElements.Event.onSessionUpdate }\n >;\n\n export var queue: Queue | undefined;\n\n export const generate = {\n session: {\n types: {\n name: { type: 'string', options: Data.names.filter((e) => e.length) },\n tier: { type: 'string', options: Data.tiers.filter((e) => e.length) },\n message: { type: 'string', options: Data.messages.filter((e) => e.length) },\n item: { type: 'array', options: Data.items },\n avatar: { type: 'string', options: Data.avatars.filter((e) => e.length) },\n } as Record<string, StreamElements.Session.Config.Any>,\n\n available(): StreamElements.Session.Config.Available.Data {\n const types = this.types;\n\n return {\n follower: {\n latest: { name: types.name },\n session: { count: { type: 'int', min: 50, max: 200 } },\n week: { count: { type: 'int', min: 200, max: 1000 } },\n month: { count: { type: 'int', min: 1000, max: 3000 } },\n goal: { amount: { type: 'int', min: 3000, max: 7000 } },\n total: { count: { type: 'int', min: 7000, max: 10000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: { name: types.name, createdAt: { type: 'date', range: 400 } },\n },\n },\n subscriber: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n message: types.message,\n },\n 'new-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'resub-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'gifted-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n tier: types.tier,\n sender: types.name,\n },\n session: { count: { type: 'int', min: 10, max: 40 } },\n 'new-session': { count: { type: 'int', min: 10, max: 40 } },\n 'resub-session': { count: { type: 'int', min: 10, max: 40 } },\n 'gifted-session': { count: { type: 'int', min: 10, max: 40 } },\n week: { count: { type: 'int', min: 40, max: 100 } },\n month: { count: { type: 'int', min: 100, max: 200 } },\n goal: { amount: { type: 'int', min: 200, max: 300 } },\n total: { count: { type: 'int', min: 300, max: 400 } },\n points: { amount: { type: 'int', min: 100, max: 400 } },\n 'alltime-gifter': { name: types.name, amount: { type: 'int', min: 300, max: 400 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n host: {\n latest: { name: types.name, amount: { type: 'int', min: 1, max: 10 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 1, max: 10 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n raid: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n charityCampaignDonation: {\n latest: { name: types.name, amount: { type: 'int', min: 50, max: 150 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 50, max: 200 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 500 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 800 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1000 },\n },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 800 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1000 },\n },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 50, max: 150 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheer: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n message: types.message,\n },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 1000 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 5000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 5000, max: 12000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 12000, max: 20000 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 1000 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 5000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 5000, max: 12000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 12000, max: 20000 },\n },\n session: { amount: { type: 'int', min: 200, max: 1000 } },\n week: { amount: { type: 'int', min: 1000, max: 5000 } },\n month: { amount: { type: 'int', min: 5000, max: 12000 } },\n goal: { amount: { type: 'int', min: 12000, max: 18000 } },\n total: { amount: { type: 'int', min: 18000, max: 20000 } },\n count: { count: { type: 'int', min: 200, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheerPurchase: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 400, max: 800 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1500 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1500, max: 2000 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 800, max: 1500 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1500, max: 2000 },\n },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n superchat: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n hypetrain: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n active: { type: 'int', min: 0, max: 1 },\n level: { type: 'int', min: 5, max: 10 },\n levelChanged: { type: 'int', min: 0, max: 5 },\n _type: { type: 'array', options: ['follower', 'subscriber', 'cheer', 'donation'] },\n },\n 'level-goal': { amount: { type: 'int', min: 0, max: 100 } },\n 'level-progress': {\n amount: { type: 'int', min: 0, max: 100 },\n percent: { type: 'int', min: 0, max: 100 },\n },\n total: { amount: { type: 'int', min: 0, max: 100 } },\n 'latest-top-contributors': { type: 'recent', amount: 25, value: { name: types.name } },\n },\n 'channel-points': {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n message: types.message,\n redemption: { type: 'array', options: ['Reward 1', 'Reward 2', 'Reward 3'] },\n },\n },\n tip: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donation': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n 'session-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 100, max: 500 },\n },\n 'weekly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 500, max: 1000 },\n },\n 'monthly-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 1000, max: 2000 },\n },\n 'alltime-top-donator': {\n name: types.name,\n amount: { type: 'int', min: 2000, max: 2500 },\n },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n merch: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n },\n 'goal-orders': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-items': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-total': { amount: { type: 'int', min: 0, max: 100 } },\n recent: { type: 'recent', amount: 25, value: { name: types.name } },\n },\n purchase: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n avatar: types.avatar,\n message: types.message,\n },\n },\n };\n },\n\n async get(startSession?: StreamElements.Session.Data): Promise<StreamElements.Session.Data> {\n const available = this.available();\n\n if (startSession) return startSession;\n\n const generate = (\n available:\n | StreamElements.Session.Config.Available.Data\n | StreamElements.Session.Config.Available.Category\n | StreamElements.Session.Config.Any,\n ): any => {\n const generateRecentData = (config: StreamElements.Session.Config.Any): Array<any> => {\n if (!config || !('amount' in config)) return [];\n\n const items: Array<{ createdAt: string }> = [];\n\n for (let i = 0; i < config.amount; i++) {\n items.push(generate(config.value));\n }\n\n return items.sort(\n (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n );\n };\n\n const generateObjectData = (config: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const key in config) {\n const processedKey = key.replace('_type', 'type');\n\n result[processedKey] = generate(config[key]);\n }\n\n return result;\n };\n\n const processTypedConfig = (config: StreamElements.Session.Config.Any): any => {\n if (!config) return config;\n\n switch (config.type) {\n case 'int':\n return Helper.random.number(config.min, config.max);\n case 'string':\n return Helper.random.array(config.options)[0];\n case 'date':\n return Helper.random.daysOffset(config.range);\n case 'array':\n return Helper.random.array(config.options)[0];\n case 'recent':\n return generateRecentData(config);\n default:\n return config;\n }\n };\n\n // Main generation logic\n\n // Handle primitive values (non-objects)\n if (typeof available !== 'object' || available === null) {\n return available;\n }\n\n // Handle typed configurations (objects with a 'type' property)\n if ('type' in available && typeof available.type === 'string') {\n return processTypedConfig(available);\n }\n\n // Handle generic objects - recursively process each property\n return generateObjectData(available);\n };\n\n var session: StreamElements.Session.Data = Object.entries(generate(available)).reduce(\n (acc, [key, value]) => {\n Object.entries(value as any).forEach(\n ([subKey, subValue]) =>\n //\n (acc[`${key}-${subKey}`] = subValue),\n );\n\n return acc;\n },\n {} as Record<string, any>,\n ) as StreamElements.Session.Data;\n\n return session;\n },\n },\n event: {\n /**\n * Simulates the onWidgetLoad event for a widget.\n * @param fields - The field values to be included in the event.\n * @param session - The session data to be included in the event.\n * @param currency - The currency to be used (default is 'USD').\n * @returns A Promise that resolves to the simulated onWidgetLoad event data.\n */\n async onWidgetLoad(\n fields: Record<string, StreamElements.CustomField.Value>,\n session: StreamElements.Session.Data,\n currency: 'BRL' | 'USD' | 'EUR' = 'USD',\n ): Promise<StreamElements.Event.onWidgetLoad> {\n const currencies = {\n BRL: { code: 'BRL', name: 'Brazilian Real', symbol: 'R$' },\n USD: { code: 'USD', name: 'US Dollar', symbol: '$' },\n EUR: { code: 'EUR', name: 'Euro', symbol: '€' },\n };\n\n return {\n channel: {\n username: 'local',\n apiToken: '',\n id: '',\n providerId: '',\n avatar: '',\n },\n currency: currencies[currency] ?? currencies.USD,\n fieldData: fields,\n recents: [],\n session: {\n data: session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: {\n isEditorMode: true,\n muted: false,\n },\n emulated: true,\n };\n },\n /**\n * Simulates the onSessionUpdate event for a widget.\n * @param session - The session data to be included in the event.\n * @returns A Promise that resolves to the simulated onSessionUpdate event data.\n */\n async onSessionUpdate(\n session?: StreamElements.Session.Data,\n update?: ClientEvents,\n ): Promise<StreamElements.Event.onSessionUpdate> {\n session ??= await Local.generate.session.get();\n\n if (update) {\n const orderByDateDesc = (a: { createdAt: string }, b: { createdAt: string }) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();\n\n switch (update.provider) {\n case 'twitch': {\n const data = update.data;\n\n switch (data.listener) {\n case 'cheer-latest': {\n const amount = data.event.amount;\n const name = data.event.displayName ?? data.event.name;\n const message = data.event.message;\n\n session['cheer-latest'] = { name, amount, message };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`cheer-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`cheer-${type}-top-donator`];\n\n const donatorCurrent = session['cheer-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['cheer-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['cheer-session'].amount += amount;\n session['cheer-week'].amount += amount;\n session['cheer-month'].amount += amount;\n session['cheer-total'].amount += amount;\n session['cheer-count'].count += 1;\n session['cheer-goal'].amount += amount;\n session['cheer-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['cheer-recent'] = (session['cheer-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n case 'follower-latest': {\n const name = data.event.displayName ?? data.event.name;\n\n session['follower-latest'].name = name;\n\n session['follower-session'].count += 1;\n session['follower-week'].count += 1;\n session['follower-month'].count += 1;\n session['follower-total'].count += 1;\n session['follower-goal'].amount += 1;\n session['follower-recent'].unshift({\n name: name,\n createdAt: new Date().toISOString(),\n });\n session['follower-recent'] = (session['follower-recent'] || []).sort(\n orderByDateDesc,\n );\n\n break;\n }\n case 'subscriber-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n const tier = data.event.tier;\n const message = data.event.message;\n\n session['subscriber-latest'] = { name, amount, tier, message: message ?? '' };\n\n if (\n !session['subscriber-recent'].find(\n (e) => e.name.toLowerCase() === name.toLowerCase(),\n )\n ) {\n session['subscriber-new-latest'] = { name, amount, message: message ?? '' };\n session['subscriber-new-session'].count += 1;\n } else if (amount > 1) {\n session['subscriber-resub-latest'] = { name, amount, message: message ?? '' };\n session['subscriber-resub-session'].count += 1;\n }\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n const sender = data.event.sender;\n // gift\n session['subscriber-gifted-latest'] = {\n name,\n amount,\n tier,\n message: message ?? '',\n sender,\n };\n session['subscriber-gifted-session'].count += 1;\n\n session['subscriber-alltime-gifter'] = { name: sender, amount };\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n }\n\n session['subscriber-session'].count += amount;\n session['subscriber-week'].count += amount;\n session['subscriber-month'].count += amount;\n session['subscriber-total'].count += amount;\n session['subscriber-goal'].amount += amount;\n session['subscriber-points'].amount += amount;\n\n session['subscriber-recent'].unshift({\n name: name,\n amount: amount,\n tier: tier,\n createdAt: new Date().toISOString(),\n });\n session['subscriber-recent'] = (session['subscriber-recent'] || []).sort(\n orderByDateDesc,\n );\n\n break;\n }\n case 'raid-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['raid-latest'] = { name, amount };\n\n session['raid-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['raid-recent'] = (session['raid-recent'] || []).sort(orderByDateDesc);\n break;\n }\n }\n\n break;\n }\n\n case 'youtube': {\n const data = update.data;\n\n switch (data.listener) {\n case 'superchat-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['superchat-latest'] = {\n name: name.toLowerCase(),\n displayName: name,\n amount,\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n providerId: '',\n avatar: '',\n };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`superchat-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`superchat-${type}-top-donator`];\n\n const donatorCurrent = session['superchat-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['superchat-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['superchat-session'].amount += amount;\n session['superchat-week'].amount += amount;\n session['superchat-month'].amount += amount;\n session['superchat-total'].amount += amount;\n session['superchat-count'].count += 1;\n session['superchat-goal'].amount += amount;\n session['superchat-recent'].unshift({\n name: name.toLowerCase(),\n displayName: name,\n amount: amount,\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n avatar: '',\n providerId: '',\n });\n // session['superchat-recent'] = (session['superchat-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n }\n\n break;\n }\n\n case 'streamelements': {\n const data = update.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const name = data.event.displayName ?? data.event.name;\n const amount = data.event.amount;\n\n session['tip-latest'] = { name, amount };\n\n const update = (type: 'session' | 'weekly' | 'monthly' | 'alltime' | 'all') => {\n if (type === 'all') {\n update('alltime');\n update('monthly');\n update('weekly');\n update('session');\n\n return;\n }\n\n const topDonation = session[`tip-${type}-top-donation`];\n\n if (topDonation && amount > topDonation.amount) {\n topDonation.amount = amount;\n topDonation.name = name;\n }\n\n const topDonator = session[`tip-${type}-top-donator`];\n\n const donatorCurrent = session['tip-recent']\n .filter((e) => e.name.toLowerCase() === topDonator.name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n const donatorNew = session['tip-recent']\n .filter((e) => e.name.toLowerCase() === name.toLowerCase())\n .reduce((acc, curr) => acc + curr.amount, 0);\n\n if (donatorNew > donatorCurrent) {\n topDonator.amount = donatorNew;\n topDonator.name = name;\n }\n };\n\n update('all');\n\n session['tip-session'].amount += amount;\n session['tip-week'].amount += amount;\n session['tip-month'].amount += amount;\n session['tip-total'].amount += amount;\n session['tip-count'].count += 1;\n session['tip-goal'].amount += amount;\n session['tip-recent'].unshift({\n name: name,\n amount: amount,\n createdAt: new Date().toISOString(),\n });\n session['tip-recent'] = (session['tip-recent'] || []).sort(orderByDateDesc);\n\n break;\n }\n case 'event:test': {\n break;\n }\n }\n\n break;\n }\n }\n }\n\n return { session, emulated: true };\n },\n /**\n * Simulates the onEventReceived event for a widget.\n * @param provider - The provider of the event (default is 'random').\n * @param type - The type of event to simulate (default is 'random').\n * @param options - Additional options to customize the event data.\n * @returns A Promise that resolves to the simulated onEventReceived event data, or null if the event type is not supported.\n * @example\n * ```javascript\n * // Simulate a random event\n * const randomEvent = await Local .generate.event.onEventReceived();\n *\n * // Simulate a Twitch message event with custom options\n * const twitchMessageEvent = await Local .generate.event.onEventReceived('twitch', 'message', { name: 'Streamer', message: 'Hello World!' });\n * ```\n */\n async onEventReceived(\n provider: Provider | 'random' = 'random',\n type:\n | StreamElements.Event.onEventReceived['listener']\n | 'random'\n | 'tip'\n | 'cheer'\n | 'follower'\n | 'raid'\n | 'subscriber' = 'random',\n options: Record<string, string | number | boolean> = {},\n ): Promise<StreamElements.Event.onEventReceived | null> {\n const available: Record<Provider, string[]> = {\n twitch: [\n 'message',\n 'follower-latest',\n 'cheer-latest',\n 'raid-latest',\n 'subscriber-latest',\n ],\n streamelements: ['tip-latest'],\n youtube: ['message', 'superchat-latest', 'subscriber-latest', 'sponsor-latest'],\n kick: [],\n facebook: [],\n };\n\n switch (provider) {\n default:\n case 'random': {\n var randomProvider = Helper.random.array(\n Object.keys(available).filter((e) => available[e as Provider].length),\n )[0] as Provider;\n var randomEvent = Helper.random.array(\n available[randomProvider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(randomProvider, randomEvent);\n }\n\n case 'twitch': {\n switch (\n type as\n | StreamElements.Event.Provider.Twitch.Events['listener']\n | 'random'\n | 'cheer'\n | 'follower'\n | 'raid'\n | 'subscriber'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var badges = await Helper.message.generateBadges(\n (options?.badges as Helper.message.BadgeOptions) ?? [],\n provider,\n );\n\n var emotes = Helper.message.findEmotesInText(message);\n var renderedText = Helper.message.replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Helper.random.color('hex');\n var userId =\n (options?.userId as string) ??\n Helper.random.number(10000000, 99999999).toString();\n var msgId = (options?.msgId as string) ?? Helper.random.uuid();\n var time = (options?.time as number) ?? Date.now();\n\n var channel = (options?.channel as string) ?? client.details.user.username;\n\n const event: StreamElements.Event.Provider.Twitch.Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n time: time,\n tags: {\n 'badge-info': `${badges.keys.map((key) => `${key}/${Helper.random.number(1, 5)}`).join(',')}`,\n 'badges': badges.keys.join('/1,'),\n\n 'mod': badges.keys.includes('moderator') ? '1' : '0',\n 'subscriber': badges.keys.includes('subscriber') ? '1' : '0',\n 'turbo': badges.keys.includes('turbo') ? '1' : '0',\n\n 'tmi-sent-ts': time.toString(),\n\n 'user-id': userId,\n 'user-type': '',\n\n 'color': color,\n 'display-name': name,\n 'emotes': '',\n\n 'client-nonce': Helper.random.string(16),\n 'flags': '',\n 'id': msgId,\n 'first-msg': '0',\n 'returning-chatter': '0',\n },\n nick: name.toLowerCase(),\n displayName: name,\n displayColor: color,\n channel: channel,\n text: message,\n isAction: false,\n userId: userId,\n msgId: msgId,\n badges: badges.badges,\n emotes: emotes,\n },\n renderedText: renderedText,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'cheer':\n case 'cheer-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 10000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Cheer & {\n event: { provider: Provider };\n } = {\n listener: 'cheer-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n message: message,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'cheer',\n originalEventName: 'cheer-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'follower':\n case 'follower-latest': {\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Follower & {\n event: { provider: Provider };\n } = {\n listener: 'follower-latest',\n event: {\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'follower',\n originalEventName: 'follower-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'raid':\n case 'raid-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(1, 100);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.Twitch.Raid & {\n event: { provider: Provider };\n } = {\n listener: 'raid-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'raid',\n originalEventName: 'raid-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var tier =\n (options?.tier as string) ??\n Helper.random.array(['1000', '2000', '3000', 'prime'])[0];\n var amount = (options?.amount as number) ?? Helper.random.number(1, 24);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var sender =\n (options?.sender as string) ??\n Helper.random.array(Data.names.filter((e) => e.length && e !== name))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as StreamElements.Event.Provider.Twitch.gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as StreamElements.Event.Provider.Twitch.community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as StreamElements.Event.Provider.Twitch.spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Helper.random.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: StreamElements.Event.Provider.Twitch.Subscriber & {\n event: { provider: Provider };\n } = {\n listener: 'subscriber-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n tier: tier as StreamElements.Event.Provider.Twitch.SubscriberTier,\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'delete-message': {\n const event: StreamElements.Event.Provider.Twitch.DeleteMessage & {\n event: { provider: Provider };\n } = {\n listener: 'delete-message',\n event: {\n msgId: (options?.id as string) ?? Helper.random.uuid(),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'delete-messages': {\n const event: StreamElements.Event.Provider.Twitch.DeleteMessages & {\n event: { provider: Provider };\n } = {\n listener: 'delete-messages',\n event: {\n userId:\n (options?.id as string) ??\n Helper.random.number(10000000, 99999999).toString(),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n\n case 'streamelements': {\n switch (\n type as\n | StreamElements.Event.Provider.StreamElements.Events['listener']\n | 'random'\n | 'tip'\n | 'mute'\n | 'unmute'\n | 'skip'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'tip':\n case 'tip-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.StreamElements.Tip & {\n event: { provider: Provider };\n } = {\n listener: 'tip-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'tip',\n originalEventName: 'tip-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'kvstore:update': {\n const event: StreamElements.Event.Provider.StreamElements.KVStore & {\n event: { provider: Provider };\n } = {\n listener: 'kvstore:update',\n event: {\n data: {\n key: `customWidget.${(options?.key as string) ?? 'sampleKey'}`,\n value: (options?.value as string) ?? 'sampleValue',\n },\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'bot:counter': {\n const event: StreamElements.Event.Provider.StreamElements.BotCounter & {\n event: { provider: Provider };\n } = {\n listener: 'bot:counter',\n event: {\n counter: (options?.counter as string) ?? 'sampleCounter',\n value: (options?.value as number) ?? Helper.random.number(0, 100),\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'mute':\n case 'unmute':\n case 'alertService:toggleSound': {\n var muted = (options?.muted as boolean) ?? !client.details.overlay.muted;\n\n const event: StreamElements.Event.Provider.StreamElements.AlertService & {\n event: { provider: Provider };\n } = {\n listener: 'alertService:toggleSound',\n event: {\n muted,\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'skip':\n case 'event:skip': {\n const event: StreamElements.Event.Provider.StreamElements.EventSkip & {\n event: { provider: Provider };\n } = {\n listener: 'event:skip',\n event: {\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n\n case 'youtube': {\n switch (\n type as\n | StreamElements.Event.Provider.YouTube.Events['listener']\n | 'random'\n | 'message'\n | 'superchat'\n | 'subscriber'\n | 'sponsor'\n ) {\n default:\n case 'random': {\n var randomEvent = Helper.random.array(\n available[provider],\n )[0] as StreamElements.Event.onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n const badges = await Helper.message.generateBadges(\n (options?.badges as Helper.message.BadgeOptions) ?? [],\n provider,\n );\n\n var emotes = Helper.message.findEmotesInText(message);\n var renderedText = Helper.message.replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Helper.random.color('hex');\n var userId =\n (options?.userId as string) ??\n Helper.random.number(10000000, 99999999).toString();\n var msgId = (options?.msgId as string) ?? Helper.random.uuid();\n var time = (options?.time as number) ?? Date.now();\n\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n\n var channel = (options?.channel as string) ?? client.details.user.username;\n\n const event: StreamElements.Event.Provider.YouTube.Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n kind: '',\n etag: '',\n id: '',\n snippet: {\n type: '',\n liveChatId: '',\n authorChannelId: channel,\n publishedAt: new Date().toISOString(),\n hasDisplayContent: true,\n displayMessage: message,\n textMessageDetails: {\n messageText: message,\n },\n },\n authorDetails: {\n channelId: channel,\n channelUrl: '',\n displayName: name,\n profileImageUrl: avatar,\n ...badges,\n },\n msgId: msgId,\n userId: userId,\n nick: name.toLowerCase(),\n badges: [],\n displayName: name,\n isAction: false,\n time: time,\n tags: [],\n displayColor: color,\n channel: channel,\n text: message,\n avatar: avatar,\n emotes: [],\n },\n renderedText: message,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.YouTube.Subscriber & {\n event: { provider: Provider };\n } = {\n listener: 'subscriber-latest',\n event: {\n avatar,\n displayName: name,\n name: name.toLowerCase(),\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'superchat':\n case 'superchat-latest': {\n var amount = (options?.amount as number) ?? Helper.random.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n\n const event: StreamElements.Event.Provider.YouTube.Superchat & {\n event: { provider: Provider };\n } = {\n listener: 'superchat-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n case 'sponsor':\n case 'sponsor-latest': {\n var tier =\n (options?.tier as string) ?? Helper.random.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Helper.random.number(1, 24);\n var avatar = (options?.avatar as string) ?? Helper.random.array(Data.avatars)[0];\n var name =\n (options?.name as string) ??\n Helper.random.array(Data.names.filter((e) => e.length))[0];\n var sender =\n (options?.sender as string) ??\n Helper.random.array(Data.names.filter((e) => e.length && e !== name))[0];\n var message =\n (options?.message as string) ??\n Helper.random.array(Data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as StreamElements.Event.Provider.YouTube.gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as StreamElements.Event.Provider.YouTube.community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as StreamElements.Event.Provider.YouTube.spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Helper.random.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: StreamElements.Event.Provider.YouTube.Sponsor & {\n event: { provider: Provider };\n } = {\n listener: 'sponsor-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Helper.random.uuid(),\n sessionTop: false,\n type: 'sponsor',\n originalEventName: 'sponsor-latest',\n provider,\n },\n // @ts-ignore\n emulated: true,\n };\n\n return event;\n }\n }\n }\n }\n },\n },\n };\n\n export const emulate = {\n twitch: {\n message(\n data: Partial<{\n name: string;\n message: string;\n badges: Helper.message.BadgeOptions;\n color: string;\n userId: string;\n msgId: string;\n channel: string;\n time: number;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'message',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n deleteMessage(msgId: string) {\n if (!msgId || typeof msgId !== 'string') return;\n\n const event: StreamElements.Event.Provider.Twitch.DeleteMessage = {\n listener: 'delete-message',\n event: {\n msgId: msgId,\n },\n };\n\n Local.emulate.send('onEventReceived', event);\n },\n deleteMessages(userId: string) {\n if (!userId || typeof userId !== 'string') return;\n\n const event: StreamElements.Event.Provider.Twitch.DeleteMessages = {\n listener: 'delete-messages',\n event: {\n userId: userId,\n },\n };\n\n Local.emulate.send('onEventReceived', event);\n },\n follower(\n data: Partial<{\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'follower-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n raid(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'raid-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n cheer(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n message: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'cheer-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(\n data: Partial<{\n tier: '1000' | '2000' | '3000' | 'prime';\n amount: number;\n avatar: string;\n name: string;\n sender: string;\n message: string;\n subType: 'default' | 'gift' | 'community' | 'spam';\n }> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'twitch',\n 'subscriber-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n streamelements: {\n tip(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'streamelements',\n 'tip-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n youtube: {\n message(\n data: Partial<{\n name: string;\n message: string;\n badges: Helper.message.BadgeOptions;\n color: string;\n userId: string;\n msgId: string;\n channel: string;\n time: number;\n avatar: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'message',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(\n data: Partial<{\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'subscriber-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n superchat(\n data: Partial<{\n amount: number;\n avatar: string;\n name: string;\n }> = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'superchat-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n sponsor(\n data: Partial<{\n tier: '1000' | '2000' | '3000';\n amount: number;\n avatar: string;\n name: string;\n sender: string;\n message: string;\n subType: 'default' | 'gift' | 'community' | 'spam';\n }> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {},\n ) {\n Local.generate.event\n .onEventReceived(\n 'youtube',\n 'sponsor-latest',\n data as { [key: string]: string | number | boolean },\n )\n .then((event) => {\n if (event) {\n Local.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n kick: {},\n facebook: {},\n\n send<T extends 'onEventReceived' | 'onSessionUpdate' | 'onWidgetLoad'>(\n listener: T,\n event: T extends 'onEventReceived'\n ? StreamElements.Event.onEventReceived\n : T extends 'onSessionUpdate'\n ? StreamElements.Event.onSessionUpdate\n : StreamElements.Event.onWidgetLoad,\n ): void {\n if (!Local.queue) {\n logger.warn('Local queue is not initialized.');\n\n window.dispatchEvent(new CustomEvent(listener, { detail: event }));\n\n return;\n }\n\n switch (listener) {\n case 'onEventReceived': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onEventReceived,\n session: listener === 'onEventReceived' ? true : undefined,\n });\n\n break;\n }\n case 'onSessionUpdate': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onSessionUpdate,\n });\n\n break;\n }\n case 'onWidgetLoad': {\n Local.queue.enqueue({\n listener,\n data: event as StreamElements.Event.onWidgetLoad,\n });\n\n break;\n }\n }\n },\n };\n\n export async function start(\n fieldsFile: string[] = ['fields.json', 'cf.json', 'field.json', 'customfields.json'],\n dataFiles: string[] = ['data.json', 'fielddata.json', 'fd.json', 'DATA.json'],\n session?: StreamElements.Session.Data,\n ) {\n const localFiles = {\n fields: fieldsFile.find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n data: dataFiles.find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n };\n\n const data: Record<string, string | number | boolean> = await fetch(\n './' + (localFiles.data ?? 'data.json'),\n {\n cache: 'no-store',\n },\n )\n .then((res) => res.json())\n .catch(() => ({}));\n\n await fetch('./' + (localFiles.fields ?? 'fields.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .then(async (customfields: Record<string, StreamElements.CustomField.Schema>) => {\n const fields = Object.entries(customfields)\n .filter(([_, { value }]) => value != undefined)\n .reduce(\n (acc, [key, { value }]) => {\n if (data && data[key] !== undefined) value = data[key];\n\n acc[key] = value;\n\n return acc;\n },\n {\n ...data,\n } as Record<string, StreamElements.CustomField.Value>,\n );\n\n const load = await Local.generate.event.onWidgetLoad(\n fields,\n await Local.generate.session.get(session),\n );\n\n window.dispatchEvent(new CustomEvent('onWidgetLoad', { detail: load }));\n });\n }\n}\n","import { EventProvider } from './EventProvider.js';\nimport { Client } from '../client/client.js';\nimport { logger } from '../main.js';\n\ntype QueueEvents<T> = {\n load: [];\n cancel: [];\n update: [\n queue: QueueItem<T>[],\n priorityQueue: QueueItem<T>[],\n history: QueueItem<T>[],\n timeouts: Array<ReturnType<typeof setTimeout>>,\n ];\n process: [item: QueueItem<T>, queue: useQueue<T>];\n};\n\ntype QueueProps = {\n isoDate: string;\n isLoop: boolean;\n isPriority: boolean;\n isImmediate: boolean;\n};\n\ntype QueueItem<T> = { value: T } & QueueProps;\n\ntype QueueProcessor<T> = (this: useQueue<T>, item: T, queue: useQueue<T>) => Promise<any>;\n\ntype QueueDuration = number | boolean | undefined;\n\ninterface QueueOptions<T> {\n /**\n * Duration between processing each item in milliseconds. Set to `0` or `false` for immediate processing.\n */\n duration?: QueueDuration | 'client';\n /**\n * Function to process each item in the queue.\n */\n processor: QueueProcessor<T>;\n}\n\n/**\n * A utility class to manage a queue of items with support for priority, looping, and immediate processing.\n * @template T - The type of items in the queue.\n * @extends EventProvider<QueueEvents<T>>\n * @example\n * ```javascript\n * const myQueue = new useQueue({\n * duration: 1000,\n * processor: async function (item) {\n * console.log('Processing item:', item);\n * },\n * });\n *\n * myQueue.enqueue('Item 1');\n * myQueue.enqueue('Item 2', { isPriority: true });\n * ```\n */\nexport class useQueue<T> extends EventProvider<QueueEvents<T>> {\n queue: QueueItem<T>[] = [];\n priorityQueue: QueueItem<T>[] = [];\n history: QueueItem<T>[] = [];\n\n private timeouts: Array<ReturnType<typeof setTimeout>> = [];\n\n public running: boolean = false;\n\n public duration: QueueDuration = undefined;\n\n private loaded: boolean = false;\n\n public processor!: QueueProcessor<T>;\n\n private readonly clientWaitRetryDelay = 50;\n\n constructor(options: QueueOptions<T>) {\n super();\n\n if (!options.processor || typeof options.processor !== 'function') {\n throw new Error('A valid processor function must be provided to useQueue.');\n }\n\n this.processor = options.processor;\n\n if (options.duration !== 'client') this.duration = options.duration ?? 0;\n\n this.waitForClientAndBindLoad(options.duration);\n }\n\n private waitForClientAndBindLoad(duration: QueueDuration | 'client' = this.duration) {\n if (!(window?.client instanceof Client)) {\n setTimeout(() => this.waitForClientAndBindLoad(duration), this.clientWaitRetryDelay);\n\n return;\n }\n\n window.client.on('load', () => {\n if (duration === 'client')\n this.duration = (window.client.fields?.widgetDuration ?? 0) as number;\n\n this.emit('load');\n\n this.loaded = true;\n });\n }\n\n /**\n * Enqueue an item or multiple items into the queue with optional processing options.\n * @param value - The item or items to be enqueued. Can be a single value of type T or an array of objects containing the value and options.\n * @param options - Optional processing options for the item(s) being enqueued. Ignored if an array of items is provided, as each item can have its own options.\n * @returns The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.enqueue('Single Item', { isPriority: true });\n * myQueue.enqueue([\n * { value: 'Item 1', options: { isPriority: true } },\n * { value: 'Item 2', options: { isLoop: true } }\n * ]);\n * ```\n */\n public enqueue(value: T, options?: Partial<QueueProps>): this;\n public enqueue(items: { value: T; options?: Partial<QueueProps> }[]): this;\n public enqueue(\n valueOrItems: T | { value: T; options?: Partial<QueueProps> }[],\n options: Partial<QueueProps> = {},\n ): this {\n const hadItems = this.hasItems();\n\n const entries: { value: T; options: Partial<QueueProps> }[] = Array.isArray(valueOrItems)\n ? valueOrItems.map((entry) => ({ value: entry.value, options: entry.options ?? {} }))\n : [{ value: valueOrItems as T, options }];\n\n for (const entry of entries) {\n const item: QueueItem<T> = {\n isoDate: new Date().toISOString(),\n isLoop: entry.options?.isLoop ?? false,\n isPriority: entry.options?.isPriority ?? false,\n isImmediate: entry.options?.isImmediate ?? false,\n value: entry.value,\n };\n\n if (item.isPriority && item.isImmediate) {\n this.cancel();\n this.priorityQueue.unshift(item);\n } else {\n const targetQueue = item.isPriority ? this.priorityQueue : this.queue;\n\n targetQueue.push(item);\n }\n }\n\n // Always process immediately if it's not running and the queue was empty before\n if (this.running === false && hadItems === false) {\n this.run();\n }\n\n this.emit('update', this.queue, this.priorityQueue, this.history, this.timeouts);\n\n return this;\n }\n\n private async run() {\n if (!this.hasItems()) {\n this.running = false;\n return;\n }\n\n this.running = true;\n\n await this.next();\n\n if (typeof this.duration === 'number' && this.duration > 0) {\n this.timeouts.push(setTimeout(() => this.run(), this.duration));\n } else if (this.duration === 0 || (this.duration !== -1 && this.duration !== false)) {\n this.run();\n }\n }\n\n private async next() {\n const nextItem =\n this.priorityQueue.length > 0 ? this.priorityQueue.shift() : this.queue.shift();\n\n if (!nextItem) {\n this.running = false;\n\n return;\n }\n\n try {\n await this.processor.apply(this, [nextItem.value, this]);\n\n this.emit('process', nextItem, this);\n } catch (error) {\n logger.error(\n `Error during item processing: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n this.history.push(nextItem);\n\n const targetQueue = nextItem.isPriority ? this.priorityQueue : this.queue;\n\n if (nextItem.isLoop) targetQueue.push(nextItem);\n }\n\n /**\n * Resume processing the queue if it is paused. If the queue is already running, it will be restarted, which can be useful if new items have been added or if you want to reset the processing timer.\n * If the queue was empty before, it will start processing immediately.\n * @returns - The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.resume();\n * ```\n */\n public resume() {\n if (this.running) {\n this.cancel();\n }\n\n if (this.hasItems()) this.run();\n\n return this;\n }\n\n /**\n * Update the queue's state with new values. This can be used to replace the current queue, priority queue, history, or timeouts with new data. If the queue is not currently running and there are items in the queue after the update, it will start processing immediately.\n * @param save - An object containing the new state for the queue, priority queue, history, and timeouts. Each property is optional, and if not provided, the current state will be retained.\n * @returns - The instance of the queue for chaining.\n * @example\n * ```javascript\n * myQueue.update({\n * queue: newQueueItems,\n * priorityQueue: newPriorityItems,\n * history: newHistory,\n * });\n * ```\n */\n public update(save: Partial<useQueue<T>>): this {\n this.queue = save.queue ?? this.queue;\n this.priorityQueue = save.priorityQueue ?? this.priorityQueue;\n this.history = save.history ?? this.history;\n\n if (this.hasItems() && this.running === false) {\n window.client?.on('load', () => this.run());\n }\n\n return this;\n }\n\n /**\n * Cancel all pending timeouts and stop the queue from processing further items. This will clear any scheduled processing and prevent any new items from being processed until `resume()` is called again. The current state of the queue, priority queue, and history will be retained, allowing you to resume processing later without losing any data.\n */\n public cancel() {\n if (this.running) {\n this.timeouts.forEach((timeout) => clearTimeout(timeout));\n this.timeouts = [];\n this.running = false;\n\n this.emit('cancel');\n }\n }\n\n /**\n * Check if there are any items in the queue or priority queue. This method returns `true` if there are items waiting to be processed in either the main queue or the priority queue, and `false` if both queues are empty.\n * @returns - A boolean indicating whether there are items in the queue or priority queue.\n */\n public hasItems(): boolean {\n return this.queue.length > 0 || this.priorityQueue.length > 0;\n }\n\n public override on<K extends keyof QueueEvents<T>>(\n eventName: K,\n callback: (this: useQueue<T>, ...args: QueueEvents<T>[K]) => void,\n ): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { USE_SE_API } from '../main.js';\nimport { StreamElements } from '../types/index.js';\nimport { EventProvider } from './EventProvider.js';\n\ntype MessageMap = Record<string, any>;\n\ntype MessageTuple<T extends MessageMap> = {\n [K in keyof T]: [key: K, data: T[K]];\n}[keyof T];\n\ntype BaseEvents<T extends MessageMap> = {\n load: [];\n message: MessageTuple<T>;\n};\n\ntype UseCommsOptions = {\n id?: string;\n};\n\ntype UseCommItem<T extends MessageMap> = {\n nonce: string;\n key: keyof T;\n value: T[keyof T];\n timestamp: string;\n};\n\nexport const usedComms: Array<useComms<any>> = [];\n\n/**\n * A module for handling communications between different widgets inside streamelements.\n * @example\n * ```ts\n * type CommsMessages = {\n * hello: { loaded: boolean };\n * update: { value: number };\n * reload: {};\n * tags: string[];\n * }\n *\n * const comms = new useComms<CommsMessages>();\n *\n * comms.on('message', (message, data) => {\n * switch (message) {\n * case 'hello': {}\n * case 'update': {}\n * case 'reload': {}\n * case 'tags': {}\n * }\n * })\n * ```\n */\nexport class useComms<T extends MessageMap> extends EventProvider<BaseEvents<T>> {\n private SE_API: StreamElements.SE_API | null = null;\n\n public id: string = 'widget communications';\n public loaded: boolean = false;\n\n public history: Array<UseCommItem<T>> = [];\n public detected = new Set<string>();\n\n constructor(options: UseCommsOptions = {}) {\n super();\n\n this.id = options.id || this.id;\n\n usedComms.push(this);\n\n USE_SE_API?.then(async (se) => {\n this.loaded = true;\n this.SE_API = se;\n\n Promise.all([\n async () => {\n const history = await se.store.get<Array<UseCommItem<T>>>(this.id);\n\n if (history) {\n this.history = history.slice(-10);\n }\n },\n async () => {\n const detected = await se.store.get<string[]>(this.id + '_detected');\n\n if (detected) {\n this.detected = new Set(detected);\n }\n },\n ]);\n });\n }\n\n public async send<K extends keyof T>(key: K, data: T[K]) {\n if (this.SE_API) {\n // this.SE_API.store.set(this.id, { message: key, data });\n\n const message = {\n nonce: Math.random().toString(36).substring(2),\n key,\n value: data,\n timestamp: new Date().toISOString(),\n };\n\n this.history.push(message);\n\n this.SE_API.store.set(this.id, this.history);\n this.SE_API.store.set(this.id + '_detected', Array.from(this.detected));\n }\n }\n\n public update(history: Array<UseCommItem<T>>) {\n if (!history.length) {\n return;\n }\n\n this.history = history;\n\n const messages = history.filter((message) => !this.detected.has(message.nonce));\n\n messages.forEach((message) => {\n this.detected.add(message.nonce);\n\n this.emit('message', message.key, message.value);\n });\n }\n\n public override on<K extends keyof BaseEvents<T>>(\n eventName: K,\n callback: (this: useComms<T>, ...args: BaseEvents<T>[K]) => void,\n ) {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { Client, ClientStorageOptions } from './client.js';\nimport { usedStorages } from '../modules/useStorage.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\nimport { logger } from '../main.js';\nimport { Local } from '../local/index.js';\nimport { useQueue } from '../modules/useQueue.js';\nimport { Helper } from '../helper/index.js';\nimport { usedComms } from '../modules/useComms.js';\n\nif (typeof window !== undefined) {\n window.addEventListener('load', () => {\n if (window.client instanceof Client) {\n Local.queue = new useQueue({\n duration: 'client',\n processor: async function processor(received) {\n window.dispatchEvent(new CustomEvent(received.listener, { detail: received.data }));\n\n if (received.listener === 'onEventReceived' && received.session) {\n const sessionEvent = await Local.generate.event.onSessionUpdate(\n client.session,\n Helper.event.parseProvider(received.data),\n );\n\n window.dispatchEvent(new CustomEvent('onSessionUpdate', { detail: sessionEvent }));\n }\n },\n });\n }\n });\n\n window.addEventListener('onWidgetLoad', async (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.fields = detail.fieldData;\n client.session = detail.session.data;\n\n client.details = {\n ...client.details,\n user: detail.channel,\n currency: detail.currency,\n overlay: detail.overlay,\n };\n\n if (detail.channel.id && !detail.emulated) {\n await fetch(`https://api.streamelements.com/kappa/v2/channels/${detail.channel.id}/`)\n .then((res) => res.json())\n .then((profile) => {\n if (profile.provider) {\n client.details.provider = profile.provider;\n\n return profile.provider;\n } else {\n client.details.provider = 'local';\n }\n })\n .catch(() => {\n client.details.provider = 'local';\n });\n } else {\n client.details.provider = 'local';\n }\n\n client.emit('load', detail);\n\n if (client.debug) {\n logger.received('Widget loaded!', data.detail);\n\n const fieldData = data.detail.fieldData;\n\n if (Object.keys(fieldData).length) logger.received('Field data:', fieldData);\n }\n\n client.loaded = true;\n\n client.storage.on('load', (data) => {\n if (client.debug && data) {\n logger.debug(\n '[Client]',\n 'Storage loaded for client',\n `\"${client.id}\";`,\n `Provider: \"${client.details.provider}\";`,\n data,\n );\n } else if (client.debug) {\n logger.debug(\n '[Client]',\n 'Storage loaded for client',\n `\"${client.id}\";`,\n `Provider: \"${client.details.provider}\";`,\n 'No data found.',\n );\n }\n\n if (data) {\n const clearExpired = <T extends Record<string, ClientStorageOptions<string>>>(\n data: T,\n ) => {\n const now = Date.now();\n const cleanedData: any = {};\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const entry = data[key];\n\n if (entry.expire && entry.expire > now) {\n cleanedData[key] = entry;\n }\n }\n }\n\n return cleanedData as T;\n };\n\n const users = clearExpired(data['user'] || {});\n const avatars = clearExpired(data['avatar'] || {});\n const pronouns = clearExpired(data['pronoun'] || {});\n const emotes = clearExpired(data['emote'] || {});\n\n client.storage.update({\n user: users,\n avatar: avatars,\n pronoun: pronouns,\n emote: emotes,\n });\n }\n\n if (detail.channel.providerId.length) {\n client.storage.add(`avatar.${detail.channel.providerId.toLowerCase()}`, {\n value: detail.channel.avatar,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.avatar * 60 * 1000,\n });\n }\n });\n }\n });\n\n window.addEventListener('onSessionUpdate', (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.session = detail.session;\n\n client.emit('session', detail.session);\n\n if (client.debug) {\n logger.debug('[Client]', 'Session updated', detail.session);\n }\n }\n });\n\n window.addEventListener('onEventReceived', ({ detail }) => {\n if (window.client instanceof Client) {\n const received = Helper.event.parseProvider(detail);\n\n switch (received.provider) {\n case 'streamelements': {\n const data = received.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const event = data.event;\n\n break;\n }\n case 'event:skip': {\n const event = data.event;\n\n break;\n }\n case 'event:test': {\n switch (data.event.listener) {\n case 'widget-button': {\n const event = data.event;\n\n Button.execute(event.field, event.value);\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n break;\n }\n\n // ... alot more\n }\n\n break;\n }\n case 'kvstore:update': {\n const event = data.event;\n\n if (usedStorages.length) {\n var storage = usedStorages.find(\n (s) =>\n s.id === event.data.key.replace('customWidget.', '') || s.id === event.data.key,\n );\n\n if (storage) {\n // @ts-ignore\n storage.update(event.data.value);\n }\n }\n\n if (usedComms.length) {\n const comm = usedComms.find(\n (c) =>\n c.id === event.data.key.replace('customWidget.', '') || c.id === event.data.key,\n );\n\n if (comm) {\n // @ts-ignore\n comm.update(event.data.value);\n }\n }\n\n break;\n }\n case 'bot:counter': {\n const event = data.event;\n\n break;\n }\n case 'alertService:toggleSound': {\n const event = data.event;\n\n client.details.overlay.muted = Boolean(event.muted);\n\n break;\n }\n }\n\n window.client.emit('event', 'streamelements', received.data);\n\n break;\n }\n case 'twitch': {\n const data = received.data;\n\n switch (data.listener) {\n case 'delete-message': {\n const event = data.event;\n\n break;\n }\n case 'delete-messages': {\n const event = data.event;\n\n break;\n }\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'twitch', data: data });\n\n break;\n }\n case 'follower-latest': {\n const event = data.event;\n\n break;\n }\n case 'cheer-latest': {\n const event = data.event;\n\n break;\n }\n case 'subscriber-latest': {\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // gift\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n const event = data.event;\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'raid-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n window.client.emit('event', 'twitch', received.data);\n\n break;\n }\n case 'youtube': {\n const data = received.data;\n\n switch (data.listener) {\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'youtube', data: data });\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n\n break;\n }\n case 'sponsor-latest': {\n const event = data.event;\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // gift\n const event = data.event;\n } else if (\n data.event.gifted &&\n !data.event.bulkGifted &&\n data.event.isCommunityGift\n ) {\n // community gift spam\n const event = data.event;\n } else if (\n !data.event.gifted &&\n data.event.bulkGifted &&\n !data.event.isCommunityGift\n ) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'superchat-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n window.client.emit('event', 'youtube', received.data);\n\n break;\n }\n case 'kick': {\n const data = received.data;\n\n window.client.emit('event', 'kick', received.data);\n\n break;\n }\n case 'facebook': {\n const data = received.data;\n\n window.client.emit('event', 'facebook', received.data);\n\n break;\n }\n }\n\n const excludeListeners: Array<(typeof received.data)['listener']> = [\n 'bot:counter',\n 'alertService:toggleSound',\n 'event',\n 'event:skip',\n 'event:test',\n 'kvstore:update',\n ];\n\n if (client.debug && !excludeListeners.some((e) => e === received.data.listener)) {\n logger.received(\n '[Client]',\n `Event ${received.data.listener} received from ${received.provider}`,\n received.data.event,\n );\n }\n }\n });\n}\n","import { StreamElements } from '../types/streamelements/main.js';\n\nconst LOCAL_SE_API: StreamElements.SE_API & { store: { list: Record<string, any> } } = {\n getOverlayStatus: () => {\n return {\n isEditorMode: false,\n muted: false,\n };\n },\n resumeQueue: () => {},\n responses: {} as Record<string, any>,\n sendMessage(message: string, data: object) {},\n counters: {\n get(key: string): number | null {\n return null;\n },\n },\n sanitize(message: string): string {\n return message;\n },\n cheerFilter(message: string): string {\n return message;\n },\n setField(key: string, value: string | number | boolean | undefined, reload: boolean) {},\n\n store: {\n set: function (name: string, obj: any) {\n this.list[name] = obj;\n\n localStorage.setItem('SE_API-STORE', JSON.stringify(LOCAL_SE_API.store.list));\n },\n get: async function (name: string) {\n if (this.list[name]) return this.list[name];\n else return null;\n },\n list: {} as Record<string, any>,\n },\n};\n\nexport async function initializeLocalSEAPI() {\n let lastStore = localStorage.getItem('SE_API-STORE') ?? '';\n\n let result = lastStore ? JSON.parse(lastStore) : {};\n\n LOCAL_SE_API.store.list = result;\n\n return LOCAL_SE_API;\n}\n","export namespace Alejo {\n export namespace Pronouns {\n export type name =\n | 'hehim'\n | 'sheher'\n | 'theythem'\n | 'shethem'\n | 'hethem'\n | 'heshe'\n | 'xexem'\n | 'faefaer'\n | 'vever'\n | 'aeaer'\n | 'ziehir'\n | 'perper'\n | 'eem'\n | 'itits';\n\n export type display =\n | 'He/Him'\n | 'She/Her'\n | 'They/Them'\n | 'She/They'\n | 'He/They'\n | 'He/She'\n | 'Xe/Xem'\n | 'Fae/Faer'\n | 'Ve/Ver'\n | 'Ae/Aer'\n | 'Zie/Hir'\n | 'Per/Per'\n | 'E/Em'\n | 'It/Its';\n\n export enum map {\n hehim = 'He/Him',\n sheher = 'She/Her',\n theythem = 'They/Them',\n shethem = 'She/They',\n hethem = 'He/They',\n heshe = 'He/She',\n xexem = 'Xe/Xem',\n faefaer = 'Fae/Faer',\n vever = 'Ve/Ver',\n aeaer = 'Ae/Aer',\n ziehir = 'Zie/Hir',\n perper = 'Per/Per',\n eem = 'E/Em',\n itits = 'It/Its',\n }\n }\n\n export async function list(): Promise<typeof Pronouns.map> {\n try {\n const data = (await fetch('https://pronouns.alejo.io/api/pronouns').then((res) => res.json())) as {\n display: Pronouns.display;\n name: Pronouns.name;\n }[];\n\n if (Array.isArray(data) && data.length) {\n const built = Object.fromEntries(data.map(({ name, display }) => [name, display] as const)) as Record<Pronouns.name, Pronouns.display>;\n\n return { ...Pronouns.map, ...built } as typeof Pronouns.map;\n }\n } catch {}\n\n return { ...Pronouns.map } as typeof Pronouns.map;\n }\n\n export type user = {\n id: string;\n login: string;\n pronoun_id: Pronouns.name;\n };\n\n export async function get(username: string) {\n if (!username) throw new Error('Username is required to fetch Alejo data.');\n\n username = username.toLowerCase();\n\n if (username in client.storage.data.pronoun && client.storage.data.pronoun[username].expire > Date.now()) {\n return client.storage.data.pronoun[username].value;\n } else {\n try {\n const data = await fetch(`https://pronouns.alejo.io/api/users/${username}`)\n .then((res) => res.json())\n .then(([data]) => data as Alejo.user | undefined);\n\n if (data) {\n client.storage.add(`pronoun.${username}`, {\n value: data.pronoun_id,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.pronoun * 60 * 1000,\n });\n\n return client.storage.data.pronoun[username].value ?? data.pronoun_id;\n }\n } catch (error) {\n throw new Error(`Failed to fetch pronoun data for user \"${username}\": ${error instanceof Error ? error.message : error}`);\n }\n }\n }\n}\n","import { EventProvider } from '../modules/EventProvider.js';\nimport { logger } from '../main.js';\n\nimport type {\n OnErrorHandler,\n OnCommandHandler,\n OnChatHandler,\n OnWhisperHandler,\n OnMessageDeletedHandler,\n OnJoinHandler,\n OnPartHandler,\n OnHostedHandler,\n OnRaidHandler,\n OnSubHandler,\n OnResubHandler,\n OnSubGiftHandler,\n OnSubMysteryGiftHandler,\n OnGiftSubContinueHandler,\n OnCheerHandler,\n OnRewardHandler,\n OnConnectedHandler,\n OnReconnectHandler,\n OnChatModeHandler,\n ComfyJSInstance,\n} from 'comfy.js';\nimport { Local } from '../local/index.js';\nimport { Helper } from '../helper/index.js';\n\ntype ComfyEvents = {\n load: [instance: ComfyJSInstance];\n error: Parameters<OnErrorHandler>;\n command: Parameters<OnCommandHandler>;\n chat: Parameters<OnChatHandler>;\n whisper: Parameters<OnWhisperHandler>;\n messageDeleted: Parameters<OnMessageDeletedHandler>;\n join: Parameters<OnJoinHandler>;\n part: Parameters<OnPartHandler>;\n hosted: Parameters<OnHostedHandler>;\n raid: Parameters<OnRaidHandler>;\n sub: Parameters<OnSubHandler>;\n resub: Parameters<OnResubHandler>;\n subGift: Parameters<OnSubGiftHandler>;\n subMysteryGift: Parameters<OnSubMysteryGiftHandler>;\n giftSubContinue: Parameters<OnGiftSubContinueHandler>;\n cheer: Parameters<OnCheerHandler>;\n chatMode: Parameters<OnChatModeHandler>;\n reward: Parameters<OnRewardHandler>;\n connected: Parameters<OnConnectedHandler>;\n reconnect: Parameters<OnReconnectHandler>;\n};\n\n/**\n * Creates and manages a ComfyJS instance for Twitch chat interaction.\n */\nexport class useComfyJs extends EventProvider<ComfyEvents> {\n public instance!: ComfyJSInstance;\n\n public username!: string;\n public password?: string;\n public channels!: string[];\n\n public isDebug: boolean = false;\n private init: boolean = false;\n\n public emulate: boolean = false;\n\n /**\n * Initializes a new ComfyJS instance and connects to Twitch chat.\n * @param options - Configuration options for ComfyJS instance.\n * @param emulate - Whether to emulate chat messages in the Local module.\n */\n constructor(\n options: {\n username: string;\n password?: string;\n channels: string[];\n isDebug?: boolean;\n init?: boolean;\n },\n emulate: boolean,\n ) {\n super();\n\n this.username = options.username;\n this.password = options.password;\n this.channels = options.channels;\n this.isDebug = Boolean(options.isDebug);\n this.init = Boolean(options.init);\n this.emulate = emulate;\n\n this.load()\n .then((comfyJS) => {\n this.instance = comfyJS;\n\n this.emit('load', comfyJS);\n this.connect();\n })\n .catch((err) => {\n logger.error('useComfyJs: Failed to load ComfyJS', err);\n });\n }\n\n /**\n * Loads the ComfyJS script if not already loaded.\n * @returns A promise that resolves to the ComfyJS instance.\n */\n private load(): Promise<ComfyJSInstance> {\n if (typeof window.ComfyJS === 'undefined' || !window.ComfyJS) {\n return new Promise((resolve, reject) => {\n if (this.emulate && !client) {\n return reject(\n new Error('useComfyJs: Cannot emulate chat messages without a Client instance.'),\n );\n }\n\n const script = document.createElement('script');\n\n script.src = 'https://cdn.jsdelivr.net/npm/comfy.js@1.1.29/dist/comfy.min.js';\n script.type = 'text/javascript';\n script.async = true;\n\n script.onload = () => resolve(window.ComfyJS as ComfyJSInstance);\n script.onerror = (err) => reject(err);\n\n document.head.appendChild(script);\n });\n } else return Promise.resolve(window.ComfyJS as ComfyJSInstance);\n }\n\n /**\n * Connects event handlers to the ComfyJS instance.\n */\n private connect() {\n this.instance.onError = (error) => {\n this.emit('error', error);\n\n if (client.debug) logger.error('[Client]', 'ComfyJS Error:', error);\n };\n\n this.instance.onCommand = (user, command, message, flags, extra) => {\n this.emit('command', user, command, message, flags, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Command: !${command} ${message} (User: ${user})`);\n\n if (this.emulate) {\n const roles = {\n ...flags,\n broadcaster: flags.broadcaster,\n moderator: flags.mod,\n vip: flags.vip,\n subscriber: flags.subscriber,\n founder: flags.founder,\n };\n\n const data = {\n name: user,\n message: `!${command} ${message}`,\n badges: Object.entries(roles)\n .map(([role, hasRole]) => (hasRole ? role : null))\n .filter(Boolean) as Helper.message.BadgeOptions,\n color: extra.userColor,\n time: new Date(extra.timestamp).getTime(),\n userId: extra.userId,\n msgId: extra.id,\n channel: extra.channel,\n };\n\n Local.emulate.twitch.message(data);\n }\n };\n this.instance.onChat = (user, message, flags, self, extra) => {\n this.emit('chat', user, message, flags, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Chat: ${message} (User: ${user})`);\n\n if (this.emulate) {\n const roles = {\n ...flags,\n ...extra.userBadges,\n broadcaster: flags.broadcaster,\n moderator: flags.mod,\n vip: flags.vip,\n subscriber: flags.subscriber,\n founder: flags.founder,\n };\n\n Local.emulate.twitch.message({\n name: user,\n message: message,\n badges: Object.entries(roles)\n .map(([role, hasRole]) => (hasRole ? role : null))\n .filter(Boolean) as Helper.message.BadgeOptions,\n color: extra.userColor,\n time: new Date(extra.timestamp).getTime(),\n userId: extra.userId,\n msgId: extra.id,\n channel: extra.channel,\n });\n }\n };\n this.instance.onWhisper = (user, message, flags, self, extra) => {\n this.emit('whisper', user, message, flags, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Whisper: ${message} (User: ${user})`);\n };\n this.instance.onMessageDeleted = (id, extra) => {\n this.emit('messageDeleted', id, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Message Deleted: ${id}`);\n\n if (this.emulate) {\n Local.emulate.twitch.deleteMessage(id);\n }\n };\n this.instance.onJoin = (user, self, extra) => {\n this.emit('join', user, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Join: ${user}`);\n };\n this.instance.onPart = (user, self, extra) => {\n this.emit('part', user, self, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Part: ${user}`);\n };\n this.instance.onHosted = (user, viewers, autohost, extra) => {\n this.emit('hosted', user, viewers, autohost, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Hosted: ${user} (${viewers} viewers)`);\n };\n this.instance.onRaid = (user, viewers, extra) => {\n this.emit('raid', user, viewers, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Raid: ${user} (${viewers} viewers)`);\n\n if (this.emulate) {\n Local.emulate.twitch.raid({\n name: user,\n amount: viewers,\n });\n }\n };\n this.instance.onSub = (user, message, subTierInfo, extra) => {\n this.emit('sub', user, message, subTierInfo, extra);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Sub: ${user} (${subTierInfo.plan})`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: user,\n message: message,\n tier: tier,\n subType: 'default',\n });\n }\n };\n this.instance.onResub = (user, message, streakMonths, cumulativeMonths, subTierInfo, extra) => {\n this.emit('resub', user, message, streakMonths, cumulativeMonths, subTierInfo, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Resub: ${user} (${cumulativeMonths} months)`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: user,\n message: message,\n tier: tier,\n amount: cumulativeMonths,\n subType: 'default',\n });\n }\n };\n this.instance.onSubGift = (\n gifterUser,\n streakMonths,\n recipientUser,\n senderCount,\n subTierInfo,\n extra,\n ) => {\n this.emit(\n 'subGift',\n gifterUser,\n streakMonths,\n recipientUser,\n senderCount,\n subTierInfo,\n extra,\n );\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Sub Gift: ${gifterUser} gifted ${senderCount} subs`);\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: recipientUser,\n message: '',\n sender: gifterUser,\n tier,\n amount: senderCount,\n subType: 'gift',\n });\n }\n };\n this.instance.onSubMysteryGift = (gifterUser, numbOfSubs, senderCount, subTierInfo, extra) => {\n this.emit('subMysteryGift', gifterUser, numbOfSubs, senderCount, subTierInfo, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Sub Mystery Gift: ${gifterUser} gifted ${numbOfSubs} subs`,\n );\n\n if (this.emulate) {\n const tier = subTierInfo.plan === 'Prime' ? 'prime' : subTierInfo.plan;\n\n Local.emulate.twitch.subscriber({\n name: gifterUser,\n message: '',\n amount: numbOfSubs,\n tier: tier,\n subType: 'community',\n });\n }\n };\n this.instance.onGiftSubContinue = (user, sender, extra) => {\n this.emit('giftSubContinue', user, sender, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Gift Sub Continue: ${user} continued their gifted sub from ${sender}`,\n );\n\n if (this.emulate) {\n Local.emulate.twitch.subscriber({\n name: user,\n message: '',\n sender: sender,\n tier: '1000',\n subType: 'gift',\n });\n }\n };\n this.instance.onCheer = (user, message, bits, flags, extra) => {\n this.emit('cheer', user, message, bits, flags, extra);\n\n if (client.debug)\n logger.debug('[Client]', `ComfyJS Cheer: ${user} cheered ${bits} bits - ${message}`);\n\n if (this.emulate) {\n Local.emulate.twitch.cheer({\n name: user,\n message: message,\n amount: bits,\n });\n }\n };\n this.instance.onChatMode = (flags, channel) => {\n this.emit('chatMode', flags, channel);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Chat Mode Changed on ${channel}`);\n };\n this.instance.onReward = (user, reward, cost, message, extra) => {\n this.emit('reward', user, reward, cost, message, extra);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Reward: ${user} redeemed ${reward} for ${cost} - ${message}`,\n );\n };\n this.instance.onConnected = (address, port, isFirstConnect) => {\n this.emit('connected', address, port, isFirstConnect);\n\n if (client.debug)\n logger.debug(\n '[Client]',\n `ComfyJS Connected: ${address}:${port} (First Connect: ${isFirstConnect})`,\n );\n };\n this.instance.onReconnect = (reconnectCount) => {\n this.emit('reconnect', reconnectCount);\n\n if (client.debug) logger.debug('[Client]', `ComfyJS Reconnect: Attempt #${reconnectCount}`);\n };\n\n if (this.init) {\n this.instance.Init(this.username, this.password, this.channels, this.isDebug);\n }\n }\n}\n","interface Theme {\n color?: string;\n background?: string;\n bold?: boolean;\n italic?: boolean;\n fontSize?: number;\n icon?: string;\n}\n\ninterface Options {\n enabled?: boolean;\n prefix?: string | (() => string);\n}\n\ntype LogMethod = (...args: unknown[]) => void;\n\nexport class useLogger {\n public enabled: boolean;\n public prefix: string | (() => string);\n\n constructor(options: Options = {}) {\n this.enabled = options.enabled ?? true;\n this.prefix = options.prefix ?? '';\n }\n\n public apply(theme: Theme): LogMethod {\n const style = this.style(theme);\n const icon = theme.icon ? `${theme.icon} ` : '';\n\n return (...args: unknown[]): void => {\n if (!this.enabled || typeof console === 'undefined') return;\n\n let prefix: string = '';\n\n if (typeof this.prefix === 'function') prefix = this.prefix();\n else if (typeof this.prefix === 'string') prefix = this.prefix;\n\n const primitives: unknown[] = [];\n const objects: unknown[] = [];\n\n args.forEach((arg) => {\n if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {\n primitives.push(arg);\n } else {\n objects.push(arg);\n }\n });\n\n // Log with style\n\n if (primitives.length > 0) {\n const message = primitives.join(' ');\n console.log(`%c${prefix.endsWith(' ') ? prefix : prefix.trim() + ' '}${icon}${message}`, style, ...objects);\n } else if (objects.length > 0) {\n console.log(`%c${prefix.endsWith(' ') ? prefix : prefix.trim() + ' '}${icon}`, style, ...objects);\n }\n };\n }\n\n private style(theme: Theme): string {\n const styles: string[] = [];\n\n if (theme.background && theme.background !== 'transparent') {\n styles.push(`background: ${theme.background}`);\n styles.push('padding: 2px 6px');\n styles.push('border-radius: 3px');\n }\n if (theme.color) styles.push(`color: ${theme.color}`);\n if (theme.bold) styles.push('font-weight: bold');\n if (theme.italic) styles.push('font-style: italic');\n if (theme.fontSize) styles.push(`font-size: ${theme.fontSize}px`);\n\n return styles.join('; ');\n }\n\n public group(label: string): void {\n if (!this.enabled || !console.group) return;\n\n console.group(label);\n }\n\n public groupCollapsed(label: string): void {\n if (!this.enabled || !console.groupCollapsed) return;\n\n console.groupCollapsed(label);\n }\n\n public groupEnd(): void {\n if (!this.enabled || !console.groupEnd) return;\n\n console.groupEnd();\n }\n\n public table(data: unknown): void {\n if (!this.enabled || !console.table) return;\n\n console.table(data);\n }\n\n public time(label: string): void {\n if (!this.enabled || !console.time) return;\n\n console.time(label);\n }\n\n public timeEnd(label: string): void {\n if (!this.enabled || !console.timeEnd) return;\n\n console.timeEnd(label);\n }\n\n readonly error = this.apply({\n color: '#721c24',\n background: '#f8d7da',\n bold: true,\n italic: false,\n icon: '✖',\n });\n\n readonly warn = this.apply({\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n });\n\n readonly success = this.apply({\n color: '#155724',\n background: '#d4edda',\n bold: true,\n italic: false,\n fontSize: 18,\n icon: '✔',\n });\n\n readonly info = this.apply({\n color: '#0c5460',\n background: '#d1ecf1',\n fontSize: 12,\n icon: 'ℹ',\n });\n\n readonly debug = this.apply({\n color: '#8c9ba8',\n background: 'transparent',\n fontSize: 12,\n icon: '●',\n });\n\n readonly alert = this.apply({\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n icon: '⚠',\n });\n\n readonly status = this.apply({\n color: '#0c5460',\n background: '#d1ecf1',\n bold: true,\n italic: false,\n fontSize: 12,\n icon: '·',\n });\n\n readonly received = this.apply({\n color: '#E6BBFF',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n icon: '⬇',\n });\n\n readonly simple = this.apply({\n color: '#f6c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n icon: '☼',\n });\n}\n","import './client/listener.js';\n\nimport { Button } from './actions/button.js';\nimport { Command } from './actions/command.js';\nimport { Client } from './client/client.js';\nimport { Local } from './local/index.js';\nimport { initializeLocalSEAPI } from './streamelements/api.js';\nimport { StreamElements } from './types/index.js';\nimport { Alejo } from './utils/alejo.js';\nimport { useComfyJs } from './multistream/comfyJs.js';\nimport { EventProvider } from './modules/EventProvider.js';\nimport { useLogger } from './modules/useLogger.js';\nimport { useQueue } from './modules/useQueue.js';\nimport { usedStorages, useStorage } from './modules/useStorage.js';\nimport { Helper } from './helper/index.js';\nimport { Data } from './data/index.js';\nimport { useComms, usedComms } from './modules/useComms.js';\n\nexport const USE_SE_API: Promise<StreamElements.SE_API> =\n typeof SE_API !== 'undefined' ? Promise.resolve(SE_API) : Promise.resolve(initializeLocalSEAPI());\nexport const logger = new useLogger();\n\nexport const main = {\n SeAPI: USE_SE_API,\n\n Client: Client,\n Helper: Helper,\n Local: Local,\n Data: Data,\n logger: logger,\n\n modules: {\n EventProvider,\n useStorage,\n useQueue,\n useLogger,\n useComms,\n },\n actions: {\n Button,\n Command,\n },\n multistream: {\n useComfyJs,\n },\n data: {\n usedStorages,\n usedComms,\n },\n pronouns: {\n Alejo,\n },\n};\n\nif (typeof window !== 'undefined') {\n (window as any).Tixyel = main;\n} else {\n (globalThis as any).Tixyel = main;\n}\n"],"names":["EventProvider","eventName","args","listener","callback","listeners","fn","wrapper","usedStorages","useStorage","options","USE_SE_API","se","save","data","newData","path","value","obj","keys","current","i","Client","Command","event","nickname","roles","a","p","r","text","rAliases","t","rMap","k","v","verify","index","received","c","commands","nameAndAliases","commandMatch","command","logger","css_color_names","parseToRGBA","str","format","hex","g","b","match","h","s","l","hslToRgb","canvas","ctx","rgbaToHex","rgba","includeAlpha","toHex","n","rgbToHsl","max","min","delta","hue2rgb","q","findClosestColorName","cssColors","closestColor","minDistance","colorName","cr","cg","cb","distance","avatars","badges","emotes","acc","emote","e","items","messages","names","tiers","tts","youtube_emotes","Data","A","B","CSS","E","I","M","N","T","TTS","Y","Helper","number","_number","translate","num","type","CARDINALS","ORDINALS","SUFFIXES","SCALES","SCALES_ORD","rem100","rem10","below100","kind","decade","single","tensPart","unitPart","below1000","hundreds","rest","parts","groups","lastNonZeroIndex","scale","segment","ordScale","balance","amount","decimals","result","round","factor","float","rand","element","mergeSpanStyles","outerStyle","innerHTML","className","innerStyle","content","innerClass","mergedStyle","returnOnly","customParent","base","parent","parentRect","elementWidth","elementHeight","scaleX","scaleY","finalScale","minScaleX","minScaleY","minScale","scalev2","prefer","apply","parentClientRect","elementClientRect","parentWidth","parentHeight","scaleXmin","scaleYmin","scaleXmax","scaleYmax","scaleValue","finalScaleX","finalScaleY","fitText","compressor","fontSize","settings","elWidth","ratio","splitTextToChars","htmlString","startIndex","doc","charIndex","processNode","node","chars","char","span","fragment","clone","child","processed","body","html","object","flatten","stringify","prefix","key","itemPath","entries","values","message","findEmotesInText","name","searchIndex","start","before","after","replaceEmotesWithHTML","imgUrl","replaceYoutubeEmotesWithHTML","x","code","url","alt","generateBadges","provider","random","_","badge","details","parseProvider","detail","string","replace","pattern","promises","promise","replacements","capitalize","compose","template","style","baseValues","defaultCurrency","defaultCurrencyCode","currency","username","REGEX","getNumericFromKeyOrValue","keyOrValue","valuesMap","trimmed","fromValues","formatNumber","param","formatRelativeTime","date","now","diffMs","past","abs","sec","hour","day","month","year","suffix","formatDateLike","keyOrLiteral","raw","mode","pluralize","singular","plural","source","mapSwitch","targetRaw","target","defaultResult","entry","idx","mapKey","mapValue","escapeHtml","parseLiteralOrValue","token","firstChar","lastChar","lowered","fromValuesStr","fromValuesLower","coerceToBoolean","evaluateAtomicCondition","expression","expr","invert","operators","op","left","right","candidate","leftVal","rightVal","evaluateConditionExpression","orParts","orPart","andParts","andResult","andPart","partResult","HTML_MODIFIERS","color","MODIFIERS","_param","rawCondition","whenTrue","whenFalse","group","modifiers","part","mName","mParam","applyModifier","ALIASES","canonical","aliases","alias","use","error","replaceAll","fullMatch","modifierGroup","newValue","parseModifiers","len","parseText","stopChar","out","parseModifier","paramStart","val","sound","play","volume","gainNode","arrayBuffer","decodedAudio","playSound","opacity","extract","decimal","percentage","validate","convert","valid","hsl","alpha","array","boolean","threshold","length","arr","end","daysOffset","daysAgo","uuid","thisArg","call","utils","delay","ms","resolve","typedEntries","typedValues","typedKeys","probability","total","sorted","cumulative","item","weight","Button","field","f","buttons","button","Local","types","startSession","available","generate","generateRecentData","config","generateObjectData","processedKey","processTypedConfig","session","subKey","subValue","fields","currencies","update","orderByDateDesc","topDonation","topDonator","donatorCurrent","curr","donatorNew","tier","sender","randomProvider","randomEvent","renderedText","userId","msgId","time","channel","avatar","addons","subTypes","subType","muted","fieldsFile","dataFiles","localFiles","file","res","customfields","load","useQueue","duration","valueOrItems","hadItems","nextItem","targetQueue","timeout","usedComms","useComms","history","detected","sessionEvent","client","profile","fieldData","clearExpired","cleanedData","users","pronouns","storage","comm","excludeListeners","LOCAL_SE_API","reload","initializeLocalSEAPI","lastStore","Alejo","Pronouns","map","list","built","display","get","useComfyJs","emulate","comfyJS","err","reject","script","user","flags","extra","role","hasRole","self","id","viewers","autohost","subTierInfo","streakMonths","cumulativeMonths","gifterUser","recipientUser","senderCount","numbOfSubs","bits","reward","cost","address","port","isFirstConnect","reconnectCount","useLogger","theme","icon","primitives","objects","arg","styles","label","main"],"mappings":"AAoBO,MAAMA,EAA8E;AAAA,EAApF,cAAA;AAIL,SAAQ,mBAAiG,CAAA;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1G,KAA+BC,MAAiBC,GAA0B;AAGxE,YAFkB,KAAK,iBAAiBD,CAAS,KAAK,CAAA,GAErC,IAAI,CAACE,MAAaA,EAAS,MAAM,MAAMD,CAAI,CAAC;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAA6BD,GAAcG,GAA2D;AACpG,QAAI,OAAOA,KAAa;AACtB,YAAM,IAAI,UAAU,6BAA6B;AAGnD,WAAK,KAAK,iBAAiBH,CAAS,MAClC,KAAK,iBAAiBA,CAAS,IAAI,CAAA,IAGrC,KAAK,iBAAiBA,CAAS,EAAG,KAAKG,CAAQ,GAExC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAA8BH,GAAcG,GAA4D;AACtG,UAAMC,IAAY,KAAK,iBAAiBJ,CAAS,KAAK,CAAA;AAEtD,WAAKG,KAML,KAAK,iBAAiBH,CAAS,IAAII,EAAU,OAAO,CAACC,MAAOA,MAAOF,CAAQ,GAEpE,SAPL,KAAK,iBAAiBH,CAAS,IAAI,CAAA,GAE5B;AAAA,EAMX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAA+BA,GAAcG,GAA2D;AACtG,UAAMG,IAAU,IAAIL,MAAsB;AACxC,WAAK,IAAID,GAAWM,CAAO,GAC3BH,EAAS,MAAM,MAAMF,CAAI;AAAA,IAC3B;AAEA,gBAAK,GAAGD,GAAWM,CAAO,GAEnB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAA6CN,GAAoB;AAC/D,gBAAK,iBAAiBA,CAAS,IAAI,CAAA,GAE5B;AAAA,EACT;AACF;ACrFO,MAAMO,KAAuC,CAAA;AAE7C,MAAMC,WAAyCT,EAAmC;AAAA,EAQvF,YAAYU,GAA+B;AACzC,UAAA,GARF,KAAQ,SAAuC,MAG/C,KAAO,KAAa,WACpB,KAAO,SAAkB,IAMvB,KAAK,KAAKA,EAAQ,MAAM,KAAK,IAC7B,KAAK,OAAOA,EAAQ,QAAS,CAAA,GAE7BF,GAAa,KAAK,IAAI,GAEtBG,IAAY,KAAK,CAACC,MAAO;AACvB,WAAK,SAASA,GAEdA,EAAI,MACD,IAAO,KAAK,EAAE,EACd,KAAK,CAACC,MAAS;AACd,aAAK,OAAOA,KAAQ,KAAK,MAEzB,KAAK,SAAS,IAEd,KAAK,KAAK,QAAQ,KAAK,IAAI,GAEvB,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,UAAUA,CAAI,KACnD,KAAK,KAAK,UAAU,KAAK,IAAI;AAAA,MAEjC,CAAC,EACA,MAAM,MAAM;AACX,aAAK,SAAS,IAEd,KAAK,KAAK,QAAQ,KAAK,IAAI;AAAA,MAC7B,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,KAAKC,IAAU,KAAK,MAAY;AACtC,IAAI,KAAK,UAAU,KAAK,UAClB,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,UAAUA,CAAI,MACnD,KAAK,OAAOA,GAEZ,KAAK,OAAO,MAAM,IAAO,KAAK,IAAI,KAAK,IAAI,GAE3C,KAAK,KAAK,UAAU,KAAK,IAAI;AAAA,EAGnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAOA,IAAmB,KAAK,MAAY;AAChD,QAAI,KAAK,UAAU,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,UAAUA,CAAI,GAAG;AACrE,YAAMC,IAAU,EAAE,GAAG,KAAK,MAAM,GAAGD,EAAA;AAEnC,WAAK,KAAKC,CAAO;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAsBC,GAASC,GAA8B;AAClE,IAAK,KAAK,WAEVR,GAAW,UAAU,KAAK,MAAMO,GAAMC,CAAK,GAE3C,KAAK,KAAK,KAAK,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACnB,IAAI,KAAK,WACP,KAAK,OAAO,CAAA,GAEZ,KAAK,KAAK,KAAK,IAAI;AAAA,EAEvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,UACLC,GACAF,GACAC,GACM;AACN,UAAME,IAAOH,EAAK,MAAM,GAAG;AAC3B,QAAII,IAAeF;AAEnB,aAASG,IAAI,GAAGA,IAAIF,EAAK,SAAS,GAAGE;AACnC,OAAI,OAAOD,EAAQD,EAAKE,CAAC,CAAC,KAAM,YAAYD,EAAQD,EAAKE,CAAC,CAAC,KAAK,UAC9DD,EAAQD,EAAKE,CAAC,CAAC,IAAI,CAAA,IAGrBD,IAAUA,EAAQD,EAAKE,CAAC,CAAC;AAG3B,WAAAD,EAAQD,EAAKA,EAAK,SAAS,CAAC,CAAC,IAAIF,GAE1BG;AAAA,EACT;AAAA,EAEgB,GACdnB,GACAG,GACM;AACN,WAAIH,MAAc,UAAU,KAAK,UAC/BG,EAAS,MAAM,MAAM,CAAC,KAAK,IAAI,CAAC,GAEzB,SAGT,MAAM,GAAGH,GAAWG,CAAQ,GAErB;AAAA,EACT;AACF;AClHO,MAAMkB,UAAetB,EAA4B;AAAA,EAYtD,YAAYU,GAAwB;AAClC,UAAA,GAZF,KAAO,KAAa,WACpB,KAAO,QAAiB,IAIxB,KAAO,SAAyD,CAAA,GAIhE,KAAO,SAAkB,IAwBzB,KAAO,UAGH;AAAA,MACF,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,IAAC,GAUZ,KAAO,QAaH;AAAA,MACF,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAlDP,KAAK,KAAKA,EAAQ,MAAM,KAAK,IAE7B,KAAK,UAAU,IAAID,GAA0B;AAAA,MAC3C,IAAI,KAAK;AAAA,MACT,MAAM;AAAA,QACJ,MAAM,CAAA;AAAA,QACN,QAAQ,CAAA;AAAA,QACR,SAAS,CAAA;AAAA,QACT,OAAO,CAAA;AAAA,MAAC;AAAA,IACV,CACD,GAED,KAAK,GAAG,QAAQ,MAAM;AACpB,WAAK,QAAQ,GAAQ,OAAOC,EAAQ,SAAU,aAAaA,EAAQ,UAAUA,EAAQ;AAAA,IACvF,CAAC,GAED,OAAO,SAAS;AAAA,EAClB;AAAA,EAoCS,GACPT,GACAG,GACM;AACN,WAAIH,MAAc,UAAU,KAAK,UAC/BG,EAAS,MAAM,MAAM;AAAA,MACnB;AAAA,QACE,SAAS,KAAK,QAAQ;AAAA,QACtB,UAAU,KAAK,QAAQ;AAAA,QACvB,WAAW,KAAK;AAAA,QAChB,SAAS,CAAA;AAAA,QACT,SAAS;AAAA,UACP,MAAM,KAAK;AAAA,UACX,UAAU;AAAA,YACR,WAAW;AAAA,YACX,UAAU;AAAA,YACV,cAAc;AAAA,UAAA;AAAA,QAChB;AAAA,QAEF,SAAS,KAAK,QAAQ;AAAA,QACtB,UAAU;AAAA,MAAA;AAAA,IACZ,CAC6B,GAExB,SAGT,MAAM,GAAGH,GAAWG,CAAQ,GAErB;AAAA,EACT;AACF;ACpHO,MAAMmB,EAAQ;AAAA,EAcnB,YAAYb,GAAyB;AACnC,IAdF,KAAA,SAAiB,KAKjB,KAAA,YAAqB,IAErB,KAAA,OAAgC,GAAG,KAAK,MAAM,GAAG,KAAK,IAAI,cAE1D,KAAA,UAAoB,CAAA,GACpB,KAAA,cAAmC,QACnC,KAAA,SAAmB,CAAA,GAGX,OAAO,kBAAkBY,MAE/B,KAAK,SAASZ,EAAQ,UAAU,KAAK,QACrC,KAAK,OAAOA,EAAQ,MACpB,KAAK,cAAcA,EAAQ,eAAe,KAAK,aAC/C,KAAK,YAAYA,EAAQ,aAAa,KAAK,WAE3C,KAAK,MAAMA,EAAQ,KAEnB,KAAK,OAAOA,EAAQ,QAAQ,KAAK,MACjC,KAAK,UAAUA,EAAQ,WAAW,KAAK,SACvC,KAAK,cAAcA,EAAQ,eAAe,KAAK,aAC/C,KAAK,SAASA,EAAQ,UAAU,KAAK,QAGrC,OAAO,OAAO,QAAQ,SAAS,KAAK,IAAI,GAExC,OAAO,OAAO,KAAK,UAAU,MAAM,SAAS;AAAA,EAC9C;AAAA,EAEA,IAAkBR,GAAgBsB,GAA2B;AAAA,EAAC;AAAA,EAE9D,OAAOC,GAAkBC,GAAiBxB,GAAyB;AACjE,WAAI,KAAK,cAAc,OAAS,CAACA,KAAQ,CAACA,EAAK,UACtC,KAGL,QAAK,OAAO,KAAK,CAACyB,MAAMF,EAAS,wBAAwBE,EAAE,kBAAA,CAAmB,KAI9E,KAAK,gBAAgB,MAAQ,OAAO,KAAK,cAAgB,OAAgB,MAAM,QAAQ,KAAK,WAAW,KAAK,CAAC,KAAK,YAAY,UAKhI,MAAM,QAAQ,KAAK,WAAW,MAC7B,KAAK,YAAY,KAAK,CAACC,MAAMH,EAAS,YAAA,MAAkBG,EAAE,iBAAiBF,EAAM,IAAI,CAACG,MAAMA,EAAE,YAAA,CAAa,EAAE,SAASD,EAAE,YAAA,CAAa,CAAC,KACrI,KAAK,YAAY,SAAS,GAAG;AAAA,EAMnC;AAAA,EAEA,MAAME,GAAcN,GAA8B;AAChD,QAAI,EAAE,OAAO,kBAAkBF,GAAS,QAAO;AAE/C,UAAMpB,IAAO4B,EACV,QAAQ,KAAK,QAAQ,EAAE,EACvB,MAAM,GAAG,EACT,MAAM,CAAC,EACP,IAAI,CAACH,MAAMA,EAAE,MAAM;AAEtB,QAAIF,IAAmB,IACnBC,IAAkB,CAAA;AAEtB,UAAMK,IAAW,EAAE,MAAM,SAAS,SAAS,QAAA;AAE3C,YAAQP,EAAM,UAAA;AAAA,MACZ,KAAK,UAAU;AACb,cAAMV,IAAOU,EAAM;AAEnB,QAAAC,IAAWX,EAAK,MAAM,KAAK,QAAQA,EAAK,MAAM,KAAK,aAE/CA,EAAK,MAAM,KAAK,MAAM,WAGxBY,IAFaZ,EAAK,MAAM,KAAK,KAAK,OAAO,SAAA,EAAW,QAAQ,UAAU,EAAE,EAAE,MAAM,GAAG,EAEtE,IAAI,CAACkB,MAAOA,KAAKD,IAAWA,EAASC,CAA0B,IAAIA,CAAE;AAGpF;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAMlB,IAAOU,EAAM,MAEbS,IAAO;AAAA,UACX,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,eAAe;AAAA,UACf,iBAAiB;AAAA,QAAA;AAGnB,QAAAR,IAAWX,EAAK,MAAM,KAAK,QAAQA,EAAK,MAAM,KAAK,aAEnDY,IAAQ,OAAO,QAAQZ,EAAK,MAAM,KAAK,aAAa,EACjD,OAAO,CAAC,CAACoB,GAAGC,CAAC,MAAMD,EAAE,WAAW,IAAI,KAAKC,CAAC,EAC1C,IAAI,CAAC,CAACD,CAAC,MAAMD,EAAKC,CAAsB,CAAC,EACzC,OAAO,OAAO,GAEbR,EAAM,SAAS,SAAS,MAC1BA,EAAM,KAAK,SAAS,GACpBA,EAAM,KAAK,OAAO,IAEhBA,EAAM,SAAS,OAAO,MACxBA,EAAM,KAAK,WAAW,GACtBA,EAAM,KAAK,aAAa;AAG1B;AAAA,MACF;AAAA,MACA,KAAK;AACH,eAAO;AAAA,IAGT;AAGF,UAAMU,IAAS,KAAK,OAAOX,GAAUC,GAAOxB,CAAI;AAEhD,WAAIkC,MAAW,MACb,KAAK,IAAI,MAAM,OAAO,QAAQ,CAAClC,GAAMsB,CAAK,CAAC,GAGtCY;AAAA,EACT;AAAA,EAEA,SAAe;AACb,QAAI,EAAE,OAAO,kBAAkBd,GAAS;AAExC,UAAMe,IAAQ,OAAO,OAAO,QAAQ,SAAS,QAAQ,IAAI;AAEzD,IAAIA,IAAQ,OACV,OAAO,OAAO,QAAQ,SAAS,OAAOA,GAAO,CAAC,GAC9C,OAAO,OAAO,KAAK,UAAU,MAAM,SAAS;AAAA,EAEhD;AAAA,EAEA,OAAO,QAAQC,GAAiC;AAC9C,QAAI,EAAE,OAAO,kBAAkBhB,GAAS,QAAO;AAE/C,UAAMR,IAAOwB,EAAS;AAEtB,QAAI;AACF,UAAI,OAAO,OAAO,QAAQ,SAAS,UAAU,OAAO,OAAO,QAAQ,SAAS,KAAK,CAACC,MAAMzB,EAAK,MAAM,KAAK,KAAK,WAAWyB,EAAE,MAAM,CAAC,GAAG;AAClI,cAAMC,IAAW,OAAO,OAAO,QAAQ,SAAS,OAAO,CAACD,MAAM;AAC5D,cAAIE,IAAiB,CAACF,EAAE,MAAM,GAAIA,EAAE,WAAW,EAAG,GAC9CG,IAAe5B,EAAK,MAAM,KAAK,KAAK,QAAQyB,EAAE,QAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AAE1E,iBAAOE,EAAe,SAASC,CAAY;AAAA,QAC7C,CAAC;AAED,YAAIF,EAAS,UAAUA,EAAS,MAAM,CAACG,MAAYA,aAAmBpB,CAAO;AAC3E,iBAAAiB,EAAS,QAAQ,CAACG,MAAY;AAC5B,YAAAA,EAAQ,MAAM7B,EAAK,MAAM,KAAK,MAAMwB,CAAQ,GAE5C,OAAO,OAAO,KAAK,UAAUK,GAAS,UAAU,GAEhDC,EAAO,SAAS,qBAAqB9B,EAAK,MAAM,KAAK,IAAI,OAAOA,EAAK,MAAM,KAAK,QAAQA,EAAK,MAAM,KAAK,WAAW,IAAIA,CAAI;AAAA,UAC7H,CAAC,GAEM;AAAA,MAEX;AAAA,IACF,QAAgB;AACd,aAAO;AAAA,IACT,UAAA;AACE,aAAO;AAAA,IACT;AAAA,EACF;AACF;ACrMO,MAAM+B,KAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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"}
|