Batch download all images & videos from any X/Twitter account — including withheld — in original quality, one click, no login.
// ==UserScript== // @name Twitter/X Media Batch Downloader Pro // @name:zh Twitter 媒体批量下载器 Pro // @name:ja Twitter メディア一括ダウンローダー Pro // @description Batch download all images & videos from any X/Twitter account — including withheld — in original quality, one click, no login. // @description:zh 批量下载任何 X/Twitter 账号的所有图片和视频(包括受限账号),原始质量,一键操作,无需登录。 // @description:ja X/Twitter アカウントからすべての画像と動画(制限付きアカウントを含む)を元の品質で一括ダウンロード、ワンクリック、ログイン不要。 // @antifeature payment Using this script requires an active monthly subscription. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAA0jWNhQlgAADSNanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAANGdqdW1iAAAATWp1bWRjMm1hABEAEIAAAKoAOJtxA2Fkb2JlOnVybjp1dWlkOjAxMDUxZTgxLTdjODYtNGM2Zi05ZWI3LWQ2ODMyYjE2MDcyYQAAAAG0anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAA2Gp1bWIAAAAmanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zAAAAAKpjYm9yoWdhY3Rpb25zgaNmYWN0aW9ua2MycGEuZWRpdGVkbXNvZnR3YXJlQWdlbnRtQWRvYmUgRmlyZWZseXFkaWdpdGFsU291cmNlVHlwZXhUaHR0cHM6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvY29tcG9zaXRlV2l0aFRyYWluZWRBbGdvcml0aG1pY01lZGlhAAAAq2p1bWIAAAAoanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5oYXNoLmRhdGEAAAAAe2Nib3KlamV4Y2x1c2lvbnOBomVzdGFydBghZmxlbmd0aBk0mWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFggMD4YYfuuyS4zr1xZ43vCYDS39xrKTXMUA6ouyX7s5bZjcGFkSAAAAAAAAAAAAAACTmp1bWIAAAAkanVtZGMyY2wAEQAQgAAAqgA4m3EDYzJwYS5jbGFpbQAAAAIiY2JvcqhoZGM6dGl0bGVvR2VuZXJhdGVkIEltYWdlaWRjOmZvcm1hdGlpbWFnZS9wbmdqaW5zdGFuY2VJRHgseG1wOmlpZDoxYmQwODcyNy03YTc1LTQyNDgtODM4MS03ZjAzZTg3OTIyNjFvY2xhaW1fZ2VuZXJhdG9yeFlBZG9iZV9QaG90b3Nob3AvMjUuMC4wIChidWlsZCAyMDIzMDkwNi5yLjM3IGIxNGUzMTc7IHdpbikgYWRvYmVfYzJwYS8wLjcuNiBjMnBhLXJzLzAuMjUuMnRjbGFpbV9nZW5lcmF0b3JfaW5mb4G/ZG5hbWVvQWRvYmVfUGhv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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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 // @namespace https://exyezed.cc // @supportURL https://www.patreon.com/exyezed // @homepageURL https://www.patreon.com/exyezed // @version 1.1.0 // @author exyezed // @license MIT // @match *://twitter.com/* // @match *://x.com/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dayjs.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/dexie.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/FileSaver.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/gifshot.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/i18next.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/preact.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/hooks/dist/hooks.umd.js // @require https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals-core.min.js // @require https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/umd/index.min.js // @connect oregon.exyezed.cc // @connect frankfurt.exyezed.cc // @connect singapore.exyezed.cc // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-start // ==/UserScript== (function (preact, signals, hooks, i18next, dayjs, Dexie, fileSaverEs, gifshot, fflate) { 'use strict'; var f = 0; function u(e, t, n, o, i, u2) { t || (t = {}); var a, c, p = t; if ("ref" in p) for (c in p = {}, t) "ref" == c ? a = t[c] : p[c] = t[c]; var l = { type: e, props: p, key: n, ref: a, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --f, __i: -1, __u: 0, __source: i, __self: u2 }; if ("function" == typeof e && (a = e.defaultProps)) for (c in a) void 0 === p[c] && (p[c] = a[c]); return preact.options.vnode && preact.options.vnode(l), l; } var defaultAttributes = { outline: { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }, filled: { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "currentColor", stroke: "none" } }; const createPreactComponent = (type, iconName, iconNamePascal, iconNode) => { const Component2 = ({ color = "currentColor", size = 24, stroke = 2, title, children, className = "", class: classes = "", style, ...rest }) => preact.h( "svg", { ...defaultAttributes[type], width: String(size), height: String(size), class: [`tabler-icon`, `tabler-icon-${iconName}`, classes, className].join(" "), ...type === "filled" ? { fill: color } : { "stroke-width": stroke, stroke: color }, style, ...rest }, [ title && preact.h("title", {}, title), ...iconNode.map(([tag, attrs]) => preact.h(tag, attrs)), ...preact.toChildArray(children) ] ); Component2.displayName = `${iconNamePascal}`; return Component2; }; var IconAlertTriangle = createPreactComponent("outline", "alert-triangle", "AlertTriangle", [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]]); var IconBook = createPreactComponent("outline", "book", "Book", [["path", { "d": "M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-0" }], ["path", { "d": "M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-1" }], ["path", { "d": "M3 6l0 13", "key": "svg-2" }], ["path", { "d": "M12 6l0 13", "key": "svg-3" }], ["path", { "d": "M21 6l0 13", "key": "svg-4" }]]); var IconBrandChrome = createPreactComponent("outline", "brand-chrome", "BrandChrome", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-1" }], ["path", { "d": "M12 9h8.4", "key": "svg-2" }], ["path", { "d": "M14.598 13.5l-4.2 7.275", "key": "svg-3" }], ["path", { "d": "M9.402 13.5l-4.2 -7.275", "key": "svg-4" }]]); var IconBrandPatreon = createPreactComponent("outline", "brand-patreon", "BrandPatreon", [["path", { "d": "M20 8.408c-.003 -2.299 -1.746 -4.182 -3.79 -4.862c-2.54 -.844 -5.888 -.722 -8.312 .453c-2.939 1.425 -3.862 4.545 -3.896 7.656c-.028 2.559 .22 9.297 3.92 9.345c2.75 .036 3.159 -3.603 4.43 -5.356c.906 -1.247 2.071 -1.599 3.506 -1.963c2.465 -.627 4.146 -2.626 4.142 -5.273z", "key": "svg-0" }]]); var IconBrandTwitter = createPreactComponent("outline", "brand-twitter", "BrandTwitter", [["path", { "d": "M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c0 -.249 1.51 -2.772 1.818 -4.013z", "key": "svg-0" }]]); var IconCalendarWeek = createPreactComponent("outline", "calendar-week", "CalendarWeek", [["path", { "d": "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z", "key": "svg-0" }], ["path", { "d": "M16 3v4", "key": "svg-1" }], ["path", { "d": "M8 3v4", "key": "svg-2" }], ["path", { "d": "M4 11h16", "key": "svg-3" }], ["path", { "d": "M7 14h.013", "key": "svg-4" }], ["path", { "d": "M10.01 14h.005", "key": "svg-5" }], ["path", { "d": "M13.01 14h.005", "key": "svg-6" }], ["path", { "d": "M16.015 14h.005", "key": "svg-7" }], ["path", { "d": "M13.015 17h.005", "key": "svg-8" }], ["path", { "d": "M7.01 17h.005", "key": "svg-9" }], ["path", { "d": "M10.01 17h.005", "key": "svg-10" }]]); var IconChevronLeft = createPreactComponent("outline", "chevron-left", "ChevronLeft", [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]]); var IconChevronRight = createPreactComponent("outline", "chevron-right", "ChevronRight", [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]]); var IconCircleCheck = createPreactComponent("outline", "circle-check", "CircleCheck", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M9 12l2 2l4 -4", "key": "svg-1" }]]); var IconCircleX = createPreactComponent("outline", "circle-x", "CircleX", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M10 10l4 4m0 -4l-4 4", "key": "svg-1" }]]); var IconCloudDown = createPreactComponent("outline", "cloud-down", "CloudDown", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.573 .813 3.13 1.99", "key": "svg-0" }], ["path", { "d": "M19 16v6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 3l-3 -3", "key": "svg-2" }]]); var IconCloudUp = createPreactComponent("outline", "cloud-up", "CloudUp", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.57 .811 3.128 1.986", "key": "svg-0" }], ["path", { "d": "M19 22v-6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-2" }]]); var IconDatabaseExport = createPreactComponent("outline", "database-export", "DatabaseExport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c1.118 0 2.183 -.086 3.15 -.241", "key": "svg-1" }], ["path", { "d": "M20 12v-6", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.157 0 .312 -.002 .466 -.005", "key": "svg-3" }], ["path", { "d": "M16 19h6", "key": "svg-4" }], ["path", { "d": "M19 16l3 3l-3 3", "key": "svg-5" }]]); var IconDatabaseImport = createPreactComponent("outline", "database-import", "DatabaseImport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.856 0 1.68 -.05 2.454 -.144m5.546 -2.856v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.171 0 .341 -.002 .51 -.006", "key": "svg-2" }], ["path", { "d": "M19 22v-6", "key": "svg-3" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-4" }]]); var IconDatabaseSearch = createPreactComponent("outline", "database-search", "DatabaseSearch", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3m8 -3.5v-5.5", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3", "key": "svg-2" }], ["path", { "d": "M18 18m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-3" }], ["path", { "d": "M20.2 20.2l1.8 1.8", "key": "svg-4" }]]); var IconDatabaseX = createPreactComponent("outline", "database-x", "DatabaseX", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.537 0 1.062 -.02 1.57 -.058", "key": "svg-1" }], ["path", { "d": "M20 13.5v-7.5", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.384 0 .762 -.01 1.132 -.03", "key": "svg-3" }], ["path", { "d": "M22 22l-5 -5", "key": "svg-4" }], ["path", { "d": "M17 22l5 -5", "key": "svg-5" }]]); var IconDatabase = createPreactComponent("outline", "database", "Database", [["path", { "d": "M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0", "key": "svg-0" }], ["path", { "d": "M4 6v6a8 3 0 0 0 16 0v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6a8 3 0 0 0 16 0v-6", "key": "svg-2" }]]); var IconDownload = createPreactComponent("outline", "download", "Download", [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]]); var IconExclamationCircle = createPreactComponent("outline", "exclamation-circle", "ExclamationCircle", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9v4", "key": "svg-1" }], ["path", { "d": "M12 16v.01", "key": "svg-2" }]]); var IconExternalLink = createPreactComponent("outline", "external-link", "ExternalLink", [["path", { "d": "M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6", "key": "svg-0" }], ["path", { "d": "M11 13l9 -9", "key": "svg-1" }], ["path", { "d": "M15 4h5v5", "key": "svg-2" }]]); var IconEyeOff = createPreactComponent("outline", "eye-off", "EyeOff", [["path", { "d": "M10.585 10.587a2 2 0 0 0 2.829 2.828", "key": "svg-0" }], ["path", { "d": "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87", "key": "svg-1" }], ["path", { "d": "M3 3l18 18", "key": "svg-2" }]]); var IconEye = createPreactComponent("outline", "eye", "Eye", [["path", { "d": "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6", "key": "svg-1" }]]); var IconFileDownload = createPreactComponent("outline", "file-download", "FileDownload", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M12 17v-6", "key": "svg-2" }], ["path", { "d": "M9.5 14.5l2.5 2.5l2.5 -2.5", "key": "svg-3" }]]); var IconFileTypeJs = createPreactComponent("outline", "file-type-js", "FileTypeJs", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M3 15h3v4.5a1.5 1.5 0 0 1 -3 0", "key": "svg-1" }], ["path", { "d": "M9 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75", "key": "svg-2" }], ["path", { "d": "M5 12v-7a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-1", "key": "svg-3" }]]); var IconGif = createPreactComponent("outline", "gif", "Gif", [["path", { "d": "M8 8h-2a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2v-4h-1", "key": "svg-0" }], ["path", { "d": "M12 8v8", "key": "svg-1" }], ["path", { "d": "M16 12h3", "key": "svg-2" }], ["path", { "d": "M20 8h-4v8", "key": "svg-3" }]]); var IconHome = createPreactComponent("outline", "home", "Home", [["path", { "d": "M5 12l-2 0l9 -9l9 9l-2 0", "key": "svg-0" }], ["path", { "d": "M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7", "key": "svg-1" }], ["path", { "d": "M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6", "key": "svg-2" }]]); var IconInfoCircle = createPreactComponent("outline", "info-circle", "InfoCircle", [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]]); var IconLibraryPhoto = createPreactComponent("outline", "library-photo", "LibraryPhoto", [["path", { "d": "M7 3m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 7.26a2.005 2.005 0 0 0 -1.012 1.737v10c0 1.1 .9 2 2 2h10c.75 0 1.158 -.385 1.5 -1", "key": "svg-1" }], ["path", { "d": "M17 7h.01", "key": "svg-2" }], ["path", { "d": "M7 13l3.644 -3.644a1.21 1.21 0 0 1 1.712 0l3.644 3.644", "key": "svg-3" }], ["path", { "d": "M15 12l1.644 -1.644a1.21 1.21 0 0 1 1.712 0l2.644 2.644", "key": "svg-4" }]]); var IconPhotoEdit = createPreactComponent("outline", "photo-edit", "PhotoEdit", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M11 20h-4a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v4", "key": "svg-1" }], ["path", { "d": "M4 15l4 -4c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.31 -.298 .644 -.497 .987 -.596", "key": "svg-3" }], ["path", { "d": "M18.42 15.61a2.1 2.1 0 0 1 2.97 2.97l-3.39 3.42h-3v-3l3.42 -3.39z", "key": "svg-4" }]]); var IconPhoto = createPreactComponent("outline", "photo", "Photo", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]]); var IconPlayerPlay = createPreactComponent("outline", "player-play", "PlayerPlay", [["path", { "d": "M7 4v16l13 -8z", "key": "svg-0" }]]); var IconPlayerStop = createPreactComponent("outline", "player-stop", "PlayerStop", [["path", { "d": "M5 5m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }]]); var IconRestore = createPreactComponent("outline", "restore", "Restore", [["path", { "d": "M3.06 13a9 9 0 1 0 .49 -4.087", "key": "svg-0" }], ["path", { "d": "M3 4.001v5h5", "key": "svg-1" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]]); var IconServer = createPreactComponent("outline", "server", "Server", [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M3 12m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-1" }], ["path", { "d": "M7 8l0 .01", "key": "svg-2" }], ["path", { "d": "M7 16l0 .01", "key": "svg-3" }]]); var IconSettings = createPreactComponent("outline", "settings", "Settings", [["path", { "d": "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z", "key": "svg-0" }], ["path", { "d": "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-1" }]]); var IconStack2 = createPreactComponent("outline", "stack-2", "Stack2", [["path", { "d": "M12 4l-8 4l8 4l8 -4l-8 -4", "key": "svg-0" }], ["path", { "d": "M4 12l8 4l8 -4", "key": "svg-1" }], ["path", { "d": "M4 16l8 4l8 -4", "key": "svg-2" }]]); var IconStack = createPreactComponent("outline", "stack", "Stack", [["path", { "d": "M12 6l-8 4l8 4l8 -4l-8 -4", "key": "svg-0" }], ["path", { "d": "M4 14l8 4l8 -4", "key": "svg-1" }]]); var IconTrash = createPreactComponent("outline", "trash", "Trash", [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]]); var IconVideo = createPreactComponent("outline", "video", "Video", [["path", { "d": "M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4z", "key": "svg-0" }], ["path", { "d": "M3 6m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z", "key": "svg-1" }]]); var IconWriting = createPreactComponent("outline", "writing", "Writing", [["path", { "d": "M20 17v-12c0 -1.121 -.879 -2 -2 -2s-2 .879 -2 2v12l2 2l2 -2z", "key": "svg-0" }], ["path", { "d": "M16 7h4", "key": "svg-1" }], ["path", { "d": "M18 19h-13a2 2 0 1 1 0 -4h4a2 2 0 1 0 0 -4h-3", "key": "svg-2" }]]); var IconX = createPreactComponent("outline", "x", "X", [["path", { "d": "M18 6l-12 12", "key": "svg-0" }], ["path", { "d": "M6 6l12 12", "key": "svg-1" }]]); var IconUserFilled = createPreactComponent("filled", "user-filled", "UserFilled", [["path", { "d": "M12 2a5 5 0 1 1 -5 5l.005 -.217a5 5 0 0 1 4.995 -4.783z", "key": "svg-0" }], ["path", { "d": "M14 14a5 5 0 0 1 5 5v1a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-1a5 5 0 0 1 5 -5h4z", "key": "svg-1" }]]); const ar = { "common": { "Settings": "الإعدادات", "Server": "الخادم", "Choose the server closest to your location for best performance": "اختر الخادم الأقرب إلى موقعك للحصول على أفضل أداء", "Theme": "السمة", "Change Theme": "تغيير السمة", "Language": "اللغة", "Change Language": "تغيير اللغة", "Font Family": "نوع الخط", "System Default": "افتراضي النظام", "Date Time Format": "تنسيق التاريخ والوقت", "Sound Effects": "المؤثرات الصوتية", "Debug": "تشخيص الأخطاء", "Global Settings": "الإعدادات العامة", "Version": "الإصدار", "Common Formats:": "التنسيقات الشائعة:", "Date Formats:": "تنسيقات التاريخ:", "Time Formats:": "تنسيقات الوقت:", "Combined Examples:": "أمثلة مجمعة:", "Localized": "محلي", "Reset Settings": "إعادة تعيين الإعدادات", "Are you sure you want to reset settings to defaults?": "هل أنت متأكد من إعادة تعيين الإعدادات إلى القيم الافتراضية؟", "Reset": "إعادة تعيين", "Cancel": "إلغاء", "Chrome": "Chrome", "Userscript": "سكريبت المستخدم", "Status": "الحالة", "Home": "الصفحة الرئيسية", "Patreon": "Patreon", "Dashboard": "لوحة المراقبة", "Database": "قاعدة البيانات", "Auth": "المصادقة", "Convert Animated GIFs": "تحويل GIF", "Convert GIFs (External)": "تحويل GIF (خارجي)", "Concurrent Downloads": "التنزيلات المتزامنة", "Use 10+ only with fast internet": "استخدم 10+ فقط مع إنترنت سريع", "Smaller size, same quality": "حجم أصغر، نفس الجودة", "Larger size, same quality": "حجم أكبر، نفس الجودة", "Back": "العودة", "Please visit a profile page for auto-detection": "يرجى زيارة صفحة ملف شخصي للاكتشاف التلقائي", "Please configure authentication in the Auth tab first": "يرجى تكوين المصادقة في علامة تبويب المصادقة أولاً", "Invalid username format": "تنسيق اسم المستخدم غير صحيح", "Invalid auth token. Please check your settings.": "رمز المصادقة غير صحيح. يرجى التحقق من إعداداتك.", "Invalid Patreon auth. Please check your settings.": "مصادقة Patreon غير صحيحة. يرجى التحقق من إعداداتك.", "Failed to fetch data": "فشل في جلب البيانات", "Failed to fetch data from all APIs": "فشل جلب البيانات من جميع واجهات برمجة التطبيقات", "Failed to verify auth from all APIs": "فشل التحقق من المصادقة من جميع واجهات برمجة التطبيقات", "Failed to generate token from all APIs": "فشل إنشاء الرمز من جميع واجهات برمجة التطبيقات", "Generating token...": "جارٍ إنشاء الرمز...", "Abort": "إحباط", "Network error occurred": "حدث خطأ في الشبكة", "Request timeout - please try again": "انتهت مهلة الطلب - يرجى المحاولة مرة أخرى", "Failed to parse API response": "فشل تحليل استجابة واجهة برمجة التطبيقات", "Invalid API response structure": "بنية استجابة واجهة برمجة التطبيقات غير صالحة", "Unknown error occurred": "حدث خطأ غير معروف", "HTTP error! status: {{status}}": "خطأ HTTP! الحالة: {{status}}", "Download already in progress": "عملية التنزيل قيد التنفيذ بالفعل", "No media files found": "لم يتم العثور على ملفات وسائط", "Toggle visibility": "إظهار/إخفاء", "Close": "إغلاق", "Converting GIFs...": "...تحويل صور GIF", "Downloading...": "تحميل...", "Download": "تحميل", "Fetching...": "...جارٍ الجلب", "Fetch All": "جلب الكل", "Fetch Video": "جلب الفيديو", "Fetch Image": "جلب الصورة", "Fetch GIF": "جلب GIF", "Posts: {{posts}}": "المنشورات: {{posts}}", "Media: {{media}}": "الوسائط: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "الوسائط الحالية: {{current}} • إجمالي الوسائط: {{total}}", "Failed to download media": "فشل في تحميل الوسائط", "Demo mode is only available for @xbatchdemo": "وضع العرض التجريبي متاح فقط لـ @xbatchdemo", "Auth Token": "رمز المصادقة", "Enter your auth token": "أدخل رمز المصادقة الخاص بك", "Your authentication token for API access": "رمز المصادقة الخاص بك للوصول إلى API", "Patreon Auth": "مصادقة Patreon", "Enter your Patreon auth": "أدخل مصادقة Patreon الخاصة بك", "Your Patreon authentication key": "مفتاح مصادقة Patreon الخاص بك", "Please enter Patreon auth first": "يرجى إدخال مصادقة Patreon أولاً", "Please verify Patreon auth first": "يرجى التحقق من مصادقة Patreon أولاً", "Patreon auth verified successfully": "تم التحقق من مصادقة Patreon بنجاح", "Invalid Patreon auth": "مصادقة Patreon غير صحيحة", "Verification failed. Please try again": "فشل التحقق. يرجى المحاولة مرة أخرى", "Generating": "إنشاء", "Generate": "إنشاء", "Verify": "التحقق", "Token generated successfully": "تم إنشاء الرمز بنجاح ({{current}}/{{total}})", "Failed to generate token": "فشل في إنشاء الرمز", "Token generation failed. Please try again": "فشل إنشاء الرمز. يرجى المحاولة مرة أخرى", "Verifying": "التحقق", "Verified": "تم التحقق", "Use code": "استخدم الرمز", "for Patreon Auth, click Verify to unlock demo. Test at": 'لمصادقة Patreon، انقر "التحقق" لفتح العرض التجريبي. جرّب في', "Need help with Auth Token? See": "بحاجة إلى مساعدة بخصوص رمز المصادقة؟ راجع", "the guide": "الدليل", "Subscribe": "اشترك", "to get your Patreon Auth code and start downloading with ease!": "للحصول على رمز مصادقة Patreon والبدء في التنزيل بسهولة!", "Report bugs or request features:": "أبلغ عن الأخطاء أو اطلب الميزات:", "Import": "استيراد", "Importing...": "...استيراد", "Supports JSON and ZIP formats": "يدعم تنسيقات JSON و ZIP", "Export": "تصدير", "Export All Data": "تصدير كل البيانات", "Exporting...": "...تصدير", "Clear": "مسح", "Filter by Batch": "تصفية حسب الدفعات", "Are you sure to clear all data in the database?": "هل أنت متأكد من مسح جميع البيانات في قاعدة البيانات؟", "Delete Account Data": "حذف بيانات الحساب", "Are you sure you want to delete account data? This action cannot be undone": "هل أنت متأكد من حذف بيانات {{username}}؟ لا يمكن التراجع عن هذا الإجراء.", "Delete": "حذف", "Deleting...": "...حذف", "Overwrite": "استبدال", "Overwrite Existing Data?": "استبدال البيانات الحالية؟", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "بيانات الحساب @{{username}} موجودة بالفعل في قاعدة البيانات. هل تريد استبدالها؟", "No accounts yet": "لا توجد حسابات بعد", "Use Dashboard to fetch data.": "استخدم لوحة المراقبة لجلب البيانات.", "Something went wrong.": "حدث خطأ ما.", "Error:": "خطأ:", "Fetch": "جلب", "Single": "مفرد", "Batch": "دفعات", "Auto Batch": "دفعات تلقائية", "Timeline": "الخط الزمني", "Media": "الوسائط", "Batch Size": "حجم الدُفعة", "Starting Batch": "الدُفعة الابتدائية", "Posts": "المنشورات", "Tweets": "التغريدات", "Replies": "الردود", "All": "الكل", "Image": "صورة", "Video": "فيديو", "GIF": "GIF", "Batch: {{page}}": "الدُفعة: {{page}}", "Start": "بدء", "Stop": "إيقاف", "Prev": "السابق", "Next": "التالي", "Download Current": "تنزيل الحالي", "Download All": "تنزيل الكل", "Use Batch/Auto Batch if single fetch fails": "استخدم الدفعات/الدفعات التلقائية إذا فشل الجلب المفرد", "Load from database": "تحميل من قاعدة البيانات", "Load database": "تحميل قاعدة البيانات", "First Page": "الصفحة الأولى", "Last Page": "الصفحة الأخيرة", "Failed to load data": "فشل في تحميل البيانات", "Update": "تحديث", "Updating...": "...جارٍ التحديث", "Update will fetch the latest data and overwrite the database. Continue?": "سيقوم التحديث بجلب أحدث البيانات والكتابة فوق قاعدة البيانات. هل تريد المتابعة؟", "Followers": "المتابعون", "Following": "المتابَعون", "Joined": "تاريخ الانضمام", "Open": "فتح", "Preview": "معاينة", "View Database": "عرض قاعدة البيانات", "Converting...": "جارٍ التحويل...", "Convert & Download": "تحويل وتحميل", "Date Since": "تاريخ البدء", "Date Until": "تاريخ الانتهاء", "Empty dates will fetch all available media": "التواريخ الفارغة ستجلب جميع الوسائط المتاحة", "Filter by Date Range": "التصفية حسب نطاق التاريخ", "Include Retweets": "تضمين إعادة التغريد", "Not supported with Media timeline": "غير مدعوم مع الجدول الزمني للوسائط", "No media found for date range {{since}} to {{until}}": "لم يتم العثور على وسائط للفترة من {{since}} إلى {{until}}", "No tweets found for this account": "لم يتم العثور على تغريدات لهذا الحساب", "No media found in {{count}} tweets": "لم يتم العثور على وسائط في {{count}} تغريدة" } }; const de = { "common": { "Settings": "Einstellungen", "Server": "Server", "Choose the server closest to your location for best performance": "Wählen Sie den Server, der Ihrem Standort am nächsten ist, für die beste Leistung", "Theme": "Design", "Change Theme": "Design ändern", "Language": "Sprache", "Change Language": "Sprache ändern", "Font Family": "Schriftart", "System Default": "Systemstandard", "Date Time Format": "Datum-Uhrzeit-Format", "Sound Effects": "Soundeffekte", "Debug": "Debug", "Global Settings": "Globale Einstellungen", "Version": "Version", "Common Formats:": "Häufige Formate:", "Date Formats:": "Datumsformate:", "Time Formats:": "Zeitformate:", "Combined Examples:": "Kombinierte Beispiele:", "Localized": "Lokalisiert", "Reset Settings": "Einstellungen zurücksetzen", "Are you sure you want to reset settings to defaults?": "Sind Sie sicher, dass Sie die Einstellungen auf Standardwerte zurücksetzen möchten?", "Reset": "Zurücksetzen", "Cancel": "Abbrechen", "Chrome": "Chrome", "Userscript": "Benutzerskript", "Status": "Status", "Home": "Startseite", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Datenbank", "Auth": "Authentifizierung", "Convert Animated GIFs": "GIFs konvertieren", "Convert GIFs (External)": "GIFs konvertieren (Extern)", "Concurrent Downloads": "Gleichzeitige Downloads", "Use 10+ only with fast internet": "10+ nur bei schneller Internetverbindung verwenden", "Smaller size, same quality": "Kleinere Größe, gleiche Qualität", "Larger size, same quality": "Größere Größe, gleiche Qualität", "Back": "Zurück", "Please visit a profile page for auto-detection": "Bitte besuchen Sie eine Profilseite für die automatische Erkennung", "Please configure authentication in the Auth tab first": "Bitte konfigurieren Sie zuerst die Authentifizierung im Auth-Tab", "Invalid username format": "Ungültiges Benutzernamen-Format", "Invalid auth token. Please check your settings.": "Ungültiger Auth-Token. Bitte überprüfen Sie Ihre Einstellungen.", "Invalid Patreon auth. Please check your settings.": "Ungültige Patreon-Authentifizierung. Bitte überprüfen Sie Ihre Einstellungen.", "Failed to fetch data": "Daten konnten nicht abgerufen werden", "Failed to fetch data from all APIs": "Fehler beim Abrufen der Daten von allen APIs", "Failed to verify auth from all APIs": "Fehler bei der Überprüfung der Authentifizierung über alle APIs", "Failed to generate token from all APIs": "Fehler beim Generieren des Tokens über alle APIs", "Generating token...": "Token wird generiert...", "Abort": "Abbrechen", "Network error occurred": "Es ist ein Netzwerkfehler aufgetreten", "Request timeout - please try again": "Zeitüberschreitung der Anforderung – bitte erneut versuchen", "Failed to parse API response": "API-Antwort konnte nicht analysiert werden", "Invalid API response structure": "Ungültige API-Antwortstruktur", "Unknown error occurred": "Unbekannter Fehler ist aufgetreten", "HTTP error! status: {{status}}": "HTTP-Fehler! Status: {{status}}", "Download already in progress": "Download läuft bereits", "No media files found": "Keine Mediendateien gefunden", "Toggle visibility": "Ein-/Ausblenden", "Close": "Schließen", "Converting GIFs...": "GIFs werden konvertiert...", "Downloading...": "Herunterladen...", "Download": "Herunterladen", "Fetching...": "Abrufen...", "Fetch All": "Alle abrufen", "Fetch Video": "Video abrufen", "Fetch Image": "Bild abrufen", "Fetch GIF": "GIF abrufen", "Posts: {{posts}}": "Beiträge: {{posts}}", "Media: {{media}}": "Medien: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Aktuelle Medien: {{current}} • Medien gesamt: {{total}}", "Failed to download media": "Medien konnten nicht heruntergeladen werden", "Demo mode is only available for @xbatchdemo": "Der Demo-Modus ist nur für @xbatchdemo verfügbar", "Auth Token": "Auth-Token", "Enter your auth token": "Geben Sie Ihren Auth-Token ein", "Your authentication token for API access": "Ihr Authentifizierungs-Token für API-Zugriff", "Patreon Auth": "Patreon-Authentifizierung", "Enter your Patreon auth": "Geben Sie Ihre Patreon-Authentifizierung ein", "Your Patreon authentication key": "Ihr Patreon-Authentifizierungsschlüssel", "Please enter Patreon auth first": "Bitte geben Sie zuerst die Patreon-Authentifizierung ein", "Please verify Patreon auth first": "Bitte überprüfen Sie zuerst die Patreon-Authentifizierung", "Patreon auth verified successfully": "Patreon-Authentifizierung erfolgreich überprüft", "Invalid Patreon auth": "Ungültige Patreon-Authentifizierung", "Verification failed. Please try again": "Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut", "Generating": "Generieren", "Generate": "Generieren", "Verify": "Überprüfen", "Token generated successfully": "Token erfolgreich generiert ({{current}}/{{total}})", "Failed to generate token": "Token-Generierung fehlgeschlagen", "Token generation failed. Please try again": "Token-Generierung fehlgeschlagen. Bitte versuchen Sie es erneut", "Verifying": "Überprüfen", "Verified": "Überprüft", "Use code": "Verwenden Sie den Code", "for Patreon Auth, click Verify to unlock demo. Test at": "für die Patreon-Authentifizierung, klicken Sie auf „Überprüfen“, um die Demo freizuschalten. Testen bei", "Need help with Auth Token? See": "Benötigen Sie Hilfe mit dem Auth-Token? Siehe", "the guide": "die Anleitung", "Subscribe": "Abonnieren", "to get your Patreon Auth code and start downloading with ease!": "um Ihren Patreon-Authentifizierungscode zu erhalten und mühelos mit dem Herunterladen zu beginnen!", "Report bugs or request features:": "Fehler melden oder Funktionen anfordern:", "Import": "Importieren", "Importing...": "Importieren...", "Supports JSON and ZIP formats": "Unterstützt JSON- und ZIP-Formate", "Export": "Exportieren", "Export All Data": "Alle Daten exportieren", "Exporting...": "Exportieren...", "Clear": "Löschen", "Filter by Batch": "Nach Stapel filtern", "Are you sure to clear all data in the database?": "Sind Sie sicher, dass Sie alle Daten in der Datenbank löschen möchten?", "Delete Account Data": "Kontodaten löschen", "Are you sure you want to delete account data? This action cannot be undone": "Sind Sie sicher, dass Sie die Daten von {{username}} löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", "Delete": "Löschen", "Deleting...": "Löschen...", "Overwrite": "Überschreiben", "Overwrite Existing Data?": "Vorhandene Daten überschreiben?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Kontodaten für @{{username}} existieren bereits in der Datenbank. Möchten Sie sie überschreiben?", "No accounts yet": "Noch keine Konten", "Use Dashboard to fetch data.": "Verwenden Sie das Dashboard zum Abrufen von Daten.", "Something went wrong.": "Etwas ist schief gelaufen.", "Error:": "Fehler:", "Fetch": "Abrufen", "Single": "Einzel", "Batch": "Stapel", "Auto Batch": "Auto-Stapel", "Timeline": "Timeline", "Media": "Medien", "Batch Size": "Stapelgröße", "Starting Batch": "Startstapel", "Posts": "Beiträge", "Tweets": "Tweets", "Replies": "Antworten", "All": "Alle", "Image": "Bild", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Stapel: {{page}}", "Start": "Start", "Stop": "Stopp", "Prev": "Zurück", "Next": "Weiter", "Download Current": "Aktuelles herunterladen", "Download All": "Alles herunterladen", "Use Batch/Auto Batch if single fetch fails": "Verwende Stapel/Auto-Stapel, wenn Einzelabruf fehlschlägt", "Load from database": "Aus Datenbank laden", "Load database": "Datenbank laden", "First Page": "Erste Seite", "Last Page": "Letzte Seite", "Failed to load data": "Daten konnten nicht geladen werden", "Update": "Aktualisieren", "Updating...": "Aktualisierung läuft...", "Update will fetch the latest data and overwrite the database. Continue?": "Das Update holt die neuesten Daten und überschreibt die Datenbank. Fortfahren?", "Followers": "Follower", "Following": "Folge ich", "Joined": "Beigetreten", "Open": "Öffnen", "Preview": "Vorschau", "View Database": "Datenbank anzeigen", "Converting...": "Konvertieren...", "Convert & Download": "Konvertieren & Herunterladen", "Date Since": "Datum Von", "Date Until": "Datum Bis", "Empty dates will fetch all available media": "Leere Daten holen alle verfügbaren Medien", "Filter by Date Range": "Nach Datumsbereich filtern", "Include Retweets": "Retweets einbeziehen", "Not supported with Media timeline": "Nicht unterstützt mit Medien-Timeline", "No media found for date range {{since}} to {{until}}": "Keine Medien für den Zeitraum {{since}} bis {{until}} gefunden", "No tweets found for this account": "Keine Tweets für dieses Konto gefunden", "No media found in {{count}} tweets": "Keine Medien in {{count}} Tweets gefunden" } }; const en$1 = { "common": { "Settings": "Settings", "Server": "Server", "Choose the server closest to your location for best performance": "Choose the server closest to your location for best performance", "Theme": "Theme", "Change Theme": "Change Theme", "Language": "Language", "Change Language": "Change Language", "Font Family": "Font Family", "System Default": "System Default", "Date Time Format": "Date Time Format", "Sound Effects": "Sound Effects", "Debug": "Debug", "Global Settings": "Global Settings", "Version": "Version", "Common Formats:": "Common Formats:", "Date Formats:": "Date Formats:", "Time Formats:": "Time Formats:", "Combined Examples:": "Combined Examples:", "Localized": "Localized", "Reset Settings": "Reset Settings", "Are you sure you want to reset settings to defaults?": "Are you sure you want to reset settings to defaults?", "Reset": "Reset", "Cancel": "Cancel", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Status", "Home": "Home", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Database", "Auth": "Auth", "Convert Animated GIFs": "Convert GIFs", "Convert GIFs (External)": "Convert GIFs (External)", "Concurrent Downloads": "Concurrent Downloads", "Use 10+ only with fast internet": "Use 10+ only with fast internet", "Smaller size, same quality": "Smaller size, same quality", "Larger size, same quality": "Larger size, same quality", "Back": "Back", "Please visit a profile page for auto-detection": "Please visit a profile page for auto-detection", "Please configure authentication in the Auth tab first": "Please configure authentication in the Auth tab first", "Invalid username format": "Invalid username format", "Invalid auth token. Please check your settings.": "Invalid auth token. Please check your settings.", "Invalid Patreon auth. Please check your settings.": "Invalid Patreon auth. Please check your settings.", "Failed to fetch data": "Failed to fetch data", "Failed to fetch data from all APIs": "Failed to fetch data from all APIs", "Failed to verify auth from all APIs": "Failed to verify auth from all APIs", "Failed to generate token from all APIs": "Failed to generate token from all APIs", "Generating token...": "Generating token...", "Abort": "Abort", "Network error occurred": "Network error occurred", "Request timeout - please try again": "Request timeout - please try again", "Failed to parse API response": "Failed to parse API response", "Invalid API response structure": "Invalid API response structure", "Unknown error occurred": "Unknown error occurred", "HTTP error! status: {{status}}": "HTTP error! status: {{status}}", "Download already in progress": "Download already in progress", "No media files found": "No media files found", "Toggle visibility": "Toggle visibility", "Close": "Close", "Converting GIFs...": "Converting GIFs...", "Downloading...": "Downloading...", "Download": "Download", "Fetching...": "Fetching...", "Fetch All": "Fetch All", "Fetch Video": "Fetch Video", "Fetch Image": "Fetch Image", "Fetch GIF": "Fetch GIF", "Posts: {{posts}}": "Posts: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Current Media: {{current}} • Total Media: {{total}}", "Failed to download media": "Failed to download media", "Demo mode is only available for @xbatchdemo": "Demo mode is only available for @xbatchdemo", "Auth Token": "Auth Token", "Enter your auth token": "Enter your auth token", "Your authentication token for API access": "Your authentication token for API access", "Patreon Auth": "Patreon Auth", "Enter your Patreon auth": "Enter your Patreon auth", "Your Patreon authentication key": "Your Patreon authentication key", "Please enter Patreon auth first": "Please enter Patreon auth first", "Please verify Patreon auth first": "Please verify Patreon auth first", "Patreon auth verified successfully": "Patreon auth verified successfully", "Invalid Patreon auth": "Invalid Patreon auth", "Verification failed. Please try again": "Verification failed. Please try again", "Generating": "Generating", "Generate": "Generate", "Verify": "Verify", "Token generated successfully": "Token generated successfully ({{current}}/{{total}})", "Failed to generate token": "Failed to generate token", "Token generation failed. Please try again": "Token generation failed. Please try again", "Verifying": "Verifying", "Verified": "Verified", "Use code": "Use code", "for Patreon Auth, click Verify to unlock demo. Test at": "for Patreon Auth, click Verify to unlock demo. Test at", "Need help with Auth Token? See": "Need help with Auth Token? See", "the guide": "the guide", "Subscribe": "Subscribe", "to get your Patreon Auth code and start downloading with ease!": "to get your Patreon Auth code and start downloading with ease!", "Report bugs or request features:": "Report bugs or request features:", "Import": "Import", "Importing...": "Importing...", "Supports JSON and ZIP formats": "Supports JSON and ZIP formats", "Export": "Export", "Export All Data": "Export All Data", "Exporting...": "Exporting...", "Clear": "Clear", "Filter by Batch": "Filter by Batch", "Are you sure to clear all data in the database?": "Are you sure to clear all data in the database?", "Delete Account Data": "Delete Account Data", "Are you sure you want to delete account data? This action cannot be undone": "Are you sure you want to delete {{username}}'s data? This action cannot be undone.", "Delete": "Delete", "Deleting...": "Deleting...", "Overwrite": "Overwrite", "Overwrite Existing Data?": "Overwrite Existing Data?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Account data for @{{username}} already exists in the database. Do you want to overwrite it?", "No accounts yet": "No accounts yet", "Use Dashboard to fetch data.": "Use Dashboard to fetch data.", "Something went wrong.": "Something went wrong.", "Error:": "Error:", "Fetch": "Fetch", "Single": "Single", "Batch": "Batch", "Auto Batch": "Auto Batch", "Timeline": "Timeline", "Media": "Media", "Batch Size": "Batch Size", "Starting Batch": "Starting Batch", "Posts": "Posts", "Tweets": "Tweets", "Replies": "Replies", "All": "All", "Image": "Image", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Start", "Stop": "Stop", "Prev": "Prev", "Next": "Next", "Download Current": "Download Current", "Download All": "Download All", "Use Batch/Auto Batch if single fetch fails": "Use Batch/Auto Batch if single fetch fails", "Load from database": "Load from database", "Load database": "Load database", "First Page": "First Page", "Last Page": "Last Page", "Failed to load data": "Failed to load data", "Update": "Update", "Updating...": "Updating...", "Update will fetch the latest data and overwrite the database. Continue?": "Update will fetch the latest data and overwrite the database. Continue?", "Followers": "Followers", "Following": "Following", "Joined": "Joined", "Open": "Open", "Preview": "Preview", "View Database": "View Database", "Converting...": "Converting...", "Convert & Download": "Convert & Download", "Date Since": "Date Since", "Date Until": "Date Until", "Empty dates will fetch all available media": "Empty dates will fetch all available media", "Filter by Date Range": "Filter by Date Range", "Include Retweets": "Include Retweets", "Not supported with Media timeline": "Not supported with Media timeline", "No media found for date range {{since}} to {{until}}": "No media found for date range {{since}} to {{until}}", "No tweets found for this account": "No tweets found for this account", "No media found in {{count}} tweets": "No media found in {{count}} tweets" } }; const es = { "common": { "Settings": "Configuración", "Server": "Servidor", "Choose the server closest to your location for best performance": "Elija el servidor más cercano a su ubicación para un mejor rendimiento", "Theme": "Tema", "Change Theme": "Cambiar Tema", "Language": "Idioma", "Change Language": "Cambiar idioma", "Font Family": "Familia de Fuente", "System Default": "Predeterminado del Sistema", "Date Time Format": "Formato de Fecha y Hora", "Sound Effects": "Efectos de Sonido", "Debug": "Depurar", "Global Settings": "Configuración Global", "Version": "Versión", "Common Formats:": "Formatos Comunes:", "Date Formats:": "Formatos de Fecha:", "Time Formats:": "Formatos de Hora:", "Combined Examples:": "Ejemplos Combinados:", "Localized": "Localizado", "Reset Settings": "Restablecer ajustes", "Are you sure you want to reset settings to defaults?": "¿Seguro que quieres restablecer los ajustes a los valores predeterminados?", "Reset": "Restablecer", "Cancel": "Cancelar", "Chrome": "Chrome", "Userscript": "Script de usuario", "Status": "Estado", "Home": "Inicio", "Patreon": "Patreon", "Dashboard": "Panel de Control", "Database": "Base de Datos", "Auth": "Autenticación", "Convert Animated GIFs": "Convertir GIFs", "Convert GIFs (External)": "Convertir GIFs (Externo)", "Concurrent Downloads": "Descargas simultáneas", "Use 10+ only with fast internet": "Usa 10+ solo con internet rápido", "Smaller size, same quality": "Tamaño más pequeño, misma calidad", "Larger size, same quality": "Tamaño más grande, misma calidad", "Back": "Atrás", "Please visit a profile page for auto-detection": "Visita una página de perfil para detección automática", "Please configure authentication in the Auth tab first": "Configura la autenticación en la pestaña Auth primero", "Invalid username format": "Formato de nombre de usuario no válido", "Invalid auth token. Please check your settings.": "Token de autenticación no válido. Por favor, revisa tu configuración.", "Invalid Patreon auth. Please check your settings.": "Autenticación de Patreon no válida. Por favor, revisa tu configuración.", "Failed to fetch data": "Error al obtener los datos", "Failed to fetch data from all APIs": "Error al obtener los datos de todas las APIs", "Failed to verify auth from all APIs": "Error al verificar la autenticación en todas las APIs", "Failed to generate token from all APIs": "Error al generar el token en todas las APIs", "Generating token...": "Generando token...", "Abort": "Abortar", "Network error occurred": "Se produjo un error de red", "Request timeout - please try again": "Tiempo de espera agotado: inténtalo de nuevo", "Failed to parse API response": "Error al analizar la respuesta de la API", "Invalid API response structure": "Estructura de respuesta de la API no válida", "Unknown error occurred": "Ocurrió un error desconocido", "HTTP error! status: {{status}}": "¡Error HTTP! estado: {{status}}", "Download already in progress": "Ya hay una descarga en curso", "No media files found": "No se encontraron archivos multimedia", "Toggle visibility": "Mostrar/ocultar", "Close": "Cerrar", "Converting GIFs...": "Convirtiendo GIF...", "Downloading...": "Descargando...", "Download": "Descargar", "Fetching...": "Obteniendo...", "Fetch All": "Obtener todo", "Fetch Video": "Obtener video", "Fetch Image": "Obtener imagen", "Fetch GIF": "Obtener GIF", "Posts: {{posts}}": "Publicaciones: {{posts}}", "Media: {{media}}": "Medios: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Medios actuales: {{current}} • Medios totales: {{total}}", "Failed to download media": "Error al descargar los medios", "Demo mode is only available for @xbatchdemo": "El modo demo solo está disponible para @xbatchdemo", "Auth Token": "Token de autenticación", "Enter your auth token": "Introduce tu token de autenticación", "Your authentication token for API access": "Tu token de autenticación para acceso a la API", "Patreon Auth": "Autenticación de Patreon", "Enter your Patreon auth": "Introduce tu autenticación de Patreon", "Your Patreon authentication key": "Tu clave de autenticación de Patreon", "Please enter Patreon auth first": "Introduce primero la autenticación de Patreon", "Please verify Patreon auth first": "Verifica primero la autenticación de Patreon", "Patreon auth verified successfully": "Autenticación de Patreon verificada correctamente", "Invalid Patreon auth": "Autenticación de Patreon no válida", "Verification failed. Please try again": "La verificación falló. Inténtalo de nuevo", "Generating": "Generando", "Generate": "Generar", "Verify": "Verificar", "Token generated successfully": "Token generado correctamente ({{current}}/{{total}})", "Failed to generate token": "Error al generar el token", "Token generation failed. Please try again": "La generación del token falló. Inténtalo de nuevo", "Verifying": "Verificando", "Verified": "Verificado", "Use code": "Usa el código", "for Patreon Auth, click Verify to unlock demo. Test at": 'para la Autenticación de Patreon, haz clic en "Verificar" para desbloquear la demo. Prueba en', "Need help with Auth Token? See": "¿Necesitas ayuda con el token de autenticación? Consulta", "the guide": "la guía", "Subscribe": "Suscríbete", "to get your Patreon Auth code and start downloading with ease!": "para obtener tu código de autenticación de Patreon y empezar a descargar fácilmente.", "Report bugs or request features:": "Informa errores o solicita funciones:", "Import": "Importar", "Importing...": "Importando...", "Supports JSON and ZIP formats": "Admite formatos JSON y ZIP", "Export": "Exportar", "Export All Data": "Exportar todos los datos", "Exporting...": "Exportando...", "Clear": "Limpiar", "Filter by Batch": "Filtrar por lote", "Are you sure to clear all data in the database?": "¿Estás seguro de que quieres borrar todos los datos de la base de datos?", "Delete Account Data": "Eliminar datos de la cuenta", "Are you sure you want to delete account data? This action cannot be undone": "¿Seguro que quieres eliminar los datos de {{username}}? Esta acción no se puede deshacer.", "Delete": "Eliminar", "Deleting...": "Eliminando...", "Overwrite": "Sobrescribir", "Overwrite Existing Data?": "¿Sobrescribir datos existentes?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Los datos de la cuenta @{{username}} ya existen en la base de datos. ¿Deseas sobrescribirlos?", "No accounts yet": "Todavía no hay cuentas", "Use Dashboard to fetch data.": "Usa el Panel de Control para obtener datos.", "Something went wrong.": "Algo salió mal.", "Error:": "Error:", "Fetch": "Obtener", "Single": "Único", "Batch": "Lote", "Auto Batch": "Lote automático", "Timeline": "Cronología", "Media": "Medios", "Batch Size": "Tamaño del lote", "Starting Batch": "Lote inicial", "Posts": "Publicaciones", "Tweets": "Tweets", "Replies": "Respuestas", "All": "Todo", "Image": "Imagen", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Lote: {{page}}", "Start": "Iniciar", "Stop": "Detener", "Prev": "Anterior", "Next": "Siguiente", "Download Current": "Descargar actual", "Download All": "Descargar todo", "Use Batch/Auto Batch if single fetch fails": "Usa Lote/Lote automático si falla la obtención única", "Load from database": "Cargar desde base de datos", "Load database": "Cargar base de datos", "First Page": "Primera Página", "Last Page": "Última Página", "Failed to load data": "Error al cargar los datos", "Update": "Actualizar", "Updating...": "Actualizando...", "Update will fetch the latest data and overwrite the database. Continue?": "La actualización obtendrá los datos más recientes y sobrescribirá la base de datos. ¿Continuar?", "Followers": "Seguidores", "Following": "Siguiendo", "Joined": "Se unió", "Open": "Abrir", "Preview": "Vista previa", "View Database": "Ver base de datos", "Converting...": "Convirtiendo...", "Convert & Download": "Convertir y descargar", "Date Since": "Fecha Desde", "Date Until": "Fecha Hasta", "Empty dates will fetch all available media": "Fechas vacías obtendrán todos los medios disponibles", "Filter by Date Range": "Filtrar por rango de fechas", "Include Retweets": "Incluir Retweets", "Not supported with Media timeline": "No compatible con línea de tiempo de medios", "No media found for date range {{since}} to {{until}}": "No se encontraron medios para el rango de fechas {{since}} a {{until}}", "No tweets found for this account": "No se encontraron tweets para esta cuenta", "No media found in {{count}} tweets": "No se encontraron medios en {{count}} tweets" } }; const fil = { "common": { "Settings": "Mga Setting", "Server": "Server", "Choose the server closest to your location for best performance": "Piliin ang server na pinakamalapit sa iyong lokasyon para sa pinakamahusay na pagganap", "Theme": "Tema", "Change Theme": "Baguhin ang Tema", "Language": "Wika", "Change Language": "Baguhin ang Wika", "Font Family": "Uri ng Font", "System Default": "Default ng Sistema", "Date Time Format": "Format ng Petsa at Oras", "Sound Effects": "Mga Epekto ng Tunog", "Debug": "Debug", "Global Settings": "Pandaigdigang Mga Setting", "Version": "Bersyon", "Common Formats:": "Karaniwang Mga Format:", "Date Formats:": "Mga Format ng Petsa:", "Time Formats:": "Mga Format ng Oras:", "Combined Examples:": "Pinagsama-samang Mga Halimbawa:", "Localized": "Naka-localize", "Reset Settings": "I-reset ang mga Setting", "Are you sure you want to reset settings to defaults?": "Sigurado ka bang gusto mong i-reset ang mga setting sa default?", "Reset": "I-reset", "Cancel": "Kanselahin", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Katayuan", "Home": "Home", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Database", "Auth": "Awtorisasyon", "Convert Animated GIFs": "I-convert ang GIF", "Convert GIFs (External)": "I-convert ang GIF (External)", "Concurrent Downloads": "Sabay-sabay na Pag-download", "Use 10+ only with fast internet": "Gumamit ng 10+ lamang sa mabilis na internet", "Smaller size, same quality": "Mas maliit na laki, parehong kalidad", "Larger size, same quality": "Mas malaking laki, parehong kalidad", "Back": "Bumalik", "Please visit a profile page for auto-detection": "Mangyaring bumisita sa isang profile page para sa auto-detection", "Please configure authentication in the Auth tab first": "Mangyaring i-configure muna ang authentication sa Auth tab", "Invalid username format": "Di-wastong format ng username", "Invalid auth token. Please check your settings.": "Di-wastong auth token. Mangyaring suriin ang iyong mga setting.", "Invalid Patreon auth. Please check your settings.": "Di-wastong Patreon auth. Mangyaring suriin ang iyong mga setting.", "Failed to fetch data": "Nabigong kunin ang data", "Failed to fetch data from all APIs": "Nabigong kunin ang data mula sa lahat ng APIs", "Failed to verify auth from all APIs": "Nabigong i-verify ang auth mula sa lahat ng APIs", "Failed to generate token from all APIs": "Nabigong gumawa ng token mula sa lahat ng APIs", "Generating token...": "Gumagawa ng token...", "Abort": "Itigil", "Network error occurred": "May naganap na network error", "Request timeout - please try again": "Nag-timeout ang request - mangyaring subukan muli", "Failed to parse API response": "Nabigong i-parse ang API response", "Invalid API response structure": "Di-wastong istruktura ng API response", "Unknown error occurred": "May naganap na hindi kilalang error", "HTTP error! status: {{status}}": "HTTP error! status: {{status}}", "Download already in progress": "Nagda-download na", "No media files found": "Walang nahanap na media files", "Toggle visibility": "I-toggle ang visibility", "Close": "Isara", "Converting GIFs...": "Kino-convert ang mga GIF...", "Downloading...": "Nagda-download...", "Download": "I-download", "Fetching...": "Kumukuha...", "Fetch All": "Kunin Lahat", "Fetch Video": "Kunin ang Video", "Fetch Image": "Kunin ang Larawan", "Fetch GIF": "Kunin ang GIF", "Posts: {{posts}}": "Mga Post: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Kasalukuyang Media: {{current}} • Kabuuang Media: {{total}}", "Failed to download media": "Nabigong i-download ang media", "Demo mode is only available for @xbatchdemo": "Ang demo mode ay available lang para sa @xbatchdemo", "Auth Token": "Auth Token", "Enter your auth token": "Ilagay ang iyong auth token", "Your authentication token for API access": "Ang iyong authentication token para sa API access", "Patreon Auth": "Patreon Auth", "Enter your Patreon auth": "Ilagay ang iyong Patreon auth", "Your Patreon authentication key": "Ang iyong Patreon authentication key", "Please enter Patreon auth first": "Mangyaring ilagay muna ang Patreon auth", "Please verify Patreon auth first": "Mangyaring i-verify muna ang Patreon auth", "Patreon auth verified successfully": "Matagumpay na na-verify ang Patreon auth", "Invalid Patreon auth": "Di-wastong Patreon auth", "Verification failed. Please try again": "Nabigo ang verification. Mangyaring subukan muli", "Generating": "Gumagawa", "Generate": "Gumawa", "Verify": "I-verify", "Token generated successfully": "Matagumpay na nagawa ang token ({{current}}/{{total}})", "Failed to generate token": "Nabigong gumawa ng token", "Token generation failed. Please try again": "Nabigo ang paggawa ng token. Mangyaring subukan muli", "Verifying": "Vine-verify", "Verified": "Na-verify na", "Use code": "Gamitin ang code", "for Patreon Auth, click Verify to unlock demo. Test at": "para sa Patreon Auth, i-click ang Verify para i-unlock ang demo. Subukan sa", "Need help with Auth Token? See": "Kailangan ng tulong sa Auth Token? Tingnan ang", "the guide": "gabay", "Subscribe": "Mag-subscribe", "to get your Patreon Auth code and start downloading with ease!": "para makuha ang iyong Patreon Auth code at magsimulang mag-download nang madali!", "Report bugs or request features:": "Mag-ulat ng mga bug o humingi ng mga feature:", "Import": "Mag-import", "Importing...": "Nag-iimport...", "Supports JSON and ZIP formats": "Sumusuporta sa JSON at ZIP formats", "Export": "Mag-export", "Export All Data": "I-export ang Lahat ng Data", "Exporting...": "Nag-eexport...", "Clear": "Burahin", "Filter by Batch": "I-filter ayon sa Batch", "Are you sure to clear all data in the database?": "Sigurado ka bang buburahin ang lahat ng data sa database?", "Delete Account Data": "Burahin ang Account Data", "Are you sure you want to delete account data? This action cannot be undone": "Sigurado ka bang buburahin ang data ni {{username}}? Hindi na ito maaaring ibalik.", "Delete": "Burahin", "Deleting...": "Binubura...", "Overwrite": "I-overwrite", "Overwrite Existing Data?": "I-overwrite ang Existing Data?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Ang account data para kay @{{username}} ay umiiral na sa database. Gusto mo bang i-overwrite ito?", "No accounts yet": "Wala pang mga account", "Use Dashboard to fetch data.": "Gamitin ang Dashboard para kunin ang data.", "Something went wrong.": "May nangyaring mali.", "Error:": "Error:", "Fetch": "Kunin", "Single": "Iisa", "Batch": "Batch", "Auto Batch": "Auto Batch", "Timeline": "Timeline", "Media": "Media", "Batch Size": "Laki ng Batch", "Starting Batch": "Nagsisimulang Batch", "Posts": "Mga Post", "Tweets": "Mga Tweet", "Replies": "Mga Tugon", "All": "Lahat", "Image": "Larawan", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Simulan", "Stop": "Itigil", "Prev": "Nakaraan", "Next": "Susunod", "Download Current": "I-download ang Kasalukuyan", "Download All": "I-download Lahat", "Use Batch/Auto Batch if single fetch fails": "Gumamit ng Batch/Auto Batch kung nabigo ang single fetch", "Load from database": "Mag-load mula sa database", "Load database": "Mag-load ng database", "First Page": "Unang Pahina", "Last Page": "Huling Pahina", "Failed to load data": "Nabigong mag-load ng data", "Update": "I-update", "Updating...": "Nag-uupdate...", "Update will fetch the latest data and overwrite the database. Continue?": "Ang update ay kukuha ng pinakabagong data at i-overwrite ang database. Magpatuloy?", "Followers": "Mga Tagasunod", "Following": "Sinusundan", "Joined": "Sumali", "Open": "Buksan", "Preview": "Preview", "View Database": "Tingnan ang Database", "Converting...": "Kino-convert...", "Convert & Download": "I-convert at I-download", "Date Since": "Petsa Mula", "Date Until": "Petsa Hanggang", "Empty dates will fetch all available media": "Walang petsa ay kukuha ng lahat ng available na media", "Filter by Date Range": "I-filter ayon sa Hanay ng Petsa", "Include Retweets": "Isama ang mga Retweet", "Not supported with Media timeline": "Hindi suportado sa Media timeline", "No media found for date range {{since}} to {{until}}": "Walang nahanap na media para sa petsa {{since}} hanggang {{until}}", "No tweets found for this account": "Walang nahanap na tweets para sa account na ito", "No media found in {{count}} tweets": "Walang nahanap na media sa {{count}} tweets" } }; const fr = { "common": { "Settings": "Paramètres", "Server": "Serveur", "Choose the server closest to your location for best performance": "Choisissez le serveur le plus proche de votre emplacement pour de meilleures performances", "Theme": "Thème", "Change Theme": "Changer le thème", "Language": "Langue", "Change Language": "Changer la langue", "Font Family": "Famille de Police", "System Default": "Par Défaut du Système", "Date Time Format": "Format date et heure", "Sound Effects": "Effets Sonores", "Debug": "Débogage", "Global Settings": "Paramètres globaux", "Version": "Version", "Common Formats:": "Formats courants :", "Date Formats:": "Formats de date :", "Time Formats:": "Formats d'heure :", "Combined Examples:": "Exemples combinés :", "Localized": "Localisé", "Reset Settings": "Réinitialiser les paramètres", "Are you sure you want to reset settings to defaults?": "Êtes-vous sûr de vouloir réinitialiser les paramètres par défaut ?", "Reset": "Réinitialiser", "Cancel": "Annuler", "Chrome": "Chrome", "Userscript": "Script utilisateur", "Status": "Statut", "Home": "Accueil", "Patreon": "Patreon", "Dashboard": "Tableau de bord", "Database": "Base de données", "Auth": "Authentification", "Convert Animated GIFs": "Convertir des GIFs", "Convert GIFs (External)": "Convertir des GIFs (Externe)", "Concurrent Downloads": "Téléchargements simultanés", "Use 10+ only with fast internet": "Utilisez 10+ uniquement avec une connexion rapide", "Smaller size, same quality": "Taille plus petite, même qualité", "Larger size, same quality": "Taille plus grande, même qualité", "Back": "Retour", "Please visit a profile page for auto-detection": "Veuillez visiter une page de profil pour la détection automatique", "Please configure authentication in the Auth tab first": "Veuillez d'abord configurer l'authentification dans l'onglet Auth", "Invalid username format": "Format de nom d'utilisateur invalide", "Invalid auth token. Please check your settings.": "Token d'authentification invalide. Veuillez vérifier vos paramètres.", "Invalid Patreon auth. Please check your settings.": "Authentification Patreon invalide. Veuillez vérifier vos paramètres.", "Failed to fetch data": "Échec de récupération des données", "Failed to fetch data from all APIs": "Échec de récupération des données depuis toutes les API", "Failed to verify auth from all APIs": "Échec de vérification de l'authentification depuis toutes les API", "Failed to generate token from all APIs": "Échec de génération du jeton depuis toutes les API", "Generating token...": "Génération du jeton...", "Abort": "Abandonner", "Network error occurred": "Une erreur réseau s'est produite", "Request timeout - please try again": "Délai d’attente dépassé - veuillez réessayer", "Failed to parse API response": "Échec de l’analyse de la réponse de l’API", "Invalid API response structure": "Structure de réponse de l’API invalide", "Unknown error occurred": "Une erreur inconnue s'est produite", "HTTP error! status: {{status}}": "Erreur HTTP ! statut : {{status}}", "Download already in progress": "Téléchargement déjà en cours", "No media files found": "Aucun fichier multimédia trouvé", "Toggle visibility": "Afficher/masquer", "Close": "Fermer", "Converting GIFs...": "Conversion des GIFs...", "Downloading...": "Téléchargement...", "Download": "Télécharger", "Fetching...": "Récupération...", "Fetch All": "Tout récupérer", "Fetch Video": "Récupérer la vidéo", "Fetch Image": "Récupérer l'image", "Fetch GIF": "Récupérer le GIF", "Posts: {{posts}}": "Publications : {{posts}}", "Media: {{media}}": "Médias : {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Médias actuels : {{current}} • Médias totaux : {{total}}", "Failed to download media": "Échec de téléchargement des médias", "Demo mode is only available for @xbatchdemo": "Le mode démo est uniquement disponible pour @xbatchdemo", "Auth Token": "Token d'authentification", "Enter your auth token": "Entrez votre token d'authentification", "Your authentication token for API access": "Votre token d'authentification pour l'accès API", "Patreon Auth": "Authentification Patreon", "Enter your Patreon auth": "Entrez votre authentification Patreon", "Your Patreon authentication key": "Votre clé d'authentification Patreon", "Please enter Patreon auth first": "Veuillez d'abord saisir l'authentification Patreon", "Please verify Patreon auth first": "Veuillez d'abord vérifier l'authentification Patreon", "Patreon auth verified successfully": "Authentification Patreon vérifiée avec succès", "Invalid Patreon auth": "Authentification Patreon invalide", "Verification failed. Please try again": "Échec de vérification. Veuillez réessayer", "Generating": "Génération", "Generate": "Générer", "Verify": "Vérifier", "Token generated successfully": "Token généré avec succès ({{current}}/{{total}})", "Failed to generate token": "Échec de génération du token", "Token generation failed. Please try again": "Échec de génération du token. Veuillez réessayer", "Verifying": "Vérification", "Verified": "Vérifié", "Use code": "Utilisez le code", "for Patreon Auth, click Verify to unlock demo. Test at": "pour l’authentification Patreon, cliquez sur « Vérifier » pour déverrouiller la démo. Testez sur", "Need help with Auth Token? See": "Besoin d’aide avec le jeton d’authentification ? Voir", "the guide": "le guide", "Subscribe": "S’abonner", "to get your Patreon Auth code and start downloading with ease!": "pour obtenir votre code d’authentification Patreon et commencer à télécharger facilement !", "Report bugs or request features:": "Signalez des bugs ou demandez des fonctionnalités :", "Import": "Importer", "Importing...": "Importation...", "Supports JSON and ZIP formats": "Prend en charge les formats JSON et ZIP", "Export": "Exporter", "Export All Data": "Exporter toutes les données", "Exporting...": "Exportation...", "Clear": "Effacer", "Filter by Batch": "Filtrer par lot", "Are you sure to clear all data in the database?": "Êtes-vous sûr de vouloir effacer toutes les données de la base ?", "Delete Account Data": "Supprimer les données du compte", "Are you sure you want to delete account data? This action cannot be undone": "Êtes-vous sûr de vouloir supprimer les données de {{username}} ? Cette action ne peut pas être annulée.", "Delete": "Supprimer", "Deleting...": "Suppression...", "Overwrite": "Écraser", "Overwrite Existing Data?": "Écraser les données existantes ?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Les données du compte @{{username}} existent déjà dans la base de données. Voulez-vous les écraser ?", "No accounts yet": "Aucun compte pour le moment", "Use Dashboard to fetch data.": "Utilisez le Tableau de bord pour récupérer les données.", "Something went wrong.": "Quelque chose s'est mal passé.", "Error:": "Erreur :", "Fetch": "Récupérer", "Single": "Unique", "Batch": "Lot", "Auto Batch": "Lot automatique", "Timeline": "Chronologie", "Media": "Médias", "Batch Size": "Taille du lot", "Starting Batch": "Lot de départ", "Posts": "Publications", "Tweets": "Tweets", "Replies": "Réponses", "All": "Tout", "Image": "Image", "Video": "Vidéo", "GIF": "GIF", "Batch: {{page}}": "Lot : {{page}}", "Start": "Démarrer", "Stop": "Arrêter", "Prev": "Précédent", "Next": "Suivant", "Download Current": "Télécharger l'actuel", "Download All": "Tout télécharger", "Use Batch/Auto Batch if single fetch fails": "Utilisez Lot/Lot automatique si la récupération unique échoue", "Load from database": "Charger depuis la base de données", "Load database": "Charger la base de données", "First Page": "Première Page", "Last Page": "Dernière Page", "Failed to load data": "Échec du chargement des données", "Update": "Mettre à jour", "Updating...": "Mise à jour en cours...", "Update will fetch the latest data and overwrite the database. Continue?": "La mise à jour récupérera les dernières données et écrasera la base de données. Continuer ?", "Followers": "Abonnés", "Following": "Abonnements", "Joined": "Inscrit", "Open": "Ouvrir", "Preview": "Aperçu", "View Database": "Voir la base de données", "Converting...": "Conversion...", "Convert & Download": "Convertir et télécharger", "Date Since": "Date Depuis", "Date Until": "Date Jusqu'à", "Empty dates will fetch all available media": "Dates vides récupéreront tous les médias disponibles", "Filter by Date Range": "Filtrer par plage de dates", "Include Retweets": "Inclure les retweets", "Not supported with Media timeline": "Non pris en charge avec la chronologie des médias", "No media found for date range {{since}} to {{until}}": "Aucun média trouvé pour la période du {{since}} au {{until}}", "No tweets found for this account": "Aucun tweet trouvé pour ce compte", "No media found in {{count}} tweets": "Aucun média trouvé dans {{count}} tweets" } }; const hi = { "common": { "Settings": "सेटिंग्स", "Server": "सर्वर", "Choose the server closest to your location for best performance": "सर्वोत्तम प्रदर्शन के लिए अपने स्थान के निकटतम सर्वर चुनें", "Theme": "थीम", "Change Theme": "थीम बदलें", "Language": "भाषा", "Change Language": "भाषा बदलें", "Font Family": "फ़ॉन्ट परिवार", "System Default": "सिस्टम डिफ़ॉल्ट", "Date Time Format": "दिनांक समय प्रारूप", "Sound Effects": "ध्वनि प्रभाव", "Debug": "डिबग", "Global Settings": "वैश्विक सेटिंग्स", "Version": "संस्करण", "Common Formats:": "सामान्य प्रारूप:", "Date Formats:": "दिनांक प्रारूप:", "Time Formats:": "समय प्रारूप:", "Combined Examples:": "संयुक्त उदाहरण:", "Localized": "स्थानीयकृत", "Reset Settings": "सेटिंग्स रीसेट करें", "Are you sure you want to reset settings to defaults?": "क्या आप वाकई सेटिंग्स को डिफ़ॉल्ट पर रीसेट करना चाहते हैं?", "Reset": "रीसेट करें", "Cancel": "रद्द करें", "Chrome": "Chrome", "Userscript": "यूज़रस्क्रिप्ट", "Status": "स्थिति", "Home": "होम", "Patreon": "Patreon", "Dashboard": "डैशबोर्ड", "Database": "डेटाबेस", "Auth": "प्रमाणीकरण", "Convert Animated GIFs": "GIFs कन्वर्ट करें", "Convert GIFs (External)": "GIFs कन्वर्ट करें (बाहरी)", "Concurrent Downloads": "समकालिक डाउनलोड", "Use 10+ only with fast internet": "10+ का उपयोग केवल तेज़ इंटरनेट पर करें", "Smaller size, same quality": "आकार छोटा, गुणवत्ता समान", "Larger size, same quality": "आकार बड़ा, गुणवत्ता समान", "Back": "वापस", "Please visit a profile page for auto-detection": "कृपया ऑटो-डिटेक्शन के लिए प्रोफ़ाइल पेज पर जाएं", "Please configure authentication in the Auth tab first": "कृपया पहले ऑथ टैब में प्रमाणीकरण कॉन्फ़िगर करें", "Invalid username format": "अमान्य उपयोगकर्ता नाम प्रारूप", "Invalid auth token. Please check your settings.": "अमान्य ऑथ टोकन। कृपया सेटिंग्स जाँचें।", "Invalid Patreon auth. Please check your settings.": "अमान्य Patreon ऑथ। कृपया अपनी सेटिंग्स जाँचें।", "Failed to fetch data": "डेटा लाना विफल", "Failed to fetch data from all APIs": "सभी API से डेटा प्राप्त करने में विफल", "Failed to verify auth from all APIs": "सभी API से ऑथ सत्यापित करने में विफल", "Failed to generate token from all APIs": "सभी API से टोकन जनरेट करने में विफल", "Generating token...": "टोकन जेनरेट किया जा रहा है...", "Abort": "रद्द करें", "Network error occurred": "नेटवर्क त्रुटि हुई", "Request timeout - please try again": "अनुरोध का समय समाप्त — कृपया पुनः प्रयास करें", "Failed to parse API response": "API प्रतिक्रिया पार्स करने में विफल", "Invalid API response structure": "API प्रतिक्रिया संरचना अमान्य है", "Unknown error occurred": "अज्ञात त्रुटि हुई", "HTTP error! status: {{status}}": "HTTP त्रुटि! स्थिति: {{status}}", "Download already in progress": "डाउनलोड पहले से चल रहा है", "No media files found": "कोई मीडिया फ़ाइलें नहीं मिलीं", "Toggle visibility": "दिखाएँ/छुपाएँ", "Close": "बंद करें", "Converting GIFs...": "GIFs कन्वर्ट हो रहे हैं...", "Downloading...": "डाउनलोड हो रहा है...", "Download": "डाउनलोड करें", "Fetching...": "प्राप्त किया जा रहा है...", "Fetch All": "सब कुछ प्राप्त करें", "Fetch Video": "वीडियो प्राप्त करें", "Fetch Image": "छवि प्राप्त करें", "Fetch GIF": "GIF प्राप्त करें", "Posts: {{posts}}": "पोस्ट: {{posts}}", "Media: {{media}}": "मीडिया: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "वर्तमान मीडिया: {{current}} • कुल मीडिया: {{total}}", "Failed to download media": "मीडिया डाउनलोड विफल", "Demo mode is only available for @xbatchdemo": "डेमो मोड केवल @xbatchdemo के लिए उपलब्ध है", "Auth Token": "ऑथ टोकन", "Enter your auth token": "अपना ऑथ टोकन दर्ज करें", "Your authentication token for API access": "API एक्सेस के लिए आपका ऑथेंटिकेशन टोकन", "Patreon Auth": "Patreon ऑथ", "Enter your Patreon auth": "अपना Patreon ऑथ दर्ज करें", "Your Patreon authentication key": "आपकी Patreon प्रमाणीकरण कुंजी", "Please enter Patreon auth first": "कृपया पहले Patreon ऑथ दर्ज करें", "Please verify Patreon auth first": "कृपया पहले Patreon ऑथ सत्यापित करें", "Patreon auth verified successfully": "Patreon ऑथ सफलतापूर्वक सत्यापित", "Invalid Patreon auth": "अमान्य Patreon ऑथ", "Verification failed. Please try again": "सत्यापन विफल। कृपया पुनः प्रयास करें", "Generating": "उत्पन्न किया जा रहा है", "Generate": "उत्पन्न करें", "Verify": "सत्यापित करें", "Token generated successfully": "टोकन सफलतापूर्वक जनरेट हुआ ({{current}}/{{total}})", "Failed to generate token": "टोकन जनरेट करना विफल", "Token generation failed. Please try again": "टोकन जनरेशन विफल। कृपया पुनः प्रयास करें", "Verifying": "सत्यापित किया जा रहा है", "Verified": "सत्यापित", "Use code": "कोड उपयोग करें", "for Patreon Auth, click Verify to unlock demo. Test at": 'Patreon प्रमाणीकरण के लिए, डेमो अनलॉक करने हेतु "सत्यापित करें" पर क्लिक करें। परीक्षण करें:', "Need help with Auth Token? See": "ऑथ टोकन में मदद चाहिए? देखें", "the guide": "मार्गदर्शिका", "Subscribe": "सदस्यता लें", "to get your Patreon Auth code and start downloading with ease!": "अपना Patreon ऑथ कोड प्राप्त करें और आसानी से डाउनलोड शुरू करें!", "Report bugs or request features:": "बग रिपोर्ट करें या फीचर का अनुरोध करें:", "Import": "आयात करें", "Importing...": "आयात हो रहा है...", "Supports JSON and ZIP formats": "JSON और ZIP प्रारूप समर्थित हैं", "Export": "निर्यात करें", "Export All Data": "सभी डेटा निर्यात करें", "Exporting...": "निर्यात हो रहा है...", "Clear": "साफ़ करें", "Filter by Batch": "बैच द्वारा फ़िल्टर करें", "Are you sure to clear all data in the database?": "क्या आप वाकई डेटाबेस का सारा डेटा साफ़ करना चाहते हैं?", "Delete Account Data": "खाता डेटा हटाएँ", "Are you sure you want to delete account data? This action cannot be undone": "क्या आप वाकई {{username}} का डेटा हटाना चाहते हैं? यह क्रिया वापस नहीं की जा सकती।", "Delete": "हटाएं", "Deleting...": "हटा रहे हैं...", "Overwrite": "ओवरराइट करें", "Overwrite Existing Data?": "मौजूदा डेटा ओवरराइट करें?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} के लिए खाता डेटा पहले से ही डेटाबेस में मौजूद है। क्या आप इसे ओवरराइट करना चाहते हैं?", "No accounts yet": "अभी तक कोई खाता नहीं", "Use Dashboard to fetch data.": "डेटा प्राप्त करने के लिए डैशबोर्ड का उपयोग करें।", "Something went wrong.": "कुछ गलत हो गया।", "Error:": "त्रुटि:", "Fetch": "प्राप्त करें", "Single": "एकल", "Batch": "बैच", "Auto Batch": "ऑटो बैच", "Timeline": "टाइमलाइन", "Media": "मीडिया", "Batch Size": "बैच आकार", "Starting Batch": "प्रारंभिक बैच", "Posts": "पोस्ट", "Tweets": "ट्वीट्स", "Replies": "जवाब", "All": "सभी", "Image": "छवि", "Video": "वीडियो", "GIF": "GIF", "Batch: {{page}}": "बैच: {{page}}", "Start": "प्रारंभ", "Stop": "रोकें", "Prev": "पिछला", "Next": "अगला", "Download Current": "वर्तमान डाउनलोड करें", "Download All": "सभी डाउनलोड करें", "Use Batch/Auto Batch if single fetch fails": "यदि एकल प्राप्ति विफल हो, तो बैच/ऑटो बैच का उपयोग करें", "Load from database": "डेटाबेस से लोड करें", "Load database": "डेटाबेस लोड करें", "First Page": "पहला पृष्ठ", "Last Page": "अंतिम पृष्ठ", "Failed to load data": "डेटा लोड करना विफल", "Update": "अपडेट करें", "Updating...": "अपडेट हो रहा है...", "Update will fetch the latest data and overwrite the database. Continue?": "अपडेट नवीनतम डेटा प्राप्त करेगा और डेटाबेस को ओवरराइट करेगा। जारी रखें?", "Followers": "फॉलोवर्स", "Following": "फॉलो कर रहे हैं", "Joined": "जुड़े", "Open": "खोलें", "Preview": "पूर्वावलोकन", "View Database": "डेटाबेस देखें", "Converting...": "कन्वर्ट हो रहा है...", "Convert & Download": "कन्वर्ट करें और डाउनलोड करें", "Date Since": "तारीख से", "Date Until": "तारीख तक", "Empty dates will fetch all available media": "खाली तिथियां सभी उपलब्ध मीडिया प्राप्त करेंगी", "Filter by Date Range": "दिनांक सीमा के अनुसार फ़िल्टर करें", "Include Retweets": "रीट्वीट शामिल करें", "Not supported with Media timeline": "मीडिया टाइमलाइन के साथ समर्थित नहीं", "No media found for date range {{since}} to {{until}}": "{{since}} से {{until}} की तारीख सीमा के लिए कोई मीडिया नहीं मिला", "No tweets found for this account": "इस खाते के लिए कोई ट्वीट नहीं मिला", "No media found in {{count}} tweets": "{{count}} ट्वीट में कोई मीडिया नहीं मिला" } }; const id = { "common": { "Settings": "Pengaturan", "Server": "Server", "Choose the server closest to your location for best performance": "Pilih server yang paling dekat dengan lokasi Anda untuk performa terbaik", "Theme": "Tema", "Change Theme": "Ubah Tema", "Language": "Bahasa", "Change Language": "Ubah Bahasa", "Font Family": "Jenis Font", "System Default": "Bawaan Sistem", "Date Time Format": "Format Tanggal Waktu", "Sound Effects": "Efek Suara", "Debug": "Debug", "Global Settings": "Pengaturan Global", "Version": "Versi", "Common Formats:": "Format Umum:", "Date Formats:": "Format Tanggal:", "Time Formats:": "Format Waktu:", "Combined Examples:": "Contoh Gabungan:", "Localized": "Terlokalisasi", "Reset Settings": "Reset Pengaturan", "Are you sure you want to reset settings to defaults?": "Apakah Anda yakin ingin mereset pengaturan ke default?", "Reset": "Reset", "Cancel": "Batal", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Status", "Home": "Beranda", "Patreon": "Patreon", "Dashboard": "Dasbor", "Database": "Database", "Auth": "Autentikasi", "Convert Animated GIFs": "Konversi GIF", "Convert GIFs (External)": "Konversi GIF (Eksternal)", "Concurrent Downloads": "Unduhan Bersamaan", "Use 10+ only with fast internet": "Gunakan 10+ hanya dengan internet cepat", "Smaller size, same quality": "Ukuran lebih kecil, kualitas sama", "Larger size, same quality": "Ukuran lebih besar, kualitas sama", "Back": "Kembali", "Please visit a profile page for auto-detection": "Silakan kunjungi halaman profil untuk deteksi otomatis", "Please configure authentication in the Auth tab first": "Silakan konfigurasi autentikasi di tab Auth terlebih dahulu", "Invalid username format": "Format username tidak valid", "Invalid auth token. Please check your settings.": "Token autentikasi tidak valid. Silakan periksa pengaturan Anda.", "Invalid Patreon auth. Please check your settings.": "Autentikasi Patreon tidak valid. Silakan periksa pengaturan Anda.", "Failed to fetch data": "Gagal mengambil data", "Failed to fetch data from all APIs": "Gagal mengambil data dari semua API", "Failed to verify auth from all APIs": "Gagal memverifikasi autentikasi dari semua API", "Failed to generate token from all APIs": "Gagal menghasilkan token dari semua API", "Generating token...": "Menghasilkan token...", "Abort": "Batalkan", "Network error occurred": "Terjadi kesalahan jaringan", "Request timeout - please try again": "Permintaan timeout - silakan coba lagi", "Failed to parse API response": "Gagal mem-parsing respons API", "Invalid API response structure": "Struktur respons API tidak valid", "Unknown error occurred": "Terjadi kesalahan yang tidak diketahui", "HTTP error! status: {{status}}": "Kesalahan HTTP! status: {{status}}", "Download already in progress": "Unduhan sudah berlangsung", "No media files found": "Tidak ada file media ditemukan", "Toggle visibility": "Alihkan visibilitas", "Close": "Tutup", "Converting GIFs...": "Mengonversi GIF...", "Downloading...": "Mengunduh...", "Download": "Unduh", "Fetching...": "Mengambil...", "Fetch All": "Ambil Semua", "Fetch Video": "Ambil Video", "Fetch Image": "Ambil Gambar", "Fetch GIF": "Ambil GIF", "Posts: {{posts}}": "Postingan: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Media Saat Ini: {{current}} • Total Media: {{total}}", "Failed to download media": "Gagal mengunduh media", "Demo mode is only available for @xbatchdemo": "Mode demo hanya tersedia untuk @xbatchdemo", "Auth Token": "Token Autentikasi", "Enter your auth token": "Masukkan token autentikasi Anda", "Your authentication token for API access": "Token autentikasi Anda untuk akses API", "Patreon Auth": "Autentikasi Patreon", "Enter your Patreon auth": "Masukkan autentikasi Patreon Anda", "Your Patreon authentication key": "Kunci autentikasi Patreon Anda", "Please enter Patreon auth first": "Silakan masukkan autentikasi Patreon terlebih dahulu", "Please verify Patreon auth first": "Silakan verifikasi autentikasi Patreon terlebih dahulu", "Patreon auth verified successfully": "Autentikasi Patreon berhasil diverifikasi", "Invalid Patreon auth": "Autentikasi Patreon tidak valid", "Verification failed. Please try again": "Verifikasi gagal. Silakan coba lagi", "Generating": "Menghasilkan", "Generate": "Hasilkan", "Verify": "Verifikasi", "Token generated successfully": "Token berhasil dihasilkan ({{current}}/{{total}})", "Failed to generate token": "Gagal menghasilkan token", "Token generation failed. Please try again": "Pembuatan token gagal. Silakan coba lagi", "Verifying": "Memverifikasi", "Verified": "Terverifikasi", "Use code": "Gunakan kode", "for Patreon Auth, click Verify to unlock demo. Test at": "untuk Autentikasi Patreon, klik Verifikasi untuk membuka demo. Tes di", "Need help with Auth Token? See": "Butuh bantuan dengan Token Autentikasi? Lihat", "the guide": "panduannya", "Subscribe": "Berlangganan", "to get your Patreon Auth code and start downloading with ease!": "untuk mendapatkan kode Autentikasi Patreon dan mulai mengunduh dengan mudah!", "Report bugs or request features:": "Laporkan bug atau minta fitur:", "Import": "Impor", "Importing...": "Mengimpor...", "Supports JSON and ZIP formats": "Mendukung format JSON dan ZIP", "Export": "Ekspor", "Export All Data": "Ekspor Semua Data", "Exporting...": "Mengekspor...", "Clear": "Hapus", "Filter by Batch": "Filter berdasarkan Batch", "Are you sure to clear all data in the database?": "Apakah Anda yakin ingin menghapus semua data di database?", "Delete Account Data": "Hapus Data Akun", "Are you sure you want to delete account data? This action cannot be undone": "Apakah Anda yakin ingin menghapus data {{username}}? Tindakan ini tidak dapat dibatalkan.", "Delete": "Hapus", "Deleting...": "Menghapus...", "Overwrite": "Timpa", "Overwrite Existing Data?": "Timpa Data yang Ada?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Data akun untuk @{{username}} sudah ada di database. Apakah Anda ingin menimpanya?", "No accounts yet": "Belum ada akun", "Use Dashboard to fetch data.": "Gunakan Dasbor untuk mengambil data.", "Something went wrong.": "Terjadi kesalahan.", "Error:": "Kesalahan:", "Fetch": "Ambil", "Single": "Tunggal", "Batch": "Batch", "Auto Batch": "Batch Otomatis", "Timeline": "Timeline", "Media": "Media", "Batch Size": "Ukuran Batch", "Starting Batch": "Batch Awal", "Posts": "Postingan", "Tweets": "Tweet", "Replies": "Balasan", "All": "Semua", "Image": "Gambar", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Mulai", "Stop": "Berhenti", "Prev": "Sebelumnya", "Next": "Selanjutnya", "Download Current": "Unduh Saat Ini", "Download All": "Unduh Semua", "Use Batch/Auto Batch if single fetch fails": "Gunakan Batch/Batch Otomatis jika pengambilan tunggal gagal", "Load from database": "Muat dari database", "Load database": "Muat database", "First Page": "Halaman Pertama", "Last Page": "Halaman Terakhir", "Failed to load data": "Gagal memuat data", "Update": "Perbarui", "Updating...": "Memperbarui...", "Update will fetch the latest data and overwrite the database. Continue?": "Pembaruan akan mengambil data terbaru dan menimpa database. Lanjutkan?", "Followers": "Pengikut", "Following": "Mengikuti", "Joined": "Bergabung", "Open": "Buka", "Preview": "Pratinjau", "View Database": "Lihat Database", "Converting...": "Mengonversi...", "Convert & Download": "Konversi & Unduh", "Date Since": "Tanggal Mulai", "Date Until": "Tanggal Sampai", "Empty dates will fetch all available media": "Tanggal kosong akan mengambil semua media yang tersedia", "Filter by Date Range": "Filter berdasarkan Rentang Tanggal", "Include Retweets": "Sertakan Retweet", "Not supported with Media timeline": "Tidak didukung dengan timeline Media", "No media found for date range {{since}} to {{until}}": "Tidak ada media ditemukan untuk rentang tanggal {{since}} sampai {{until}}", "No tweets found for this account": "Tidak ada tweet ditemukan untuk akun ini", "No media found in {{count}} tweets": "Tidak ada media ditemukan di {{count}} tweet" } }; const it = { "common": { "Settings": "Impostazioni", "Server": "Server", "Choose the server closest to your location for best performance": "Scegli il server più vicino alla tua posizione per le migliori prestazioni", "Theme": "Tema", "Change Theme": "Cambia Tema", "Language": "Lingua", "Change Language": "Cambia Lingua", "Font Family": "Famiglia di Font", "System Default": "Predefinito di Sistema", "Date Time Format": "Formato Data Ora", "Sound Effects": "Effetti Sonori", "Debug": "Debug", "Global Settings": "Impostazioni Globali", "Version": "Versione", "Common Formats:": "Formati Comuni:", "Date Formats:": "Formati Data:", "Time Formats:": "Formati Ora:", "Combined Examples:": "Esempi Combinati:", "Localized": "Localizzato", "Reset Settings": "Ripristina Impostazioni", "Are you sure you want to reset settings to defaults?": "Sei sicuro di voler ripristinare le impostazioni predefinite?", "Reset": "Ripristina", "Cancel": "Annulla", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Stato", "Home": "Home", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Database", "Auth": "Autenticazione", "Convert Animated GIFs": "Converti GIF", "Convert GIFs (External)": "Converti GIF (Esterno)", "Concurrent Downloads": "Download Simultanei", "Use 10+ only with fast internet": "Usa 10+ solo con internet veloce", "Smaller size, same quality": "Dimensione ridotta, stessa qualità", "Larger size, same quality": "Dimensione maggiore, stessa qualità", "Back": "Indietro", "Please visit a profile page for auto-detection": "Visita una pagina profilo per il rilevamento automatico", "Please configure authentication in the Auth tab first": "Configura prima l'autenticazione nella scheda Auth", "Invalid username format": "Formato nome utente non valido", "Invalid auth token. Please check your settings.": "Token di autenticazione non valido. Controlla le impostazioni.", "Invalid Patreon auth. Please check your settings.": "Autenticazione Patreon non valida. Controlla le impostazioni.", "Failed to fetch data": "Impossibile recuperare i dati", "Failed to fetch data from all APIs": "Impossibile recuperare i dati da tutte le API", "Failed to verify auth from all APIs": "Impossibile verificare l'autenticazione da tutte le API", "Failed to generate token from all APIs": "Impossibile generare il token da tutte le API", "Generating token...": "Generazione token...", "Abort": "Interrompi", "Network error occurred": "Si è verificato un errore di rete", "Request timeout - please try again": "Timeout della richiesta - riprova", "Failed to parse API response": "Impossibile analizzare la risposta API", "Invalid API response structure": "Struttura risposta API non valida", "Unknown error occurred": "Si è verificato un errore sconosciuto", "HTTP error! status: {{status}}": "Errore HTTP! stato: {{status}}", "Download already in progress": "Download già in corso", "No media files found": "Nessun file multimediale trovato", "Toggle visibility": "Attiva/disattiva visibilità", "Close": "Chiudi", "Converting GIFs...": "Conversione GIF...", "Downloading...": "Download in corso...", "Download": "Scarica", "Fetching...": "Recupero...", "Fetch All": "Recupera Tutto", "Fetch Video": "Recupera Video", "Fetch Image": "Recupera Immagine", "Fetch GIF": "Recupera GIF", "Posts: {{posts}}": "Post: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Media Corrente: {{current}} • Media Totale: {{total}}", "Failed to download media": "Impossibile scaricare i media", "Demo mode is only available for @xbatchdemo": "La modalità demo è disponibile solo per @xbatchdemo", "Auth Token": "Token di Autenticazione", "Enter your auth token": "Inserisci il tuo token di autenticazione", "Your authentication token for API access": "Il tuo token di autenticazione per l'accesso API", "Patreon Auth": "Autenticazione Patreon", "Enter your Patreon auth": "Inserisci la tua autenticazione Patreon", "Your Patreon authentication key": "La tua chiave di autenticazione Patreon", "Please enter Patreon auth first": "Inserisci prima l'autenticazione Patreon", "Please verify Patreon auth first": "Verifica prima l'autenticazione Patreon", "Patreon auth verified successfully": "Autenticazione Patreon verificata con successo", "Invalid Patreon auth": "Autenticazione Patreon non valida", "Verification failed. Please try again": "Verifica fallita. Riprova", "Generating": "Generazione", "Generate": "Genera", "Verify": "Verifica", "Token generated successfully": "Token generato con successo ({{current}}/{{total}})", "Failed to generate token": "Impossibile generare il token", "Token generation failed. Please try again": "Generazione token fallita. Riprova", "Verifying": "Verifica in corso", "Verified": "Verificato", "Use code": "Usa il codice", "for Patreon Auth, click Verify to unlock demo. Test at": "per l'autenticazione Patreon, clicca Verifica per sbloccare la demo. Testa su", "Need help with Auth Token? See": "Hai bisogno di aiuto con il Token di Autenticazione? Vedi", "the guide": "la guida", "Subscribe": "Abbonati", "to get your Patreon Auth code and start downloading with ease!": "per ottenere il tuo codice di autenticazione Patreon e iniziare a scaricare facilmente!", "Report bugs or request features:": "Segnala bug o richiedi funzionalità:", "Import": "Importa", "Importing...": "Importazione...", "Supports JSON and ZIP formats": "Supporta formati JSON e ZIP", "Export": "Esporta", "Export All Data": "Esporta Tutti i Dati", "Exporting...": "Esportazione...", "Clear": "Cancella", "Filter by Batch": "Filtra per Batch", "Are you sure to clear all data in the database?": "Sei sicuro di voler cancellare tutti i dati nel database?", "Delete Account Data": "Elimina Dati Account", "Are you sure you want to delete account data? This action cannot be undone": "Sei sicuro di voler eliminare i dati di {{username}}? Questa azione non può essere annullata.", "Delete": "Elimina", "Deleting...": "Eliminazione...", "Overwrite": "Sovrascrivi", "Overwrite Existing Data?": "Sovrascrivere i Dati Esistenti?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "I dati dell'account per @{{username}} esistono già nel database. Vuoi sovrascriverli?", "No accounts yet": "Nessun account ancora", "Use Dashboard to fetch data.": "Usa la Dashboard per recuperare i dati.", "Something went wrong.": "Qualcosa è andato storto.", "Error:": "Errore:", "Fetch": "Recupera", "Single": "Singolo", "Batch": "Batch", "Auto Batch": "Batch Automatico", "Timeline": "Timeline", "Media": "Media", "Batch Size": "Dimensione Batch", "Starting Batch": "Batch Iniziale", "Posts": "Post", "Tweets": "Tweet", "Replies": "Risposte", "All": "Tutto", "Image": "Immagine", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Avvia", "Stop": "Ferma", "Prev": "Prec", "Next": "Succ", "Download Current": "Scarica Corrente", "Download All": "Scarica Tutto", "Use Batch/Auto Batch if single fetch fails": "Usa Batch/Batch Automatico se il recupero singolo fallisce", "Load from database": "Carica dal database", "Load database": "Carica database", "First Page": "Prima Pagina", "Last Page": "Ultima Pagina", "Failed to load data": "Impossibile caricare i dati", "Update": "Aggiorna", "Updating...": "Aggiornamento...", "Update will fetch the latest data and overwrite the database. Continue?": "L'aggiornamento recupererà i dati più recenti e sovrascriverà il database. Continuare?", "Followers": "Follower", "Following": "Seguiti", "Joined": "Iscritto", "Open": "Apri", "Preview": "Anteprima", "View Database": "Visualizza Database", "Converting...": "Conversione...", "Convert & Download": "Converti e Scarica", "Date Since": "Data Da", "Date Until": "Data Fino", "Empty dates will fetch all available media": "Date vuote recupereranno tutti i media disponibili", "Filter by Date Range": "Filtra per intervallo di date", "Include Retweets": "Includi Retweet", "Not supported with Media timeline": "Non supportato con timeline Media", "No media found for date range {{since}} to {{until}}": "Nessun media trovato per il periodo dal {{since}} al {{until}}", "No tweets found for this account": "Nessun tweet trovato per questo account", "No media found in {{count}} tweets": "Nessun media trovato in {{count}} tweet" } }; const ja = { "common": { "Settings": "設定", "Server": "サーバー", "Choose the server closest to your location for best performance": "最高のパフォーマンスを得るために、お住まいの地域に最も近いサーバーを選択してください", "Theme": "テーマ", "Change Theme": "テーマを変更", "Language": "言語", "Change Language": "言語を変更", "Font Family": "フォントファミリー", "System Default": "システムデフォルト", "Date Time Format": "日時フォーマット", "Sound Effects": "サウンドエフェクト", "Debug": "デバッグ", "Global Settings": "グローバル設定", "Version": "バージョン", "Common Formats:": "一般的な形式:", "Date Formats:": "日付形式:", "Time Formats:": "時刻形式:", "Combined Examples:": "組み合わせ例:", "Localized": "ローカライズ済み", "Reset Settings": "設定のリセット", "Are you sure you want to reset settings to defaults?": "設定をデフォルトにリセットしてもよろしいですか?", "Reset": "リセット", "Cancel": "キャンセル", "Chrome": "Chrome", "Userscript": "ユーザースクリプト", "Status": "ステータス", "Home": "ホーム", "Patreon": "Patreon", "Dashboard": "ダッシュボード", "Database": "データベース", "Auth": "認証", "Convert Animated GIFs": "GIFを変換", "Convert GIFs (External)": "GIFを変換(外部)", "Concurrent Downloads": "同時ダウンロード数", "Use 10+ only with fast internet": "10以上は高速なインターネット環境でのみ使用してください", "Smaller size, same quality": "サイズは小さく、品質は同じです", "Larger size, same quality": "サイズは大きく、品質は同じです", "Back": "戻る", "Please visit a profile page for auto-detection": "プロフィールページを訪問して自動検出してください", "Please configure authentication in the Auth tab first": "最初に認証タブで認証を設定してください", "Invalid username format": "無効なユーザー名形式", "Invalid auth token. Please check your settings.": "無効な認証トークンです。設定を確認してください。", "Invalid Patreon auth. Please check your settings.": "無効なPatreon認証です。設定を確認してください。", "Failed to fetch data": "データ取得に失敗しました", "Failed to fetch data from all APIs": "すべてのAPIからデータ取得に失敗しました", "Failed to verify auth from all APIs": "すべてのAPIで認証の検証に失敗しました", "Failed to generate token from all APIs": "すべてのAPIでトークン生成に失敗しました", "Generating token...": "トークン生成中...", "Abort": "中止", "Network error occurred": "ネットワークエラーが発生しました", "Request timeout - please try again": "リクエストがタイムアウトしました。もう一度お試しください", "Failed to parse API response": "API 応答の解析に失敗しました", "Invalid API response structure": "無効な API 応答構造です", "Unknown error occurred": "不明なエラーが発生しました", "HTTP error! status: {{status}}": "HTTP エラー! ステータス: {{status}}", "Download already in progress": "ダウンロードはすでに進行中です", "No media files found": "メディアファイルが見つかりません", "Toggle visibility": "表示/非表示を切り替え", "Close": "閉じる", "Converting GIFs...": "GIF変換中...", "Downloading...": "ダウンロード中...", "Download": "ダウンロード", "Fetching...": "取得中...", "Fetch All": "すべて取得", "Fetch Video": "ビデオを取得", "Fetch Image": "画像を取得", "Fetch GIF": "GIFを取得", "Posts: {{posts}}": "投稿: {{posts}}", "Media: {{media}}": "メディア: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "現在のメディア: {{current}} • 合計メディア: {{total}}", "Failed to download media": "メディアダウンロードに失敗しました", "Demo mode is only available for @xbatchdemo": "デモモードは @xbatchdemo のみ利用できます", "Auth Token": "認証トークン", "Enter your auth token": "認証トークンを入力", "Your authentication token for API access": "APIアクセス用の認証トークン", "Patreon Auth": "Patreon認証", "Enter your Patreon auth": "Patreon認証を入力", "Your Patreon authentication key": "Patreon認証キー", "Please enter Patreon auth first": "最初にPatreon認証を入力してください", "Please verify Patreon auth first": "最初にPatreon認証を確認してください", "Patreon auth verified successfully": "Patreon認証が正常に確認されました", "Invalid Patreon auth": "無効なPatreon認証", "Verification failed. Please try again": "検証に失敗しました。再試行してください", "Generating": "生成中", "Generate": "生成", "Verify": "確認", "Token generated successfully": "トークンが正常に生成されました ({{current}}/{{total}})", "Failed to generate token": "トークン生成に失敗しました", "Token generation failed. Please try again": "トークン生成に失敗しました。再試行してください", "Verifying": "確認中", "Verified": "確認済み", "Use code": "コードを使用", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 認証用。デモを有効にするには「確認」をクリック。テスト先:", "Need help with Auth Token? See": "認証トークンでお困りですか?こちらをご覧ください:", "the guide": "ガイド", "Subscribe": "購読する", "to get your Patreon Auth code and start downloading with ease!": "Patreon 認証コードを入手して、簡単にダウンロードを開始しましょう!", "Report bugs or request features:": "バグ報告や機能リクエストはこちら:", "Import": "インポート", "Importing...": "インポート中...", "Supports JSON and ZIP formats": "JSON および ZIP 形式をサポート", "Export": "エクスポート", "Export All Data": "すべてのデータをエクスポート", "Exporting...": "エクスポート中...", "Clear": "クリア", "Filter by Batch": "バッチでフィルター", "Are you sure to clear all data in the database?": "データベースのすべてのデータをクリアしてもよろしいですか?", "Delete Account Data": "アカウントデータの削除", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}のデータを削除してもよろしいですか?この操作は元に戻せません。", "Delete": "削除", "Deleting...": "削除中...", "Overwrite": "上書き", "Overwrite Existing Data?": "既存のデータを上書きしますか?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} のアカウントデータは既にデータベースに存在します。上書きしますか?", "No accounts yet": "まだアカウントがありません", "Use Dashboard to fetch data.": "ダッシュボードを使用してデータを取得してください。", "Something went wrong.": "何かが間違っています。", "Error:": "エラー:", "Fetch": "取得", "Single": "シングル", "Batch": "バッチ", "Auto Batch": "自動バッチ", "Timeline": "タイムライン", "Media": "メディア", "Batch Size": "バッチサイズ", "Starting Batch": "開始バッチ", "Posts": "投稿", "Tweets": "ツイート", "Replies": "返信", "All": "すべて", "Image": "画像", "Video": "ビデオ", "GIF": "GIF", "Batch: {{page}}": "バッチ: {{page}}", "Start": "開始", "Stop": "停止", "Prev": "前へ", "Next": "次へ", "Download Current": "現在をダウンロード", "Download All": "すべてダウンロード", "Use Batch/Auto Batch if single fetch fails": "単一取得が失敗した場合はバッチ/自動バッチを使用してください", "Load from database": "データベースから読み込む", "Load database": "データベースを読み込む", "First Page": "最初のページ", "Last Page": "最後のページ", "Failed to load data": "データの読み込みに失敗しました", "Update": "更新", "Updating...": "更新中...", "Update will fetch the latest data and overwrite the database. Continue?": "更新により最新データを取得し、データベースを上書きします。続行しますか?", "Followers": "フォロワー", "Following": "フォロー中", "Joined": "参加日", "Open": "開く", "Preview": "プレビュー", "View Database": "データベースを表示", "Converting...": "変換中...", "Convert & Download": "変換してダウンロード", "Date Since": "開始日", "Date Until": "終了日", "Empty dates will fetch all available media": "日付が空の場合、利用可能なすべてのメディアを取得します", "Filter by Date Range": "日付範囲でフィルター", "Include Retweets": "リツイートを含む", "Not supported with Media timeline": "メディアタイムラインではサポートされていません", "No media found for date range {{since}} to {{until}}": "{{since}}から{{until}}の期間にメディアが見つかりませんでした", "No tweets found for this account": "このアカウントのツイートが見つかりませんでした", "No media found in {{count}} tweets": "{{count}}件のツイートにメディアが見つかりませんでした" } }; const ko = { "common": { "Settings": "설정", "Server": "서버", "Choose the server closest to your location for best performance": "최상의 성능을 위해 가장 가까운 서버를 선택하세요", "Theme": "테마", "Change Theme": "테마 변경", "Language": "언어", "Change Language": "언어 변경", "Font Family": "글꼴 모음", "System Default": "시스템 기본값", "Date Time Format": "날짜 시간 형식", "Sound Effects": "사운드 효과", "Debug": "디버그", "Global Settings": "전역 설정", "Version": "버전", "Common Formats:": "일반 형식:", "Date Formats:": "날짜 형식:", "Time Formats:": "시간 형식:", "Combined Examples:": "결합 예시:", "Localized": "현지화됨", "Reset Settings": "설정 재설정", "Are you sure you want to reset settings to defaults?": "설정을 기본값으로 재설정하시겠습니까?", "Reset": "재설정", "Cancel": "취소", "Chrome": "Chrome", "Userscript": "유저스크립트", "Status": "상태", "Home": "홈", "Patreon": "Patreon", "Dashboard": "대시보드", "Database": "데이터베이스", "Auth": "인증", "Convert Animated GIFs": "GIF 변환", "Convert GIFs (External)": "GIF 변환 (외부)", "Concurrent Downloads": "동시 다운로드", "Use 10+ only with fast internet": "빠른 인터넷에서만 10+를 사용하세요", "Smaller size, same quality": "더 작은 용량, 동일한 품질", "Larger size, same quality": "더 큰 용량, 동일한 품질", "Back": "뒤로", "Please visit a profile page for auto-detection": "자동 감지를 위해 프로필 페이지를 방문해주세요", "Please configure authentication in the Auth tab first": "먼저 Auth 탭에서 인증을 구성해주세요", "Invalid username format": "잘못된 사용자명 형식", "Invalid auth token. Please check your settings.": "잘못된 인증 토큰입니다. 설정을 확인해주세요.", "Invalid Patreon auth. Please check your settings.": "잘못된 Patreon 인증입니다. 설정을 확인해주세요.", "Failed to fetch data": "데이터 가져오기 실패", "Failed to fetch data from all APIs": "모든 API에서 데이터를 가져오지 못했습니다", "Failed to verify auth from all APIs": "모든 API에서 인증 확인에 실패했습니다", "Failed to generate token from all APIs": "모든 API에서 토큰 생성에 실패했습니다", "Generating token...": "토큰 생성 중...", "Abort": "중단", "Network error occurred": "네트워크 오류가 발생했습니다", "Request timeout - please try again": "요청 시간 초과 - 다시 시도해 주세요", "Failed to parse API response": "API 응답을 파싱하지 못했습니다", "Invalid API response structure": "잘못된 API 응답 구조입니다", "Unknown error occurred": "알 수 없는 오류가 발생했습니다", "HTTP error! status: {{status}}": "HTTP 오류! 상태: {{status}}", "Download already in progress": "다운로드가 이미 진행 중입니다", "No media files found": "미디어 파일을 찾을 수 없습니다", "Toggle visibility": "표시/숨기기", "Close": "닫기", "Converting GIFs...": "GIF 변환 중...", "Downloading...": "다운로드 중...", "Download": "다운로드", "Fetching...": "가져오는 중...", "Fetch All": "전체 가져오기", "Fetch Video": "비디오 가져오기", "Fetch Image": "이미지 가져오기", "Fetch GIF": "GIF 가져오기", "Posts: {{posts}}": "게시물: {{posts}}", "Media: {{media}}": "미디어: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "현재 미디어: {{current}} • 전체 미디어: {{total}}", "Failed to download media": "미디어 다운로드 실패", "Demo mode is only available for @xbatchdemo": "데모 모드는 @xbatchdemo에게만 제공됩니다", "Auth Token": "인증 토큰", "Enter your auth token": "인증 토큰을 입력하세요", "Your authentication token for API access": "API 접근을 위한 인증 토큰", "Patreon Auth": "Patreon 인증", "Enter your Patreon auth": "Patreon 인증을 입력하세요", "Your Patreon authentication key": "Patreon 인증 키", "Please enter Patreon auth first": "먼저 Patreon 인증을 입력해주세요", "Please verify Patreon auth first": "먼저 Patreon 인증을 확인해주세요", "Patreon auth verified successfully": "Patreon 인증이 성공적으로 확인되었습니다", "Invalid Patreon auth": "잘못된 Patreon 인증", "Verification failed. Please try again": "확인 실패. 다시 시도해주세요", "Generating": "생성 중", "Generate": "생성", "Verify": "확인", "Token generated successfully": "토큰이 성공적으로 생성되었습니다 ({{current}}/{{total}})", "Failed to generate token": "토큰 생성 실패", "Token generation failed. Please try again": "토큰 생성 실패. 다시 시도해주세요", "Verifying": "확인 중", "Verified": "확인됨", "Use code": "코드를 사용", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 인증용입니다. 데모를 해제하려면 ‘확인’을 클릭하세요. 테스트:", "Need help with Auth Token? See": "인증 토큰이 필요하신가요? 다음을 참조하세요:", "the guide": "가이드", "Subscribe": "구독하기", "to get your Patreon Auth code and start downloading with ease!": "Patreon 인증 코드를 받아 손쉽게 다운로드를 시작하세요!", "Report bugs or request features:": "버그 신고 또는 기능 요청:", "Import": "가져오기", "Importing...": "가져오는 중...", "Supports JSON and ZIP formats": "JSON 및 ZIP 형식 지원", "Export": "내보내기", "Export All Data": "모든 데이터 내보내기", "Exporting...": "내보내는 중...", "Clear": "삭제", "Filter by Batch": "배치별 필터", "Are you sure to clear all data in the database?": "데이터베이스의 모든 데이터를 삭제하시겠습니까?", "Delete Account Data": "계정 데이터 삭제", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}의 데이터를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "Delete": "삭제", "Deleting...": "삭제 중...", "Overwrite": "덮어쓰기", "Overwrite Existing Data?": "기존 데이터를 덮어쓰시겠습니까?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}}의 계정 데이터가 이미 데이터베이스에 존재합니다. 덮어쓰시겠습니까?", "No accounts yet": "아직 계정이 없습니다", "Use Dashboard to fetch data.": "대시보드를 사용하여 데이터를 가져와주세요.", "Something went wrong.": "문제가 발생했습니다.", "Error:": "오류:", "Fetch": "가져오기", "Single": "단일", "Batch": "배치", "Auto Batch": "자동 배치", "Timeline": "타임라인", "Media": "미디어", "Batch Size": "배치 크기", "Starting Batch": "시작 배치", "Posts": "게시물", "Tweets": "트윗", "Replies": "답글", "All": "전체", "Image": "이미지", "Video": "비디오", "GIF": "GIF", "Batch: {{page}}": "배치: {{page}}", "Start": "시작", "Stop": "중지", "Prev": "이전", "Next": "다음", "Download Current": "현재 다운로드", "Download All": "모두 다운로드", "Use Batch/Auto Batch if single fetch fails": "단일 가져오기가 실패하면 배치/자동 배치를 사용하세요", "Load from database": "데이터베이스에서 불러오기", "Load database": "데이터베이스 불러오기", "First Page": "첫 페이지", "Last Page": "마지막 페이지", "Failed to load data": "데이터 불러오기 실패", "Update": "업데이트", "Updating...": "업데이트 중...", "Update will fetch the latest data and overwrite the database. Continue?": "업데이트는 최신 데이터를 가져와 데이터베이스를 덮어씁니다. 계속하시겠습니까?", "Followers": "팔로워", "Following": "팔로잉", "Joined": "가입일", "Open": "열기", "Preview": "미리보기", "View Database": "데이터베이스 보기", "Converting...": "변환 중...", "Convert & Download": "변환 및 다운로드", "Date Since": "시작 날짜", "Date Until": "종료 날짜", "Empty dates will fetch all available media": "날짜가 비어있으면 사용 가능한 모든 미디어를 가져옵니다", "Filter by Date Range": "날짜 범위로 필터링", "Include Retweets": "리트윗 포함", "Not supported with Media timeline": "미디어 타임라인에서는 지원되지 않음", "No media found for date range {{since}} to {{until}}": "{{since}}부터 {{until}}까지의 기간에 미디어를 찾을 수 없습니다", "No tweets found for this account": "이 계정의 트윗을 찾을 수 없습니다", "No media found in {{count}} tweets": "{{count}}개의 트윗에서 미디어를 찾을 수 없습니다" } }; const nl = { "common": { "Settings": "Instellingen", "Server": "Server", "Choose the server closest to your location for best performance": "Kies de server die het dichtst bij uw locatie ligt voor de beste prestaties", "Theme": "Thema", "Change Theme": "Verander Thema", "Language": "Taal", "Change Language": "Verander Taal", "Font Family": "Lettertypefamilie", "System Default": "Systeemstandaard", "Date Time Format": "Datum Tijd Formaat", "Sound Effects": "Geluidseffecten", "Debug": "Debug", "Global Settings": "Algemene Instellingen", "Version": "Versie", "Common Formats:": "Veelgebruikte Formaten:", "Date Formats:": "Datumformaten:", "Time Formats:": "Tijdformaten:", "Combined Examples:": "Gecombineerde Voorbeelden:", "Localized": "Gelokaliseerd", "Reset Settings": "Reset Instellingen", "Are you sure you want to reset settings to defaults?": "Weet je zeker dat je de instellingen wilt resetten naar standaard?", "Reset": "Reset", "Cancel": "Annuleren", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Status", "Home": "Home", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Database", "Auth": "Authenticatie", "Convert Animated GIFs": "Converteer GIF's", "Convert GIFs (External)": "Converteer GIF's (Extern)", "Concurrent Downloads": "Gelijktijdige Downloads", "Use 10+ only with fast internet": "Gebruik 10+ alleen met snel internet", "Smaller size, same quality": "Kleinere grootte, zelfde kwaliteit", "Larger size, same quality": "Grotere grootte, zelfde kwaliteit", "Back": "Terug", "Please visit a profile page for auto-detection": "Bezoek een profielpagina voor automatische detectie", "Please configure authentication in the Auth tab first": "Configureer eerst de authenticatie in het Auth-tabblad", "Invalid username format": "Ongeldige gebruikersnaam", "Invalid auth token. Please check your settings.": "Ongeldig authenticatietoken. Controleer je instellingen.", "Invalid Patreon auth. Please check your settings.": "Ongeldige Patreon-authenticatie. Controleer je instellingen.", "Failed to fetch data": "Kan gegevens niet ophalen", "Failed to fetch data from all APIs": "Kan gegevens niet ophalen van alle API's", "Failed to verify auth from all APIs": "Kan authenticatie niet verifiëren van alle API's", "Failed to generate token from all APIs": "Kan token niet genereren van alle API's", "Generating token...": "Token genereren...", "Abort": "Afbreken", "Network error occurred": "Netwerkfout opgetreden", "Request timeout - please try again": "Time-out verzoek - probeer opnieuw", "Failed to parse API response": "Kan API-reactie niet parseren", "Invalid API response structure": "Ongeldige API-reactiestructuur", "Unknown error occurred": "Onbekende fout opgetreden", "HTTP error! status: {{status}}": "HTTP-fout! status: {{status}}", "Download already in progress": "Download al bezig", "No media files found": "Geen mediabestanden gevonden", "Toggle visibility": "Schakel zichtbaarheid", "Close": "Sluiten", "Converting GIFs...": "GIF's converteren...", "Downloading...": "Downloaden...", "Download": "Downloaden", "Fetching...": "Ophalen...", "Fetch All": "Alles Ophalen", "Fetch Video": "Video Ophalen", "Fetch Image": "Afbeelding Ophalen", "Fetch GIF": "GIF Ophalen", "Posts: {{posts}}": "Berichten: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Huidige Media: {{current}} • Totale Media: {{total}}", "Failed to download media": "Kan media niet downloaden", "Demo mode is only available for @xbatchdemo": "Demomodus is alleen beschikbaar voor @xbatchdemo", "Auth Token": "Authenticatietoken", "Enter your auth token": "Voer je authenticatietoken in", "Your authentication token for API access": "Je authenticatietoken voor API-toegang", "Patreon Auth": "Patreon Authenticatie", "Enter your Patreon auth": "Voer je Patreon-authenticatie in", "Your Patreon authentication key": "Je Patreon-authenticatiesleutel", "Please enter Patreon auth first": "Voer eerst Patreon-authenticatie in", "Please verify Patreon auth first": "Verifieer eerst Patreon-authenticatie", "Patreon auth verified successfully": "Patreon-authenticatie succesvol geverifieerd", "Invalid Patreon auth": "Ongeldige Patreon-authenticatie", "Verification failed. Please try again": "Verificatie mislukt. Probeer opnieuw", "Generating": "Genereren", "Generate": "Genereren", "Verify": "Verifiëren", "Token generated successfully": "Token succesvol gegenereerd ({{current}}/{{total}})", "Failed to generate token": "Kan token niet genereren", "Token generation failed. Please try again": "Tokengeneratie mislukt. Probeer opnieuw", "Verifying": "Verifiëren", "Verified": "Geverifieerd", "Use code": "Gebruik code", "for Patreon Auth, click Verify to unlock demo. Test at": "voor Patreon Auth, klik op Verifiëren om demo te ontgrendelen. Test op", "Need help with Auth Token? See": "Hulp nodig met Authenticatietoken? Zie", "the guide": "de handleiding", "Subscribe": "Abonneren", "to get your Patreon Auth code and start downloading with ease!": "om je Patreon Auth-code te krijgen en gemakkelijk te beginnen met downloaden!", "Report bugs or request features:": "Rapporteer bugs of vraag functies aan:", "Import": "Importeren", "Importing...": "Importeren...", "Supports JSON and ZIP formats": "Ondersteunt JSON en ZIP formaten", "Export": "Exporteren", "Export All Data": "Alle Gegevens Exporteren", "Exporting...": "Exporteren...", "Clear": "Wissen", "Filter by Batch": "Filter op Batch", "Are you sure to clear all data in the database?": "Weet je zeker dat je alle gegevens in de database wilt wissen?", "Delete Account Data": "Accountgegevens Verwijderen", "Are you sure you want to delete account data? This action cannot be undone": "Weet je zeker dat je de gegevens van {{username}} wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", "Delete": "Verwijderen", "Deleting...": "Verwijderen...", "Overwrite": "Overschrijven", "Overwrite Existing Data?": "Bestaande Gegevens Overschrijven?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Accountgegevens voor @{{username}} bestaan al in de database. Wil je deze overschrijven?", "No accounts yet": "Nog geen accounts", "Use Dashboard to fetch data.": "Gebruik Dashboard om gegevens op te halen.", "Something went wrong.": "Er is iets misgegaan.", "Error:": "Fout:", "Fetch": "Ophalen", "Single": "Enkel", "Batch": "Batch", "Auto Batch": "Auto Batch", "Timeline": "Tijdlijn", "Media": "Media", "Batch Size": "Batch Grootte", "Starting Batch": "Start Batch", "Posts": "Berichten", "Tweets": "Tweets", "Replies": "Antwoorden", "All": "Alles", "Image": "Afbeelding", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Start", "Stop": "Stop", "Prev": "Vorige", "Next": "Volgende", "Download Current": "Huidige Downloaden", "Download All": "Alles Downloaden", "Use Batch/Auto Batch if single fetch fails": "Gebruik Batch/Auto Batch als enkele ophaal mislukt", "Load from database": "Laden vanuit database", "Load database": "Database laden", "First Page": "Eerste Pagina", "Last Page": "Laatste Pagina", "Failed to load data": "Kan gegevens niet laden", "Update": "Bijwerken", "Updating...": "Bijwerken...", "Update will fetch the latest data and overwrite the database. Continue?": "Bijwerken haalt de laatste gegevens op en overschrijft de database. Doorgaan?", "Followers": "Volgers", "Following": "Volgend", "Joined": "Lid sinds", "Open": "Openen", "Preview": "Voorbeeld", "View Database": "Database Bekijken", "Converting...": "Converteren...", "Convert & Download": "Converteren & Downloaden", "Date Since": "Datum Vanaf", "Date Until": "Datum Tot", "Empty dates will fetch all available media": "Lege datums halen alle beschikbare media op", "Filter by Date Range": "Filteren op datumbereik", "Include Retweets": "Retweets opnemen", "Not supported with Media timeline": "Niet ondersteund met mediatijdlijn", "No media found for date range {{since}} to {{until}}": "Geen media gevonden voor de periode {{since}} tot {{until}}", "No tweets found for this account": "Geen tweets gevonden voor dit account", "No media found in {{count}} tweets": "Geen media gevonden in {{count}} tweets" } }; const pt = { "common": { "Settings": "Configurações", "Server": "Servidor", "Choose the server closest to your location for best performance": "Escolha o servidor mais próximo da sua localização para melhor desempenho", "Theme": "Tema", "Change Theme": "Alterar Tema", "Language": "Idioma", "Change Language": "Alterar Idioma", "Font Family": "Família de Fonte", "System Default": "Padrão do Sistema", "Date Time Format": "Formato de Data e Hora", "Sound Effects": "Efeitos Sonoros", "Debug": "Depurar", "Global Settings": "Configurações Globais", "Version": "Versão", "Common Formats:": "Formatos Comuns:", "Date Formats:": "Formatos de Data:", "Time Formats:": "Formatos de Hora:", "Combined Examples:": "Exemplos Combinados:", "Localized": "Localizado", "Reset Settings": "Redefinir configurações", "Are you sure you want to reset settings to defaults?": "Tem certeza de que deseja redefinir as configurações para o padrão?", "Reset": "Redefinir", "Cancel": "Cancelar", "Chrome": "Chrome", "Userscript": "Script de usuário", "Status": "Status", "Home": "Início", "Patreon": "Patreon", "Dashboard": "Painel", "Database": "Banco de Dados", "Auth": "Autenticação", "Convert Animated GIFs": "Converter GIFs", "Convert GIFs (External)": "Converter GIFs (Externo)", "Concurrent Downloads": "Downloads simultâneos", "Use 10+ only with fast internet": "Use 10+ apenas com internet rápida", "Smaller size, same quality": "Tamanho menor, mesma qualidade", "Larger size, same quality": "Tamanho maior, mesma qualidade", "Back": "Voltar", "Please visit a profile page for auto-detection": "Visite uma página de perfil para detecção automática", "Please configure authentication in the Auth tab first": "Configure a autenticação na aba Auth primeiro", "Invalid username format": "Formato de nome de usuário inválido", "Invalid auth token. Please check your settings.": "Token de autenticação inválido. Verifique suas configurações.", "Invalid Patreon auth. Please check your settings.": "Autenticação do Patreon inválida. Verifique suas configurações.", "Failed to fetch data": "Falha ao buscar os dados", "Failed to fetch data from all APIs": "Falha ao buscar os dados em todas as APIs", "Failed to verify auth from all APIs": "Falha ao verificar a autenticação em todas as APIs", "Failed to generate token from all APIs": "Falha ao gerar o token em todas as APIs", "Generating token...": "Gerando token...", "Abort": "Abortar", "Network error occurred": "Ocorreu um erro de rede", "Request timeout - please try again": "Tempo de requisição esgotado - tente novamente", "Failed to parse API response": "Falha ao analisar a resposta da API", "Invalid API response structure": "Estrutura de resposta da API inválida", "Unknown error occurred": "Ocorreu um erro desconhecido", "HTTP error! status: {{status}}": "Erro HTTP! status: {{status}}", "Download already in progress": "Download já em andamento", "No media files found": "Nenhum arquivo de mídia encontrado", "Toggle visibility": "Mostrar/ocultar", "Close": "Fechar", "Converting GIFs...": "Convertendo GIFs...", "Downloading...": "Baixando...", "Download": "Baixar", "Fetching...": "Obtendo...", "Fetch All": "Obter tudo", "Fetch Video": "Obter vídeo", "Fetch Image": "Obter imagem", "Fetch GIF": "Obter GIF", "Posts: {{posts}}": "Publicações: {{posts}}", "Media: {{media}}": "Mídia: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Mídia atual: {{current}} • Mídia total: {{total}}", "Failed to download media": "Falha ao baixar a mídia", "Demo mode is only available for @xbatchdemo": "O modo demonstração está disponível apenas para @xbatchdemo", "Auth Token": "Token de autenticação", "Enter your auth token": "Insira seu token de autenticação", "Your authentication token for API access": "Seu token de autenticação para acesso à API", "Patreon Auth": "Autenticação do Patreon", "Enter your Patreon auth": "Insira sua autenticação do Patreon", "Your Patreon authentication key": "Sua chave de autenticação do Patreon", "Please enter Patreon auth first": "Insira primeiro a autenticação do Patreon", "Please verify Patreon auth first": "Verifique primeiro a autenticação do Patreon", "Patreon auth verified successfully": "Autenticação do Patreon verificada com sucesso", "Invalid Patreon auth": "Autenticação do Patreon inválida", "Verification failed. Please try again": "Falha na verificação. Tente novamente", "Generating": "Gerando", "Generate": "Gerar", "Verify": "Verificar", "Token generated successfully": "Token gerado com sucesso ({{current}}/{{total}})", "Failed to generate token": "Falha ao gerar o token", "Token generation failed. Please try again": "Falha na geração do token. Tente novamente", "Verifying": "Verificando", "Verified": "Verificado", "Use code": "Use o código", "for Patreon Auth, click Verify to unlock demo. Test at": 'para Autenticação do Patreon, clique em "Verificar" para desbloquear a demonstração. Teste em', "Need help with Auth Token? See": "Precisa de ajuda com o token de autenticação? Veja", "the guide": "o guia", "Subscribe": "Assine", "to get your Patreon Auth code and start downloading with ease!": "para obter seu código de autenticação do Patreon e começar a baixar com facilidade!", "Report bugs or request features:": "Relate bugs ou solicite recursos:", "Import": "Importar", "Importing...": "Importando...", "Supports JSON and ZIP formats": "Suporta formatos JSON e ZIP", "Export": "Exportar", "Export All Data": "Exportar todos os dados", "Exporting...": "Exportando...", "Clear": "Limpar", "Filter by Batch": "Filtrar por lote", "Are you sure to clear all data in the database?": "Tem certeza de que deseja limpar todos os dados do banco de dados?", "Delete Account Data": "Excluir dados da conta", "Are you sure you want to delete account data? This action cannot be undone": "Tem certeza de que deseja excluir os dados de {{username}}? Esta ação não pode ser desfeita.", "Delete": "Excluir", "Deleting...": "Excluindo...", "Overwrite": "Substituir", "Overwrite Existing Data?": "Substituir dados existentes?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Os dados da conta @{{username}} já existem no banco de dados. Deseja substituí-los?", "No accounts yet": "Ainda não há contas", "Use Dashboard to fetch data.": "Use o Painel para buscar os dados.", "Something went wrong.": "Algo deu errado.", "Error:": "Erro:", "Fetch": "Buscar", "Single": "Único", "Batch": "Lote", "Auto Batch": "Lote automático", "Timeline": "Linha do tempo", "Media": "Mídia", "Batch Size": "Tamanho do lote", "Starting Batch": "Lote inicial", "Posts": "Publicações", "Tweets": "Tweets", "Replies": "Respostas", "All": "Tudo", "Image": "Imagem", "Video": "Vídeo", "GIF": "GIF", "Batch: {{page}}": "Lote: {{page}}", "Start": "Iniciar", "Stop": "Parar", "Prev": "Anterior", "Next": "Próximo", "Download Current": "Baixar atual", "Download All": "Baixar tudo", "Use Batch/Auto Batch if single fetch fails": "Use Lote/Lote automático se a busca única falhar", "Load from database": "Carregar do banco de dados", "Load database": "Carregar banco de dados", "First Page": "Primeira Página", "Last Page": "Última Página", "Failed to load data": "Falha ao carregar os dados", "Update": "Atualizar", "Updating...": "Atualizando...", "Update will fetch the latest data and overwrite the database. Continue?": "A atualização buscará os dados mais recentes e sobrescreverá o banco de dados. Continuar?", "Followers": "Seguidores", "Following": "Seguindo", "Joined": "Entrou em", "Open": "Abrir", "Preview": "Visualizar", "View Database": "Ver banco de dados", "Converting...": "Convertendo...", "Convert & Download": "Converter e baixar", "Date Since": "Data Desde", "Date Until": "Data Até", "Empty dates will fetch all available media": "Datas vazias buscarão todas as mídias disponíveis", "Filter by Date Range": "Filtrar por intervalo de datas", "Include Retweets": "Incluir Retweets", "Not supported with Media timeline": "Não suportado com linha do tempo de mídia", "No media found for date range {{since}} to {{until}}": "Nenhuma mídia encontrada para o período de {{since}} a {{until}}", "No tweets found for this account": "Nenhum tweet encontrado para esta conta", "No media found in {{count}} tweets": "Nenhuma mídia encontrada em {{count}} tweets" } }; const ru = { "common": { "Settings": "Настройки", "Server": "Сервер", "Choose the server closest to your location for best performance": "Выберите ближайший к вам сервер для лучшей производительности", "Theme": "Тема", "Change Theme": "Изменить тему", "Language": "Язык", "Change Language": "Изменить язык", "Font Family": "Семейство шрифтов", "System Default": "Системный по умолчанию", "Date Time Format": "Формат даты и времени", "Sound Effects": "Звуковые Эффекты", "Debug": "Отладка", "Global Settings": "Глобальные настройки", "Version": "Версия", "Common Formats:": "Общие форматы:", "Date Formats:": "Форматы дат:", "Time Formats:": "Форматы времени:", "Combined Examples:": "Комбинированные примеры:", "Localized": "Локализованный", "Reset Settings": "Сбросить настройки", "Are you sure you want to reset settings to defaults?": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?", "Reset": "Сброс", "Cancel": "Отмена", "Chrome": "Chrome", "Userscript": "Пользовательский скрипт", "Status": "Статус", "Home": "Главная", "Patreon": "Patreon", "Dashboard": "Панель управления", "Database": "База данных", "Auth": "Аутентификация", "Convert Animated GIFs": "Конвертировать GIF", "Convert GIFs (External)": "Конвертировать GIF (внешний)", "Concurrent Downloads": "Одновременные загрузки", "Use 10+ only with fast internet": "Используйте 10+ только при быстром интернете", "Smaller size, same quality": "Меньший размер, то же качество", "Larger size, same quality": "Больший размер, то же качество", "Back": "Назад", "Please visit a profile page for auto-detection": "Посетите страницу профиля для автоопределения", "Please configure authentication in the Auth tab first": "Сначала настройте аутентификацию на вкладке Auth", "Invalid username format": "Недопустимый формат имени пользователя", "Invalid auth token. Please check your settings.": "Недействительный токен аутентификации. Проверьте настройки.", "Invalid Patreon auth. Please check your settings.": "Недействительная авторизация Patreon. Проверьте настройки.", "Failed to fetch data": "Не удалось получить данные", "Failed to fetch data from all APIs": "Не удалось получить данные со всех API", "Failed to verify auth from all APIs": "Не удалось проверить авторизацию через все API", "Failed to generate token from all APIs": "Не удалось сгенерировать токен через все API", "Generating token...": "Генерация токена...", "Abort": "Отменить", "Network error occurred": "Произошла сетевая ошибка", "Request timeout - please try again": "Время ожидания запроса истекло — попробуйте снова", "Failed to parse API response": "Не удалось разобрать ответ API", "Invalid API response structure": "Недопустимая структура ответа API", "Unknown error occurred": "Произошла неизвестная ошибка", "HTTP error! status: {{status}}": "Ошибка HTTP! статус: {{status}}", "Download already in progress": "Загрузка уже выполняется", "No media files found": "Медиафайлы не найдены", "Toggle visibility": "Показать/скрыть", "Close": "Закрыть", "Converting GIFs...": "Конвертация GIF...", "Downloading...": "Загрузка...", "Download": "Скачать", "Fetching...": "Получение...", "Fetch All": "Получить всё", "Fetch Video": "Получить видео", "Fetch Image": "Получить изображение", "Fetch GIF": "Получить GIF", "Posts: {{posts}}": "Публикации: {{posts}}", "Media: {{media}}": "Медиа: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Текущая медиа: {{current}} • Всего медиа: {{total}}", "Failed to download media": "Не удалось скачать медиа", "Demo mode is only available for @xbatchdemo": "Демо-режим доступен только для @xbatchdemo", "Auth Token": "Токен аутентификации", "Enter your auth token": "Введите токен аутентификации", "Your authentication token for API access": "Ваш токен аутентификации для доступа к API", "Patreon Auth": "Авторизация Patreon", "Enter your Patreon auth": "Введите авторизацию Patreon", "Your Patreon authentication key": "Ваш ключ аутентификации Patreon", "Please enter Patreon auth first": "Сначала введите авторизацию Patreon", "Please verify Patreon auth first": "Сначала подтвердите авторизацию Patreon", "Patreon auth verified successfully": "Авторизация Patreon успешно проверена", "Invalid Patreon auth": "Недействительная авторизация Patreon", "Verification failed. Please try again": "Не удалось выполнить проверку. Попробуйте ещё раз", "Generating": "Генерация...", "Generate": "Создать", "Verify": "Проверить", "Token generated successfully": "Токен успешно сгенерирован ({{current}}/{{total}})", "Failed to generate token": "Не удалось сгенерировать токен", "Token generation failed. Please try again": "Не удалось сгенерировать токен. Попробуйте ещё раз", "Verifying": "Проверка...", "Verified": "Проверено", "Use code": "Используйте код", "for Patreon Auth, click Verify to unlock demo. Test at": "для аутентификации Patreon, нажмите «Проверить», чтобы разблокировать демо. Тест:", "Need help with Auth Token? See": "Нужна помощь с токеном аутентификации? См.", "the guide": "руководство", "Subscribe": "Подписаться", "to get your Patreon Auth code and start downloading with ease!": "чтобы получить код аутентификации Patreon и с лёгкостью начать скачивание!", "Report bugs or request features:": "Сообщить об ошибках или запросить функции:", "Import": "Импорт", "Importing...": "Импорт...", "Supports JSON and ZIP formats": "Поддерживает форматы JSON и ZIP", "Export": "Экспорт", "Export All Data": "Экспортировать все данные", "Exporting...": "Экспорт...", "Clear": "Очистить", "Filter by Batch": "Фильтр по пакетам", "Are you sure to clear all data in the database?": "Вы уверены, что хотите очистить все данные в базе данных?", "Delete Account Data": "Удалить данные аккаунта", "Are you sure you want to delete account data? This action cannot be undone": "Вы уверены, что хотите удалить данные {{username}}? Это действие нельзя отменить.", "Delete": "Удалить", "Deleting...": "Удаление...", "Overwrite": "Перезаписать", "Overwrite Existing Data?": "Перезаписать существующие данные?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Данные аккаунта @{{username}} уже существуют в базе данных. Перезаписать их?", "No accounts yet": "Пока нет аккаунтов", "Use Dashboard to fetch data.": "Используйте панель, чтобы получить данные.", "Something went wrong.": "Что-то пошло не так.", "Error:": "Ошибка:", "Fetch": "Получить", "Single": "Одиночный", "Batch": "Пакет", "Auto Batch": "Автопакет", "Timeline": "Лента", "Media": "Медиа", "Batch Size": "Размер пакета", "Starting Batch": "Начальный пакет", "Posts": "Публикации", "Tweets": "Твиты", "Replies": "Ответы", "All": "Все", "Image": "Изображение", "Video": "Видео", "GIF": "GIF", "Batch: {{page}}": "Пакет: {{page}}", "Start": "Старт", "Stop": "Стоп", "Prev": "Назад", "Next": "Далее", "Download Current": "Скачать текущее", "Download All": "Скачать всё", "Use Batch/Auto Batch if single fetch fails": "Используйте пакет/автопакет, если одиночное получение не удалось", "Load from database": "Загрузить из базы данных", "Load database": "Загрузить базу данных", "First Page": "Первая Страница", "Last Page": "Последняя Страница", "Failed to load data": "Не удалось загрузить данные", "Update": "Обновить", "Updating...": "Обновление...", "Update will fetch the latest data and overwrite the database. Continue?": "Обновление получит последние данные и перезапишет базу данных. Продолжить?", "Followers": "Подписчики", "Following": "Подписки", "Joined": "Дата регистрации", "Open": "Открыть", "Preview": "Предпросмотр", "View Database": "Просмотреть базу данных", "Converting...": "Конвертация...", "Convert & Download": "Конвертировать и скачать", "Date Since": "Дата С", "Date Until": "Дата По", "Empty dates will fetch all available media": "Пустые даты загрузят все доступные медиа", "Filter by Date Range": "Фильтр по диапазону дат", "Include Retweets": "Включить ретвиты", "Not supported with Media timeline": "Не поддерживается с медиа-лентой", "No media found for date range {{since}} to {{until}}": "Медиа не найдено за период с {{since}} по {{until}}", "No tweets found for this account": "Твиты для этого аккаунта не найдены", "No media found in {{count}} tweets": "Медиа не найдено в {{count}} твитах" } }; const th = { "common": { "Settings": "การตั้งค่า", "Server": "เซิร์ฟเวอร์", "Choose the server closest to your location for best performance": "เลือกเซิร์ฟเวอร์ที่ใกล้ที่สุดกับตำแหน่งของคุณเพื่อประสิทธิภาพที่ดีที่สุด", "Theme": "ธีม", "Change Theme": "เปลี่ยนธีม", "Language": "ภาษา", "Change Language": "เปลี่ยนภาษา", "Font Family": "ตระกูลฟอนต์", "System Default": "ค่าเริ่มต้นของระบบ", "Date Time Format": "รูปแบบวันที่และเวลา", "Sound Effects": "เอฟเฟกต์เสียง", "Debug": "ดีบัก", "Global Settings": "การตั้งค่าทั่วไป", "Version": "เวอร์ชัน", "Common Formats:": "รูปแบบทั่วไป:", "Date Formats:": "รูปแบบวันที่:", "Time Formats:": "รูปแบบเวลา:", "Combined Examples:": "ตัวอย่างรวม:", "Localized": "แปลเป็นภาษาท้องถิ่น", "Reset Settings": "รีเซ็ตการตั้งค่า", "Are you sure you want to reset settings to defaults?": "คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการตั้งค่าเป็นค่าเริ่มต้น?", "Reset": "รีเซ็ต", "Cancel": "ยกเลิก", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "สถานะ", "Home": "หน้าแรก", "Patreon": "Patreon", "Dashboard": "แดชบอร์ด", "Database": "ฐานข้อมูล", "Auth": "การยืนยันตัวตน", "Convert Animated GIFs": "แปลง GIF", "Convert GIFs (External)": "แปลง GIF (ภายนอก)", "Concurrent Downloads": "ดาวน์โหลดพร้อมกัน", "Use 10+ only with fast internet": "ใช้ 10+ เฉพาะกับอินเทอร์เน็ตเร็วเท่านั้น", "Smaller size, same quality": "ขนาดเล็กลง คุณภาพเท่าเดิม", "Larger size, same quality": "ขนาดใหญ่ขึ้น คุณภาพเท่าเดิม", "Back": "กลับ", "Please visit a profile page for auto-detection": "โปรดไปที่หน้าโปรไฟล์สำหรับการตรวจจับอัตโนมัติ", "Please configure authentication in the Auth tab first": "โปรดกำหนดค่าการยืนยันตัวตนในแท็บ Auth ก่อน", "Invalid username format": "รูปแบบชื่อผู้ใช้ไม่ถูกต้อง", "Invalid auth token. Please check your settings.": "โทเค็นการยืนยันตัวตนไม่ถูกต้อง โปรดตรวจสอบการตั้งค่าของคุณ", "Invalid Patreon auth. Please check your settings.": "การยืนยันตัวตน Patreon ไม่ถูกต้อง โปรดตรวจสอบการตั้งค่าของคุณ", "Failed to fetch data": "ไม่สามารถดึงข้อมูล", "Failed to fetch data from all APIs": "ไม่สามารถดึงข้อมูลจาก API ทั้งหมด", "Failed to verify auth from all APIs": "ไม่สามารถยืนยันตัวตนจาก API ทั้งหมด", "Failed to generate token from all APIs": "ไม่สามารถสร้างโทเค็นจาก API ทั้งหมด", "Generating token...": "กำลังสร้างโทเค็น...", "Abort": "ยกเลิก", "Network error occurred": "เกิดข้อผิดพลาดเครือข่าย", "Request timeout - please try again": "คำขอหมดเวลา - โปรดลองอีกครั้ง", "Failed to parse API response": "ไม่สามารถแยกวิเคราะห์การตอบกลับของ API", "Invalid API response structure": "โครงสร้างการตอบกลับของ API ไม่ถูกต้อง", "Unknown error occurred": "เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ", "HTTP error! status: {{status}}": "ข้อผิดพลาด HTTP! สถานะ: {{status}}", "Download already in progress": "กำลังดาวน์โหลดอยู่แล้ว", "No media files found": "ไม่พบไฟล์สื่อ", "Toggle visibility": "สลับการมองเห็น", "Close": "ปิด", "Converting GIFs...": "กำลังแปลง GIF...", "Downloading...": "กำลังดาวน์โหลด...", "Download": "ดาวน์โหลด", "Fetching...": "กำลังดึงข้อมูล...", "Fetch All": "ดึงทั้งหมด", "Fetch Video": "ดึงวิดีโอ", "Fetch Image": "ดึงรูปภาพ", "Fetch GIF": "ดึง GIF", "Posts: {{posts}}": "โพสต์: {{posts}}", "Media: {{media}}": "สื่อ: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "สื่อปัจจุบัน: {{current}} • สื่อทั้งหมด: {{total}}", "Failed to download media": "ไม่สามารถดาวน์โหลดสื่อ", "Demo mode is only available for @xbatchdemo": "โหมดสาธิตใช้ได้เฉพาะสำหรับ @xbatchdemo เท่านั้น", "Auth Token": "โทเค็นการยืนยันตัวตน", "Enter your auth token": "ป้อนโทเค็นการยืนยันตัวตนของคุณ", "Your authentication token for API access": "โทเค็นการยืนยันตัวตนของคุณสำหรับการเข้าถึง API", "Patreon Auth": "การยืนยันตัวตน Patreon", "Enter your Patreon auth": "ป้อนการยืนยันตัวตน Patreon ของคุณ", "Your Patreon authentication key": "คีย์การยืนยันตัวตน Patreon ของคุณ", "Please enter Patreon auth first": "โปรดป้อนการยืนยันตัวตน Patreon ก่อน", "Please verify Patreon auth first": "โปรดยืนยันการยืนยันตัวตน Patreon ก่อน", "Patreon auth verified successfully": "ยืนยันการยืนยันตัวตน Patreon สำเร็จ", "Invalid Patreon auth": "การยืนยันตัวตน Patreon ไม่ถูกต้อง", "Verification failed. Please try again": "การยืนยันล้มเหลว โปรดลองอีกครั้ง", "Generating": "กำลังสร้าง", "Generate": "สร้าง", "Verify": "ยืนยัน", "Token generated successfully": "สร้างโทเค็นสำเร็จ ({{current}}/{{total}})", "Failed to generate token": "ไม่สามารถสร้างโทเค็น", "Token generation failed. Please try again": "การสร้างโทเค็นล้มเหลว โปรดลองอีกครั้ง", "Verifying": "กำลังยืนยัน", "Verified": "ยืนยันแล้ว", "Use code": "ใช้รหัส", "for Patreon Auth, click Verify to unlock demo. Test at": "สำหรับการยืนยันตัวตน Patreon คลิกยืนยันเพื่อปลดล็อกสาธิต ทดสอบที่", "Need help with Auth Token? See": "ต้องการความช่วยเหลือเกี่ยวกับโทเค็นการยืนยันตัวตนหรือไม่? ดู", "the guide": "คู่มือ", "Subscribe": "สมัครสมาชิก", "to get your Patreon Auth code and start downloading with ease!": "เพื่อรับรหัสการยืนยันตัวตน Patreon และเริ่มดาวน์โหลดได้อย่างง่ายดาย!", "Report bugs or request features:": "รายงานบั๊กหรือขอฟีเจอร์:", "Import": "นำเข้า", "Importing...": "กำลังนำเข้า...", "Supports JSON and ZIP formats": "รองรับรูปแบบ JSON และ ZIP", "Export": "ส่งออก", "Export All Data": "ส่งออกข้อมูลทั้งหมด", "Exporting...": "กำลังส่งออก...", "Clear": "ล้าง", "Filter by Batch": "กรองตามแบทช์", "Are you sure to clear all data in the database?": "คุณแน่ใจหรือไม่ที่จะล้างข้อมูลทั้งหมดในฐานข้อมูล?", "Delete Account Data": "ลบข้อมูลบัญชี", "Are you sure you want to delete account data? This action cannot be undone": "คุณแน่ใจหรือไม่ที่จะลบข้อมูล {{username}}? การกระทำนี้ไม่สามารถยกเลิกได้", "Delete": "ลบ", "Deleting...": "กำลังลบ...", "Overwrite": "เขียนทับ", "Overwrite Existing Data?": "เขียนทับข้อมูลที่มีอยู่?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "ข้อมูลบัญชีสำหรับ @{{username}} มีอยู่แล้วในฐานข้อมูล คุณต้องการเขียนทับหรือไม่?", "No accounts yet": "ยังไม่มีบัญชี", "Use Dashboard to fetch data.": "ใช้แดชบอร์ดเพื่อดึงข้อมูล", "Something went wrong.": "เกิดข้อผิดพลาดบางอย่าง", "Error:": "ข้อผิดพลาด:", "Fetch": "ดึง", "Single": "เดี่ยว", "Batch": "แบทช์", "Auto Batch": "แบทช์อัตโนมัติ", "Timeline": "ไทม์ไลน์", "Media": "สื่อ", "Batch Size": "ขนาดแบทช์", "Starting Batch": "แบทช์เริ่มต้น", "Posts": "โพสต์", "Tweets": "ทวีต", "Replies": "ตอบกลับ", "All": "ทั้งหมด", "Image": "รูปภาพ", "Video": "วิดีโอ", "GIF": "GIF", "Batch: {{page}}": "แบทช์: {{page}}", "Start": "เริ่ม", "Stop": "หยุด", "Prev": "ก่อนหน้า", "Next": "ถัดไป", "Download Current": "ดาวน์โหลดปัจจุบัน", "Download All": "ดาวน์โหลดทั้งหมด", "Use Batch/Auto Batch if single fetch fails": "ใช้แบทช์/แบทช์อัตโนมัติหากการดึงเดี่ยวล้มเหลว", "Load from database": "โหลดจากฐานข้อมูล", "Load database": "โหลดฐานข้อมูล", "First Page": "หน้าแรก", "Last Page": "หน้าสุดท้าย", "Failed to load data": "ไม่สามารถโหลดข้อมูล", "Update": "อัปเดต", "Updating...": "กำลังอัปเดต...", "Update will fetch the latest data and overwrite the database. Continue?": "การอัปเดตจะดึงข้อมูลล่าสุดและเขียนทับฐานข้อมูล ดำเนินการต่อหรือไม่?", "Followers": "ผู้ติดตาม", "Following": "กำลังติดตาม", "Joined": "เข้าร่วม", "Open": "เปิด", "Preview": "ดูตัวอย่าง", "View Database": "ดูฐานข้อมูล", "Converting...": "กำลังแปลง...", "Convert & Download": "แปลงและดาวน์โหลด", "Date Since": "วันที่เริ่มต้น", "Date Until": "วันที่สิ้นสุด", "Empty dates will fetch all available media": "วันที่ว่างจะดึงสื่อทั้งหมดที่มี", "Filter by Date Range": "กรองตามช่วงวันที่", "Include Retweets": "รวมรีทวีต", "Not supported with Media timeline": "ไม่รองรับกับไทม์ไลน์สื่อ", "No media found for date range {{since}} to {{until}}": "ไม่พบสื่อสำหรับช่วงวันที่ {{since}} ถึง {{until}}", "No tweets found for this account": "ไม่พบทวีตสำหรับบัญชีนี้", "No media found in {{count}} tweets": "ไม่พบสื่อใน {{count}} ทวีต" } }; const tr = { "common": { "Settings": "Ayarlar", "Server": "Sunucu", "Choose the server closest to your location for best performance": "En iyi performans için konumunuza en yakın sunucuyu seçin", "Theme": "Tema", "Change Theme": "Tema Değiştir", "Language": "Dil", "Change Language": "Dil Değiştir", "Font Family": "Yazı Tipi Ailesi", "System Default": "Sistem Varsayılanı", "Date Time Format": "Tarih Saat Formatı", "Sound Effects": "Ses Efektleri", "Debug": "Hata Ayıklama", "Global Settings": "Genel Ayarlar", "Version": "Sürüm", "Common Formats:": "Yaygın Formatlar:", "Date Formats:": "Tarih Formatları:", "Time Formats:": "Saat Formatları:", "Combined Examples:": "Birleşik Örnekler:", "Localized": "Yerelleştirilmiş", "Reset Settings": "Ayarları Sıfırla", "Are you sure you want to reset settings to defaults?": "Ayarları varsayılanlara sıfırlamak istediğinizden emin misiniz?", "Reset": "Sıfırla", "Cancel": "İptal", "Chrome": "Chrome", "Userscript": "Kullanıcı Betiği", "Status": "Durum", "Home": "Ana Sayfa", "Patreon": "Patreon", "Dashboard": "Kontrol Paneli", "Database": "Veritabanı", "Auth": "Kimlik Doğrulama", "Convert Animated GIFs": "GIF Dönüştür", "Convert GIFs (External)": "GIF Dönüştür (Harici)", "Concurrent Downloads": "Eşzamanlı İndirmeler", "Use 10+ only with fast internet": "10+'ı yalnızca hızlı internetle kullanın", "Smaller size, same quality": "Daha küçük boyut, aynı kalite", "Larger size, same quality": "Daha büyük boyut, aynı kalite", "Back": "Geri", "Please visit a profile page for auto-detection": "Otomatik algılama için lütfen bir profil sayfasını ziyaret edin", "Please configure authentication in the Auth tab first": "Lütfen önce Kimlik Doğrulama sekmesinde kimlik doğrulamayı yapılandırın", "Invalid username format": "Geçersiz kullanıcı adı formatı", "Invalid auth token. Please check your settings.": "Geçersiz kimlik doğrulama jetonu. Lütfen ayarlarınızı kontrol edin.", "Invalid Patreon auth. Please check your settings.": "Geçersiz Patreon kimlik doğrulaması. Lütfen ayarlarınızı kontrol edin.", "Failed to fetch data": "Veri alınamadı", "Failed to fetch data from all APIs": "Tüm API'lerden veri alınamadı", "Failed to verify auth from all APIs": "Tüm API'lerden kimlik doğrulama doğrulanamadı", "Failed to generate token from all APIs": "Tüm API'lerden jeton oluşturulamadı", "Generating token...": "Jeton oluşturuluyor...", "Abort": "İptal Et", "Network error occurred": "Ağ hatası oluştu", "Request timeout - please try again": "İstek zaman aşımına uğradı - lütfen tekrar deneyin", "Failed to parse API response": "API yanıtı ayrıştırılamadı", "Invalid API response structure": "Geçersiz API yanıt yapısı", "Unknown error occurred": "Bilinmeyen bir hata oluştu", "HTTP error! status: {{status}}": "HTTP hatası! durum: {{status}}", "Download already in progress": "İndirme zaten devam ediyor", "No media files found": "Medya dosyası bulunamadı", "Toggle visibility": "Görünürlüğü değiştir", "Close": "Kapat", "Converting GIFs...": "GIF'ler dönüştürülüyor...", "Downloading...": "İndiriliyor...", "Download": "İndir", "Fetching...": "Alınıyor...", "Fetch All": "Tümünü Al", "Fetch Video": "Video Al", "Fetch Image": "Resim Al", "Fetch GIF": "GIF Al", "Posts: {{posts}}": "Gönderiler: {{posts}}", "Media: {{media}}": "Medya: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Mevcut Medya: {{current}} • Toplam Medya: {{total}}", "Failed to download media": "Medya indirilemedi", "Demo mode is only available for @xbatchdemo": "Demo modu yalnızca @xbatchdemo için kullanılabilir", "Auth Token": "Kimlik Doğrulama Jetonu", "Enter your auth token": "Kimlik doğrulama jetonunuzu girin", "Your authentication token for API access": "API erişimi için kimlik doğrulama jetonunuz", "Patreon Auth": "Patreon Kimlik Doğrulaması", "Enter your Patreon auth": "Patreon kimlik doğrulamanızı girin", "Your Patreon authentication key": "Patreon kimlik doğrulama anahtarınız", "Please enter Patreon auth first": "Lütfen önce Patreon kimlik doğrulamasını girin", "Please verify Patreon auth first": "Lütfen önce Patreon kimlik doğrulamasını doğrulayın", "Patreon auth verified successfully": "Patreon kimlik doğrulaması başarıyla doğrulandı", "Invalid Patreon auth": "Geçersiz Patreon kimlik doğrulaması", "Verification failed. Please try again": "Doğrulama başarısız. Lütfen tekrar deneyin", "Generating": "Oluşturuluyor", "Generate": "Oluştur", "Verify": "Doğrula", "Token generated successfully": "Jeton başarıyla oluşturuldu ({{current}}/{{total}})", "Failed to generate token": "Jeton oluşturulamadı", "Token generation failed. Please try again": "Jeton oluşturma başarısız. Lütfen tekrar deneyin", "Verifying": "Doğrulanıyor", "Verified": "Doğrulandı", "Use code": "Kodu kullan", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon Kimlik Doğrulaması için, demoyu açmak için Doğrula'ya tıklayın. Test edin:", "Need help with Auth Token? See": "Kimlik Doğrulama Jetonu için yardıma mı ihtiyacınız var? Bakın:", "the guide": "kılavuz", "Subscribe": "Abone Ol", "to get your Patreon Auth code and start downloading with ease!": "Patreon Kimlik Doğrulama kodunuzu almak ve kolayca indirmeye başlamak için!", "Report bugs or request features:": "Hata bildirin veya özellik isteyin:", "Import": "İçe Aktar", "Importing...": "İçe aktarılıyor...", "Supports JSON and ZIP formats": "JSON ve ZIP formatlarını destekler", "Export": "Dışa Aktar", "Export All Data": "Tüm Verileri Dışa Aktar", "Exporting...": "Dışa aktarılıyor...", "Clear": "Temizle", "Filter by Batch": "Toplu İşleme Göre Filtrele", "Are you sure to clear all data in the database?": "Veritabanındaki tüm verileri temizlemek istediğinizden emin misiniz?", "Delete Account Data": "Hesap Verilerini Sil", "Are you sure you want to delete account data? This action cannot be undone": "{{username}} verilerini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "Delete": "Sil", "Deleting...": "Siliniyor...", "Overwrite": "Üzerine Yaz", "Overwrite Existing Data?": "Mevcut Verilerin Üzerine Yazılsın mı?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} için hesap verileri veritabanında zaten mevcut. Üzerine yazmak istiyor musunuz?", "No accounts yet": "Henüz hesap yok", "Use Dashboard to fetch data.": "Veri almak için Kontrol Panelini kullanın.", "Something went wrong.": "Bir şeyler ters gitti.", "Error:": "Hata:", "Fetch": "Al", "Single": "Tekil", "Batch": "Toplu İşlem", "Auto Batch": "Otomatik Toplu İşlem", "Timeline": "Zaman Çizelgesi", "Media": "Medya", "Batch Size": "Toplu İşlem Boyutu", "Starting Batch": "Başlangıç Toplu İşlemi", "Posts": "Gönderiler", "Tweets": "Tweet'ler", "Replies": "Yanıtlar", "All": "Tümü", "Image": "Resim", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Toplu İşlem: {{page}}", "Start": "Başlat", "Stop": "Durdur", "Prev": "Önceki", "Next": "Sonraki", "Download Current": "Mevcut'u İndir", "Download All": "Tümünü İndir", "Use Batch/Auto Batch if single fetch fails": "Tekil alma başarısız olursa Toplu İşlem/Otomatik Toplu İşlem kullanın", "Load from database": "Veritabanından yükle", "Load database": "Veritabanını yükle", "First Page": "İlk Sayfa", "Last Page": "Son Sayfa", "Failed to load data": "Veri yüklenemedi", "Update": "Güncelle", "Updating...": "Güncelleniyor...", "Update will fetch the latest data and overwrite the database. Continue?": "Güncelleme en son verileri alacak ve veritabanının üzerine yazacak. Devam edilsin mi?", "Followers": "Takipçiler", "Following": "Takip Edilenler", "Joined": "Katıldı", "Open": "Aç", "Preview": "Önizleme", "View Database": "Veritabanını Görüntüle", "Converting...": "Dönüştürülüyor...", "Convert & Download": "Dönüştür ve İndir", "Date Since": "Başlangıç Tarihi", "Date Until": "Bitiş Tarihi", "Empty dates will fetch all available media": "Boş tarihler mevcut tüm medyayı getirecek", "Filter by Date Range": "Tarih aralığına göre filtrele", "Include Retweets": "Retweetleri Dahil Et", "Not supported with Media timeline": "Medya zaman çizelgesi ile desteklenmez", "No media found for date range {{since}} to {{until}}": "{{since}} ile {{until}} tarihleri arasında medya bulunamadı", "No tweets found for this account": "Bu hesap için tweet bulunamadı", "No media found in {{count}} tweets": "{{count}} tweet içinde medya bulunamadı" } }; const vi = { "common": { "Settings": "Cài đặt", "Server": "Máy chủ", "Choose the server closest to your location for best performance": "Chọn máy chủ gần vị trí của bạn nhất để có hiệu suất tốt nhất", "Theme": "Giao diện", "Change Theme": "Đổi giao diện", "Language": "Ngôn ngữ", "Change Language": "Đổi ngôn ngữ", "Font Family": "Họ Phông Chữ", "System Default": "Mặc Định Hệ Thống", "Date Time Format": "Định dạng ngày giờ", "Sound Effects": "Hiệu Ứng Âm Thanh", "Debug": "Gỡ lỗi", "Global Settings": "Cài đặt chung", "Version": "Phiên bản", "Common Formats:": "Định dạng phổ biến:", "Date Formats:": "Định dạng ngày:", "Time Formats:": "Định dạng giờ:", "Combined Examples:": "Ví dụ kết hợp:", "Localized": "Đã bản địa hóa", "Reset Settings": "Đặt lại cài đặt", "Are you sure you want to reset settings to defaults?": "Bạn có chắc muốn đặt lại cài đặt về mặc định không?", "Reset": "Đặt lại", "Cancel": "Hủy", "Chrome": "Chrome", "Userscript": "Userscript", "Status": "Trạng thái", "Home": "Trang chủ", "Patreon": "Patreon", "Dashboard": "Bảng điều khiển", "Database": "Cơ sở dữ liệu", "Auth": "Xác thực", "Convert Animated GIFs": "Chuyển đổi GIF", "Convert GIFs (External)": "Chuyển đổi GIF (Bên ngoài)", "Concurrent Downloads": "Tải xuống đồng thời", "Use 10+ only with fast internet": "Chỉ sử dụng 10+ với internet nhanh", "Smaller size, same quality": "Kích thước nhỏ hơn, chất lượng tương tự", "Larger size, same quality": "Kích thước lớn hơn, chất lượng tương tự", "Back": "Quay lại", "Please visit a profile page for auto-detection": "Vui lòng truy cập trang hồ sơ để tự động phát hiện", "Please configure authentication in the Auth tab first": "Vui lòng cấu hình xác thực trong tab Xác thực trước", "Invalid username format": "Định dạng tên người dùng không hợp lệ", "Invalid auth token. Please check your settings.": "Token xác thực không hợp lệ. Vui lòng kiểm tra cài đặt của bạn.", "Invalid Patreon auth. Please check your settings.": "Xác thực Patreon không hợp lệ. Vui lòng kiểm tra cài đặt của bạn.", "Failed to fetch data": "Không thể lấy dữ liệu", "Failed to fetch data from all APIs": "Không thể lấy dữ liệu từ tất cả các API", "Failed to verify auth from all APIs": "Không thể xác minh xác thực từ tất cả các API", "Failed to generate token from all APIs": "Không thể tạo token từ tất cả các API", "Generating token...": "Đang tạo token...", "Abort": "Hủy bỏ", "Network error occurred": "Đã xảy ra lỗi mạng", "Request timeout - please try again": "Yêu cầu hết thời gian - vui lòng thử lại", "Failed to parse API response": "Không thể phân tích phản hồi API", "Invalid API response structure": "Cấu trúc phản hồi API không hợp lệ", "Unknown error occurred": "Đã xảy ra lỗi không xác định", "HTTP error! status: {{status}}": "Lỗi HTTP! trạng thái: {{status}}", "Download already in progress": "Đang tải xuống", "No media files found": "Không tìm thấy tệp phương tiện", "Toggle visibility": "Chuyển đổi hiển thị", "Close": "Đóng", "Converting GIFs...": "Đang chuyển đổi GIF...", "Downloading...": "Đang tải xuống...", "Download": "Tải xuống", "Fetching...": "Đang lấy...", "Fetch All": "Lấy tất cả", "Fetch Video": "Lấy video", "Fetch Image": "Lấy hình ảnh", "Fetch GIF": "Lấy GIF", "Posts: {{posts}}": "Bài viết: {{posts}}", "Media: {{media}}": "Phương tiện: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Phương tiện hiện tại: {{current}} • Tổng phương tiện: {{total}}", "Failed to download media": "Không thể tải xuống phương tiện", "Demo mode is only available for @xbatchdemo": "Chế độ demo chỉ khả dụng cho @xbatchdemo", "Auth Token": "Token xác thực", "Enter your auth token": "Nhập token xác thực của bạn", "Your authentication token for API access": "Token xác thực của bạn để truy cập API", "Patreon Auth": "Xác thực Patreon", "Enter your Patreon auth": "Nhập xác thực Patreon của bạn", "Your Patreon authentication key": "Khóa xác thực Patreon của bạn", "Please enter Patreon auth first": "Vui lòng nhập xác thực Patreon trước", "Please verify Patreon auth first": "Vui lòng xác minh xác thực Patreon trước", "Patreon auth verified successfully": "Xác thực Patreon thành công", "Invalid Patreon auth": "Xác thực Patreon không hợp lệ", "Verification failed. Please try again": "Xác minh thất bại. Vui lòng thử lại", "Generating": "Đang tạo", "Generate": "Tạo", "Verify": "Xác minh", "Token generated successfully": "Tạo token thành công ({{current}}/{{total}})", "Failed to generate token": "Không thể tạo token", "Token generation failed. Please try again": "Tạo token thất bại. Vui lòng thử lại", "Verifying": "Đang xác minh", "Verified": "Đã xác minh", "Use code": "Sử dụng mã", "for Patreon Auth, click Verify to unlock demo. Test at": "cho Xác thực Patreon, nhấp Xác minh để mở khóa demo. Thử nghiệm tại", "Need help with Auth Token? See": "Cần trợ giúp với Token xác thực? Xem", "the guide": "hướng dẫn", "Subscribe": "Đăng ký", "to get your Patreon Auth code and start downloading with ease!": "để nhận mã Xác thực Patreon và bắt đầu tải xuống dễ dàng!", "Report bugs or request features:": "Báo cáo lỗi hoặc yêu cầu tính năng:", "Import": "Nhập", "Importing...": "Đang nhập...", "Supports JSON and ZIP formats": "Hỗ trợ định dạng JSON và ZIP", "Export": "Xuất", "Export All Data": "Xuất tất cả dữ liệu", "Exporting...": "Đang xuất...", "Clear": "Xóa", "Filter by Batch": "Lọc theo đợt", "Are you sure to clear all data in the database?": "Bạn có chắc muốn xóa tất cả dữ liệu trong cơ sở dữ liệu không?", "Delete Account Data": "Xóa dữ liệu tài khoản", "Are you sure you want to delete account data? This action cannot be undone": "Bạn có chắc muốn xóa dữ liệu của {{username}} không? Hành động này không thể hoàn tác.", "Delete": "Xóa", "Deleting...": "Đang xóa...", "Overwrite": "Ghi đè", "Overwrite Existing Data?": "Ghi đè dữ liệu hiện có?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Dữ liệu tài khoản cho @{{username}} đã tồn tại trong cơ sở dữ liệu. Bạn có muốn ghi đè không?", "No accounts yet": "Chưa có tài khoản", "Use Dashboard to fetch data.": "Sử dụng Bảng điều khiển để lấy dữ liệu.", "Something went wrong.": "Đã xảy ra lỗi.", "Error:": "Lỗi:", "Fetch": "Lấy", "Single": "Đơn lẻ", "Batch": "Đợt", "Auto Batch": "Đợt tự động", "Timeline": "Dòng thời gian", "Media": "Phương tiện", "Batch Size": "Kích thước đợt", "Starting Batch": "Đợt bắt đầu", "Posts": "Bài viết", "Tweets": "Tweet", "Replies": "Phản hồi", "All": "Tất cả", "Image": "Hình ảnh", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Đợt: {{page}}", "Start": "Bắt đầu", "Stop": "Dừng", "Prev": "Trước", "Next": "Tiếp", "Download Current": "Tải xuống hiện tại", "Download All": "Tải xuống tất cả", "Use Batch/Auto Batch if single fetch fails": "Sử dụng Đợt/Đợt tự động nếu lấy đơn lẻ thất bại", "Load from database": "Tải từ cơ sở dữ liệu", "Load database": "Tải cơ sở dữ liệu", "First Page": "Trang Đầu", "Last Page": "Trang Cuối", "Failed to load data": "Không thể tải dữ liệu", "Update": "Cập nhật", "Updating...": "Đang cập nhật...", "Update will fetch the latest data and overwrite the database. Continue?": "Cập nhật sẽ lấy dữ liệu mới nhất và ghi đè cơ sở dữ liệu. Tiếp tục?", "Followers": "Người theo dõi", "Following": "Đang theo dõi", "Joined": "Đã tham gia", "Open": "Mở", "Preview": "Xem trước", "View Database": "Xem cơ sở dữ liệu", "Converting...": "Đang chuyển đổi...", "Convert & Download": "Chuyển đổi và Tải xuống", "Date Since": "Ngày Từ", "Date Until": "Ngày Đến", "Empty dates will fetch all available media": "Ngày trống sẽ tải tất cả phương tiện có sẵn", "Filter by Date Range": "Lọc theo khoảng ngày", "Include Retweets": "Bao gồm Retweet", "Not supported with Media timeline": "Không được hỗ trợ với dòng thời gian phương tiện", "No media found for date range {{since}} to {{until}}": "Không tìm thấy phương tiện cho khoảng thời gian từ {{since}} đến {{until}}", "No tweets found for this account": "Không tìm thấy tweet cho tài khoản này", "No media found in {{count}} tweets": "Không tìm thấy phương tiện trong {{count}} tweet" } }; const zh_Hans = { "common": { "Settings": "设置", "Server": "服务器", "Choose the server closest to your location for best performance": "选择离您最近的服务器以获得最佳性能", "Theme": "主题", "Change Theme": "更改主题", "Language": "语言", "Change Language": "更改语言", "Font Family": "字体系列", "System Default": "系统默认", "Date Time Format": "日期时间格式", "Sound Effects": "音效", "Debug": "调试开关", "Global Settings": "全局设置", "Version": "版本", "Common Formats:": "常用格式:", "Date Formats:": "日期格式:", "Time Formats:": "时间格式:", "Combined Examples:": "组合示例:", "Localized": "本地化", "Reset Settings": "重置设置", "Are you sure you want to reset settings to defaults?": "确定要将设置重置为默认值吗?", "Reset": "重置", "Cancel": "取消", "Chrome": "Chrome", "Userscript": "用户脚本", "Status": "状态", "Home": "主页", "Patreon": "Patreon", "Dashboard": "仪表板", "Database": "数据库", "Auth": "认证", "Convert Animated GIFs": "转换 GIF", "Convert GIFs (External)": "转换 GIF(外部)", "Concurrent Downloads": "并发下载", "Use 10+ only with fast internet": "仅在网络快速时使用 10+", "Smaller size, same quality": "体积更小,质量相同", "Larger size, same quality": "体积更大,质量相同", "Back": "返回", "Please visit a profile page for auto-detection": "请访问个人资料页面进行自动检测", "Please configure authentication in the Auth tab first": "请先在认证选项卡中配置身份验证", "Invalid username format": "无效的用户名格式", "Invalid auth token. Please check your settings.": "无效的认证令牌,请检查您的设置。", "Invalid Patreon auth. Please check your settings.": "无效的 Patreon 认证,请检查您的设置。", "Failed to fetch data": "获取数据失败", "Failed to fetch data from all APIs": "所有 API 均无法获取数据", "Failed to verify auth from all APIs": "所有 API 均无法验证认证", "Failed to generate token from all APIs": "所有 API 均无法生成令牌", "Generating token...": "正在生成令牌...", "Abort": "中止", "Network error occurred": "发生网络错误", "Request timeout - please try again": "请求超时 - 请重试", "Failed to parse API response": "解析 API 响应失败", "Invalid API response structure": "无效的 API 响应结构", "Unknown error occurred": "发生未知错误", "HTTP error! status: {{status}}": "HTTP 错误!状态:{{status}}", "Download already in progress": "下载已在进行中", "No media files found": "未找到媒体文件", "Toggle visibility": "显示/隐藏", "Close": "关闭", "Converting GIFs...": "正在转换 GIF...", "Downloading...": "正在下载...", "Download": "下载", "Fetching...": "正在获取...", "Fetch All": "获取全部", "Fetch Video": "获取视频", "Fetch Image": "获取图片", "Fetch GIF": "获取 GIF", "Posts: {{posts}}": "帖子:{{posts}}", "Media: {{media}}": "媒体:{{media}}", "Current Media: {{current}} • Total Media: {{total}}": "当前媒体:{{current}} • 总媒体:{{total}}", "Failed to download media": "下载媒体失败", "Demo mode is only available for @xbatchdemo": "演示模式仅适用于 @xbatchdemo", "Auth Token": "认证令牌", "Enter your auth token": "输入您的认证令牌", "Your authentication token for API access": "用于 API 访问的身份验证令牌", "Patreon Auth": "Patreon 认证", "Enter your Patreon auth": "输入您的 Patreon 认证", "Your Patreon authentication key": "您的 Patreon 身份验证密钥", "Please enter Patreon auth first": "请先输入 Patreon 认证", "Please verify Patreon auth first": "请先验证 Patreon 认证", "Patreon auth verified successfully": "Patreon 认证验证成功", "Invalid Patreon auth": "无效的 Patreon 认证", "Verification failed. Please try again": "验证失败,请重试", "Generating": "正在生成", "Generate": "生成", "Verify": "验证", "Token generated successfully": "令牌生成成功 ({{current}}/{{total}})", "Failed to generate token": "生成令牌失败", "Token generation failed. Please try again": "令牌生成失败,请重试", "Verifying": "正在验证", "Verified": "已验证", "Use code": "使用代码", "for Patreon Auth, click Verify to unlock demo. Test at": "用于 Patreon 认证,点击“验证”以解锁演示。测试地址:", "Need help with Auth Token? See": "需要获取认证令牌的帮助?请查看", "the guide": "指南", "Subscribe": "订阅", "to get your Patreon Auth code and start downloading with ease!": "即可获取您的 Patreon 认证码,轻松开始下载!", "Report bugs or request features:": "报告问题或请求功能:", "Import": "导入", "Importing...": "正在导入...", "Supports JSON and ZIP formats": "支持 JSON 和 ZIP 格式", "Export": "导出", "Export All Data": "导出全部数据", "Exporting...": "正在导出...", "Clear": "清空", "Filter by Batch": "按批次过滤", "Are you sure to clear all data in the database?": "确定要清空数据库中的所有数据吗?", "Delete Account Data": "删除账户数据", "Are you sure you want to delete account data? This action cannot be undone": "您确定要删除 {{username}} 的数据吗?此操作无法撤销。", "Delete": "删除", "Deleting...": "正在删除...", "Overwrite": "覆盖", "Overwrite Existing Data?": "覆盖现有数据?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "账户 @{{username}} 的数据已存在于数据库中。您要覆盖吗?", "No accounts yet": "尚未有账户", "Use Dashboard to fetch data.": "使用仪表板获取数据。", "Something went wrong.": "出错了。", "Error:": "错误:", "Fetch": "获取", "Single": "单次", "Batch": "批量", "Auto Batch": "自动批量", "Timeline": "时间线", "Media": "媒体", "Batch Size": "批量大小", "Starting Batch": "起始批次", "Posts": "帖子", "Tweets": "推文", "Replies": "回复", "All": "全部", "Image": "图片", "Video": "视频", "GIF": "GIF", "Batch: {{page}}": "批次:{{page}}", "Start": "开始", "Stop": "停止", "Prev": "上一页", "Next": "下一页", "Download Current": "下载当前", "Download All": "下载全部", "Use Batch/Auto Batch if single fetch fails": "若单次获取失败,请使用批量/自动批量", "Load from database": "从数据库加载", "Load database": "加载数据库", "First Page": "第一页", "Last Page": "最后一页", "Failed to load data": "加载数据失败", "Update": "更新", "Updating...": "更新中...", "Update will fetch the latest data and overwrite the database. Continue?": "更新将获取最新数据并覆盖数据库。继续吗?", "Followers": "粉丝", "Following": "正在关注", "Joined": "加入时间", "Open": "打开", "Preview": "预览", "View Database": "查看数据库", "Converting...": "转换中...", "Convert & Download": "转换并下载", "Date Since": "开始日期", "Date Until": "结束日期", "Empty dates will fetch all available media": "空日期将获取所有可用媒体", "Filter by Date Range": "按日期范围过滤", "Include Retweets": "包含转推", "Not supported with Media timeline": "媒体时间线不支持", "No media found for date range {{since}} to {{until}}": "未找到日期范围 {{since}} 至 {{until}} 的媒体", "No tweets found for this account": "未找到此账户的推文", "No media found in {{count}} tweets": "在 {{count}} 条推文中未找到媒体" } }; const resources = { "ar": ar, "de": de, "en": en$1, "es": es, "fil": fil, "fr": fr, "hi": hi, "id": id, "it": it, "ja": ja, "ko": ko, "nl": nl, "pt": pt, "ru": ru, "th": th, "tr": tr, "vi": vi, "zh-Hans": zh_Hans }; const logLinesSignal = signals.signal([]); const APP_NAME = "twitter-x-media-batch-downloader-pro"; class Logger { index = 0; buffer = []; bufferTimer = null; isDebugEnabled() { try { const { options: options2 } = require("@/core/options"); return options2.get("debug") ?? false; } catch { return false; } } info(line, ...args) { if (this.isDebugEnabled()) { console.info(`[${APP_NAME}]`, line, ...args); this.writeBuffer({ type: "info", line, index: this.index++ }); } } warn(line, ...args) { if (this.isDebugEnabled()) { console.warn(`[${APP_NAME}]`, line, ...args); this.writeBuffer({ type: "warn", line, index: this.index++ }); } } error(line, ...args) { console.error(`[${APP_NAME}]`, line, ...args); this.writeBuffer({ type: "error", line, index: this.index++ }); } errorWithBanner(msg, err, ...args) { this.error( `${msg} (Message: ${err?.message ?? "none"}) Report bugs: [email protected]`, ...args ); } debug(...args) { if (this.isDebugEnabled()) { console.debug(`[${APP_NAME}]`, ...args); } } writeBuffer(log) { this.buffer.push(log); if (this.bufferTimer) { clearTimeout(this.bufferTimer); } this.bufferTimer = window.setTimeout(() => { this.bufferTimer = null; this.flushBuffer(); }, 0); } flushBuffer() { logLinesSignal.value = [...logLinesSignal.value, ...this.buffer]; this.buffer = []; } } const logger = new Logger(); function safeJSONParse(text) { try { return JSON.parse(text); } catch (e) { logger.error(e.message); return null; } } function cx(...classNames) { return classNames.filter(Boolean).join(" "); } function isEqual(obj1, obj2) { return JSON.stringify(obj1) === JSON.stringify(obj2); } function formatDateTime(date, format) { if (typeof date === "number" || typeof date === "string") { date = dayjs(date); } return date.format(format); } function sanitizeFilename(name) { return name.replace(/[\\/:*?"<>|]/g, "-").replace(/\s+/g, "_").replace(/_+/g, "_").replace(/^_+|_+$/g, ""); } const version = "1.1.0"; const pkg = { version }; const DEFAULT_APP_OPTIONS = { theme: "light", debug: false, soundEffects: true, showControlPanel: true, disabledExtensions: [ "HomeTimelineModule", "ListTimelineModule", "ListSubscribersModule", "ListMembersModule" ], dateTimeFormat: "YYYY-MM-DD HH:mm:ss Z", filenamePattern: "{screen_name}_{id}_{type}_{num}_{date}.{ext}", language: "", fontFamily: "system", version: pkg.version, convertAnimatedGifs: true, convertGifsExternal: false, downloadConcurrency: 1, fetchMode: "single", timelineType: "timeline", mediaType: "all", batchSize: 100, startingBatch: 0, includeRetweets: false, apiServer: "oregon" }; const THEMES = [ "abyss", "acid", "aqua", "autumn", "black", "bumblebee", "business", "caramellatte", "cmyk", "coffee", "corporate", "cupcake", "cyberpunk", "dark", "dim", "dracula", "emerald", "fantasy", "forest", "garden", "halloween", "lemonade", "light", "lofi", "luxury", "night", "nord", "pastel", "retro", "silk", "sunset", "synthwave", "valentine", "winter", "wireframe" ]; const LOCAL_STORAGE_KEY = "twitter-x-media-batch-downloader-pro"; class AppOptionsManager { appOptions = { ...DEFAULT_APP_OPTIONS }; previous = { ...DEFAULT_APP_OPTIONS }; signal = new signals.Signal(0); constructor() { this.loadAppOptions(); } get(key, defaultValue) { return this.appOptions[key] ?? defaultValue; } set(key, value) { this.appOptions[key] = value; this.saveAppOptions(); } loadAppOptions() { this.appOptions = { ...this.appOptions, ...safeJSONParse(localStorage.getItem(LOCAL_STORAGE_KEY) || "{}") }; let migrated = false; const tt = String(this.appOptions.timelineType ?? ""); if (tt === "posts") { this.appOptions.timelineType = "timeline"; migrated = true; } else if (tt === "replies") { this.appOptions.timelineType = "with_replies"; migrated = true; } if (migrated) { logger.info("App options migrated: timelineType updated to new slugs"); setTimeout(() => this.saveAppOptions(), 0); } const oldVersion = this.appOptions.version ?? ""; const newVersion = DEFAULT_APP_OPTIONS.version; if (newVersion.startsWith("1.1") && oldVersion.startsWith("1.0")) { this.appOptions.disabledExtensions = [ ...this.appOptions.disabledExtensions ?? [], "HomeTimelineModule", "ListTimelineModule" ]; logger.info(`App options migrated from v${oldVersion} to v${newVersion}`); setTimeout(() => this.saveAppOptions(), 0); } this.previous = { ...this.appOptions }; logger.info("App options loaded", this.appOptions); this.signal.value++; } saveAppOptions() { const oldValue = this.previous; const newValue = { ...this.appOptions, version: pkg.version }; if (isEqual(oldValue, newValue)) { return; } this.appOptions = newValue; localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(this.appOptions)); this.previous = { ...this.appOptions }; logger.debug("App options saved", this.appOptions); this.signal.value++; } } const appOptionsManager = new AppOptionsManager(); const LANGUAGES_CONFIG = { ar: { name: "العربية", nameEn: "Arabic (العربية)", test: (code) => /^ar/.test(code) }, "zh-Hans": { name: "中文", nameEn: "Chinese (中文)", test: (code) => /^zh/.test(code) }, nl: { name: "Nederlands", nameEn: "Dutch (Nederlands)", test: (code) => /^nl/.test(code) }, en: { name: "English", nameEn: "English", test: (code) => /^en/.test(code) }, fil: { name: "Filipino", nameEn: "Filipino", test: (code) => /^fil/.test(code) }, fr: { name: "Français", nameEn: "French (Français)", test: (code) => /^fr/.test(code) }, de: { name: "Deutsch", nameEn: "German (Deutsch)", test: (code) => /^de/.test(code) }, hi: { name: "हिन्दी", nameEn: "Hindi (हिन्दी)", test: (code) => /^hi/.test(code) }, id: { name: "Bahasa Indonesia", nameEn: "Indonesian (Bahasa Indonesia)", test: (code) => /^id/.test(code) }, it: { name: "Italiano", nameEn: "Italian (Italiano)", test: (code) => /^it/.test(code) }, ja: { name: "日本語", nameEn: "Japanese (日本語)", test: (code) => /^ja/.test(code) }, ko: { name: "한국어", nameEn: "Korean (한국어)", test: (code) => /^ko/.test(code) }, pt: { name: "Português", nameEn: "Portuguese (Português)", test: (code) => /^pt/.test(code) }, ru: { name: "Русский", nameEn: "Russian (Русский)", test: (code) => /^ru/.test(code) }, es: { name: "Español", nameEn: "Spanish (Español)", test: (code) => /^es/.test(code) }, th: { name: "ไทย", nameEn: "Thai (ไทย)", test: (code) => /^th/.test(code) }, tr: { name: "Türkçe", nameEn: "Turkish (Türkçe)", test: (code) => /^tr/.test(code) }, vi: { name: "Tiếng Việt", nameEn: "Vietnamese (Tiếng Việt)", test: (code) => /^vi/.test(code) } }; function detectBrowserLanguage() { const language = window.navigator.language || "en"; for (const [langTag, langConf] of Object.entries(LANGUAGES_CONFIG)) { if (langConf.test(language)) { return langTag; } } return language; } const languageDetector = { type: "languageDetector", detect: function() { return appOptionsManager.get("language") || detectBrowserLanguage(); } }; function initI18n() { if (i18next.isInitialized) { return i18next; } i18next.on("languageChanged", (lng) => { if (!appOptionsManager.get("language")) { appOptionsManager.set("language", lng); } }); i18next.use(languageDetector).init({ initImmediate: true, defaultNS: "common", fallbackLng: "en", nsSeparator: "::", debug: false, resources }); return i18next; } function useTranslation(ns) { const i18n = initI18n(); const [t, setT] = hooks.useState(() => i18n.getFixedT(null, ns ?? null)); const isMountedRef = hooks.useRef(true); const previousNamespaceRef = hooks.useRef(ns); hooks.useEffect(() => { isMountedRef.current = true; if (previousNamespaceRef.current !== ns) { previousNamespaceRef.current = ns; setT(() => i18n.getFixedT(null, ns ?? null)); } function boundReset() { if (isMountedRef.current) { setT(() => i18n.getFixedT(null, ns ?? null)); } } i18n.on("languageChanged", boundReset); return () => { isMountedRef.current = false; i18n.off("languageChanged", boundReset); }; }, [ns]); return { t, i18n }; } function Trans({ i18nKey, ns = "common" }) { const { t } = useTranslation(ns); return u("span", { children: t(i18nKey) }); } class ErrorBoundary extends preact.Component { state = { error: null }; static getDerivedStateFromError(err) { return { error: err.message }; } componentDidCatch(err) { logger.error(err.message, err); this.setState({ error: err.message }); } render() { const i18n = initI18n(); const isArabic = (i18n.language || "").startsWith("ar"); if (this.state.error) { return u("div", { class: "alert alert-error alert-soft p-2", children: [ u(IconExclamationCircle, {}), u("div", { dir: isArabic ? "rtl" : void 0, children: [ u("h3", { class: "font-bold leading-normal", children: u(Trans, { ns: "common", i18nKey: "Something went wrong." }) }), u("p", { class: "text-xs", children: [ u(Trans, { ns: "common", i18nKey: "Error:" }), " ", this.state.error ] }) ] }) ] }); } return this.props.children; } } const API_SERVERS = { oregon: "https://oregon.exyezed.cc", frankfurt: "https://frankfurt.exyezed.cc", singapore: "https://singapore.exyezed.cc" }; const API_CONFIG = { timeout: 6e4 }; function getSelectedServer() { const server = appOptionsManager.get("apiServer") ?? "oregon"; return API_SERVERS[server] || API_SERVERS.oregon; } const mediaDownloaderAPI = { async fetchMediaData(username, authToken, patreonAuth, params) { const timelineType = params?.timelineType ?? "media"; const batchSize = params?.batchSize ?? 100; const startingBatch = params?.startingBatch ?? 0; const mediaType = params?.mediaType ?? "all"; const fetchMode = params?.fetchMode; const dateSince = params?.dateSince; const dateUntil = params?.dateUntil; const includeRetweets = params?.includeRetweets ?? false; const supportsRetweets = timelineType !== "media"; const retweetParam = supportsRetweets && includeRetweets ? "1" : "0"; const shouldAppendRetweet = supportsRetweets && includeRetweets; let endpoint; if (appOptionsManager.get("debug")) { console.group("[API Request Debug]"); console.log("Parameters:", { fetchMode, dateSince, dateUntil, batchSize, startingBatch, mediaType, timelineType, username, includeRetweets }); console.log("Conditions:", { "Is Demo Mode": patreonAuth === "xbatchdemo", "Is Single Mode": fetchMode === "single", "Has Date Range": !!(dateSince || dateUntil), "Is Batch Mode": fetchMode === "batch" || fetchMode === "auto", "Will Include Batch Params": fetchMode !== "single" && !(dateSince || dateUntil) }); } if (patreonAuth === "xbatchdemo") { if (fetchMode === "single") { if (dateSince || dateUntil) { const since = dateSince || "none"; const until = dateUntil || "none"; endpoint = `/demo/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/xbatchdemo/${authToken}/xbatchdemo/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } else { endpoint = `/demo/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/xbatchdemo/${authToken}/xbatchdemo`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } } else if (fetchMode === "date_range" || dateSince || dateUntil) { const since = dateSince || "none"; const until = dateUntil || "none"; if (batchSize > 0 && startingBatch >= 0) { endpoint = `/demo/${encodeURIComponent(timelineType)}/${encodeURIComponent(String(batchSize))}/${encodeURIComponent(String(startingBatch))}/${encodeURIComponent(mediaType)}/xbatchdemo/${authToken}/xbatchdemo/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } else { endpoint = `/demo/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/xbatchdemo/${authToken}/xbatchdemo/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } } else { endpoint = `/demo/${encodeURIComponent(timelineType)}/${encodeURIComponent(String(batchSize))}/${encodeURIComponent(String(startingBatch))}/${encodeURIComponent(mediaType)}/xbatchdemo/${authToken}/xbatchdemo`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } } else if (fetchMode === "single") { if (dateSince || dateUntil) { const since = dateSince || "none"; const until = dateUntil || "none"; endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } else { endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } } else if (fetchMode === "date_range" || dateSince || dateUntil) { const since = dateSince || "none"; const until = dateUntil || "none"; if (batchSize > 0 && startingBatch >= 0) { endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(String(batchSize))}/${encodeURIComponent(String(startingBatch))}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } else { endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}/${since}/${until}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } } else { endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(String(batchSize))}/${encodeURIComponent(String(startingBatch))}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}`; if (shouldAppendRetweet) { endpoint += `/${retweetParam}`; } } const selectedServer = getSelectedServer(); if (appOptionsManager.get("debug")) { console.log("URL Construction:", { "Selected Server": selectedServer, "Full URL": selectedServer + endpoint, "Endpoint": endpoint, "Has Batch Params (100/0)": endpoint.includes("/100/0/") || /\/\d+\/\d+\//.test(endpoint), "Has Date Range": endpoint.includes(dateSince || "") || endpoint.includes(dateUntil || ""), "Pattern": endpoint.split("/").slice(0, 6).join("/") }); console.groupEnd(); } try { const response = await this.makeRequest(selectedServer + endpoint); this.validateNonEmptyResult(response); return response; } catch (error) { throw error; } }, createAPIError(message, status) { let type = "unknown"; let isRetryable = false; if (status === 400) { type = "validation"; isRetryable = false; } else if (status === 401) { type = "authentication"; isRetryable = false; } else if (status === 500) { type = "server"; if (message.includes("Could not authenticate you") || message.includes("401") || message.includes("Unauthorized")) { isRetryable = true; } else { isRetryable = true; } } else if (message.includes("Network error") || message.includes("timeout")) { type = "network"; isRetryable = true; } return { message, status, type, isRetryable }; }, async makeRequest(url) { return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "GET", url, timeout: API_CONFIG.timeout, headers: { "Accept": "application/json", "Content-Type": "application/json" }, onload: (response) => { try { if (response.status === 400) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 401) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 500) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status !== 200) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } const data = JSON.parse(response.responseText); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } resolve(data); } catch (parseError) { if (parseError instanceof Error && parseError.message.startsWith("Invalid")) { reject(parseError); } else { const apiError = this.createAPIError("Failed to parse API response"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); } } }, onerror: () => { const apiError = this.createAPIError("Network error occurred"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); }, ontimeout: () => { const apiError = this.createAPIError("Request timeout - please try again"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); } }); } else { this.makeRequestWithFetch(url).then(resolve).catch(reject); } }); }, async makeRequestWithFetch(url) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), API_CONFIG.timeout); try { const response = await fetch(url, { method: "GET", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" } }); clearTimeout(timeoutId); if (response.status === 400) { const errorData = await response.json(); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 401) { const errorData = await response.json(); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 500) { const errorData = await response.json(); const errorMsg = errorData.error || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (!response.ok) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; throw error; } const data = await response.json(); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; throw error; } return data; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { const apiError2 = this.createAPIError("Request timeout - please try again"); const err2 = new Error(apiError2.message); err2.apiError = apiError2; throw err2; } throw error; } const apiError = this.createAPIError("Unknown error occurred"); const err = new Error(apiError.message); err.apiError = apiError; throw err; } }, validateResponse(data) { return data && typeof data === "object" && data.account_info && typeof data.account_info === "object" && data.metadata && typeof data.metadata === "object" && Array.isArray(data.timeline); }, formatUsername(username) { return username.replace(/^@/, "").trim().toLowerCase(); }, validateUsername(username) { const cleanUsername = this.formatUsername(username); return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername); }, validateNonEmptyResult(data) { const isEmpty = data.timeline.length === 0 && (data.metadata.items_processed === 0 || data.metadata.new_entries === 0); if (isEmpty) { const isDateRangeSearch = !!data.metadata.date_range; let errorMsg = ""; let errorData = void 0; if (isDateRangeSearch) { const { since, until } = data.metadata.date_range; errorMsg = "No media found for date range {{since}} to {{until}}"; errorData = { since, until }; } else if (data.metadata.items_processed === 0) { errorMsg = "No tweets found for this account"; } else { errorMsg = "No media found in {{count}} tweets"; errorData = { count: data.metadata.items_processed }; } const apiError = this.createAPIError(errorMsg, 404); apiError.type = "validation"; apiError.isRetryable = false; const error = new Error(errorMsg); error.apiError = apiError; error.errorData = errorData; throw error; } }, validateAuthToken(token) { return token.trim().length > 10; }, validatePatreonAuth(auth) { return auth.trim().length > 0; }, async verifyPatreonAuth(patreonAuth) { if (patreonAuth === "xbatchdemo") { return { valid: true }; } const endpoint = `/verify/${patreonAuth}`; const selectedServer = getSelectedServer(); try { const response = await this.makeAuthRequest(selectedServer + endpoint); return response; } catch (error) { throw new Error("Failed to verify auth"); } }, async generateAuthToken(patreonAuth) { const endpoint = `/token/${patreonAuth}`; const selectedServer = getSelectedServer(); try { const response = await this.makeAuthRequest(selectedServer + endpoint); return response; } catch (error) { throw new Error("Failed to generate token"); } }, async makeAuthRequest(url) { return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "GET", url, timeout: API_CONFIG.timeout, headers: { "Accept": "application/json", "Content-Type": "application/json" }, onload: (response) => { try { if (response.status !== 200) { reject(new Error(`HTTP error! status: ${response.status}`)); return; } const data = JSON.parse(response.responseText); resolve(data); } catch (parseError) { reject(new Error("Failed to parse API response")); } }, onerror: () => { reject(new Error("Network error occurred")); }, ontimeout: () => { reject(new Error("Request timeout - please try again")); } }); } else { this.makeAuthRequestWithFetch(url).then(resolve).catch(reject); } }); }, async makeAuthRequestWithFetch(url) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), API_CONFIG.timeout); try { const response = await fetch(url, { method: "GET", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" } }); clearTimeout(timeoutId); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return data; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { throw new Error("Request timeout - please try again"); } throw error; } throw new Error("Unknown error occurred"); } } }; class MediaDownloaderDB extends Dexie { accounts; auth_settings; constructor() { super("TwitterXMediaBatchDownloaderPro"); this.version(1).stores({ accounts: "++id, username, cached_at", auth_settings: "++id" }); this.version(2).stores({ accounts: "++id, username, cached_at, batch_identifier", auth_settings: "++id" }); this.version(3).stores({ accounts: "++id, username, cached_at, batch_identifier, batch_mode", auth_settings: "++id" }); } } const mediaDB = new MediaDownloaderDB(); const dbState = { totalAccounts: signals.signal(0), dbChangeSignal: signals.signal(0) }; async function updateTotalCount() { try { dbState.totalAccounts.value = await mediaDB.accounts.count(); } catch { } } const mediaDownloaderDB = { async saveAccount(data) { const account = { ...data, cached_at: Date.now() }; let existing; if (account.batch_mode === "batch_date_range") { const batchDateRangeAccounts = await mediaDB.accounts.where("username").equals(data.username).filter( (acc) => acc.batch_mode === "batch_date_range" && acc.date_since === data.date_since && acc.date_until === data.date_until ).toArray(); if (batchDateRangeAccounts.length > 0) { batchDateRangeAccounts.sort((a, b) => b.cached_at - a.cached_at); existing = batchDateRangeAccounts[0]; } } else if (account.batch_mode === "date_range") { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(data.username).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === data.date_since && acc.date_until === data.date_until ).toArray(); if (dateRangeAccounts.length > 0) { dateRangeAccounts.sort((a, b) => b.cached_at - a.cached_at); existing = dateRangeAccounts[0]; } } else if (account.batch_mode && account.batch_mode !== "single") { const batchAccounts = await mediaDB.accounts.where("username").equals(data.username).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")).toArray(); if (batchAccounts.length > 0) { batchAccounts.sort((a, b) => b.cached_at - a.cached_at); existing = batchAccounts[0]; } } else { existing = await mediaDB.accounts.where("username").equals(data.username).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").first(); } let id2; if (existing) { await mediaDB.accounts.update(existing.id, account); id2 = existing.id; } else { id2 = await mediaDB.accounts.add(account); } await updateTotalCount(); dbState.dbChangeSignal.value++; return id2; }, async insertAccount(data) { const id2 = await mediaDB.accounts.add(data); await updateTotalCount(); dbState.dbChangeSignal.value++; return id2; }, async getAccounts(page = 1, limit = 3, filterByBatch = false, filterByDateRange = false, filterByBatchDateRange = false) { const offset = (page - 1) * limit; let collection = mediaDB.accounts.orderBy("cached_at").reverse(); if (filterByBatchDateRange) { collection = collection.filter((acc) => acc.batch_mode === "batch_date_range"); } else if (filterByDateRange) { collection = collection.filter((acc) => acc.batch_mode === "date_range"); } else if (filterByBatch) { collection = collection.filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")); } return await collection.offset(offset).limit(limit).toArray(); }, async getAccountsCount(filterByBatch = false, filterByDateRange = false, filterByBatchDateRange = false) { if (filterByBatchDateRange) { return await mediaDB.accounts.filter((acc) => acc.batch_mode === "batch_date_range").count(); } else if (filterByDateRange) { return await mediaDB.accounts.filter((acc) => acc.batch_mode === "date_range").count(); } else if (filterByBatch) { return await mediaDB.accounts.filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")).count(); } return await mediaDB.accounts.count(); }, async getAccountByUsername(username) { return await mediaDB.accounts.where("username").equals(username).first(); }, async getAccountsByUsername(username) { return await mediaDB.accounts.where("username").equals(username).reverse().sortBy("cached_at"); }, async getAccountsByUsernameAndMode(username, mode, dateSince, dateUntil) { if (mode === "single") { const account = await mediaDB.accounts.where("username").equals(username).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").first(); return account ? [account] : []; } else if (mode === "batch_date_range") { return await mediaDB.accounts.where("username").equals(username).filter( (acc) => acc.batch_mode === "batch_date_range" && acc.date_since === dateSince && acc.date_until === dateUntil ).toArray(); } else if (mode === "date_range") { return await mediaDB.accounts.where("username").equals(username).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince && acc.date_until === dateUntil ).toArray(); } else { return await mediaDB.accounts.where("username").equals(username).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")).toArray(); } }, async updateAccount(id2, data) { await mediaDB.accounts.update(id2, data); dbState.dbChangeSignal.value++; }, async deleteAccount(id2) { await mediaDB.accounts.delete(id2); await updateTotalCount(); dbState.dbChangeSignal.value++; }, async saveAuthSettings(authToken, patreonAuth) { const existing = await mediaDB.auth_settings.toCollection().first(); const base = existing ? { ...existing } : {}; const settings = { ...base, auth_token: authToken, patreon_auth: patreonAuth, updated_at: Date.now(), patreon_verified: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified : false, patreon_verified_auth: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified_auth : patreonAuth }; if (existing) { await mediaDB.auth_settings.update(existing.id, settings); return existing.id; } else { return await mediaDB.auth_settings.add(settings); } }, async setPatreonVerified(verified) { const existing = await mediaDB.auth_settings.toCollection().first(); if (existing) { await mediaDB.auth_settings.update(existing.id, { patreon_verified: verified, patreon_verified_auth: existing.patreon_auth, updated_at: Date.now() }); } else { await mediaDB.auth_settings.add({ auth_token: "", patreon_auth: "", patreon_verified: verified, patreon_verified_auth: "", updated_at: Date.now() }); } }, async getAuthSettings() { return await mediaDB.auth_settings.toCollection().first(); }, async getAllAccounts() { return await mediaDB.accounts.orderBy("cached_at").reverse().toArray(); }, async clearAll() { await mediaDB.accounts.clear(); dbState.totalAccounts.value = 0; dbState.dbChangeSignal.value++; } }; class Crc32 { constructor() { this.crc = -1; } append(data) { var crc = this.crc | 0; var table = this.table; for (var offset = 0, len = data.length | 0; offset < len; offset++) { crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 255]; } this.crc = crc; } get() { return ~this.crc; } } Crc32.prototype.table = (() => { var i; var j2; var t; var table = []; for (i = 0; i < 256; i++) { t = i; for (j2 = 0; j2 < 8; j2++) { t = t & 1 ? t >>> 1 ^ 3988292384 : t >>> 1; } table[i] = t; } return table; })(); const getDataHelper = (byteLength) => { var uint8 = new Uint8Array(byteLength); return { array: uint8, view: new DataView(uint8.buffer) }; }; const pump = (zipObj) => zipObj.reader.read().then((chunk) => { if (chunk.done) return zipObj.writeFooter(); const outputData = chunk.value; zipObj.crc.append(outputData); zipObj.uncompressedLength += outputData.length; zipObj.compressedLength += outputData.length; zipObj.ctrl.enqueue(outputData); }); function createWriter(underlyingSource) { const files = Object.create(null); const filenames = []; const encoder = new TextEncoder(); let offset = 0; let activeZipIndex = 0; let ctrl; let activeZipObject, closed; function next() { activeZipIndex++; activeZipObject = files[filenames[activeZipIndex]]; if (activeZipObject) processNextChunk(); else if (closed) closeZip(); } var zipWriter = { enqueue(fileLike) { if (closed) throw new TypeError( "Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed" ); let name = fileLike.name.trim(); const date = new Date( typeof fileLike.lastModified === "undefined" ? Date.now() : fileLike.lastModified ); if (fileLike.directory && !name.endsWith("/")) name += "/"; if (files[name]) throw new Error("File already exists."); const nameBuf = encoder.encode(name); filenames.push(name); const zipObject = files[name] = { level: 0, ctrl, directory: !!fileLike.directory, nameBuf, comment: encoder.encode(fileLike.comment || ""), compressedLength: 0, uncompressedLength: 0, writeHeader() { var header = getDataHelper(26); var data = getDataHelper(30 + nameBuf.length); zipObject.offset = offset; zipObject.header = header; if (zipObject.level !== 0 && !zipObject.directory) { header.view.setUint16(4, 2048); } header.view.setUint32(0, 335546376); header.view.setUint16( 6, (date.getHours() << 6 | date.getMinutes()) << 5 | date.getSeconds() / 2, true ); header.view.setUint16( 8, (date.getFullYear() - 1980 << 4 | date.getMonth() + 1) << 5 | date.getDate(), true ); header.view.setUint16(22, nameBuf.length, true); data.view.setUint32(0, 1347093252); data.array.set(header.array, 4); data.array.set(nameBuf, 30); offset += data.array.length; ctrl.enqueue(data.array); }, writeFooter() { var footer = getDataHelper(16); footer.view.setUint32(0, 1347094280); if (zipObject.crc) { zipObject.header.view.setUint32(10, zipObject.crc.get(), true); zipObject.header.view.setUint32(14, zipObject.compressedLength, true); zipObject.header.view.setUint32(18, zipObject.uncompressedLength, true); footer.view.setUint32(4, zipObject.crc.get(), true); footer.view.setUint32(8, zipObject.compressedLength, true); footer.view.setUint32(12, zipObject.uncompressedLength, true); } ctrl.enqueue(footer.array); offset += zipObject.compressedLength + 16; next(); }, fileLike }; if (!activeZipObject) { activeZipObject = zipObject; processNextChunk(); } }, close() { if (closed) throw new TypeError( "Cannot close a readable stream that has already been requested to be closed" ); if (!activeZipObject) closeZip(); closed = true; } }; function closeZip() { var length = 0; var index = 0; var indexFilename, file; for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { file = files[filenames[indexFilename]]; length += 46 + file.nameBuf.length + file.comment.length; } const data = getDataHelper(length + 22); for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { file = files[filenames[indexFilename]]; data.view.setUint32(index, 1347092738); data.view.setUint16(index + 4, 5120); data.array.set(file.header.array, index + 6); data.view.setUint16(index + 32, file.comment.length, true); if (file.directory) { data.view.setUint8(index + 38, 16); } data.view.setUint32(index + 42, file.offset, true); data.array.set(file.nameBuf, index + 46); data.array.set(file.comment, index + 46 + file.nameBuf.length); index += 46 + file.nameBuf.length + file.comment.length; } data.view.setUint32(index, 1347093766); data.view.setUint16(index + 8, filenames.length, true); data.view.setUint16(index + 10, filenames.length, true); data.view.setUint32(index + 12, length, true); data.view.setUint32(index + 16, offset, true); ctrl.enqueue(data.array); ctrl.close(); } function processNextChunk() { if (!activeZipObject) return; if (activeZipObject.directory) return activeZipObject.writeFooter(activeZipObject.writeHeader()); if (activeZipObject.reader) return pump(activeZipObject); if (activeZipObject.fileLike.stream) { activeZipObject.crc = new Crc32(); activeZipObject.reader = activeZipObject.fileLike.stream().getReader(); activeZipObject.writeHeader(); } else next(); } return new ReadableStream({ start: (c) => { ctrl = c; if (underlyingSource.start) Promise.resolve(underlyingSource.start(zipWriter)); }, pull() { return processNextChunk() || underlyingSource.pull && Promise.resolve(underlyingSource.pull(zipWriter)); } }); } function isFSASupported() { return "showSaveFilePicker" in window; } async function getDownloadStream(filename, useNativePicker = true) { if (isFSASupported() && useNativePicker) { try { logger.info(`Using File System Access API for ${filename}`); const fileHandle = await window.showSaveFilePicker({ suggestedName: filename, types: [ { description: "ZIP Archive", accept: { "application/zip": [".zip"] } } ] }); const writable = await fileHandle.createWritable(); logger.info("FSA writable stream created successfully"); return writable; } catch (error) { if (error.name === "AbortError") { logger.info("User cancelled file picker"); throw new Error("Download cancelled"); } logger.warn(`FSA failed, falling back to StreamSaver: ${error.message}`); } } logger.warn("FSA not available, will use blob fallback"); throw new Error("FSA_NOT_AVAILABLE"); } async function streamToFile(readableStream, filename, useNativePicker = true, onProgress) { try { const writableStream = await getDownloadStream(filename, useNativePicker); if (onProgress) ; else { await readableStream.pipeTo(writableStream); } logger.info(`Streaming download completed via FSA: ${filename}`); } catch (error) { if (error.message === "FSA_NOT_AVAILABLE" || error.name === "AbortError") { if (error.name === "AbortError") { throw error; } logger.info(`Fallback to blob download for: ${filename}`); await streamToBlobDownload(readableStream, filename, onProgress); } else { throw error; } } } async function streamToBlobDownload(readableStream, filename, onProgress) { const chunks = []; let bytesWritten = 0; const reader = readableStream.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) break; chunks.push(value); bytesWritten += value.byteLength || value.length || 0; if (onProgress) ; } } finally { reader.releaseLock(); } const blob = new Blob(chunks); fileSaverEs.saveAs(blob, filename); logger.info(`Blob download completed: ${filename} (${bytesWritten} bytes)`); } async function zipStreamDownload(zipFilename, files, onProgress, rateLimit = 1e3, concurrency = 1, abortSignal) { let current = 0; const total = files.length; if (concurrency <= 1) { const fileIterator = files.values(); const readableZipStream2 = createWriter({ async pull(ctrl) { if (abortSignal?.aborted) { logger.info(`Download aborted. Zipping ${current} files that were downloaded.`); ctrl.close(); return; } const fileInfo = fileIterator.next(); if (fileInfo.done) { ctrl.close(); } else { const { filename, url } = fileInfo.value; const start = Date.now(); logger.debug(`Start downloading ${filename} from ${url}`); try { const res = await fetch(url); if (abortSignal?.aborted) { logger.info(`Download aborted. Zipping ${current} files that were downloaded.`); ctrl.close(); return; } ctrl.enqueue({ name: filename, stream: () => res.body }); onProgress?.(++current, total, fileInfo.value); logger.debug(`Finished downloading ${filename} in ${Date.now() - start}ms`); await new Promise((resolve) => setTimeout(resolve, rateLimit)); } catch (error) { if (abortSignal?.aborted) { logger.info(`Download aborted. Zipping ${current} files that were downloaded.`); ctrl.close(); return; } throw error; } } } }); logger.info(`Exporting to ZIP file: ${zipFilename}`); logger.info(`Using ${isFSASupported() ? "File System Access API" : "StreamSaver.js"} for streaming`); await streamToFile(readableZipStream2, zipFilename); return; } let completed = 0; let fileIndex = 0; const queue = []; let resolveNext = null; let isZipClosed = false; const downloadWorker = async () => { while (fileIndex < files.length) { if (abortSignal?.aborted) { logger.info("Download aborted, stopping worker"); fileIndex = files.length; break; } const currentFileIndex = fileIndex++; const file = files[currentFileIndex]; if (!file) continue; const start = Date.now(); logger.debug(`Start downloading ${file.filename} from ${file.url}`); try { const fetchPromise = fetch(file.url); const abortCheckInterval = 100; const res = await Promise.race([ fetchPromise, new Promise((_, reject) => { const checkInterval = setInterval(() => { if (abortSignal?.aborted) { clearInterval(checkInterval); reject(new Error("Download aborted")); } }, abortCheckInterval); fetchPromise.finally(() => clearInterval(checkInterval)); }) ]); if (abortSignal?.aborted) { logger.info("Download aborted after fetching file, stopping"); fileIndex = files.length; break; } const body = res.body; if (!body) { logger.error(`No response body for ${file.filename}`); continue; } queue.push({ name: file.filename, stream: () => body, original: file }); logger.debug(`Finished downloading ${file.filename} in ${Date.now() - start}ms`); if (resolveNext) { const resolve = resolveNext; resolveNext = null; resolve(); } } catch (error) { if (abortSignal?.aborted) { logger.info("Download aborted during fetch, stopping"); fileIndex = files.length; break; } logger.error(`Failed to download ${file.filename}:`, error); } } if (resolveNext && !isZipClosed) { const resolve = resolveNext; resolveNext = null; resolve(); } }; const workers = Array.from({ length: Math.min(concurrency, files.length) }, () => downloadWorker()); const readableZipStream = createWriter({ async pull(ctrl) { if (abortSignal?.aborted && queue.length === 0) { isZipClosed = true; logger.info(`Download aborted. Zipping ${completed} files that were downloaded.`); ctrl.close(); return; } while (queue.length === 0 && fileIndex < files.length && !abortSignal?.aborted) { await new Promise((resolve) => { resolveNext = resolve; }); if (abortSignal?.aborted) { break; } } if (queue.length > 0) { const fileData = queue.shift(); if (fileData) { ctrl.enqueue({ name: fileData.name, stream: fileData.stream }); onProgress?.(++completed, total, fileData.original); } } else if (fileIndex >= files.length || abortSignal?.aborted) { isZipClosed = true; if (abortSignal?.aborted) { logger.info(`Download aborted. Zipping ${completed} files that were downloaded.`); } ctrl.close(); } } }); logger.info(`Exporting to ZIP file: ${zipFilename}`); logger.info(`Using ${isFSASupported() ? "File System Access API" : "StreamSaver.js"} for streaming`); logger.info(`Download concurrency: ${concurrency}`); await Promise.all([ streamToFile(readableZipStream, zipFilename), ...workers ]); } function getGifShotOptions() { return { sampleInterval: 10, numWorkers: 2, numFrames: 30, interval: 0.1, frameDuration: 0.1, crossOrigin: "anonymous" }; } class MediaDownloader { isDownloading = false; createdBlobUrls = []; abortController = null; async downloadAccountMedia(account, onProgress, batchInfo) { if (this.isDownloading) { throw new Error("Download already in progress"); } this.isDownloading = true; this.abortController = new AbortController(); try { const timeline = account.timeline; const username = account.username; const downloadDate = formatDateTime(Date.now(), "YYYYMMDD_HHmmss"); let zipFilename; const dateRangeSuffix = account.date_since || account.date_until ? `_${(account.date_since || "none").replace(/-/g, "")}-${(account.date_until || "none").replace(/-/g, "")}` : ""; if (batchInfo?.mode === "batch_date_range") { if (batchInfo.page !== void 0) { zipFilename = `${username}_${downloadDate}_Batch${batchInfo.page}${dateRangeSuffix}.zip`; } else { zipFilename = `${username}_${downloadDate}_Batch${dateRangeSuffix}.zip`; } } else if (batchInfo && (batchInfo.mode === "batch" || batchInfo.mode === "auto")) { if (batchInfo.page !== void 0) { zipFilename = `${username}_${downloadDate}_Batch${batchInfo.page}${dateRangeSuffix}.zip`; } else { zipFilename = `${username}_${downloadDate}_Batch${dateRangeSuffix}.zip`; } } else if (batchInfo?.mode === "date_range" || dateRangeSuffix) { zipFilename = `${username}_${downloadDate}${dateRangeSuffix}.zip`; } else { zipFilename = `${username}_${downloadDate}.zip`; } const files = this.createFileList(timeline, username); if (files.length === 0) { throw new Error("No media files found"); } const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true; if (shouldConvertGifs) { await this.downloadWithGifConversion(zipFilename, files, onProgress); } else { const progressCallback = (current, total, file) => { const percentage = Math.round(current / total * 100); onProgress?.({ current, total, percentage, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, files, progressCallback, 500, appOptionsManager.get("downloadConcurrency") ?? 1, this.abortController?.signal ); } } catch (error) { if (error?.message !== "Download aborted") { throw error; } logger.info("Download was aborted by user. Files already downloaded will be zipped."); } finally { this.isDownloading = false; this.abortController = null; this.createdBlobUrls.forEach((url) => { URL.revokeObjectURL(url); }); this.createdBlobUrls = []; } } createFileList(timeline, username) { const files = []; const usedFilenames = new Set(); const mediaGroups = { photo: timeline.filter((item) => item.type === "photo"), video: timeline.filter((item) => item.type === "video"), animated_gif: timeline.filter((item) => item.type === "animated_gif") }; Object.entries(mediaGroups).forEach(([type, items]) => { if (items.length === 0) return; const folderName = type === "photo" ? "image" : type === "animated_gif" ? "gif" : type; items.forEach((item) => { const extension = this.getFileExtension(item); const baseFilename = `${username}_${this.formatDateForFilename(item.date)}_${item.tweet_id}`; const filename = this.getUniqueFilename(baseFilename, extension, usedFilenames); const fullPath = `${folderName}/${filename}`; files.push({ filename: fullPath, url: item.url }); usedFilenames.add(filename); }); }); return files; } getFileExtension(item) { switch (item.type) { case "photo": const photoMatch = item.url.match(/format=(\w+)/); return photoMatch?.[1] || "jpg"; case "video": return "mp4"; case "animated_gif": const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true; return shouldConvertGifs ? "gif" : "mp4"; default: return "unknown"; } } formatDateForFilename(dateStr) { const m = dateStr.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/); if (m) { const [, y, mo, d, h2, mi, s] = m; return `${y}${mo}${d}_${h2}${mi}${s}`; } const d2 = new Date(dateStr); if (!isNaN(d2.getTime())) { const pad = (n) => String(n).padStart(2, "0"); return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`; } return dateStr.replace(/\D/g, ""); } getUniqueFilename(baseFilename, extension, usedFilenames) { let filename = `${baseFilename}.${extension}`; let counter = 1; while (usedFilenames.has(filename)) { filename = `${baseFilename}_${counter}.${extension}`; counter++; } return filename; } isDownloadInProgress() { return this.isDownloading; } abortDownload() { if (this.abortController) { this.abortController.abort(); } } async downloadWithGifConversion(zipFilename, files, onProgress) { const gifFiles = files.filter((f2) => f2.filename.startsWith("gif/")); for (let i = 0; i < gifFiles.length; i++) { const gifFile = gifFiles[i]; if (!gifFile) continue; const conversionProgress = Math.round((i + 1) / gifFiles.length * 50); onProgress?.({ current: i, total: gifFiles.length, percentage: conversionProgress, currentFile: gifFile.filename, converting: true }); try { const gifData = await this.convertVideoToGif(gifFile.url); if (gifData) { gifFile.url = gifData; } } catch (error) { } } const downloadProgressCallback = (current, total, file) => { const downloadProgress = 50 + Math.round(current / total * 50); onProgress?.({ current, total, percentage: downloadProgress, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, files, downloadProgressCallback, 500, appOptionsManager.get("downloadConcurrency") ?? 1, this.abortController?.signal ); } convertVideoToGif(videoUrl) { return new Promise((resolve) => { if (!gifshot.isExistingVideoGIFSupported()) { resolve(null); return; } const gifOptions = getGifShotOptions(); { this.getVideoDimensions(videoUrl).then(({ width, height }) => { gifshot.createGIF({ video: videoUrl, gifWidth: width, gifHeight: height, ...gifOptions }, (obj) => { this.handleGifConversionResult(obj, resolve); }); }).catch((error) => { gifshot.createGIF({ video: videoUrl, ...gifOptions }, (obj) => { this.handleGifConversionResult(obj, resolve); }); }); } }); } handleGifConversionResult(obj, resolve) { if (obj.error) { resolve(null); } else if (obj.image) { try { const dataUrl = obj.image; const base64Data = dataUrl.split(",")[1]; if (!base64Data) { resolve(null); return; } const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: "image/gif" }); const blobUrl = URL.createObjectURL(blob); this.createdBlobUrls.push(blobUrl); resolve(blobUrl); } catch (error) { resolve(null); } } else { resolve(null); } } getVideoDimensions(videoUrl) { return new Promise((resolve, reject) => { const video = document.createElement("video"); video.crossOrigin = "anonymous"; video.onloadedmetadata = () => { const width = video.videoWidth; const height = video.videoHeight; video.remove(); if (width && height) { resolve({ width, height }); } else { reject(new Error("Could not determine video dimensions")); } }; video.onerror = () => { video.remove(); reject(new Error("Failed to load video for dimension detection")); }; setTimeout(() => { video.remove(); reject(new Error("Timeout while detecting video dimensions")); }, 1e4); video.src = videoUrl; }); } } const mediaDownloader = new MediaDownloader(); const urlParser = { getCurrentUsername() { try { const pathname = window.location.pathname; const pathParts = pathname.replace(/^\/+/, "").split("/"); const username = pathParts[0]; if (!username) return null; const skipPaths = [ "i", "home", "explore", "notifications", "messages", "settings", "compose", "search", "hashtag", "lists", "moments", "bookmarks", "profile", "login", "logout", "signup", "welcome", "help", "tos", "privacy", "about", "download", "jobs", "ads", "analytics", "connect", "intent", "oauth", "account", "share" ]; if (skipPaths.includes(username.toLowerCase())) { return null; } if (this.isValidUsername(username)) { return username; } return null; } catch (error) { return null; } }, isValidUsername(username) { if (!username || typeof username !== "string") return false; const cleanUsername = username.replace(/^@/, ""); return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername); }, isUserProfilePage() { const username = this.getCurrentUsername(); if (!username) return false; const pathname = window.location.pathname; const pathParts = pathname.replace(/^\/+/, "").split("/"); if (pathParts.length === 1) ; if (pathParts.length === 2 && pathParts[1] === "") ; const profileTabs = ["with_replies", "media", "likes", "followers", "following"]; if (pathParts.length === 2 && pathParts[1] && profileTabs.includes(pathParts[1])) { return true; } return false; }, onUrlChange(callback) { let currentUrl = window.location.href; const checkUrlChange = () => { const newUrl = window.location.href; if (newUrl !== currentUrl) { currentUrl = newUrl; const username = this.getCurrentUsername(); callback(username); } }; const interval = setInterval(checkUrlChange, 1e3); const handlePopState = () => { setTimeout(() => { const username = this.getCurrentUsername(); callback(username); }, 100); }; window.addEventListener("popstate", handlePopState); return () => { clearInterval(interval); window.removeEventListener("popstate", handlePopState); }; }, getProfileInfo() { return { username: this.getCurrentUsername(), isProfilePage: this.isUserProfilePage() }; } }; const dashboardState = { username: signals.signal(""), accountData: signals.signal(null), showAccountInfo: signals.signal(false), currentAccountUsername: signals.signal(null), isLoading: signals.signal(false), errorMessage: signals.signal(""), isDownloading: signals.signal(false), downloadProgress: signals.signal(0), downloadError: signals.signal(""), isConverting: signals.signal(false), currentFile: signals.signal(""), downloadingType: signals.signal(null), downloadCurrent: signals.signal(0), downloadTotal: signals.signal(0), detectedUsername: signals.signal(null), isProfilePage: signals.signal(false), currentPage: signals.signal(0), hasMore: signals.signal(false), isAutoBatching: signals.signal(false), isPaused: signals.signal(false), aggregatedTimeline: signals.signal([]), currentBatchTimeline: signals.signal([]), aggregatedCount: signals.signal(0), fetchedPages: signals.signal([]), pageMediaCounts: signals.signal({}), loadingDirection: signals.signal(null), resetForNewAccount(newUsername) { const currentUsername = this.currentAccountUsername.value; if (currentUsername && newUsername && currentUsername !== newUsername) { this.username.value = ""; this.accountData.value = null; this.showAccountInfo.value = false; this.isLoading.value = false; this.errorMessage.value = ""; this.downloadProgress.value = 0; this.downloadError.value = ""; this.isDownloading.value = false; this.isConverting.value = false; this.currentFile.value = ""; this.downloadingType.value = null; this.downloadCurrent.value = 0; this.downloadTotal.value = 0; this.currentPage.value = 0; this.hasMore.value = false; this.isAutoBatching.value = false; this.isPaused.value = false; this.aggregatedTimeline.value = []; this.currentBatchTimeline.value = []; this.aggregatedCount.value = 0; this.fetchedPages.value = []; this.pageMediaCounts.value = {}; this.loadingDirection.value = null; } this.currentAccountUsername.value = newUsername; }, resetInteractionStates() { this.isLoading.value = false; this.errorMessage.value = ""; this.downloadProgress.value = 0; this.downloadError.value = ""; this.isDownloading.value = false; this.isConverting.value = false; this.currentFile.value = ""; this.downloadingType.value = null; this.downloadCurrent.value = 0; this.downloadTotal.value = 0; } }; const authState = { patreonVerified: signals.signal(false), patreonAuth: signals.signal(""), authToken: signals.signal("") }; function g(n, t) { for (var e in t) n[e] = t[e]; return n; } function E(n, t) { for (var e in n) if ("__source" !== e && !(e in t)) return true; for (var r in t) if ("__source" !== r && n[r] !== t[r]) return true; return false; } function N(n, t) { this.props = n, this.context = t; } (N.prototype = new preact.Component()).isPureReactComponent = true, N.prototype.shouldComponentUpdate = function(n, t) { return E(this.props, n) || E(this.state, t); }; var T = preact.options.__b; preact.options.__b = function(n) { n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), T && T(n); }; var F = preact.options.__e; preact.options.__e = function(n, t, e, r) { if (n.then) { for (var u2, o = t; o = o.__; ) if ((u2 = o.__c) && u2.__c) return null == t.__e && (t.__e = e.__e, t.__k = e.__k), u2.__c(n, t); } F(n, t, e, r); }; var U = preact.options.unmount; function V(n, t, e) { return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) { "function" == typeof n2.__c && n2.__c(); }), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e && (n.__c.__P = t), n.__c.__e = true, n.__c = null), n.__k = n.__k && n.__k.map(function(n2) { return V(n2, t, e); })), n; } function W(n, t, e) { return n && e && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) { return W(n2, t, e); }), n.__c && n.__c.__P === t && (n.__e && e.appendChild(n.__e), n.__c.__e = true, n.__c.__P = e)), n; } function P() { this.__u = 0, this.o = null, this.__b = null; } function j(n) { var t = n.__.__c; return t && t.__a && t.__a(n); } function B() { this.i = null, this.l = null; } preact.options.unmount = function(n) { var t = n.__c; t && t.__R && t.__R(), t && 32 & n.__u && (n.type = null), U && U(n); }, (P.prototype = new preact.Component()).__c = function(n, t) { var e = t.__c, r = this; null == r.o && (r.o = []), r.o.push(e); var u2 = j(r.__v), o = false, i = function() { o || (o = true, e.__R = null, u2 ? u2(l) : l()); }; e.__R = i; var l = function() { if (!--r.__u) { if (r.state.__a) { var n2 = r.state.__a; r.__v.__k[0] = W(n2, n2.__c.__P, n2.__c.__O); } var t2; for (r.setState({ __a: r.__b = null }); t2 = r.o.pop(); ) t2.forceUpdate(); } }; r.__u++ || 32 & t.__u || r.setState({ __a: r.__b = r.__v.__k[0] }), n.then(i, i); }, P.prototype.componentWillUnmount = function() { this.o = []; }, P.prototype.render = function(n, e) { if (this.__b) { if (this.__v.__k) { var r = document.createElement("div"), o = this.__v.__k[0].__c; this.__v.__k[0] = V(this.__b, r, o.__O = o.__P); } this.__b = null; } var i = e.__a && preact.createElement(preact.Fragment, null, n.fallback); return i && (i.__u &= -33), [preact.createElement(preact.Fragment, null, e.__a ? null : n.children), i]; }; var H = function(n, t, e) { if (++e[1] === e[0] && n.l.delete(t), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.l.size)) for (e = n.i; e; ) { for (; e.length > 3; ) e.pop()(); if (e[1] < e[0]) break; n.i = e = e[2]; } }; function Z(n) { return this.getChildContext = function() { return n.context; }, n.children; } function Y(n) { var e = this, r = n.h; if (e.componentWillUnmount = function() { preact.render(null, e.v), e.v = null, e.h = null; }, e.h && e.h !== r && e.componentWillUnmount(), !e.v) { for (var u2 = e.__v; null !== u2 && !u2.__m && null !== u2.__; ) u2 = u2.__; e.h = r, e.v = { nodeType: 1, parentNode: r, childNodes: [], __k: { __m: u2.__m }, contains: function() { return true; }, insertBefore: function(n2, t) { this.childNodes.push(n2), e.h.insertBefore(n2, t); }, removeChild: function(n2) { this.childNodes.splice(this.childNodes.indexOf(n2) >>> 1, 1), e.h.removeChild(n2); } }; } preact.render(preact.createElement(Z, { context: e.context }, n.__v), e.v); } function $(n, e) { var r = preact.createElement(Y, { __v: n, h: e }); return r.containerInfo = e, r; } (B.prototype = new preact.Component()).__a = function(n) { var t = this, e = j(t.__v), r = t.l.get(n); return r[0]++, function(u2) { var o = function() { t.props.revealOrder ? (r.push(u2), H(t, n, r)) : u2(); }; e ? e(o) : o(); }; }, B.prototype.render = function(n) { this.i = null, this.l = new Map(); var t = preact.toChildArray(n.children); n.revealOrder && "b" === n.revealOrder[0] && t.reverse(); for (var e = t.length; e--; ) this.l.set(t[e], this.i = [1, 0, this.i]); return n.children; }, B.prototype.componentDidUpdate = B.prototype.componentDidMount = function() { var n = this; this.l.forEach(function(t, e) { H(n, e, t); }); }; var q = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, G = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, J = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, K = /[A-Z0-9]/g, Q = "undefined" != typeof document, X = function(n) { return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n); }; preact.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t) { Object.defineProperty(preact.Component.prototype, t, { configurable: true, get: function() { return this["UNSAFE_" + t]; }, set: function(n) { Object.defineProperty(this, t, { configurable: true, writable: true, value: n }); } }); }); var en = preact.options.event; function rn() { } function un() { return this.cancelBubble; } function on() { return this.defaultPrevented; } preact.options.event = function(n) { return en && (n = en(n)), n.persist = rn, n.isPropagationStopped = un, n.isDefaultPrevented = on, n.nativeEvent = n; }; var cn = { enumerable: false, configurable: true, get: function() { return this.class; } }, fn = preact.options.vnode; preact.options.vnode = function(n) { "string" == typeof n.type && (function(n2) { var t = n2.props, e = n2.type, u2 = {}, o = -1 === e.indexOf("-"); for (var i in t) { var l = t[i]; if (!("value" === i && "defaultValue" in t && null == l || Q && "children" === i && "noscript" === e || "class" === i || "className" === i)) { var c = i.toLowerCase(); "defaultValue" === i && "value" in t && null == t.value ? i = "value" : "download" === i && true === l ? l = "" : "translate" === c && "no" === l ? l = false : "o" === c[0] && "n" === c[1] ? "ondoubleclick" === c ? i = "ondblclick" : "onchange" !== c || "input" !== e && "textarea" !== e || X(t.type) ? "onfocus" === c ? i = "onfocusin" : "onblur" === c ? i = "onfocusout" : J.test(i) && (i = c) : c = i = "oninput" : o && G.test(i) ? i = i.replace(K, "-$&").toLowerCase() : null === l && (l = void 0), "oninput" === c && u2[i = c] && (i = "oninputCapture"), u2[i] = l; } } "select" == e && u2.multiple && Array.isArray(u2.value) && (u2.value = preact.toChildArray(t.children).forEach(function(n3) { n3.props.selected = -1 != u2.value.indexOf(n3.props.value); })), "select" == e && null != u2.defaultValue && (u2.value = preact.toChildArray(t.children).forEach(function(n3) { n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value; })), t.class && !t.className ? (u2.class = t.class, Object.defineProperty(u2, "className", cn)) : (t.className && !t.class || t.class && t.className) && (u2.class = u2.className = t.className), n2.props = u2; })(n), n.$$typeof = q, fn && fn(n); }; var an = preact.options.__r; preact.options.__r = function(n) { an && an(n), n.__c; }; var sn = preact.options.diffed; preact.options.diffed = function(n) { sn && sn(n); var t = n.props, e = n.__e; null != e && "textarea" === n.type && "value" in t && t.value !== e.value && (e.value = null == t.value ? "" : t.value); }; function Title() { return u("h2", { class: "text-lg font-bold", children: [ "Twitter/X Media Batch Downloader ", u("span", { class: "text-warning", children: "Pro" }) ] }); } function Modal({ show, onClose, title, children, class: className, actions }) { if (!show) { return null; } const modalContent = u("dialog", { class: "modal", open: true, onClose: () => onClose?.(), children: [ u("div", { class: cx("modal-box transition-all duration-300 ease-in-out", className), children: [ u("div", { class: "flex items-center justify-between mb-4", children: [ title ? u("h2", { class: "text-lg font-bold", children: title }) : u("span", {}), u("div", { class: "flex items-center gap-2", children: [ actions, u("form", { method: "dialog", children: u( "button", { class: "btn btn-sm btn-circle btn-ghost", "aria-label": "Close", children: u(IconX, { size: 18 }) } ) }) ] }) ] }), u(ErrorBoundary, { children }) ] }), u("form", { method: "dialog", class: "modal-backdrop", children: u("button", { "aria-label": "Close", children: "close" }) }) ] }); const portalTarget = document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body; return $(modalContent, portalTarget); } const lastPlayTime = {}; const DEBOUNCE_MS = 150; function canPlaySound(soundName) { const now = Date.now(); const lastTime = lastPlayTime[soundName] || 0; if (now - lastTime < DEBOUNCE_MS) { return false; } lastPlayTime[soundName] = now; return true; } function playSuccessSound() { if (!canPlaySound("success")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 800; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.3); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.3); setTimeout(() => { const oscillator2 = audioContext.createOscillator(); const gainNode2 = audioContext.createGain(); oscillator2.connect(gainNode2); gainNode2.connect(audioContext.destination); oscillator2.frequency.value = 1e3; oscillator2.type = "sine"; gainNode2.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode2.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.3); oscillator2.start(audioContext.currentTime); oscillator2.stop(audioContext.currentTime + 0.3); }, 100); } catch (error) { } } function playErrorSound() { if (!canPlaySound("error")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 200; oscillator.type = "sawtooth"; gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.4); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.4); } catch (error) { } } function playToggleOnSound() { if (!canPlaySound("toggleOn")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 600; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.2, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.15); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.15); } catch (error) { } } function playToggleOffSound() { if (!canPlaySound("toggleOff")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 400; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.2, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.15); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.15); } catch (error) { } } function playTabClickSound() { if (!canPlaySound("tabClick")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 700; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.15, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.1); } catch (error) { } } function playRadioClickSound() { if (!canPlaySound("radioClick")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 550; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.12, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.08); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.08); } catch (error) { } } function playClickSound() { if (!canPlaySound("click")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 650; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.1, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.06); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.06); } catch (error) { } } function Dashboard({ loadFromDatabaseAccount } = {}) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const { accountData, showAccountInfo, detectedUsername, isProfilePage, isLoading, errorMessage, isDownloading, downloadProgress, downloadError, isConverting, currentFile, downloadCurrent, downloadTotal } = dashboardState; const showOverwriteModal = signals.useSignal(false); const pendingFetchUsername = signals.useSignal(""); const pendingFetchParams = signals.useSignal(null); const convertGifsExternal = signals.useSignal(appOptionsManager.get("convertGifsExternal") ?? false); const mediaType = signals.useSignal(appOptionsManager.get("mediaType") ?? "all"); const fetchMode = signals.useSignal(appOptionsManager.get("fetchMode") ?? "single"); const isLoadingFromDB = signals.useSignal(false); const hasDBData = signals.useSignal(false); const isLoadedFromDB = signals.useSignal(false); const isUpdating = signals.useSignal(false); const showUpdateConfirmModal = signals.useSignal(false); const isRetrying = signals.useSignal(false); const retryAbortController = signals.useSignal(null); const retryTokenCurrent = signals.useSignal(0); const retryTokenTotal = signals.useSignal(0); const dateSince = signals.useSignal(""); const dateUntil = signals.useSignal(""); hooks.useEffect(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }, [dateSince.value, dateUntil.value]); hooks.useEffect(() => { const updateUsernameFromUrl = () => { const profileInfo = urlParser.getProfileInfo(); const newDetectedUsername = profileInfo.username; dashboardState.resetForNewAccount(newDetectedUsername); detectedUsername.value = newDetectedUsername; isProfilePage.value = profileInfo.isProfilePage; if (newDetectedUsername) { checkDBData(newDetectedUsername); } else { hasDBData.value = false; } }; updateUsernameFromUrl(); (async () => { try { const settings = await mediaDownloaderDB.getAuthSettings(); authState.patreonVerified.value = Boolean(settings?.patreon_verified); authState.patreonAuth.value = settings?.patreon_auth || ""; } catch { } })(); const cleanup = urlParser.onUrlChange(() => { updateUsernameFromUrl(); }); return cleanup; }, []); hooks.useEffect(() => { appOptionsManager.signal.subscribe(() => { convertGifsExternal.value = appOptionsManager.get("convertGifsExternal") ?? false; mediaType.value = appOptionsManager.get("mediaType") ?? "all"; fetchMode.value = appOptionsManager.get("fetchMode") ?? "single"; }); }, []); const checkDBData = async (username) => { try { const cleanUsername = mediaDownloaderAPI.formatUsername(username); const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; let count = 0; if (dateSince.value || dateUntil.value) { if (fetchMode2 !== "single") { const batchDateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "batch_date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value ).count(); count = batchDateRangeAccounts; } else { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value ).count(); count = dateRangeAccounts; } } else if (fetchMode2 === "single") { const singleAccount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").count(); count = singleAccount; } else { const batchCount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")).count(); count = batchCount; } hasDBData.value = count > 0; } catch { hasDBData.value = false; } }; hooks.useEffect(() => { const unsubscribe = appOptionsManager.signal.subscribe(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }); return unsubscribe; }, []); hooks.useEffect(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }, [dbState.dbChangeSignal.value]); hooks.useEffect(() => { if (!loadFromDatabaseAccount?.value) return; const accountInfo = loadFromDatabaseAccount.value; if (accountInfo.username) { detectedUsername.value = accountInfo.username; if (accountInfo.date_since || accountInfo.date_until) { dateSince.value = accountInfo.date_since || ""; dateUntil.value = accountInfo.date_until || ""; } else { dateSince.value = ""; dateUntil.value = ""; } if (accountInfo.batch_mode) { const targetMode = accountInfo.batch_mode === "date_range" ? "single" : accountInfo.batch_mode === "batch_date_range" ? "batch" : accountInfo.batch_mode; appOptionsManager.set("fetchMode", targetMode); } handleLoadFromDatabase(); loadFromDatabaseAccount.value = null; } }, [loadFromDatabaseAccount?.value]); const stopRetry = () => { isRetrying.value = false; isLoading.value = false; if (retryAbortController.value) { retryAbortController.value.abort(); retryAbortController.value = null; } errorMessage.value = ""; }; const retryWithTokenGeneration = async (cleanUsername, authSettings) => { const controller = new AbortController(); retryAbortController.value = controller; isRetrying.value = true; while (isRetrying.value && !controller.signal.aborted) { if (!isRetrying.value || controller.signal.aborted) { break; } try { const tokenResult = await mediaDownloaderAPI.generateAuthToken(authSettings.patreon_auth); retryTokenCurrent.value = tokenResult.current_index || 0; retryTokenTotal.value = tokenResult.total_tokens || 0; if (!isRetrying.value || controller.signal.aborted) { break; } authSettings.auth_token = tokenResult.auth_token; authState.authToken.value = tokenResult.auth_token; await mediaDownloaderDB.saveAuthSettings( tokenResult.auth_token, authSettings.patreon_auth ); if (!isRetrying.value || controller.signal.aborted) { break; } await mediaDownloaderDB.setPatreonVerified(true); if (!isRetrying.value || controller.signal.aborted) { break; } isRetrying.value = false; await handleFetchMedia(true); retryAbortController.value = null; return; } catch (error) { if (!isRetrying.value || controller.signal.aborted) { break; } const waitCompleted = await new Promise((resolve) => { const timeoutId = setTimeout(() => { cleanup(); resolve(true); }, 2e3); const checkInterval = setInterval(() => { if (!isRetrying.value || controller.signal.aborted) { cleanup(); resolve(false); } }, 100); const cleanup = () => { clearTimeout(timeoutId); clearInterval(checkInterval); }; }); if (!waitCompleted) { break; } } } isRetrying.value = false; retryAbortController.value = null; }; const handleFetchMedia = async (skipOverwriteCheck = false) => { playClickSound(); const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); if ((authSettings.patreon_auth || "").trim() === "xbatchdemo" && cleanUsername !== "xbatchdemo") { errorMessage.value = t("Demo mode is only available for @xbatchdemo"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validateUsername(cleanUsername)) { errorMessage.value = t("Invalid username format"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validateAuthToken(authSettings.auth_token)) { errorMessage.value = t("Invalid auth token. Please check your settings."); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validatePatreonAuth(authSettings.patreon_auth)) { errorMessage.value = t("Invalid Patreon auth. Please check your settings."); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; if (!skipOverwriteCheck) { const actualFetchMode = dateSince.value || dateUntil.value ? fetchMode2 !== "single" ? "batch_date_range" : "date_range" : fetchMode2; const existingAccounts = await mediaDownloaderDB.getAccountsByUsernameAndMode( cleanUsername, actualFetchMode, dateSince.value || void 0, dateUntil.value || void 0 ); if (existingAccounts.length > 0) { pendingFetchUsername.value = cleanUsername; pendingFetchParams.value = { authSettings }; showOverwriteModal.value = true; return; } } const timelineType = appOptionsManager.get("timelineType") ?? "media"; const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchSize = appOptionsManager.get("batchSize") ?? 100; const startingBatch = appOptionsManager.get("startingBatch") ?? 0; const resetBatchState = () => { dashboardState.currentPage.value = startingBatch; dashboardState.hasMore.value = false; dashboardState.isAutoBatching.value = false; dashboardState.isPaused.value = false; dashboardState.aggregatedTimeline.value = []; dashboardState.currentBatchTimeline.value = []; dashboardState.aggregatedCount.value = 0; dashboardState.fetchedPages.value = []; dashboardState.pageMediaCounts.value = {}; }; const fetchPage = async (page, reveal = false) => { isLoading.value = true; errorMessage.value = ""; try { const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { timelineType, batchSize, startingBatch: page, mediaType: mediaType2, fetchMode: fetchMode2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0, includeRetweets: appOptionsManager.get("includeRetweets") ?? false } ); accountData.value = data; dashboardState.currentBatchTimeline.value = data.timeline; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? page; const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`)); const merged = [...dashboardState.aggregatedTimeline.value]; if (!dashboardState.fetchedPages.value.includes(page)) { dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page]; let newMediaCount = 0; for (const item of data.timeline) { const key = `${item.tweet_id}|${item.url}`; if (!seen.has(key)) { seen.add(key); merged.push(item); newMediaCount++; } } dashboardState.pageMediaCounts.value = { ...dashboardState.pageMediaCounts.value, [page]: newMediaCount }; dashboardState.aggregatedTimeline.value = merged; dashboardState.aggregatedCount.value = merged.length; } if (reveal) { showAccountInfo.value = true; } } catch (error) { const apiError = error?.apiError; const errorData = error?.errorData; const raw = error instanceof Error ? error.message : ""; let msg = ""; if (apiError) { if (errorData) { const translated = i18n.t(raw, errorData); msg = translated !== raw ? translated : raw; } else { msg = raw ? t(raw) || raw : t("Failed to fetch data"); } } else { const httpMatch = raw.match(/^HTTP error! status: (\d+)/); msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data"); } errorMessage.value = msg; playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); throw error; } finally { isLoading.value = false; } }; try { resetBatchState(); isLoadedFromDB.value = false; if (fetchMode2 === "single") { await fetchPage(startingBatch, true); } else if (fetchMode2 === "batch") { await fetchPage(startingBatch, true); } else { dashboardState.isAutoBatching.value = true; await fetchPage(startingBatch, true); await runAutoLoop(); } if (accountData.value) { try { const actualFetchMode = dateSince.value || dateUntil.value ? fetchMode2 !== "single" ? "batch_date_range" : "date_range" : fetchMode2; const batchIdentifier = actualFetchMode !== "single" ? `${cleanUsername}_${actualFetchMode}_${Date.now()}` : void 0; const timelineToSave = actualFetchMode !== "single" && dashboardState.aggregatedTimeline.value.length > 0 ? dashboardState.aggregatedTimeline.value : accountData.value.timeline; const metadataToSave = actualFetchMode !== "single" && dashboardState.aggregatedTimeline.value.length > 0 ? { ...accountData.value.metadata, new_entries: dashboardState.aggregatedCount.value } : accountData.value.metadata; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: metadataToSave, timeline: timelineToSave, batch_mode: actualFetchMode, batch_identifier: batchIdentifier, timeline_type: timelineType, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } } catch (error) { const apiError = error?.apiError; const errorData = error?.errorData; const raw = error instanceof Error ? error.message : ""; const isDemoMode = (authSettings.patreon_auth || "").trim() === "xbatchdemo"; const isGalleryDLAuthError = raw.includes("Could not authenticate you") || raw.includes("Failed to fetch data") && raw.includes("401"); const shouldRetry = apiError?.isRetryable === true || isGalleryDLAuthError; if (shouldRetry && !isRetrying.value && !isDemoMode) { errorMessage.value = ""; retryWithTokenGeneration(cleanUsername, authSettings); } else { let msg = ""; if (apiError) { if (errorData) { const translated = i18n.t(raw, errorData); msg = translated !== raw ? translated : raw; } else { msg = raw ? t(raw) || raw : t("Failed to fetch data"); } } else { const httpMatch = raw.match(/^HTTP error! status: (\d+)/); msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data"); } errorMessage.value = msg; playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); } } }; const confirmOverwrite = async () => { showOverwriteModal.value = false; pendingFetchUsername.value = ""; pendingFetchParams.value = null; await handleFetchMedia(true); }; const cancelOverwrite = () => { showOverwriteModal.value = false; pendingFetchUsername.value = ""; pendingFetchParams.value = null; }; const handleLoadFromDatabase = async () => { const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); isLoadingFromDB.value = true; try { const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; let accounts; if (dateSince.value || dateUntil.value) { if (fetchMode2 !== "single") { const batchDateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "batch_date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value ).reverse().sortBy("cached_at"); accounts = batchDateRangeAccounts; } else { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value ).reverse().sortBy("cached_at"); accounts = dateRangeAccounts; } } else if (fetchMode2 === "single") { const singleAccount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").reverse().sortBy("cached_at"); accounts = singleAccount; } else { const batchAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single" && acc.batch_mode !== "date_range" && acc.batch_mode !== "batch_date_range")).reverse().sortBy("cached_at"); accounts = batchAccounts; } if (accounts.length === 0) { return; } const latestAccount = accounts[0]; if (latestAccount.date_since || latestAccount.date_until) { dateSince.value = latestAccount.date_since || ""; dateUntil.value = latestAccount.date_until || ""; } accountData.value = { account_info: latestAccount.account_info, metadata: latestAccount.metadata, timeline: latestAccount.timeline }; dashboardState.currentBatchTimeline.value = latestAccount.timeline; dashboardState.aggregatedTimeline.value = latestAccount.timeline; dashboardState.aggregatedCount.value = latestAccount.timeline.length; showAccountInfo.value = true; isLoadedFromDB.value = true; if (detectedUsername.value) { await checkDBData(detectedUsername.value); } } catch (error) { errorMessage.value = t("Failed to load data"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); } finally { isLoadingFromDB.value = false; } }; const runAutoLoop = async () => { try { while (dashboardState.isAutoBatching.value && dashboardState.hasMore.value) { try { isLoading.value = true; const rawUsername = dashboardState.detectedUsername.value || ""; const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!rawUsername || !authSettings) break; const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const timelineType = appOptionsManager.get("timelineType") ?? "media"; const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchSize = appOptionsManager.get("batchSize") ?? 100; const page = dashboardState.currentPage.value + 1; const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { timelineType, batchSize, startingBatch: page, mediaType: mediaType2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0, includeRetweets: appOptionsManager.get("includeRetweets") ?? false } ); accountData.value = data; dashboardState.currentBatchTimeline.value = data.timeline; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? page; const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`)); const merged = [...dashboardState.aggregatedTimeline.value]; if (!dashboardState.fetchedPages.value.includes(page)) { dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page]; let newMediaCount = 0; for (const item of data.timeline) { const key = `${item.tweet_id}|${item.url}`; if (!seen.has(key)) { seen.add(key); merged.push(item); newMediaCount++; } } dashboardState.pageMediaCounts.value = { ...dashboardState.pageMediaCounts.value, [page]: newMediaCount }; dashboardState.aggregatedTimeline.value = merged; dashboardState.aggregatedCount.value = merged.length; await saveAggregatedData(); } } catch (error) { break; } finally { isLoading.value = false; } } } finally { dashboardState.isAutoBatching.value = false; } }; const saveAggregatedData = async () => { if (!accountData.value) return; const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; const rawUsername = detectedUsername.value || ""; if (fetchMode2 !== "single" && rawUsername && dashboardState.aggregatedTimeline.value.length > 0) { try { const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const timelineType = appOptionsManager.get("timelineType") ?? "media"; const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const actualFetchMode = dateSince.value || dateUntil.value ? "batch_date_range" : fetchMode2; const batchIdentifier = `${cleanUsername}_${actualFetchMode}_${Date.now()}`; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedCount.value }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: actualFetchMode, batch_identifier: batchIdentifier, timeline_type: timelineType, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } }; const handleBack = async () => { if (accountData.value && !isLoadedFromDB.value) { await saveAggregatedData(); } showAccountInfo.value = false; accountData.value = null; isLoadedFromDB.value = false; dashboardState.resetInteractionStates(); }; const handleUpdateDataClick = () => { showUpdateConfirmModal.value = true; }; const cancelUpdate = () => { showUpdateConfirmModal.value = false; }; const confirmUpdate = async () => { showUpdateConfirmModal.value = false; await handleUpdateData(); }; const handleUpdateData = async () => { isUpdating.value = true; const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; const timelineType = appOptionsManager.get("timelineType") ?? "media"; const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchSize = appOptionsManager.get("batchSize") ?? 100; const startingBatch = appOptionsManager.get("startingBatch") ?? 0; const resetBatchState = () => { dashboardState.currentPage.value = startingBatch; dashboardState.hasMore.value = false; dashboardState.isAutoBatching.value = false; dashboardState.isPaused.value = false; dashboardState.aggregatedTimeline.value = []; dashboardState.currentBatchTimeline.value = []; dashboardState.aggregatedCount.value = 0; dashboardState.fetchedPages.value = []; dashboardState.pageMediaCounts.value = {}; }; const fetchPage = async (page, reveal = false) => { isLoading.value = true; errorMessage.value = ""; try { const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { timelineType, batchSize, startingBatch: page, mediaType: mediaType2, fetchMode: fetchMode2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0, includeRetweets: appOptionsManager.get("includeRetweets") ?? false } ); accountData.value = data; dashboardState.currentBatchTimeline.value = data.timeline; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? page; const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`)); const merged = [...dashboardState.aggregatedTimeline.value]; if (!dashboardState.fetchedPages.value.includes(page)) { dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page]; let newMediaCount = 0; for (const item of data.timeline) { const key = `${item.tweet_id}|${item.url}`; if (!seen.has(key)) { seen.add(key); merged.push(item); newMediaCount++; } } dashboardState.pageMediaCounts.value = { ...dashboardState.pageMediaCounts.value, [page]: newMediaCount }; dashboardState.aggregatedTimeline.value = merged; dashboardState.aggregatedCount.value = merged.length; } if (reveal) { showAccountInfo.value = true; } try { const actualFetchMode = dateSince.value || dateUntil.value ? fetchMode2 !== "single" ? "batch_date_range" : "date_range" : fetchMode2; const batchIdentifier = actualFetchMode !== "single" ? `${cleanUsername}_${actualFetchMode}_${Date.now()}` : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: data.account_info, metadata: data.metadata, timeline: data.timeline, batch_mode: actualFetchMode, batch_identifier: batchIdentifier, timeline_type: timelineType, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch { } } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data"); errorMessage.value = msg; playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); throw error; } finally { isLoading.value = false; } }; try { resetBatchState(); isLoadedFromDB.value = false; if (fetchMode2 === "single") { await fetchPage(startingBatch, true); } else if (fetchMode2 === "batch") { await fetchPage(startingBatch, true); } else { dashboardState.isAutoBatching.value = true; await fetchPage(startingBatch, true); await runAutoLoop(); } } catch { } finally { isUpdating.value = false; } }; const handleDownloadMedia = async () => { if (!accountData.value) return; playClickSound(); try { dashboardState.downloadingType.value = "all"; isDownloading.value = true; downloadError.value = ""; downloadProgress.value = 0; const aggregatedTimeline = dashboardState.aggregatedTimeline.value.length > 0 ? dashboardState.aggregatedTimeline.value : accountData.value.timeline; const account = { username: accountData.value.account_info.name, account_info: accountData.value.account_info, metadata: accountData.value.metadata, timeline: aggregatedTimeline, cached_at: Date.now(), date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }; const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; const actualMode = dateSince.value || dateUntil.value ? "date_range" : fetchMode2; const batchInfo = actualMode !== "single" ? { mode: actualMode } : void 0; await mediaDownloader.downloadAccountMedia(account, (progress) => { downloadProgress.value = progress.percentage; isConverting.value = progress.converting || false; currentFile.value = progress.currentFile || ""; dashboardState.downloadCurrent.value = progress.current; dashboardState.downloadTotal.value = progress.total; }, batchInfo); playSuccessSound(); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to download media"); downloadError.value = msg; playErrorSound(); setTimeout(() => downloadError.value = "", 2e3); } finally { dashboardState.downloadingType.value = null; isDownloading.value = false; downloadProgress.value = 0; isConverting.value = false; currentFile.value = ""; dashboardState.downloadCurrent.value = 0; dashboardState.downloadTotal.value = 0; } }; const handleDownloadCurrent = async () => { if (!accountData.value) return; playClickSound(); try { dashboardState.downloadingType.value = "current"; isDownloading.value = true; downloadError.value = ""; downloadProgress.value = 0; const currentTimeline = dashboardState.currentBatchTimeline.value.length > 0 ? dashboardState.currentBatchTimeline.value : accountData.value.timeline; const account = { username: accountData.value.account_info.name, account_info: accountData.value.account_info, metadata: accountData.value.metadata, timeline: currentTimeline, cached_at: Date.now(), date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }; const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single"; const currentPage = dashboardState.currentPage.value; const actualMode = dateSince.value || dateUntil.value ? "date_range" : fetchMode2; const batchInfo = actualMode !== "single" ? { mode: actualMode, page: currentPage } : void 0; await mediaDownloader.downloadAccountMedia(account, (progress) => { downloadProgress.value = progress.percentage; isConverting.value = progress.converting || false; currentFile.value = progress.currentFile || ""; dashboardState.downloadCurrent.value = progress.current; dashboardState.downloadTotal.value = progress.total; }, batchInfo); playSuccessSound(); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to download media"); downloadError.value = msg; playErrorSound(); setTimeout(() => downloadError.value = "", 2e3); } finally { dashboardState.downloadingType.value = null; isDownloading.value = false; downloadProgress.value = 0; isConverting.value = false; currentFile.value = ""; dashboardState.downloadCurrent.value = 0; dashboardState.downloadTotal.value = 0; } }; const handlePrevBatch = async () => { const page = dashboardState.currentPage.value; if (page <= 0) return; const p = page - 1; await handleNavigateBatch(p); }; const handleNextBatch = async () => { const p = dashboardState.currentPage.value + 1; await handleNavigateBatch(p); }; const handleNavigateBatch = async (page) => { const rawUsername = dashboardState.detectedUsername.value || ""; const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!rawUsername || !authSettings) return; const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const timelineType = appOptionsManager.get("timelineType") ?? "media"; const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchSize = appOptionsManager.get("batchSize") ?? 100; try { isLoading.value = true; const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { timelineType, batchSize, startingBatch: page, mediaType: mediaType2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0 } ); accountData.value = data; dashboardState.currentBatchTimeline.value = data.timeline; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? page; const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`)); const merged = [...dashboardState.aggregatedTimeline.value]; if (!dashboardState.fetchedPages.value.includes(page)) { dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page]; let newMediaCount = 0; for (const item of data.timeline) { const key = `${item.tweet_id}|${item.url}`; if (!seen.has(key)) { seen.add(key); merged.push(item); newMediaCount++; } } dashboardState.pageMediaCounts.value = { ...dashboardState.pageMediaCounts.value, [page]: newMediaCount }; dashboardState.aggregatedTimeline.value = merged; dashboardState.aggregatedCount.value = merged.length; await saveAggregatedData(); } } catch (error) { } finally { isLoading.value = false; dashboardState.loadingDirection.value = null; } }; const handleStartStop = async () => { playClickSound(); const running = dashboardState.isAutoBatching.value; if (running) { dashboardState.isAutoBatching.value = false; } else { dashboardState.isAutoBatching.value = true; await runAutoLoop(); } }; if (showAccountInfo.value && accountData.value) { const account = accountData.value.account_info; const metadata = accountData.value.metadata; return u(preact.Fragment, { children: [ u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center gap-4 mb-6", children: [ u("div", { class: "flex items-center gap-2", children: [ u("button", { class: "btn btn-sm", onClick: handleBack, children: [ u(IconChevronLeft, { size: 16 }), t("Back") ] }), (isLoadedFromDB.value || isUpdating.value) && u("button", { class: "btn btn-accent btn-sm", onClick: handleUpdateDataClick, disabled: isLoading.value, children: isLoading.value && isUpdating.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Updating...") ] }) : u(preact.Fragment, { children: [ u(IconCloudUp, { size: 16 }), t("Update") ] }) }) ] }), u("div", { class: "ml-auto flex items-center gap-2", children: (() => { if (isLoadedFromDB.value) { return null; } const page = dashboardState.currentPage.value; const isPrevLoading = isLoading.value && dashboardState.loadingDirection.value === "prev"; const isNextLoading = isLoading.value && dashboardState.loadingDirection.value === "next"; if (fetchMode.value === "batch") { return u(preact.Fragment, { children: [ u("button", { class: "btn btn-primary btn-sm", onClick: () => { dashboardState.loadingDirection.value = "prev"; handlePrevBatch(); }, disabled: isLoading.value || page <= 0, children: [ isPrevLoading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconChevronLeft, { size: 16 }), t("Prev") ] }), u("button", { class: "btn btn-primary btn-sm", onClick: () => { dashboardState.loadingDirection.value = "next"; handleNextBatch(); }, disabled: isLoading.value || !dashboardState.hasMore.value, children: [ isNextLoading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconChevronRight, { size: 16 }), t("Next") ] }) ] }); } if (fetchMode.value === "auto") { const running = dashboardState.isAutoBatching.value; return u(preact.Fragment, { children: u("button", { class: "btn btn-secondary btn-sm", onClick: handleStartStop, children: [ isLoading.value ? u("span", { class: "loading loading-spinner loading-xs" }) : running ? u(IconPlayerStop, { size: 16 }) : u(IconPlayerPlay, { size: 16 }), running ? t("Stop") : t("Start") ] }) }); } return null; })() }) ] }), u("div", { class: "card bg-base-200 card-border", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u( "img", { src: account.profile_image, alt: account.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) }) }), u("div", { class: "grow", children: [ u("div", { class: "flex items-center gap-2 flex-wrap", children: [ u("h3", { class: "font-semibold text-base", children: account.nick }), (() => { if (isLoadedFromDB.value) { return null; } const hasDateRange = metadata?.date_range || dateSince.value || dateUntil.value; if (!hasDateRange) { const page = dashboardState.currentPage.value; if (fetchMode.value === "batch") { return u("div", { class: "badge badge-soft badge-primary badge-sm", children: isLoading.value ? t("Fetching...") : t("Batch: {{page}}", { page }) }); } if (fetchMode.value === "auto") { return u("div", { class: "badge badge-soft badge-secondary badge-sm", children: isLoading.value ? t("Fetching...") : t("Batch: {{page}}", { page }) }); } } return null; })(), metadata?.date_range && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ metadata.date_range.since.replace(/-/g, ""), " - ", metadata.date_range.until.replace(/-/g, "") ] }), (dateSince.value || dateUntil.value) && !metadata?.date_range && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ (dateSince.value || "none").replace(/-/g, ""), " - ", (dateUntil.value || "none").replace(/-/g, "") ] }) ] }), u("p", { class: "text-sm opacity-70", children: [ "@", account.name ] }), u("p", { class: "text-sm opacity-50 mt-1", children: [ t("Posts: {{posts}}", { posts: account.statuses_count.toLocaleString() }), " • ", (() => { if (isLoadedFromDB.value) { return t("Media: {{media}}", { media: metadata.new_entries.toLocaleString() }); } if (fetchMode.value !== "single") { const currentCount = dashboardState.currentBatchTimeline.value?.length || 0; const currentPage = dashboardState.currentPage.value; const pageMediaCounts = dashboardState.pageMediaCounts.value; const fetchedPages = dashboardState.fetchedPages.value; const relevantPages = fetchedPages.filter((p) => p <= currentPage); const totalCount = relevantPages.reduce((sum, page) => { return sum + (pageMediaCounts[page] || 0); }, 0); return t("Current Media: {{current}} • Total Media: {{total}}", { current: currentCount.toLocaleString(), total: totalCount.toLocaleString() }); } return t("Media: {{media}}", { media: metadata.new_entries.toLocaleString() }); })() ] }) ] }) ] }) }) }), u("div", { class: "space-y-4", children: [ isDownloading.value && u("div", { class: "space-y-2", children: [ u("div", { class: "flex justify-between text-sm", children: [ u("span", { children: [ isConverting.value ? t("Converting GIFs...") : t("Downloading..."), downloadTotal.value > 0 && ` (${downloadCurrent.value.toLocaleString()}/${downloadTotal.value.toLocaleString()})` ] }), u("span", { children: [ downloadProgress.value, "%" ] }) ] }), u("progress", { class: "progress progress-primary w-full", value: downloadProgress.value, max: "100" }), currentFile.value && u("div", { class: "text-xs opacity-70 truncate", children: currentFile.value }) ] }), u("div", { class: "flex justify-center gap-2", children: isDownloading.value ? u( "button", { class: "btn btn-error btn-sm", onClick: () => mediaDownloader.abortDownload(), children: [ u(IconPlayerStop, { size: 16 }), t("Stop") ] } ) : u(preact.Fragment, { children: [ (() => { if (isLoadedFromDB.value) { return null; } if (fetchMode.value !== "single") { const currentCount = dashboardState.currentBatchTimeline.value?.length || 0; return u( "button", { class: "btn btn-sm", onClick: handleDownloadCurrent, disabled: currentCount === 0, children: [ u(IconDownload, { size: 16 }), t("Download Current") ] } ); } return null; })(), (() => { const labelKey = fetchMode.value === "single" ? "Download" : "Download All"; return u( "button", { class: "btn btn-neutral btn-sm", onClick: handleDownloadMedia, disabled: (dashboardState.aggregatedCount.value || metadata.new_entries) === 0, children: [ u(IconDownload, { size: 16 }), t(labelKey) ] } ); })() ] }) }), downloadError.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [ u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: downloadError.value }) ] }) ] }) ] }), u(Modal, { show: showUpdateConfirmModal.value, onClose: cancelUpdate, title: t("Update"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Update will fetch the latest data and overwrite the database. Continue?") }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: cancelUpdate, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-warning", onClick: confirmUpdate, children: [ u(IconCloudUp, { size: 16 }), t("Update") ] } ) ] }) ] }) }) ] }); } const handleExternalConvert = async () => { const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); if (!mediaDownloaderAPI.validateUsername(cleanUsername)) { errorMessage.value = t("Invalid username format"); setTimeout(() => errorMessage.value = "", 2e3); return; } const patreonAuth = authSettings.patreon_auth || ""; const authToken = authSettings.auth_token || ""; if (!patreonAuth || !authToken) { errorMessage.value = t("Please configure authentication in the Auth tab first"); setTimeout(() => errorMessage.value = "", 2e3); return; } let url; if (patreonAuth.trim() === "xbatchdemo") { url = `https://convert.exyezed.cc/demo/xbatchdemo/${encodeURIComponent(authToken)}/xbatchdemo`; } else { url = `https://convert.exyezed.cc/${encodeURIComponent(patreonAuth)}/${encodeURIComponent(authToken)}/${encodeURIComponent(cleanUsername)}`; } window.open(url, "_blank", "noopener,noreferrer"); }; return u("div", { class: "space-y-4", children: [ u("div", { class: "space-y-4", children: [ isRetrying.value && u("div", { role: "alert", class: "alert alert-info alert-soft", children: [ u("span", { class: "loading loading-spinner loading-sm" }), u("span", { dir: isArabic ? "rtl" : void 0, children: [ t("Generating token..."), " ", retryTokenTotal.value > 0 && `(${retryTokenCurrent.value}/${retryTokenTotal.value})` ] }) ] }), u("div", { role: "alert", class: `alert alert-soft ${!authState.patreonVerified.value ? "alert-warning" : "alert-info"}`, children: [ !authState.patreonVerified.value ? u(IconAlertTriangle, { size: 20 }) : u(IconUserFilled, { size: 20 }), u("div", { class: "flex-1", dir: isArabic ? "rtl" : void 0, children: !authState.patreonVerified.value ? u("div", { children: t("Please verify Patreon auth first") }) : detectedUsername.value ? u("div", { children: u("span", { dir: "ltr", children: [ "@", detectedUsername.value ] }) }) : u("div", { class: "font-semibold", children: t("Please visit a profile page for auto-detection") }) }), detectedUsername.value && hasDBData.value && authState.patreonVerified.value && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load from database"), children: u( "button", { class: "btn btn-sm btn-square btn-soft btn-info", onClick: handleLoadFromDatabase, disabled: isLoadingFromDB.value || !detectedUsername.value, "aria-label": t("Load from database"), children: isLoadingFromDB.value ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseImport, { size: 16 }) } ) }) ] }), u("div", { class: "relative", children: [ (dateSince.value || dateUntil.value) && u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => { dateSince.value = ""; dateUntil.value = ""; }, "aria-label": "Clear dates", children: u(IconX, { size: 12 }) } ), u("div", { class: "card bg-base-200 card-border", children: u("div", { class: "card-body p-4", children: [ u("div", { class: "grid grid-cols-2 gap-3", children: [ u("div", { class: "form-control", children: [ u("label", { class: "label py-1", children: u("span", { class: "label-text text-xs", children: t("Date Since") }) }), u( "input", { type: "date", class: "input input-sm input-bordered w-full", value: dateSince.value, onInput: (e) => { dateSince.value = e.target.value; }, placeholder: "YYYY-MM-DD" } ) ] }), u("div", { class: "form-control", children: [ u("label", { class: "label py-1", children: u("span", { class: "label-text text-xs", children: t("Date Until") }) }), u( "input", { type: "date", class: "input input-sm input-bordered w-full", value: dateUntil.value, onInput: (e) => { dateUntil.value = e.target.value; }, placeholder: "YYYY-MM-DD" } ) ] }) ] }), (dateSince.value || dateUntil.value) && u("div", { class: "flex items-center gap-1 text-xs opacity-60 mt-1", children: [ u(IconInfoCircle, { size: 14 }), u("span", { children: t("Empty dates will fetch all available media") }) ] }) ] }) }) ] }), u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [ u( "button", { class: `btn btn-sm join-item ${isRetrying.value ? "btn-error" : "btn-neutral"}`, onClick: () => isRetrying.value ? stopRetry() : handleFetchMedia(), disabled: isLoading.value && !isRetrying.value || !detectedUsername.value || !authState.patreonVerified.value, children: (() => { if (isRetrying.value) { return u(preact.Fragment, { children: [ u(IconPlayerStop, { size: 16 }), t("Abort") ] }); } const fetchKey = mediaType.value === "all" ? "Fetch All" : mediaType.value === "video" ? "Fetch Video" : mediaType.value === "image" ? "Fetch Image" : mediaType.value === "gif" ? "Fetch GIF" : "Fetch"; if (isLoading.value) { return u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Fetching...") ] }); } return u(preact.Fragment, { children: [ u(IconCloudDown, { size: 16 }), t(fetchKey) ] }); })() } ), convertGifsExternal.value ? u( "button", { class: "btn btn-accent btn-sm join-item", onClick: handleExternalConvert, disabled: !detectedUsername.value || !authState.patreonVerified.value, children: [ u(IconPhotoEdit, { size: 16 }), t("Convert Animated GIFs") ] } ) : null ] }) }), errorMessage.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [ u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: errorMessage.value }) ] }) ] }), u(Modal, { show: showOverwriteModal.value, onClose: cancelOverwrite, title: t("Overwrite Existing Data?"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Account data for @{{username}} already exists in the database. Do you want to overwrite it?", { username: pendingFetchUsername.value }) }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: cancelOverwrite, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-warning", onClick: confirmOverwrite, children: [ u(IconWriting, { size: 16 }), t("Overwrite") ] } ) ] }) ] }) }) ] }); } function ViewDatabaseModal({ isOpen, onClose, account, onDeleteEntry, onLoadDatabase }) { const { t } = useTranslation(); const typeFilter = signals.useSignal("all"); const currentPage = signals.useSignal(1); const deletingEntry = signals.useSignal(""); const previewUrl = signals.useSignal(""); const previewType = signals.useSignal(""); const previewIndex = signals.useSignal(-1); const touchStartX = hooks.useRef(0); const touchEndX = hooks.useRef(0); const previousAccountId = hooks.useRef(void 0); const downloadingFiles = signals.useSignal( new Set()); const convertingFiles = signals.useSignal( new Set()); hooks.useEffect(() => { if (account?.id !== previousAccountId.current) { typeFilter.value = "all"; currentPage.value = 1; previousAccountId.current = account?.id; } }, [account?.id]); if (!account) return null; const ITEMS_PER_PAGE = 5; const filteredTimeline = typeFilter.value === "all" ? account.timeline : account.timeline.filter((item) => item.type === typeFilter.value); const totalPages = Math.ceil(filteredTimeline.length / ITEMS_PER_PAGE); const startIndex = (currentPage.value - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; const currentItems = filteredTimeline.slice(startIndex, endIndex); const handleTypeFilter = (type) => { typeFilter.value = type; currentPage.value = 1; }; const handleOpenFile = (url) => { window.open(url, "_blank", "noopener,noreferrer"); }; const handleDownloadFile = async (url, date, type, tweetId) => { const fileKey = `${tweetId}_${url}`; if (downloadingFiles.value.has(fileKey)) { return; } try { downloadingFiles.value = new Set([...downloadingFiles.value, fileKey]); const shouldConvertGif = type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true); let finalBlob; let ext = "jpg"; if (shouldConvertGif) { convertingFiles.value = new Set([...convertingFiles.value, fileKey]); try { const gifBlob = await convertVideoToGif(url); if (gifBlob) { finalBlob = gifBlob; ext = "gif"; } else { const response = await fetch(url); finalBlob = await response.blob(); ext = "mp4"; } } catch (error) { const response = await fetch(url); finalBlob = await response.blob(); ext = "mp4"; } finally { convertingFiles.value = new Set([...convertingFiles.value].filter((k) => k !== fileKey)); } } else { const response = await fetch(url); finalBlob = await response.blob(); if (type === "photo") { const photoMatch = url.match(/format=(\w+)/); ext = photoMatch?.[1] || "jpg"; } else if (type === "video") { ext = "mp4"; } else if (type === "animated_gif") { ext = "mp4"; } } const formatDateForFilename = (dateStr2) => { const m = dateStr2.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/); if (m) { const [, y, mo, d, h2, mi, s] = m; return `${y}${mo}${d}_${h2}${mi}${s}`; } const d2 = new Date(dateStr2); if (!isNaN(d2.getTime())) { const pad = (n) => String(n).padStart(2, "0"); return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`; } return dateStr2.replace(/\D/g, ""); }; const dateStr = formatDateForFilename(date); const filename = `${account.username}_${dateStr}_${tweetId}.${ext}`; const link = document.createElement("a"); link.href = URL.createObjectURL(finalBlob); link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(link.href); } catch (error) { } finally { downloadingFiles.value = new Set([...downloadingFiles.value].filter((k) => k !== fileKey)); } }; const convertVideoToGif = (videoUrl) => { return new Promise((resolve) => { if (!gifshot.isExistingVideoGIFSupported()) { resolve(null); return; } const gifOptions = getGifShotOptions(); { getVideoDimensions(videoUrl).then(({ width, height }) => { gifshot.createGIF({ video: videoUrl, gifWidth: width, gifHeight: height, ...gifOptions }, (obj) => { handleGifConversionResult(obj, resolve); }); }).catch((error) => { gifshot.createGIF({ video: videoUrl, ...gifOptions }, (obj) => { handleGifConversionResult(obj, resolve); }); }); } }); }; const handleGifConversionResult = (obj, resolve) => { if (obj.error) { resolve(null); } else if (obj.image) { try { const dataUrl = obj.image; const base64Data = dataUrl.split(",")[1]; if (!base64Data) { resolve(null); return; } const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: "image/gif" }); resolve(blob); } catch (error) { resolve(null); } } else { resolve(null); } }; const getVideoDimensions = (videoUrl) => { return new Promise((resolve, reject) => { const video = document.createElement("video"); video.crossOrigin = "anonymous"; video.onloadedmetadata = () => { const width = video.videoWidth; const height = video.videoHeight; video.remove(); if (width && height) { resolve({ width, height }); } else { reject(new Error("Could not determine video dimensions")); } }; video.onerror = () => { video.remove(); reject(new Error("Failed to load video for dimension detection")); }; video.src = videoUrl; }); }; const handleDeleteEntry = async (tweetId, url) => { const key = `${tweetId}|${url}`; deletingEntry.value = key; try { await onDeleteEntry(tweetId, url); } finally { deletingEntry.value = ""; } }; const getTypeIcon = (type) => { switch (type) { case "photo": return u(IconPhoto, { size: 16 }); case "video": return u(IconVideo, { size: 16 }); case "animated_gif": return u(IconGif, { size: 16 }); default: return null; } }; const formatDate = (timestamp) => { const fmt = appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; return dayjs(timestamp).format(fmt); }; const formatTimeAgo = (timestamp) => { const now = dayjs(); const then = dayjs(timestamp); const diff = now.diff(then, "second"); const years = Math.floor(diff / (365 * 24 * 60 * 60)); const days = Math.floor(diff % (365 * 24 * 60 * 60) / (24 * 60 * 60)); const hours = Math.floor(diff % (24 * 60 * 60) / (60 * 60)); const minutes = Math.floor(diff % (60 * 60) / 60); const seconds = diff % 60; const parts = []; if (years > 0) parts.push(`${years}y`); if (days > 0) parts.push(`${days}d`); if (hours > 0) parts.push(`${hours}h`); if (minutes > 0) parts.push(`${minutes}m`); if (seconds > 0 && parts.length === 0) parts.push(`${seconds}s`); return parts.slice(0, 2).join(" ") + " ago"; }; const handleSwipeLeft = () => { if (previewIndex.value < filteredTimeline.length - 1) { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewUrl.value = nextItem.url; previewType.value = nextItem.type; } } }; const handleSwipeRight = () => { if (previewIndex.value > 0) { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewUrl.value = prevItem.url; previewType.value = prevItem.type; } } }; const handleTouchStart = (e) => { if (e.touches[0]) { touchStartX.current = e.touches[0].clientX; touchEndX.current = e.touches[0].clientX; } }; const handleTouchMove = (e) => { if (e.touches[0]) { touchEndX.current = e.touches[0].clientX; } }; const handleTouchEnd = () => { if (touchStartX.current === 0 || touchEndX.current === 0) { touchStartX.current = 0; touchEndX.current = 0; return; } const swipeThreshold = 50; const diff = touchStartX.current - touchEndX.current; if (Math.abs(diff) > swipeThreshold) { if (diff > 0) { handleSwipeLeft(); } else { handleSwipeRight(); } } touchStartX.current = 0; touchEndX.current = 0; }; hooks.useEffect(() => { if (!previewUrl.value) return; const handleKeyDown = (e) => { if (e.key === "ArrowLeft" && previewIndex.value > 0) { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewUrl.value = prevItem.url; previewType.value = prevItem.type; } } else if (e.key === "ArrowRight" && previewIndex.value < filteredTimeline.length - 1) { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewUrl.value = nextItem.url; previewType.value = nextItem.type; } } else if (e.key === "Escape") { previewUrl.value = ""; previewType.value = ""; previewIndex.value = -1; } }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [previewUrl.value, previewIndex.value, filteredTimeline]); return u(preact.Fragment, { children: [ u(Modal, { show: isOpen, onClose, title: t("Database"), children: u("div", { class: "space-y-4", children: [ u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u( "img", { src: account.account_info.profile_image, alt: account.account_info.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) }) }), u("div", { class: "grow", children: [ u("h3", { class: "font-semibold text-base", children: [ account.account_info.nick, " ", u("span", { class: "font-normal opacity-70", children: [ "(@", account.username, ")" ] }) ] }), u("p", { class: "text-xs opacity-60 mb-1", children: [ u("span", { class: "font-bold", children: t("Joined") }), " ", formatDateTime(account.account_info.date, appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss") ] }), u("div", { class: "flex gap-3 text-xs opacity-60", children: [ u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.statuses_count.toLocaleString() }), " ", t("Posts") ] }), u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.followers_count.toLocaleString() }), " ", t("Followers") ] }), u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.friends_count.toLocaleString() }), " ", t("Following") ] }) ] }) ] }), onLoadDatabase && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load database"), children: u( "button", { class: "btn btn-sm btn-square btn-soft btn-info", onClick: onLoadDatabase, "aria-label": t("Load database"), children: u(IconDatabaseImport, { size: 16 }) } ) }) ] }) }) }), u("div", { class: "flex items-center gap-2 justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "tooltip", "data-tip": `${t("All")} (${account.timeline.length.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "all" ? "btn-neutral" : "btn-ghost"}`, onClick: () => handleTypeFilter("all"), "aria-label": t("All"), children: u(IconLibraryPhoto, { size: 18 }) } ) }), u("div", { class: "tooltip", "data-tip": `${t("Image")} (${account.timeline.filter((i) => i.type === "photo").length.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "photo" ? "btn-primary" : "btn-ghost"}`, onClick: () => handleTypeFilter("photo"), "aria-label": t("Image"), children: u(IconPhoto, { size: 18 }) } ) }), u("div", { class: "tooltip", "data-tip": `${t("Video")} (${account.timeline.filter((i) => i.type === "video").length.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "video" ? "btn-secondary" : "btn-ghost"}`, onClick: () => handleTypeFilter("video"), "aria-label": t("Video"), children: u(IconVideo, { size: 18 }) } ) }), u("div", { class: "tooltip", "data-tip": `${t("GIF")} (${account.timeline.filter((i) => i.type === "animated_gif").length.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "animated_gif" ? "btn-accent" : "btn-ghost"}`, onClick: () => handleTypeFilter("animated_gif"), "aria-label": t("GIF"), children: u(IconGif, { size: 18 }) } ) }) ] }), totalPages > 1 && u("div", { class: "join", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("First Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = 1, disabled: currentPage.value === 1, "aria-label": t("First Page"), children: "«" } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Last Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = totalPages, disabled: currentPage.value === totalPages, "aria-label": t("Last Page"), children: "»" } ) }) ] }) ] }), u("div", { class: "space-y-4", children: currentItems.map((item) => { const key = `${item.tweet_id}|${item.url}`; const fileKey = `${item.tweet_id}_${item.url}`; const isDeleting = deletingEntry.value === key; const isDownloading = downloadingFiles.value.has(fileKey); const isConverting = convertingFiles.value.has(fileKey); return u("div", { class: "relative w-full", children: [ u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => handleDeleteEntry(item.tweet_id, item.url), disabled: isDeleting || isDownloading, children: isDeleting ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 }) } ), u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-3", children: u("div", { class: "flex items-center gap-3", children: [ u("div", { class: "shrink-0", children: u("div", { class: `btn btn-xs btn-square btn-soft no-animation pointer-events-none ${item.type === "photo" ? "btn-primary" : item.type === "video" ? "btn-secondary" : "btn-accent"}`, children: getTypeIcon(item.type) }) }), u("div", { class: "grow min-w-0", children: [ u( "a", { class: "link link-hover text-sm font-mono", href: `https://x.com/${account.username}/status/${item.tweet_id}`, target: "_blank", rel: "noopener noreferrer", children: item.tweet_id } ), u("p", { class: "text-xs opacity-60", children: [ formatDate(item.date), " (", formatTimeAgo(item.date), ")" ] }) ] }), u("div", { class: "shrink-0 flex items-center gap-1", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("Preview"), children: u( "button", { class: "btn btn-xs btn-square", onClick: () => { const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); previewIndex.value = itemIndex; previewUrl.value = item.url; previewType.value = item.type; }, "aria-label": t("Preview"), disabled: isDeleting, children: u(IconEye, { size: 14 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Open"), children: u( "button", { class: "btn btn-xs btn-square", onClick: () => handleOpenFile(item.url), "aria-label": t("Open"), disabled: isDeleting, children: u(IconExternalLink, { size: 14 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"), children: u( "button", { class: `btn btn-xs btn-square ${isConverting ? "btn-warning" : "btn-success"}`, onClick: () => handleDownloadFile(item.url, item.date, item.type, item.tweet_id), "aria-label": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"), disabled: isDeleting || isDownloading, children: isDownloading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconFileDownload, { size: 14 }) } ) }) ] }) ] }) }) }) ] }, key); }) }), totalPages > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [ u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = Math.max(1, currentPage.value - 1), disabled: currentPage.value === 1, children: "«" } ), u("button", { class: "join-item btn btn-sm", children: [ currentPage.value, "/", totalPages ] }), u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = Math.min(totalPages, currentPage.value + 1), disabled: currentPage.value === totalPages, children: "»" } ) ] }) }), filteredTimeline.length === 0 && u("div", { class: "text-center py-8 opacity-50", children: u("p", { children: t("No media files found") }) }) ] }) }), previewUrl.value && $( u( "div", { class: "fixed inset-0 bg-black/90 backdrop-blur-sm flex items-center justify-center z-1000", onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, children: [ u( "button", { class: "btn btn-square btn-error absolute top-4 right-4 z-10", onClick: () => { previewUrl.value = ""; previewType.value = ""; previewIndex.value = -1; }, "aria-label": t("Close"), children: u(IconX, { size: 24 }) } ), u("div", { class: "absolute bottom-4 left-1/2 transform -translate-x-1/2 flex flex-col items-center gap-2", children: [ u("div", { class: "btn btn-neutral btn-sm", children: u("span", { class: "text-sm", children: [ (previewIndex.value + 1).toLocaleString(), " / ", filteredTimeline.length.toLocaleString() ] }) }), (() => { const currentItem = filteredTimeline[previewIndex.value]; if (currentItem) { return u("div", { class: "btn btn-neutral btn-sm", children: u("span", { class: "text-xs", children: [ formatDate(currentItem.date), " (", formatTimeAgo(currentItem.date), ")" ] }) }); } return null; })() ] }), previewIndex.value > 0 && u( "button", { class: "btn btn-circle btn-lg btn-neutral absolute left-4 hidden md:flex", onClick: () => { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewUrl.value = prevItem.url; previewType.value = prevItem.type; } }, "aria-label": t("Prev"), children: u(IconChevronLeft, { size: 32 }) } ), previewIndex.value < filteredTimeline.length - 1 && u( "button", { class: "btn btn-circle btn-lg btn-neutral absolute right-4 hidden md:flex", onClick: () => { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewUrl.value = nextItem.url; previewType.value = nextItem.type; } }, "aria-label": t("Next"), children: u(IconChevronRight, { size: 32 }) } ), previewType.value === "photo" ? u( "img", { src: previewUrl.value, alt: "Preview", class: "max-w-full max-h-full object-contain" } ) : u( "video", { src: previewUrl.value, controls: true, autoplay: true, class: "max-w-full max-h-full" } ) ] } ), document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body ) ] }); } function Database({ isVisible, onCountChange, onLoadToDashboard } = {}) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const accounts = signals.useSignal([]); const currentPage = signals.useSignal(1); const totalPages = signals.useSignal(1); const isLoading = signals.useSignal(true); const exportingId = signals.useSignal(null); const deletingId = signals.useSignal(null); const accountToDelete = signals.useSignal(null); const showDeleteModal = signals.useSignal(false); const isImporting = signals.useSignal(false); const isExportingAll = signals.useSignal(false); const totalCount = signals.useSignal(0); const showClearModal = signals.useSignal(false); const isClearingAll = signals.useSignal(false); const fileInputRef = hooks.useRef(null); const filterByBatch = signals.useSignal(false); const filterByDateRange = signals.useSignal(false); const hasInitialLoad = signals.useSignal(false); const showViewModal = signals.useSignal(false); const viewingAccount = signals.useSignal(null); const batchCount = signals.useSignal(0); const dateRangeCount = signals.useSignal(0); const batchDateRangeCount = signals.useSignal(0); const filterByBatchDateRange = signals.useSignal(false); const handleImportClick = () => { fileInputRef.current?.click(); }; const processJsonFile = async (text, fileName) => { try { const data = JSON.parse(text); const account = { username: data.username, account_info: data.account_info, metadata: data.metadata, timeline: data.timeline, cached_at: data.cached_at || Date.now(), batch_mode: data.batch_mode, batch_identifier: data.batch_identifier, timeline_type: data.timeline_type, media_type: data.media_type, date_since: data.date_since, date_until: data.date_until }; if (!account.username || !account.account_info || !account.metadata || !Array.isArray(account.timeline)) { return; } await mediaDownloaderDB.insertAccount(account); playSuccessSound(); } catch (err) { playErrorSound(); } }; const importAccounts = async (files) => { isImporting.value = true; try { for (const file of Array.from(files)) { try { if (file.name.toLowerCase().endsWith(".zip")) { const arrayBuffer = await file.arrayBuffer(); const uint8Array = new Uint8Array(arrayBuffer); fflate.unzip(uint8Array, async (err, unzipped) => { if (err) { return; } for (const [fileName, fileData] of Object.entries(unzipped)) { if (fileName.toLowerCase().endsWith(".json")) { const text = new TextDecoder().decode(fileData); await processJsonFile(text, fileName); } } await loadAccounts(); currentPage.value = 1; }); } else if (file.name.toLowerCase().endsWith(".json")) { const text = await file.text(); await processJsonFile(text, file.name); } else { } } catch (err) { } } await loadAccounts(); currentPage.value = 1; } finally { isImporting.value = false; } }; const onFilesSelected = async (e) => { const input = e.currentTarget; const files = input.files; if (files && files.length) { await importAccounts(files); } input.value = ""; }; const ITEMS_PER_PAGE = 3; const dateFormat = signals.useSignal(appOptionsManager.get("dateTimeFormat")); hooks.useEffect(() => { appOptionsManager.signal.subscribe(() => { dateFormat.value = appOptionsManager.get("dateTimeFormat"); }); }, []); hooks.useEffect(() => { loadAccounts(); }, [currentPage.value]); hooks.useEffect(() => { currentPage.value = 1; loadAccounts(); }, [filterByBatch.value, filterByDateRange.value, filterByBatchDateRange.value]); hooks.useEffect(() => { if (isVisible && !hasInitialLoad.value) { loadAccounts(); } }, [isVisible]); hooks.useEffect(() => { if (hasInitialLoad.value) { loadAccounts(); } }, [dbState.dbChangeSignal.value]); const loadAccounts = async () => { try { isLoading.value = true; const [accountsData, totalCountValue, batchCountValue, dateRangeCountValue, batchDateRangeCountValue] = await Promise.all([ mediaDownloaderDB.getAccounts(currentPage.value, ITEMS_PER_PAGE, filterByBatch.value, filterByDateRange.value, filterByBatchDateRange.value), mediaDownloaderDB.getAccountsCount(filterByBatch.value, filterByDateRange.value, filterByBatchDateRange.value), mediaDownloaderDB.getAccountsCount(true, false, false), mediaDownloaderDB.getAccountsCount(false, true, false), mediaDownloaderDB.getAccountsCount(false, false, true) ]); accounts.value = accountsData; totalCount.value = totalCountValue; batchCount.value = batchCountValue; dateRangeCount.value = dateRangeCountValue; batchDateRangeCount.value = batchDateRangeCountValue; totalPages.value = Math.ceil(totalCountValue / ITEMS_PER_PAGE); onCountChange?.(totalCountValue); hasInitialLoad.value = true; } catch (error) { } finally { isLoading.value = false; } }; const exportAccount = async (account) => { if (!account.id) return; try { exportingId.value = account.id; const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; const now = dayjs(); const exportData = { username: account.username, account_info: account.account_info, metadata: account.metadata, timeline: account.timeline, cached_at: account.cached_at, batch_mode: account.batch_mode, batch_identifier: account.batch_identifier, timeline_type: account.timeline_type, media_type: account.media_type, date_since: account.date_since, date_until: account.date_until, cached_at_formatted: dayjs(account.cached_at).format(fmt), exported_at: now.valueOf(), exported_at_formatted: now.format(fmt), date_time_format: fmt }; const filenameTs = now.format("YYYYMMDD_HHmmss"); const batchSuffix = account.batch_mode && account.batch_mode !== "single" ? "_Batch" : ""; const filename = `${sanitizeFilename(account.username)}_${filenameTs}${batchSuffix}.json`; const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: "application/json" }); fileSaverEs.saveAs(blob, filename); playSuccessSound(); } catch (error) { playErrorSound(); } finally { exportingId.value = null; } }; const openDeleteDialog = (account) => { accountToDelete.value = account; showDeleteModal.value = true; }; const confirmDelete = async () => { const account = accountToDelete.value; if (!account?.id) return; try { deletingId.value = account.id; await mediaDownloaderDB.deleteAccount(account.id); await loadAccounts(); showDeleteModal.value = false; playSuccessSound(); } catch (error) { playErrorSound(); } finally { deletingId.value = null; accountToDelete.value = null; } }; const closeDeleteDialog = () => { showDeleteModal.value = false; accountToDelete.value = null; }; const openClearDialog = () => { showClearModal.value = true; }; const closeClearDialog = () => { showClearModal.value = false; }; const handleDeleteEntry = async (tweetId, url) => { if (!viewingAccount.value?.id) return; try { const account = viewingAccount.value; const updatedTimeline = account.timeline.filter( (item) => !(item.tweet_id === tweetId && item.url === url) ); await mediaDownloaderDB.updateAccount(account.id, { ...account, timeline: updatedTimeline, metadata: { ...account.metadata, new_entries: updatedTimeline.length } }); viewingAccount.value = { ...account, timeline: updatedTimeline, metadata: { ...account.metadata, new_entries: updatedTimeline.length } }; await loadAccounts(); playSuccessSound(); } catch (error) { playErrorSound(); } }; const handleLoadDatabase = () => { if (!viewingAccount.value?.username || !onLoadToDashboard) return; const account = viewingAccount.value; showViewModal.value = false; requestAnimationFrame(() => { onLoadToDashboard({ username: account.username, batch_mode: account.batch_mode, date_since: account.date_since, date_until: account.date_until }); viewingAccount.value = null; }); }; const confirmClearAll = async () => { try { isClearingAll.value = true; await mediaDownloaderDB.clearAll(); currentPage.value = 1; await loadAccounts(); showClearModal.value = false; playSuccessSound(); } catch (error) { playErrorSound(); } finally { isClearingAll.value = false; } }; const formatDate = (timestamp) => { const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; return dayjs(timestamp).format(fmt); }; const formatTimeAgo = (timestamp) => { const now = dayjs(); const then = dayjs(timestamp); const diff = now.diff(then, "second"); const years = Math.floor(diff / (365 * 24 * 60 * 60)); const days = Math.floor(diff % (365 * 24 * 60 * 60) / (24 * 60 * 60)); const hours = Math.floor(diff % (24 * 60 * 60) / (60 * 60)); const minutes = Math.floor(diff % (60 * 60) / 60); const seconds = diff % 60; const parts = []; if (years > 0) parts.push(`${years}y`); if (days > 0) parts.push(`${days}d`); if (hours > 0) parts.push(`${hours}h`); if (minutes > 0) parts.push(`${minutes}m`); if (seconds > 0 && parts.length === 0) parts.push(`${seconds}s`); return parts.slice(0, 2).join(" ") + " ago"; }; const goToPage = (page) => { if (page >= 1 && page <= totalPages.value) { currentPage.value = page; } }; const exportAllAccounts = async () => { try { isExportingAll.value = true; const allAccounts = await mediaDownloaderDB.getAllAccounts(); if (!allAccounts.length) return; const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; const now = dayjs(); const exportTs = now.format("YYYYMMDD_HHmmss"); const files = allAccounts.map((account, index2) => { const exportData = { username: account.username, account_info: account.account_info, metadata: account.metadata, timeline: account.timeline, cached_at: account.cached_at, batch_mode: account.batch_mode, batch_identifier: account.batch_identifier, timeline_type: account.timeline_type, media_type: account.media_type, date_since: account.date_since, date_until: account.date_until, cached_at_formatted: dayjs(account.cached_at).format(fmt), exported_at: now.valueOf(), exported_at_formatted: now.format(fmt), date_time_format: fmt }; const batchSuffix = account.batch_mode && account.batch_mode !== "single" ? "_Batch" : ""; const timelineTypeSuffix = account.timeline_type ? `_${account.timeline_type}` : ""; const mediaTypeSuffix = account.media_type && account.media_type !== "all" ? `_${account.media_type}` : ""; const uniqueSuffix = allAccounts.filter((a) => a.username === account.username).length > 1 ? `_${index2 + 1}` : ""; const fileName = `${sanitizeFilename(account.username)}_${exportTs}${batchSuffix}${timelineTypeSuffix}${mediaTypeSuffix}${uniqueSuffix}.json`; const content = JSON.stringify(exportData, null, 2); const blob = new Blob([content], { type: "application/json" }); return { name: fileName, blob }; }); let index = 0; const readableZipStream = createWriter({ pull(ctrl) { if (index >= files.length) { ctrl.close(); return; } const file = files[index]; if (!file) { ctrl.close(); return; } index += 1; ctrl.enqueue({ name: file.name, stream: () => file.blob.stream() }); } }); const chunks = []; const writableOutputStream = new WritableStream({ write(chunk) { chunks.push(chunk); } }); await readableZipStream.pipeTo(writableOutputStream); const arrayBuffer = await new Blob(chunks).arrayBuffer(); const zipBlob = new Blob([arrayBuffer]); const zipFilename = `twitter-x-media-batch-downloader-pro_${exportTs}.zip`; fileSaverEs.saveAs(zipBlob, zipFilename); playSuccessSound(); } catch (error) { playErrorSound(); } finally { isExportingAll.value = false; } }; if (isLoading.value) { return u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "skeleton h-8 w-24" }), u("div", { class: "skeleton h-8 w-24" }) ] }), u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "skeleton h-8 w-8" }), u("div", { class: "skeleton h-8 w-8" }) ] }) ] }), [1, 2, 3].map((i) => u("div", { class: "card bg-base-200 border border-base-300 w-full", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "skeleton w-16 h-16 rounded-xl shrink-0" }), u("div", { class: "grow space-y-2", children: [ u("div", { class: "skeleton h-4 w-32" }), u("div", { class: "skeleton h-3 w-24" }), u("div", { class: "flex gap-2", children: [ u("div", { class: "skeleton h-5 w-16" }), u("div", { class: "skeleton h-5 w-16" }), u("div", { class: "skeleton h-5 w-12" }) ] }), u("div", { class: "skeleton h-3 w-40" }) ] }), u("div", { class: "skeleton w-8 h-8 rounded-lg shrink-0" }) ] }) }) }, i)) ] }); } return u(preact.Fragment, { children: [ u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u( "input", { type: "file", class: "hidden", ref: fileInputRef, accept: ".json,.zip,application/json,application/zip", multiple: true, onChange: onFilesSelected } ), u("div", { class: "tooltip tooltip-right", "data-tip": t("Supports JSON and ZIP formats"), children: u( "button", { class: "btn btn-primary btn-sm", onClick: handleImportClick, disabled: isImporting.value, children: isImporting.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Importing...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseImport, { size: 16 }), t("Import") ] }) } ) }), u("div", { class: "tooltip tooltip-right", "data-tip": t("Export All Data"), children: u( "button", { class: "btn btn-secondary btn-sm", onClick: async () => { await exportAllAccounts(); }, "aria-label": t("Export All Data"), disabled: isExportingAll.value || isImporting.value || totalCount.value === 0, children: isExportingAll.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Exporting...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseExport, { size: 16 }), t("Export") ] }) } ) }) ] }), u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "join", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("Filter by Batch"), children: u( "button", { class: `btn btn-sm btn-square join-item ${filterByBatch.value ? "btn-active btn-primary" : ""}`, "aria-label": t("Filter by Batch"), onClick: () => { if (!filterByBatch.value) { filterByDateRange.value = false; filterByBatchDateRange.value = false; } filterByBatch.value = !filterByBatch.value; }, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || batchCount.value === 0, children: u(IconStack, { size: 16 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Filter by Date Range"), children: u( "button", { class: `btn btn-sm btn-square join-item ${filterByDateRange.value ? "btn-active btn-primary" : ""}`, "aria-label": t("Filter by Date Range"), onClick: () => { if (!filterByDateRange.value) { filterByBatch.value = false; filterByBatchDateRange.value = false; } filterByDateRange.value = !filterByDateRange.value; }, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || dateRangeCount.value === 0, children: u(IconCalendarWeek, { size: 16 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": `${t("Filter by Batch")} + ${t("Filter by Date Range")}`, children: u( "button", { class: `btn btn-sm btn-square join-item ${filterByBatchDateRange.value ? "btn-active btn-primary" : ""}`, "aria-label": `${t("Filter by Batch")} + ${t("Filter by Date Range")}`, onClick: () => { if (!filterByBatchDateRange.value) { filterByBatch.value = false; filterByDateRange.value = false; } filterByBatchDateRange.value = !filterByBatchDateRange.value; }, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || batchDateRangeCount.value === 0, children: u(IconStack2, { size: 16 }) } ) }) ] }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Clear"), children: u( "button", { class: "btn btn-warning btn-sm btn-square", "aria-label": t("Clear"), onClick: openClearDialog, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || totalCount.value === 0, children: u(IconDatabaseX, { size: 16 }) } ) }) ] }) ] }), accounts.value.map((account) => u("div", { class: "relative w-full", children: [ u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => openDeleteDialog(account), children: deletingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 }) } ), u("div", { class: "card bg-base-200 border border-base-300 w-full", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "flex flex-col items-center gap-1", children: [ u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-xl", children: u( "img", { src: account.account_info.profile_image, alt: account.account_info.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) }) }), (account.batch_mode === "batch" || account.batch_mode === "auto" || account.batch_mode === "batch_date_range") && u("div", { class: "badge badge-soft badge-info badge-sm uppercase", children: t("Batch") }) ] }), u("div", { class: "grow", children: [ u("div", { class: "flex items-center gap-2 flex-wrap", children: [ u("h3", { class: "font-semibold text-base", children: account.account_info.nick }), (account.batch_mode === "batch_date_range" || account.batch_mode === "date_range") && account.date_since && account.date_until && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ account.date_since, " → ", account.date_until ] }) ] }), u("p", { class: "text-sm opacity-70", children: u( "a", { class: "link link-hover", href: `https://x.com/${account.username}`, target: "_blank", rel: "noopener noreferrer", children: [ "@", account.username ] } ) }), u("div", { class: "flex gap-2 mt-1", children: [ account.timeline_type && u("div", { class: "badge badge-soft badge-primary badge-sm", children: t(account.timeline_type === "media" ? "Media" : account.timeline_type === "timeline" ? "Timeline" : account.timeline_type === "tweets" ? "Tweets" : "Replies") }), account.media_type && u("div", { class: "badge badge-soft badge-secondary badge-sm", children: t(account.media_type === "all" ? "All" : account.media_type === "image" ? "Image" : account.media_type === "video" ? "Video" : "GIF") }), u("div", { class: "badge badge-soft badge-accent badge-sm", children: account.metadata.new_entries.toLocaleString() }) ] }), u("p", { class: "text-xs opacity-50 mt-1", children: [ formatDate(account.cached_at), " (", formatTimeAgo(account.cached_at), ")" ] }) ] }), u("div", { class: "flex items-center gap-1", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("View Database"), children: u( "button", { class: "btn btn-sm btn-square", "aria-label": t("View Database"), onClick: () => { viewingAccount.value = account; showViewModal.value = true; }, disabled: deletingId.value === account.id, children: u(IconDatabaseSearch, { size: 16 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Export"), children: u( "button", { class: "btn btn-accent btn-sm btn-square", "aria-label": t("Export"), onClick: () => exportAccount(account), disabled: exportingId.value === account.id || deletingId.value === account.id, children: exportingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseExport, { size: 16 }) } ) }) ] }) ] }) }) }) ] }, account.id)), accounts.value.length === 0 && u("div", { class: "text-center", children: [ u("div", { class: "opacity-50 mb-2", children: u(IconDatabase, { size: 36, class: "mx-auto" }) }), u("p", { class: "text-sm font-medium mb-1", children: t("No accounts yet") }), u("p", { class: "text-xs opacity-70", children: t("Use Dashboard to fetch data.") }) ] }), totalPages.value > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [ u( "button", { class: "join-item btn btn-sm", onClick: () => goToPage(currentPage.value - 1), disabled: currentPage.value === 1, children: "«" } ), u("button", { class: "join-item btn btn-sm", children: [ currentPage.value, "/", totalPages.value ] }), u( "button", { class: "join-item btn btn-sm", onClick: () => goToPage(currentPage.value + 1), disabled: currentPage.value === totalPages.value, children: "»" } ) ] }) }) ] }), u(Modal, { show: showDeleteModal.value, onClose: closeDeleteDialog, title: t("Delete Account Data"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to delete account data? This action cannot be undone", { username: accountToDelete.value?.username || "" }) }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: closeDeleteDialog, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-error", onClick: confirmDelete, disabled: deletingId.value === accountToDelete.value?.id, children: deletingId.value === accountToDelete.value?.id ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Deleting...") ] }) : u(preact.Fragment, { children: [ u(IconTrash, { size: 16 }), t("Delete") ] }) } ) ] }) ] }) }), u(Modal, { show: showClearModal.value, onClose: closeClearDialog, title: t("Clear"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure to clear all data in the database?") }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: closeClearDialog, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-warning", onClick: confirmClearAll, disabled: isClearingAll.value, children: isClearingAll.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Deleting...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseX, { size: 16 }), t("Clear") ] }) } ) ] }) ] }) }), u( ViewDatabaseModal, { isOpen: showViewModal.value, onClose: () => { showViewModal.value = false; viewingAccount.value = null; }, account: viewingAccount.value, onDeleteEntry: handleDeleteEntry, onLoadDatabase: handleLoadDatabase } ) ] }); } function Auth() { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const authToken = signals.useSignal(""); const patreonAuth = signals.useSignal(""); const showAuthToken = signals.useSignal(false); const showPatreonAuth = signals.useSignal(false); const isPatreonValid = signals.useSignal(false); const isVerifying = signals.useSignal(false); const isGenerating = signals.useSignal(false); const verificationMessage = signals.useSignal(""); const verificationSuccess = signals.useSignal(false); const generationMessage = signals.useSignal(""); const generationSuccess = signals.useSignal(false); hooks.useEffect(() => { loadAuthSettings(); }, []); hooks.useEffect(() => { const updateLocalToken = () => { if (authState.authToken.value && authState.authToken.value !== authToken.value) { authToken.value = authState.authToken.value; } }; updateLocalToken(); const unsubscribe = authState.authToken.subscribe(updateLocalToken); return unsubscribe; }, []); const loadAuthSettings = async () => { try { const settings = await mediaDownloaderDB.getAuthSettings(); if (settings) { authToken.value = settings.auth_token; patreonAuth.value = settings.patreon_auth; isPatreonValid.value = Boolean(settings.patreon_verified) && settings.patreon_verified_auth === settings.patreon_auth; authState.authToken.value = settings.auth_token; authState.patreonAuth.value = settings.patreon_auth; authState.patreonVerified.value = isPatreonValid.value; } } catch (error) { } }; const autoSaveAuthToken = async (value) => { try { await mediaDownloaderDB.saveAuthSettings(value, patreonAuth.value); authState.authToken.value = value; } catch (error) { } }; const autoSavePatreonAuth = async (value) => { try { await mediaDownloaderDB.saveAuthSettings(authToken.value, value); await mediaDownloaderDB.setPatreonVerified(false); authState.patreonAuth.value = value; authState.patreonVerified.value = false; } catch (error) { } isPatreonValid.value = false; verificationMessage.value = ""; }; const verifyPatreonAuth = async () => { if (!patreonAuth.value.trim()) { verificationMessage.value = t("Please enter Patreon auth first"); setTimeout(() => verificationMessage.value = "", 2e3); return; } try { isVerifying.value = true; verificationMessage.value = ""; const data = await mediaDownloaderAPI.verifyPatreonAuth(patreonAuth.value); isPatreonValid.value = data.valid; await mediaDownloaderDB.setPatreonVerified(data.valid); authState.patreonVerified.value = data.valid; verificationSuccess.value = data.valid; verificationMessage.value = data.valid ? t("Patreon auth verified successfully") : t("Invalid Patreon auth"); if (data.valid) { playSuccessSound(); } else { playErrorSound(); } setTimeout(() => verificationMessage.value = "", 2e3); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Verification failed. Please try again"); verificationSuccess.value = false; verificationMessage.value = msg; playErrorSound(); setTimeout(() => verificationMessage.value = "", 2e3); } finally { isVerifying.value = false; } }; const generateAuthToken = async () => { if (!isPatreonValid.value) { generationMessage.value = t("Please verify Patreon auth first"); setTimeout(() => generationMessage.value = "", 2e3); return; } try { isGenerating.value = true; generationMessage.value = ""; const data = await mediaDownloaderAPI.generateAuthToken(patreonAuth.value); if (data.auth_token) { authToken.value = data.auth_token; await autoSaveAuthToken(data.auth_token); authState.authToken.value = data.auth_token; generationSuccess.value = true; generationMessage.value = t("Token generated successfully", { current: data.current_index, total: data.total_tokens }); playSuccessSound(); } else { generationSuccess.value = false; generationMessage.value = t("Failed to generate token"); playErrorSound(); } setTimeout(() => generationMessage.value = "", 2e3); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Token generation failed. Please try again"); generationSuccess.value = false; generationMessage.value = msg; playErrorSound(); setTimeout(() => generationMessage.value = "", 2e3); } finally { isGenerating.value = false; } }; return u("div", { class: "space-y-6", children: u("div", { class: "space-y-4", children: [ u("div", { children: [ u("label", { class: "label mb-1", children: u("span", { class: "text-sm", children: t("Patreon Auth") }) }), u("div", { class: "join w-full", children: [ u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [ u("svg", { class: "h-4 w-4 opacity-50", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u( "g", { strokeLinejoin: "round", strokeLinecap: "round", strokeWidth: "2.5", fill: "none", stroke: "currentColor", children: [ u("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10" }), u("path", { d: "m9 12 2 2 4-4" }) ] } ) }), u( "input", { type: showPatreonAuth.value ? "text" : "password", class: "grow font-mono", placeholder: t("Enter your Patreon auth"), value: patreonAuth.value, onInput: (e) => { const value = e.target.value; patreonAuth.value = value; autoSavePatreonAuth(value); } } ), u( "span", { class: "cursor-pointer opacity-70 hover:opacity-100", onClick: () => showPatreonAuth.value = !showPatreonAuth.value, "aria-label": t("Toggle visibility"), children: showPatreonAuth.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 }) } ) ] }) }), u( "button", { class: `btn btn-sm join-item w-28 ${isPatreonValid.value ? "btn-success" : "btn-neutral"}`, onClick: verifyPatreonAuth, disabled: isVerifying.value || !patreonAuth.value.trim(), children: isVerifying.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Verifying"), "..." ] }) : isPatreonValid.value ? u(preact.Fragment, { children: [ u(IconCircleCheck, { size: 16 }), t("Verified") ] }) : t("Verify") } ) ] }), verificationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${verificationSuccess.value ? "alert-success" : "alert-error"}`, children: [ verificationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: verificationMessage.value }) ] }) ] }), u("div", { children: [ u("label", { class: "label mb-1", children: u("span", { class: "text-sm", children: t("Auth Token") }) }), u("div", { class: "join w-full", children: [ u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [ u("svg", { class: "h-4 w-4 opacity-50", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u( "g", { strokeLinejoin: "round", strokeLinecap: "round", strokeWidth: "2.5", fill: "none", stroke: "currentColor", children: [ u("rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }), u("circle", { cx: "12", cy: "12", r: "2" }), u("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" }) ] } ) }), u( "input", { type: showAuthToken.value ? "text" : "password", class: "grow font-mono", placeholder: t("Enter your auth token"), value: authToken.value, onInput: (e) => { const value = e.target.value; authToken.value = value; autoSaveAuthToken(value); } } ), u( "span", { class: "cursor-pointer opacity-70 hover:opacity-100", onClick: () => showAuthToken.value = !showAuthToken.value, "aria-label": t("Toggle visibility"), children: showAuthToken.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 }) } ) ] }) }), u( "button", { class: "btn btn-neutral btn-sm join-item w-28", onClick: generateAuthToken, disabled: isGenerating.value || !isPatreonValid.value || patreonAuth.value.trim() === "xbatchdemo", children: isGenerating.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Generating"), "..." ] }) : t("Generate") } ) ] }), generationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${generationSuccess.value ? "alert-success" : "alert-error"}`, children: [ generationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: generationMessage.value }) ] }) ] }), u("div", { class: `mt-3 rounded-box bg-base-200 p-2 text-xs space-y-1 ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [ u("div", { children: [ "• ", t("Use code"), " ", u( "button", { type: "button", class: "text-primary opacity-80 hover:opacity-100 cursor-pointer", onClick: () => { patreonAuth.value = "xbatchdemo"; autoSavePatreonAuth("xbatchdemo"); }, children: "xbatchdemo" } ), " ", t("for Patreon Auth, click Verify to unlock demo. Test at"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://x.com/xbatchdemo", target: "_blank", rel: "noopener noreferrer", dir: "ltr", children: " @xbatchdemo" }) ] }), u("div", { children: [ "• ", t("Need help with Auth Token? See"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/posts/how-to-obtain-127206894", target: "_blank", rel: "noopener noreferrer", children: t("the guide") }) ] }), u("div", { children: [ "• ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/exyezed/membership", target: "_blank", rel: "noopener noreferrer", children: t("Subscribe") }), " ", t("to get your Patreon Auth code and start downloading with ease!") ] }), u("div", { children: [ "• ", t("Report bugs or request features:"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "mailto:[email protected]", children: "[email protected]" }) ] }) ] }) ] }) }); } const flagUS = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-us'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23bd3d44'%20d='M0%200h640v480H0'/%3e%3cpath%20stroke='%23fff'%20stroke-width='37'%20d='M0%2055.3h640M0%20129h640M0%20203h640M0%20277h640M0%20351h640M0%20425h640'/%3e%3cpath%20fill='%23192f5d'%20d='M0%200h364.8v258.5H0'/%3e%3cmarker%20id='us-a'%20markerHeight='30'%20markerWidth='30'%3e%3cpath%20fill='%23fff'%20d='m14%200%209%2027L0%2010h28L5%2027z'/%3e%3c/marker%3e%3cpath%20fill='none'%20marker-mid='url(%23us-a)'%20d='m0%200%2016%2011h61%2061%2061%2061%2060L47%2037h61%2061%2060%2061L16%2063h61%2061%2061%2061%2060L47%2089h61%2061%2060%2061L16%20115h61%2061%2061%2061%2060L47%20141h61%2061%2060%2061L16%20166h61%2061%2061%2061%2060L47%20192h61%2061%2060%2061L16%20218h61%2061%2061%2061%2060z'/%3e%3c/svg%3e"; const flagDE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-de'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fc0'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e"; const flagSG = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sg-a)'%3e%3cpath%20fill='%23fff'%20d='M-20%200h720v480H-20z'/%3e%3cpath%20fill='%23df0000'%20d='M-20%200h720v240H-20z'/%3e%3cpath%20fill='%23fff'%20d='M146%2040.2a84.4%2084.4%200%200%200%20.8%20165.2%2086%2086%200%200%201-106.6-59%2086%2086%200%200%201%2059-106c16-4.6%2030.8-4.7%2046.9-.2z'/%3e%3cpath%20fill='%23fff'%20d='m133%20110%204.9%2015-13-9.2-12.8%209.4%204.7-15.2-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.5%2052%205%2015.1-13-9.2-12.9%209.3%204.8-15.1-12.8-9.4%2015.9-.1%204.9-15.1%205%2015h16zm58.5-.4%204.9%2015.2-13-9.3-12.8%209.3%204.7-15.1-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.4-51.6%204.9%2015.1-13-9.2-12.8%209.3%204.8-15.1-12.9-9.4%2016-.1%204.8-15.1%205%2015h16zm-46.3-34.3%205%2015.2-13-9.3-12.9%209.4%204.8-15.2-12.8-9.4%2015.8-.1%205-15.1%205%2015h16z'/%3e%3c/g%3e%3c/svg%3e"; const SERVER_CONFIG = { oregon: { name: "Oregon", region: "US West", flag: flagUS }, frankfurt: { name: "Frankfurt", region: "EU Central", flag: flagDE }, singapore: { name: "Singapore", region: "Southeast Asia", flag: flagSG } }; function Settings() { const { t } = useTranslation(); const [, force] = hooks.useState(0); const fetchMode = appOptionsManager.get("fetchMode") ?? "single"; const isBatching = fetchMode !== "single"; return u("div", { class: "space-y-4", children: [ u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Server"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Choose the server closest to your location for best performance"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u("div", { class: "dropdown dropdown-end", children: [ u( "div", { tabIndex: 0, role: "button", class: "btn btn-sm gap-1.5 px-1.5 justify-start", "aria-label": t("Server"), children: [ u("div", { class: "w-5 flex items-center justify-center", children: u( "img", { src: SERVER_CONFIG[appOptionsManager.get("apiServer") ?? "oregon"].flag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" } ) }), u("div", { class: "w-24 truncate text-xs text-left", children: SERVER_CONFIG[appOptionsManager.get("apiServer") ?? "oregon"].name }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: "dropdown-content bg-base-200 text-base-content rounded-box mt-2 border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", children: u("ul", { class: "menu w-48", children: [ u("li", { class: "menu-title text-xs", children: t("Server") }), Object.entries(SERVER_CONFIG).map(([key, config]) => u("li", { children: u( "button", { class: cx("gap-3 px-2", (appOptionsManager.get("apiServer") ?? "oregon") === key && "[&_svg]:visible"), onClick: () => { playRadioClickSound(); appOptionsManager.set("apiServer", key); force((x) => x + 1); }, children: [ u( "img", { src: config.flag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" } ), u("div", { class: "flex-1 min-w-0", children: [ u("div", { class: "truncate", children: config.name }), u("div", { class: "text-[10px] opacity-60 truncate", children: config.region }) ] }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, key)) ] }) } ) ] }) ] }), u("div", { class: "divider my-2" }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Fetch"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Use Batch/Auto Batch if single fetch fails"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: ["single", "batch", "auto"].map((mode) => u("label", { class: "label cursor-pointer gap-2", children: [ u( "input", { type: "radio", name: "fetch-mode", class: "radio radio-sm radio-primary", checked: (appOptionsManager.get("fetchMode") ?? "single") === mode, onChange: () => { playRadioClickSound(); appOptionsManager.set("fetchMode", mode); force((x) => x + 1); } } ), u("span", { class: "label-text capitalize text-xs", children: mode === "auto" ? t("Auto Batch") : mode === "batch" ? t("Batch") : t("Single") }) ] }, mode)) }) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm", children: t("Batch Size") }), u( "input", { type: "number", min: "1", class: `input input-bordered input-sm w-16 text-right ${!isBatching ? "opacity-50" : ""}`, value: appOptionsManager.get("batchSize") ?? 100, onChange: (e) => { const v = parseInt(e.target.value, 10); const safe = Number.isFinite(v) && v >= 1 ? v : 100; appOptionsManager.set("batchSize", safe); force((x) => x + 1); }, disabled: !isBatching } ) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm", children: t("Starting Batch") }), u( "input", { type: "number", min: "0", class: `input input-bordered input-sm w-16 text-right ${!isBatching ? "opacity-50" : ""}`, value: appOptionsManager.get("startingBatch") ?? 0, onChange: (e) => { const v = parseInt(e.target.value, 10); const safe = Number.isFinite(v) && v >= 0 ? v : 0; appOptionsManager.set("startingBatch", safe); force((x) => x + 1); }, disabled: !isBatching } ) ] }), u("div", { class: "divider my-2" }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Include Retweets"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Not supported with Media timeline"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("includeRetweets") ?? false, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("includeRetweets", checked); if (checked && appOptionsManager.get("timelineType") === "media") { appOptionsManager.set("timelineType", "timeline"); } force((x) => x + 1); } } ) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm", children: t("Timeline") }), u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: [ { value: "media", label: "Media" }, { value: "timeline", label: "Posts" }, { value: "tweets", label: "Tweets" }, { value: "with_replies", label: "Replies" } ].filter((opt) => { const includeRetweets = appOptionsManager.get("includeRetweets") ?? false; return !(includeRetweets && opt.value === "media"); }).map((opt) => u("label", { class: "label cursor-pointer gap-2", children: [ u( "input", { type: "radio", name: "timeline-type", class: "radio radio-sm radio-primary", checked: (appOptionsManager.get("timelineType") ?? "media") === opt.value, onChange: () => { playRadioClickSound(); appOptionsManager.set("timelineType", opt.value); force((x) => x + 1); } } ), u("span", { class: "label-text capitalize text-xs", children: t(opt.label) }) ] }, opt.value)) }) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm", children: t("Media") }), u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: [ { value: "all", label: "All" }, { value: "image", label: "Image" }, { value: "video", label: "Video" }, { value: "gif", label: "GIF" } ].map((opt) => u("label", { class: "label cursor-pointer gap-2", children: [ u( "input", { type: "radio", name: "media-type", class: "radio radio-sm radio-primary", checked: (appOptionsManager.get("mediaType") ?? "all") === opt.value, onChange: () => { playRadioClickSound(); appOptionsManager.set("mediaType", opt.value); force((x) => x + 1); } } ), u("span", { class: "label-text capitalize text-xs", children: t(opt.label) }) ] }, opt.value)) }) ] }), u("div", { class: "divider my-2" }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Convert Animated GIFs"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Larger size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("convertAnimatedGifs") ?? true, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("convertAnimatedGifs", checked); if (checked) { appOptionsManager.set("convertGifsExternal", false); } force((x) => x + 1); } } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Convert GIFs (External)"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Smaller size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("convertGifsExternal") ?? false, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("convertGifsExternal", checked); if (checked) { appOptionsManager.set("convertAnimatedGifs", false); } force((x) => x + 1); } } ) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Concurrent Downloads"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Use 10+ only with fast internet"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "number", min: "1", max: "50", class: "input input-bordered input-sm w-16 text-right", value: appOptionsManager.get("downloadConcurrency") ?? 10, onChange: (e) => { const v = parseInt(e.target.value, 10); const safe = Number.isFinite(v) && v >= 1 && v <= 50 ? v : 10; appOptionsManager.set("downloadConcurrency", safe); force((x) => x + 1); }, "aria-label": t("Concurrent Downloads") } ) ] }) ] }); } function ThemeSelector({ dropdownClasses = "", btnClasses = "btn-ghost", contentClasses = "mt-16" }) { const { t } = useTranslation(); const currentTheme = signals.useSignal(appOptionsManager.get("theme")); hooks.useEffect(() => { const unsub = appOptionsManager.signal.subscribe(() => { currentTheme.value = appOptionsManager.get("theme"); }); return () => { try { unsub?.(); } catch { } }; }, []); hooks.useEffect(() => { document.documentElement.setAttribute("data-theme", currentTheme.value || "light"); }, [currentTheme.value]); const handleThemeChange = (theme) => { playClickSound(); currentTheme.value = theme; appOptionsManager.set("theme", theme); document.documentElement.setAttribute("data-theme", theme); }; return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [ u( "div", { tabIndex: 0, role: "button", class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses), "aria-label": t("Change Theme"), children: [ u("div", { class: "bg-base-100 group-hover:border-base-content/20 border-base-content/10 grid shrink-0 grid-cols-2 gap-0.5 rounded-md border p-1 transition-colors", children: [ u("div", { class: "bg-base-content size-1 rounded-full" }), u("div", { class: "bg-primary size-1 rounded-full" }), u("div", { class: "bg-secondary size-1 rounded-full" }), u("div", { class: "bg-accent size-1 rounded-full" }) ] }), u("div", { class: "w-24 truncate text-xs capitalize text-left", children: currentTheme.value || "light" }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: cx( "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", contentClasses ), children: u("ul", { class: "menu w-56", children: [ u("li", { class: "menu-title text-xs", children: t("Change Theme") }), THEMES.map((theme) => u("li", { children: u( "button", { class: cx( "gap-3 px-2", currentTheme.value === theme && "[&_svg]:visible" ), onClick: () => handleThemeChange(theme), children: [ u( "div", { "data-theme": theme, class: "bg-base-100 grid shrink-0 grid-cols-2 gap-0.5 rounded-md p-1 shadow-sm", children: [ u("div", { class: "bg-base-content size-1 rounded-full" }), u("div", { class: "bg-primary size-1 rounded-full" }), u("div", { class: "bg-secondary size-1 rounded-full" }), u("div", { class: "bg-accent size-1 rounded-full" }) ] } ), u("div", { class: "w-32 truncate capitalize", children: theme }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, theme)) ] }) } ) ] }); } const flagCN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cn-a'%20fill='%23ff0'%20d='M-.6.8%200-1%20.6.8-1-.3h2z'/%3e%3c/defs%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(71.9991%200%200%2072%20120%20120)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-12.33562%20-20.5871%2020.58684%20-12.33577%20240.3%2048)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-3.38573%20-23.75998%2023.75968%20-3.38578%20288%2095.8)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(6.5991%20-23.0749%2023.0746%206.59919%20288%20168)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(14.9991%20-18.73557%2018.73533%2014.99929%20240%20216)'/%3e%3c/svg%3e"; const flagSA = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sa'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sa-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sa-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23165d31'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M65.5%20145.1c-.8%2012-2%2033%208.3%2035.2%2012.3%201.2%205.5-20.8%2010-24.8.8-2%202.3-2%202.4.5v18.7c0%206%204%207.8%207%209%203.2-.2%205.4%200%206.6%203l1.6%2032.3s7.4%202.2%207.8-18.1c.3-12-2.4-21.9-.8-24.2%200-2.3%203-2.4%205-1.3%203.2%202.2%204.6%205%209.6%204%207.6-2.2%2012.2-5.9%2012.3-11.7a47%2047%200%200%200-3.5-16.6c.4-1-1.4-3.7-1-4.7%201.3%202.2%203.4%202%203.8%200-1.3-4.2-3.3-8.3-6.5-10-2.7-2.4-6.7-2-8%203-.8%205.7%202%2012.4%206.1%2018%20.9%202.1%202.1%205.7%201.6%208.9q-3.4%201.8-6.3-1.2s-6-4.5-6-5.6c1.6-10.2.3-11.4-.6-14.3-.6-3.9-2.5-5.2-4-7.8-1.5-1.6-3.5-1.6-4.5%200-2.7%204.6-1.4%2014.5.5%2019%201.4%204.1%203.5%206.7%202.5%206.7-.8%202.3-2.5%201.7-3.8-1a67%2067%200%200%201-2.1-17.4c-.5-4.6-1.1-14.4-4.2-17-1.8-2.4-4.5-1.2-5.5%201a82%2082%200%200%200%20.3%2013.4c2%207.4%202.7%2014%203.7%2021.5.3%2010.1-5.8%204.4-5.5-.7a45%2045%200%200%200-.3-19.4c-1-2.6-2.1-3.2-4.6-2.8-1.9%200-6.8%205.3-8.2%2014.3%200%200-1.2%204.6-1.7%208.7-.7%204.6-3.7%208-5.9-.6-1.8-6.3-3-21.6-6-18z'/%3e%3cpath%20fill='%23fff'%20d='m99%20194.2-32%2015.4c.3-7.3%2015.1-20.4%2025.3-20.5%206.5.1%204.9%202.5%206.6%205.1z'/%3e%3cpath%20fill='%23fff'%20d='M93.3%20204.2c-16.8%2043.5%2039.5%2049.6%2045.8%201.8.6-2%203-3.9%203.4-.7-1.3%2043.3-43.6%2046.2-50.8%2032.6a42%2042%200%200%201-2.5-14.6c-1-8.5-5.5-5.2-6.2%203.2-.7%204.7-.5%206-.5%2010.5%202.2%2034.2%2056.7%2019.5%2065.6-8.7%204.7-15.6-.8-27.1%201.7-27.1%205.4%205.8%2013%20.8%2014.7-1.2.7-1%202.5-1.7%203.7-.4%204.2%203%2011.6%201.6%2013.2-3.7q1.4-8%201.8-16.2c-3.5%201-6%201.7-6.3%203.2l-.7%204.6c-.3%201.5-3.2%201.5-3.4-.4-1.3-6-6.7-6.7-10%202.5-2.1%201.8-6.1%202.2-6.5-.5.5-6.2-2-7-7-4.1l-4.8-36.2c2%200%204%201.5%205.9-.9-2-6.5-6.5-19.7-9-20.7-1.1-1.4-2.1-.5-3.7-.1-2.6.8-5%203-4.2%207.4%203%2018.8%205%2033.1%208.1%2052%20.5%202.1-1.3%205-3.7%204.7-4-2.7-5-8.2-12-8-5%200-10.6%205.5-11.3%2010.7-.9%204.2-1.2%208.7%200%2012.3%203.5%204.2%207.7%203.8%2011.4%202.9%203-1.3%205.5-4.3%206.6-3.6.7.9.1%2010.9-14.3%2018.5-8.7%204-15.7%204.8-19.4-2.3-2.3-4.5.2-21.4-5.6-17.5'/%3e%3cpath%20fill='%23fff'%20d='M165%20160c3.3-1.2%2019.3-19.6%2019.3-19.6l-2.4-2q-1.3-1.1%200-2.2c4-2.4%202.7-7.4.7-9.8a10%2010%200%200%200-8.7.1c-2.8%202.7-3.4%207-1.2%209.6%202.1%201%204.2%203.2%202.8%204.4-6.6%207-24.5%2019.1-22.4%2019.5.4.6%2011.5.6%2011.8%200zm-97%2065c-6%209.6-6.5%2023.9-3.2%2028.2%201.8%202%204.7%202.9%206.8%202.2%203.8-1.6%205.5-9.3%204.6-12q-1.8-3-3.6-.7c-2.6%205.4-3.7%201.7-4-1.3a70%2070%200%200%201%20.8-15.2c.7-4.2%200-3-1.4-1.2m257.1-15.3c-5.8-12.6-13.9-25-16.4-29.7a558%20558%200%200%200-24.8-36c-6.2-7.4%2010.2%203.1-2-11.7l-8.9-7.5c-2-1.4-6.8-4-7.6.2-.4%203.8-.2%205.8.4%208.9.5%202%203.5%205.5%205%207.5a565%20565%200%200%201%2053.8%2086.5c2.6-1.3%202-16.1.5-18.2'/%3e%3cpath%20fill='%23fff'%20d='M299.6%20251.5c-1.2%201.3%202.8%206.8%208%206.8%208.6-1%2016.2-5.8%2023.2-18.6a33%2033%200%200%200%205.3-14.2%20317%20317%200%200%200-5.8-72.4c-.3-2%200-4.4.2-5%20.6-.7%202.5%200%203.5-1.7%201.5-1.5-4-14-7-18.7-1-2.2-1.5-3.6-3.3.2a27%2027%200%200%200-3%2013.6c4.1%2028.5%205.4%2053.4%208%2081.9.3%202.8-.1%206.8-2%208.4a80%2080%200%200%201-27.1%2019.7m116.5-.1c-6.2%203.6-6.2%207.7-1.2%207.8%208.6-1%2018.8-1.7%2025.8-12.3a41%2041%200%200%200%204.2-16%20303%20303%200%200%200-4.7-71.4c-.2-2-1.1-6.7-.8-7.3.6-1.4%203.4.1%204.4-1.5%201.4-1.5-7.3-12.7-10.4-17.5-1-2.2-1.4-3.6-3.3.2a22%2022%200%200%200-1.8%2013.6c4.6%2031%208%2054.2%208.7%2081.6-.4%202.6-.5%204-1.7%207.3-2.7%203.4-5.7%207.8-8.5%209.9-2.8%202-8.8%204-10.7%205.6'/%3e%3cpath%20fill='%23fff'%20d='M420.7%20223.7q.1-10.9-.1-19a34%2034%200%200%200-3-13.5c-1.8-4.1-.7-7.4-1.6-11.8-.8-4.4-.6-11-1.8-16.1-.4-2-1.4-8.5-1.1-9.2.5-1.4%202.4%200%203.4-1.6%201.4-1.5-5-18-8.2-22.7-1.1-2.1-3.3-1.4-5.8%202-2.5%202.3-1.6%207.4-.6%2012.3%206.1%2032.3%2010.8%2061.6%209.8%2092.3-.4%202.6%209-7.8%209-12.7m-45.7-40c-3.9-.2-12-7.7-14.4-12a8%208%200%200%201%20.4-6.5c1.5-1%203.7-2%205.4-1%200%200%201.7%202.4%201.4%202.7%202%201%203%20.5%203.2-.4.1-1.5-.6-2.4-.6-4%20.9-4.6%206-5.3%208-2.4%201.4%201.8%202%205.5%202.1%208%200%201.3-2-.2-3.3%200-1.1.4-1.4%201.8-1.5%203-.2%203.3-.6%208.6-.7%2012.5zm-71.8%2048c1-9.8-.4-27.3-.5-33.1A477%20477%200%200%200%20299%20154c-1.2-8.4%203.4.9%202.8-4-1.5-8.3-6.1-14-11.6-21.5-1.7-2.5-1.7-3-4.4.6-3%206.7-.4%2011.4.4%2016.7%203.9%2017.2%206.2%2033%207.3%2048.7a393%20393%200%200%201%20.4%2049c3%20.1%207.6-4.7%209.3-11.8'/%3e%3cpath%20fill='%23fff'%20d='M434%20216c-6.9-11.6-17.2-24-20-28.7a658%20658%200%200%200-29.2-37.8c-8.5-9%204-1.5-1.6-8.5-4.7-5.1-6-6.8-10.1-9.9-2-1.3-3.2-3.8-4%20.5a83%2083%200%200%200-.2%2011.2c0%201.7%201.8%205%203.4%207%2020.7%2025.5%2043.4%2051.5%2061.6%2084.2%202.6-1.3%201.7-16%200-18z'/%3e%3cpath%20fill='%23165d31'%20d='M122.6%20194.7c-.5.9-1.6%202-1.2%203.1q1%201.4%202.6%201.3c1.1%200%202.7.3%203-.3q1-1.2.6-3.3c-1.2-3-4.4-1.8-5-.8'/%3e%3cpath%20fill='%23fff'%20d='M354.2%20362.5c9.2.4%2015.2.5%2023.3%201.4l9.6-1c10.6-1%2011%2015.1%2011%2015.1%200%209.5-3.7%2010-8.4%2011-2.7.4-4-1.6-5.5-3.6a14%2014%200%200%201-7%20.4l-11.5-.5c-4-.3-6.2.5-10.3.1-.8%201.3-2%203.1-4.4%202.6-2-.3-4.5-6-3.8-10.5%201.5-3.2%201-2.1%201-3.5-37.6-1-75.5-2.7-112.3-2.2-28.8.1-57.2%201.3-85.7%202.5-15.2-.2-26.8-2.6-34.8-14.3.8%200%2038.8%202.1%2049.9%201.4%2020.5-.2%2039.3-1.9%2060.2-2.5%2041.2.7%2082.1.7%20123.3%203.6-4-2.7-4-9%202-10.6.5-.4.8%203.1%201.7%203%204.9-.3%202.7%206.3%201.7%207.6M188.6%20135.3c-6.2%2017.8%203.6%2037.4%2010.4%2035.5%205%202%208-7.4%2010-17.6%201.5-2.9%202.5-3.2%203.2-1.7-.2%2013.6%201%2016.7%204.5%2020.8%207.8%206%2014.3.8%2014.8.3l6-6.1q2.2-2.2%205.1-.3c1.9%201.7%201.6%204.6%205.6%206.6%203.4%201.4%2010.5.4%2012.2-2.5%202.2-3.9%202.8-5.2%203.8-6.6%201.6-2.1%204.3-1.2%204.3-.5-.3%201.2-1.9%202.3-.8%204.5%202%201.4%202.4.5%203.5.2%204-2%207-10.6%207-10.6.1-3.2-1.7-3-2.9-2.2l-3.1%202.1c-2%20.3-5.7%201.6-7.6-1.3-1.9-3.4-1.9-8.3-3.3-11.8%200-.2-2.6-5.5-.2-5.8%201.2.2%203.7.9%204.1-1.2%201.2-2.1-2.6-8-5.3-11-2.3-2.5-5.5-2.8-8.6-.2-2.2%202-1.9%204.2-2.3%206.3a10%2010%200%200%200%202%208.7c2.2%204.2%206.1%209.7%204.8%2017.5%200%200-2.3%203.6-6.3%203.1-1.7-.3-4.4-1-5.8-11.8-1.1-8%20.2-19.4-3.2-24.7-1.3-3.3-2.2-6.4-5.2-.9-.8%202.2-4.3%205.5-1.8%2012.2a36%2036%200%200%201%202%2019c-1.5%202.2-1.8%202.9-3.7%205-2.6%203-5.5%202.2-7.7%201.1-2-1.3-3.6-2-4.6-6.5.2-7%20.6-18.5-.7-20.9-1.9-3.8-5-2.4-6.3-1.2a48%2048%200%200%200-11.5%2023.5c-1.8%205.8-3.7%204.1-5%201.8-3.2-3-3.5-26.7-7.4-22.8'/%3e%3cpath%20fill='%23fff'%20d='M207.4%20174.1c2.9-2%201.6-3.4%205.8.8a72%2072%200%200%201%209.2%2031.3c-.2%202.6%201.6%204.2%202.5%203.6.4-6%2015.1-14.4%2028.6-15.6%202-.5%201-4.4%201.3-6.4-.8-7.5%204.2-14.3%2011.2-14.8%209.6%201.4%2012.8%206.5%2013%2014.2-1.1%2015-16.7%2017.5-25.4%2018.7-1.3.5-1.9%201.1%200%201.8l36.6.2%201.9%201c.2%201-.6.2-2%202.6a30%2030%200%200%200-3.7%2011.5c-10.9%203.6-22.2%205-33.6%206.5-4%202-6%204.7-5.2%207.7%201.4%203.3%2010.2%206.7%2010.2%206.8%201.7%201%203.6%203.5-.5%208.6-17.8-.8-31.7-8.4-36.5-19.1-1.4-1.1-3%200-4%201.4-7%209-13.8%2017-25.7%2021.4-7%201.8-14.3-1.1-17.7-5.7-2.3-2.7-2.2-5.6-3-6.2-3.9%201.7-36.9%2015.7-32.7%209.1%208-8.5%2022-14.9%2034.2-23.3.9-2.9%202.5-12.5%207.3-15.6.3%200-.7%205.6-.6%208%200%202-.2%202.7.2%202.2.9-.5%2015.7-12.2%2017-15.8%201.4-2%20.3-7.2.3-7.4-2.8-7.2-6.7-7.8-8.1-11.4-1.3-4.7-.7-10.1%202-11.7q3.7-3.1%207.9.5c3%202.7%205.6%208%206.4%2011.9-.5%201.5-4-1-5-.3a16%2016%200%200%201%203.7%207.8c2%208.2%201.4%2011.4-.6%2016.7-6.6%2013.9-15%2018-22.4%2023.2-.2%200-.3%203.5%202.4%205.4%201%201%204.9%201.5%209.4%200a55%2055%200%200%200%2022.3-23.3%2051%2051%200%200%200-2.4-22.2c-2.9-6.7-6.3-16.2-6.3-16.4-.1-4.2.2-5.6%202-7.7m-95.8-38.6c4.2%202%2012.2%201.1%2011.8-5.7l-.2-3.1c-.8-2-3.2-1.5-3.7.5-.2.7.3%201.8-.3%202.1-.4.4-1.7.2-1.7-1.7q-.1-1-.7-1.6-.2-.2-.9-.2c-.6%200-.6.1-.9.6l-.3%201.6q-.1.9-.8%201c-.6%200-.5%200-1-.2q-.4-.3-.5-1l-.3-1.6q-.3-.4-1-.6c-2.3%200-2.5%202.7-2.3%203.7-.2.2-.3%204.9%202.8%206.2'/%3e%3cpath%20fill='%23fff'%20d='M235.1%20187.7c4.2%202%2014.3.9%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.6-.2.6.3%201.7-.4%202-.3.4-1.7.2-1.6-1.6q-.1-1-.7-1.7-.3-.2-1-.2c-.5%200-.5.2-.8.7q-.3.7-.3%201.6-.2.8-.9%201c-.5%200-.4%200-.8-.3q-.5-.3-.6-.9l-.3-1.6q-.3-.5-1-.6c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%205%203%206.2zm72-21.6c4.2%202%2012.1%201.1%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.5-.2.7.3%201.8-.4%202.2-.3.3-1.7.1-1.6-1.8q-.1-1-.7-1.6-.3-.2-1-.2t-.8.7l-.3%201.5q-.1%201-.9%201c-.8%200-.4%200-.8-.2q-.5-.3-.6-.9%200-1-.3-1.7-.4-.4-1-.5c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%204.9%203%206.2zm37.3%2054.3c-7.3%208.3-4.1%2022-2.4%2025%202.4%204.8%204.3%207.9%209%2010.3%204.3%203.1%207.7%201.2%209.5-1%204.3-4.5%204.4-16%206.4-18.2%201.4-4.2%205-3.5%206.7-1.6a17%2017%200%200%200%206.2%205.3c4%203.5%208.8%204.2%2013.6%201%203.2-1.9%205.3-4.2%207.2-8.9%202-5.6%201-31.6.5-47l-4.2-21.5c0-.2-.5-10.2-1-12.5%200-1-.3-1.3.7-1.2%201.1%201%201.2%201%202%201.3%201%20.2%202-1.7%201.3-3.3l-10-18.6c-.8-.8-1.9-1.6-3.2.2a7%207%200%200%200-2.4%205.5l1.3%2013.3%204%2022.6c1.3%2016%201.6%2029.2%202.9%2045.3-.2%206.8-2.3%2012.7-4.3%2013.6%200%200-3%201.7-5-.2-1.5-.6-7.4-9.9-7.4-9.9-3-2.7-5-2-7.1%200-6%205.8-8.6%2016.4-12.7%2023.8-1%201.7-4%203-7.2-.1-8.2-11.3-3.4-27.3-4.4-23.2M309%20126.7c3.8%201.5%206.4%209.2%205.6%2013-.8%204.5-2.8%209.5-4.2%208.9-1.6-.6%201-4.6-.5-8.8-.8-2.8-6-7.8-5.4-9.2-1-3.1%202.2-4.5%204.5-4z'/%3e%3cpath%20fill='%23fff'%20d='M356.6%20225c.7-9.2-.6-14.8-.8-20.2s-6.1-46.6-7.3-50.6c-1.5-7.8%205.7-1%204.9-5.6-2.5-5.6-8.6-13.9-10.5-18.8-1.2-2-.7-4-3.3-.5a42%2042%200%200%200-2.3%2019.2c6.2%2032.3%2012.5%2059.1%2011.5%2089.8%203%200%206.3-6.7%207.8-13.3m64.4-85.3c3.5%201.7%205.5%2011.3%205.1%2014-.7%205-2.5%2010.4-3.8%209.7-1.5-.6.3-7.4-.4-9.5-.8-3-5.5-8.4-5-10-1-3.4%202-4.8%204.1-4.2m-255.7%2067.9c3.3%201.3%205.3%208.3%205%2010.3-.8%203.7-2.5%207.7-3.8%207.1-1.3-.4.3-5.4-.3-7-.3-3.7-4.9-5.7-4.8-7.3-.8-3%202-3.5%204-3.1z'/%3e%3cpath%20fill='%23165d31'%20d='M244.9%20218.2c4.2.2%206.3%203.6%202.4%205-4%201.3-7.7%202.4-7.8%208%201.5%208-2%205.2-4%204.2-2.4-1.8-9.2-6-10.2-15-.1-2.1%201.6-4%204.3-4%204%201.1%2010%201.2%2015.3%201.8'/%3e%3cpath%20fill='%23fff'%20d='M77.4%20124.4c4.8%201.4%205.1%208.6%204.8%2010.7-.7%203.8-2.4%207.9-3.6%207.4-1.4-.5%200-5.7-.7-7.3-.7-2.2-4.8-6.4-4.4-7.6-.9-2.5%202-3.7%203.9-3.2m95.9%2033.6c-3.8%202-5.2%208-2.9%2011.6%202.2%203%205.6%201.9%206%201.9%203.7.4%205.9-6.9%205.9-6.9s.1-2-4.2%201.9c-1.9.3-2-.4-2.5-1.4a9%209%200%200%201%20.5-5.7c.7-1.8-.7-2.6-2.8-1.4m28-36.4c-2%201.3-5.7%205.2-5.8%209.6-.1%202.5-.6%202.5%201%204%201.3%201.8%202.4%201.7%204.8.4a5%205%200%200%200%202.3-3.4c.6-2.8-3%201.4-3.4-1.8-.8-3%201.5-4.2%203.7-7%200-2%200-3.3-2.7-1.8zm22.4%204a60%2060%200%200%200-1.6%2011.1c-.6%202.8%203%204%204.5.4%202.4-6.5%202.4-9.3%202.6-12-.7-4.3-3.6-4.2-5.5.5m142%2072.3c.4-.5%2020-14.4%2020-14.4%202-.7%201.5%207.2.6%207.1a78%2078%200%200%201-20.7%2014.3c-1%20.7-1.9-5.3%200-7zm17.7-.2c3.5%201.7%204.9%2011.8%204.5%2014.5%200%205.4-3.3%209.6-4.7%209-1.4-.7.2-6.7-.5-8.8-.8-3-3.7-8.5-3.2-10.1-1-3.4%201.8-5.2%204-4.6zm-116%2043.4a26%2026%200%200%201%205.6-4.9c2-1%203.8.8%203.7.7.3%202-1.2%203.7-.7%206.3.4%201%20.7%202.2%202.6%201.8%203.1-2.5%206-2.7%209-2.8%202.5.1%202.6%204.2%201%204.2-5.7%201.2-8.2%202.8-12.3%204.3-2%201.2-3.6-.3-3.6-.4s-1.1-1.1-.4-3.7q.3-3.2-2.4-3c-1.2.8-2.4%201.2-3-.3q-.6-1.4.5-2.2m136.6%205.4c.8%201%201.4%202-.1%203.8l-3.7%203.2c-.6%201-1%202.8%201%203.3%203.6%201%2012-4.5%2012-4.6%201.4-1%201-3%20.8-3-.8-.9-2.6-.3-3.8-.5-.6%200-2.5-.2-1.6-2a11%2011%200%200%200%201.6-2.9q.9-1.7-2-2.7c-2.1-.4-3-.2-5.3%200q-1.6.2-1.9%202.3c.1%202.3%201.5%202.2%203%203z'/%3e%3cpath%20fill='%23165d31'%20d='M268.1%20189.7c-.5%201-2.3%201-4%200s-2.7-2.6-2.1-3.5%202.3-.9%204%200%202.6%202.6%202.1%203.5m-89-53.6c-1%20.3-2.4-.6-3-2s-.3-2.6.7-2.9%202.3.7%203%202%20.3%202.7-.8%203zM355.2%20375c9.4.4%2018.2%200%2027.5.5%201.7%201.5.5%205-.6%204.8l-7.8-.3c-.1-3-7.7-2.5-7.5.1-4.1.5-7.8-.1-12-.3-1.2-1.5-1-4.2.4-4.8'/%3e%3c/g%3e%3c/svg%3e"; const flagJP = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jp-a'%3e%3cpath%20fill-opacity='.7'%20d='M-88%2032h640v480H-88z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23jp-a)'%20transform='translate(88%20-32)'%3e%3cpath%20fill='%23fff'%20d='M-128%2032h720v480h-720z'/%3e%3ccircle%20cx='523.1'%20cy='344.1'%20r='194.9'%20fill='%23bc002d'%20transform='translate(-168.4%208.6)scale(.76554)'/%3e%3c/g%3e%3c/svg%3e"; const flagKR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-kr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-95.8-.4h682.7v512H-95.8z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kr-a)'%20transform='translate(89.8%20.4)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-95.8-.4H587v512H-95.8Z'/%3e%3cg%20transform='rotate(-56.3%20361.6%20-101.3)scale(10.66667)'%3e%3cg%20id='kr-c'%3e%3cpath%20id='kr-b'%20fill='%23000001'%20d='M-6-26H6v2H-6Zm0%203H6v2H-6Zm0%203H6v2H-6Z'/%3e%3cuse%20xlink:href='%23kr-b'%20width='100%25'%20height='100%25'%20y='44'/%3e%3c/g%3e%3cpath%20stroke='%23fff'%20d='M0%2017v10'/%3e%3cpath%20fill='%23cd2e3a'%20d='M0-12a12%2012%200%200%201%200%2024Z'/%3e%3cpath%20fill='%230047a0'%20d='M0-12a12%2012%200%200%200%200%2024A6%206%200%200%200%200%200Z'/%3e%3ccircle%20cy='-6'%20r='6'%20fill='%23cd2e3a'/%3e%3c/g%3e%3cg%20transform='rotate(-123.7%20191.2%2062.2)scale(10.66667)'%3e%3cuse%20xlink:href='%23kr-c'%20width='100%25'%20height='100%25'/%3e%3cpath%20stroke='%23fff'%20d='M0-23.5v3M0%2017v3.5m0%203v3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e"; const flagFR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-fr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e"; const flagIN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-in'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23f93'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23128807'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='matrix(3.2%200%200%203.2%20320%20240)'%3e%3ccircle%20r='20'%20fill='%23008'/%3e%3ccircle%20r='17.5'%20fill='%23fff'/%3e%3ccircle%20r='3.5'%20fill='%23008'/%3e%3cg%20id='in-d'%3e%3cg%20id='in-c'%3e%3cg%20id='in-b'%3e%3cg%20id='in-a'%20fill='%23008'%3e%3ccircle%20r='.9'%20transform='rotate(7.5%20-8.8%20133.5)'/%3e%3cpath%20d='M0%2017.5.6%207%200%202l-.6%205z'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-a'%20width='100%25'%20height='100%25'%20transform='rotate(15)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-b'%20width='100%25'%20height='100%25'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-c'%20width='100%25'%20height='100%25'%20transform='rotate(60)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(120)'/%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(-120)'/%3e%3c/g%3e%3c/svg%3e"; const flagPT = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-pt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='red'%20d='M256%200h384v480H256z'/%3e%3cpath%20fill='%23060'%20d='M0%200h256v480H0z'/%3e%3cg%20fill='%23ff0'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.6'%3e%3cpath%20d='M339.5%20306.2c-32.3-1-180-93.2-181-108l8.1-13.5c14.7%2021.3%20165.7%20111%20180.6%20107.8z'/%3e%3cpath%20d='M164.9%20182.8c-2.9%207.8%2038.6%2033.4%2088.4%2063.8s92.9%2049%2096%2046.4l1.5-2.8q-.9%201.6-4.3.6c-13.5-3.9-48.6-20-92.1-46.4-43.6-26.4-81.4-50.7-87.3-61a6%206%200%200%201-.6-3.1h-.2l-1.2%202.2zm175.3%20123.8q-.7%201.3-3.5.8c-12-1.3-48.6-19.1-91.9-45-50.4-30.2-92-57.6-87.4-64.8l1.2-2.2.2.1c-4%2012.2%2082.1%2061.4%2087.2%2064.6%2049.8%2030.8%2091.8%2048.9%2095.5%2044.2z'/%3e%3cpath%20d='M256.2%20207.2c32.2-.3%2072-4.4%2095-13.6l-5-8c-13.5%207.5-53.5%2012.5-90.3%2013.2-43.4-.4-74.1-4.5-89.5-14.8l-4.6%208.6c28.2%2012%2057.2%2014.5%2094.4%2014.6'/%3e%3cpath%20d='M352.5%20193.8c-.8%201.3-15.8%206.4-37.8%2010.2a381%20381%200%200%201-58.6%204.3%20416%20416%200%200%201-56.2-3.6c-23.1-3.6-35-8.6-39.5-10.4l1.1-2.2c12.7%205%2024.7%208%2038.7%2010.2A412%20412%200%200%200%20256%20206a392%20392%200%200%200%2058.3-4.3c22.5-3.7%2034.8-8.4%2036.6-10.5zm-4.4-8.1c-2.4%202-14.6%206.3-36%209.7a388%20388%200%200%201-55.8%204c-22%200-40.1-1.6-53.8-3.6-21.8-2.8-33.4-8-37.6-9.4l1.3-2.2c3.3%201.7%2014.4%206.2%2036.5%209.3a385%20385%200%200%200%2053.6%203.4%20384%20384%200%200%200%2055.4-4c21.5-3%2033.1-8.4%2034.9-9.8zM150.3%20246c19.8%2010.7%2063.9%2016%20105.6%2016.4%2038%20.1%2087.4-5.8%20105.9-15.6l-.5-10.7c-5.8%209-58.8%2017.7-105.8%2017.4s-90.7-7.6-105.3-17v9.5'/%3e%3cpath%20d='M362.8%20244.5v2.5c-2.8%203.4-20.2%208.4-42%2012a434%20434%200%200%201-65.4%204.4%20400%20400%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-2.9c9.7%206.4%2035.9%2011.2%2044.7%2012.6%2015.8%202.4%2036.1%204.2%2061.7%204.2%2026.9%200%2048.4-1.9%2065-4.4%2015.7-2.3%2038-8.2%2042.4-12.1m0-9v2.5c-2.8%203.3-20.2%208.3-42%2011.9a434%20434%200%200%201-65.4%204.5%20414%20414%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-3c9.7%206.5%2036%2011.2%2044.7%2012.6a408%20408%200%200%200%2061.7%204.3c26.9%200%2048.5-2%2065-4.5%2015.7-2.2%2038-8.1%2042.4-12m-107%2068.8c-45.6-.2-84.7-12.4-93-14.4l6%209.4a250%20250%200%200%200%2087.4%2014.3c34.7-1%2065-3.7%2086.3-14.1l6.2-9.8c-14.5%206.9-64%2014.6-93%2014.6'/%3e%3cpath%20d='m344.9%20297.3-2.8%204c-10%203.6-26%207.4-32.6%208.4a296%20296%200%200%201-53.7%205c-40.4-.6-73.5-8.5-89-15.3l-1.3-2.1.2-.4%202.1.9a287%20287%200%200%200%2088.2%2014.5c18.8%200%2037.5-2.1%2052.6-4.8%2023.2-4.7%2032.6-8.2%2035.5-9.8l.7-.4zm5.3-8.8-2%203.5c-5.4%202-20%206.2-41.3%209.2-14%201.9-22.7%203.8-50.6%204.3a347%20347%200%200%201-94.2-14L161%20289a390%20390%200%200%200%2095.4%2014c25.5-.5%2036.4-2.4%2050.3-4.3%2024.8-3.8%2037.3-8%2041-9.1v-.2l2.6-1z'/%3e%3cpath%20d='M350.8%20237.6c.1%2030-15.3%2057-27.6%2068.8a99%2099%200%200%201-67.8%2028.2c-30.3.5-58.8-19.2-66.5-27.9a101%20101%200%200%201-27.5-67.4c1.8-32.8%2014.7-55.6%2033.3-71.3a100%20100%200%200%201%2064.2-22.7%2098%2098%200%200%201%2071%2035.6c12.5%2015.2%2018%2031.7%2020.9%2056.7M255.6%20135a106%20106%200%200%201%20106%20105.2%20105.6%20105.6%200%201%201-211.4%200c-.1-58%2047.3-105.2%20105.4-105.2'/%3e%3cpath%20d='M255.9%20134.5c58.2%200%20105.6%2047.4%20105.6%20105.6S314.1%20345.7%20256%20345.7s-105.6-47.4-105.6-105.6S197.8%20134.5%20256%20134.5zM152.6%20240c0%2056.8%2046.7%20103.3%20103.3%20103.3S359.2%20296.8%20359.2%20240s-46.7-103.3-103.3-103.3S152.6%20183.2%20152.6%20240'/%3e%3cpath%20d='M256%20143.3a97%2097%200%200%201%2096.7%2096.7%2097%2097%200%200%201-96.7%2096.8c-53%200-96.7-43.6-96.7-96.8a97%2097%200%200%201%2096.7-96.7M161.6%20240c0%2052%2042.6%2094.4%2094.4%2094.4s94.4-42.5%2094.4-94.4-42.6-94.4-94.4-94.4a95%2095%200%200%200-94.4%2094.4'/%3e%3cpath%20d='M260.3%20134h-9.1v212.3h9z'/%3e%3cpath%20d='M259.3%20132.8h2.3v214.7h-2.2V132.8zm-9%200h2.4v214.7h-2.3z'/%3e%3cpath%20d='M361.6%20244.2v-7.8l-6.4-6-36.3-9.6-52.2-5.3-63%203.2-44.8%2010.6-9%206.7v7.9l22.9-10.3%2054.4-8.5h52.3l38.4%204.2%2026.6%206.4z'/%3e%3cpath%20d='M256%20223.8c24.9%200%2049%202.3%2068.3%206%2019.8%204%2033.7%209%2038.5%2014.5v2.8c-5.8-7-24.5-12-39-15-19-3.6-43-6-67.9-6-26.1%200-50.5%202.6-69.3%206.2-15%203-35.1%209-37.6%2014.8v-2.9c1.3-4%2016.3-10%2037.3-14.3%2018.9-3.7%2043.3-6.1%2069.6-6.1zm0-9.1a383%20383%200%200%201%2068.3%206c19.8%204%2033.7%209%2038.5%2014.6v2.7c-5.8-6.9-24.5-12-39-14.9-19-3.7-43-6-67.9-6a376%20376%200%200%200-69.2%206.2c-14.5%202.7-35.4%208.9-37.7%2014.7v-2.8c1.4-4%2016.6-10.3%2037.3-14.3%2019-3.7%2043.3-6.2%2069.7-6.2m-.6-46.2c39.3-.2%2073.6%205.5%2089.3%2013.5l5.7%2010c-13.6-7.4-50.6-15-94.9-14-36.1.3-74.7%204-94%2014.4l6.8-11.4c15.9-8.3%2053.3-12.5%2087.1-12.5'/%3e%3cpath%20d='M256%20176.7a354%20354%200%200%201%2061.3%204.3c16%203%2031.3%207.4%2033.5%209.8l1.7%203c-5.3-3.4-18.6-7.3-35.6-10.5s-38.7-4.3-61-4.2c-25.3-.1-45%201.2-61.8%204.2a109%20109%200%200%200-33.3%2010.3l1.7-3.1c6-3%2015.3-6.7%2031.1-9.6%2017.5-3.2%2037.4-4.1%2062.4-4.2m0-9c21.4-.2%2042.6%201%2059.1%204a96%2096%200%200%201%2030.6%2010l2.5%204c-4.2-4.7-20-9.2-34.1-11.6-16.4-2.9-36.7-4-58.1-4.2a361%20361%200%200%200-59.5%204.4%2097%2097%200%200%200-29.6%209.1l2.2-3.3c5.8-3%2015.2-5.8%2027-8.1a357%20357%200%200%201%2059.9-4.4zM308.4%20284a276%20276%200%200%200-52.5-4c-65.5.8-86.6%2013.5-89.2%2017.3l-5-8c16.8-12%2052.4-18.8%2094.6-18.2q32.9.5%2056.6%205l-4.5%208'/%3e%3cpath%20d='M255.6%20278.9c18.2.3%2036%201%2053.3%204.2l-1.2%202.2c-16-3-33.2-4-52-4-24.3-.2-48.7%202.1-70%208.2-6.7%201.9-17.8%206.2-19%209.8l-1.2-2c.4-2.2%207-6.6%2019.6-10%2024.4-7%2047.2-8.3%2070.5-8.4m.8-9.2a327%20327%200%200%201%2057.3%205l-1.3%202.3a299%20299%200%200%200-56-4.9c-24.2%200-49.9%201.8-73.3%208.6-7.5%202.2-20.6%207-21%2010.7l-1.2-2.2c.2-3.4%2011.5-7.9%2021.7-10.8%2023.5-6.9%2049.3-8.6%2073.8-8.7'/%3e%3cpath%20d='m349.4%20290.5-7.8%2012.3-22.7-20.1-58.6-39.5-66.2-36.3-34.3-11.7%207.3-13.6%202.5-1.3%2021.3%205.3%2070.4%2036.3%2040.6%2025.6L336%20272l13.9%2016z'/%3e%3cpath%20d='M158.6%20195.5c6-4%2050.2%2015.6%2096.6%2043.6%2046.1%2028%2090.3%2059.6%2086.3%2065.5l-1.3%202.1-.6.5c.1-.1.8-1%200-3.1-2-6.5-33.4-31.5-85.3-62.9-50.7-30.1-92.9-48.3-97-43.1zM351%20290.4c3.8-7.6-37.2-38.5-88.1-68.6-52-29.5-89.6-46.9-96.5-41.7L165%20183l.4-.5c1.2-1%203.3-1%204.2-1%2011.8.2%2045.5%2015.7%2092.8%2042.8%2020.8%2012%2087.6%2055%2087.3%2067%200%201%20.1%201.2-.3%201.8l1.7-2.6z'/%3e%3c/g%3e%3cg%20transform='translate(0%2026.7)scale(1.06667)'%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.7'%20d='M180.6%20211a59%2059%200%200%200%2017.5%2041.7%2059%2059%200%200%200%2041.8%2017.6%2059%2059%200%200%200%2042-17.4%2059%2059%200%200%200%2017.4-41.8v-79.2l-118.7-.2z'/%3e%3cpath%20fill='red'%20stroke='%23000'%20stroke-width='.5'%20d='M183%20211.1a56%2056%200%200%200%2016.8%2040%2057%2057%200%200%200%2040.2%2016.8%2057%2057%200%200%200%2040.2-16.6%2056%2056%200%200%200%2016.7-40v-77H183v76.8m91-53.7v48.9l-.1%205.1a33%2033%200%200%201-10%2024%2034%2034%200%200%201-24%2010c-9.4%200-17.7-4-23.9-10.2a34%2034%200%200%201-10-24v-54z'/%3e%3cg%20id='pt-e'%3e%3cg%20id='pt-d'%20fill='%23ff0'%20stroke='%23000'%20stroke-width='.5'%3e%3cpath%20stroke='none'%20d='M190.2%20154.4c.1-5.5%204-6.8%204-6.8.1%200%204.3%201.4%204.3%206.9z'/%3e%3cpath%20d='m186.8%20147.7-.7%206.3h4.2c0-5.2%204-6%204-6%20.1%200%204%201.1%204.1%206h4.2l-.8-6.4zm-1%206.4h17q.5%200%20.6.7%200%20.8-.6.8h-17q-.5%200-.6-.8%200-.7.7-.7z'/%3e%3cpath%20d='M192%20154c0-3.3%202.3-4.2%202.3-4.2s2.3%201%202.3%204.2H192m-5.8-9h16.3q.5.1.6.8%200%20.5-.6.6h-16.3q-.5%200-.6-.7%200-.5.6-.6zm.4%201.5H202q.5%200%20.6.7t-.6.7h-15.5q-.6%200-.6-.7t.6-.7zm5-10.6h1.2v.8h.9v-.8h1.3v.9h.9v-1h1.2v2q0%20.6-.5.6h-4.4q-.5%200-.6-.5zm4.6%202.7.3%206.4h-4.3l.3-6.5h3.7'/%3e%3cpath%20id='pt-a'%20d='M191%20141.6v3.4h-4v-3.4z'/%3e%3cuse%20xlink:href='%23pt-a'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20id='pt-b'%20d='M186.3%20139h1.2v1h.9v-1h1.2v1h.9v-1h1.2v2q0%20.6-.5.6h-4.3l-.6-.6z'/%3e%3cuse%20xlink:href='%23pt-b'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20fill='%23000001'%20stroke='none'%20d='M193.9%20140.6c0-.6.9-.6.9%200v1.6h-.9z'/%3e%3cpath%20id='pt-c'%20fill='%23000001'%20stroke='none'%20d='M188.6%20142.8c0-.6.8-.6.8%200v1.2h-.8z'/%3e%3cuse%20xlink:href='%23pt-c'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20y='46.3'/%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20transform='rotate(-45.2%20312.8%20180)'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20x='45.7'/%3e%3cuse%20xlink:href='%23pt-e'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20479.8%200)'/%3e%3cg%20id='pt-f'%20fill='%23fff'%3e%3cpath%20fill='%23039'%20d='M232.6%20202.4a8%208%200%200%200%202.2%205.7%207%207%200%200%200%205.3%202.4q3.2-.2%205.3-2.4a8%208%200%200%200%202.2-5.7v-10.8h-15z'/%3e%3ccircle%20cx='236.1'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='240.2'%20cy='199.7'%20r='1.5'/%3e%3ccircle%20cx='236.1'%20cy='203.9'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='203.9'%20r='1.5'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='-26'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='-20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='25.8'/%3e%3c/g%3e%3c/svg%3e"; const flagRU = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ru'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%230039a6'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e"; const flagES = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23AA151B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23F1BF00'%20d='M0%20120h640v240H0z'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.8%20204.5q.1-.7.8-.8%201%200%201%20.8-.1.8-1%20.9c-.9.1-.8-.4-.8-.9'/%3e%3cpath%20fill='%23c8b100'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='%23c8b100'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.9%20203.7q.6.2.6.8-.1.8-.8.9-1%200-1-.9%200-.6.7-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.8%20206.8c1-.5%203%201.1%204.6%203.6m11-3.6c-.8-.5-2.8%201.1-4.5%203.6'/%3e%3cpath%20fill='%23c8b100'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8l-.3-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m142%20215.4-.3-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20215.4-.3-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1z'/%3e%3cpath%20fill='%23c8b100'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M126.8%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M138%20229.2v76.3m1.7-76.3v76.3m-12.9%200h15.6v-76.4h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M125.8%20254c1.9-.6%203.1-1.5%202.5-3q-.6-1.3-2.8-.6l-2.6%201%202.3%205.8.8-.3.8-.3zm-1.2-2.7.7-.3q1-.3%201.4.8.4.8-.5%201.5l-.6.3zm7.3-2.5-.9.3h-.8l1.3%206.1%204.3-.8-.2-.4v-.4l-2.5.6zm8.4%205.2q1.2-3.3%202.7-6.4h-1l-1.8%204.6-2.4-4.3-1%20.1h-1l3.5%206zm8.8-4.7.4-.9a3%203%200%200%200-1.7-.6q-2.6%200-2.8%201.7c-.2%202.1%203.2%202%203%203.4q-.2%201-1.4.8-1.3%200-1.4-1.2h-.3l-.4%201.1a4%204%200%200%200%201.8.6q2.7.2%203.2-1.7c.2-2-3.3-2.1-3.1-3.4q0-.8%201.3-.7%201%200%201.2.9z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8l-.2-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23fff'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4zm-.2-1.4a.4.4%200%200%201%20.4-.4q.4%200%20.4.4t-.4.4a.4.4%200%200%201-.4-.4zm-1.1-1q0-.3.4-.3t.4.4-.4.4a.4.4%200%200%201-.4-.5zm-1.4-.4q0-.3.4-.4.5%200%20.5.4t-.4.4q-.5-.1-.5-.4zm-1.4%200q0-.3.5-.3t.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m287.8%20211.2.2-1a2.7%202.7%200%200%200-2.7-2.8q-.8%200-1.3.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283%20209.2.2-.8q-.2-1.8-2.5-2-1%200-1.6.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M288.2%20210q0-.5.4-.5t.4.4-.4.4q-.5%200-.4-.4zm-.2-1.6q0-.3.4-.4a.4.4%200%200%201%20.5.4q0%20.3-.4.4-.5%200-.5-.4zm-1-1.1a.4.4%200%200%201%20.5-.4q.3%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm-1.3-.7q0-.4.5-.4t.4.4q0%20.5-.4.5a.4.4%200%200%201-.5-.5zm-1.4.1q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6z'/%3e%3cpath%20fill='%23fff'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4zm.2-1.4q0-.4.4-.4t.5.4q0%20.5-.5.4a.4.4%200%200%201-.4-.4zm1-1q.1-.3.5-.3t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.5zm1.4-.4q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4zm1.4%200q0-.3.5-.3.3%200%20.4.4%200%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m267.8%20211.2-.2-1a2.7%202.7%200%200%201%202.7-2.8q.8%200%201.4.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.7%20209.2-.3-.8c0-1%201.2-2%202.6-2a3%203%200%200%201%201.5.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M266.6%20210q0-.5.4-.5t.4.4a.4.4%200%200%201-.4.4q-.3%200-.4-.4zm.1-1.6q.1-.3.5-.4.5%200%20.4.4t-.4.4q-.4-.1-.4-.4zm1-1.1q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm1.3-.7q0-.4.5-.4.3%200%20.4.4%200%20.5-.4.5a.4.4%200%200%201-.5-.5zm1.4.1q0-.3.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m270.5%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m285.1%20215.4-.2-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.1%20215.4-.2-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277%20205.4q.1-.8.8-.8%201%200%201%20.8c0%20.8-.5.8-1%20.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M279%20205.1v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.1%20204.6q.6.1.6.8t-.9.8a1%201%200%200%201-.8-.8q0-.6.6-.8'/%3e%3cpath%20fill='%23c8b100'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4z'/%3e%3cpath%20fill='%23ccc'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M270.1%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M281.4%20229.1v76.3m1.8-76.3v76.3m-13%20.2h15.5V229h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='m263.9%20254.4%202.1-6.6h-.5l-.5.1-1.4%204.8q-1.6-2-2.7-4.1l-1%20.2h-1l4%205.7h.5zm6-6.6h-1.8v6.2h4.2v-.7h-2.6zm6.8%201%202%20.3v-.7l-5.8-.5v.8h2l-.4%205.6h1.6l.5-5.4m2.4%206%20.8.2.8.2.7-2.9.6%201.2.8%202.1%201%20.2q.6%200%201%20.3l-.3-.7-1.3-2.9q1.6%200%202.1-1.2.3-.8-.7-1.5-.8-.4-1.7-.5l-2.4-.5zm3-5.2c.7.2%201.5.3%201.5%201v.5q-.5%201.3-2%20.9zm8%207-.2%202%20.8.5.9.5.5-7-.7-.3-6.1%203.8.5.3.4.2%201.7-1.2%202.3%201.3zm-1.7-1.5%202-1.4-.2%202.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2z'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.3'%20d='M205.7%20175.4c6.3%200%2012%201%2015.7%202.4a32%2032%200%200%200%2014.6%202.3c2.7%200%206.5.8%2010.3%202.4a27%2027%200%200%201%207.4%204.7l-1.5%201.4-.4%203.8-4.1%204.7-2%201.8-5%203.9-2.5.2-.7%202.1-31.6-3.7-31.7%203.7-.8-2.1-2.5-.2-4.9-4-2-1.7-4.1-4.7-.5-3.8-1.5-1.4a28%2028%200%200%201%207.5-4.7%2026%2026%200%200%201%2010.2-2.4q3%20.3%206.6-.2a30%2030%200%200%200%208-2q5.6-2.4%2015.5-2.5z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.2%20217.1c-11.8%200-22.4-1.4-29.9-3.6a1%201%200%200%201-.8-1.2q0-.8.8-1.2a109%20109%200%200%201%2029.9-3.6c11.7%200%2022.3%201.4%2029.8%203.6a1.3%201.3%200%200%201%200%202.4c-7.5%202.2-18%203.6-29.8%203.6'/%3e%3cpath%20fill='%23ad1519'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M206.9%20215.7v-6.3m-1.7%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M203.6%20215.7v-6.3m-1.6%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M200.6%20215.7v-6.3m-2.8%205.9v-5.7m1.3%205.8v-6m-3.8%205.6v-5.2m1.3%205.4v-5.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M192%20214.8V210m1%204.7V210m1.2%205v-5m-3.4%204.7v-4.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M189.7%20214.5v-4.2m-1.2%204.1v-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M186%20214v-3m1.3%203.2v-3.5m-2.5%203.1V211'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.7'%20d='M183.7%20213.6v-2.3m-1.3%202v-1.8m-1.2%201.6v-1.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.9'%20d='M179.8%20212.8v-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M213.7%20215.3v-5.8m-2.9%206v-6.1m-2.1%206.2v-6.3'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20207.4a108%20108%200%200%200-30%203.9c.6-.3.5-1-.3-3-1-2.5-2.4-2.4-2.4-2.4%208.3-2.5%2020-4%2032.8-4a123%20123%200%200%201%2033%204s-1.5-.1-2.5%202.3q-1.2%202.8-.2%203c-7.5-2.2-18.4-3.7-30.3-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20201.9c-12.9%200-24.5%201.5-32.8%204a1%201%200%200%201-1.3-.6%201%201%200%200%201%20.7-1.3%20121%20121%200%200%201%2033.4-4.2c13.2%200%2025.2%201.7%2033.5%204.2q1%20.4.7%201.3t-1.3.6c-8.4-2.5-20-4-32.9-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M197%20204.8q0-.9%201-1%20.9.1%201%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20205.6H203a1%201%200%200%201%200-2h6.4q.9.1%201%201%200%201.2-1%201h-3.2'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m190.3%20206.5-2.3.2q-.9%200-1.2-.8a1%201%200%200%201%201-1.1l2.2-.3%202.4-.3q.9%200%201.1.9%200%20.9-.9%201l-2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M181%20206.7q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m174%20208.5%201.2-1.6%203.3.4-2.6%202-1.8-.8'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m222%20206.5%202.3.2q.9%200%201.1-.8a1%201%200%200%200-.9-1.1l-2.2-.3-2.4-.3a1%201%200%200%200-1.1.9q0%20.9.9%201l2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M213.3%20204.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m15.8%201.9q.1-1%201-1t1.1%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m238.2%20208.5-1.1-1.6-3.3.4%202.6%202%201.8-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M177.3%20212.8c7.4-2.1%2017.6-3.4%2028.8-3.4%2011.3%200%2021.4%201.3%2028.9%203.4'/%3e%3cpath%20fill='%23c8b100'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6l-1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7l-.9%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8z'/%3e%3cpath%20fill='%23fff'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20178q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7m.4-3.7q.1-1.2%201.4-1.3%201.4.1%201.5%201.3-.1%201.3-1.5%201.4c-1.4.1-1.4-.6-1.4-1.4m.4-3.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m.2-2.8q.1-.8.8-.8t.9.8q0%20.7-.9.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m206.2%20191.8%201.2.2a4.6%204.6%200%200%200%204.5%206%205%205%200%200%200%204.4-3c.1%200%20.5-1.7.7-1.7s.1%201.8.2%201.7c.3%202.3%202.4%203.8%204.7%203.8a4.6%204.6%200%200%200%204.7-5l1.5-1.5.7%202a4%204%200%200%200-.4%201.9%204.4%204.4%200%200%200%204.5%204.2q2.5%200%203.8-1.9l.9-1.2v1.5c0%201.5.6%202.8%202%203%200%200%201.7.1%204-1.6%202.1-1.7%203.3-3.1%203.3-3.1l.2%201.7s-1.8%202.8-3.8%204c-1%20.6-2.7%201.3-4%201q-2.1-.5-3-2.6a7%207%200%200%201-3.3%201%207%207%200%200%201-6.1-3.7%207%207%200%200%201-10.4-.3%207%207%200%200%201-4.6%201.8%207%207%200%200%201-5.7-3%207%207%200%200%201-5.7%203%207%207%200%200%201-4.7-1.8%207%207%200%200%201-10.4.3%207%207%200%200%201-6%203.7%207%207%200%200%201-3.4-1q-.8%202.1-3%202.7c-1.2.2-2.9-.5-4-1.1-2-1.2-3.8-4-3.8-4l.2-1.7s1.2%201.4%203.4%203.1%203.9%201.6%203.9%201.6c1.4-.2%202-1.5%202-3v-1.5l1%201.2a5%205%200%200%200%203.7%202c2.5%200%204.5-2%204.5-4.3a4%204%200%200%200-.4-2l.8-1.9%201.5%201.5v.6c0%202.4%202%204.4%204.6%204.4%202.4%200%204.4-1.5%204.7-3.8%200%200%200-1.6.2-1.7s.6%201.7.7%201.6a5%205%200%200%200%204.5%203.1%204.6%204.6%200%200%200%204.5-6l1.2-.2'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M238.6%20197.7q.4-1.4-.6-1.8-.9-.2-1.5%201.1-.4%201.4.6%201.8.9.2%201.5-1.1m-20.5-4c0-.8-.3-1.6-1-1.6q-.8%200-1.2%201.4%200%201.3.9%201.6%201-.1%201.3-1.4m-23.9%200c0-.8.4-1.6%201-1.6q1%200%201.2%201.4%200%201.3-.9%201.6-1-.1-1.2-1.4m-20.6%204q-.3-1.4.6-1.8%201-.2%201.5%201.1t-.5%201.8q-1%20.2-1.6-1.1'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M182.7%20184a5%205%200%200%201%202.2%202.9s0-.3.6-.6%201-.3%201-.3l-.1%201.3-.3%202.2-.7%201.6a2%202%200%200%200-1.5-.4%202%202%200%200%200-1.2.9s-.7-.6-1.2-1.3l-1.1-2-.7-1.1s.5-.2%201.1%200q.9.1.8.2a5%205%200%200%201%201-3.4m.4%209.8-.6-1q0-.7.3-1.2s-.9-.5-1.8-.7c-.7-.2-2-.2-2.3-.2h-1l.2.5.5.7a5%205%200%200%200-3%202%205%205%200%200%200%203.5%201l-.2.8v.6l1-.4c.3-.1%201.5-.5%202-1%20.8-.4%201.5-1.1%201.5-1.1m2.7-.5.2-1.1-.6-1%201.4-1.3%202-.9%201.1-.4v.6l-.2.8a5%205%200%200%201%203.4%201%205%205%200%200%201-2.9%202l.7%201.2h-1c-.4%200-1.6%200-2.3-.2l-1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20180.8a6%206%200%200%201%201.9%203.7s.2-.3.9-.5q1.1-.3%201.2-.2l-.5%201.4-.8%202.4-1%201.7a2%202%200%200%200-1.7-.7q-1%200-1.6.7-.2-.1-1-1.7l-.8-2.4-.5-1.4%201.2.2q1%20.4.9.5.2-2.2%201.8-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M204.6%20191.8a2%202%200%200%201-.5-1.2q0-.8.4-1.3s-.8-.7-1.8-1c-.7-.4-2-.7-2.5-.7l-1.2-.2.2.6.4.9a6%206%200%200%200-3.7%201.7q1.6%201.5%203.7%201.6l-.4%201-.2.6%201.2-.2c.4-.1%201.8-.4%202.5-.7%201-.4%201.9-1%201.9-1m3%200a2%202%200%200%200%20.1-2.6s.9-.7%201.8-1a8%208%200%200%201%202.5-.7l1.2-.3-.1.7-.4.9q2.2.2%203.6%201.7a6%206%200%200%201-3.6%201.6l.5%201.6-1.2-.2-2.5-.7c-1-.4-1.8-1-1.8-1m22-8a5%205%200%200%200-2.2%203l-.7-.6-1-.3.2%201.3c0%20.3%200%201.3.3%202.2q.4%201.6.6%201.6a2%202%200%200%201%201.5-.4q.9.2%201.3.9l1.1-1.3q1-1.4%201.1-2l.7-1.1s-.4-.2-1%200l-1%20.2a5%205%200%200%200-1-3.4m-.3%209.8q.5-.4.6-1l-.2-1.2s.8-.5%201.7-.7c.7-.2%202-.2%202.3-.2h1.1l-.3.5-.4.7a5%205%200%200%201%202.9%202%205%205%200%200%201-3.5%201l.2.8v.6l-1-.4c-.3-.1-1.4-.5-2-1-.8-.4-1.4-1.1-1.4-1.1m-2.8-.5-.2-1.1q0-.7.6-1s-.6-.8-1.4-1.3c-.6-.4-1.7-.8-2-.9l-1-.4v.6l.2.8a5%205%200%200%200-3.5%201q1%201.4%203%202l-.5.7-.3.5h1c.4%200%201.7%200%202.3-.2l1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M226%20192.4c0-1%201-2%202-2s2.1%201%202.1%202a2%202%200%200%201-2%202%202%202%200%200%201-2.1-2m23.2%204.4c-.4-.5-1.4-.4-2.2.2q-1.2%201.2-.5%202.2%201%20.8%202.3-.3c.7-.6%201-1.6.5-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m246.3%20198%20.7-1c.7-.6%201.8-.7%202.3-.2l.1.2s1-2%202.3-2.6%203.4-.5%203.4-.5a3%203%200%200%200-2.9-2.8%203%203%200%200%200-2.4%201l-.2-1s-1.3.3-1.9%201.8%200%203.6%200%203.6-.3-.9-.7-1.5a8%208%200%200%200-2.4-1.6l-1.3-.7-.1.5v.8a8%208%200%200%200-3.7.5%205%205%200%200%200%202.5%202.2l-.8.7-.4.5%201.3.2%202.5.2%201.7-.2m-80.3%200q0-.6-.7-1c-.7-.7-1.7-.8-2.2-.3l-.2.3s-1-2-2.3-2.7-3.3-.5-3.3-.5a3%203%200%200%201%202.8-2.8q1.6%200%202.4%201l.2-1s1.3.3%202%201.8c.5%201.5-.1%203.6-.1%203.6s.3-.9.8-1.5a8%208%200%200%201%202.4-1.6l1.3-.7v1.3a8%208%200%200%201%203.7.5%205%205%200%200%201-2.5%202.2l.8.7.4.5-1.2.2-2.6.2-1.7-.2'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M163%20196.8q1-.7%202.4.3%201.2%201%20.4%202c-.5.6-1.5.5-2.2-.2s-1-1.6-.5-2m41-6.3q.2-1.8%202-2c1.8-.2%202.1.9%202.1%202%200%201-1%202-2%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23005bbf'%20stroke='%23000'%20stroke-width='.3'%20d='M201.8%20160.6c0-2.2%201.9-4%204.3-4s4.2%201.8%204.2%204-1.9%204-4.3%204a4%204%200%200%201-4.2-4'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.3'%20d='M205%20149.3v2.2h-2.4v2.2h2.3v6.3H202l-.2.6q0%20.9.3%201.6h7.9q.3-.7.3-1.6l-.2-.6h-2.8v-6.3h2.3v-2.2h-2.3v-2.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='%23ad1519'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M168.6%20320.9c1.5.8%203.6%202%205.8%202.6l-.1-54.7h-5.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.5'%20d='M158%20301.6a24%2024%200%200%200%205.5%2015v-47.5h-5.4z'/%3e%3cpath%20fill='%23c7b500'%20stroke='%23000'%20stroke-width='.5'%20d='M179.4%20324.7a27%2027%200%200%200%205.6%200v-55.9h-5.6v56z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M190%20323.5a19%2019%200%200%200%205.8-2.5v-52.2H190z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M201%20316c2.4-2%204.6-6.8%205.4-12.2l.1-35H201l.1%2047.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23ad1519'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='%23c8b100'%20d='m215.1%20294.1.1.5q-.1%201-1.1%201a1%201%200%200%201-1.1-1v-.5h-1.5a2.5%202.5%200%200%200%201.8%202.9v3.9h1.6V297a3%203%200%200%200%201.7-1.6h4.4v-1.2zm21.8%200v1.2h-4l-.3.6%204.6%205.2-1.2%201-4.6-5.3-.2.1v8.7h-1.6V297h-.2l-4.8%205.2-1.2-1%204.7-5.3-.2-.4h-4V294h13zm2.6%200v1.2h4.4q.5%201.2%201.7%201.6v3.9h1.6V297a3%203%200%200%200%201.8-2.4v-.5h-1.6l.1.5q-.1%201-1%201-1.1%200-1.2-1l.1-.5zm-6.7%2022.1a16%2016%200%200%200%203.7-1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-11-2.2-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.3-4.8h1.7a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6m-6-4.8q.6-.7%201.5%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5m-2.2-4.5-1.6-.3-.3-4.3%201.7-.6v2.5q0%201.4.2%202.7m1.4-5.3%201.7.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7zm5.6%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2zm-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2zm2.2-9.4%201.6.7%203-3.3-1-1.4zm-1.3-1-1-1.4%203-3.3%201.6.7zm18.1%209.9.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.5-.5a2.4%202.4%200%200%200%20.3-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3.1%202.6m6-4.8a1%201%200%200%200-1.5%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5m2.2-4.5%201.6-.3.3-4.3-1.7-.6v2.5q0%201.5-.2%202.8zm-1.4-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7zm-5.6%2013.7a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2zm.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2zm-2.2-9.4-1.6.7-2.9-3.3%201-1.4zm1.3-1%201-1.4-3-3.3-1.6.7zm-20.1-8.7.5%201.6h4.5l.5-1.6zm21.1%200-.5%201.6h-4.5l-.5-1.6zm-11.6%2021.9q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m1.9-7.8%201.7-.4v-4.3l-1.7-.5zm-1.6%200-1.7-.4v-4.3l1.7-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.5%20294.2q.4-1.5%201.8-2V287h1.6v5.3q1.3.5%201.7%201.6h4.4v.3h-6a1%201%200%200%200-1-.6q-.6%200-1%20.6zm12.2%200v-.3h4.1l.2-.3-5-5.7%201.2-1%205%205.6.2-.1V285h1.6v7.3h.3l4.9-5.5%201.2%201-4.9%205.5.3.6h4v.3zm21.6%200a1%201%200%200%201%201-.6q.7%200%201%20.6h1.6q-.4-1.5-1.8-2V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v.3zm-30.2-15%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.7%202.5%203%203%200%200%200%201.8%202.4v5.2h1.6v-5.2zm32%200v5.3h-1.7v-5.2l-.4-.2-6%206.8-1.3-1%206.2-6.9-.1-.3h-4.5V276h4.5a3%203%200%200%201%202.4-1.7%202.6%202.6%200%200%201%202.7%202.5%202.5%202.5%200%200%201-1.9%202.4zm-16.1%200v3.3h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4a3%203%200%200%201%202.5-1.7q2%20.1%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6m-17.8%204-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm30.6%200-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm-25.5.8%201.6-.7%202.9%203.3-1%201.4zm-1.3%201-1%201.4%203%203.3%201.6-.7zm18.5-1.1-1.6-.7-3%203.3%201%201.4zm1.2%201%201%201.4-3%203.3-1.5-.7zm-20.3%209%20.5-1.6h4.5l.5%201.6zm-6.7-17q0-1%201.2-1a1%201%200%200%201%201%201q0%201-1%201a1%201%200%200%201-1.2-1m12.1.8-.5%201.6H220l-.5-1.6zm0-1.6-.5-1.6H220l-.5%201.6zm15.7%2017.8-.5-1.6h-4.5l-.5%201.6zm4.4-17q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1.1%201a1%201%200%200%201-1.1-1m6.2.8.5%201.6h4.6l.5-1.6zm0-1.6.5-1.6h4.6l.5%201.6zm-5.9%205-1.7.5v4.3l1.7.5V281m1.7%200%201.6.5v4.3l-1.6.5z'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='M232.7%20316.3a16%2016%200%200%200%203.7-1.1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-4.7-20.4-.2-.5h-4V294h4l.2-.4-5-5.6%201.2-1%205%205.5h.2V285h1.7v7.3h.2l4.9-5.5%201.2%201-4.9%205.5.3.6h4v1.5h-4q0%20.3-.3.5l4.7%205.3-1.3%201-4.6-5.3-.2.1v8.7h-1.6V297l-.2-.1-4.8%205.3-1.2-1%204.7-5.3m-12.8-16.7%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.6%202.5%203%203%200%200%200%201.7%202.4v5.2h1.6v-5.2zm6.5%2034.8-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.2-4.8h1.6a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6zm-8.4-13.1V297a3%203%200%200%201-1.8-2.4q.2-1.6%201.8-2.4V287h1.6v5.3q1.3.4%201.7%201.6h4.4v1.5h-4.4a3%203%200%200%201-1.6%201.6v3.9h-1.7m2.3%208.3q.7-.7%201.6%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5zm-2-4.5-1.7-.3-.3-4.3%201.7-.6v2.5q0%201.4.3%202.7zm1.4-5.3%201.6.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7v-2.6zm5.5%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2l-1.2%201m-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2l.4-1.7'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m221.9%20305.1%201.6.7%203-3.3-1-1.4-3.6%204m-1.3-1-1-1.4%203-3.3%201.6.7-3.6%204m-7.6-9.5q.1-1%201-1%201.1.1%201.2%201-.1%201-1.1%201.1a1%201%200%200%201-1.1-1zm25.7%2019.4.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.6-.5a2.4%202.4%200%200%200%20.2-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3%202.6zm8.4-13.1V297a3%203%200%200%200%201.8-2.4q0-1.6-1.8-2.4V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v1.5h4.4q.5%201.2%201.7%201.6v3.9zm-2.3%208.3a1%201%200%200%200-1.6%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5zm2-4.5%201.7-.3.3-4.3-1.7-.6v2.5q0%201.4-.2%202.7zm-1.3-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7v-2.6m1.6-20.1v5.2h-1.6v-5.2l-.4-.2-6%206.8-1.2-1%206-7v-.2h-4.5V276h4.4a3%203%200%200%201%202.5-1.7%202.6%202.6%200%200%201%202.6%202.5%203%203%200%200%201-1.8%202.4zm-16%200v3.2h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4q.7-1.6%202.5-1.7c1.8-.1%202.2.7%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6zm8.8%2033.8a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2l1.2%201m.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2l-.4-1.7m-27.4-31.4-1.7.5v4.3l1.7.5v-5.2m1.7%200%201.6.4v4.3l-1.6.5V283m30.5%200-1.7.5v4.3l1.7.5V283'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m247.1%20283.1%201.7.5v4.3l-1.7.5V283m-8.6%2022-1.6.7-2.9-3.3%201-1.4%203.5%204m1.3-1%201-1.4-3-3.3-1.6.7%203.6%204m-18.2-20%201.6-.7%203%203.3-1%201.4-3.6-4m-1.3%201-1%201.4%203%203.3%201.6-.7-3.6-4m18.5-1.1-1.6-.7-3%203.3%201%201.4%203.6-4m1.2%201%201%201.4-3%203.2-1.5-.6%203.5-4m-20.3%209%20.5-1.6h4.5l.5%201.6h-5.5m0%201.5.5%201.6h4.5l.5-1.6h-5.5M213%20277q0-1%201.2-1%201%200%201%201c0%201-.4%201-1%201a1%201%200%200%201-1.2-1zm12.1.8-.5%201.6h-4.5l-.5-1.6h5.5m0-1.6-.5-1.6h-4.5l-.5%201.6h5.5m20.1%2018.5q.1-.9%201.1-1%201%20.1%201.1%201-.1%201-1%201.1a1%201%200%200%201-1.2-1zm-4.4-.7-.5-1.6h-4.5l-.5%201.6h5.5m0%201.5-.5%201.6h-4.5l-.5-1.6h5.5m-11.6%2021.9q.1-1%201.1-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.2-1zm1.9-7.8%201.7-.4v-4.3l-1.7-.5v5.2m-1.6%200-1.7-.4v-4.3l1.7-.5v5.2m15.7-32.6q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm6.2.8.5%201.6h4.6l.5-1.6h-5.5m0-1.6.4-1.6h4.6l.5%201.6h-5.5m-6%205-1.6.5v4.3l1.6.5V281m1.7%200%201.6.5v4.3l-1.6.5V281'/%3e%3cpath%20fill='%23058e6e'%20d='M227.7%20294.7a2.6%202.6%200%200%201%202.6-2.5%202.6%202.6%200%200%201%202.6%202.5%202.6%202.6%200%200%201-2.6%202.4c-1.4%200-2.6-1-2.6-2.4'/%3e%3cpath%20fill='%23db4446'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='%23ed72aa'%20stroke='%23000'%20stroke-width='.4'%20d='M238.1%20227.5v1.4c.2.6-.1%201.2%200%201.5q0%20.5.3.9l.2.9-.7-.5-.6-.4v1l.6%201.1%201%201.3c.2.5.1%201.4.1%201.4s-.4-.7-.8-.8l-1.2-.7s.7.8.7%201.5l-.3%201.6c-.1.2-.3-.7-.8-1.1l-1-.9s.4%201.2.4%202v2.3l-.9-1-1-.7c0-.2.5.6.6%201.1s.3%202.3%201.8%204.5c1%201.3%202.3%203.6%205.3%202.9s1.9-4.8%201.3-6.7a17%2017%200%200%201-1-4.6c0-.8.6-2.9.5-3.3a8%208%200%200%201%20.2-3.1l.9-2.3.4-1.3.1-1.3.7%201.3.1%201.5s.1-1%201-1.6%201.8-1.1%202-1.4l.3-.5c-.1%200%200%201.8-.6%202.6l-1.7%202s.7-.3%201.2-.3h.9s-.6.4-1.4%201.6c-.8%201-.5%201.2-1%202.1s-1%201-1.7%201.5c-1%20.8-.5%204.2-.4%204.7.2.5%202%204.5%202%205.5s.2%203.2-1.5%204.6c-1.1%201-3%201-3.4%201.2-.4.3-1.2%201.1-1.2%202.8s.6%202%201%202.4c.6.5%201.2.2%201.3.6l.5.7q.3.3.2.8c0%20.3-.8%201.1-1.1%201.7l-.8%202.4c0%20.2-.1%201%20.1%201.3%200%200%20.9%201%20.3%201.2-.4.2-.8-.2-1-.2l-.9.5q-.3-.1-.4-.8l-.1-.7q-.3%200-.4.5c0%20.2%200%20.8-.3.8l-.8-.5c-.2%200-.8-.2-.8-.4q.1-.6.7-1%20.8-.1.5-.5t-.7%200c-.3.4-.8%200-.7-.2v-.8c0-.2-.4-.5.1-.8s.8.2%201.4.1q.8%200%201-.6.3-.6-.2-1.4l-.9-.8-.3-.9v2.2l-.7-.8c-.3-.3-.6-1.3-.6-1.3v1.3l.2.8c-.1.1-.8-.7-1-.8l-1-1-.4-1.4v-1.5l.4-1h-1.4c-.7%200-1.2-.3-1.5.2q-.4.8.2%202.8.5%201.8.4%202.1l-.7.8h-.9l-1.2-.3h-1.3l-1.1-.3c-.3.1-.8.3-.6.7q.1.8-.5.7l-.9-.2q-.8%200-.8-.4t.4-.7q.3-.5%200-.5h-.6q-.3.4-.8.4-.3-.1-.4-1c-.1-.9-.7-1.2%200-1.1.5%200%201.3.4%201.4%200q.2-.4-.2-.7c-.4-.3-.8-.4-.3-.7l.7-.5c.1-.2.4-.8.7-.6.6.2%200%20.7.6%201.3s1%201%202%20.8q1.4%200%201.3-.5l-.1-1v-1s-.4.3-.5.6l-.4.8v-2l-.2-.8-.3.9-.1%201s-.7-.5-.5-1.5l.1-2c.2-.3.7-1.5%202-1.6h2.6l2-.3s-2.8-1.4-3.5-1.9a10%2010%200%200%201-2-2l-.6-1.6s-.5%200-1%20.3l-1.2%201-.7%201%20.1-1.2v-.8s-.4%201.2-1%201.7l-1.4%201v-.8l.2-1s-.4.8-1.1%201c-.7%200-1.8%200-1.9.4q.2.8%200%201.4c0%20.3-.4.5-.4.5l-.8-.4-.7.2c-.1.1-.3-.4-.2-.7s.7-.6.5-.8l-.8.2c-.3.1-.8.3-.8-.2q.2-.6%200-1%200-.4.2-.6l1.2-.1q0-.4-.8-.6-1-.2-.5-.8.3-.2.5-.6c.1-.2.2-.7.7-.5.5.3.4.8%201%201a4%204%200%200%200%202-.2l1.5-1%201.5-1-1-.8q-.5-.7-1-1l-1.8-.6-1.7-.5.8-.3q.4-.5.8-.6h.3-1.4c-.3-.1-1-.6-1.3-.6l-.8.1s.8-.4%201.4-.5l1-.1s-.9-.3-1.1-.6l-.6-1q-.2-.3-.6-.5l-1%20.3q-.6%200-.6-.6l-.1-.5c-.2-.3-.6-.8-.2-1h1.4q-.2-.4-.8-.8c-.4-.2-1-.5-.7-.8l.8-.5c.2-.3.3-1%20.7-.7.4.2.8%201.2%201.1%201.1s.3-.8.3-1c0-.4%200-1%20.2-.9l1%20.5q.8-.1%201%20.2%200%20.5-.6%201-.4.6-.3%201.4.4%201%201.2%201.4t1.7.9c.5.3%201.7%201.2%202.1%201.3l.8.4s.5-.2%201.1-.2%202.1%200%202.6-.2%201.3-.6%201-1c-.1-.6-1.3-1-1.2-1.4q0-.5%201.2-.4c.8%200%201.8.1%202-1q.5-1.4-.8-1.8c-1-.2-1.8-.2-2-1q-.4-1-.2-1.1.3-.3%201.4-.4%201.3%200%201.9-.2l.6-.9c.3-.2%201.4-.4%201.4-.4s1.4.7%202.7%201.7l2.2%202.1'/%3e%3cpath%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m237.3%20231.3-.4-.7-.3-.4'/%3e%3cpath%20fill='%23db4446'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='%23db4446'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='%23db4446'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20d='m228.2%20230.5.3-.5.3.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.2%20230.5.3-.5.3.5h-.7'/%3e%3cpath%20d='m229%20230.5.3-.5.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229%20230.5.3-.5.4.5h-.8'/%3e%3cpath%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20d='m229.5%20227.6.7.2-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229.5%20227.6.7.2-.5.4-.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20233.7s-.7.2-1%20.6q-.4.9-.3%201c.1.1.6-.5%201.5-.3l1.2.3%201.3-.3s-.7.8-.7%201.3l.2%201.1c0%20.7-.6%201.6-.6%201.6l1-.3%201.7-.8.9-1s-.2%201%200%201.4l.2%201.6.8-.6q.5-.2.9-.7l.3-1s0%20.8.4%201.3l.6%201.6s.3-.8.6-1.1l.7-1-.1-.9.4.8m-11%20.6s.5-.8%201-1l1.1-.8.9-.4m1%205%201.3-.8%201-1'/%3e%3cpath%20fill='%23db4446'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='%23db4446'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3zm16%201.3s2%201.2%201.9%202.2c0%201-1%202.3-1%202.3'/%3e%3cpath%20fill='%23db4446'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='%23db4446'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7z'/%3e%3cpath%20fill='%23db4446'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2z'/%3e%3cpath%20fill='%23db4446'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='%23db4446'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3z'/%3e%3cpath%20fill='%23ffd691'%20stroke='%23000'%20stroke-width='.5'%20d='M208.8%20316.4q3%201%203%203.8c0%202.3-2.2%204-5%204-3%200-5.3-1.7-5.3-4%200-1.7%201-3.6%203-3.8l-.2-.4-.7-.7h1.2l.8.5.5-.7.6-.5.6.6.3.5.7-.4.8-.3s0%20.4-.2.7l-.1.7'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20326.7s-3.8-2.6-5.5-3c-2-.4-4.5%200-5.5%200%200%200%201.2.8%201.8%201.4.5.5%202.3%201.5%203.3%201.8%203%20.8%206-.2%206-.2m1%20.2s2.4-2.5%205-2.9c3-.4%205%20.3%206.2.6l-1.5.8c-.5.3-2%201.5-4%201.6-2%200-4.4-.3-4.8-.2l-.9.1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.5'%20d='M206.7%20323.8a5%205%200%200%201%200-7.1%205%205%200%200%201%201.5%203.5%205%205%200%200%201-1.5%203.6'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M205.7%20329s.6-1.5.6-2.7l-.1-2.1h.8s.3%201.1.3%202l-.1%202.4-.7.1-.8.3'/%3e%3cpath%20fill='%23fff'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M231.7%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.6%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m0%203q.2-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1m-1%202.8q.1-.9%201-1%201%20.1%201.1%201%200%201-1%201a1%201%200%200%201-1-1m-1.9%202.6q.1-.9%201-1%201.1.1%201.2%201%200%201.2-1.1%201-1%200-1-1'/%3e%3cpath%20fill='%23fff'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M178.2%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m-.7%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m-.2%203q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.9%202.8q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1.1-1m1.8%202.6q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='%23fff'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M174.7%20228.9h-1v-1h-1.5v3.6h1.6v2.5h-3.4v7h1.8v14.3h-3.5v7.3h27.2v-7.3h-3.5V241h1.8v-7h-3.4v-2.5h1.6V228h-1.6v.9h-.8v-1h-1.6v1h-1.1v-1h-1.6v3.6h1.6v2.5H184v-7.8h1.7v-3.5H184v.9h-1v-1h-1.5v1h-.9v-1H179v3.6h1.7v7.8h-3.3v-2.5h1.6V228h-1.6v.9h-.9v-1h-1.8zm-6%2033.7H196m-27.3-1.8H196m-27.3-1.8H196m-27.3-1.7H196m-27.3-2H196m-23.8-1.6h20.2m-20.2-1.8h20.2m-20.2-2h20.2m-20.2-1.7h20.2m-20.2-1.8h20.2m-20.2-1.8h20.2m-20.2-1.7h20.2m-22-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-20.4-1.7h17m-10.2-1.8h3.4m-3.4-1.8h3.4m-3.4-1.8h3.4m-3.4-1.7h3.4m-5.1-2.2h6.8m-12%207.5h3.6m-5-2.2h6.6m-6.7%2032.6v-1.8m0-1.8v-1.7m-1.8%201.7v1.8m3.4%200V259m1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m-1.7%207.4v-2m-3.4%202v-2m7%200v2m1.5-2v-1.6m-5.1-1.8v1.8m3.5-1.8v1.8m3.3-1.8v1.8M179%20252v-2m1.7-1.7v1.7m0-5.3v1.8m-1.7-3.6v1.8m1.7-3.5v1.7m-3.3-1.7v1.7m-3.5-1.7v1.7m-1.6-3.5v1.8m3.3-1.8v1.8m3.4-1.8v1.8m1.7-3.6v1.8m-3.3-1.8v1.8m-3.5-1.8v1.8m-1.6-3.6v1.8m6.7-1.8v1.8m-3.4-5.3v1.8m15.3-1.8h-3.5m5-2.2h-6.6m6.7%2032.6v-1.8m0-1.8v-1.7m1.8%201.7v1.8m-3.4%200V259m-1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m1.7%207.4v-2m3.4%202v-2m-7%200v2m-1.5-2v-1.6m5.1-1.8v1.8m-3.5-1.8v1.8m-3.3-1.8v1.8m1.7-1.8v-2m-1.7-1.7v1.7m0-5.3v1.8m1.7-3.6v1.8m-1.7-3.5v1.7m3.3-1.7v1.7m3.5-1.7v1.7m1.6-3.5v1.8m-3.3-1.8v1.8m-3.4-1.8v1.8m-1.7-3.6v1.8m3.3-1.8v1.8m3.5-1.8v1.8m1.6-3.6v1.8m-6.7-1.8v1.8m3.4-5.3v1.8m-7%2018v-2m0-5.4v-1.8m0%205.4v-1.8m0-5.3v-1.8m0-1.8v-1.7m0-3.6v-1.8m0-1.7v-1.8m-8.3%204.6h3.5m3.3-5.3h3.4m3.3%205.3h3.5'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M186.8%20262.6v-4.7c0-.8-.4-3.5-4.6-3.5-4%200-4.4%202.7-4.4%203.5v4.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m179.3%20258.2-2.2-.3c0-.9.2-2.2.9-2.6l2%201.5c-.3.2-.7%201-.7%201.4zm6%200%202.2-.3c0-.9-.2-2.2-.9-2.6l-2%201.5c.3.2.7%201%20.7%201.4zm-2.2-2.3%201-2-2-.4-1.7.4%201.1%202zm-4.2-5.5v-4.9c0-1.3-1-2.4-2.5-2.4s-2.4%201-2.4%202.4v4.9zm6.8%200v-4.9c0-1.3%201-2.4%202.5-2.4s2.4%201%202.4%202.4v4.9zm-1.7-12%20.4-4.4h-4.2l.2%204.4zm3.3%200-.4-4.4h4.4l-.5%204.4zm-10%200%20.2-4.4h-4.2l.5%204.4z'/%3e%3cpath%20fill='%230039f0'%20d='M185.3%20262.6v-4c0-.7-.5-2.7-3.1-2.7-2.4%200-2.9%202-2.9%202.7v4zm-6.9-12.7v-4.2c0-1-.6-2.2-2-2.2s-2%201.1-2%202.2v4.3h4zm7.8%200v-4.2c0-1%20.7-2.2%202-2.2s2%201.1%202%202.2v4.3h-4z'/%3e%3cpath%20fill='%23ad1519'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5z'/%3e%3cpath%20fill='%23005bbf'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13z'/%3e%3cpath%20fill='%23c8b100'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2z'/%3e%3cpath%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2l-.3-.3'/%3e%3cpath%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1l-.3-.1'/%3e%3cpath%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2z'/%3e%3cpath%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2l.2.2'/%3e%3cpath%20d='M238.8%20227v-.3h-.3v.2h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M238.8%20227v-.3h-.3v.2h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7-.5.3'/%3e%3cpath%20fill='%23c8b100'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1v.5'/%3e%3cpath%20fill='%23c8b100'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='%23c8b100'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1v.4'/%3e%3cpath%20fill='%23c8b100'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4-.2-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7-.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8-.5.1'/%3e%3cpath%20fill='%23c8b100'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1-.6.1'/%3e%3cpath%20fill='%23c8b100'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2zm38-21.9v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20d='M134.4%20217.1v-1.2m-.4%201.2v-1.2m-.2%201.2v-1.2m-.3%201.2v-1.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M133.2%20217.1v-1.2m-.5%201.1v-1m.2%201v-1m-.7%201v-1m.2%201v-1m-.9%201v-1m.2%201v-1m.3%201v-1m-.7%201v-1m-.3.9v-.8m-.1.8v-.8m-.5.7v-.6m.2.6v-.6m-.4.5v-.5m-.2.5v-.4m-.3.3v-.3m-.3.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M129.2%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M135.7%20217v-1m-.5%201v-1m-.4%201.2V216m143%201.1V216m-.4%201.1V216m-.3%201.1V216m-.3%201.2V216'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M276.6%20217.1V216m-.6%201v-1m.3%201v-1m-.8%201v-1m.3%201v-1m-.9%201v-1m.2%201v-1m.2%201v-1m-.6%201v-1m-.3.9v-.8m-.2.8v-.8m-.4.7v-.6m.2.6v-.6m-.5.6v-.6m-.2.5v-.4m-.3.4v-.4m-.2.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M272.6%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M279.1%20217v-1m-.6%201v-1m-.4%201.1V216'/%3e%3c/svg%3e"; const flagPH = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ph'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230038a8'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M415.7%20240%200%20480V0'/%3e%3cpath%20fill='%23fcd116'%20d='M26.7%2042.4%2041%2055l16.6-9.2-7.4%2017.5%2014%2013-19-1.6-8.1%2017.2-4.3-18.5L14%2071l16.3-10zm323.8%20172.3.4%2019%2018%206.3-18%206.2-.4%2019-11.5-15.1-18.2%205.5%2010.8-15.6-10.8-15.6%2018.2%205.5zM37.2%20388.1l8%2017.2%2019-1.6-13.9%2013%207.4%2017.5-16.6-9.1-14.4%2012.4%203.6-18.7L14%20409l18.9-2.4zm114.2-249-6.2%206.2%203.1%2047-3%20.3-5.7-42.9-5.1%205%207.6%2038.4a48%2048%200%200%200-17.2%207.1l-21.7-32.4H96l26.4%2034.3-2.4%202-31.1-35.5h-8.8v8.8l35.4%2031-2%202.5-34.3-26.3v7.1l32.5%2021.7q-5.2%207.8-7.1%2017.2L66.3%20223l-5.1%205%2042.9%205.7q-.3%201.6-.3%203.1l-47-3-6.2%206.2%206.2%206.2%2047-3.1.3%203.1-42.9%205.7%205%205%2038.4-7.6a48%2048%200%200%200%207.1%2017.2l-32.5%2021.7v7.2l34.3-26.3%202%202.4-35.4%2031v8.8H89l31-35.4%202.5%202L96%20312.2h7.2l21.7-32.5q7.8%205.2%2017.2%207.1l-7.6%2038.4%205%205%205.7-42.9q1.5.3%203.1.3l-3%2047%206.1%206.2%206.3-6.2-3.1-47%203-.3%205.7%2043%205.1-5.1-7.6-38.4a48%2048%200%200%200%2017.2-7.1l21.7%2032.5h7.2l-26.4-34.3%202.4-2%2031.1%2035.4h8.8v-8.8l-35.4-31%202-2.4%2034.3%2026.3v-7.2l-32.5-21.7q5.2-7.8%207.1-17.2l38.3%207.6%205.1-5-42.9-5.7q.3-1.5.3-3.1l47%203%206.2-6.1-6.2-6.2-47%203-.3-3%2042.9-5.7-5-5-38.4%207.5a48%2048%200%200%200-7.1-17.2l32.5-21.7v-7.1l-34.3%2026.3-2-2.4%2035.4-31v-8.9H214l-31%2035.5-2.5-2%2026.4-34.3h-7.2L178%20200.2q-7.8-5.2-17.2-7.1l7.6-38.3-5-5-5.7%2042.8-3.1-.3%203-47z'/%3e%3c/svg%3e"; const flagID = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-id'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70011'%20d='M0%200h640v240H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0Z'/%3e%3c/svg%3e"; const flagIT = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-it'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009246'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ce2b37'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e"; const flagNL = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%2321468b'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e"; const flagTH = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-th'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f5f8'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%232d2a4a'%20d='M0%20162.5h640v160H0z'/%3e%3cpath%20fill='%23a51931'%20d='M0%200h640v82.5H0zm0%20400h640v80H0z'/%3e%3c/g%3e%3c/svg%3e"; const flagTR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23e30a17'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M407%20247.5c0%2066.2-54.6%20119.9-122%20119.9s-122-53.7-122-120%2054.6-119.8%20122-119.8%20122%2053.7%20122%20119.9'/%3e%3cpath%20fill='%23e30a17'%20d='M413%20247.5c0%2053-43.6%2095.9-97.5%2095.9s-97.6-43-97.6-96%2043.7-95.8%2097.6-95.8%2097.6%2042.9%2097.6%2095.9z'/%3e%3cpath%20fill='%23fff'%20d='m430.7%20191.5-1%2044.3-41.3%2011.2%2040.8%2014.5-1%2040.7%2026.5-31.8%2040.2%2014-23.2-34.1%2028.3-33.9-43.5%2012-25.8-37z'/%3e%3c/g%3e%3c/svg%3e"; const flagVN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23vn-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23da251d'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23ff0'%20d='M349.6%20381%20260%20314.3l-89%2067.3L204%20272l-89-67.7%20110.1-1%2034.2-109.4L294%20203l110.1.1-88.5%2068.4%2033.9%20109.6z'/%3e%3c/g%3e%3c/svg%3e"; const FLAG_MAP = { en: flagUS, "zh-Hans": flagCN, ar: flagSA, ja: flagJP, ko: flagKR, fr: flagFR, de: flagDE, hi: flagIN, pt: flagPT, ru: flagRU, es: flagES, fil: flagPH, id: flagID, it: flagIT, nl: flagNL, th: flagTH, tr: flagTR, vi: flagVN }; function LanguageSelector({ dropdownClasses = "", btnClasses = "btn-ghost", contentClasses = "mt-16" }) { const { t, i18n } = useTranslation(); const currentLang = signals.useSignal(appOptionsManager.get("language") || i18n.language || "en"); hooks.useEffect(() => { const onLng = (lng) => { currentLang.value = lng || appOptionsManager.get("language") || "en"; }; i18n.on("languageChanged", onLng); const unsub = appOptionsManager.signal.subscribe(() => { const optLng = appOptionsManager.get("language"); if (optLng && optLng !== currentLang.value) currentLang.value = optLng; }); return () => { try { i18n.off("languageChanged", onLng); } catch { } try { unsub?.(); } catch { } }; }, []); const setLanguage = (code) => { playClickSound(); currentLang.value = code; appOptionsManager.set("language", code); i18n.changeLanguage(code); }; const currentLabel = LANGUAGES_CONFIG[currentLang.value]?.nameEn || currentLang.value; const currentFlag = FLAG_MAP[currentLang.value] || flagUS; return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [ u( "div", { tabIndex: 0, role: "button", class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses), "aria-label": t("Change Language"), children: [ u("div", { class: "w-5 flex items-center justify-center", children: u("img", { src: currentFlag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }) }), u("div", { class: "w-24 truncate text-xs text-left", children: currentLabel }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: cx( "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", contentClasses ), children: u("ul", { class: "menu w-64", children: [ u("li", { class: "menu-title text-xs", children: t("Change Language") }), Object.entries(LANGUAGES_CONFIG).map(([langTag, langConf]) => u("li", { children: u( "button", { class: cx("gap-3 px-2", currentLang.value === langTag && "[&_svg]:visible"), onClick: () => setLanguage(langTag), children: [ u("img", { src: FLAG_MAP[langTag] || flagUS, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }), u("div", { class: "flex-1 min-w-0 truncate", children: langConf.nameEn }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, langTag)) ] }) } ) ] }); } function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var localizedFormat$2 = { exports: {} }; var localizedFormat$1 = localizedFormat$2.exports; var hasRequiredLocalizedFormat; function requireLocalizedFormat() { if (hasRequiredLocalizedFormat) return localizedFormat$2.exports; hasRequiredLocalizedFormat = 1; (function(module, exports$1) { !(function(e, t) { module.exports = t(); })(localizedFormat$1, (function() { var e = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }; return function(t, o, n) { var r = o.prototype, i = r.format; n.en.formats = e, r.format = function(t2) { void 0 === t2 && (t2 = "YYYY-MM-DDTHH:mm:ssZ"); var o2 = this.$locale().formats, n2 = (function(t3, o3) { return t3.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t4, n3, r2) { var i2 = r2 && r2.toUpperCase(); return n3 || o3[r2] || e[r2] || o3[i2].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e2, t5, o4) { return t5 || o4.slice(1); })); })); })(t2, void 0 === o2 ? {} : o2); return i.call(this, n2); }; }; })); })(localizedFormat$2); return localizedFormat$2.exports; } var localizedFormatExports = requireLocalizedFormat(); const localizedFormat = getDefaultExportFromCjs(localizedFormatExports); dayjs.extend(localizedFormat); function GlobalSettingsModal({ isOpen, onClose }) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const showResetConfirm = signals.useSignal(false); const now = dayjs(); const dateExamples = [ { token: "YYYY-MM-DD", value: now.format("YYYY-MM-DD"), localized: false }, { token: "DD/MM/YYYY", value: now.format("DD/MM/YYYY"), localized: false }, { token: "MMM DD, YYYY", value: now.format("MMM DD, YYYY"), localized: false }, { token: "L", value: now.format("L"), localized: true }, { token: "LL", value: now.format("LL"), localized: true } ]; const timeExamples = [ { token: "HH:mm:ss", value: now.format("HH:mm:ss"), localized: false }, { token: "hh:mm A", value: now.format("hh:mm A"), localized: false }, { token: "LT", value: now.format("LT"), localized: true }, { token: "LTS", value: now.format("LTS"), localized: true } ]; const combinedExamples = [ { token: "YYYY-MM-DD HH:mm:ss Z", value: now.format("YYYY-MM-DD HH:mm:ss Z"), localized: false }, { token: "MMM DD, YYYY [at] hh:mm A", value: now.format("MMM DD, YYYY [at] hh:mm A"), localized: false }, { token: "LLL", value: now.format("LLL"), localized: true } ]; return u( Modal, { show: isOpen, onClose, title: t("Global Settings"), actions: u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: () => showResetConfirm.value = true, children: u(IconRestore, { size: 16 }) } ), children: [ u("div", { class: "space-y-4", children: [ u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Theme") }), u( ThemeSelector, { dropdownClasses: "", btnClasses: "btn-sm", contentClasses: "mt-2" } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Language") }), u( LanguageSelector, { dropdownClasses: "", btnClasses: "btn-sm", contentClasses: "mt-2" } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Font Family") }), u( "select", { class: "select select-bordered select-sm w-40", value: String(appOptionsManager.get("fontFamily") ?? "system"), onChange: (e) => { playClickSound(); const font = e.target.value; appOptionsManager.set("fontFamily", font); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { if (font === "system") { shadowRoot.host.removeAttribute("data-font"); } else { shadowRoot.host.setAttribute("data-font", font); } } }, children: [ u("option", { value: "system", children: t("System Default") }), u("option", { value: "Lato", children: "Lato" }), u("option", { value: "Montserrat", children: "Montserrat" }), u("option", { value: "Noto Sans", children: "Noto Sans" }), u("option", { value: "Open Sans", children: "Open Sans" }), u("option", { value: "Raleway", children: "Raleway" }) ] } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("div", { class: "flex items-center", children: u("span", { class: "text-sm", children: t("Date Time Format") }) }), u( "input", { type: "text", class: "input input-bordered input-sm w-52", value: appOptionsManager.get("dateTimeFormat"), onChange: (e) => { appOptionsManager.set("dateTimeFormat", e.target?.value); } } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Sound Effects") }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("soundEffects", true), onChange: (e) => { const checked = e.target?.checked; appOptionsManager.set("soundEffects", checked); if (checked) { playToggleOnSound(); } } } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Debug") }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("debug"), onChange: (e) => { const checked = e.target?.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("debug", checked); } } ) ] }), u("div", { class: `mt-1 rounded-box bg-base-200 p-2 text-xs relative ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [ u("div", { class: "font-semibold mb-2", children: t("Common Formats:") }), u( "a", { href: "https://day.js.org/docs/en/display/format", target: "_blank", rel: "noopener noreferrer", class: `absolute ${isArabic ? "left-2" : "right-2"} top-2 cursor-pointer opacity-70 hover:opacity-100`, children: u(IconBook, { size: 14 }) } ), u("div", { class: "grid gap-3 sm:grid-cols-2", children: [ u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Date Formats:") }), u("ul", { class: "space-y-1.5", children: dateExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }), u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Time Formats:") }), u("ul", { class: "space-y-1.5", children: timeExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }) ] }), u("div", { class: "divider my-2" }), u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Combined Examples:") }), u("ul", { class: "space-y-1.5", children: combinedExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { class: "break-all", dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }) ] }) ] }), u("div", { class: `rounded-box bg-base-200 p-2 text-xs mt-3 flex items-center justify-between ${isArabic ? "flex-row-reverse" : ""}`, children: [ u("div", { children: [ u("span", { class: "font-semibold", children: [ t("Version"), ":" ] }), " ", u("span", { class: "opacity-80", children: pkg.version }) ] }), u("div", { class: `flex items-center gap-4 ${isArabic ? "flex-row-reverse" : ""}`, children: [ typeof GM_info !== "undefined" && GM_info?.scriptHandler ? u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://chromewebstore.google.com/detail/aboccmnimgpjehlplnanplbhlccohhhn", target: "_blank", rel: "noopener noreferrer", children: [ u(IconBrandChrome, { size: 14 }), " ", t("Chrome") ] } ) : u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://greasyfork.org/en/scripts/551198", target: "_blank", rel: "noopener noreferrer", children: [ u(IconFileTypeJs, { size: 14 }), " ", t("Userscript") ] } ), u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://status.exyezed.cc", target: "_blank", rel: "noopener noreferrer", children: [ u(IconServer, { size: 14 }), " ", t("Status") ] } ), u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://exyezed.cc", target: "_blank", rel: "noopener noreferrer", children: [ u(IconHome, { size: 14 }), " ", t("Home") ] } ), u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://patreon.com/exyezed", target: "_blank", rel: "noopener noreferrer", children: [ u(IconBrandPatreon, { size: 14 }), " ", t("Patreon") ] } ) ] }) ] }), u(Modal, { show: showResetConfirm.value, onClose: () => showResetConfirm.value = false, title: t("Reset Settings"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to reset settings to defaults?") }), u("div", { class: "modal-action", children: [ u("button", { class: "btn btn-sm btn-ghost", onClick: () => showResetConfirm.value = false, children: t("Cancel") }), u( "button", { class: "btn btn-sm btn-warning", onClick: () => { appOptionsManager.set("theme", "light"); appOptionsManager.set("language", "en"); appOptionsManager.set("soundEffects", true); appOptionsManager.set("debug", false); appOptionsManager.set("dateTimeFormat", "YYYY-MM-DD HH:mm:ss Z"); appOptionsManager.set("fontFamily", "system"); appOptionsManager.set("apiServer", "oregon"); appOptionsManager.set("fetchMode", "single"); appOptionsManager.set("batchSize", 100); appOptionsManager.set("startingBatch", 0); appOptionsManager.set("timelineType", "timeline"); appOptionsManager.set("mediaType", "all"); appOptionsManager.set("convertAnimatedGifs", false); appOptionsManager.set("convertGifsExternal", false); appOptionsManager.set("downloadConcurrency", 1); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { shadowRoot.host.removeAttribute("data-font"); } i18n.changeLanguage("en"); showResetConfirm.value = false; }, children: u("span", { class: "flex items-center gap-2", children: [ u(IconRestore, { size: 16 }), t("Reset") ] }) } ) ] }) ] }) }) ] } ); } function MediaDownloaderModal({ isOpen, onClose }) { const { t } = useTranslation(); const activeTab = signals.useSignal("dashboard"); const showGlobalSettings = signals.useSignal(false); const loadFromDatabaseAccount = signals.useSignal(null); hooks.useEffect(() => { (async () => { try { const n = await mediaDownloaderDB.getAccountsCount(); dbState.totalAccounts.value = n; } catch { } })(); }, []); if (!isOpen) return null; const tabs = [ { id: "dashboard", label: t("Dashboard") }, { id: "auth", label: t("Auth") }, { id: "settings", label: t("Settings") }, { id: "database", label: t("Database") } ]; return u("div", { class: "modal modal-open", children: [ u("div", { class: "modal-box transition-all duration-300 ease-in-out", children: [ u("div", { class: "flex items-center justify-between mb-4", children: [ u(Title, {}), u("div", { class: "flex items-center gap-2", children: [ u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: () => showGlobalSettings.value = true, children: u(IconSettings, { size: 18 }) } ), u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: onClose, children: u(IconX, { size: 18 }) } ) ] }) ] }), u("div", { role: "tablist", class: "tabs tabs-lift mb-4", children: tabs.map((tab) => { const isActive = activeTab.value === tab.id; const isDatabase = tab.id === "database"; const cls = `tab ${isActive ? "tab-active" : ""} ${isDatabase ? "relative" : ""}`; return u( "a", { role: "tab", class: cls, onClick: () => { if (activeTab.value !== tab.id) { playTabClickSound(); activeTab.value = tab.id; } }, children: [ tab.label, isDatabase && dbState.totalAccounts.value > 0 && u("span", { class: "badge badge-accent badge-sm absolute -top-2 -right-2", children: dbState.totalAccounts.value }) ] }, tab.id ); }) }), u("div", { class: "flex-1 transition-[height,max-height] duration-300 ease-in-out", children: [ u("div", { class: activeTab.value === "dashboard" ? "block" : "hidden", children: u( Dashboard, { loadFromDatabaseAccount } ) }), u("div", { class: activeTab.value === "database" ? "block" : "hidden", children: u( Database, { isVisible: activeTab.value === "database", onLoadToDashboard: (accountInfo) => { loadFromDatabaseAccount.value = accountInfo; playTabClickSound(); activeTab.value = "dashboard"; } } ) }), u("div", { class: activeTab.value === "auth" ? "block" : "hidden", children: u(Auth, {}) }), u("div", { class: activeTab.value === "settings" ? "block" : "hidden", children: u(Settings, {}) }) ] }) ] }), u("div", { class: "modal-backdrop", onClick: onClose }), u( GlobalSettingsModal, { isOpen: showGlobalSettings.value, onClose: () => showGlobalSettings.value = false } ) ] }); } function MediaDownloaderApp() { useTranslation(); const currentTheme = signals.useSignal(appOptionsManager.get("theme")); const showMediaDownloader = signals.useSignal(false); const toggleMediaDownloader = () => { showMediaDownloader.value = !showMediaDownloader.value; }; hooks.useEffect(() => { const font = String(appOptionsManager.get("fontFamily") ?? "system"); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { if (font !== "system") { shadowRoot.host.setAttribute("data-font", font); } else { shadowRoot.host.removeAttribute("data-font"); } } }, []); appOptionsManager.signal.subscribe(() => { currentTheme.value = appOptionsManager.get("theme"); }); return u(preact.Fragment, { children: [ u("style", { children: ` @keyframes sparkle { 0%, 100% { filter: drop-shadow(0 0 8px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 16px rgba(29, 155, 240, 0.6)); } 50% { filter: drop-shadow(0 0 12px rgba(29, 155, 240, 1)) drop-shadow(0 0 20px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 28px rgba(29, 155, 240, 0.6)); } } .sparkle-icon { animation: sparkle 2s ease-in-out infinite; } ` }), u( "div", { onClick: toggleMediaDownloader, class: `sparkle-icon fixed top-[50%] left-[-15px] cursor-pointer transition-all duration-300 z-50 ${showMediaDownloader.value ? "translate-x-[15px] rotate-15" : ""} hover:translate-x-[15px] hover:rotate-15`, children: [ u(IconBrandTwitter, { size: 48, "stroke-width": 1.25, class: "text-white" }), dashboardState.isDownloading.value && !showMediaDownloader.value && u("div", { class: "absolute -bottom-1 -right-1 flex items-center justify-center", children: u( "div", { class: "radial-progress text-info bg-base-100", style: `--value:${dashboardState.downloadProgress.value}; --size:2rem; --thickness:4px;`, role: "progressbar", "aria-valuenow": Math.round(dashboardState.downloadProgress.value), children: u("span", { class: "text-[10px] font-bold", children: Math.round(dashboardState.downloadProgress.value) }) } ) }) ] } ), u("div", { "data-theme": currentTheme.value, children: [ u(ErrorBoundary, { children: u( MediaDownloaderModal, { isOpen: showMediaDownloader.value, onClose: () => showMediaDownloader.value = false } ) }), u("div", { id: "tmd-portal-root" }) ] }) ] }); } const styles = `@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=cupcake]:checked),[data-theme=cupcake]{color-scheme:light;--color-base-100:oklch(97.788% .004 56.375);--color-base-200:oklch(93.982% .007 61.449);--color-base-300:oklch(91.586% .006 53.44);--color-base-content:oklch(23.574% .066 313.189);--color-primary:oklch(85% .138 181.071);--color-primary-content:oklch(43% .078 188.216);--color-secondary:oklch(89% .061 343.231);--color-secondary-content:oklch(45% .187 3.815);--color-accent:oklch(90% .076 70.697);--color-accent-content:oklch(47% .157 37.304);--color-neutral:oklch(27% .006 286.033);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(68% .169 237.323);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(69% .17 162.48);--color-success-content:oklch(26% .051 172.552);--color-warning:oklch(79% .184 86.047);--color-warning-content:oklch(28% .066 53.813);--color-error:oklch(64% .246 16.439);--color-error-content:oklch(27% .105 12.094);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root:has(input.theme-controller[value=bumblebee]:checked),[data-theme=bumblebee]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(85% .199 91.936);--color-primary-content:oklch(42% .095 57.708);--color-secondary:oklch(75% .183 55.934);--color-secondary-content:oklch(40% .123 38.172);--color-accent:oklch(0% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(37% .01 67.558);--color-neutral-content:oklch(92% .003 48.717);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(39% .09 240.876);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(35.519% .032 262.988);--color-primary:oklch(76.662% .135 153.45);--color-primary-content:oklch(33.387% .04 162.24);--color-secondary:oklch(61.302% .202 261.294);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(72.772% .149 33.2);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(35.519% .032 262.988);--color-neutral-content:oklch(98.462% .001 247.838);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=corporate]:checked),[data-theme=corporate]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(22.389% .031 278.072);--color-primary:oklch(58% .158 241.966);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(60% .118 184.704);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(60% .126 221.723);--color-info-content:oklch(100% 0 0);--color-success:oklch(62% .194 149.214);--color-success-content:oklch(100% 0 0);--color-warning:oklch(85% .199 91.936);--color-warning-content:oklch(0% 0 0);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(0% 0 0);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=synthwave]:checked),[data-theme=synthwave]{color-scheme:dark;--color-base-100:oklch(15% .09 281.288);--color-base-200:oklch(20% .09 281.288);--color-base-300:oklch(25% .09 281.288);--color-base-content:oklch(78% .115 274.713);--color-primary:oklch(71% .202 349.761);--color-primary-content:oklch(28% .109 3.907);--color-secondary:oklch(82% .111 230.318);--color-secondary-content:oklch(29% .066 243.157);--color-accent:oklch(75% .183 55.934);--color-accent-content:oklch(26% .079 36.259);--color-neutral:oklch(45% .24 277.023);--color-neutral-content:oklch(87% .065 274.039);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(77% .152 181.912);--color-success-content:oklch(27% .046 192.524);--color-warning:oklch(90% .182 98.111);--color-warning-content:oklch(42% .095 57.708);--color-error:oklch(73.7% .121 32.639);--color-error-content:oklch(23.501% .096 290.329);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=retro]:checked),[data-theme=retro]{color-scheme:light;--color-base-100:oklch(91.637% .034 90.515);--color-base-200:oklch(88.272% .049 91.774);--color-base-300:oklch(84.133% .065 90.856);--color-base-content:oklch(41% .112 45.904);--color-primary:oklch(80% .114 19.571);--color-primary-content:oklch(39% .141 25.723);--color-secondary:oklch(92% .084 155.995);--color-secondary-content:oklch(44% .119 151.328);--color-accent:oklch(68% .162 75.834);--color-accent-content:oklch(41% .112 45.904);--color-neutral:oklch(44% .011 73.639);--color-neutral-content:oklch(86% .005 56.366);--color-info:oklch(58% .158 241.966);--color-info-content:oklch(96% .059 95.617);--color-success:oklch(51% .096 186.391);--color-success-content:oklch(96% .059 95.617);--color-warning:oklch(64% .222 41.116);--color-warning-content:oklch(96% .059 95.617);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(40% .123 38.172);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cyberpunk]:checked),[data-theme=cyberpunk]{color-scheme:light;--color-base-100:oklch(94.51% .179 104.32);--color-base-200:oklch(91.51% .179 104.32);--color-base-300:oklch(85.51% .179 104.32);--color-base-content:oklch(0% 0 0);--color-primary:oklch(74.22% .209 6.35);--color-primary-content:oklch(14.844% .041 6.35);--color-secondary:oklch(83.33% .184 204.72);--color-secondary-content:oklch(16.666% .036 204.72);--color-accent:oklch(71.86% .217 310.43);--color-accent-content:oklch(14.372% .043 310.43);--color-neutral:oklch(23.04% .065 269.31);--color-neutral-content:oklch(94.51% .179 104.32);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=valentine]:checked),[data-theme=valentine]{color-scheme:light;--color-base-100:oklch(97% .014 343.198);--color-base-200:oklch(94% .028 342.258);--color-base-300:oklch(89% .061 343.231);--color-base-content:oklch(52% .223 3.958);--color-primary:oklch(65% .241 354.308);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(62% .265 303.9);--color-secondary-content:oklch(97% .014 308.299);--color-accent:oklch(82% .111 230.318);--color-accent-content:oklch(39% .09 240.876);--color-neutral:oklch(40% .153 2.432);--color-neutral-content:oklch(89% .061 343.231);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(44% .11 240.79);--color-success:oklch(84% .143 164.978);--color-success-content:oklch(43% .095 166.913);--color-warning:oklch(75% .183 55.934);--color-warning-content:oklch(26% .079 36.259);--color-error:oklch(63% .237 25.331);--color-error-content:oklch(97% .013 17.38);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=halloween]:checked),[data-theme=halloween]{color-scheme:dark;--color-base-100:oklch(21% .006 56.043);--color-base-200:oklch(14% .004 49.25);--color-base-300:oklch(0% 0 0);--color-base-content:oklch(84.955% 0 0);--color-primary:oklch(77.48% .204 60.62);--color-primary-content:oklch(19.693% .004 196.779);--color-secondary:oklch(45.98% .248 305.03);--color-secondary-content:oklch(89.196% .049 305.03);--color-accent:oklch(64.8% .223 136.073);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(24.371% .046 65.681);--color-neutral-content:oklch(84.874% .009 65.681);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(13.316% .031 58.318);--color-error:oklch(65.72% .199 27.33);--color-error-content:oklch(13.144% .039 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=garden]:checked),[data-theme=garden]{color-scheme:light;--color-base-100:oklch(92.951% .002 17.197);--color-base-200:oklch(86.445% .002 17.197);--color-base-300:oklch(79.938% .001 17.197);--color-base-content:oklch(16.961% .001 17.32);--color-primary:oklch(62.45% .278 3.836);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(48.495% .11 355.095);--color-secondary-content:oklch(89.699% .022 355.095);--color-accent:oklch(56.273% .054 154.39);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(24.155% .049 89.07);--color-neutral-content:oklch(92.951% .002 17.197);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=forest]:checked),[data-theme=forest]{color-scheme:dark;--color-base-100:oklch(20.84% .008 17.911);--color-base-200:oklch(18.522% .007 17.911);--color-base-300:oklch(16.203% .007 17.911);--color-base-content:oklch(83.768% .001 17.911);--color-primary:oklch(68.628% .185 148.958);--color-primary-content:oklch(0% 0 0);--color-secondary:oklch(69.776% .135 168.327);--color-secondary-content:oklch(13.955% .027 168.327);--color-accent:oklch(70.628% .119 185.713);--color-accent-content:oklch(14.125% .023 185.713);--color-neutral:oklch(30.698% .039 171.364);--color-neutral-content:oklch(86.139% .007 171.364);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=aqua]:checked),[data-theme=aqua]{color-scheme:dark;--color-base-100:oklch(37% .146 265.522);--color-base-200:oklch(28% .091 267.935);--color-base-300:oklch(22% .091 267.935);--color-base-content:oklch(90% .058 230.902);--color-primary:oklch(85.661% .144 198.645);--color-primary-content:oklch(40.124% .068 197.603);--color-secondary:oklch(60.682% .108 309.782);--color-secondary-content:oklch(96% .016 293.756);--color-accent:oklch(93.426% .102 94.555);--color-accent-content:oklch(18.685% .02 94.555);--color-neutral:oklch(27% .146 265.522);--color-neutral-content:oklch(80% .146 265.522);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(27% .077 45.635);--color-error:oklch(73.95% .19 27.33);--color-error-content:oklch(14.79% .038 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lofi]:checked),[data-theme=lofi]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(15.906% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(21.455% .001 17.278);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(26.861% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(79.54% .103 205.9);--color-info-content:oklch(15.908% .02 205.9);--color-success:oklch(90.13% .153 164.14);--color-success-content:oklch(18.026% .03 164.14);--color-warning:oklch(88.37% .135 79.94);--color-warning-content:oklch(17.674% .027 79.94);--color-error:oklch(78.66% .15 28.47);--color-error-content:oklch(15.732% .03 28.47);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=pastel]:checked),[data-theme=pastel]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98.462% .001 247.838);--color-base-300:oklch(92.462% .001 247.838);--color-base-content:oklch(20% 0 0);--color-primary:oklch(90% .063 306.703);--color-primary-content:oklch(49% .265 301.924);--color-secondary:oklch(89% .058 10.001);--color-secondary-content:oklch(51% .222 16.935);--color-accent:oklch(90% .093 164.15);--color-accent-content:oklch(50% .118 165.612);--color-neutral:oklch(55% .046 257.417);--color-neutral-content:oklch(92% .013 255.508);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(52% .105 223.128);--color-success:oklch(87% .15 154.449);--color-success-content:oklch(52% .154 150.069);--color-warning:oklch(83% .128 66.29);--color-warning-content:oklch(55% .195 38.402);--color-error:oklch(80% .114 19.571);--color-error-content:oklch(50% .213 27.518);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:0;--noise:0}:root:has(input.theme-controller[value=fantasy]:checked),[data-theme=fantasy]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(27.807% .029 256.847);--color-primary:oklch(37.45% .189 325.02);--color-primary-content:oklch(87.49% .037 325.02);--color-secondary:oklch(53.92% .162 241.36);--color-secondary-content:oklch(90.784% .032 241.36);--color-accent:oklch(75.98% .204 56.72);--color-accent-content:oklch(15.196% .04 56.72);--color-neutral:oklch(27.807% .029 256.847);--color-neutral-content:oklch(85.561% .005 256.847);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=wireframe]:checked),[data-theme=wireframe]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(87% 0 0);--color-primary-content:oklch(26% 0 0);--color-secondary:oklch(87% 0 0);--color-secondary-content:oklch(26% 0 0);--color-accent:oklch(87% 0 0);--color-accent-content:oklch(26% 0 0);--color-neutral:oklch(87% 0 0);--color-neutral-content:oklch(26% 0 0);--color-info:oklch(44% .11 240.79);--color-info-content:oklch(90% .058 230.902);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .093 164.15);--color-warning:oklch(47% .137 46.201);--color-warning-content:oklch(92% .12 95.746);--color-error:oklch(44% .177 26.899);--color-error-content:oklch(88% .062 18.334);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=black]:checked),[data-theme=black]{color-scheme:dark;--color-base-100:oklch(0% 0 0);--color-base-200:oklch(19% 0 0);--color-base-300:oklch(22% 0 0);--color-base-content:oklch(87.609% 0 0);--color-primary:oklch(35% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(35% 0 0);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(35% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(35% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(45.201% .313 264.052);--color-info-content:oklch(89.04% .062 264.052);--color-success:oklch(51.975% .176 142.495);--color-success-content:oklch(90.395% .035 142.495);--color-warning:oklch(96.798% .211 109.769);--color-warning-content:oklch(19.359% .042 109.769);--color-error:oklch(62.795% .257 29.233);--color-error-content:oklch(12.559% .051 29.233);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=luxury]:checked),[data-theme=luxury]{color-scheme:dark;--color-base-100:oklch(14.076% .004 285.822);--color-base-200:oklch(20.219% .004 308.229);--color-base-300:oklch(23.219% .004 308.229);--color-base-content:oklch(75.687% .123 76.89);--color-primary:oklch(100% 0 0);--color-primary-content:oklch(20% 0 0);--color-secondary:oklch(27.581% .064 261.069);--color-secondary-content:oklch(85.516% .012 261.069);--color-accent:oklch(36.674% .051 338.825);--color-accent-content:oklch(87.334% .01 338.825);--color-neutral:oklch(24.27% .057 59.825);--color-neutral-content:oklch(93.203% .089 90.861);--color-info:oklch(79.061% .121 237.133);--color-info-content:oklch(15.812% .024 237.133);--color-success:oklch(78.119% .192 132.154);--color-success-content:oklch(15.623% .038 132.154);--color-warning:oklch(86.127% .136 102.891);--color-warning-content:oklch(17.225% .027 102.891);--color-error:oklch(71.753% .176 22.568);--color-error-content:oklch(14.35% .035 22.568);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dracula]:checked),[data-theme=dracula]{color-scheme:dark;--color-base-100:oklch(28.822% .022 277.508);--color-base-200:oklch(26.805% .02 277.508);--color-base-300:oklch(24.787% .019 277.508);--color-base-content:oklch(97.747% .007 106.545);--color-primary:oklch(75.461% .183 346.812);--color-primary-content:oklch(15.092% .036 346.812);--color-secondary:oklch(74.202% .148 301.883);--color-secondary-content:oklch(14.84% .029 301.883);--color-accent:oklch(83.392% .124 66.558);--color-accent-content:oklch(16.678% .024 66.558);--color-neutral:oklch(39.445% .032 275.524);--color-neutral-content:oklch(87.889% .006 275.524);--color-info:oklch(88.263% .093 212.846);--color-info-content:oklch(17.652% .018 212.846);--color-success:oklch(87.099% .219 148.024);--color-success-content:oklch(17.419% .043 148.024);--color-warning:oklch(95.533% .134 112.757);--color-warning-content:oklch(19.106% .026 112.757);--color-error:oklch(68.22% .206 24.43);--color-error-content:oklch(13.644% .041 24.43);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cmyk]:checked),[data-theme=cmyk]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(90% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(71.772% .133 239.443);--color-primary-content:oklch(14.354% .026 239.443);--color-secondary:oklch(64.476% .202 359.339);--color-secondary-content:oklch(12.895% .04 359.339);--color-accent:oklch(94.228% .189 105.306);--color-accent-content:oklch(18.845% .037 105.306);--color-neutral:oklch(21.778% 0 0);--color-neutral-content:oklch(84.355% 0 0);--color-info:oklch(68.475% .094 217.284);--color-info-content:oklch(13.695% .018 217.284);--color-success:oklch(46.949% .162 321.406);--color-success-content:oklch(89.389% .032 321.406);--color-warning:oklch(71.236% .159 52.023);--color-warning-content:oklch(14.247% .031 52.023);--color-error:oklch(62.013% .208 28.717);--color-error-content:oklch(12.402% .041 28.717);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=autumn]:checked),[data-theme=autumn]{color-scheme:light;--color-base-100:oklch(95.814% 0 0);--color-base-200:oklch(89.107% 0 0);--color-base-300:oklch(82.4% 0 0);--color-base-content:oklch(19.162% 0 0);--color-primary:oklch(40.723% .161 17.53);--color-primary-content:oklch(88.144% .032 17.53);--color-secondary:oklch(61.676% .169 23.865);--color-secondary-content:oklch(12.335% .033 23.865);--color-accent:oklch(73.425% .094 60.729);--color-accent-content:oklch(14.685% .018 60.729);--color-neutral:oklch(54.367% .037 51.902);--color-neutral-content:oklch(90.873% .007 51.902);--color-info:oklch(69.224% .097 207.284);--color-info-content:oklch(13.844% .019 207.284);--color-success:oklch(60.995% .08 174.616);--color-success-content:oklch(12.199% .016 174.616);--color-warning:oklch(70.081% .164 56.844);--color-warning-content:oklch(14.016% .032 56.844);--color-error:oklch(53.07% .241 24.16);--color-error-content:oklch(90.614% .048 24.16);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=business]:checked),[data-theme=business]{color-scheme:dark;--color-base-100:oklch(24.353% 0 0);--color-base-200:oklch(22.648% 0 0);--color-base-300:oklch(20.944% 0 0);--color-base-content:oklch(84.87% 0 0);--color-primary:oklch(41.703% .099 251.473);--color-primary-content:oklch(88.34% .019 251.473);--color-secondary:oklch(64.092% .027 229.389);--color-secondary-content:oklch(12.818% .005 229.389);--color-accent:oklch(67.271% .167 35.791);--color-accent-content:oklch(13.454% .033 35.791);--color-neutral:oklch(27.441% .013 253.041);--color-neutral-content:oklch(85.488% .002 253.041);--color-info:oklch(62.616% .143 240.033);--color-info-content:oklch(12.523% .028 240.033);--color-success:oklch(70.226% .094 156.596);--color-success-content:oklch(14.045% .018 156.596);--color-warning:oklch(77.482% .115 81.519);--color-warning-content:oklch(15.496% .023 81.519);--color-error:oklch(51.61% .146 29.674);--color-error-content:oklch(90.322% .029 29.674);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=acid]:checked),[data-theme=acid]{color-scheme:light;--color-base-100:oklch(98% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(91% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(71.9% .357 330.759);--color-primary-content:oklch(14.38% .071 330.759);--color-secondary:oklch(73.37% .224 48.25);--color-secondary-content:oklch(14.674% .044 48.25);--color-accent:oklch(92.78% .264 122.962);--color-accent-content:oklch(18.556% .052 122.962);--color-neutral:oklch(21.31% .128 278.68);--color-neutral-content:oklch(84.262% .025 278.68);--color-info:oklch(60.72% .227 252.05);--color-info-content:oklch(12.144% .045 252.05);--color-success:oklch(85.72% .266 158.53);--color-success-content:oklch(17.144% .053 158.53);--color-warning:oklch(91.01% .212 100.5);--color-warning-content:oklch(18.202% .042 100.5);--color-error:oklch(64.84% .293 29.349);--color-error-content:oklch(12.968% .058 29.349);--radius-selector:1rem;--radius-field:1rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lemonade]:checked),[data-theme=lemonade]{color-scheme:light;--color-base-100:oklch(98.71% .02 123.72);--color-base-200:oklch(91.8% .018 123.72);--color-base-300:oklch(84.89% .017 123.72);--color-base-content:oklch(19.742% .004 123.72);--color-primary:oklch(58.92% .199 134.6);--color-primary-content:oklch(11.784% .039 134.6);--color-secondary:oklch(77.75% .196 111.09);--color-secondary-content:oklch(15.55% .039 111.09);--color-accent:oklch(85.39% .201 100.73);--color-accent-content:oklch(17.078% .04 100.73);--color-neutral:oklch(30.98% .075 108.6);--color-neutral-content:oklch(86.196% .015 108.6);--color-info:oklch(86.19% .047 224.14);--color-info-content:oklch(17.238% .009 224.14);--color-success:oklch(86.19% .047 157.85);--color-success-content:oklch(17.238% .009 157.85);--color-warning:oklch(86.19% .047 102.15);--color-warning-content:oklch(17.238% .009 102.15);--color-error:oklch(86.19% .047 25.85);--color-error-content:oklch(17.238% .009 25.85);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=night]:checked),[data-theme=night]{color-scheme:dark;--color-base-100:oklch(20.768% .039 265.754);--color-base-200:oklch(19.314% .037 265.754);--color-base-300:oklch(17.86% .034 265.754);--color-base-content:oklch(84.153% .007 265.754);--color-primary:oklch(75.351% .138 232.661);--color-primary-content:oklch(15.07% .027 232.661);--color-secondary:oklch(68.011% .158 276.934);--color-secondary-content:oklch(13.602% .031 276.934);--color-accent:oklch(72.36% .176 350.048);--color-accent-content:oklch(14.472% .035 350.048);--color-neutral:oklch(27.949% .036 260.03);--color-neutral-content:oklch(85.589% .007 260.03);--color-info:oklch(68.455% .148 237.251);--color-info-content:oklch(0% 0 0);--color-success:oklch(78.452% .132 181.911);--color-success-content:oklch(15.69% .026 181.911);--color-warning:oklch(83.242% .139 82.95);--color-warning-content:oklch(16.648% .027 82.95);--color-error:oklch(71.785% .17 13.118);--color-error-content:oklch(14.357% .034 13.118);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=coffee]:checked),[data-theme=coffee]{color-scheme:dark;--color-base-100:oklch(24% .023 329.708);--color-base-200:oklch(21% .021 329.708);--color-base-300:oklch(16% .019 329.708);--color-base-content:oklch(72.354% .092 79.129);--color-primary:oklch(71.996% .123 62.756);--color-primary-content:oklch(14.399% .024 62.756);--color-secondary:oklch(34.465% .029 199.194);--color-secondary-content:oklch(86.893% .005 199.194);--color-accent:oklch(42.621% .074 224.389);--color-accent-content:oklch(88.524% .014 224.389);--color-neutral:oklch(16.51% .015 326.261);--color-neutral-content:oklch(83.302% .003 326.261);--color-info:oklch(79.49% .063 184.558);--color-info-content:oklch(15.898% .012 184.558);--color-success:oklch(74.722% .072 131.116);--color-success-content:oklch(14.944% .014 131.116);--color-warning:oklch(88.15% .14 87.722);--color-warning-content:oklch(17.63% .028 87.722);--color-error:oklch(77.318% .128 31.871);--color-error-content:oklch(15.463% .025 31.871);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=winter]:checked),[data-theme=winter]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97.466% .011 259.822);--color-base-300:oklch(93.268% .016 262.751);--color-base-content:oklch(41.886% .053 255.824);--color-primary:oklch(56.86% .255 257.57);--color-primary-content:oklch(91.372% .051 257.57);--color-secondary:oklch(42.551% .161 282.339);--color-secondary-content:oklch(88.51% .032 282.339);--color-accent:oklch(59.939% .191 335.171);--color-accent-content:oklch(11.988% .038 335.171);--color-neutral:oklch(19.616% .063 257.651);--color-neutral-content:oklch(83.923% .012 257.651);--color-info:oklch(88.127% .085 214.515);--color-info-content:oklch(17.625% .017 214.515);--color-success:oklch(80.494% .077 197.823);--color-success-content:oklch(16.098% .015 197.823);--color-warning:oklch(89.172% .045 71.47);--color-warning-content:oklch(17.834% .009 71.47);--color-error:oklch(73.092% .11 20.076);--color-error-content:oklch(14.618% .022 20.076);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=dim]:checked),[data-theme=dim]{color-scheme:dark;--color-base-100:oklch(30.857% .023 264.149);--color-base-200:oklch(28.036% .019 264.182);--color-base-300:oklch(26.346% .018 262.177);--color-base-content:oklch(82.901% .031 222.959);--color-primary:oklch(86.133% .141 139.549);--color-primary-content:oklch(17.226% .028 139.549);--color-secondary:oklch(73.375% .165 35.353);--color-secondary-content:oklch(14.675% .033 35.353);--color-accent:oklch(74.229% .133 311.379);--color-accent-content:oklch(14.845% .026 311.379);--color-neutral:oklch(24.731% .02 264.094);--color-neutral-content:oklch(82.901% .031 222.959);--color-info:oklch(86.078% .142 206.182);--color-info-content:oklch(17.215% .028 206.182);--color-success:oklch(86.171% .142 166.534);--color-success-content:oklch(17.234% .028 166.534);--color-warning:oklch(86.163% .142 94.818);--color-warning-content:oklch(17.232% .028 94.818);--color-error:oklch(82.418% .099 33.756);--color-error-content:oklch(16.483% .019 33.756);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=nord]:checked),[data-theme=nord]{color-scheme:light;--color-base-100:oklch(95.127% .007 260.731);--color-base-200:oklch(93.299% .01 261.788);--color-base-300:oklch(89.925% .016 262.749);--color-base-content:oklch(32.437% .022 264.182);--color-primary:oklch(59.435% .077 254.027);--color-primary-content:oklch(11.887% .015 254.027);--color-secondary:oklch(69.651% .059 248.687);--color-secondary-content:oklch(13.93% .011 248.687);--color-accent:oklch(77.464% .062 217.469);--color-accent-content:oklch(15.492% .012 217.469);--color-neutral:oklch(45.229% .035 264.131);--color-neutral-content:oklch(89.925% .016 262.749);--color-info:oklch(69.207% .062 332.664);--color-info-content:oklch(13.841% .012 332.664);--color-success:oklch(76.827% .074 131.063);--color-success-content:oklch(15.365% .014 131.063);--color-warning:oklch(85.486% .089 84.093);--color-warning-content:oklch(17.097% .017 84.093);--color-error:oklch(60.61% .12 15.341);--color-error-content:oklch(12.122% .024 15.341);--radius-selector:1rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=sunset]:checked),[data-theme=sunset]{color-scheme:dark;--color-base-100:oklch(22% .019 237.69);--color-base-200:oklch(20% .019 237.69);--color-base-300:oklch(18% .019 237.69);--color-base-content:oklch(77.383% .043 245.096);--color-primary:oklch(74.703% .158 39.947);--color-primary-content:oklch(14.94% .031 39.947);--color-secondary:oklch(72.537% .177 2.72);--color-secondary-content:oklch(14.507% .035 2.72);--color-accent:oklch(71.294% .166 299.844);--color-accent-content:oklch(14.258% .033 299.844);--color-neutral:oklch(26% .019 237.69);--color-neutral-content:oklch(70% .019 237.69);--color-info:oklch(85.559% .085 206.015);--color-info-content:oklch(17.111% .017 206.015);--color-success:oklch(85.56% .085 144.778);--color-success-content:oklch(17.112% .017 144.778);--color-warning:oklch(85.569% .084 74.427);--color-warning-content:oklch(17.113% .016 74.427);--color-error:oklch(85.511% .078 16.886);--color-error-content:oklch(17.102% .015 16.886);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=caramellatte]:checked),[data-theme=caramellatte]{color-scheme:light;--color-base-100:oklch(98% .016 73.684);--color-base-200:oklch(95% .038 75.164);--color-base-300:oklch(90% .076 70.697);--color-base-content:oklch(40% .123 38.172);--color-primary:oklch(0% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(22.45% .075 37.85);--color-secondary-content:oklch(90% .076 70.697);--color-accent:oklch(46.44% .111 37.85);--color-accent-content:oklch(90% .076 70.697);--color-neutral:oklch(55% .195 38.402);--color-neutral-content:oklch(98% .016 73.684);--color-info:oklch(42% .199 265.638);--color-info-content:oklch(90% .076 70.697);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .076 70.697);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:1}:root:has(input.theme-controller[value=abyss]:checked),[data-theme=abyss]{color-scheme:dark;--color-base-100:oklch(20% .08 209);--color-base-200:oklch(15% .08 209);--color-base-300:oklch(10% .08 209);--color-base-content:oklch(90% .076 70.697);--color-primary:oklch(92% .2653 125);--color-primary-content:oklch(50% .2653 125);--color-secondary:oklch(83.27% .0764 298.3);--color-secondary-content:oklch(43.27% .0764 298.3);--color-accent:oklch(43% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(30% .08 209);--color-neutral-content:oklch(90% .076 70.697);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(79% .209 151.711);--color-success-content:oklch(26% .065 152.934);--color-warning:oklch(84.8% .1962 84.62);--color-warning-content:oklch(44.8% .1962 84.62);--color-error:oklch(65% .1985 24.22);--color-error-content:oklch(27% .1985 24.22);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=silk]:checked),[data-theme=silk]{color-scheme:light;--color-base-100:oklch(97% .0035 67.78);--color-base-200:oklch(95% .0081 61.42);--color-base-300:oklch(90% .0081 61.42);--color-base-content:oklch(40% .0081 61.42);--color-primary:oklch(23.27% .0249 284.3);--color-primary-content:oklch(94.22% .2505 117.44);--color-secondary:oklch(23.27% .0249 284.3);--color-secondary-content:oklch(73.92% .2135 50.94);--color-accent:oklch(23.27% .0249 284.3);--color-accent-content:oklch(88.92% .2061 189.9);--color-neutral:oklch(20% 0 0);--color-neutral-content:oklch(80% .0081 61.42);--color-info:oklch(80.39% .1148 241.68);--color-info-content:oklch(30.39% .1148 241.68);--color-success:oklch(83.92% .0901 136.87);--color-success-content:oklch(23.92% .0901 136.87);--color-warning:oklch(83.92% .1085 80);--color-warning-content:oklch(43.92% .1085 80);--color-error:oklch(75.1% .1814 22.37);--color-error-content:oklch(35.1% .1814 22.37);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root:not(span){overflow:var(--page-overflow)}:root{--page-scroll-bg-on:linear-gradient(var(--root-bg),var(--root-bg))var(--root-bg)}@supports (color:color-mix(in lab,red,red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg),var(--root-bg))color-mix(in srgb,var(--root-bg),oklch(0% 0 0) calc(var(--page-has-backdrop,0)*40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset); else: unset)}:root:root{background:var(--page-scroll-bg,var(--root-bg,var(--color-base-100)))}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.tooltip{--tt-bg:var(--color-neutral);--tt-off: calc(100% + .5rem) ;--tt-tail: calc(100% + 1px + .25rem) ;display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media(prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media(prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field),var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)),var(--tab-border-color)calc(calc(69% - var(--border)) + .25px),var(--tab-border-color)calc(calc(69% - var(--border)) + var(--border)),var(--tab-bg)calc(calc(69% - var(--border)) + var(--border) + .25px);order:var(--tab-order);height:var(--tab-height);border-color:#0000;padding-inline-start:var(--tab-p);padding-inline-end:var(--tab-p);font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media(prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.dropdown{position-area:var(--anchor-v,bottom)var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media(prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:95%}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:100%}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:95%}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}@media(hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size)/10);--radialprogress:calc(var(--value)*1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side,currentColor 98%,#0000)top/var(--thickness)var(--thickness)no-repeat,conic-gradient(currentColor var(--radialprogress),#0000 0);webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness)/2);transform:rotate(calc(var(--value)*3.6deg - 90deg))translate(calc(var(--size)/2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab,red,red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.toast{translate:var(--toast-x,0)var(--toast-y,0);inset-inline:auto 1rem;background-color:#0000;flex-direction:column;gap:.5rem;width:max-content;max-width:calc(100vw - 2rem);display:flex;position:fixed;top:auto;bottom:1rem}@media(prefers-reduced-motion:no-preference){.toast>*{animation:.25s ease-out toast}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media(forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.table{border-collapse:separate;--tw-border-spacing-x: 0rem ;--tw-border-spacing-y: 0rem ;width:100%;border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media(hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead,tfoot){color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem)*6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab,red,red)){.range{--range-bg:color-mix(in oklab,currentColor 10%,#0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}@media(forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor,0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab,red,red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor,0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab,red,red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.diff-resizer{isolation:isolate;z-index:2;resize:horizontal;opacity:0;cursor:ew-resize;transform-origin:100% 100%;clip-path:inset(calc(100% - .75rem) 0 0 calc(100% - .75rem));grid-row-start:2;grid-column-start:1;width:50cqi;min-width:1rem;max-width:calc(100cqi - 1rem);height:.75rem;transition:min-width .3s ease-out,max-width .3s ease-out;position:relative;overflow:hidden;transform:scaleY(5)translate(.32rem,50%)}.select{border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.select{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.select{--size:calc(var(--size-field,.25rem)*10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border)*2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border)solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth)*3px) -2px #0003;box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth)*.1)),0 8px 10px -6px rgb(0 0 0/calc(var(--depth)*.1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth)*3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0,1fr))auto var(--timeline-row-end,minmax(0,1fr));grid-template-columns:var(--timeline-col-start,minmax(0,1fr))auto var(--timeline-col-end,minmax(0,1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media(forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border)solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab,red,red)){.radio{border:var(--border)solid var(--input-color,color-mix(in srgb,currentColor 20%,#0000))}}.radio{box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media(prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));background-color:currentColor}@media(forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.rating{vertical-align:middle;display:inline-flex;position:relative}.rating input{appearance:none;border:none}.rating :where(*){background-color:var(--color-base-content);opacity:.2;border-radius:0;width:1.5rem;height:1.5rem}@media(prefers-reduced-motion:no-preference){.rating :where(*){animation:.25s ease-out rating}}.rating :where(*):is(input){cursor:pointer}.rating .rating-hidden{background-color:#0000;width:.5rem}.rating input[type=radio]:checked{background-image:none}.rating :checked,.rating [aria-checked=true],.rating [aria-current=true],.rating :has(~:checked,~[aria-checked=true],~[aria-current=true]){opacity:1}.rating :focus-visible{scale:1.1}@media(prefers-reduced-motion:no-preference){.rating :focus-visible{transition:scale .2s ease-out}}.rating :active:focus{animation:none;scale:1.1}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.progress{background-color:color-mix(in oklab,currentcolor 20%,transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media(prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media(prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.textarea{border:var(--border)solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.textarea{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.textarea{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%}.stack>:nth-child(n+2){opacity:.7;width:100%}.stack>:nth-child(2){z-index:2;opacity:.9}.stack>:first-child{z-index:3;width:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.timeline-middle{grid-row-start:2;grid-column-start:2}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));width:fit-content;padding-inline:calc(.25rem*3 - var(--border));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);height:var(--size);justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem)*10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab,red,red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.skeleton{border-radius:var(--radius-box);background-color:var(--color-base-300)}@media(prefers-reduced-motion:reduce){.skeleton{transition-duration:15s}}.skeleton{will-change:background-position;background-image:linear-gradient(105deg,#0000 0% 40%,var(--color-base-100)50%,#0000 60% 100%);background-position-x:-50%;background-size:200%}@media(prefers-reduced-motion:no-preference){.skeleton{animation:1.8s ease-in-out infinite skeleton}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.menu-title{color:var(--color-base-content);padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.menu-title{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.menu-title{font-size:.875rem;font-weight:600}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border)0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border)var(--tab-p)0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color)#0000;--tab-corner-width:calc(100% + var(--tab-radius-limit)*2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left,top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border)var(--border)0 var(--border);--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border))var(--border)calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left,var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right,var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start),var(--radius-end);background-size:var(--tab-radius-limit)var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1*var(--border))0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row>:not(.list-col-wrap){grid-row-start:1}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}.rating.rating-xs :where(:not(.rating-hidden)){width:1rem;height:1rem}.rating.rating-sm :where(:not(.rating-hidden)){width:1.25rem;height:1.25rem}.rating.rating-md :where(:not(.rating-hidden)){width:1.5rem;height:1.5rem}.rating.rating-lg :where(:not(.rating-hidden)){width:1.75rem;height:1.75rem}.rating.rating-xl :where(:not(.rating-hidden)){width:2rem;height:2rem}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translate(calc(var(--tt-pos,.25rem) - .25rem))translateY(-50%);inset:50% var(--tt-off)auto auto}.tooltip-left:after{transform:translate(var(--tt-pos,.25rem))translateY(-50%)rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px)auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translate(calc(var(--tt-pos,-.25rem) + .25rem))translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translate(var(--tt-pos,-.25rem))translateY(-50%)rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.dropdown-right{--anchor-h:right;--anchor-v:span-bottom}.dropdown-right .dropdown-content{transform-origin:0;inset-inline-start:100%;top:0;bottom:auto}.dropdown-left{--anchor-h:left;--anchor-v:span-bottom}.dropdown-left .dropdown-content{transform-origin:100%;inset-inline-end:100%;top:0;bottom:auto}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn-active{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);isolation:isolate}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4}:is(.stack,.stack.stack-bottom)>:nth-child(2){grid-area:2/2/5/5}:is(.stack,.stack.stack-bottom)>:first-child{grid-area:1/1/4/6}.stack.stack-top>*{grid-area:1/3/4/4}.stack.stack-top>:nth-child(2){grid-area:2/2/5/5}.stack.stack-top>:first-child{grid-area:3/1/6/6}.stack.stack-start>*{grid-area:3/1/4/4}.stack.stack-start>:nth-child(2){grid-area:2/2/5/5}.stack.stack-start>:first-child{grid-area:1/3/6/6}.stack.stack-end>*{grid-area:3/3/4/6}.stack.stack-end>:nth-child(2){grid-area:2/2/5/5}.stack.stack-end>:first-child{grid-area:1/1/6/4}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:max(var(--font-size,.75rem),.75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.loading-sm{width:calc(var(--size-selector,.25rem)*5)}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{background-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))8%,var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{border-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))10%,var(--color-base-100))}}.badge-soft{background-image:none}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem)*5)}.select-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);padding-inline:calc(.25rem*2.5 - var(--border));font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem)*4);padding-inline:calc(.25rem*2 - var(--border));font-size:.625rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.progress-primary{color:var(--color-primary)}.link-hover{text-decoration-line:none}@media(hover:hover){.link-hover:hover{text-decoration-line:underline}}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem)*12)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}.card-border{border:var(--border)solid var(--color-base-200)}.radio-primary,.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-2{top:calc(var(--spacing)*-2)}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-1{left:calc(var(--spacing)*1)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-\\[-15px\\]{left:-15px}.z-10{z-index:10}.z-50{z-index:50}.z-1000{z-index:1000}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px)0 var(--border,1px)var(--border,1px)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-px{margin-top:1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-full{max-height:100%}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[15px\\]{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-15{rotate:15deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-box{border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\\(length\\:--border\\){border-style:var(--tw-border-style);border-width:var(--border)}.border-base-300{border-color:var(--color-base-300)}.border-base-content,.border-base-content\\/10{border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.border-base-content\\/10{border-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.border-white{border-color:var(--color-white)}.border-white\\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200,.bg-base-200\\/70{background-color:var(--color-base-200)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\\/70{background-color:color-mix(in oklab,var(--color-base-200)70%,transparent)}}.bg-base-content{background-color:var(--color-base-content)}.bg-black{background-color:var(--color-black)}.bg-black\\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}@layer daisyui.l1{.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert-soft{--alert-border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media(hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media(hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.fill-current{fill:currentColor}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-all{word-break:break-all}.text-base-content,.text-base-content\\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\\/90{color:color-mix(in oklab,var(--color-base-content)90%,transparent)}}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-\\(length\\:--border\\){outline-style:var(--tw-outline-style);outline-width:var(--border)}.outline-black{outline-color:var(--color-black)}.outline-black\\/5{outline-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.outline-black\\/5{outline-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-\\[height\\,max-height\\]{transition-property:height,max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.hover\\:translate-x-\\[15px\\]:hover{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\\:rotate-15:hover{rotate:15deg}.hover\\:opacity-100:hover{opacity:1}}@media(min-width:40rem){.sm\\:inline-block{display:inline-block}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:48rem){.md\\:flex{display:flex}}.\\[\\&_svg\\]\\:visible svg{visibility:visible}}:host{font-family:var(--font-family,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif)}:host([data-font=Lato]){--font-family:"Lato",system-ui,-apple-system,sans-serif}:host([data-font=Montserrat]){--font-family:"Montserrat",system-ui,-apple-system,sans-serif}:host([data-font=Noto\\ Sans]){--font-family:"Noto Sans",system-ui,-apple-system,sans-serif}:host([data-font=Open\\ Sans]){--font-family:"Open Sans",system-ui,-apple-system,sans-serif}:host([data-font=Raleway]){--font-family:"Raleway",system-ui,-apple-system,sans-serif}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items)*100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}`; dayjs.extend(localizedFormat); function loadGoogleFonts() { if (document.getElementById("tmd-google-fonts")) { return; } const fontCSS = `@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Raleway:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap');`; if (typeof window.GM_addStyle !== "undefined") { window.GM_addStyle(fontCSS); } else { const link = document.createElement("link"); link.id = "tmd-google-fonts"; link.rel = "stylesheet"; link.href = "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Raleway:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"; document.head.appendChild(link); } } function mountApp() { loadGoogleFonts(); const root = document.createElement("div"); root.id = "tmd-root"; document.body.append(root); const shadowRoot = root.attachShadow({ mode: "open" }); shadowRoot.adoptedStyleSheets = [prepareStyles()]; preact.render( u(MediaDownloaderApp, {}), shadowRoot); } function prepareStyles() { const shadowSheet = new CSSStyleSheet(); shadowSheet.replaceSync(styles.replace(/:root/gu, ":host")); const globalSheet = new CSSStyleSheet(); for (const rule of shadowSheet.cssRules) { if (rule instanceof CSSPropertyRule) { globalSheet.insertRule(rule.cssText); } } document.adoptedStyleSheets.push(globalSheet); return shadowSheet; } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountApp); } else { mountApp(); } })(preact, preactSignals, preactHooks, i18next, dayjs, Dexie, FileSaver, gifshot, fflate);