[
  {
    "path": ".editorconfig",
    "content": "[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]\ncharset = utf-8\nindent_size = 2\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nend_of_line = lf\nmax_line_length = 100\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\n.DS_Store\ndist\ndist-ssr\ncoverage\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n\n*.tsbuildinfo\n\n.eslintcache\n\n# Cypress\n/cypress/videos/\n/cypress/screenshots/\n\n# Vitest\n__screenshots__/\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"singleQuote\": true,\n  \"semi\": false,\n  \"tabWidth\": 2,\n  \"printWidth\": 100,\n  \"trailingComma\": \"all\",\n  \"endOfLine\": \"auto\",\n  \"arrowParens\": \"avoid\"\n}\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"Vue.volar\",\n    \"dbaeumer.vscode-eslint\",\n    \"EditorConfig.EditorConfig\",\n    \"esbenp.prettier-vscode\",\n    \"noxussj.element-plus\",\n    \"christian-kohler.path-intellisense\",\n    \"vscode-icons-team.vscode-icons\"\n  ]\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1.  Definitions.\n\n    \"License\" shall mean the terms and conditions for use, reproduction,\n    and distribution as defined by Sections 1 through 9 of this document.\n\n    \"Licensor\" shall mean the copyright owner or entity authorized by\n    the copyright owner that is granting the License.\n\n    \"Legal Entity\" shall mean the union of the acting entity and all\n    other entities that control, are controlled by, or are under common\n    control with that entity. For the purposes of this definition,\n    \"control\" means (i) the power, direct or indirect, to cause the\n    direction or management of such entity, whether by contract or\n    otherwise, or (ii) ownership of fifty percent (50%) or more of the\n    outstanding shares, or (iii) beneficial ownership of such entity.\n\n    \"You\" (or \"Your\") shall mean an individual or Legal Entity\n    exercising permissions granted by this License.\n\n    \"Source\" form shall mean the preferred form for making modifications,\n    including but not limited to software source code, documentation\n    source, and configuration files.\n\n    \"Object\" form shall mean any form resulting from mechanical\n    transformation or translation of a Source form, including but\n    not limited to compiled object code, generated documentation,\n    and conversions to other media types.\n\n    \"Work\" shall mean the work of authorship, whether in Source or\n    Object form, made available under the License, as indicated by a\n    copyright notice that is included in or attached to the work\n    (an example is provided in the Appendix below).\n\n    \"Derivative Works\" shall mean any work, whether in Source or Object\n    form, that is based on (or derived from) the Work and for which the\n    editorial revisions, annotations, elaborations, or other modifications\n    represent, as a whole, an original work of authorship. For the purposes\n    of this License, Derivative Works shall not include works that remain\n    separable from, or merely link (or bind by name) to the interfaces of,\n    the Work and Derivative Works thereof.\n\n    \"Contribution\" shall mean any work of authorship, including\n    the original version of the Work and any modifications or additions\n    to that Work or Derivative Works thereof, that is intentionally\n    submitted to Licensor for inclusion in the Work by the copyright owner\n    or by an individual or Legal Entity authorized to submit on behalf of\n    the copyright owner. For the purposes of this definition, \"submitted\"\n    means any form of electronic, verbal, or written communication sent\n    to the Licensor or its representatives, including but not limited to\n    communication on electronic mailing lists, source code control systems,\n    and issue tracking systems that are managed by, or on behalf of, the\n    Licensor for the purpose of discussing and improving the Work, but\n    excluding communication that is conspicuously marked or otherwise\n    designated in writing by the copyright owner as \"Not a Contribution.\"\n\n    \"Contributor\" shall mean Licensor and any individual or Legal Entity\n    on behalf of whom a Contribution has been received by Licensor and\n    subsequently incorporated within the Work.\n\n2.  Grant of Copyright License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    copyright license to reproduce, prepare Derivative Works of,\n    publicly display, publicly perform, sublicense, and distribute the\n    Work and such Derivative Works in Source or Object form.\n\n3.  Grant of Patent License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    (except as stated in this section) patent license to make, have made,\n    use, offer to sell, sell, import, and otherwise transfer the Work,\n    where such license applies only to those patent claims licensable\n    by such Contributor that are necessarily infringed by their\n    Contribution(s) alone or by combination of their Contribution(s)\n    with the Work to which such Contribution(s) was submitted. If You\n    institute patent litigation against any entity (including a\n    cross-claim or counterclaim in a lawsuit) alleging that the Work\n    or a Contribution incorporated within the Work constitutes direct\n    or contributory patent infringement, then any patent licenses\n    granted to You under this License for that Work shall terminate\n    as of the date such litigation is filed.\n\n4.  Redistribution. You may reproduce and distribute copies of the\n    Work or Derivative Works thereof in any medium, with or without\n    modifications, and in Source or Object form, provided that You\n    meet the following conditions:\n\n    (a) You must give any other recipients of the Work or\n    Derivative Works a copy of this License; and\n\n    (b) You must cause any modified files to carry prominent notices\n    stating that You changed the files; and\n\n    (c) You must retain, in the Source form of any Derivative Works\n    that You distribute, all copyright, patent, trademark, and\n    attribution notices from the Source form of the Work,\n    excluding those notices that do not pertain to any part of\n    the Derivative Works; and\n\n    (d) If the Work includes a \"NOTICE\" text file as part of its\n    distribution, then any Derivative Works that You distribute must\n    include a readable copy of the attribution notices contained\n    within such NOTICE file, excluding those notices that do not\n    pertain to any part of the Derivative Works, in at least one\n    of the following places: within a NOTICE text file distributed\n    as part of the Derivative Works; within the Source form or\n    documentation, if provided along with the Derivative Works; or,\n    within a display generated by the Derivative Works, if and\n    wherever such third-party notices normally appear. The contents\n    of the NOTICE file are for informational purposes only and\n    do not modify the License. You may add Your own attribution\n    notices within Derivative Works that You distribute, alongside\n    or as an addendum to the NOTICE text from the Work, provided\n    that such additional attribution notices cannot be construed\n    as modifying the License.\n\n    You may add Your own copyright statement to Your modifications and\n    may provide additional or different license terms and conditions\n    for use, reproduction, or distribution of Your modifications, or\n    for any such Derivative Works as a whole, provided Your use,\n    reproduction, and distribution of the Work otherwise complies with\n    the conditions stated in this License.\n\n5.  Submission of Contributions. Unless You explicitly state otherwise,\n    any Contribution intentionally submitted for inclusion in the Work\n    by You to the Licensor shall be under the terms and conditions of\n    this License, without any additional terms or conditions.\n    Notwithstanding the above, nothing herein shall supersede or modify\n    the terms of any separate license agreement you may have executed\n    with Licensor regarding such Contributions.\n\n6.  Trademarks. This License does not grant permission to use the trade\n    names, trademarks, service marks, or product names of the Licensor,\n    except as required for reasonable and customary use in describing the\n    origin of the Work and reproducing the content of the NOTICE file.\n\n7.  Disclaimer of Warranty. Unless required by applicable law or\n    agreed to in writing, Licensor provides the Work (and each\n    Contributor provides its Contributions) on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n    implied, including, without limitation, any warranties or conditions\n    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n    PARTICULAR PURPOSE. You are solely responsible for determining the\n    appropriateness of using or redistributing the Work and assume any\n    risks associated with Your exercise of permissions under this License.\n\n8.  Limitation of Liability. In no event and under no legal theory,\n    whether in tort (including negligence), contract, or otherwise,\n    unless required by applicable law (such as deliberate and grossly\n    negligent acts) or agreed to in writing, shall any Contributor be\n    liable to You for damages, including any direct, indirect, special,\n    incidental, or consequential damages of any character arising as a\n    result of this License or out of the use or inability to use the\n    Work (including but not limited to damages for loss of goodwill,\n    work stoppage, computer failure or malfunction, or any and all\n    other commercial damages or losses), even if such Contributor\n    has been advised of the possibility of such damages.\n\n9.  Accepting Warranty or Additional Liability. While redistributing\n    the Work or Derivative Works thereof, You may choose to offer,\n    and charge a fee for, acceptance of support, warranty, indemnity,\n    or other liability obligations and/or rights consistent with this\n    License. However, in accepting such obligations, You may act only\n    on Your own behalf and on Your sole responsibility, not on behalf\n    of any other Contributor, and only if You agree to indemnify,\n    defend, and hold each Contributor harmless for any liability\n    incurred by, or claims asserted against, such Contributor by reason\n    of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\nCopyright [2018-2026] [macrozheng]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# mall-admin-web\n\n<p>\n  <a href=\"#公众号\"><img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E5%85%AC%E4%BC%97%E5%8F%B7-macrozheng-blue.svg\" alt=\"公众号\"></a>\n  <a href=\"#公众号\"><img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E4%BA%A4%E6%B5%81-%E5%BE%AE%E4%BF%A1%E7%BE%A4-2BA245.svg\" alt=\"交流\"></a>\n  <a href=\"https://github.com/macrozheng/mall\"><img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E5%90%8E%E5%8F%B0%E9%A1%B9%E7%9B%AE-mall-blue.svg\" alt=\"后台项目\"></a>\n  <a href=\"https://github.com/macrozheng/mall-swarm\"><img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/Cloud%E7%89%88%E6%9C%AC-mall--swarm-brightgreen.svg\" alt=\"SpringCloud版本\"></a>\n  <a href=\"https://gitee.com/macrozheng/mall-admin-web\"><img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E7%A0%81%E4%BA%91-%E9%A1%B9%E7%9B%AE%E5%9C%B0%E5%9D%80-orange.svg\" alt=\"码云\"></a>\n</p>\n\n## 友情提示\n\n> 1. **快速体验项目**：[在线访问地址](https://www.macrozheng.com/admin/index.html) 。\n> 2. **全套学习教程**：[《mall学习教程》](https://www.macrozheng.com) 。\n> 3. **分支说明**：`master`分支基于Vue3+Element-Plus，`dev-v2`分支基于Vue2+Element。\n\n## 前言\n\n该项目为前后端分离项目的前端部分，后端项目`mall`地址：[传送门](https://github.com/macrozheng/mall) 。\n\n## 项目介绍\n\n`mall-admin-web`是一个电商后台管理系统的前端项目，基于Vue3+Element-Plus实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。\n\n### 项目演示\n\n项目在线演示地址：[https://www.macrozheng.com/admin/](https://www.macrozheng.com/admin/)\n\n![后台管理系统功能演示](http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/project/mall_admin_show.png)\n\n### 技术选型\n\n| 技术                        | 说明                  | 官网                                                    |\n| --------------------------- | --------------------- | ------------------------------------------------------- |\n| Vue                         | 前端框架              | https://cn.vuejs.org/                                   |\n| Element Plus                | 前端UI框架            | https://element-plus.org/                               |\n| Vue Router                  | 路由框架              | https://router.vuejs.org/                               |\n| Pinia                       | 全局状态管理框架      | https://pinia.vuejs.org/                                |\n| Pinia Plugin Persistedstate | Pinia持久化插件       | https://prazdevs.github.io/pinia-plugin-persistedstate/ |\n| Axios                       | 前端HTTP框架          | https://github.com/axios/axios                          |\n| vue-charts                  | 基于Echarts的图表框架 | https://github.com/ecomfe/vue-echarts                   |\n| TinyMCE Vue                 | 富文本编辑器          | https://github.com/tinymce/tinymce-vue                  |\n| Js-cookie                   | cookie管理工具        | https://github.com/js-cookie/js-cookie                  |\n| vue-element-admin           | 项目脚手架            | https://github.com/PanJiaChen/vue-element-admin         |\n\n### 项目布局\n\n```lua\nsrc -- 源码目录\n├── apis -- axios网络请求接口定义\n├── assets -- 静态图片资源文件\n├── components -- 通用组件封装\n├── icons -- svg矢量图片文件\n├── router -- vue-router路由配置\n├── store -- pinia的状态管理\n├── styles -- 全局css样式\n├── types -- 类型定义\n├── utils -- 工具类\n└── views -- 前端页面\n    ├── home -- 首页\n    ├── layout -- 通用页面框架\n    ├── normal -- 常用页面（login和404）\n    ├── oms -- 订单模块页面\n    ├── pms -- 商品模块页面\n    ├── sms -- 商品模块页面\n    └── ums -- 用户模块页面\n```\n\n## 搭建步骤\n\n- 下载node并安装，支持v20以上版本（建议下载v20 LTS版本）：https://nodejs.org/zh-cn/download/archive/v20.20.0\n- 该项目为前后端分离项目，访问本地访问接口需搭建后台环境，搭建请参考后端项目[传送门](https://github.com/macrozheng/mall);\n- 访问在线接口无需搭建后台环境，只需将`.env.development`文件中的`VITE_BASE_SERVER_URL`改为[https://admin-api.macrozheng.com](https://admin-api.macrozheng.com)即可;\n- 如果你对接的是[mall-swarm](https://github.com/macrozheng/mall-swarm) 微服务后台的话，所有接口都需要通过网关访问，需要将`.env.development`文件中的`VITE_BASE_SERVER_URL`改为[http://localhost:8201/mall-admin](http://localhost:8201/mall-admin) ；\n- 克隆源代码到本地，使用VSCode打开，并完成编译;\n- 在命令行中运行命令：`npm install`,下载相关依赖;\n- 在命令行中运行命令：`npm run dev`,运行项目;\n- 访问地址：[http://localhost:5173](http://localhost:5173)即可打开后台管理系统页面;\n- 具体部署过程请参考：[mall前端项目的安装与部署](https://www.macrozheng.com/mall/start/mall_deploy_web.html)\n- 前端自动化部署请参考：[使用Jenkins一键打包部署前端应用，就是这么6！](https://www.macrozheng.com/mall/reference/jenkins_vue.html)\n\n## 公众号\n\n加微信群交流，公众号后台回复「**加群**」即可。\n\n![公众号图片](http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg)\n\n## 许可证\n\n[Apache License 2.0](https://github.com/macrozheng/mall-admin-web/blob/master/LICENSE)\n\nCopyright (c) 2018-2026 macrozheng\n"
  },
  {
    "path": "auto-imports.d.ts",
    "content": "/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// noinspection JSUnusedGlobalSymbols\n// Generated by unplugin-auto-import\n// biome-ignore lint: disable\nexport {}\ndeclare global {\n  const ElMessage: typeof import('element-plus/es').ElMessage\n}\n"
  },
  {
    "path": "components.d.ts",
    "content": "/* eslint-disable */\n// @ts-nocheck\n// biome-ignore lint: disable\n// oxlint-disable\n// ------\n// Generated by unplugin-vue-components\n// Read more: https://github.com/vuejs/core/pull/3399\n\nexport {}\n\n/* prettier-ignore */\ndeclare module 'vue' {\n  export interface GlobalComponents {\n    Breadcrumb: typeof import('./src/components/Breadcrumb/index.vue')['default']\n    ElButton: typeof import('element-plus/es')['ElButton']\n    ElCard: typeof import('element-plus/es')['ElCard']\n    ElCascader: typeof import('element-plus/es')['ElCascader']\n    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']\n    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']\n    ElCol: typeof import('element-plus/es')['ElCol']\n    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']\n    ElDialog: typeof import('element-plus/es')['ElDialog']\n    ElDropdown: typeof import('element-plus/es')['ElDropdown']\n    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']\n    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']\n    ElForm: typeof import('element-plus/es')['ElForm']\n    ElFormItem: typeof import('element-plus/es')['ElFormItem']\n    ElIcon: typeof import('element-plus/es')['ElIcon']\n    ElInput: typeof import('element-plus/es')['ElInput']\n    ElMenu: typeof import('element-plus/es')['ElMenu']\n    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']\n    ElOption: typeof import('element-plus/es')['ElOption']\n    ElPagination: typeof import('element-plus/es')['ElPagination']\n    ElPopover: typeof import('element-plus/es')['ElPopover']\n    ElRadio: typeof import('element-plus/es')['ElRadio']\n    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']\n    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']\n    ElRow: typeof import('element-plus/es')['ElRow']\n    ElSelect: typeof import('element-plus/es')['ElSelect']\n    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']\n    ElStep: typeof import('element-plus/es')['ElStep']\n    ElSteps: typeof import('element-plus/es')['ElSteps']\n    ElSubMenu: typeof import('element-plus/es')['ElSubMenu']\n    ElSwitch: typeof import('element-plus/es')['ElSwitch']\n    ElTable: typeof import('element-plus/es')['ElTable']\n    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']\n    ElTabPane: typeof import('element-plus/es')['ElTabPane']\n    ElTabs: typeof import('element-plus/es')['ElTabs']\n    ElTimePicker: typeof import('element-plus/es')['ElTimePicker']\n    ElTransfer: typeof import('element-plus/es')['ElTransfer']\n    ElUpload: typeof import('element-plus/es')['ElUpload']\n    Hamburger: typeof import('./src/components/Hamburger/index.vue')['default']\n    MultiUpload: typeof import('./src/components/Upload/multiUpload.vue')['default']\n    RouterLink: typeof import('vue-router')['RouterLink']\n    RouterView: typeof import('vue-router')['RouterView']\n    ScrollBar: typeof import('./src/components/ScrollBar/index.vue')['default']\n    SingleUpload: typeof import('./src/components/Upload/singleUpload.vue')['default']\n    SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']\n    Tinymce: typeof import('./src/components/Tinymce/index.vue')['default']\n  }\n  export interface GlobalDirectives {\n    vLoading: typeof import('element-plus/es')['ElLoadingDirective']\n  }\n}\n"
  },
  {
    "path": "env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n/** 扩展import.meta.env对象类型，配置.env文件中的环境变量 */\ninterface ImportMetaEnv {\n  /** 后端API基础路径 */\n  readonly VITE_BASE_SERVER_URL: string\n  /** 是否使用OSS对象存储 */\n  readonly VITE_USE_OSS: string\n  /** OSS上传路径 */\n  readonly VITE_OSS_UPLOAD_URL: string\n  /** Minio上传相对路径 */\n  readonly VITE_MINIO_UPLOAD_URL: string\n}\n/** 扩展import.meta对象类型 */\ninterface ImportMeta {\n  readonly env: ImportMetaEnv\n}\n"
  },
  {
    "path": "eslint.config.ts",
    "content": "import { globalIgnores } from 'eslint/config'\nimport { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'\nimport pluginVue from 'eslint-plugin-vue'\n\n// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:\n// import { configureVueProject } from '@vue/eslint-config-typescript'\n// configureVueProject({ scriptLangs: ['ts', 'tsx'] })\n// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup\n\nexport default defineConfigWithVueTs(\n  {\n    name: 'app/files-to-lint',\n    files: ['**/*.{ts,mts,tsx,vue}'],\n  },\n\n  globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),\n\n  pluginVue.configs['flat/essential'],\n  vueTsConfigs.recommended,\n  {\n    name: 'app/custom-rules',\n    rules: {\n      'vue/multi-word-component-names': 'off',\n    },\n  },\n)\n"
  },
  {
    "path": "index.html",
    "content": "<!doctype html>\n<html lang=\"\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" href=\"/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>mall-admin-web</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/src/main.ts\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"mall-admin-web\",\n  \"version\": \"3.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"engines\": {\n    \"node\": \"^20.19.0 || >=22.12.0\"\n  },\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"run-p type-check \\\"build-only {@}\\\" --\",\n    \"preview\": \"vite preview\",\n    \"build-only\": \"vite build\",\n    \"type-check\": \"vue-tsc --build\",\n    \"lint\": \"eslint . --fix --cache\"\n  },\n  \"dependencies\": {\n    \"@tinymce/tinymce-vue\": \"^5.1.1\",\n    \"@types/js-cookie\": \"^3.0.6\",\n    \"axios\": \"^1.13.2\",\n    \"echarts\": \"^6.0.0\",\n    \"element-china-area-data\": \"^6.1.0\",\n    \"element-plus\": \"^2.12.0\",\n    \"js-cookie\": \"^3.0.5\",\n    \"normalize.css\": \"^8.0.1\",\n    \"nprogress\": \"^0.2.0\",\n    \"pinia\": \"^3.0.4\",\n    \"pinia-plugin-persistedstate\": \"^4.7.1\",\n    \"tinymce\": \"^6.8.6\",\n    \"tinymce-i18n\": \"^26.1.12\",\n    \"vue\": \"^3.5.25\",\n    \"vue-echarts\": \"^8.0.1\",\n    \"vue-router\": \"^4.6.3\"\n  },\n  \"devDependencies\": {\n    \"@tsconfig/node24\": \"^24.0.3\",\n    \"@types/node\": \"^24.10.1\",\n    \"@types/nprogress\": \"^0.2.3\",\n    \"@vitejs/plugin-vue\": \"^6.0.2\",\n    \"@vue/eslint-config-typescript\": \"^14.6.0\",\n    \"@vue/tsconfig\": \"^0.8.1\",\n    \"eslint\": \"^9.39.1\",\n    \"eslint-plugin-vue\": \"~10.5.1\",\n    \"fast-glob\": \"^3.3.3\",\n    \"globals\": \"^16.5.0\",\n    \"jiti\": \"^2.6.1\",\n    \"npm-run-all2\": \"^8.0.4\",\n    \"prettier\": \"^3.7.4\",\n    \"sass\": \"^1.96.0\",\n    \"typescript\": \"~5.9.0\",\n    \"unplugin-auto-import\": \"^20.3.0\",\n    \"unplugin-element-plus\": \"^0.11.1\",\n    \"unplugin-vue-components\": \"^30.0.0\",\n    \"vite\": \"^7.2.4\",\n    \"vite-plugin-svg-icons\": \"^2.0.1\",\n    \"vite-plugin-vue-devtools\": \"^8.0.5\",\n    \"vue-tsc\": \"^3.1.5\"\n  }\n}\n"
  },
  {
    "path": "public/tinymce6.8.6/langs/zh_CN.js",
    "content": "tinymce.addI18n(\"zh_CN\",{\"#\":\"#\",\"Accessibility\":\"\\u8f85\\u52a9\\u529f\\u80fd\",\"Accordion\":\"\\u6298\\u53e0\\u9762\\u677f\",\"Accordion body...\":\"\\u6298\\u53e0\\u9762\\u677f\\u6b63\\u6587...\",\"Accordion summary...\":\"\\u6298\\u53e0\\u9762\\u677f\\u6458\\u8981...\",\"Action\":\"\\u52a8\\u4f5c\",\"Activity\":\"\\u6d3b\\u52a8\",\"Address\":\"\\u5730\\u5740\",\"Advanced\":\"\\u9ad8\\u7ea7\",\"Align\":\"\\u5bf9\\u9f50\",\"Align center\":\"\\u5c45\\u4e2d\\u5bf9\\u9f50\",\"Align left\":\"\\u5de6\\u5bf9\\u9f50\",\"Align right\":\"\\u53f3\\u5bf9\\u9f50\",\"Alignment\":\"\\u5bf9\\u9f50\",\"Alignment {0}\":\"\\u5bf9\\u9f50{0}\",\"All\":\"\\u5168\\u90e8\",\"Alternative description\":\"\\u66ff\\u4ee3\\u63cf\\u8ff0\",\"Alternative source\":\"\\u955c\\u50cf\",\"Alternative source URL\":\"\\u66ff\\u4ee3\\u6765\\u6e90\\u7f51\\u5740\",\"Anchor\":\"\\u951a\\u70b9\",\"Anchor...\":\"\\u951a\\u70b9...\",\"Anchors\":\"\\u951a\\u70b9\",\"Animals and Nature\":\"\\u52a8\\u7269\\u548c\\u81ea\\u7136\",\"Arrows\":\"\\u7bad\\u5934\",\"B\":\"B\",\"Background color\":\"\\u80cc\\u666f\\u989c\\u8272\",\"Background color {0}\":\"\\u80cc\\u666f\\u989c\\u8272 {0}\",\"Black\":\"\\u9ed1\\u8272\",\"Block\":\"\\u5757\",\"Block {0}\":\"\\u6587\\u672c\\u5757{0}\",\"Blockquote\":\"Blockquote\",\"Blocks\":\"\\u6837\\u5f0f\",\"Blue\":\"\\u84dd\\u8272\",\"Blue component\":\"\\u767d\\u8272\\u90e8\\u5206\",\"Body\":\"\\u8868\\u4f53\",\"Bold\":\"\\u7c97\\u4f53\",\"Border\":\"\\u6846\\u7ebf\",\"Border color\":\"\\u6846\\u7ebf\\u989c\\u8272\",\"Border style\":\"\\u8fb9\\u6846\\u6837\\u5f0f\",\"Border width\":\"\\u8fb9\\u6846\\u5bbd\\u5ea6\",\"Bottom\":\"\\u4e0b\\u65b9\\u5bf9\\u9f50\",\"Browse files\":\"\\u6d4f\\u89c8\\u6587\\u4ef6\",\"Browse for an image\":\"\\u6d4f\\u89c8\\u56fe\\u7247\",\"Browse links\":\"\\u6d4f\\u89c8\\u94fe\\u63a5\",\"Bullet list\":\"\\u65e0\\u5e8f\\u5217\\u8868\",\"Cancel\":\"\\u53d6\\u6d88\",\"Caption\":\"\\u6807\\u9898\",\"Cell\":\"\\u5355\\u5143\\u683c\",\"Cell padding\":\"\\u5355\\u5143\\u683c\\u5185\\u8fb9\\u8ddd\",\"Cell properties\":\"\\u5355\\u5143\\u683c\\u5c5e\\u6027\",\"Cell spacing\":\"\\u5355\\u5143\\u683c\\u5916\\u95f4\\u8ddd\",\"Cell styles\":\"\\u5355\\u5143\\u683c\\u6837\\u5f0f\",\"Cell type\":\"\\u50a8\\u5b58\\u683c\\u522b\",\"Center\":\"\\u5c45\\u4e2d\",\"Characters\":\"\\u5b57\\u7b26\",\"Characters (no spaces)\":\"\\u5b57\\u7b26(\\u65e0\\u7a7a\\u683c)\",\"Circle\":\"\\u7a7a\\u5fc3\\u5706\",\"Class\":\"\\u7c7b\\u578b\",\"Clear formatting\":\"\\u6e05\\u9664\\u683c\\u5f0f\",\"Close\":\"\\u5173\\u95ed\",\"Code\":\"\\u4ee3\\u7801\",\"Code sample...\":\"\\u793a\\u4f8b\\u4ee3\\u7801...\",\"Code view\":\"\\u4ee3\\u7801\\u89c6\\u56fe\",\"Color Picker\":\"\\u9009\\u8272\\u5668\",\"Color swatch\":\"\\u989c\\u8272\\u6837\\u672c\",\"Cols\":\"\\u5217\",\"Column\":\"\\u5217\",\"Column clipboard actions\":\"\\u5217\\u526a\\u8d34\\u677f\\u64cd\\u4f5c\",\"Column group\":\"\\u5217\\u7ec4\",\"Column header\":\"\\u5217\\u6807\\u9898\",\"Constrain proportions\":\"\\u4fdd\\u6301\\u6bd4\\u4f8b\",\"Copy\":\"\\u590d\\u5236\",\"Copy column\":\"\\u590d\\u5236\\u5217\",\"Copy row\":\"\\u590d\\u5236\\u884c\",\"Could not find the specified string.\":\"\\u672a\\u627e\\u5230\\u641c\\u7d22\\u5185\\u5bb9\\u3002\",\"Could not load emojis\":\"\\u65e0\\u6cd5\\u52a0\\u8f7d\\u8868\\u60c5\",\"Count\":\"\\u8ba1\\u6570\",\"Currency\":\"\\u8d27\\u5e01\",\"Current window\":\"\\u5f53\\u524d\\u7a97\\u53e3\",\"Custom color\":\"\\u81ea\\u5b9a\\u4e49\\u989c\\u8272\",\"Custom...\":\"\\u81ea\\u5b9a\\u4e49......\",\"Cut\":\"Cut\",\"Cut column\":\"\\u526a\\u5207\\u5217\",\"Cut row\":\"\\u526a\\u5207\\u884c\",\"Dark Blue\":\"\\u6df1\\u84dd\\u8272\",\"Dark Gray\":\"\\u6df1\\u7070\\u8272\",\"Dark Green\":\"\\u6df1\\u7eff\\u8272\",\"Dark Orange\":\"\\u6df1\\u6a59\\u8272\",\"Dark Purple\":\"\\u6df1\\u7d2b\\u8272\",\"Dark Red\":\"\\u6df1\\u7ea2\\u8272\",\"Dark Turquoise\":\"\\u6df1\\u84dd\\u7eff\\u8272\",\"Dark Yellow\":\"\\u6697\\u9ec4\\u8272\",\"Dashed\":\"\\u865a\\u7ebf\",\"Date/time\":\"\\u65e5\\u671f/\\u65f6\\u95f4\",\"Decrease indent\":\"\\u51cf\\u5c11\\u7f29\\u8fdb\",\"Default\":\"\\u9884\\u8bbe\",\"Delete accordion\":\"\\u5220\\u9664\\u6298\\u53e0\\u9762\\u677f\",\"Delete column\":\"\\u5220\\u9664\\u5217\",\"Delete row\":\"\\u5220\\u9664\\u884c\",\"Delete table\":\"\\u5220\\u9664\\u8868\\u683c\",\"Dimensions\":\"\\u5c3a\\u5bf8\",\"Disc\":\"\\u5b9e\\u5fc3\\u5706\",\"Div\":\"Div\",\"Document\":\"\\u6587\\u6863\",\"Dotted\":\"\\u865a\\u7ebf\",\"Double\":\"\\u53cc\\u7cbe\\u5ea6\",\"Drop an image here\":\"\\u62d6\\u653e\\u4e00\\u5f20\\u56fe\\u50cf\\u81f3\\u6b64\",\"Dropped file type is not supported\":\"\\u6b64\\u6587\\u4ef6\\u7c7b\\u578b\\u4e0d\\u652f\\u6301\\u62d6\\u653e\",\"Edit\":\"\\u7f16\\u8f91\",\"Embed\":\"\\u5185\\u5d4c\",\"Emojis\":\"\\u8868\\u60c5\\u7b26\\u53f7\",\"Emojis...\":\"Emojis...\",\"Error\":\"\\u9519\\u8bef\",\"Error: Form submit field collision.\":\"\\u9519\\u8bef: \\u8868\\u5355\\u63d0\\u4ea4\\u5b57\\u6bb5\\u51b2\\u7a81\\u3002\",\"Error: No form element found.\":\"\\u9519\\u8bef: \\u6ca1\\u6709\\u8868\\u5355\\u63a7\\u4ef6\\u3002\",\"Extended Latin\":\"\\u62c9\\u4e01\\u8bed\\u6269\\u5145\",\"Failed to initialize plugin: {0}\":\"\\u63d2\\u4ef6\\u521d\\u59cb\\u5316\\u5931\\u8d25: {0}\",\"Failed to load plugin url: {0}\":\"\\u63d2\\u4ef6\\u52a0\\u8f7d\\u5931\\u8d25 \\u94fe\\u63a5: {0}\",\"Failed to load plugin: {0} from url {1}\":\"\\u63d2\\u4ef6\\u52a0\\u8f7d\\u5931\\u8d25: {0} \\u6765\\u81ea\\u94fe\\u63a5 {1}\",\"Failed to upload image: {0}\":\"\\u56fe\\u7247\\u4e0a\\u4f20\\u5931\\u8d25: {0}\",\"File\":\"\\u6587\\u4ef6\",\"Find\":\"\\u5bfb\\u627e\",\"Find (if searchreplace plugin activated)\":\"\\u67e5\\u627e(\\u5982\\u679c\\u67e5\\u627e\\u66ff\\u6362\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Find and Replace\":\"\\u67e5\\u627e\\u548c\\u66ff\\u6362\",\"Find and replace...\":\"\\u67e5\\u627e\\u5e76\\u66ff\\u6362...\",\"Find in selection\":\"\\u5728\\u9009\\u533a\\u4e2d\\u67e5\\u627e\",\"Find whole words only\":\"\\u5168\\u5b57\\u5339\\u914d\",\"Flags\":\"\\u65d7\\u5e1c\",\"Focus to contextual toolbar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u4e0a\\u4e0b\\u6587\\u83dc\\u5355\",\"Focus to element path\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u5143\\u7d20\\u8def\\u5f84\",\"Focus to menubar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u83dc\\u5355\\u680f\",\"Focus to toolbar\":\"\\u79fb\\u52a8\\u7126\\u70b9\\u5230\\u5de5\\u5177\\u680f\",\"Font\":\"\\u5b57\\u4f53\",\"Font size {0}\":\"\\u5b57\\u4f53\\u5927\\u5c0f{0}\",\"Font sizes\":\"\\u5b57\\u4f53\\u5927\\u5c0f\",\"Font {0}\":\"\\u5b57\\u4f53{0}\",\"Fonts\":\"\\u5b57\\u4f53\",\"Food and Drink\":\"\\u98df\\u7269\\u548c\\u996e\\u54c1\",\"Footer\":\"\\u8868\\u5c3e\",\"Format\":\"\\u683c\\u5f0f\",\"Format {0}\":\"\\u683c\\u5f0f{0}\",\"Formats\":\"\\u683c\\u5f0f\",\"Fullscreen\":\"\\u5168\\u5c4f\",\"G\":\"G\",\"General\":\"\\u4e00\\u822c\",\"Gray\":\"\\u7070\\u8272\",\"Green\":\"\\u7eff\\u8272\",\"Green component\":\"\\u7eff\\u8272\\u90e8\\u5206\",\"Groove\":\"\\u51f9\\u69fd\",\"Handy Shortcuts\":\"\\u5feb\\u6377\\u952e\",\"Header\":\"\\u8868\\u5934\",\"Header cell\":\"\\u8868\\u5934\\u5355\\u5143\\u683c\",\"Heading 1\":\"\\u4e00\\u7ea7\\u6807\\u9898\",\"Heading 2\":\"\\u4e8c\\u7ea7\\u6807\\u9898\",\"Heading 3\":\"\\u4e09\\u7ea7\\u6807\\u9898\",\"Heading 4\":\"\\u56db\\u7ea7\\u6807\\u9898\",\"Heading 5\":\"\\u4e94\\u7ea7\\u6807\\u9898\",\"Heading 6\":\"\\u516d\\u7ea7\\u6807\\u9898\",\"Headings\":\"\\u6807\\u9898\",\"Height\":\"\\u9ad8\\u5ea6\",\"Help\":\"\\u5e2e\\u52a9\",\"Hex color code\":\"\\u5341\\u516d\\u8fdb\\u5236\\u989c\\u8272\\u4ee3\\u7801\",\"Hidden\":\"\\u9690\\u85cf\",\"Horizontal align\":\"\\u6c34\\u5e73\\u5bf9\\u9f50\",\"Horizontal line\":\"\\u6c34\\u5e73\\u5206\\u5272\\u7ebf\",\"Horizontal space\":\"\\u6c34\\u5e73\\u95f4\\u8ddd\",\"ID\":\"ID\",\"ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\":\"ID\\u5e94\\u8be5\\u4ee5\\u82f1\\u6587\\u5b57\\u6bcd\\u5f00\\u5934\\uff0c\\u540e\\u9762\\u53ea\\u80fd\\u6709\\u82f1\\u6587\\u5b57\\u6bcd\\u3001\\u6570\\u5b57\\u3001\\u7834\\u6298\\u53f7\\u3001\\u70b9\\u3001\\u5192\\u53f7\\u6216\\u4e0b\\u5212\\u7ebf\\u3002\",\"Image is decorative\":\"\\u56fe\\u50cf\\u662f\\u88c5\\u9970\\u6027\\u7684\",\"Image list\":\"\\u56fe\\u7247\\u6e05\\u5355\",\"Image title\":\"\\u56fe\\u7247\\u6807\\u9898\",\"Image...\":\"\\u56fe\\u7247...\",\"ImageProxy HTTP error: Could not find Image Proxy\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u65e0\\u6cd5\\u627e\\u5230\\u56fe\\u7247\\u4ee3\\u7406\",\"ImageProxy HTTP error: Incorrect Image Proxy URL\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u56fe\\u7247\\u4ee3\\u7406\\u5730\\u5740\\u9519\\u8bef\",\"ImageProxy HTTP error: Rejected request\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u8bf7\\u6c42\\u88ab\\u62d2\\u7edd\",\"ImageProxy HTTP error: Unknown ImageProxy error\":\"\\u56fe\\u7247\\u4ee3\\u7406\\u8bf7\\u6c42\\u9519\\u8bef\\uff1a\\u672a\\u77e5\\u7684\\u56fe\\u7247\\u4ee3\\u7406\\u9519\\u8bef\",\"Increase indent\":\"\\u589e\\u52a0\\u7f29\\u8fdb\",\"Inline\":\"\\u6587\\u672c\",\"Insert\":\"\\u63d2\\u5165\",\"Insert Template\":\"\\u63d2\\u5165\\u6a21\\u677f\",\"Insert accordion\":\"\\u63d2\\u5165\\u6298\\u53e0\\u9762\\u677f\",\"Insert column after\":\"\\u5728\\u53f3\\u4fa7\\u63d2\\u5165\\u5217\",\"Insert column before\":\"\\u5728\\u5de6\\u4fa7\\u63d2\\u5165\\u5217\",\"Insert date/time\":\"\\u63d2\\u5165\\u65e5\\u671f/\\u65f6\\u95f4\",\"Insert image\":\"\\u63d2\\u5165\\u56fe\\u7247\",\"Insert link (if link plugin activated)\":\"\\u63d2\\u5165\\u94fe\\u63a5 (\\u5982\\u679c\\u94fe\\u63a5\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Insert row after\":\"\\u5728\\u4e0b\\u65b9\\u63d2\\u5165\\u884c\",\"Insert row before\":\"\\u5728\\u4e0a\\u65b9\\u63d2\\u5165\\u884c\",\"Insert table\":\"\\u63d2\\u5165\\u8868\\u683c\",\"Insert template...\":\"\\u63d2\\u5165\\u6a21\\u677f...\",\"Insert video\":\"\\u63d2\\u5165\\u89c6\\u9891\",\"Insert/Edit code sample\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u4ee3\\u7801\\u793a\\u4f8b\",\"Insert/edit image\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u56fe\\u7247\",\"Insert/edit link\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u94fe\\u63a5\",\"Insert/edit media\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u5a92\\u4f53\",\"Insert/edit video\":\"\\u63d2\\u5165/\\u7f16\\u8f91\\u89c6\\u9891\",\"Inset\":\"\\u5d4c\\u5165\",\"Invalid hex color code: {0}\":\"\\u5341\\u516d\\u8fdb\\u5236\\u989c\\u8272\\u4ee3\\u7801\\u65e0\\u6548\\uff1a {0}\",\"Invalid input\":\"\\u65e0\\u6548\\u8f93\\u5165\",\"Italic\":\"\\u659c\\u4f53\",\"Justify\":\"\\u4e24\\u7aef\\u5bf9\\u9f50\",\"Keyboard Navigation\":\"\\u952e\\u76d8\\u6307\\u5f15\",\"Language\":\"\\u8bed\\u8a00\",\"Learn more...\":\"\\u4e86\\u89e3\\u66f4\\u591a...\",\"Left\":\"\\u5de6\",\"Left to right\":\"\\u7531\\u5de6\\u5230\\u53f3\",\"Light Blue\":\"\\u6d45\\u84dd\\u8272\",\"Light Gray\":\"\\u6d45\\u7070\\u8272\",\"Light Green\":\"\\u6d45\\u7eff\\u8272\",\"Light Purple\":\"\\u6d45\\u7d2b\\u8272\",\"Light Red\":\"\\u6d45\\u7ea2\\u8272\",\"Light Yellow\":\"\\u6d45\\u9ec4\\u8272\",\"Line height\":\"Line height\",\"Link list\":\"\\u94fe\\u63a5\\u6e05\\u5355\",\"Link...\":\"\\u94fe\\u63a5...\",\"List Properties\":\"\\u5217\\u8868\\u5c5e\\u6027\",\"List properties...\":\"\\u6807\\u9898\\u5b57\\u4f53\\u5c5e\\u6027\",\"Loading emojis...\":\"\\u6b63\\u5728\\u52a0\\u8f7dEmojis...\",\"Loading...\":\"\\u52a0\\u8f7d\\u4e2d...\",\"Lower Alpha\":\"\\u5c0f\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\"Lower Greek\":\"\\u5c0f\\u5199\\u5e0c\\u814a\\u5b57\\u6bcd\",\"Lower Roman\":\"\\u5c0f\\u5199\\u7f57\\u9a6c\\u6570\\u5b57\",\"Match case\":\"\\u5927\\u5c0f\\u5199\\u5339\\u914d\",\"Mathematical\":\"\\u6570\\u5b66\",\"Media poster (Image URL)\":\"\\u5c01\\u9762(\\u56fe\\u7247\\u5730\\u5740)\",\"Media...\":\"\\u591a\\u5a92\\u4f53...\",\"Medium Blue\":\"\\u4e2d\\u84dd\\u8272\",\"Medium Gray\":\"\\u4e2d\\u7070\\u8272\",\"Medium Purple\":\"\\u4e2d\\u7d2b\\u8272\",\"Merge cells\":\"\\u5408\\u5e76\\u5355\\u5143\\u683c\",\"Middle\":\"\\u5c45\\u4e2d\\u5bf9\\u9f50\",\"Midnight Blue\":\"\\u6df1\\u84dd\\u8272\",\"More...\":\"\\u66f4\\u591a...\",\"Name\":\"\\u540d\\u79f0\",\"Navy Blue\":\"\\u6d77\\u519b\\u84dd\",\"New document\":\"\\u65b0\\u5efa\\u6587\\u6863\",\"New window\":\"\\u65b0\\u7a97\\u53e3\",\"Next\":\"\\u4e0b\\u4e00\\u4e2a\",\"No\":\"\\u5426\",\"No alignment\":\"\\u672a\\u5bf9\\u9f50\",\"No color\":\"\\u65e0\",\"Nonbreaking space\":\"\\u4e0d\\u95f4\\u65ad\\u7a7a\\u683c\",\"None\":\"\\u65e0\",\"Numbered list\":\"\\u6709\\u5e8f\\u5217\\u8868\",\"OR\":\"\\u6216\",\"Objects\":\"\\u7269\\u4ef6\",\"Ok\":\"\\u786e\\u5b9a\",\"Open help dialog\":\"\\u6253\\u5f00\\u5e2e\\u52a9\\u5bf9\\u8bdd\\u6846\",\"Open link\":\"\\u6253\\u5f00\\u94fe\\u63a5\",\"Open link in...\":\"\\u94fe\\u63a5\\u6253\\u5f00\\u4f4d\\u7f6e...\",\"Open popup menu for split buttons\":\"\\u6253\\u5f00\\u5f39\\u51fa\\u5f0f\\u83dc\\u5355\\uff0c\\u7528\\u4e8e\\u62c6\\u5206\\u6309\\u94ae\",\"Orange\":\"\\u6a59\\u8272\",\"Outset\":\"\\u5916\\u7f6e\",\"Page break\":\"\\u5206\\u9875\\u7b26\",\"Paragraph\":\"\\u6bb5\\u843d\",\"Paste\":\"\\u7c98\\u8d34\",\"Paste as text\":\"\\u7c98\\u8d34\\u4e3a\\u6587\\u672c\",\"Paste column after\":\"\\u7c98\\u8d34\\u540e\\u9762\\u7684\\u5217\",\"Paste column before\":\"\\u7c98\\u8d34\\u6b64\\u5217\\u524d\",\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\":\"\\u5f53\\u524d\\u4e3a\\u7eaf\\u6587\\u672c\\u7c98\\u8d34\\u6a21\\u5f0f\\uff0c\\u518d\\u6b21\\u70b9\\u51fb\\u53ef\\u4ee5\\u56de\\u5230\\u666e\\u901a\\u7c98\\u8d34\\u6a21\\u5f0f\\u3002\",\"Paste or type a link\":\"\\u7c98\\u8d34\\u6216\\u8f93\\u5165\\u94fe\\u63a5\",\"Paste row after\":\"\\u7c98\\u8d34\\u884c\\u5230\\u4e0b\\u65b9\",\"Paste row before\":\"\\u7c98\\u8d34\\u884c\\u5230\\u4e0a\\u65b9\",\"Paste your embed code below:\":\"\\u5c06\\u5185\\u5d4c\\u4ee3\\u7801\\u7c98\\u8d34\\u5728\\u4e0b\\u9762:\",\"People\":\"\\u4eba\\u7c7b\",\"Plugins\":\"\\u63d2\\u4ef6\",\"Plugins installed ({0}):\":\"\\u5df2\\u5b89\\u88c5\\u63d2\\u4ef6 ({0}):\",\"Powered by {0}\":\"\\u7531{0}\\u9a71\\u52a8\",\"Pre\":\"\\u524d\\u8a00\",\"Preferences\":\"\\u9996\\u9009\\u9879\",\"Preformatted\":\"\\u9884\\u5148\\u683c\\u5f0f\\u5316\\u7684\",\"Premium plugins:\":\"\\u4f18\\u79c0\\u63d2\\u4ef6\\uff1a\",\"Press the Up and Down arrow keys to resize the editor.\":\"\\u6309\\u4e0a\\u4e0b\\u7bad\\u5934\\u952e\\u4ee5\\u8c03\\u6574\\u7f16\\u8f91\\u5668\\u5927\\u5c0f\\u3002\",\"Press the arrow keys to resize the editor.\":\"\\u6309\\u7bad\\u5934\\u952e\\u4ee5\\u8c03\\u6574\\u7f16\\u8f91\\u5668\\u5927\\u5c0f\\u3002\",\"Press {0} for help\":\"\\u6309 {0} \\u83b7\\u5f97\\u5e2e\\u52a9\",\"Preview\":\"\\u9884\\u89c8\",\"Previous\":\"\\u4e0a\\u4e00\\u4e2a\",\"Print\":\"\\u6253\\u5370\",\"Print...\":\"\\u6253\\u5370...\",\"Purple\":\"\\u7d2b\\u8272\",\"Quotations\":\"\\u5f15\\u7528\",\"R\":\"R\",\"Range 0 to 255\":\"\\u8303\\u56f40\\u81f3255\",\"Red\":\"\\u7ea2\\u8272\",\"Red component\":\"\\u7ea2\\u8272\\u90e8\\u5206\",\"Redo\":\"\\u91cd\\u505a\",\"Remove\":\"\\u79fb\\u9664\",\"Remove color\":\"\\u79fb\\u9664\\u989c\\u8272\",\"Remove link\":\"\\u79fb\\u9664\\u94fe\\u63a5\",\"Replace\":\"\\u66ff\\u6362\",\"Replace all\":\"\\u66ff\\u6362\\u5168\\u90e8\",\"Replace with\":\"\\u66ff\\u6362\\u4e3a\",\"Resize\":\"\\u8c03\\u6574\\u5927\\u5c0f\",\"Restore last draft\":\"\\u6062\\u590d\\u4e0a\\u6b21\\u7684\\u8349\\u7a3f\",\"Reveal or hide additional toolbar items\":\"\\u663e\\u793a\\u6216\\u9690\\u85cf\\u5176\\u4ed6\\u5de5\\u5177\\u680f\\u9879\",\"Rich Text Area\":\"\\u5bcc\\u6587\\u672c\\u533a\\u57df\",\"Rich Text Area. Press ALT-0 for help.\":\"\\u7f16\\u8f91\\u533a\\u3002\\u6309Alt+0\\u952e\\u6253\\u5f00\\u5e2e\\u52a9\\u3002\",\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\":\"\\u7f16\\u8f91\\u533a\\u3002\\u6309ALT-F9\\u6253\\u5f00\\u83dc\\u5355\\uff0c\\u6309ALT-F10\\u6253\\u5f00\\u5de5\\u5177\\u680f\\uff0c\\u6309ALT-0\\u67e5\\u770b\\u5e2e\\u52a9\",\"Ridge\":\"\\u6d77\\u810a\\u5ea7\",\"Right\":\"\\u53f3\",\"Right to left\":\"\\u7531\\u53f3\\u5230\\u5de6\",\"Row\":\"\\u884c\",\"Row clipboard actions\":\"\\u884c\\u526a\\u8d34\\u677f\\u64cd\\u4f5c\",\"Row group\":\"\\u884c\\u7ec4\",\"Row header\":\"\\u884c\\u5934\",\"Row properties\":\"\\u884c\\u5c5e\\u6027\",\"Row type\":\"\\u884c\\u7c7b\\u578b\",\"Rows\":\"\\u884c\\u6570\",\"Save\":\"\\u4fdd\\u5b58\",\"Save (if save plugin activated)\":\"\\u4fdd\\u5b58(\\u5982\\u679c\\u4fdd\\u5b58\\u63d2\\u4ef6\\u5df2\\u6fc0\\u6d3b)\",\"Scope\":\"\\u8303\\u56f4\",\"Search\":\"\\u641c\\u7d22\",\"Select all\":\"\\u5168\\u9009\",\"Select...\":\"\\u9009\\u62e9...\",\"Selection\":\"\\u9009\\u62e9\",\"Shortcut\":\"\\u5feb\\u6377\\u65b9\\u5f0f\",\"Show blocks\":\"\\u663e\\u793a\\u533a\\u5757\\u8fb9\\u6846\",\"Show caption\":\"\\u663e\\u793a\\u6807\\u9898\",\"Show invisible characters\":\"\\u663e\\u793a\\u4e0d\\u53ef\\u89c1\\u5b57\\u7b26\",\"Size\":\"\\u5b57\\u53f7\",\"Solid\":\"\\u5b9e\\u7ebf\",\"Source\":\"\\u5730\\u5740\",\"Source code\":\"\\u6e90\\u4ee3\\u7801\",\"Special Character\":\"\\u7279\\u6b8a\\u5b57\\u7b26\",\"Special character...\":\"\\u7279\\u6b8a\\u5b57\\u7b26...\",\"Split cell\":\"\\u62c6\\u5206\\u5355\\u5143\\u683c\",\"Square\":\"\\u5b9e\\u5fc3\\u65b9\\u5757\",\"Start list at number\":\"\\u4ee5\\u6570\\u5b57\\u5f00\\u59cb\\u5217\\u8868\",\"Strikethrough\":\"\\u5220\\u9664\\u7ebf\",\"Style\":\"\\u6837\\u5f0f\",\"Subscript\":\"\\u4e0b\\u6807\",\"Superscript\":\"\\u4e0a\\u6807\",\"Switch to or from fullscreen mode\":\"\\u5207\\u6362\\u5168\\u5c4f\\u6a21\\u5f0f\",\"Symbols\":\"\\u7b26\\u53f7\",\"System Font\":\"\\u7cfb\\u7edf\\u5b57\\u4f53\",\"Table\":\"\\u8868\\u683c\",\"Table caption\":\"\\u8868\\u683c\\u6807\\u9898\",\"Table properties\":\"\\u8868\\u683c\\u5c5e\\u6027\",\"Table styles\":\"\\u8868\\u683c\\u6837\\u5f0f\",\"Template\":\"\\u6a21\\u677f\",\"Templates\":\"\\u6a21\\u677f\",\"Text\":\"\\u6587\\u5b57\",\"Text color\":\"\\u5b57\\u4f53\\u989c\\u8272\",\"Text color {0}\":\"\\u5b57\\u4f53\\u989c\\u8272 {0}\",\"Text to display\":\"\\u8981\\u663e\\u793a\\u7684\\u6587\\u672c\",\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\":\"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u4e3a\\u90ae\\u4ef6\\u5730\\u5740\\uff0c\\u9700\\u8981\\u52a0\\u4e0amailto: \\u524d\\u7f00\\u5417\\uff1f\",\"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?\":\"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u5c5e\\u4e8e\\u5916\\u90e8\\u94fe\\u63a5\\uff0c\\u9700\\u8981\\u52a0\\u4e0ahttp:// \\u524d\\u7f00\\u5417\\uff1f\",\"The URL you entered seems to be an external link. Do you want to add the required https:// prefix?\":\"\\u60a8\\u8f93\\u5165\\u7684 URL \\u4f3c\\u4e4e\\u662f\\u4e00\\u4e2a\\u5916\\u90e8\\u94fe\\u63a5\\u3002\\u60a8\\u60f3\\u6dfb\\u52a0\\u6240\\u9700\\u7684 https:// \\u524d\\u7f00\\u5417\\uff1f\",\"Title\":\"\\u6807\\u9898\",\"To open the popup, press Shift+Enter\":\"\\u6309Shitf+Enter\\u952e\\u6253\\u5f00\\u5bf9\\u8bdd\\u6846\",\"Toggle accordion\":\"\\u5207\\u6362\\u6298\\u53e0\\u9762\\u677f\",\"Tools\":\"\\u5de5\\u5177\",\"Top\":\"\\u4e0a\\u65b9\\u5bf9\\u9f50\",\"Travel and Places\":\"\\u65c5\\u6e38\\u548c\\u5730\\u70b9\",\"Turquoise\":\"Turquoise\",\"Underline\":\"\\u4e0b\\u5212\\u7ebf\",\"Undo\":\"\\u6062\\u590d\",\"Upload\":\"\\u4e0a\\u4f20\",\"Uploading image\":\"\\u4e0a\\u4f20\\u56fe\\u7247\",\"Upper Alpha\":\"\\u5927\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\"Upper Roman\":\"\\u5927\\u5199\\u7f57\\u9a6c\\u6570\\u5b57\",\"Url\":\"\\u5730\\u5740\",\"User Defined\":\"\\u81ea\\u5b9a\\u4e49\",\"Valid\":\"\\u6709\\u6548\",\"Version\":\"\\u7248\\u672c\",\"Vertical align\":\"\\u5782\\u76f4\\u5bf9\\u9f50\",\"Vertical space\":\"\\u5782\\u76f4\\u95f4\\u8ddd\",\"View\":\"\\u67e5\\u770b\",\"Visual aids\":\"\\u7f51\\u683c\\u7ebf\",\"Warn\":\"\\u8b66\\u544a\",\"White\":\"\\u767d\\u8272\",\"Width\":\"\\u5bbd\\u5ea6\",\"Word count\":\"\\u5b57\\u6570\",\"Words\":\"\\u5355\\u8bcd\",\"Words: {0}\":\"\\u5b57\\u6570\\uff1a{0}\",\"Yellow\":\"\\u9ec4\\u8272\",\"Yes\":\"\\u662f\",\"You are using {0}\":\"\\u4f60\\u6b63\\u5728\\u4f7f\\u7528 {0}\",\"You have unsaved changes are you sure you want to navigate away?\":\"\\u4f60\\u8fd8\\u6709\\u6587\\u6863\\u5c1a\\u672a\\u4fdd\\u5b58\\uff0c\\u786e\\u5b9a\\u8981\\u79bb\\u5f00\\uff1f\",\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.\":\"\\u4f60\\u7684\\u6d4f\\u89c8\\u5668\\u4e0d\\u652f\\u6301\\u6253\\u5f00\\u526a\\u8d34\\u677f\\uff0c\\u8bf7\\u4f7f\\u7528Ctrl+X/C/V\\u7b49\\u5feb\\u6377\\u952e\\u3002\",\"alignment\":\"\\u5bf9\\u9f50\",\"austral sign\":\"\\u6fb3\\u5143\\u7b26\\u53f7\",\"cedi sign\":\"\\u585e\\u5730\\u7b26\\u53f7\",\"colon sign\":\"\\u5192\\u53f7\",\"cruzeiro sign\":\"\\u514b\\u9c81\\u8d5b\\u7f57\\u5e01\\u7b26\\u53f7\",\"currency sign\":\"\\u8d27\\u5e01\\u7b26\\u53f7\",\"dollar sign\":\"\\u7f8e\\u5143\\u7b26\\u53f7\",\"dong sign\":\"\\u8d8a\\u5357\\u76fe\\u7b26\\u53f7\",\"drachma sign\":\"\\u5fb7\\u62c9\\u514b\\u9a6c\\u7b26\\u53f7\",\"euro-currency sign\":\"\\u6b27\\u5143\\u7b26\\u53f7\",\"example\":\"\\u793a\\u4f8b\",\"formatting\":\"\\u683c\\u5f0f\\u5316\",\"french franc sign\":\"\\u6cd5\\u90ce\\u7b26\\u53f7\",\"german penny symbol\":\"\\u5fb7\\u56fd\\u4fbf\\u58eb\\u7b26\\u53f7\",\"guarani sign\":\"\\u74dc\\u62c9\\u5c3c\\u7b26\\u53f7\",\"history\":\"\\u5386\\u53f2\",\"hryvnia sign\":\"\\u683c\\u91cc\\u592b\\u5c3c\\u4e9a\\u7b26\\u53f7\",\"indentation\":\"\\u7f29\\u8fdb\",\"indian rupee sign\":\"\\u5370\\u5ea6\\u5362\\u6bd4\",\"kip sign\":\"\\u8001\\u631d\\u57fa\\u666e\\u7b26\\u53f7\",\"lira sign\":\"\\u91cc\\u62c9\\u7b26\\u53f7\",\"livre tournois sign\":\"\\u91cc\\u5f17\\u5f17\\u5c14\\u7b26\\u53f7\",\"manat sign\":\"\\u9a6c\\u7eb3\\u7279\\u7b26\\u53f7\",\"mill sign\":\"\\u5bc6\\u5c14\\u7b26\\u53f7\",\"naira sign\":\"\\u5948\\u62c9\\u7b26\\u53f7\",\"new sheqel sign\":\"\\u65b0\\u8c22\\u514b\\u5c14\\u7b26\\u53f7\",\"nordic mark sign\":\"\\u5317\\u6b27\\u9a6c\\u514b\",\"peseta sign\":\"\\u6bd4\\u585e\\u5854\\u7b26\\u53f7\",\"peso sign\":\"\\u6bd4\\u7d22\\u7b26\\u53f7\",\"ruble sign\":\"\\u5362\\u5e03\\u7b26\\u53f7\",\"rupee sign\":\"\\u5362\\u6bd4\\u7b26\\u53f7\",\"spesmilo sign\":\"spesmilo\\u7b26\\u53f7\",\"styles\":\"\\u6837\\u5f0f\",\"tenge sign\":\"\\u575a\\u6208\\u7b26\\u53f7\",\"tugrik sign\":\"\\u56fe\\u683c\\u91cc\\u514b\\u7b26\\u53f7\",\"turkish lira sign\":\"\\u571f\\u8033\\u5176\\u91cc\\u62c9\",\"won sign\":\"\\u97e9\\u5143\\u7b26\\u53f7\",\"yen character\":\"\\u65e5\\u5143\\u5b57\\u6837\",\"yen/yuan character variant one\":\"\\u5143\\u5b57\\u6837\\uff08\\u5927\\u5199\\uff09\",\"yuan character\":\"\\u4eba\\u6c11\\u5e01\\u5143\\u5b57\\u6837\",\"yuan character, in hong kong and taiwan\":\"\\u5143\\u5b57\\u6837\\uff08\\u6e2f\\u53f0\\u5730\\u533a\\uff09\",\"{0} characters\":\"{0} \\u4e2a\\u5b57\\u7b26\",\"{0} columns, {1} rows\":\"{0} \\u5217\\uff0c{1} \\u884c\",\"{0} words\":\"{0} \\u5b57\"});"
  },
  {
    "path": "public/tinymce6.8.6/license.txt",
    "content": "MIT License\n\nCopyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "public/tinymce6.8.6/notices.txt",
    "content": "Below is a list of third party libraries that this software uses:\n----------------------------------------------------------------\n\ndompurify - Patched by Tiny\nowner: Mario Heiderich\nrepo: https://github.com/cure53/DOMPurify\nversion: 3.2.4\nlicense: MPL-2.0 OR Apache-2.0\n\nprismjs\nowner: Lea Verou\nrepo: https://github.com/PrismJS/prism\nversion: 1.25.0\nlicense: MIT\n\n\nprism-themes\nowner: Lea Verou\nrepo: https://github.com/PrismJS/prism-themes\nversion: 1.9.0\nlicense: MIT\n"
  },
  {
    "path": "public/tinymce6.8.6/plugins/emoticons/js/emojiimages.js",
    "content": "window.tinymce.Resource.add(\"tinymce.plugins.emoticons\",{100:{keywords:[\"score\",\"perfect\",\"numbers\",\"century\",\"exam\",\"quiz\",\"test\",\"pass\",\"hundred\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💯\" src=\"1f4af.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},1234:{keywords:[\"numbers\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔢\" src=\"1f522.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},grinning:{keywords:[\"face\",\"smile\",\"happy\",\"joy\",\":D\",\"grin\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😀\" src=\"1f600.png\"/>',fitzpatrick_scale:false,category:\"people\"},grimacing:{keywords:[\"face\",\"grimace\",\"teeth\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😬\" src=\"1f62c.png\"/>',fitzpatrick_scale:false,category:\"people\"},grin:{keywords:[\"face\",\"happy\",\"smile\",\"joy\",\"kawaii\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😁\" src=\"1f601.png\"/>',fitzpatrick_scale:false,category:\"people\"},joy:{keywords:[\"face\",\"cry\",\"tears\",\"weep\",\"happy\",\"happytears\",\"haha\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😂\" src=\"1f602.png\"/>',fitzpatrick_scale:false,category:\"people\"},rofl:{keywords:[\"face\",\"rolling\",\"floor\",\"laughing\",\"lol\",\"haha\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤣\" src=\"1f923.png\"/>',fitzpatrick_scale:false,category:\"people\"},partying:{keywords:[\"face\",\"celebration\",\"woohoo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥳\" src=\"1f973.png\"/>',fitzpatrick_scale:false,category:\"people\"},smiley:{keywords:[\"face\",\"happy\",\"joy\",\"haha\",\":D\",\":)\",\"smile\",\"funny\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😃\" src=\"1f603.png\"/>',fitzpatrick_scale:false,category:\"people\"},smile:{keywords:[\"face\",\"happy\",\"joy\",\"funny\",\"haha\",\"laugh\",\"like\",\":D\",\":)\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😄\" src=\"1f604.png\"/>',fitzpatrick_scale:false,category:\"people\"},sweat_smile:{keywords:[\"face\",\"hot\",\"happy\",\"laugh\",\"sweat\",\"smile\",\"relief\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😅\" src=\"1f605.png\"/>',fitzpatrick_scale:false,category:\"people\"},laughing:{keywords:[\"happy\",\"joy\",\"lol\",\"satisfied\",\"haha\",\"face\",\"glad\",\"XD\",\"laugh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😆\" src=\"1f606.png\"/>',fitzpatrick_scale:false,category:\"people\"},innocent:{keywords:[\"face\",\"angel\",\"heaven\",\"halo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😇\" src=\"1f607.png\"/>',fitzpatrick_scale:false,category:\"people\"},wink:{keywords:[\"face\",\"happy\",\"mischievous\",\"secret\",\";)\",\"smile\",\"eye\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😉\" src=\"1f609.png\"/>',fitzpatrick_scale:false,category:\"people\"},blush:{keywords:[\"face\",\"smile\",\"happy\",\"flushed\",\"crush\",\"embarrassed\",\"shy\",\"joy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😊\" src=\"1f60a.png\"/>',fitzpatrick_scale:false,category:\"people\"},slightly_smiling_face:{keywords:[\"face\",\"smile\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙂\" src=\"1f642.png\"/>',fitzpatrick_scale:false,category:\"people\"},upside_down_face:{keywords:[\"face\",\"flipped\",\"silly\",\"smile\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙃\" src=\"1f643.png\"/>',fitzpatrick_scale:false,category:\"people\"},relaxed:{keywords:[\"face\",\"blush\",\"massage\",\"happiness\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☺️\" src=\"263a.png\"/>',fitzpatrick_scale:false,category:\"people\"},yum:{keywords:[\"happy\",\"joy\",\"tongue\",\"smile\",\"face\",\"silly\",\"yummy\",\"nom\",\"delicious\",\"savouring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😋\" src=\"1f60b.png\"/>',fitzpatrick_scale:false,category:\"people\"},relieved:{keywords:[\"face\",\"relaxed\",\"phew\",\"massage\",\"happiness\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😌\" src=\"1f60c.png\"/>',fitzpatrick_scale:false,category:\"people\"},heart_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"heart\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😍\" src=\"1f60d.png\"/>',fitzpatrick_scale:false,category:\"people\"},smiling_face_with_three_hearts:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"hearts\",\"adore\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥰\" src=\"1f970.png\"/>',fitzpatrick_scale:false,category:\"people\"},kissing_heart:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😘\" src=\"1f618.png\"/>',fitzpatrick_scale:false,category:\"people\"},kissing:{keywords:[\"love\",\"like\",\"face\",\"3\",\"valentines\",\"infatuation\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😗\" src=\"1f617.png\"/>',fitzpatrick_scale:false,category:\"people\"},kissing_smiling_eyes:{keywords:[\"face\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😙\" src=\"1f619.png\"/>',fitzpatrick_scale:false,category:\"people\"},kissing_closed_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😚\" src=\"1f61a.png\"/>',fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue_winking_eye:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"wink\",\"tongue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😜\" src=\"1f61c.png\"/>',fitzpatrick_scale:false,category:\"people\"},zany:{keywords:[\"face\",\"goofy\",\"crazy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤪\" src=\"1f92a.png\"/>',fitzpatrick_scale:false,category:\"people\"},raised_eyebrow:{keywords:[\"face\",\"distrust\",\"scepticism\",\"disapproval\",\"disbelief\",\"surprise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤨\" src=\"1f928.png\"/>',fitzpatrick_scale:false,category:\"people\"},monocle:{keywords:[\"face\",\"stuffy\",\"wealthy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧐\" src=\"1f9d0.png\"/>',fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue_closed_eyes:{keywords:[\"face\",\"prank\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😝\" src=\"1f61d.png\"/>',fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😛\" src=\"1f61b.png\"/>',fitzpatrick_scale:false,category:\"people\"},money_mouth_face:{keywords:[\"face\",\"rich\",\"dollar\",\"money\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤑\" src=\"1f911.png\"/>',fitzpatrick_scale:false,category:\"people\"},nerd_face:{keywords:[\"face\",\"nerdy\",\"geek\",\"dork\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤓\" src=\"1f913.png\"/>',fitzpatrick_scale:false,category:\"people\"},sunglasses:{keywords:[\"face\",\"cool\",\"smile\",\"summer\",\"beach\",\"sunglass\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😎\" src=\"1f60e.png\"/>',fitzpatrick_scale:false,category:\"people\"},star_struck:{keywords:[\"face\",\"smile\",\"starry\",\"eyes\",\"grinning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤩\" src=\"1f929.png\"/>',fitzpatrick_scale:false,category:\"people\"},clown_face:{keywords:[\"face\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤡\" src=\"1f921.png\"/>',fitzpatrick_scale:false,category:\"people\"},cowboy_hat_face:{keywords:[\"face\",\"cowgirl\",\"hat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤠\" src=\"1f920.png\"/>',fitzpatrick_scale:false,category:\"people\"},hugs:{keywords:[\"face\",\"smile\",\"hug\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤗\" src=\"1f917.png\"/>',fitzpatrick_scale:false,category:\"people\"},smirk:{keywords:[\"face\",\"smile\",\"mean\",\"prank\",\"smug\",\"sarcasm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😏\" src=\"1f60f.png\"/>',fitzpatrick_scale:false,category:\"people\"},no_mouth:{keywords:[\"face\",\"hellokitty\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😶\" src=\"1f636.png\"/>',fitzpatrick_scale:false,category:\"people\"},neutral_face:{keywords:[\"indifference\",\"meh\",\":|\",\"neutral\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😐\" src=\"1f610.png\"/>',fitzpatrick_scale:false,category:\"people\"},expressionless:{keywords:[\"face\",\"indifferent\",\"-_-\",\"meh\",\"deadpan\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😑\" src=\"1f611.png\"/>',fitzpatrick_scale:false,category:\"people\"},unamused:{keywords:[\"indifference\",\"bored\",\"straight face\",\"serious\",\"sarcasm\",\"unimpressed\",\"skeptical\",\"dubious\",\"side_eye\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😒\" src=\"1f612.png\"/>',fitzpatrick_scale:false,category:\"people\"},roll_eyes:{keywords:[\"face\",\"eyeroll\",\"frustrated\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙄\" src=\"1f644.png\"/>',fitzpatrick_scale:false,category:\"people\"},thinking:{keywords:[\"face\",\"hmmm\",\"think\",\"consider\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤔\" src=\"1f914.png\"/>',fitzpatrick_scale:false,category:\"people\"},lying_face:{keywords:[\"face\",\"lie\",\"pinocchio\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤥\" src=\"1f925.png\"/>',fitzpatrick_scale:false,category:\"people\"},hand_over_mouth:{keywords:[\"face\",\"whoops\",\"shock\",\"surprise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤭\" src=\"1f92d.png\"/>',fitzpatrick_scale:false,category:\"people\"},shushing:{keywords:[\"face\",\"quiet\",\"shhh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤫\" src=\"1f92b.png\"/>',fitzpatrick_scale:false,category:\"people\"},symbols_over_mouth:{keywords:[\"face\",\"swearing\",\"cursing\",\"cussing\",\"profanity\",\"expletive\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤬\" src=\"1f92c.png\"/>',fitzpatrick_scale:false,category:\"people\"},exploding_head:{keywords:[\"face\",\"shocked\",\"mind\",\"blown\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤯\" src=\"1f92f.png\"/>',fitzpatrick_scale:false,category:\"people\"},flushed:{keywords:[\"face\",\"blush\",\"shy\",\"flattered\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😳\" src=\"1f633.png\"/>',fitzpatrick_scale:false,category:\"people\"},disappointed:{keywords:[\"face\",\"sad\",\"upset\",\"depressed\",\":(\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😞\" src=\"1f61e.png\"/>',fitzpatrick_scale:false,category:\"people\"},worried:{keywords:[\"face\",\"concern\",\"nervous\",\":(\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😟\" src=\"1f61f.png\"/>',fitzpatrick_scale:false,category:\"people\"},angry:{keywords:[\"mad\",\"face\",\"annoyed\",\"frustrated\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😠\" src=\"1f620.png\"/>',fitzpatrick_scale:false,category:\"people\"},rage:{keywords:[\"angry\",\"mad\",\"hate\",\"despise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😡\" src=\"1f621.png\"/>',fitzpatrick_scale:false,category:\"people\"},pensive:{keywords:[\"face\",\"sad\",\"depressed\",\"upset\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😔\" src=\"1f614.png\"/>',fitzpatrick_scale:false,category:\"people\"},confused:{keywords:[\"face\",\"indifference\",\"huh\",\"weird\",\"hmmm\",\":/\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😕\" src=\"1f615.png\"/>',fitzpatrick_scale:false,category:\"people\"},slightly_frowning_face:{keywords:[\"face\",\"frowning\",\"disappointed\",\"sad\",\"upset\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙁\" src=\"1f641.png\"/>',fitzpatrick_scale:false,category:\"people\"},frowning_face:{keywords:[\"face\",\"sad\",\"upset\",\"frown\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☹\" src=\"2639.png\"/>',fitzpatrick_scale:false,category:\"people\"},persevere:{keywords:[\"face\",\"sick\",\"no\",\"upset\",\"oops\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😣\" src=\"1f623.png\"/>',fitzpatrick_scale:false,category:\"people\"},confounded:{keywords:[\"face\",\"confused\",\"sick\",\"unwell\",\"oops\",\":S\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😖\" src=\"1f616.png\"/>',fitzpatrick_scale:false,category:\"people\"},tired_face:{keywords:[\"sick\",\"whine\",\"upset\",\"frustrated\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😫\" src=\"1f62b.png\"/>',fitzpatrick_scale:false,category:\"people\"},weary:{keywords:[\"face\",\"tired\",\"sleepy\",\"sad\",\"frustrated\",\"upset\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😩\" src=\"1f629.png\"/>',fitzpatrick_scale:false,category:\"people\"},pleading:{keywords:[\"face\",\"begging\",\"mercy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥺\" src=\"1f97a.png\"/>',fitzpatrick_scale:false,category:\"people\"},triumph:{keywords:[\"face\",\"gas\",\"phew\",\"proud\",\"pride\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😤\" src=\"1f624.png\"/>',fitzpatrick_scale:false,category:\"people\"},open_mouth:{keywords:[\"face\",\"surprise\",\"impressed\",\"wow\",\"whoa\",\":O\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😮\" src=\"1f62e.png\"/>',fitzpatrick_scale:false,category:\"people\"},scream:{keywords:[\"face\",\"munch\",\"scared\",\"omg\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😱\" src=\"1f631.png\"/>',fitzpatrick_scale:false,category:\"people\"},fearful:{keywords:[\"face\",\"scared\",\"terrified\",\"nervous\",\"oops\",\"huh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😨\" src=\"1f628.png\"/>',fitzpatrick_scale:false,category:\"people\"},cold_sweat:{keywords:[\"face\",\"nervous\",\"sweat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😰\" src=\"1f630.png\"/>',fitzpatrick_scale:false,category:\"people\"},hushed:{keywords:[\"face\",\"woo\",\"shh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😯\" src=\"1f62f.png\"/>',fitzpatrick_scale:false,category:\"people\"},frowning:{keywords:[\"face\",\"aw\",\"what\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😦\" src=\"1f626.png\"/>',fitzpatrick_scale:false,category:\"people\"},anguished:{keywords:[\"face\",\"stunned\",\"nervous\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😧\" src=\"1f627.png\"/>',fitzpatrick_scale:false,category:\"people\"},cry:{keywords:[\"face\",\"tears\",\"sad\",\"depressed\",\"upset\",\":'(\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😢\" src=\"1f622.png\"/>',fitzpatrick_scale:false,category:\"people\"},disappointed_relieved:{keywords:[\"face\",\"phew\",\"sweat\",\"nervous\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😥\" src=\"1f625.png\"/>',fitzpatrick_scale:false,category:\"people\"},drooling_face:{keywords:[\"face\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤤\" src=\"1f924.png\"/>',fitzpatrick_scale:false,category:\"people\"},sleepy:{keywords:[\"face\",\"tired\",\"rest\",\"nap\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😪\" src=\"1f62a.png\"/>',fitzpatrick_scale:false,category:\"people\"},sweat:{keywords:[\"face\",\"hot\",\"sad\",\"tired\",\"exercise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😓\" src=\"1f613.png\"/>',fitzpatrick_scale:false,category:\"people\"},hot:{keywords:[\"face\",\"feverish\",\"heat\",\"red\",\"sweating\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥵\" src=\"1f975.png\"/>',fitzpatrick_scale:false,category:\"people\"},cold:{keywords:[\"face\",\"blue\",\"freezing\",\"frozen\",\"frostbite\",\"icicles\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥶\" src=\"1f976.png\"/>',fitzpatrick_scale:false,category:\"people\"},sob:{keywords:[\"face\",\"cry\",\"tears\",\"sad\",\"upset\",\"depressed\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😭\" src=\"1f62d.png\"/>',fitzpatrick_scale:false,category:\"people\"},dizzy_face:{keywords:[\"spent\",\"unconscious\",\"xox\",\"dizzy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😵\" src=\"1f635.png\"/>',fitzpatrick_scale:false,category:\"people\"},astonished:{keywords:[\"face\",\"xox\",\"surprised\",\"poisoned\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😲\" src=\"1f632.png\"/>',fitzpatrick_scale:false,category:\"people\"},zipper_mouth_face:{keywords:[\"face\",\"sealed\",\"zipper\",\"secret\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤐\" src=\"1f910.png\"/>',fitzpatrick_scale:false,category:\"people\"},nauseated_face:{keywords:[\"face\",\"vomit\",\"gross\",\"green\",\"sick\",\"throw up\",\"ill\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤢\" src=\"1f922.png\"/>',fitzpatrick_scale:false,category:\"people\"},sneezing_face:{keywords:[\"face\",\"gesundheit\",\"sneeze\",\"sick\",\"allergy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤧\" src=\"1f927.png\"/>',fitzpatrick_scale:false,category:\"people\"},vomiting:{keywords:[\"face\",\"sick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤮\" src=\"1f92e.png\"/>',fitzpatrick_scale:false,category:\"people\"},mask:{keywords:[\"face\",\"sick\",\"ill\",\"disease\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😷\" src=\"1f637.png\"/>',fitzpatrick_scale:false,category:\"people\"},face_with_thermometer:{keywords:[\"sick\",\"temperature\",\"thermometer\",\"cold\",\"fever\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤒\" src=\"1f912.png\"/>',fitzpatrick_scale:false,category:\"people\"},face_with_head_bandage:{keywords:[\"injured\",\"clumsy\",\"bandage\",\"hurt\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤕\" src=\"1f915.png\"/>',fitzpatrick_scale:false,category:\"people\"},woozy:{keywords:[\"face\",\"dizzy\",\"intoxicated\",\"tipsy\",\"wavy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥴\" src=\"1f974.png\"/>',fitzpatrick_scale:false,category:\"people\"},sleeping:{keywords:[\"face\",\"tired\",\"sleepy\",\"night\",\"zzz\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😴\" src=\"1f634.png\"/>',fitzpatrick_scale:false,category:\"people\"},zzz:{keywords:[\"sleepy\",\"tired\",\"dream\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💤\" src=\"1f4a4.png\"/>',fitzpatrick_scale:false,category:\"people\"},poop:{keywords:[\"hankey\",\"shitface\",\"fail\",\"turd\",\"shit\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💩\" src=\"1f4a9.png\"/>',fitzpatrick_scale:false,category:\"people\"},smiling_imp:{keywords:[\"devil\",\"horns\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😈\" src=\"1f608.png\"/>',fitzpatrick_scale:false,category:\"people\"},imp:{keywords:[\"devil\",\"angry\",\"horns\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👿\" src=\"1f47f.png\"/>',fitzpatrick_scale:false,category:\"people\"},japanese_ogre:{keywords:[\"monster\",\"red\",\"mask\",\"halloween\",\"scary\",\"creepy\",\"devil\",\"demon\",\"japanese\",\"ogre\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👹\" src=\"1f479.png\"/>',fitzpatrick_scale:false,category:\"people\"},japanese_goblin:{keywords:[\"red\",\"evil\",\"mask\",\"monster\",\"scary\",\"creepy\",\"japanese\",\"goblin\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👺\" src=\"1f47a.png\"/>',fitzpatrick_scale:false,category:\"people\"},skull:{keywords:[\"dead\",\"skeleton\",\"creepy\",\"death\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💀\" src=\"1f480.png\"/>',fitzpatrick_scale:false,category:\"people\"},ghost:{keywords:[\"halloween\",\"spooky\",\"scary\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👻\" src=\"1f47b.png\"/>',fitzpatrick_scale:false,category:\"people\"},alien:{keywords:[\"UFO\",\"paul\",\"weird\",\"outer_space\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👽\" src=\"1f47d.png\"/>',fitzpatrick_scale:false,category:\"people\"},robot:{keywords:[\"computer\",\"machine\",\"bot\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤖\" src=\"1f916.png\"/>',fitzpatrick_scale:false,category:\"people\"},smiley_cat:{keywords:[\"animal\",\"cats\",\"happy\",\"smile\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😺\" src=\"1f63a.png\"/>',fitzpatrick_scale:false,category:\"people\"},smile_cat:{keywords:[\"animal\",\"cats\",\"smile\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😸\" src=\"1f638.png\"/>',fitzpatrick_scale:false,category:\"people\"},joy_cat:{keywords:[\"animal\",\"cats\",\"haha\",\"happy\",\"tears\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😹\" src=\"1f639.png\"/>',fitzpatrick_scale:false,category:\"people\"},heart_eyes_cat:{keywords:[\"animal\",\"love\",\"like\",\"affection\",\"cats\",\"valentines\",\"heart\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😻\" src=\"1f63b.png\"/>',fitzpatrick_scale:false,category:\"people\"},smirk_cat:{keywords:[\"animal\",\"cats\",\"smirk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😼\" src=\"1f63c.png\"/>',fitzpatrick_scale:false,category:\"people\"},kissing_cat:{keywords:[\"animal\",\"cats\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😽\" src=\"1f63d.png\"/>',fitzpatrick_scale:false,category:\"people\"},scream_cat:{keywords:[\"animal\",\"cats\",\"munch\",\"scared\",\"scream\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙀\" src=\"1f640.png\"/>',fitzpatrick_scale:false,category:\"people\"},crying_cat_face:{keywords:[\"animal\",\"tears\",\"weep\",\"sad\",\"cats\",\"upset\",\"cry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😿\" src=\"1f63f.png\"/>',fitzpatrick_scale:false,category:\"people\"},pouting_cat:{keywords:[\"animal\",\"cats\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"😾\" src=\"1f63e.png\"/>',fitzpatrick_scale:false,category:\"people\"},palms_up:{keywords:[\"hands\",\"gesture\",\"cupped\",\"prayer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤲\" src=\"1f932.png\"/>',fitzpatrick_scale:true,category:\"people\"},raised_hands:{keywords:[\"gesture\",\"hooray\",\"yea\",\"celebration\",\"hands\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙌\" src=\"1f64c.png\"/>',fitzpatrick_scale:true,category:\"people\"},clap:{keywords:[\"hands\",\"praise\",\"applause\",\"congrats\",\"yay\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👏\" src=\"1f44f.png\"/>',fitzpatrick_scale:true,category:\"people\"},wave:{keywords:[\"hands\",\"gesture\",\"goodbye\",\"solong\",\"farewell\",\"hello\",\"hi\",\"palm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👋\" src=\"1f44b.png\"/>',fitzpatrick_scale:true,category:\"people\"},call_me_hand:{keywords:[\"hands\",\"gesture\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤙\" src=\"1f919.png\"/>',fitzpatrick_scale:true,category:\"people\"},\"+1\":{keywords:[\"thumbsup\",\"yes\",\"awesome\",\"good\",\"agree\",\"accept\",\"cool\",\"hand\",\"like\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👍\" src=\"1f44d.png\"/>',fitzpatrick_scale:true,category:\"people\"},\"-1\":{keywords:[\"thumbsdown\",\"no\",\"dislike\",\"hand\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👎\" src=\"1f44e.png\"/>',fitzpatrick_scale:true,category:\"people\"},facepunch:{keywords:[\"angry\",\"violence\",\"fist\",\"hit\",\"attack\",\"hand\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👊\" src=\"1f44a.png\"/>',fitzpatrick_scale:true,category:\"people\"},fist:{keywords:[\"fingers\",\"hand\",\"grasp\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✊\" src=\"270a.png\"/>',fitzpatrick_scale:true,category:\"people\"},fist_left:{keywords:[\"hand\",\"fistbump\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤛\" src=\"1f91b.png\"/>',fitzpatrick_scale:true,category:\"people\"},fist_right:{keywords:[\"hand\",\"fistbump\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤜\" src=\"1f91c.png\"/>',fitzpatrick_scale:true,category:\"people\"},v:{keywords:[\"fingers\",\"ohyeah\",\"hand\",\"peace\",\"victory\",\"two\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✌\" src=\"270c.png\"/>',fitzpatrick_scale:true,category:\"people\"},ok_hand:{keywords:[\"fingers\",\"limbs\",\"perfect\",\"ok\",\"okay\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👌\" src=\"1f44c.png\"/>',fitzpatrick_scale:true,category:\"people\"},raised_hand:{keywords:[\"fingers\",\"stop\",\"highfive\",\"palm\",\"ban\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✋\" src=\"270b.png\"/>',fitzpatrick_scale:true,category:\"people\"},raised_back_of_hand:{keywords:[\"fingers\",\"raised\",\"backhand\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤚\" src=\"1f91a.png\"/>',fitzpatrick_scale:true,category:\"people\"},open_hands:{keywords:[\"fingers\",\"butterfly\",\"hands\",\"open\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👐\" src=\"1f450.png\"/>',fitzpatrick_scale:true,category:\"people\"},muscle:{keywords:[\"arm\",\"flex\",\"hand\",\"summer\",\"strong\",\"biceps\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💪\" src=\"1f4aa.png\"/>',fitzpatrick_scale:true,category:\"people\"},pray:{keywords:[\"please\",\"hope\",\"wish\",\"namaste\",\"highfive\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙏\" src=\"1f64f.png\"/>',fitzpatrick_scale:true,category:\"people\"},foot:{keywords:[\"kick\",\"stomp\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦶\" src=\"1f9b6.png\"/>',fitzpatrick_scale:true,category:\"people\"},leg:{keywords:[\"kick\",\"limb\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦵\" src=\"1f9b5.png\"/>',fitzpatrick_scale:true,category:\"people\"},handshake:{keywords:[\"agreement\",\"shake\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤝\" src=\"1f91d.png\"/>',fitzpatrick_scale:false,category:\"people\"},point_up:{keywords:[\"hand\",\"fingers\",\"direction\",\"up\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☝\" src=\"261d.png\"/>',fitzpatrick_scale:true,category:\"people\"},point_up_2:{keywords:[\"fingers\",\"hand\",\"direction\",\"up\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👆\" src=\"1f446.png\"/>',fitzpatrick_scale:true,category:\"people\"},point_down:{keywords:[\"fingers\",\"hand\",\"direction\",\"down\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👇\" src=\"1f447.png\"/>',fitzpatrick_scale:true,category:\"people\"},point_left:{keywords:[\"direction\",\"fingers\",\"hand\",\"left\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👈\" src=\"1f448.png\"/>',fitzpatrick_scale:true,category:\"people\"},point_right:{keywords:[\"fingers\",\"hand\",\"direction\",\"right\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👉\" src=\"1f449.png\"/>',fitzpatrick_scale:true,category:\"people\"},fu:{keywords:[\"hand\",\"fingers\",\"rude\",\"middle\",\"flipping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖕\" src=\"1f595.png\"/>',fitzpatrick_scale:true,category:\"people\"},raised_hand_with_fingers_splayed:{keywords:[\"hand\",\"fingers\",\"palm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖐\" src=\"1f590.png\"/>',fitzpatrick_scale:true,category:\"people\"},love_you:{keywords:[\"hand\",\"fingers\",\"gesture\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤟\" src=\"1f91f.png\"/>',fitzpatrick_scale:true,category:\"people\"},metal:{keywords:[\"hand\",\"fingers\",\"evil_eye\",\"sign_of_horns\",\"rock_on\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤘\" src=\"1f918.png\"/>',fitzpatrick_scale:true,category:\"people\"},crossed_fingers:{keywords:[\"good\",\"lucky\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤞\" src=\"1f91e.png\"/>',fitzpatrick_scale:true,category:\"people\"},vulcan_salute:{keywords:[\"hand\",\"fingers\",\"spock\",\"star trek\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖖\" src=\"1f596.png\"/>',fitzpatrick_scale:true,category:\"people\"},writing_hand:{keywords:[\"lower_left_ballpoint_pen\",\"stationery\",\"write\",\"compose\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✍\" src=\"270d.png\"/>',fitzpatrick_scale:true,category:\"people\"},selfie:{keywords:[\"camera\",\"phone\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤳\" src=\"1f933.png\"/>',fitzpatrick_scale:true,category:\"people\"},nail_care:{keywords:[\"beauty\",\"manicure\",\"finger\",\"fashion\",\"nail\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💅\" src=\"1f485.png\"/>',fitzpatrick_scale:true,category:\"people\"},lips:{keywords:[\"mouth\",\"kiss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👄\" src=\"1f444.png\"/>',fitzpatrick_scale:false,category:\"people\"},tooth:{keywords:[\"teeth\",\"dentist\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦷\" src=\"1f9b7.png\"/>',fitzpatrick_scale:false,category:\"people\"},tongue:{keywords:[\"mouth\",\"playful\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👅\" src=\"1f445.png\"/>',fitzpatrick_scale:false,category:\"people\"},ear:{keywords:[\"face\",\"hear\",\"sound\",\"listen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👂\" src=\"1f442.png\"/>',fitzpatrick_scale:true,category:\"people\"},nose:{keywords:[\"smell\",\"sniff\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👃\" src=\"1f443.png\"/>',fitzpatrick_scale:true,category:\"people\"},eye:{keywords:[\"face\",\"look\",\"see\",\"watch\",\"stare\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👁\" src=\"1f441.png\"/>',fitzpatrick_scale:false,category:\"people\"},eyes:{keywords:[\"look\",\"watch\",\"stalk\",\"peek\",\"see\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👀\" src=\"1f440.png\"/>',fitzpatrick_scale:false,category:\"people\"},brain:{keywords:[\"smart\",\"intelligent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧠\" src=\"1f9e0.png\"/>',fitzpatrick_scale:false,category:\"people\"},bust_in_silhouette:{keywords:[\"user\",\"person\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👤\" src=\"1f464.png\"/>',fitzpatrick_scale:false,category:\"people\"},busts_in_silhouette:{keywords:[\"user\",\"person\",\"human\",\"group\",\"team\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👥\" src=\"1f465.png\"/>',fitzpatrick_scale:false,category:\"people\"},speaking_head:{keywords:[\"user\",\"person\",\"human\",\"sing\",\"say\",\"talk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗣\" src=\"1f5e3.png\"/>',fitzpatrick_scale:false,category:\"people\"},baby:{keywords:[\"child\",\"boy\",\"girl\",\"toddler\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👶\" src=\"1f476.png\"/>',fitzpatrick_scale:true,category:\"people\"},child:{keywords:[\"gender-neutral\",\"young\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧒\" src=\"1f9d2.png\"/>',fitzpatrick_scale:true,category:\"people\"},boy:{keywords:[\"man\",\"male\",\"guy\",\"teenager\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👦\" src=\"1f466.png\"/>',fitzpatrick_scale:true,category:\"people\"},girl:{keywords:[\"female\",\"woman\",\"teenager\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👧\" src=\"1f467.png\"/>',fitzpatrick_scale:true,category:\"people\"},adult:{keywords:[\"gender-neutral\",\"person\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧑\" src=\"1f9d1.png\"/>',fitzpatrick_scale:true,category:\"people\"},man:{keywords:[\"mustache\",\"father\",\"dad\",\"guy\",\"classy\",\"sir\",\"moustache\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨\" src=\"1f468.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman:{keywords:[\"female\",\"girls\",\"lady\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩\" src=\"1f469.png\"/>',fitzpatrick_scale:true,category:\"people\"},blonde_woman:{keywords:[\"woman\",\"female\",\"girl\",\"blonde\",\"person\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👱‍♀️\" src=\"1f471-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},blonde_man:{keywords:[\"man\",\"male\",\"boy\",\"blonde\",\"guy\",\"person\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👱\" src=\"1f471.png\"/>',fitzpatrick_scale:true,category:\"people\"},bearded_person:{keywords:[\"person\",\"bewhiskered\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧔\" src=\"1f9d4.png\"/>',fitzpatrick_scale:true,category:\"people\"},older_adult:{keywords:[\"human\",\"elder\",\"senior\",\"gender-neutral\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧓\" src=\"1f9d3.png\"/>',fitzpatrick_scale:true,category:\"people\"},older_man:{keywords:[\"human\",\"male\",\"men\",\"old\",\"elder\",\"senior\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👴\" src=\"1f474.png\"/>',fitzpatrick_scale:true,category:\"people\"},older_woman:{keywords:[\"human\",\"female\",\"women\",\"lady\",\"old\",\"elder\",\"senior\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👵\" src=\"1f475.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_with_gua_pi_mao:{keywords:[\"male\",\"boy\",\"chinese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👲\" src=\"1f472.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_with_headscarf:{keywords:[\"female\",\"hijab\",\"mantilla\",\"tichel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧕\" src=\"1f9d5.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_with_turban:{keywords:[\"female\",\"indian\",\"hinduism\",\"arabs\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👳‍♀️\" src=\"1f473-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_with_turban:{keywords:[\"male\",\"indian\",\"hinduism\",\"arabs\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👳\" src=\"1f473.png\"/>',fitzpatrick_scale:true,category:\"people\"},policewoman:{keywords:[\"woman\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👮‍♀️\" src=\"1f46e-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},policeman:{keywords:[\"man\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👮\" src=\"1f46e.png\"/>',fitzpatrick_scale:true,category:\"people\"},construction_worker_woman:{keywords:[\"female\",\"human\",\"wip\",\"build\",\"construction\",\"worker\",\"labor\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👷‍♀️\" src=\"1f477-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},construction_worker_man:{keywords:[\"male\",\"human\",\"wip\",\"guy\",\"build\",\"construction\",\"worker\",\"labor\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👷\" src=\"1f477.png\"/>',fitzpatrick_scale:true,category:\"people\"},guardswoman:{keywords:[\"uk\",\"gb\",\"british\",\"female\",\"royal\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💂‍♀️\" src=\"1f482-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},guardsman:{keywords:[\"uk\",\"gb\",\"british\",\"male\",\"guy\",\"royal\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💂\" src=\"1f482.png\"/>',fitzpatrick_scale:true,category:\"people\"},female_detective:{keywords:[\"human\",\"spy\",\"detective\",\"female\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕵️‍♀️\" src=\"1f575-fe0f-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},male_detective:{keywords:[\"human\",\"spy\",\"detective\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕵\" src=\"1f575.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍⚕️\" src=\"1f469-200d-2695-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍⚕️\" src=\"1f468-200d-2695-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_farmer:{keywords:[\"rancher\",\"gardener\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🌾\" src=\"1f469-200d-1f33e.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_farmer:{keywords:[\"rancher\",\"gardener\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🌾\" src=\"1f468-200d-1f33e.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_cook:{keywords:[\"chef\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🍳\" src=\"1f469-200d-1f373.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_cook:{keywords:[\"chef\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🍳\" src=\"1f468-200d-1f373.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_student:{keywords:[\"graduate\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🎓\" src=\"1f469-200d-1f393.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_student:{keywords:[\"graduate\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🎓\" src=\"1f468-200d-1f393.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_singer:{keywords:[\"rockstar\",\"entertainer\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🎤\" src=\"1f469-200d-1f3a4.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_singer:{keywords:[\"rockstar\",\"entertainer\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🎤\" src=\"1f468-200d-1f3a4.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_teacher:{keywords:[\"instructor\",\"professor\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🏫\" src=\"1f469-200d-1f3eb.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_teacher:{keywords:[\"instructor\",\"professor\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🏫\" src=\"1f468-200d-1f3eb.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_factory_worker:{keywords:[\"assembly\",\"industrial\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🏭\" src=\"1f469-200d-1f3ed.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_factory_worker:{keywords:[\"assembly\",\"industrial\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🏭\" src=\"1f468-200d-1f3ed.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"woman\",\"human\",\"laptop\",\"computer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍💻\" src=\"1f469-200d-1f4bb.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"man\",\"human\",\"laptop\",\"computer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍💻\" src=\"1f468-200d-1f4bb.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_office_worker:{keywords:[\"business\",\"manager\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍💼\" src=\"1f469-200d-1f4bc.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_office_worker:{keywords:[\"business\",\"manager\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍💼\" src=\"1f468-200d-1f4bc.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_mechanic:{keywords:[\"plumber\",\"woman\",\"human\",\"wrench\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🔧\" src=\"1f469-200d-1f527.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_mechanic:{keywords:[\"plumber\",\"man\",\"human\",\"wrench\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🔧\" src=\"1f468-200d-1f527.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🔬\" src=\"1f469-200d-1f52c.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🔬\" src=\"1f468-200d-1f52c.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_artist:{keywords:[\"painter\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🎨\" src=\"1f469-200d-1f3a8.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_artist:{keywords:[\"painter\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🎨\" src=\"1f468-200d-1f3a8.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_firefighter:{keywords:[\"fireman\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🚒\" src=\"1f469-200d-1f692.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_firefighter:{keywords:[\"fireman\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🚒\" src=\"1f468-200d-1f692.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_pilot:{keywords:[\"aviator\",\"plane\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍✈️\" src=\"1f469-200d-2708-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_pilot:{keywords:[\"aviator\",\"plane\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍✈️\" src=\"1f468-200d-2708-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_astronaut:{keywords:[\"space\",\"rocket\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍🚀\" src=\"1f469-200d-1f680.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_astronaut:{keywords:[\"space\",\"rocket\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍🚀\" src=\"1f468-200d-1f680.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_judge:{keywords:[\"justice\",\"court\",\"woman\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍⚖️\" src=\"1f469-200d-2696-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_judge:{keywords:[\"justice\",\"court\",\"man\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍⚖️\" src=\"1f468-200d-2696-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_superhero:{keywords:[\"woman\",\"female\",\"good\",\"heroine\",\"superpowers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦸‍♀️\" src=\"1f9b8-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_superhero:{keywords:[\"man\",\"male\",\"good\",\"hero\",\"superpowers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦸‍♂️\" src=\"1f9b8-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_supervillain:{keywords:[\"woman\",\"female\",\"evil\",\"bad\",\"criminal\",\"heroine\",\"superpowers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦹‍♀️\" src=\"1f9b9-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_supervillain:{keywords:[\"man\",\"male\",\"evil\",\"bad\",\"criminal\",\"hero\",\"superpowers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦹‍♂️\" src=\"1f9b9-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},mrs_claus:{keywords:[\"woman\",\"female\",\"xmas\",\"mother christmas\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤶\" src=\"1f936.png\"/>',fitzpatrick_scale:true,category:\"people\"},santa:{keywords:[\"festival\",\"man\",\"male\",\"xmas\",\"father christmas\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎅\" src=\"1f385.png\"/>',fitzpatrick_scale:true,category:\"people\"},sorceress:{keywords:[\"woman\",\"female\",\"mage\",\"witch\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧙‍♀️\" src=\"1f9d9-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},wizard:{keywords:[\"man\",\"male\",\"mage\",\"sorcerer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧙‍♂️\" src=\"1f9d9-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_elf:{keywords:[\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧝‍♀️\" src=\"1f9dd-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_elf:{keywords:[\"man\",\"male\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧝‍♂️\" src=\"1f9dd-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_vampire:{keywords:[\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧛‍♀️\" src=\"1f9db-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_vampire:{keywords:[\"man\",\"male\",\"dracula\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧛‍♂️\" src=\"1f9db-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_zombie:{keywords:[\"woman\",\"female\",\"undead\",\"walking dead\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧟‍♀️\" src=\"1f9df-200d-2640-fe0f.png\"/>',fitzpatrick_scale:false,category:\"people\"},man_zombie:{keywords:[\"man\",\"male\",\"dracula\",\"undead\",\"walking dead\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧟‍♂️\" src=\"1f9df-200d-2642-fe0f.png\"/>',fitzpatrick_scale:false,category:\"people\"},woman_genie:{keywords:[\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧞‍♀️\" src=\"1f9de-200d-2640-fe0f.png\"/>',fitzpatrick_scale:false,category:\"people\"},man_genie:{keywords:[\"man\",\"male\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧞‍♂️\" src=\"1f9de-200d-2642-fe0f.png\"/>',fitzpatrick_scale:false,category:\"people\"},mermaid:{keywords:[\"woman\",\"female\",\"merwoman\",\"ariel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧜‍♀️\" src=\"1f9dc-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},merman:{keywords:[\"man\",\"male\",\"triton\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧜‍♂️\" src=\"1f9dc-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_fairy:{keywords:[\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧚‍♀️\" src=\"1f9da-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_fairy:{keywords:[\"man\",\"male\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧚‍♂️\" src=\"1f9da-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},angel:{keywords:[\"heaven\",\"wings\",\"halo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👼\" src=\"1f47c.png\"/>',fitzpatrick_scale:true,category:\"people\"},pregnant_woman:{keywords:[\"baby\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤰\" src=\"1f930.png\"/>',fitzpatrick_scale:true,category:\"people\"},breastfeeding:{keywords:[\"nursing\",\"baby\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤱\" src=\"1f931.png\"/>',fitzpatrick_scale:true,category:\"people\"},princess:{keywords:[\"girl\",\"woman\",\"female\",\"blond\",\"crown\",\"royal\",\"queen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👸\" src=\"1f478.png\"/>',fitzpatrick_scale:true,category:\"people\"},prince:{keywords:[\"boy\",\"man\",\"male\",\"crown\",\"royal\",\"king\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤴\" src=\"1f934.png\"/>',fitzpatrick_scale:true,category:\"people\"},bride_with_veil:{keywords:[\"couple\",\"marriage\",\"wedding\",\"woman\",\"bride\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👰\" src=\"1f470.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_in_tuxedo:{keywords:[\"couple\",\"marriage\",\"wedding\",\"groom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤵\" src=\"1f935.png\"/>',fitzpatrick_scale:true,category:\"people\"},running_woman:{keywords:[\"woman\",\"walking\",\"exercise\",\"race\",\"running\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏃‍♀️\" src=\"1f3c3-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},running_man:{keywords:[\"man\",\"walking\",\"exercise\",\"race\",\"running\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏃\" src=\"1f3c3.png\"/>',fitzpatrick_scale:true,category:\"people\"},walking_woman:{keywords:[\"human\",\"feet\",\"steps\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚶‍♀️\" src=\"1f6b6-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},walking_man:{keywords:[\"human\",\"feet\",\"steps\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚶\" src=\"1f6b6.png\"/>',fitzpatrick_scale:true,category:\"people\"},dancer:{keywords:[\"female\",\"girl\",\"woman\",\"fun\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💃\" src=\"1f483.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_dancing:{keywords:[\"male\",\"boy\",\"fun\",\"dancer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕺\" src=\"1f57a.png\"/>',fitzpatrick_scale:true,category:\"people\"},dancing_women:{keywords:[\"female\",\"bunny\",\"women\",\"girls\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👯\" src=\"1f46f.png\"/>',fitzpatrick_scale:false,category:\"people\"},dancing_men:{keywords:[\"male\",\"bunny\",\"men\",\"boys\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👯‍♂️\" src=\"1f46f-200d-2642-fe0f.png\"/>',fitzpatrick_scale:false,category:\"people\"},couple:{keywords:[\"pair\",\"people\",\"human\",\"love\",\"date\",\"dating\",\"like\",\"affection\",\"valentines\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👫\" src=\"1f46b.png\"/>',fitzpatrick_scale:false,category:\"people\"},two_men_holding_hands:{keywords:[\"pair\",\"couple\",\"love\",\"like\",\"bromance\",\"friendship\",\"people\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👬\" src=\"1f46c.png\"/>',fitzpatrick_scale:false,category:\"people\"},two_women_holding_hands:{keywords:[\"pair\",\"friendship\",\"couple\",\"love\",\"like\",\"female\",\"people\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👭\" src=\"1f46d.png\"/>',fitzpatrick_scale:false,category:\"people\"},bowing_woman:{keywords:[\"woman\",\"female\",\"girl\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙇‍♀️\" src=\"1f647-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},bowing_man:{keywords:[\"man\",\"male\",\"boy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙇\" src=\"1f647.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_facepalming:{keywords:[\"man\",\"male\",\"boy\",\"disbelief\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤦‍♂️\" src=\"1f926-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_facepalming:{keywords:[\"woman\",\"female\",\"girl\",\"disbelief\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤦‍♀️\" src=\"1f926-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_shrugging:{keywords:[\"woman\",\"female\",\"girl\",\"confused\",\"indifferent\",\"doubt\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤷\" src=\"1f937.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_shrugging:{keywords:[\"man\",\"male\",\"boy\",\"confused\",\"indifferent\",\"doubt\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤷‍♂️\" src=\"1f937-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},tipping_hand_woman:{keywords:[\"female\",\"girl\",\"woman\",\"human\",\"information\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💁\" src=\"1f481.png\"/>',fitzpatrick_scale:true,category:\"people\"},tipping_hand_man:{keywords:[\"male\",\"boy\",\"man\",\"human\",\"information\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💁‍♂️\" src=\"1f481-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},no_good_woman:{keywords:[\"female\",\"girl\",\"woman\",\"nope\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙅\" src=\"1f645.png\"/>',fitzpatrick_scale:true,category:\"people\"},no_good_man:{keywords:[\"male\",\"boy\",\"man\",\"nope\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙅‍♂️\" src=\"1f645-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},ok_woman:{keywords:[\"women\",\"girl\",\"female\",\"pink\",\"human\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙆\" src=\"1f646.png\"/>',fitzpatrick_scale:true,category:\"people\"},ok_man:{keywords:[\"men\",\"boy\",\"male\",\"blue\",\"human\",\"man\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙆‍♂️\" src=\"1f646-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},raising_hand_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙋\" src=\"1f64b.png\"/>',fitzpatrick_scale:true,category:\"people\"},raising_hand_man:{keywords:[\"male\",\"boy\",\"man\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙋‍♂️\" src=\"1f64b-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},pouting_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙎\" src=\"1f64e.png\"/>',fitzpatrick_scale:true,category:\"people\"},pouting_man:{keywords:[\"male\",\"boy\",\"man\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙎‍♂️\" src=\"1f64e-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},frowning_woman:{keywords:[\"female\",\"girl\",\"woman\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙍\" src=\"1f64d.png\"/>',fitzpatrick_scale:true,category:\"people\"},frowning_man:{keywords:[\"male\",\"boy\",\"man\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙍‍♂️\" src=\"1f64d-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},haircut_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💇\" src=\"1f487.png\"/>',fitzpatrick_scale:true,category:\"people\"},haircut_man:{keywords:[\"male\",\"boy\",\"man\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💇‍♂️\" src=\"1f487-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},massage_woman:{keywords:[\"female\",\"girl\",\"woman\",\"head\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💆\" src=\"1f486.png\"/>',fitzpatrick_scale:true,category:\"people\"},massage_man:{keywords:[\"male\",\"boy\",\"man\",\"head\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💆‍♂️\" src=\"1f486-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},woman_in_steamy_room:{keywords:[\"female\",\"woman\",\"spa\",\"steamroom\",\"sauna\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧖‍♀️\" src=\"1f9d6-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},man_in_steamy_room:{keywords:[\"male\",\"man\",\"spa\",\"steamroom\",\"sauna\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧖‍♂️\" src=\"1f9d6-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"people\"},couple_with_heart_woman_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💑\" src=\"1f491.png\"/>',fitzpatrick_scale:false,category:\"people\"},couple_with_heart_woman_woman:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍❤️‍👩\" src=\"1f469-200d-2764-fe0f-200d-1f469.png\"/>',fitzpatrick_scale:false,category:\"people\"},couple_with_heart_man_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍❤️‍👨\" src=\"1f468-200d-2764-fe0f-200d-1f468.png\"/>',fitzpatrick_scale:false,category:\"people\"},couplekiss_man_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💏\" src=\"1f48f.png\"/>',fitzpatrick_scale:false,category:\"people\"},couplekiss_woman_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍❤️‍💋‍👩\" src=\"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png\"/>',fitzpatrick_scale:false,category:\"people\"},couplekiss_man_man:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍❤️‍💋‍👨\" src=\"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_woman_boy:{keywords:[\"home\",\"parents\",\"child\",\"mom\",\"dad\",\"father\",\"mother\",\"people\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👪\" src=\"1f46a.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👩‍👧\" src=\"1f468-200d-1f469-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👩‍👧‍👦\" src=\"1f468-200d-1f469-200d-1f467-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👩‍👦‍👦\" src=\"1f468-200d-1f469-200d-1f466-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👩‍👧‍👧\" src=\"1f468-200d-1f469-200d-1f467-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_woman_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👩‍👦\" src=\"1f469-200d-1f469-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👩‍👧\" src=\"1f469-200d-1f469-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👩‍👧‍👦\" src=\"1f469-200d-1f469-200d-1f467-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👩‍👦‍👦\" src=\"1f469-200d-1f469-200d-1f466-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👩‍👧‍👧\" src=\"1f469-200d-1f469-200d-1f467-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_man_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👨‍👦\" src=\"1f468-200d-1f468-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_man_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👨‍👧\" src=\"1f468-200d-1f468-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_man_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👨‍👧‍👦\" src=\"1f468-200d-1f468-200d-1f467-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_man_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👨‍👦‍👦\" src=\"1f468-200d-1f468-200d-1f466-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_man_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👨‍👧‍👧\" src=\"1f468-200d-1f468-200d-1f467-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👦\" src=\"1f469-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👧\" src=\"1f469-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👧‍👦\" src=\"1f469-200d-1f467-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👦‍👦\" src=\"1f469-200d-1f466-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_woman_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👩‍👧‍👧\" src=\"1f469-200d-1f467-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👦\" src=\"1f468-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👧\" src=\"1f468-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👧‍👦\" src=\"1f468-200d-1f467-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👦‍👦\" src=\"1f468-200d-1f466-200d-1f466.png\"/>',fitzpatrick_scale:false,category:\"people\"},family_man_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👨‍👧‍👧\" src=\"1f468-200d-1f467-200d-1f467.png\"/>',fitzpatrick_scale:false,category:\"people\"},yarn:{keywords:[\"ball\",\"crochet\",\"knit\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧶\" src=\"1f9f6.png\"/>',fitzpatrick_scale:false,category:\"people\"},thread:{keywords:[\"needle\",\"sewing\",\"spool\",\"string\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧵\" src=\"1f9f5.png\"/>',fitzpatrick_scale:false,category:\"people\"},coat:{keywords:[\"jacket\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧥\" src=\"1f9e5.png\"/>',fitzpatrick_scale:false,category:\"people\"},labcoat:{keywords:[\"doctor\",\"experiment\",\"scientist\",\"chemist\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥼\" src=\"1f97c.png\"/>',fitzpatrick_scale:false,category:\"people\"},womans_clothes:{keywords:[\"fashion\",\"shopping_bags\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👚\" src=\"1f45a.png\"/>',fitzpatrick_scale:false,category:\"people\"},tshirt:{keywords:[\"fashion\",\"cloth\",\"casual\",\"shirt\",\"tee\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👕\" src=\"1f455.png\"/>',fitzpatrick_scale:false,category:\"people\"},jeans:{keywords:[\"fashion\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👖\" src=\"1f456.png\"/>',fitzpatrick_scale:false,category:\"people\"},necktie:{keywords:[\"shirt\",\"suitup\",\"formal\",\"fashion\",\"cloth\",\"business\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👔\" src=\"1f454.png\"/>',fitzpatrick_scale:false,category:\"people\"},dress:{keywords:[\"clothes\",\"fashion\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👗\" src=\"1f457.png\"/>',fitzpatrick_scale:false,category:\"people\"},bikini:{keywords:[\"swimming\",\"female\",\"woman\",\"girl\",\"fashion\",\"beach\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👙\" src=\"1f459.png\"/>',fitzpatrick_scale:false,category:\"people\"},kimono:{keywords:[\"dress\",\"fashion\",\"women\",\"female\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👘\" src=\"1f458.png\"/>',fitzpatrick_scale:false,category:\"people\"},lipstick:{keywords:[\"female\",\"girl\",\"fashion\",\"woman\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💄\" src=\"1f484.png\"/>',fitzpatrick_scale:false,category:\"people\"},kiss:{keywords:[\"face\",\"lips\",\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💋\" src=\"1f48b.png\"/>',fitzpatrick_scale:false,category:\"people\"},footprints:{keywords:[\"feet\",\"tracking\",\"walking\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👣\" src=\"1f463.png\"/>',fitzpatrick_scale:false,category:\"people\"},flat_shoe:{keywords:[\"ballet\",\"slip-on\",\"slipper\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥿\" src=\"1f97f.png\"/>',fitzpatrick_scale:false,category:\"people\"},high_heel:{keywords:[\"fashion\",\"shoes\",\"female\",\"pumps\",\"stiletto\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👠\" src=\"1f460.png\"/>',fitzpatrick_scale:false,category:\"people\"},sandal:{keywords:[\"shoes\",\"fashion\",\"flip flops\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👡\" src=\"1f461.png\"/>',fitzpatrick_scale:false,category:\"people\"},boot:{keywords:[\"shoes\",\"fashion\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👢\" src=\"1f462.png\"/>',fitzpatrick_scale:false,category:\"people\"},mans_shoe:{keywords:[\"fashion\",\"male\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👞\" src=\"1f45e.png\"/>',fitzpatrick_scale:false,category:\"people\"},athletic_shoe:{keywords:[\"shoes\",\"sports\",\"sneakers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👟\" src=\"1f45f.png\"/>',fitzpatrick_scale:false,category:\"people\"},hiking_boot:{keywords:[\"backpacking\",\"camping\",\"hiking\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥾\" src=\"1f97e.png\"/>',fitzpatrick_scale:false,category:\"people\"},socks:{keywords:[\"stockings\",\"clothes\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧦\" src=\"1f9e6.png\"/>',fitzpatrick_scale:false,category:\"people\"},gloves:{keywords:[\"hands\",\"winter\",\"clothes\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧤\" src=\"1f9e4.png\"/>',fitzpatrick_scale:false,category:\"people\"},scarf:{keywords:[\"neck\",\"winter\",\"clothes\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧣\" src=\"1f9e3.png\"/>',fitzpatrick_scale:false,category:\"people\"},womans_hat:{keywords:[\"fashion\",\"accessories\",\"female\",\"lady\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👒\" src=\"1f452.png\"/>',fitzpatrick_scale:false,category:\"people\"},tophat:{keywords:[\"magic\",\"gentleman\",\"classy\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎩\" src=\"1f3a9.png\"/>',fitzpatrick_scale:false,category:\"people\"},billed_hat:{keywords:[\"cap\",\"baseball\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧢\" src=\"1f9e2.png\"/>',fitzpatrick_scale:false,category:\"people\"},rescue_worker_helmet:{keywords:[\"construction\",\"build\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛑\" src=\"26d1.png\"/>',fitzpatrick_scale:false,category:\"people\"},mortar_board:{keywords:[\"school\",\"college\",\"degree\",\"university\",\"graduation\",\"cap\",\"hat\",\"legal\",\"learn\",\"education\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎓\" src=\"1f393.png\"/>',fitzpatrick_scale:false,category:\"people\"},crown:{keywords:[\"king\",\"kod\",\"leader\",\"royalty\",\"lord\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👑\" src=\"1f451.png\"/>',fitzpatrick_scale:false,category:\"people\"},school_satchel:{keywords:[\"student\",\"education\",\"bag\",\"backpack\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎒\" src=\"1f392.png\"/>',fitzpatrick_scale:false,category:\"people\"},luggage:{keywords:[\"packing\",\"travel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧳\" src=\"1f9f3.png\"/>',fitzpatrick_scale:false,category:\"people\"},pouch:{keywords:[\"bag\",\"accessories\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👝\" src=\"1f45d.png\"/>',fitzpatrick_scale:false,category:\"people\"},purse:{keywords:[\"fashion\",\"accessories\",\"money\",\"sales\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👛\" src=\"1f45b.png\"/>',fitzpatrick_scale:false,category:\"people\"},handbag:{keywords:[\"fashion\",\"accessory\",\"accessories\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👜\" src=\"1f45c.png\"/>',fitzpatrick_scale:false,category:\"people\"},briefcase:{keywords:[\"business\",\"documents\",\"work\",\"law\",\"legal\",\"job\",\"career\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💼\" src=\"1f4bc.png\"/>',fitzpatrick_scale:false,category:\"people\"},eyeglasses:{keywords:[\"fashion\",\"accessories\",\"eyesight\",\"nerdy\",\"dork\",\"geek\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👓\" src=\"1f453.png\"/>',fitzpatrick_scale:false,category:\"people\"},dark_sunglasses:{keywords:[\"face\",\"cool\",\"accessories\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕶\" src=\"1f576.png\"/>',fitzpatrick_scale:false,category:\"people\"},goggles:{keywords:[\"eyes\",\"protection\",\"safety\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥽\" src=\"1f97d.png\"/>',fitzpatrick_scale:false,category:\"people\"},ring:{keywords:[\"wedding\",\"propose\",\"marriage\",\"valentines\",\"diamond\",\"fashion\",\"jewelry\",\"gem\",\"engagement\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💍\" src=\"1f48d.png\"/>',fitzpatrick_scale:false,category:\"people\"},closed_umbrella:{keywords:[\"weather\",\"rain\",\"drizzle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌂\" src=\"1f302.png\"/>',fitzpatrick_scale:false,category:\"people\"},dog:{keywords:[\"animal\",\"friend\",\"nature\",\"woof\",\"puppy\",\"pet\",\"faithful\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐶\" src=\"1f436.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cat:{keywords:[\"animal\",\"meow\",\"nature\",\"pet\",\"kitten\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐱\" src=\"1f431.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},mouse:{keywords:[\"animal\",\"nature\",\"cheese_wedge\",\"rodent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐭\" src=\"1f42d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hamster:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐹\" src=\"1f439.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rabbit:{keywords:[\"animal\",\"nature\",\"pet\",\"spring\",\"magic\",\"bunny\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐰\" src=\"1f430.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},fox_face:{keywords:[\"animal\",\"nature\",\"face\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦊\" src=\"1f98a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bear:{keywords:[\"animal\",\"nature\",\"wild\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐻\" src=\"1f43b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},panda_face:{keywords:[\"animal\",\"nature\",\"panda\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐼\" src=\"1f43c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},koala:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐨\" src=\"1f428.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tiger:{keywords:[\"animal\",\"cat\",\"danger\",\"wild\",\"nature\",\"roar\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐯\" src=\"1f42f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},lion:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦁\" src=\"1f981.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cow:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐮\" src=\"1f42e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},pig:{keywords:[\"animal\",\"oink\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐷\" src=\"1f437.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},pig_nose:{keywords:[\"animal\",\"oink\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐽\" src=\"1f43d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},frog:{keywords:[\"animal\",\"nature\",\"croak\",\"toad\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐸\" src=\"1f438.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},squid:{keywords:[\"animal\",\"nature\",\"ocean\",\"sea\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦑\" src=\"1f991.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},octopus:{keywords:[\"animal\",\"creature\",\"ocean\",\"sea\",\"nature\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐙\" src=\"1f419.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},shrimp:{keywords:[\"animal\",\"ocean\",\"nature\",\"seafood\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦐\" src=\"1f990.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},monkey_face:{keywords:[\"animal\",\"nature\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐵\" src=\"1f435.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},gorilla:{keywords:[\"animal\",\"nature\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦍\" src=\"1f98d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},see_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"haha\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙈\" src=\"1f648.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hear_no_evil:{keywords:[\"animal\",\"monkey\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙉\" src=\"1f649.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},speak_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"omg\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🙊\" src=\"1f64a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},monkey:{keywords:[\"animal\",\"nature\",\"banana\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐒\" src=\"1f412.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},chicken:{keywords:[\"animal\",\"cluck\",\"nature\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐔\" src=\"1f414.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},penguin:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐧\" src=\"1f427.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bird:{keywords:[\"animal\",\"nature\",\"fly\",\"tweet\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐦\" src=\"1f426.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},baby_chick:{keywords:[\"animal\",\"chicken\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐤\" src=\"1f424.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hatching_chick:{keywords:[\"animal\",\"chicken\",\"egg\",\"born\",\"baby\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐣\" src=\"1f423.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hatched_chick:{keywords:[\"animal\",\"chicken\",\"baby\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐥\" src=\"1f425.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},duck:{keywords:[\"animal\",\"nature\",\"bird\",\"mallard\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦆\" src=\"1f986.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},eagle:{keywords:[\"animal\",\"nature\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦅\" src=\"1f985.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},owl:{keywords:[\"animal\",\"nature\",\"bird\",\"hoot\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦉\" src=\"1f989.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bat:{keywords:[\"animal\",\"nature\",\"blind\",\"vampire\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦇\" src=\"1f987.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},wolf:{keywords:[\"animal\",\"nature\",\"wild\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐺\" src=\"1f43a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},boar:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐗\" src=\"1f417.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},horse:{keywords:[\"animal\",\"brown\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐴\" src=\"1f434.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},unicorn:{keywords:[\"animal\",\"nature\",\"mystical\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦄\" src=\"1f984.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},honeybee:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\",\"spring\",\"honey\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐝\" src=\"1f41d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bug:{keywords:[\"animal\",\"insect\",\"nature\",\"worm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐛\" src=\"1f41b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},butterfly:{keywords:[\"animal\",\"insect\",\"nature\",\"caterpillar\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦋\" src=\"1f98b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},snail:{keywords:[\"slow\",\"animal\",\"shell\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐌\" src=\"1f40c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},beetle:{keywords:[\"animal\",\"insect\",\"nature\",\"ladybug\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐞\" src=\"1f41e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},ant:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐜\" src=\"1f41c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},grasshopper:{keywords:[\"animal\",\"cricket\",\"chirp\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦗\" src=\"1f997.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},spider:{keywords:[\"animal\",\"arachnid\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕷\" src=\"1f577.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},scorpion:{keywords:[\"animal\",\"arachnid\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦂\" src=\"1f982.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},crab:{keywords:[\"animal\",\"crustacean\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦀\" src=\"1f980.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},snake:{keywords:[\"animal\",\"evil\",\"nature\",\"hiss\",\"python\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐍\" src=\"1f40d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},lizard:{keywords:[\"animal\",\"nature\",\"reptile\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦎\" src=\"1f98e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},\"t-rex\":{keywords:[\"animal\",\"nature\",\"dinosaur\",\"tyrannosaurus\",\"extinct\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦖\" src=\"1f996.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sauropod:{keywords:[\"animal\",\"nature\",\"dinosaur\",\"brachiosaurus\",\"brontosaurus\",\"diplodocus\",\"extinct\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦕\" src=\"1f995.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},turtle:{keywords:[\"animal\",\"slow\",\"nature\",\"tortoise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐢\" src=\"1f422.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tropical_fish:{keywords:[\"animal\",\"swim\",\"ocean\",\"beach\",\"nemo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐠\" src=\"1f420.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},fish:{keywords:[\"animal\",\"food\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐟\" src=\"1f41f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},blowfish:{keywords:[\"animal\",\"nature\",\"food\",\"sea\",\"ocean\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐡\" src=\"1f421.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dolphin:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"flipper\",\"fins\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐬\" src=\"1f42c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},shark:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"jaws\",\"fins\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦈\" src=\"1f988.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},whale:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐳\" src=\"1f433.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},whale2:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐋\" src=\"1f40b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},crocodile:{keywords:[\"animal\",\"nature\",\"reptile\",\"lizard\",\"alligator\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐊\" src=\"1f40a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},leopard:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐆\" src=\"1f406.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},zebra:{keywords:[\"animal\",\"nature\",\"stripes\",\"safari\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦓\" src=\"1f993.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tiger2:{keywords:[\"animal\",\"nature\",\"roar\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐅\" src=\"1f405.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},water_buffalo:{keywords:[\"animal\",\"nature\",\"ox\",\"cow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐃\" src=\"1f403.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},ox:{keywords:[\"animal\",\"cow\",\"beef\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐂\" src=\"1f402.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cow2:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐄\" src=\"1f404.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},deer:{keywords:[\"animal\",\"nature\",\"horns\",\"venison\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦌\" src=\"1f98c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dromedary_camel:{keywords:[\"animal\",\"hot\",\"desert\",\"hump\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐪\" src=\"1f42a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},camel:{keywords:[\"animal\",\"nature\",\"hot\",\"desert\",\"hump\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐫\" src=\"1f42b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},giraffe:{keywords:[\"animal\",\"nature\",\"spots\",\"safari\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦒\" src=\"1f992.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},elephant:{keywords:[\"animal\",\"nature\",\"nose\",\"th\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐘\" src=\"1f418.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rhinoceros:{keywords:[\"animal\",\"nature\",\"horn\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦏\" src=\"1f98f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},goat:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐐\" src=\"1f410.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},ram:{keywords:[\"animal\",\"sheep\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐏\" src=\"1f40f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sheep:{keywords:[\"animal\",\"nature\",\"wool\",\"shipit\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐑\" src=\"1f411.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},racehorse:{keywords:[\"animal\",\"gamble\",\"luck\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐎\" src=\"1f40e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},pig2:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐖\" src=\"1f416.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rat:{keywords:[\"animal\",\"mouse\",\"rodent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐀\" src=\"1f400.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},mouse2:{keywords:[\"animal\",\"nature\",\"rodent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐁\" src=\"1f401.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rooster:{keywords:[\"animal\",\"nature\",\"chicken\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐓\" src=\"1f413.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},turkey:{keywords:[\"animal\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦃\" src=\"1f983.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dove:{keywords:[\"animal\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕊\" src=\"1f54a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dog2:{keywords:[\"animal\",\"nature\",\"friend\",\"doge\",\"pet\",\"faithful\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐕\" src=\"1f415.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},poodle:{keywords:[\"dog\",\"animal\",\"101\",\"nature\",\"pet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐩\" src=\"1f429.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cat2:{keywords:[\"animal\",\"meow\",\"pet\",\"cats\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐈\" src=\"1f408.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rabbit2:{keywords:[\"animal\",\"nature\",\"pet\",\"magic\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐇\" src=\"1f407.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},chipmunk:{keywords:[\"animal\",\"nature\",\"rodent\",\"squirrel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐿\" src=\"1f43f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hedgehog:{keywords:[\"animal\",\"nature\",\"spiny\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦔\" src=\"1f994.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},raccoon:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦝\" src=\"1f99d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},llama:{keywords:[\"animal\",\"nature\",\"alpaca\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦙\" src=\"1f999.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hippopotamus:{keywords:[\"animal\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦛\" src=\"1f99b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},kangaroo:{keywords:[\"animal\",\"nature\",\"australia\",\"joey\",\"hop\",\"marsupial\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦘\" src=\"1f998.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},badger:{keywords:[\"animal\",\"nature\",\"honey\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦡\" src=\"1f9a1.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},swan:{keywords:[\"animal\",\"nature\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦢\" src=\"1f9a2.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},peacock:{keywords:[\"animal\",\"nature\",\"peahen\",\"bird\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦚\" src=\"1f99a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},parrot:{keywords:[\"animal\",\"nature\",\"bird\",\"pirate\",\"talk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦜\" src=\"1f99c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},lobster:{keywords:[\"animal\",\"nature\",\"bisque\",\"claws\",\"seafood\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦞\" src=\"1f99e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},mosquito:{keywords:[\"animal\",\"nature\",\"insect\",\"malaria\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦟\" src=\"1f99f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},paw_prints:{keywords:[\"animal\",\"tracking\",\"footprints\",\"dog\",\"cat\",\"pet\",\"feet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐾\" src=\"1f43e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dragon:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐉\" src=\"1f409.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dragon_face:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐲\" src=\"1f432.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cactus:{keywords:[\"vegetable\",\"plant\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌵\" src=\"1f335.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},christmas_tree:{keywords:[\"festival\",\"vacation\",\"december\",\"xmas\",\"celebration\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎄\" src=\"1f384.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},evergreen_tree:{keywords:[\"plant\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌲\" src=\"1f332.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},deciduous_tree:{keywords:[\"plant\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌳\" src=\"1f333.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},palm_tree:{keywords:[\"plant\",\"vegetable\",\"nature\",\"summer\",\"beach\",\"mojito\",\"tropical\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌴\" src=\"1f334.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},seedling:{keywords:[\"plant\",\"nature\",\"grass\",\"lawn\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌱\" src=\"1f331.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},herb:{keywords:[\"vegetable\",\"plant\",\"medicine\",\"weed\",\"grass\",\"lawn\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌿\" src=\"1f33f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},shamrock:{keywords:[\"vegetable\",\"plant\",\"nature\",\"irish\",\"clover\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☘\" src=\"2618.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},four_leaf_clover:{keywords:[\"vegetable\",\"plant\",\"nature\",\"lucky\",\"irish\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍀\" src=\"1f340.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bamboo:{keywords:[\"plant\",\"nature\",\"vegetable\",\"panda\",\"pine_decoration\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎍\" src=\"1f38d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tanabata_tree:{keywords:[\"plant\",\"nature\",\"branch\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎋\" src=\"1f38b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},leaves:{keywords:[\"nature\",\"plant\",\"tree\",\"vegetable\",\"grass\",\"lawn\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍃\" src=\"1f343.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},fallen_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"leaves\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍂\" src=\"1f342.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},maple_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"ca\",\"fall\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍁\" src=\"1f341.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},ear_of_rice:{keywords:[\"nature\",\"plant\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌾\" src=\"1f33e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},hibiscus:{keywords:[\"plant\",\"vegetable\",\"flowers\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌺\" src=\"1f33a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sunflower:{keywords:[\"nature\",\"plant\",\"fall\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌻\" src=\"1f33b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},rose:{keywords:[\"flowers\",\"valentines\",\"love\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌹\" src=\"1f339.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},wilted_flower:{keywords:[\"plant\",\"nature\",\"flower\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥀\" src=\"1f940.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tulip:{keywords:[\"flowers\",\"plant\",\"nature\",\"summer\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌷\" src=\"1f337.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},blossom:{keywords:[\"nature\",\"flowers\",\"yellow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌼\" src=\"1f33c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cherry_blossom:{keywords:[\"nature\",\"plant\",\"spring\",\"flower\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌸\" src=\"1f338.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},bouquet:{keywords:[\"flowers\",\"nature\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💐\" src=\"1f490.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},mushroom:{keywords:[\"plant\",\"vegetable\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍄\" src=\"1f344.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},chestnut:{keywords:[\"food\",\"squirrel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌰\" src=\"1f330.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},jack_o_lantern:{keywords:[\"halloween\",\"light\",\"pumpkin\",\"creepy\",\"fall\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎃\" src=\"1f383.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},shell:{keywords:[\"nature\",\"sea\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🐚\" src=\"1f41a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},spider_web:{keywords:[\"animal\",\"insect\",\"arachnid\",\"silk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕸\" src=\"1f578.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_americas:{keywords:[\"globe\",\"world\",\"USA\",\"international\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌎\" src=\"1f30e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_africa:{keywords:[\"globe\",\"world\",\"international\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌍\" src=\"1f30d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_asia:{keywords:[\"globe\",\"world\",\"east\",\"international\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌏\" src=\"1f30f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},full_moon:{keywords:[\"nature\",\"yellow\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌕\" src=\"1f315.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},waning_gibbous_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\",\"waxing_gibbous_moon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌖\" src=\"1f316.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},last_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌗\" src=\"1f317.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},waning_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌘\" src=\"1f318.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},new_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌑\" src=\"1f311.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},waxing_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌒\" src=\"1f312.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},first_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌓\" src=\"1f313.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},waxing_gibbous_moon:{keywords:[\"nature\",\"night\",\"sky\",\"gray\",\"twilight\",\"planet\",\"space\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌔\" src=\"1f314.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},new_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌚\" src=\"1f31a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},full_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌝\" src=\"1f31d.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},first_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌛\" src=\"1f31b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},last_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌜\" src=\"1f31c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_with_face:{keywords:[\"nature\",\"morning\",\"sky\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌞\" src=\"1f31e.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},crescent_moon:{keywords:[\"night\",\"sleep\",\"sky\",\"evening\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌙\" src=\"1f319.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},star:{keywords:[\"night\",\"yellow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⭐\" src=\"2b50.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},star2:{keywords:[\"night\",\"sparkle\",\"awesome\",\"good\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌟\" src=\"1f31f.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dizzy:{keywords:[\"star\",\"sparkle\",\"shoot\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💫\" src=\"1f4ab.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sparkles:{keywords:[\"stars\",\"shine\",\"shiny\",\"cool\",\"awesome\",\"good\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✨\" src=\"2728.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},comet:{keywords:[\"space\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☄\" src=\"2604.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sunny:{keywords:[\"weather\",\"nature\",\"brightness\",\"summer\",\"beach\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☀️\" src=\"2600.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_small_cloud:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌤\" src=\"1f324.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},partly_sunny:{keywords:[\"weather\",\"nature\",\"cloudy\",\"morning\",\"fall\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛅\" src=\"26c5.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_large_cloud:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌥\" src=\"1f325.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_rain_cloud:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌦\" src=\"1f326.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud:{keywords:[\"weather\",\"sky\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☁️\" src=\"2601.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_rain:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌧\" src=\"1f327.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_lightning_and_rain:{keywords:[\"weather\",\"lightning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛈\" src=\"26c8.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_lightning:{keywords:[\"weather\",\"thunder\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌩\" src=\"1f329.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},zap:{keywords:[\"thunder\",\"weather\",\"lightning bolt\",\"fast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚡\" src=\"26a1.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},fire:{keywords:[\"hot\",\"cook\",\"flame\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔥\" src=\"1f525.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},boom:{keywords:[\"bomb\",\"explode\",\"explosion\",\"collision\",\"blown\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💥\" src=\"1f4a5.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},snowflake:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❄️\" src=\"2744.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_snow:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌨\" src=\"1f328.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},snowman:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\",\"without_snow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛄\" src=\"26c4.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},snowman_with_snow:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☃\" src=\"2603.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},wind_face:{keywords:[\"gust\",\"air\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌬\" src=\"1f32c.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},dash:{keywords:[\"wind\",\"air\",\"fast\",\"shoo\",\"fart\",\"smoke\",\"puff\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💨\" src=\"1f4a8.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},tornado:{keywords:[\"weather\",\"cyclone\",\"twister\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌪\" src=\"1f32a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},fog:{keywords:[\"weather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌫\" src=\"1f32b.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},open_umbrella:{keywords:[\"weather\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☂\" src=\"2602.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},umbrella:{keywords:[\"rainy\",\"weather\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☔\" src=\"2614.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},droplet:{keywords:[\"water\",\"drip\",\"faucet\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💧\" src=\"1f4a7.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},sweat_drops:{keywords:[\"water\",\"drip\",\"oops\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💦\" src=\"1f4a6.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},ocean:{keywords:[\"sea\",\"water\",\"wave\",\"nature\",\"tsunami\",\"disaster\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌊\" src=\"1f30a.png\"/>',fitzpatrick_scale:false,category:\"animals_and_nature\"},green_apple:{keywords:[\"fruit\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍏\" src=\"1f34f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},apple:{keywords:[\"fruit\",\"mac\",\"school\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍎\" src=\"1f34e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pear:{keywords:[\"fruit\",\"nature\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍐\" src=\"1f350.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},tangerine:{keywords:[\"food\",\"fruit\",\"nature\",\"orange\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍊\" src=\"1f34a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},lemon:{keywords:[\"fruit\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍋\" src=\"1f34b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},banana:{keywords:[\"fruit\",\"food\",\"monkey\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍌\" src=\"1f34c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},watermelon:{keywords:[\"fruit\",\"food\",\"picnic\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍉\" src=\"1f349.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},grapes:{keywords:[\"fruit\",\"food\",\"wine\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍇\" src=\"1f347.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},strawberry:{keywords:[\"fruit\",\"food\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍓\" src=\"1f353.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},melon:{keywords:[\"fruit\",\"nature\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍈\" src=\"1f348.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cherries:{keywords:[\"food\",\"fruit\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍒\" src=\"1f352.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},peach:{keywords:[\"fruit\",\"nature\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍑\" src=\"1f351.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pineapple:{keywords:[\"fruit\",\"nature\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍍\" src=\"1f34d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},coconut:{keywords:[\"fruit\",\"nature\",\"food\",\"palm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥥\" src=\"1f965.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},kiwi_fruit:{keywords:[\"fruit\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥝\" src=\"1f95d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},mango:{keywords:[\"fruit\",\"food\",\"tropical\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥭\" src=\"1f96d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},avocado:{keywords:[\"fruit\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥑\" src=\"1f951.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},broccoli:{keywords:[\"fruit\",\"food\",\"vegetable\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥦\" src=\"1f966.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},tomato:{keywords:[\"fruit\",\"vegetable\",\"nature\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍅\" src=\"1f345.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},eggplant:{keywords:[\"vegetable\",\"nature\",\"food\",\"aubergine\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍆\" src=\"1f346.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cucumber:{keywords:[\"fruit\",\"food\",\"pickle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥒\" src=\"1f952.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},carrot:{keywords:[\"vegetable\",\"food\",\"orange\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥕\" src=\"1f955.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},hot_pepper:{keywords:[\"food\",\"spicy\",\"chilli\",\"chili\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌶\" src=\"1f336.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},potato:{keywords:[\"food\",\"tuber\",\"vegatable\",\"starch\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥔\" src=\"1f954.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},corn:{keywords:[\"food\",\"vegetable\",\"plant\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌽\" src=\"1f33d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},leafy_greens:{keywords:[\"food\",\"vegetable\",\"plant\",\"bok choy\",\"cabbage\",\"kale\",\"lettuce\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥬\" src=\"1f96c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},sweet_potato:{keywords:[\"food\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍠\" src=\"1f360.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},peanuts:{keywords:[\"food\",\"nut\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥜\" src=\"1f95c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},honey_pot:{keywords:[\"bees\",\"sweet\",\"kitchen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍯\" src=\"1f36f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},croissant:{keywords:[\"food\",\"bread\",\"french\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥐\" src=\"1f950.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bread:{keywords:[\"food\",\"wheat\",\"breakfast\",\"toast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍞\" src=\"1f35e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},baguette_bread:{keywords:[\"food\",\"bread\",\"french\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥖\" src=\"1f956.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bagel:{keywords:[\"food\",\"bread\",\"bakery\",\"schmear\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥯\" src=\"1f96f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pretzel:{keywords:[\"food\",\"bread\",\"twisted\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥨\" src=\"1f968.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cheese:{keywords:[\"food\",\"chadder\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧀\" src=\"1f9c0.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},egg:{keywords:[\"food\",\"chicken\",\"breakfast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥚\" src=\"1f95a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bacon:{keywords:[\"food\",\"breakfast\",\"pork\",\"pig\",\"meat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥓\" src=\"1f953.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},steak:{keywords:[\"food\",\"cow\",\"meat\",\"cut\",\"chop\",\"lambchop\",\"porkchop\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥩\" src=\"1f969.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pancakes:{keywords:[\"food\",\"breakfast\",\"flapjacks\",\"hotcakes\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥞\" src=\"1f95e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},poultry_leg:{keywords:[\"food\",\"meat\",\"drumstick\",\"bird\",\"chicken\",\"turkey\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍗\" src=\"1f357.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},meat_on_bone:{keywords:[\"good\",\"food\",\"drumstick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍖\" src=\"1f356.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bone:{keywords:[\"skeleton\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦴\" src=\"1f9b4.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fried_shrimp:{keywords:[\"food\",\"animal\",\"appetizer\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍤\" src=\"1f364.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fried_egg:{keywords:[\"food\",\"breakfast\",\"kitchen\",\"egg\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍳\" src=\"1f373.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},hamburger:{keywords:[\"meat\",\"fast food\",\"beef\",\"cheeseburger\",\"mcdonalds\",\"burger king\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍔\" src=\"1f354.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fries:{keywords:[\"chips\",\"snack\",\"fast food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍟\" src=\"1f35f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},stuffed_flatbread:{keywords:[\"food\",\"flatbread\",\"stuffed\",\"gyro\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥙\" src=\"1f959.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},hotdog:{keywords:[\"food\",\"frankfurter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌭\" src=\"1f32d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pizza:{keywords:[\"food\",\"party\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍕\" src=\"1f355.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},sandwich:{keywords:[\"food\",\"lunch\",\"bread\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥪\" src=\"1f96a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},canned_food:{keywords:[\"food\",\"soup\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥫\" src=\"1f96b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},spaghetti:{keywords:[\"food\",\"italian\",\"noodle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍝\" src=\"1f35d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},taco:{keywords:[\"food\",\"mexican\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌮\" src=\"1f32e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},burrito:{keywords:[\"food\",\"mexican\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌯\" src=\"1f32f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},green_salad:{keywords:[\"food\",\"healthy\",\"lettuce\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥗\" src=\"1f957.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},shallow_pan_of_food:{keywords:[\"food\",\"cooking\",\"casserole\",\"paella\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥘\" src=\"1f958.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},ramen:{keywords:[\"food\",\"japanese\",\"noodle\",\"chopsticks\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍜\" src=\"1f35c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},stew:{keywords:[\"food\",\"meat\",\"soup\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍲\" src=\"1f372.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fish_cake:{keywords:[\"food\",\"japan\",\"sea\",\"beach\",\"narutomaki\",\"pink\",\"swirl\",\"kamaboko\",\"surimi\",\"ramen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍥\" src=\"1f365.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fortune_cookie:{keywords:[\"food\",\"prophecy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥠\" src=\"1f960.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},sushi:{keywords:[\"food\",\"fish\",\"japanese\",\"rice\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍣\" src=\"1f363.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bento:{keywords:[\"food\",\"japanese\",\"box\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍱\" src=\"1f371.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},curry:{keywords:[\"food\",\"spicy\",\"hot\",\"indian\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍛\" src=\"1f35b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},rice_ball:{keywords:[\"food\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍙\" src=\"1f359.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},rice:{keywords:[\"food\",\"china\",\"asian\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍚\" src=\"1f35a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},rice_cracker:{keywords:[\"food\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍘\" src=\"1f358.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},oden:{keywords:[\"food\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍢\" src=\"1f362.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},dango:{keywords:[\"food\",\"dessert\",\"sweet\",\"japanese\",\"barbecue\",\"meat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍡\" src=\"1f361.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},shaved_ice:{keywords:[\"hot\",\"dessert\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍧\" src=\"1f367.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},ice_cream:{keywords:[\"food\",\"hot\",\"dessert\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍨\" src=\"1f368.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},icecream:{keywords:[\"food\",\"hot\",\"dessert\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍦\" src=\"1f366.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},pie:{keywords:[\"food\",\"dessert\",\"pastry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥧\" src=\"1f967.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cake:{keywords:[\"food\",\"dessert\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍰\" src=\"1f370.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cupcake:{keywords:[\"food\",\"dessert\",\"bakery\",\"sweet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧁\" src=\"1f9c1.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},moon_cake:{keywords:[\"food\",\"autumn\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥮\" src=\"1f96e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},birthday:{keywords:[\"food\",\"dessert\",\"cake\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎂\" src=\"1f382.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},custard:{keywords:[\"dessert\",\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍮\" src=\"1f36e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},candy:{keywords:[\"snack\",\"dessert\",\"sweet\",\"lolly\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍬\" src=\"1f36c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},lollipop:{keywords:[\"food\",\"snack\",\"candy\",\"sweet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍭\" src=\"1f36d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},chocolate_bar:{keywords:[\"food\",\"snack\",\"dessert\",\"sweet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍫\" src=\"1f36b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},popcorn:{keywords:[\"food\",\"movie theater\",\"films\",\"snack\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍿\" src=\"1f37f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},dumpling:{keywords:[\"food\",\"empanada\",\"pierogi\",\"potsticker\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥟\" src=\"1f95f.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},doughnut:{keywords:[\"food\",\"dessert\",\"snack\",\"sweet\",\"donut\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍩\" src=\"1f369.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cookie:{keywords:[\"food\",\"snack\",\"oreo\",\"chocolate\",\"sweet\",\"dessert\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍪\" src=\"1f36a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},milk_glass:{keywords:[\"beverage\",\"drink\",\"cow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥛\" src=\"1f95b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},beer:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍺\" src=\"1f37a.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},beers:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍻\" src=\"1f37b.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},clinking_glasses:{keywords:[\"beverage\",\"drink\",\"party\",\"alcohol\",\"celebrate\",\"cheers\",\"wine\",\"champagne\",\"toast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥂\" src=\"1f942.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},wine_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"booze\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍷\" src=\"1f377.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},tumbler_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"liquor\",\"booze\",\"bourbon\",\"scotch\",\"whisky\",\"glass\",\"shot\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥃\" src=\"1f943.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cocktail:{keywords:[\"drink\",\"drunk\",\"alcohol\",\"beverage\",\"booze\",\"mojito\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍸\" src=\"1f378.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},tropical_drink:{keywords:[\"beverage\",\"cocktail\",\"summer\",\"beach\",\"alcohol\",\"booze\",\"mojito\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍹\" src=\"1f379.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},champagne:{keywords:[\"drink\",\"wine\",\"bottle\",\"celebration\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍾\" src=\"1f37e.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},sake:{keywords:[\"wine\",\"drink\",\"drunk\",\"beverage\",\"japanese\",\"alcohol\",\"booze\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍶\" src=\"1f376.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},tea:{keywords:[\"drink\",\"bowl\",\"breakfast\",\"green\",\"british\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍵\" src=\"1f375.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},cup_with_straw:{keywords:[\"drink\",\"soda\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥤\" src=\"1f964.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},coffee:{keywords:[\"beverage\",\"caffeine\",\"latte\",\"espresso\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☕\" src=\"2615.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},baby_bottle:{keywords:[\"food\",\"container\",\"milk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍼\" src=\"1f37c.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},salt:{keywords:[\"condiment\",\"shaker\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧂\" src=\"1f9c2.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},spoon:{keywords:[\"cutlery\",\"kitchen\",\"tableware\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥄\" src=\"1f944.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},fork_and_knife:{keywords:[\"cutlery\",\"kitchen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍴\" src=\"1f374.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},plate_with_cutlery:{keywords:[\"food\",\"eat\",\"meal\",\"lunch\",\"dinner\",\"restaurant\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🍽\" src=\"1f37d.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},bowl_with_spoon:{keywords:[\"food\",\"breakfast\",\"cereal\",\"oatmeal\",\"porridge\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥣\" src=\"1f963.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},takeout_box:{keywords:[\"food\",\"leftovers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥡\" src=\"1f961.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},chopsticks:{keywords:[\"food\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥢\" src=\"1f962.png\"/>',fitzpatrick_scale:false,category:\"food_and_drink\"},soccer:{keywords:[\"sports\",\"football\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚽\" src=\"26bd.png\"/>',fitzpatrick_scale:false,category:\"activity\"},basketball:{keywords:[\"sports\",\"balls\",\"NBA\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏀\" src=\"1f3c0.png\"/>',fitzpatrick_scale:false,category:\"activity\"},football:{keywords:[\"sports\",\"balls\",\"NFL\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏈\" src=\"1f3c8.png\"/>',fitzpatrick_scale:false,category:\"activity\"},baseball:{keywords:[\"sports\",\"balls\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚾\" src=\"26be.png\"/>',fitzpatrick_scale:false,category:\"activity\"},softball:{keywords:[\"sports\",\"balls\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥎\" src=\"1f94e.png\"/>',fitzpatrick_scale:false,category:\"activity\"},tennis:{keywords:[\"sports\",\"balls\",\"green\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎾\" src=\"1f3be.png\"/>',fitzpatrick_scale:false,category:\"activity\"},volleyball:{keywords:[\"sports\",\"balls\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏐\" src=\"1f3d0.png\"/>',fitzpatrick_scale:false,category:\"activity\"},rugby_football:{keywords:[\"sports\",\"team\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏉\" src=\"1f3c9.png\"/>',fitzpatrick_scale:false,category:\"activity\"},flying_disc:{keywords:[\"sports\",\"frisbee\",\"ultimate\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥏\" src=\"1f94f.png\"/>',fitzpatrick_scale:false,category:\"activity\"},\"8ball\":{keywords:[\"pool\",\"hobby\",\"game\",\"luck\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎱\" src=\"1f3b1.png\"/>',fitzpatrick_scale:false,category:\"activity\"},golf:{keywords:[\"sports\",\"business\",\"flag\",\"hole\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛳\" src=\"26f3.png\"/>',fitzpatrick_scale:false,category:\"activity\"},golfing_woman:{keywords:[\"sports\",\"business\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏌️‍♀️\" src=\"1f3cc-fe0f-200d-2640-fe0f.png\"/>',fitzpatrick_scale:false,category:\"activity\"},golfing_man:{keywords:[\"sports\",\"business\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏌\" src=\"1f3cc.png\"/>',fitzpatrick_scale:true,category:\"activity\"},ping_pong:{keywords:[\"sports\",\"pingpong\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏓\" src=\"1f3d3.png\"/>',fitzpatrick_scale:false,category:\"activity\"},badminton:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏸\" src=\"1f3f8.png\"/>',fitzpatrick_scale:false,category:\"activity\"},goal_net:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥅\" src=\"1f945.png\"/>',fitzpatrick_scale:false,category:\"activity\"},ice_hockey:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏒\" src=\"1f3d2.png\"/>',fitzpatrick_scale:false,category:\"activity\"},field_hockey:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏑\" src=\"1f3d1.png\"/>',fitzpatrick_scale:false,category:\"activity\"},lacrosse:{keywords:[\"sports\",\"ball\",\"stick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥍\" src=\"1f94d.png\"/>',fitzpatrick_scale:false,category:\"activity\"},cricket:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏏\" src=\"1f3cf.png\"/>',fitzpatrick_scale:false,category:\"activity\"},ski:{keywords:[\"sports\",\"winter\",\"cold\",\"snow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎿\" src=\"1f3bf.png\"/>',fitzpatrick_scale:false,category:\"activity\"},skier:{keywords:[\"sports\",\"winter\",\"snow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛷\" src=\"26f7.png\"/>',fitzpatrick_scale:false,category:\"activity\"},snowboarder:{keywords:[\"sports\",\"winter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏂\" src=\"1f3c2.png\"/>',fitzpatrick_scale:true,category:\"activity\"},person_fencing:{keywords:[\"sports\",\"fencing\",\"sword\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤺\" src=\"1f93a.png\"/>',fitzpatrick_scale:false,category:\"activity\"},women_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤼‍♀️\" src=\"1f93c-200d-2640-fe0f.png\"/>',fitzpatrick_scale:false,category:\"activity\"},men_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤼‍♂️\" src=\"1f93c-200d-2642-fe0f.png\"/>',fitzpatrick_scale:false,category:\"activity\"},woman_cartwheeling:{keywords:[\"gymnastics\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤸‍♀️\" src=\"1f938-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},man_cartwheeling:{keywords:[\"gymnastics\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤸‍♂️\" src=\"1f938-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},woman_playing_handball:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤾‍♀️\" src=\"1f93e-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},man_playing_handball:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤾‍♂️\" src=\"1f93e-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},ice_skate:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛸\" src=\"26f8.png\"/>',fitzpatrick_scale:false,category:\"activity\"},curling_stone:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥌\" src=\"1f94c.png\"/>',fitzpatrick_scale:false,category:\"activity\"},skateboard:{keywords:[\"board\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛹\" src=\"1f6f9.png\"/>',fitzpatrick_scale:false,category:\"activity\"},sled:{keywords:[\"sleigh\",\"luge\",\"toboggan\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛷\" src=\"1f6f7.png\"/>',fitzpatrick_scale:false,category:\"activity\"},bow_and_arrow:{keywords:[\"sports\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏹\" src=\"1f3f9.png\"/>',fitzpatrick_scale:false,category:\"activity\"},fishing_pole_and_fish:{keywords:[\"food\",\"hobby\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎣\" src=\"1f3a3.png\"/>',fitzpatrick_scale:false,category:\"activity\"},boxing_glove:{keywords:[\"sports\",\"fighting\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥊\" src=\"1f94a.png\"/>',fitzpatrick_scale:false,category:\"activity\"},martial_arts_uniform:{keywords:[\"judo\",\"karate\",\"taekwondo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥋\" src=\"1f94b.png\"/>',fitzpatrick_scale:false,category:\"activity\"},rowing_woman:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚣‍♀️\" src=\"1f6a3-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},rowing_man:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚣\" src=\"1f6a3.png\"/>',fitzpatrick_scale:true,category:\"activity\"},climbing_woman:{keywords:[\"sports\",\"hobby\",\"woman\",\"female\",\"rock\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧗‍♀️\" src=\"1f9d7-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},climbing_man:{keywords:[\"sports\",\"hobby\",\"man\",\"male\",\"rock\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧗‍♂️\" src=\"1f9d7-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},swimming_woman:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏊‍♀️\" src=\"1f3ca-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},swimming_man:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏊\" src=\"1f3ca.png\"/>',fitzpatrick_scale:true,category:\"activity\"},woman_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤽‍♀️\" src=\"1f93d-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},man_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤽‍♂️\" src=\"1f93d-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},woman_in_lotus_position:{keywords:[\"woman\",\"female\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧘‍♀️\" src=\"1f9d8-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},man_in_lotus_position:{keywords:[\"man\",\"male\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧘‍♂️\" src=\"1f9d8-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},surfing_woman:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏄‍♀️\" src=\"1f3c4-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},surfing_man:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏄\" src=\"1f3c4.png\"/>',fitzpatrick_scale:true,category:\"activity\"},bath:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛀\" src=\"1f6c0.png\"/>',fitzpatrick_scale:true,category:\"activity\"},basketball_woman:{keywords:[\"sports\",\"human\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛹️‍♀️\" src=\"26f9-fe0f-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},basketball_man:{keywords:[\"sports\",\"human\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛹\" src=\"26f9.png\"/>',fitzpatrick_scale:true,category:\"activity\"},weight_lifting_woman:{keywords:[\"sports\",\"training\",\"exercise\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏋️‍♀️\" src=\"1f3cb-fe0f-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},weight_lifting_man:{keywords:[\"sports\",\"training\",\"exercise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏋\" src=\"1f3cb.png\"/>',fitzpatrick_scale:true,category:\"activity\"},biking_woman:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚴‍♀️\" src=\"1f6b4-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},biking_man:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚴\" src=\"1f6b4.png\"/>',fitzpatrick_scale:true,category:\"activity\"},mountain_biking_woman:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\",\"woman\",\"female\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚵‍♀️\" src=\"1f6b5-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},mountain_biking_man:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚵\" src=\"1f6b5.png\"/>',fitzpatrick_scale:true,category:\"activity\"},horse_racing:{keywords:[\"animal\",\"betting\",\"competition\",\"gambling\",\"luck\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏇\" src=\"1f3c7.png\"/>',fitzpatrick_scale:true,category:\"activity\"},business_suit_levitating:{keywords:[\"suit\",\"business\",\"levitate\",\"hover\",\"jump\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕴\" src=\"1f574.png\"/>',fitzpatrick_scale:true,category:\"activity\"},trophy:{keywords:[\"win\",\"award\",\"contest\",\"place\",\"ftw\",\"ceremony\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏆\" src=\"1f3c6.png\"/>',fitzpatrick_scale:false,category:\"activity\"},running_shirt_with_sash:{keywords:[\"play\",\"pageant\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎽\" src=\"1f3bd.png\"/>',fitzpatrick_scale:false,category:\"activity\"},medal_sports:{keywords:[\"award\",\"winning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏅\" src=\"1f3c5.png\"/>',fitzpatrick_scale:false,category:\"activity\"},medal_military:{keywords:[\"award\",\"winning\",\"army\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎖\" src=\"1f396.png\"/>',fitzpatrick_scale:false,category:\"activity\"},\"1st_place_medal\":{keywords:[\"award\",\"winning\",\"first\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥇\" src=\"1f947.png\"/>',fitzpatrick_scale:false,category:\"activity\"},\"2nd_place_medal\":{keywords:[\"award\",\"second\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥈\" src=\"1f948.png\"/>',fitzpatrick_scale:false,category:\"activity\"},\"3rd_place_medal\":{keywords:[\"award\",\"third\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥉\" src=\"1f949.png\"/>',fitzpatrick_scale:false,category:\"activity\"},reminder_ribbon:{keywords:[\"sports\",\"cause\",\"support\",\"awareness\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎗\" src=\"1f397.png\"/>',fitzpatrick_scale:false,category:\"activity\"},rosette:{keywords:[\"flower\",\"decoration\",\"military\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏵\" src=\"1f3f5.png\"/>',fitzpatrick_scale:false,category:\"activity\"},ticket:{keywords:[\"event\",\"concert\",\"pass\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎫\" src=\"1f3ab.png\"/>',fitzpatrick_scale:false,category:\"activity\"},tickets:{keywords:[\"sports\",\"concert\",\"entrance\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎟\" src=\"1f39f.png\"/>',fitzpatrick_scale:false,category:\"activity\"},performing_arts:{keywords:[\"acting\",\"theater\",\"drama\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎭\" src=\"1f3ad.png\"/>',fitzpatrick_scale:false,category:\"activity\"},art:{keywords:[\"design\",\"paint\",\"draw\",\"colors\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎨\" src=\"1f3a8.png\"/>',fitzpatrick_scale:false,category:\"activity\"},circus_tent:{keywords:[\"festival\",\"carnival\",\"party\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎪\" src=\"1f3aa.png\"/>',fitzpatrick_scale:false,category:\"activity\"},woman_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤹‍♀️\" src=\"1f939-200d-2640-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},man_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🤹‍♂️\" src=\"1f939-200d-2642-fe0f.png\"/>',fitzpatrick_scale:true,category:\"activity\"},microphone:{keywords:[\"sound\",\"music\",\"PA\",\"sing\",\"talkshow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎤\" src=\"1f3a4.png\"/>',fitzpatrick_scale:false,category:\"activity\"},headphones:{keywords:[\"music\",\"score\",\"gadgets\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎧\" src=\"1f3a7.png\"/>',fitzpatrick_scale:false,category:\"activity\"},musical_score:{keywords:[\"treble\",\"clef\",\"compose\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎼\" src=\"1f3bc.png\"/>',fitzpatrick_scale:false,category:\"activity\"},musical_keyboard:{keywords:[\"piano\",\"instrument\",\"compose\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎹\" src=\"1f3b9.png\"/>',fitzpatrick_scale:false,category:\"activity\"},drum:{keywords:[\"music\",\"instrument\",\"drumsticks\",\"snare\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🥁\" src=\"1f941.png\"/>',fitzpatrick_scale:false,category:\"activity\"},saxophone:{keywords:[\"music\",\"instrument\",\"jazz\",\"blues\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎷\" src=\"1f3b7.png\"/>',fitzpatrick_scale:false,category:\"activity\"},trumpet:{keywords:[\"music\",\"brass\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎺\" src=\"1f3ba.png\"/>',fitzpatrick_scale:false,category:\"activity\"},guitar:{keywords:[\"music\",\"instrument\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎸\" src=\"1f3b8.png\"/>',fitzpatrick_scale:false,category:\"activity\"},violin:{keywords:[\"music\",\"instrument\",\"orchestra\",\"symphony\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎻\" src=\"1f3bb.png\"/>',fitzpatrick_scale:false,category:\"activity\"},clapper:{keywords:[\"movie\",\"film\",\"record\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎬\" src=\"1f3ac.png\"/>',fitzpatrick_scale:false,category:\"activity\"},video_game:{keywords:[\"play\",\"console\",\"PS4\",\"controller\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎮\" src=\"1f3ae.png\"/>',fitzpatrick_scale:false,category:\"activity\"},space_invader:{keywords:[\"game\",\"arcade\",\"play\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"👾\" src=\"1f47e.png\"/>',fitzpatrick_scale:false,category:\"activity\"},dart:{keywords:[\"game\",\"play\",\"bar\",\"target\",\"bullseye\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎯\" src=\"1f3af.png\"/>',fitzpatrick_scale:false,category:\"activity\"},game_die:{keywords:[\"dice\",\"random\",\"tabletop\",\"play\",\"luck\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎲\" src=\"1f3b2.png\"/>',fitzpatrick_scale:false,category:\"activity\"},chess_pawn:{keywords:[\"expendable\"],char:\"♟\",fitzpatrick_scale:false,category:\"activity\"},slot_machine:{keywords:[\"bet\",\"gamble\",\"vegas\",\"fruit machine\",\"luck\",\"casino\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎰\" src=\"1f3b0.png\"/>',fitzpatrick_scale:false,category:\"activity\"},jigsaw:{keywords:[\"interlocking\",\"puzzle\",\"piece\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧩\" src=\"1f9e9.png\"/>',fitzpatrick_scale:false,category:\"activity\"},bowling:{keywords:[\"sports\",\"fun\",\"play\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎳\" src=\"1f3b3.png\"/>',fitzpatrick_scale:false,category:\"activity\"},red_car:{keywords:[\"red\",\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚗\" src=\"1f697.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},taxi:{keywords:[\"uber\",\"vehicle\",\"cars\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚕\" src=\"1f695.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},blue_car:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚙\" src=\"1f699.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bus:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚌\" src=\"1f68c.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},trolleybus:{keywords:[\"bart\",\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚎\" src=\"1f68e.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},racing_car:{keywords:[\"sports\",\"race\",\"fast\",\"formula\",\"f1\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏎\" src=\"1f3ce.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},police_car:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"law\",\"legal\",\"enforcement\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚓\" src=\"1f693.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},ambulance:{keywords:[\"health\",\"911\",\"hospital\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚑\" src=\"1f691.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},fire_engine:{keywords:[\"transportation\",\"cars\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚒\" src=\"1f692.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},minibus:{keywords:[\"vehicle\",\"car\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚐\" src=\"1f690.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},truck:{keywords:[\"cars\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚚\" src=\"1f69a.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},articulated_lorry:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"express\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚛\" src=\"1f69b.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},tractor:{keywords:[\"vehicle\",\"car\",\"farming\",\"agriculture\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚜\" src=\"1f69c.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},kick_scooter:{keywords:[\"vehicle\",\"kick\",\"razor\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛴\" src=\"1f6f4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},motorcycle:{keywords:[\"race\",\"sports\",\"fast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏍\" src=\"1f3cd.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bike:{keywords:[\"sports\",\"bicycle\",\"exercise\",\"hipster\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚲\" src=\"1f6b2.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},motor_scooter:{keywords:[\"vehicle\",\"vespa\",\"sasha\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛵\" src=\"1f6f5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},rotating_light:{keywords:[\"police\",\"ambulance\",\"911\",\"emergency\",\"alert\",\"error\",\"pinged\",\"law\",\"legal\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚨\" src=\"1f6a8.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_police_car:{keywords:[\"vehicle\",\"law\",\"legal\",\"enforcement\",\"911\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚔\" src=\"1f694.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_bus:{keywords:[\"vehicle\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚍\" src=\"1f68d.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_automobile:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚘\" src=\"1f698.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_taxi:{keywords:[\"vehicle\",\"cars\",\"uber\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚖\" src=\"1f696.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},aerial_tramway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚡\" src=\"1f6a1.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_cableway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚠\" src=\"1f6a0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},suspension_railway:{keywords:[\"vehicle\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚟\" src=\"1f69f.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},railway_car:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚃\" src=\"1f683.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},train:{keywords:[\"transportation\",\"vehicle\",\"carriage\",\"public\",\"travel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚋\" src=\"1f68b.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},monorail:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚝\" src=\"1f69d.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bullettrain_side:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚄\" src=\"1f684.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bullettrain_front:{keywords:[\"transportation\",\"vehicle\",\"speed\",\"fast\",\"public\",\"travel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚅\" src=\"1f685.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},light_rail:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚈\" src=\"1f688.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_railway:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚞\" src=\"1f69e.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},steam_locomotive:{keywords:[\"transportation\",\"vehicle\",\"train\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚂\" src=\"1f682.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},train2:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚆\" src=\"1f686.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},metro:{keywords:[\"transportation\",\"blue-square\",\"mrt\",\"underground\",\"tube\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚇\" src=\"1f687.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},tram:{keywords:[\"transportation\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚊\" src=\"1f68a.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},station:{keywords:[\"transportation\",\"vehicle\",\"public\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚉\" src=\"1f689.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},flying_saucer:{keywords:[\"transportation\",\"vehicle\",\"ufo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛸\" src=\"1f6f8.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},helicopter:{keywords:[\"transportation\",\"vehicle\",\"fly\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚁\" src=\"1f681.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},small_airplane:{keywords:[\"flight\",\"transportation\",\"fly\",\"vehicle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛩\" src=\"1f6e9.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},airplane:{keywords:[\"vehicle\",\"transportation\",\"flight\",\"fly\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✈️\" src=\"2708.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},flight_departure:{keywords:[\"airport\",\"flight\",\"landing\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛫\" src=\"1f6eb.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},flight_arrival:{keywords:[\"airport\",\"flight\",\"boarding\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛬\" src=\"1f6ec.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},sailboat:{keywords:[\"ship\",\"summer\",\"transportation\",\"water\",\"sailing\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛵\" src=\"26f5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},motor_boat:{keywords:[\"ship\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛥\" src=\"1f6e5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},speedboat:{keywords:[\"ship\",\"transportation\",\"vehicle\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚤\" src=\"1f6a4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},ferry:{keywords:[\"boat\",\"ship\",\"yacht\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛴\" src=\"26f4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},passenger_ship:{keywords:[\"yacht\",\"cruise\",\"ferry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛳\" src=\"1f6f3.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},rocket:{keywords:[\"launch\",\"ship\",\"staffmode\",\"NASA\",\"outer space\",\"outer_space\",\"fly\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚀\" src=\"1f680.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},artificial_satellite:{keywords:[\"communication\",\"gps\",\"orbit\",\"spaceflight\",\"NASA\",\"ISS\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛰\" src=\"1f6f0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},seat:{keywords:[\"sit\",\"airplane\",\"transport\",\"bus\",\"flight\",\"fly\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💺\" src=\"1f4ba.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},canoe:{keywords:[\"boat\",\"paddle\",\"water\",\"ship\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛶\" src=\"1f6f6.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},anchor:{keywords:[\"ship\",\"ferry\",\"sea\",\"boat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚓\" src=\"2693.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},construction:{keywords:[\"wip\",\"progress\",\"caution\",\"warning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚧\" src=\"1f6a7.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},fuelpump:{keywords:[\"gas station\",\"petroleum\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛽\" src=\"26fd.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},busstop:{keywords:[\"transportation\",\"wait\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚏\" src=\"1f68f.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},vertical_traffic_light:{keywords:[\"transportation\",\"driving\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚦\" src=\"1f6a6.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},traffic_light:{keywords:[\"transportation\",\"signal\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚥\" src=\"1f6a5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},checkered_flag:{keywords:[\"contest\",\"finishline\",\"race\",\"gokart\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏁\" src=\"1f3c1.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},ship:{keywords:[\"transportation\",\"titanic\",\"deploy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚢\" src=\"1f6a2.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},ferris_wheel:{keywords:[\"photo\",\"carnival\",\"londoneye\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎡\" src=\"1f3a1.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},roller_coaster:{keywords:[\"carnival\",\"playground\",\"photo\",\"fun\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎢\" src=\"1f3a2.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},carousel_horse:{keywords:[\"photo\",\"carnival\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎠\" src=\"1f3a0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},building_construction:{keywords:[\"wip\",\"working\",\"progress\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏗\" src=\"1f3d7.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},foggy:{keywords:[\"photo\",\"mountain\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌁\" src=\"1f301.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},tokyo_tower:{keywords:[\"photo\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗼\" src=\"1f5fc.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},factory:{keywords:[\"building\",\"industry\",\"pollution\",\"smoke\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏭\" src=\"1f3ed.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},fountain:{keywords:[\"photo\",\"summer\",\"water\",\"fresh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛲\" src=\"26f2.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},rice_scene:{keywords:[\"photo\",\"japan\",\"asia\",\"tsukimi\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎑\" src=\"1f391.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mountain:{keywords:[\"photo\",\"nature\",\"environment\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛰\" src=\"26f0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_snow:{keywords:[\"photo\",\"nature\",\"environment\",\"winter\",\"cold\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏔\" src=\"1f3d4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mount_fuji:{keywords:[\"photo\",\"mountain\",\"nature\",\"japanese\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗻\" src=\"1f5fb.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},volcano:{keywords:[\"photo\",\"nature\",\"disaster\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌋\" src=\"1f30b.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},japan:{keywords:[\"nation\",\"country\",\"japanese\",\"asia\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗾\" src=\"1f5fe.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},camping:{keywords:[\"photo\",\"outdoors\",\"tent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏕\" src=\"1f3d5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},tent:{keywords:[\"photo\",\"camping\",\"outdoors\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛺\" src=\"26fa.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},national_park:{keywords:[\"photo\",\"environment\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏞\" src=\"1f3de.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},motorway:{keywords:[\"road\",\"cupertino\",\"interstate\",\"highway\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛣\" src=\"1f6e3.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},railway_track:{keywords:[\"train\",\"transportation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛤\" src=\"1f6e4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},sunrise:{keywords:[\"morning\",\"view\",\"vacation\",\"photo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌅\" src=\"1f305.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},sunrise_over_mountains:{keywords:[\"view\",\"vacation\",\"photo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌄\" src=\"1f304.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},desert:{keywords:[\"photo\",\"warm\",\"saharah\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏜\" src=\"1f3dc.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},beach_umbrella:{keywords:[\"weather\",\"summer\",\"sunny\",\"sand\",\"mojito\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏖\" src=\"1f3d6.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},desert_island:{keywords:[\"photo\",\"tropical\",\"mojito\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏝\" src=\"1f3dd.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},city_sunrise:{keywords:[\"photo\",\"good morning\",\"dawn\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌇\" src=\"1f307.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},city_sunset:{keywords:[\"photo\",\"evening\",\"sky\",\"buildings\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌆\" src=\"1f306.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},cityscape:{keywords:[\"photo\",\"night life\",\"urban\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏙\" src=\"1f3d9.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},night_with_stars:{keywords:[\"evening\",\"city\",\"downtown\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌃\" src=\"1f303.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bridge_at_night:{keywords:[\"photo\",\"sanfrancisco\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌉\" src=\"1f309.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},milky_way:{keywords:[\"photo\",\"space\",\"stars\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌌\" src=\"1f30c.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},stars:{keywords:[\"night\",\"photo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌠\" src=\"1f320.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},sparkler:{keywords:[\"stars\",\"night\",\"shine\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎇\" src=\"1f387.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},fireworks:{keywords:[\"photo\",\"festival\",\"carnival\",\"congratulations\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎆\" src=\"1f386.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},rainbow:{keywords:[\"nature\",\"happy\",\"unicorn_face\",\"photo\",\"sky\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌈\" src=\"1f308.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},houses:{keywords:[\"buildings\",\"photo\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏘\" src=\"1f3d8.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},european_castle:{keywords:[\"building\",\"royalty\",\"history\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏰\" src=\"1f3f0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},japanese_castle:{keywords:[\"photo\",\"building\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏯\" src=\"1f3ef.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},stadium:{keywords:[\"photo\",\"place\",\"sports\",\"concert\",\"venue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏟\" src=\"1f3df.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},statue_of_liberty:{keywords:[\"american\",\"newyork\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗽\" src=\"1f5fd.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},house:{keywords:[\"building\",\"home\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏠\" src=\"1f3e0.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},house_with_garden:{keywords:[\"home\",\"plant\",\"nature\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏡\" src=\"1f3e1.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},derelict_house:{keywords:[\"abandon\",\"evict\",\"broken\",\"building\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏚\" src=\"1f3da.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},office:{keywords:[\"building\",\"bureau\",\"work\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏢\" src=\"1f3e2.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},department_store:{keywords:[\"building\",\"shopping\",\"mall\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏬\" src=\"1f3ec.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},post_office:{keywords:[\"building\",\"envelope\",\"communication\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏣\" src=\"1f3e3.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},european_post_office:{keywords:[\"building\",\"email\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏤\" src=\"1f3e4.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},hospital:{keywords:[\"building\",\"health\",\"surgery\",\"doctor\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏥\" src=\"1f3e5.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},bank:{keywords:[\"building\",\"money\",\"sales\",\"cash\",\"business\",\"enterprise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏦\" src=\"1f3e6.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},hotel:{keywords:[\"building\",\"accomodation\",\"checkin\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏨\" src=\"1f3e8.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},convenience_store:{keywords:[\"building\",\"shopping\",\"groceries\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏪\" src=\"1f3ea.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},school:{keywords:[\"building\",\"student\",\"education\",\"learn\",\"teach\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏫\" src=\"1f3eb.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},love_hotel:{keywords:[\"like\",\"affection\",\"dating\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏩\" src=\"1f3e9.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},wedding:{keywords:[\"love\",\"like\",\"affection\",\"couple\",\"marriage\",\"bride\",\"groom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💒\" src=\"1f492.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},classical_building:{keywords:[\"art\",\"culture\",\"history\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏛\" src=\"1f3db.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},church:{keywords:[\"building\",\"religion\",\"christ\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛪\" src=\"26ea.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},mosque:{keywords:[\"islam\",\"worship\",\"minaret\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕌\" src=\"1f54c.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},synagogue:{keywords:[\"judaism\",\"worship\",\"temple\",\"jewish\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕍\" src=\"1f54d.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},kaaba:{keywords:[\"mecca\",\"mosque\",\"islam\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕋\" src=\"1f54b.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},shinto_shrine:{keywords:[\"temple\",\"japan\",\"kyoto\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛩\" src=\"26e9.png\"/>',fitzpatrick_scale:false,category:\"travel_and_places\"},watch:{keywords:[\"time\",\"accessories\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⌚\" src=\"231a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},iphone:{keywords:[\"technology\",\"apple\",\"gadgets\",\"dial\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📱\" src=\"1f4f1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},calling:{keywords:[\"iphone\",\"incoming\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📲\" src=\"1f4f2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},computer:{keywords:[\"technology\",\"laptop\",\"screen\",\"display\",\"monitor\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💻\" src=\"1f4bb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},keyboard:{keywords:[\"technology\",\"computer\",\"type\",\"input\",\"text\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⌨\" src=\"2328.png\"/>',fitzpatrick_scale:false,category:\"objects\"},desktop_computer:{keywords:[\"technology\",\"computing\",\"screen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖥\" src=\"1f5a5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},printer:{keywords:[\"paper\",\"ink\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖨\" src=\"1f5a8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},computer_mouse:{keywords:[\"click\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖱\" src=\"1f5b1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},trackball:{keywords:[\"technology\",\"trackpad\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖲\" src=\"1f5b2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},joystick:{keywords:[\"game\",\"play\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕹\" src=\"1f579.png\"/>',fitzpatrick_scale:false,category:\"objects\"},clamp:{keywords:[\"tool\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗜\" src=\"1f5dc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},minidisc:{keywords:[\"technology\",\"record\",\"data\",\"disk\",\"90s\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💽\" src=\"1f4bd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},floppy_disk:{keywords:[\"oldschool\",\"technology\",\"save\",\"90s\",\"80s\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💾\" src=\"1f4be.png\"/>',fitzpatrick_scale:false,category:\"objects\"},cd:{keywords:[\"technology\",\"dvd\",\"disk\",\"disc\",\"90s\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💿\" src=\"1f4bf.png\"/>',fitzpatrick_scale:false,category:\"objects\"},dvd:{keywords:[\"cd\",\"disk\",\"disc\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📀\" src=\"1f4c0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},vhs:{keywords:[\"record\",\"video\",\"oldschool\",\"90s\",\"80s\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📼\" src=\"1f4fc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},camera:{keywords:[\"gadgets\",\"photography\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📷\" src=\"1f4f7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},camera_flash:{keywords:[\"photography\",\"gadgets\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📸\" src=\"1f4f8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},video_camera:{keywords:[\"film\",\"record\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📹\" src=\"1f4f9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},movie_camera:{keywords:[\"film\",\"record\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎥\" src=\"1f3a5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},film_projector:{keywords:[\"video\",\"tape\",\"record\",\"movie\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📽\" src=\"1f4fd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},film_strip:{keywords:[\"movie\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎞\" src=\"1f39e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},telephone_receiver:{keywords:[\"technology\",\"communication\",\"dial\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📞\" src=\"1f4de.png\"/>',fitzpatrick_scale:false,category:\"objects\"},phone:{keywords:[\"technology\",\"communication\",\"dial\",\"telephone\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☎️\" src=\"260e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pager:{keywords:[\"bbcall\",\"oldschool\",\"90s\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📟\" src=\"1f4df.png\"/>',fitzpatrick_scale:false,category:\"objects\"},fax:{keywords:[\"communication\",\"technology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📠\" src=\"1f4e0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},tv:{keywords:[\"technology\",\"program\",\"oldschool\",\"show\",\"television\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📺\" src=\"1f4fa.png\"/>',fitzpatrick_scale:false,category:\"objects\"},radio:{keywords:[\"communication\",\"music\",\"podcast\",\"program\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📻\" src=\"1f4fb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},studio_microphone:{keywords:[\"sing\",\"recording\",\"artist\",\"talkshow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎙\" src=\"1f399.png\"/>',fitzpatrick_scale:false,category:\"objects\"},level_slider:{keywords:[\"scale\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎚\" src=\"1f39a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},control_knobs:{keywords:[\"dial\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎛\" src=\"1f39b.png\"/>',fitzpatrick_scale:false,category:\"objects\"},compass:{keywords:[\"magnetic\",\"navigation\",\"orienteering\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧭\" src=\"1f9ed.png\"/>',fitzpatrick_scale:false,category:\"objects\"},stopwatch:{keywords:[\"time\",\"deadline\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏱\" src=\"23f1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},timer_clock:{keywords:[\"alarm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏲\" src=\"23f2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},alarm_clock:{keywords:[\"time\",\"wake\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏰\" src=\"23f0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mantelpiece_clock:{keywords:[\"time\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕰\" src=\"1f570.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hourglass_flowing_sand:{keywords:[\"oldschool\",\"time\",\"countdown\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏳\" src=\"23f3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hourglass:{keywords:[\"time\",\"clock\",\"oldschool\",\"limit\",\"exam\",\"quiz\",\"test\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⌛\" src=\"231b.png\"/>',fitzpatrick_scale:false,category:\"objects\"},satellite:{keywords:[\"communication\",\"future\",\"radio\",\"space\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📡\" src=\"1f4e1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},battery:{keywords:[\"power\",\"energy\",\"sustain\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔋\" src=\"1f50b.png\"/>',fitzpatrick_scale:false,category:\"objects\"},electric_plug:{keywords:[\"charger\",\"power\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔌\" src=\"1f50c.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bulb:{keywords:[\"light\",\"electricity\",\"idea\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💡\" src=\"1f4a1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},flashlight:{keywords:[\"dark\",\"camping\",\"sight\",\"night\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔦\" src=\"1f526.png\"/>',fitzpatrick_scale:false,category:\"objects\"},candle:{keywords:[\"fire\",\"wax\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕯\" src=\"1f56f.png\"/>',fitzpatrick_scale:false,category:\"objects\"},fire_extinguisher:{keywords:[\"quench\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧯\" src=\"1f9ef.png\"/>',fitzpatrick_scale:false,category:\"objects\"},wastebasket:{keywords:[\"bin\",\"trash\",\"rubbish\",\"garbage\",\"toss\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗑\" src=\"1f5d1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},oil_drum:{keywords:[\"barrell\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛢\" src=\"1f6e2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},money_with_wings:{keywords:[\"dollar\",\"bills\",\"payment\",\"sale\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💸\" src=\"1f4b8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},dollar:{keywords:[\"money\",\"sales\",\"bill\",\"currency\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💵\" src=\"1f4b5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},yen:{keywords:[\"money\",\"sales\",\"japanese\",\"dollar\",\"currency\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💴\" src=\"1f4b4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},euro:{keywords:[\"money\",\"sales\",\"dollar\",\"currency\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💶\" src=\"1f4b6.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pound:{keywords:[\"british\",\"sterling\",\"money\",\"sales\",\"bills\",\"uk\",\"england\",\"currency\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💷\" src=\"1f4b7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},moneybag:{keywords:[\"dollar\",\"payment\",\"coins\",\"sale\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💰\" src=\"1f4b0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},credit_card:{keywords:[\"money\",\"sales\",\"dollar\",\"bill\",\"payment\",\"shopping\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💳\" src=\"1f4b3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},gem:{keywords:[\"blue\",\"ruby\",\"diamond\",\"jewelry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💎\" src=\"1f48e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},balance_scale:{keywords:[\"law\",\"fairness\",\"weight\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚖\" src=\"2696.png\"/>',fitzpatrick_scale:false,category:\"objects\"},toolbox:{keywords:[\"tools\",\"diy\",\"fix\",\"maintainer\",\"mechanic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧰\" src=\"1f9f0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},wrench:{keywords:[\"tools\",\"diy\",\"ikea\",\"fix\",\"maintainer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔧\" src=\"1f527.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hammer:{keywords:[\"tools\",\"build\",\"create\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔨\" src=\"1f528.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hammer_and_pick:{keywords:[\"tools\",\"build\",\"create\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚒\" src=\"2692.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hammer_and_wrench:{keywords:[\"tools\",\"build\",\"create\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛠\" src=\"1f6e0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pick:{keywords:[\"tools\",\"dig\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛏\" src=\"26cf.png\"/>',fitzpatrick_scale:false,category:\"objects\"},nut_and_bolt:{keywords:[\"handy\",\"tools\",\"fix\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔩\" src=\"1f529.png\"/>',fitzpatrick_scale:false,category:\"objects\"},gear:{keywords:[\"cog\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚙\" src=\"2699.png\"/>',fitzpatrick_scale:false,category:\"objects\"},brick:{keywords:[\"bricks\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧱\" src=\"1f9f1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},chains:{keywords:[\"lock\",\"arrest\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛓\" src=\"26d3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},magnet:{keywords:[\"attraction\",\"magnetic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧲\" src=\"1f9f2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},gun:{keywords:[\"violence\",\"weapon\",\"pistol\",\"revolver\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔫\" src=\"1f52b.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bomb:{keywords:[\"boom\",\"explode\",\"explosion\",\"terrorism\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💣\" src=\"1f4a3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},firecracker:{keywords:[\"dynamite\",\"boom\",\"explode\",\"explosion\",\"explosive\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧨\" src=\"1f9e8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hocho:{keywords:[\"knife\",\"blade\",\"cutlery\",\"kitchen\",\"weapon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔪\" src=\"1f52a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},dagger:{keywords:[\"weapon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗡\" src=\"1f5e1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},crossed_swords:{keywords:[\"weapon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚔\" src=\"2694.png\"/>',fitzpatrick_scale:false,category:\"objects\"},shield:{keywords:[\"protection\",\"security\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛡\" src=\"1f6e1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},smoking:{keywords:[\"kills\",\"tobacco\",\"cigarette\",\"joint\",\"smoke\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚬\" src=\"1f6ac.png\"/>',fitzpatrick_scale:false,category:\"objects\"},skull_and_crossbones:{keywords:[\"poison\",\"danger\",\"deadly\",\"scary\",\"death\",\"pirate\",\"evil\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☠\" src=\"2620.png\"/>',fitzpatrick_scale:false,category:\"objects\"},coffin:{keywords:[\"vampire\",\"dead\",\"die\",\"death\",\"rip\",\"graveyard\",\"cemetery\",\"casket\",\"funeral\",\"box\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚰\" src=\"26b0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},funeral_urn:{keywords:[\"dead\",\"die\",\"death\",\"rip\",\"ashes\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚱\" src=\"26b1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},amphora:{keywords:[\"vase\",\"jar\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏺\" src=\"1f3fa.png\"/>',fitzpatrick_scale:false,category:\"objects\"},crystal_ball:{keywords:[\"disco\",\"party\",\"magic\",\"circus\",\"fortune_teller\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔮\" src=\"1f52e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},prayer_beads:{keywords:[\"dhikr\",\"religious\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📿\" src=\"1f4ff.png\"/>',fitzpatrick_scale:false,category:\"objects\"},nazar_amulet:{keywords:[\"bead\",\"charm\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧿\" src=\"1f9ff.png\"/>',fitzpatrick_scale:false,category:\"objects\"},barber:{keywords:[\"hair\",\"salon\",\"style\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💈\" src=\"1f488.png\"/>',fitzpatrick_scale:false,category:\"objects\"},alembic:{keywords:[\"distilling\",\"science\",\"experiment\",\"chemistry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚗\" src=\"2697.png\"/>',fitzpatrick_scale:false,category:\"objects\"},telescope:{keywords:[\"stars\",\"space\",\"zoom\",\"science\",\"astronomy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔭\" src=\"1f52d.png\"/>',fitzpatrick_scale:false,category:\"objects\"},microscope:{keywords:[\"laboratory\",\"experiment\",\"zoomin\",\"science\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔬\" src=\"1f52c.png\"/>',fitzpatrick_scale:false,category:\"objects\"},hole:{keywords:[\"embarrassing\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕳\" src=\"1f573.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pill:{keywords:[\"health\",\"medicine\",\"doctor\",\"pharmacy\",\"drug\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💊\" src=\"1f48a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},syringe:{keywords:[\"health\",\"hospital\",\"drugs\",\"blood\",\"medicine\",\"needle\",\"doctor\",\"nurse\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💉\" src=\"1f489.png\"/>',fitzpatrick_scale:false,category:\"objects\"},dna:{keywords:[\"biologist\",\"genetics\",\"life\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧬\" src=\"1f9ec.png\"/>',fitzpatrick_scale:false,category:\"objects\"},microbe:{keywords:[\"amoeba\",\"bacteria\",\"germs\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🦠\" src=\"1f9a0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},petri_dish:{keywords:[\"bacteria\",\"biology\",\"culture\",\"lab\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧫\" src=\"1f9eb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},test_tube:{keywords:[\"chemistry\",\"experiment\",\"lab\",\"science\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧪\" src=\"1f9ea.png\"/>',fitzpatrick_scale:false,category:\"objects\"},thermometer:{keywords:[\"weather\",\"temperature\",\"hot\",\"cold\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌡\" src=\"1f321.png\"/>',fitzpatrick_scale:false,category:\"objects\"},broom:{keywords:[\"cleaning\",\"sweeping\",\"witch\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧹\" src=\"1f9f9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},basket:{keywords:[\"laundry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧺\" src=\"1f9fa.png\"/>',fitzpatrick_scale:false,category:\"objects\"},toilet_paper:{keywords:[\"roll\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧻\" src=\"1f9fb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},label:{keywords:[\"sale\",\"tag\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏷\" src=\"1f3f7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bookmark:{keywords:[\"favorite\",\"label\",\"save\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔖\" src=\"1f516.png\"/>',fitzpatrick_scale:false,category:\"objects\"},toilet:{keywords:[\"restroom\",\"wc\",\"washroom\",\"bathroom\",\"potty\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚽\" src=\"1f6bd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},shower:{keywords:[\"clean\",\"water\",\"bathroom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚿\" src=\"1f6bf.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bathtub:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛁\" src=\"1f6c1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},soap:{keywords:[\"bar\",\"bathing\",\"cleaning\",\"lather\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧼\" src=\"1f9fc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},sponge:{keywords:[\"absorbing\",\"cleaning\",\"porous\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧽\" src=\"1f9fd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},lotion_bottle:{keywords:[\"moisturizer\",\"sunscreen\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧴\" src=\"1f9f4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},key:{keywords:[\"lock\",\"door\",\"password\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔑\" src=\"1f511.png\"/>',fitzpatrick_scale:false,category:\"objects\"},old_key:{keywords:[\"lock\",\"door\",\"password\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗝\" src=\"1f5dd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},couch_and_lamp:{keywords:[\"read\",\"chill\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛋\" src=\"1f6cb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},sleeping_bed:{keywords:[\"bed\",\"rest\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛌\" src=\"1f6cc.png\"/>',fitzpatrick_scale:true,category:\"objects\"},bed:{keywords:[\"sleep\",\"rest\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛏\" src=\"1f6cf.png\"/>',fitzpatrick_scale:false,category:\"objects\"},door:{keywords:[\"house\",\"entry\",\"exit\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚪\" src=\"1f6aa.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bellhop_bell:{keywords:[\"service\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛎\" src=\"1f6ce.png\"/>',fitzpatrick_scale:false,category:\"objects\"},teddy_bear:{keywords:[\"plush\",\"stuffed\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧸\" src=\"1f9f8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},framed_picture:{keywords:[\"photography\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖼\" src=\"1f5bc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},world_map:{keywords:[\"location\",\"direction\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗺\" src=\"1f5fa.png\"/>',fitzpatrick_scale:false,category:\"objects\"},parasol_on_ground:{keywords:[\"weather\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛱\" src=\"26f1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},moyai:{keywords:[\"rock\",\"easter island\",\"moai\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗿\" src=\"1f5ff.png\"/>',fitzpatrick_scale:false,category:\"objects\"},shopping:{keywords:[\"mall\",\"buy\",\"purchase\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛍\" src=\"1f6cd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},shopping_cart:{keywords:[\"trolley\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛒\" src=\"1f6d2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},balloon:{keywords:[\"party\",\"celebration\",\"birthday\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎈\" src=\"1f388.png\"/>',fitzpatrick_scale:false,category:\"objects\"},flags:{keywords:[\"fish\",\"japanese\",\"koinobori\",\"carp\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎏\" src=\"1f38f.png\"/>',fitzpatrick_scale:false,category:\"objects\"},ribbon:{keywords:[\"decoration\",\"pink\",\"girl\",\"bowtie\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎀\" src=\"1f380.png\"/>',fitzpatrick_scale:false,category:\"objects\"},gift:{keywords:[\"present\",\"birthday\",\"christmas\",\"xmas\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎁\" src=\"1f381.png\"/>',fitzpatrick_scale:false,category:\"objects\"},confetti_ball:{keywords:[\"festival\",\"party\",\"birthday\",\"circus\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎊\" src=\"1f38a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},tada:{keywords:[\"party\",\"congratulations\",\"birthday\",\"magic\",\"circus\",\"celebration\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎉\" src=\"1f389.png\"/>',fitzpatrick_scale:false,category:\"objects\"},dolls:{keywords:[\"japanese\",\"toy\",\"kimono\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎎\" src=\"1f38e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},wind_chime:{keywords:[\"nature\",\"ding\",\"spring\",\"bell\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎐\" src=\"1f390.png\"/>',fitzpatrick_scale:false,category:\"objects\"},crossed_flags:{keywords:[\"japanese\",\"nation\",\"country\",\"border\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎌\" src=\"1f38c.png\"/>',fitzpatrick_scale:false,category:\"objects\"},izakaya_lantern:{keywords:[\"light\",\"paper\",\"halloween\",\"spooky\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏮\" src=\"1f3ee.png\"/>',fitzpatrick_scale:false,category:\"objects\"},red_envelope:{keywords:[\"gift\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧧\" src=\"1f9e7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},email:{keywords:[\"letter\",\"postal\",\"inbox\",\"communication\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✉️\" src=\"2709.png\"/>',fitzpatrick_scale:false,category:\"objects\"},envelope_with_arrow:{keywords:[\"email\",\"communication\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📩\" src=\"1f4e9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},incoming_envelope:{keywords:[\"email\",\"inbox\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📨\" src=\"1f4e8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},\"e-mail\":{keywords:[\"communication\",\"inbox\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📧\" src=\"1f4e7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},love_letter:{keywords:[\"email\",\"like\",\"affection\",\"envelope\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💌\" src=\"1f48c.png\"/>',fitzpatrick_scale:false,category:\"objects\"},postbox:{keywords:[\"email\",\"letter\",\"envelope\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📮\" src=\"1f4ee.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mailbox_closed:{keywords:[\"email\",\"communication\",\"inbox\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📪\" src=\"1f4ea.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mailbox:{keywords:[\"email\",\"inbox\",\"communication\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📫\" src=\"1f4eb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mailbox_with_mail:{keywords:[\"email\",\"inbox\",\"communication\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📬\" src=\"1f4ec.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mailbox_with_no_mail:{keywords:[\"email\",\"inbox\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📭\" src=\"1f4ed.png\"/>',fitzpatrick_scale:false,category:\"objects\"},package:{keywords:[\"mail\",\"gift\",\"cardboard\",\"box\",\"moving\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📦\" src=\"1f4e6.png\"/>',fitzpatrick_scale:false,category:\"objects\"},postal_horn:{keywords:[\"instrument\",\"music\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📯\" src=\"1f4ef.png\"/>',fitzpatrick_scale:false,category:\"objects\"},inbox_tray:{keywords:[\"email\",\"documents\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📥\" src=\"1f4e5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},outbox_tray:{keywords:[\"inbox\",\"email\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📤\" src=\"1f4e4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},scroll:{keywords:[\"documents\",\"ancient\",\"history\",\"paper\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📜\" src=\"1f4dc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},page_with_curl:{keywords:[\"documents\",\"office\",\"paper\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📃\" src=\"1f4c3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bookmark_tabs:{keywords:[\"favorite\",\"save\",\"order\",\"tidy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📑\" src=\"1f4d1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},receipt:{keywords:[\"accounting\",\"expenses\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧾\" src=\"1f9fe.png\"/>',fitzpatrick_scale:false,category:\"objects\"},bar_chart:{keywords:[\"graph\",\"presentation\",\"stats\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📊\" src=\"1f4ca.png\"/>',fitzpatrick_scale:false,category:\"objects\"},chart_with_upwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recovery\",\"business\",\"economics\",\"money\",\"sales\",\"good\",\"success\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📈\" src=\"1f4c8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},chart_with_downwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recession\",\"business\",\"economics\",\"money\",\"sales\",\"bad\",\"failure\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📉\" src=\"1f4c9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},page_facing_up:{keywords:[\"documents\",\"office\",\"paper\",\"information\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📄\" src=\"1f4c4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},date:{keywords:[\"calendar\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📅\" src=\"1f4c5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},calendar:{keywords:[\"schedule\",\"date\",\"planning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📆\" src=\"1f4c6.png\"/>',fitzpatrick_scale:false,category:\"objects\"},spiral_calendar:{keywords:[\"date\",\"schedule\",\"planning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗓\" src=\"1f5d3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},card_index:{keywords:[\"business\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📇\" src=\"1f4c7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},card_file_box:{keywords:[\"business\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗃\" src=\"1f5c3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},ballot_box:{keywords:[\"election\",\"vote\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗳\" src=\"1f5f3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},file_cabinet:{keywords:[\"filing\",\"organizing\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗄\" src=\"1f5c4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},clipboard:{keywords:[\"stationery\",\"documents\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📋\" src=\"1f4cb.png\"/>',fitzpatrick_scale:false,category:\"objects\"},spiral_notepad:{keywords:[\"memo\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗒\" src=\"1f5d2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},file_folder:{keywords:[\"documents\",\"business\",\"office\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📁\" src=\"1f4c1.png\"/>',fitzpatrick_scale:false,category:\"objects\"},open_file_folder:{keywords:[\"documents\",\"load\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📂\" src=\"1f4c2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},card_index_dividers:{keywords:[\"organizing\",\"business\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗂\" src=\"1f5c2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},newspaper_roll:{keywords:[\"press\",\"headline\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗞\" src=\"1f5de.png\"/>',fitzpatrick_scale:false,category:\"objects\"},newspaper:{keywords:[\"press\",\"headline\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📰\" src=\"1f4f0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},notebook:{keywords:[\"stationery\",\"record\",\"notes\",\"paper\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📓\" src=\"1f4d3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},closed_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"learn\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📕\" src=\"1f4d5.png\"/>',fitzpatrick_scale:false,category:\"objects\"},green_book:{keywords:[\"read\",\"library\",\"knowledge\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📗\" src=\"1f4d7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},blue_book:{keywords:[\"read\",\"library\",\"knowledge\",\"learn\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📘\" src=\"1f4d8.png\"/>',fitzpatrick_scale:false,category:\"objects\"},orange_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📙\" src=\"1f4d9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},notebook_with_decorative_cover:{keywords:[\"classroom\",\"notes\",\"record\",\"paper\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📔\" src=\"1f4d4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},ledger:{keywords:[\"notes\",\"paper\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📒\" src=\"1f4d2.png\"/>',fitzpatrick_scale:false,category:\"objects\"},books:{keywords:[\"literature\",\"library\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📚\" src=\"1f4da.png\"/>',fitzpatrick_scale:false,category:\"objects\"},open_book:{keywords:[\"book\",\"read\",\"library\",\"knowledge\",\"literature\",\"learn\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📖\" src=\"1f4d6.png\"/>',fitzpatrick_scale:false,category:\"objects\"},safety_pin:{keywords:[\"diaper\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧷\" src=\"1f9f7.png\"/>',fitzpatrick_scale:false,category:\"objects\"},link:{keywords:[\"rings\",\"url\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔗\" src=\"1f517.png\"/>',fitzpatrick_scale:false,category:\"objects\"},paperclip:{keywords:[\"documents\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📎\" src=\"1f4ce.png\"/>',fitzpatrick_scale:false,category:\"objects\"},paperclips:{keywords:[\"documents\",\"stationery\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖇\" src=\"1f587.png\"/>',fitzpatrick_scale:false,category:\"objects\"},scissors:{keywords:[\"stationery\",\"cut\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✂️\" src=\"2702.png\"/>',fitzpatrick_scale:false,category:\"objects\"},triangular_ruler:{keywords:[\"stationery\",\"math\",\"architect\",\"sketch\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📐\" src=\"1f4d0.png\"/>',fitzpatrick_scale:false,category:\"objects\"},straight_ruler:{keywords:[\"stationery\",\"calculate\",\"length\",\"math\",\"school\",\"drawing\",\"architect\",\"sketch\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📏\" src=\"1f4cf.png\"/>',fitzpatrick_scale:false,category:\"objects\"},abacus:{keywords:[\"calculation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧮\" src=\"1f9ee.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pushpin:{keywords:[\"stationery\",\"mark\",\"here\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📌\" src=\"1f4cc.png\"/>',fitzpatrick_scale:false,category:\"objects\"},round_pushpin:{keywords:[\"stationery\",\"location\",\"map\",\"here\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📍\" src=\"1f4cd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},triangular_flag_on_post:{keywords:[\"mark\",\"milestone\",\"place\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚩\" src=\"1f6a9.png\"/>',fitzpatrick_scale:false,category:\"objects\"},white_flag:{keywords:[\"losing\",\"loser\",\"lost\",\"surrender\",\"give up\",\"fail\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏳\" src=\"1f3f3.png\"/>',fitzpatrick_scale:false,category:\"objects\"},black_flag:{keywords:[\"pirate\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏴\" src=\"1f3f4.png\"/>',fitzpatrick_scale:false,category:\"objects\"},rainbow_flag:{keywords:[\"flag\",\"rainbow\",\"pride\",\"gay\",\"lgbt\",\"glbt\",\"queer\",\"homosexual\",\"lesbian\",\"bisexual\",\"transgender\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏳️‍🌈\" src=\"1f3f3-fe0f-200d-1f308.png\"/>',fitzpatrick_scale:false,category:\"objects\"},closed_lock_with_key:{keywords:[\"security\",\"privacy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔐\" src=\"1f510.png\"/>',fitzpatrick_scale:false,category:\"objects\"},lock:{keywords:[\"security\",\"password\",\"padlock\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔒\" src=\"1f512.png\"/>',fitzpatrick_scale:false,category:\"objects\"},unlock:{keywords:[\"privacy\",\"security\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔓\" src=\"1f513.png\"/>',fitzpatrick_scale:false,category:\"objects\"},lock_with_ink_pen:{keywords:[\"security\",\"secret\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔏\" src=\"1f50f.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖊\" src=\"1f58a.png\"/>',fitzpatrick_scale:false,category:\"objects\"},fountain_pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖋\" src=\"1f58b.png\"/>',fitzpatrick_scale:false,category:\"objects\"},black_nib:{keywords:[\"pen\",\"stationery\",\"writing\",\"write\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✒️\" src=\"2712.png\"/>',fitzpatrick_scale:false,category:\"objects\"},memo:{keywords:[\"write\",\"documents\",\"stationery\",\"pencil\",\"paper\",\"writing\",\"legal\",\"exam\",\"quiz\",\"test\",\"study\",\"compose\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📝\" src=\"1f4dd.png\"/>',fitzpatrick_scale:false,category:\"objects\"},pencil2:{keywords:[\"stationery\",\"write\",\"paper\",\"writing\",\"school\",\"study\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✏️\" src=\"270f.png\"/>',fitzpatrick_scale:false,category:\"objects\"},crayon:{keywords:[\"drawing\",\"creativity\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖍\" src=\"1f58d.png\"/>',fitzpatrick_scale:false,category:\"objects\"},paintbrush:{keywords:[\"drawing\",\"creativity\",\"art\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖌\" src=\"1f58c.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mag:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔍\" src=\"1f50d.png\"/>',fitzpatrick_scale:false,category:\"objects\"},mag_right:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔎\" src=\"1f50e.png\"/>',fitzpatrick_scale:false,category:\"objects\"},heart:{keywords:[\"love\",\"like\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❤️\" src=\"2764.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},orange_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🧡\" src=\"1f9e1.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},yellow_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💛\" src=\"1f49b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},green_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💚\" src=\"1f49a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},blue_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💙\" src=\"1f499.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},purple_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💜\" src=\"1f49c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_heart:{keywords:[\"evil\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🖤\" src=\"1f5a4.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},broken_heart:{keywords:[\"sad\",\"sorry\",\"break\",\"heart\",\"heartbreak\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💔\" src=\"1f494.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_heart_exclamation:{keywords:[\"decoration\",\"love\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❣\" src=\"2763.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},two_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"heart\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💕\" src=\"1f495.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},revolving_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💞\" src=\"1f49e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heartbeat:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"pink\",\"heart\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💓\" src=\"1f493.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heartpulse:{keywords:[\"like\",\"love\",\"affection\",\"valentines\",\"pink\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💗\" src=\"1f497.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sparkling_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💖\" src=\"1f496.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cupid:{keywords:[\"love\",\"like\",\"heart\",\"affection\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💘\" src=\"1f498.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},gift_heart:{keywords:[\"love\",\"valentines\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💝\" src=\"1f49d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heart_decoration:{keywords:[\"purple-square\",\"love\",\"like\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💟\" src=\"1f49f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},peace_symbol:{keywords:[\"hippie\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☮\" src=\"262e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},latin_cross:{keywords:[\"christianity\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✝\" src=\"271d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},star_and_crescent:{keywords:[\"islam\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☪\" src=\"262a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},om:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕉\" src=\"1f549.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},wheel_of_dharma:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☸\" src=\"2638.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},star_of_david:{keywords:[\"judaism\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✡\" src=\"2721.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},six_pointed_star:{keywords:[\"purple-square\",\"religion\",\"jewish\",\"hexagram\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔯\" src=\"1f52f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},menorah:{keywords:[\"hanukkah\",\"candles\",\"jewish\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕎\" src=\"1f54e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},yin_yang:{keywords:[\"balance\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☯\" src=\"262f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},orthodox_cross:{keywords:[\"suppedaneum\",\"religion\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☦\" src=\"2626.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},place_of_worship:{keywords:[\"religion\",\"church\",\"temple\",\"prayer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛐\" src=\"1f6d0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ophiuchus:{keywords:[\"sign\",\"purple-square\",\"constellation\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛎\" src=\"26ce.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},aries:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♈\" src=\"2648.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},taurus:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♉\" src=\"2649.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},gemini:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♊\" src=\"264a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cancer:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♋\" src=\"264b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},leo:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♌\" src=\"264c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},virgo:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♍\" src=\"264d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},libra:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♎\" src=\"264e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},scorpius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\",\"scorpio\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♏\" src=\"264f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sagittarius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♐\" src=\"2650.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},capricorn:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♑\" src=\"2651.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},aquarius:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♒\" src=\"2652.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},pisces:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♓\" src=\"2653.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},id:{keywords:[\"purple-square\",\"words\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆔\" src=\"1f194.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},atom_symbol:{keywords:[\"science\",\"physics\",\"chemistry\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚛\" src=\"269b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u7a7a:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"empty\",\"sky\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈳\" src=\"1f233.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u5272:{keywords:[\"cut\",\"divide\",\"chinese\",\"kanji\",\"pink-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈹\" src=\"1f239.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},radioactive:{keywords:[\"nuclear\",\"danger\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☢\" src=\"2622.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},biohazard:{keywords:[\"danger\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☣\" src=\"2623.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},mobile_phone_off:{keywords:[\"mute\",\"orange-square\",\"silence\",\"quiet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📴\" src=\"1f4f4.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},vibration_mode:{keywords:[\"orange-square\",\"phone\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📳\" src=\"1f4f3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u6709:{keywords:[\"orange-square\",\"chinese\",\"have\",\"kanji\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈶\" src=\"1f236.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u7121:{keywords:[\"nothing\",\"chinese\",\"kanji\",\"japanese\",\"orange-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈚\" src=\"1f21a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u7533:{keywords:[\"chinese\",\"japanese\",\"kanji\",\"orange-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈸\" src=\"1f238.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u55b6:{keywords:[\"japanese\",\"opening hours\",\"orange-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈺\" src=\"1f23a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u6708:{keywords:[\"chinese\",\"month\",\"moon\",\"japanese\",\"orange-square\",\"kanji\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈷️\" src=\"1f237.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},eight_pointed_black_star:{keywords:[\"orange-square\",\"shape\",\"polygon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✴️\" src=\"2734.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},vs:{keywords:[\"words\",\"orange-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆚\" src=\"1f19a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},accept:{keywords:[\"ok\",\"good\",\"chinese\",\"kanji\",\"agree\",\"yes\",\"orange-circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🉑\" src=\"1f251.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_flower:{keywords:[\"japanese\",\"spring\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💮\" src=\"1f4ae.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ideograph_advantage:{keywords:[\"chinese\",\"kanji\",\"obtain\",\"get\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🉐\" src=\"1f250.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},secret:{keywords:[\"privacy\",\"chinese\",\"sshh\",\"kanji\",\"red-circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"㊙️\" src=\"3299.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},congratulations:{keywords:[\"chinese\",\"kanji\",\"japanese\",\"red-circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"㊗️\" src=\"3297.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u5408:{keywords:[\"japanese\",\"chinese\",\"join\",\"kanji\",\"red-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈴\" src=\"1f234.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u6e80:{keywords:[\"full\",\"chinese\",\"japanese\",\"red-square\",\"kanji\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈵\" src=\"1f235.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u7981:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"forbidden\",\"limit\",\"restricted\",\"red-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈲\" src=\"1f232.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},a:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🅰️\" src=\"1f170.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},b:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🅱️\" src=\"1f171.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ab:{keywords:[\"red-square\",\"alphabet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆎\" src=\"1f18e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cl:{keywords:[\"alphabet\",\"words\",\"red-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆑\" src=\"1f191.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},o2:{keywords:[\"alphabet\",\"red-square\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🅾️\" src=\"1f17e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sos:{keywords:[\"help\",\"red-square\",\"words\",\"emergency\",\"911\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆘\" src=\"1f198.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_entry:{keywords:[\"limit\",\"security\",\"privacy\",\"bad\",\"denied\",\"stop\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⛔\" src=\"26d4.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},name_badge:{keywords:[\"fire\",\"forbid\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📛\" src=\"1f4db.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_entry_sign:{keywords:[\"forbid\",\"stop\",\"limit\",\"denied\",\"disallow\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚫\" src=\"1f6ab.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},x:{keywords:[\"no\",\"delete\",\"remove\",\"cancel\",\"red\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❌\" src=\"274c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},o:{keywords:[\"circle\",\"round\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⭕\" src=\"2b55.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},stop_sign:{keywords:[\"stop\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛑\" src=\"1f6d1.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},anger:{keywords:[\"angry\",\"mad\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💢\" src=\"1f4a2.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},hotsprings:{keywords:[\"bath\",\"warm\",\"relax\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♨️\" src=\"2668.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_pedestrians:{keywords:[\"rules\",\"crossing\",\"walking\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚷\" src=\"1f6b7.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},do_not_litter:{keywords:[\"trash\",\"bin\",\"garbage\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚯\" src=\"1f6af.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_bicycles:{keywords:[\"cyclist\",\"prohibited\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚳\" src=\"1f6b3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},\"non-potable_water\":{keywords:[\"drink\",\"faucet\",\"tap\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚱\" src=\"1f6b1.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},underage:{keywords:[\"18\",\"drink\",\"pub\",\"night\",\"minor\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔞\" src=\"1f51e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_mobile_phones:{keywords:[\"iphone\",\"mute\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📵\" src=\"1f4f5.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},exclamation:{keywords:[\"heavy_exclamation_mark\",\"danger\",\"surprise\",\"punctuation\",\"wow\",\"warning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❗\" src=\"2757.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},grey_exclamation:{keywords:[\"surprise\",\"punctuation\",\"gray\",\"wow\",\"warning\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❕\" src=\"2755.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},question:{keywords:[\"doubt\",\"confused\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❓\" src=\"2753.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},grey_question:{keywords:[\"doubts\",\"gray\",\"huh\",\"confused\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❔\" src=\"2754.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},bangbang:{keywords:[\"exclamation\",\"surprise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"‼️\" src=\"203c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},interrobang:{keywords:[\"wat\",\"punctuation\",\"surprise\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⁉️\" src=\"2049.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},low_brightness:{keywords:[\"sun\",\"afternoon\",\"warm\",\"summer\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔅\" src=\"1f505.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},high_brightness:{keywords:[\"sun\",\"light\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔆\" src=\"1f506.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},trident:{keywords:[\"weapon\",\"spear\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔱\" src=\"1f531.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},fleur_de_lis:{keywords:[\"decorative\",\"scout\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚜\" src=\"269c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},part_alternation_mark:{keywords:[\"graph\",\"presentation\",\"stats\",\"business\",\"economics\",\"bad\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"〽️\" src=\"303d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},warning:{keywords:[\"exclamation\",\"wip\",\"alert\",\"error\",\"problem\",\"issue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚠️\" src=\"26a0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},children_crossing:{keywords:[\"school\",\"warning\",\"danger\",\"sign\",\"driving\",\"yellow-diamond\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚸\" src=\"1f6b8.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},beginner:{keywords:[\"badge\",\"shield\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔰\" src=\"1f530.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},recycle:{keywords:[\"arrow\",\"environment\",\"garbage\",\"trash\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♻️\" src=\"267b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},u6307:{keywords:[\"chinese\",\"point\",\"green-square\",\"kanji\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈯\" src=\"1f22f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},chart:{keywords:[\"green-square\",\"graph\",\"presentation\",\"stats\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💹\" src=\"1f4b9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sparkle:{keywords:[\"stars\",\"green-square\",\"awesome\",\"good\",\"fireworks\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❇️\" src=\"2747.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},eight_spoked_asterisk:{keywords:[\"star\",\"sparkle\",\"green-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✳️\" src=\"2733.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},negative_squared_cross_mark:{keywords:[\"x\",\"green-square\",\"no\",\"deny\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"❎\" src=\"274e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_check_mark:{keywords:[\"green-square\",\"ok\",\"agree\",\"vote\",\"election\",\"answer\",\"tick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✅\" src=\"2705.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},diamond_shape_with_a_dot_inside:{keywords:[\"jewel\",\"blue\",\"gem\",\"crystal\",\"fancy\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💠\" src=\"1f4a0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cyclone:{keywords:[\"weather\",\"swirl\",\"blue\",\"cloud\",\"vortex\",\"spiral\",\"whirlpool\",\"spin\",\"tornado\",\"hurricane\",\"typhoon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌀\" src=\"1f300.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},loop:{keywords:[\"tape\",\"cassette\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➿\" src=\"27bf.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},globe_with_meridians:{keywords:[\"earth\",\"international\",\"world\",\"internet\",\"interweb\",\"i18n\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🌐\" src=\"1f310.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},m:{keywords:[\"alphabet\",\"blue-circle\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"Ⓜ️\" src=\"24c2.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},atm:{keywords:[\"money\",\"sales\",\"cash\",\"blue-square\",\"payment\",\"bank\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏧\" src=\"1f3e7.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sa:{keywords:[\"japanese\",\"blue-square\",\"katakana\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈂️\" src=\"1f202.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},passport_control:{keywords:[\"custom\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛂\" src=\"1f6c2.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},customs:{keywords:[\"passport\",\"border\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛃\" src=\"1f6c3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},baggage_claim:{keywords:[\"blue-square\",\"airport\",\"transport\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛄\" src=\"1f6c4.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},left_luggage:{keywords:[\"blue-square\",\"travel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🛅\" src=\"1f6c5.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},wheelchair:{keywords:[\"blue-square\",\"disabled\",\"a11y\",\"accessibility\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♿\" src=\"267f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_smoking:{keywords:[\"cigarette\",\"blue-square\",\"smell\",\"smoke\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚭\" src=\"1f6ad.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},wc:{keywords:[\"toilet\",\"restroom\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚾\" src=\"1f6be.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},parking:{keywords:[\"cars\",\"blue-square\",\"alphabet\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🅿️\" src=\"1f17f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},potable_water:{keywords:[\"blue-square\",\"liquid\",\"restroom\",\"cleaning\",\"faucet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚰\" src=\"1f6b0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},mens:{keywords:[\"toilet\",\"restroom\",\"wc\",\"blue-square\",\"gender\",\"male\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚹\" src=\"1f6b9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},womens:{keywords:[\"purple-square\",\"woman\",\"female\",\"toilet\",\"loo\",\"restroom\",\"gender\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚺\" src=\"1f6ba.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},baby_symbol:{keywords:[\"orange-square\",\"child\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚼\" src=\"1f6bc.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},restroom:{keywords:[\"blue-square\",\"toilet\",\"refresh\",\"wc\",\"gender\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚻\" src=\"1f6bb.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},put_litter_in_its_place:{keywords:[\"blue-square\",\"sign\",\"human\",\"info\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🚮\" src=\"1f6ae.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cinema:{keywords:[\"blue-square\",\"record\",\"film\",\"movie\",\"curtain\",\"stage\",\"theater\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎦\" src=\"1f3a6.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},signal_strength:{keywords:[\"blue-square\",\"reception\",\"phone\",\"internet\",\"connection\",\"wifi\",\"bluetooth\",\"bars\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📶\" src=\"1f4f6.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},koko:{keywords:[\"blue-square\",\"here\",\"katakana\",\"japanese\",\"destination\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🈁\" src=\"1f201.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ng:{keywords:[\"blue-square\",\"words\",\"shape\",\"icon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆖\" src=\"1f196.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ok:{keywords:[\"good\",\"agree\",\"yes\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆗\" src=\"1f197.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},up:{keywords:[\"blue-square\",\"above\",\"high\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆙\" src=\"1f199.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},cool:{keywords:[\"words\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆒\" src=\"1f192.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},new:{keywords:[\"blue-square\",\"words\",\"start\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆕\" src=\"1f195.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},free:{keywords:[\"blue-square\",\"words\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🆓\" src=\"1f193.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},zero:{keywords:[\"0\",\"numbers\",\"blue-square\",\"null\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"0️⃣\" src=\"30-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},one:{keywords:[\"blue-square\",\"numbers\",\"1\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"1️⃣\" src=\"31-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},two:{keywords:[\"numbers\",\"2\",\"prime\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"2️⃣\" src=\"32-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},three:{keywords:[\"3\",\"numbers\",\"prime\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"3️⃣\" src=\"33-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},four:{keywords:[\"4\",\"numbers\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"4️⃣\" src=\"34-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},five:{keywords:[\"5\",\"numbers\",\"blue-square\",\"prime\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"5️⃣\" src=\"35-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},six:{keywords:[\"6\",\"numbers\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"6️⃣\" src=\"36-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},seven:{keywords:[\"7\",\"numbers\",\"blue-square\",\"prime\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"7️⃣\" src=\"37-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},eight:{keywords:[\"8\",\"blue-square\",\"numbers\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"8️⃣\" src=\"38-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},nine:{keywords:[\"blue-square\",\"numbers\",\"9\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"9️⃣\" src=\"39-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},keycap_ten:{keywords:[\"numbers\",\"10\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔟\" src=\"1f51f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},asterisk:{keywords:[\"star\",\"keycap\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"*⃣\" src=\"2a-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},eject_button:{keywords:[\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏏️\" src=\"23cf.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_forward:{keywords:[\"blue-square\",\"right\",\"direction\",\"play\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"▶️\" src=\"25b6.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},pause_button:{keywords:[\"pause\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏸\" src=\"23f8.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},next_track_button:{keywords:[\"forward\",\"next\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏭\" src=\"23ed.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},stop_button:{keywords:[\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏹\" src=\"23f9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},record_button:{keywords:[\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏺\" src=\"23fa.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},play_or_pause_button:{keywords:[\"blue-square\",\"play\",\"pause\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏯\" src=\"23ef.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},previous_track_button:{keywords:[\"backward\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏮\" src=\"23ee.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},fast_forward:{keywords:[\"blue-square\",\"play\",\"speed\",\"continue\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏩\" src=\"23e9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},rewind:{keywords:[\"play\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏪\" src=\"23ea.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},twisted_rightwards_arrows:{keywords:[\"blue-square\",\"shuffle\",\"music\",\"random\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔀\" src=\"1f500.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},repeat:{keywords:[\"loop\",\"record\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔁\" src=\"1f501.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},repeat_one:{keywords:[\"blue-square\",\"loop\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔂\" src=\"1f502.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_backward:{keywords:[\"blue-square\",\"left\",\"direction\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"◀️\" src=\"25c0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_up_small:{keywords:[\"blue-square\",\"triangle\",\"direction\",\"point\",\"forward\",\"top\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔼\" src=\"1f53c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_down_small:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔽\" src=\"1f53d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_double_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏫\" src=\"23eb.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_double_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⏬\" src=\"23ec.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_right:{keywords:[\"blue-square\",\"next\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➡️\" src=\"27a1.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_left:{keywords:[\"blue-square\",\"previous\",\"back\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⬅️\" src=\"2b05.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_up:{keywords:[\"blue-square\",\"continue\",\"top\",\"direction\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⬆️\" src=\"2b06.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⬇️\" src=\"2b07.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_upper_right:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northeast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↗️\" src=\"2197.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_lower_right:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southeast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↘️\" src=\"2198.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_lower_left:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southwest\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↙️\" src=\"2199.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_upper_left:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northwest\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↖️\" src=\"2196.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_up_down:{keywords:[\"blue-square\",\"direction\",\"way\",\"vertical\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↕️\" src=\"2195.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},left_right_arrow:{keywords:[\"shape\",\"direction\",\"horizontal\",\"sideways\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↔️\" src=\"2194.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrows_counterclockwise:{keywords:[\"blue-square\",\"sync\",\"cycle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔄\" src=\"1f504.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_right_hook:{keywords:[\"blue-square\",\"return\",\"rotate\",\"direction\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↪️\" src=\"21aa.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},leftwards_arrow_with_hook:{keywords:[\"back\",\"return\",\"blue-square\",\"undo\",\"enter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"↩️\" src=\"21a9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_heading_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⤴️\" src=\"2934.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrow_heading_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⤵️\" src=\"2935.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},hash:{keywords:[\"symbol\",\"blue-square\",\"twitter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"#️⃣\" src=\"23-20e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},information_source:{keywords:[\"blue-square\",\"alphabet\",\"letter\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"ℹ️\" src=\"2139.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},abc:{keywords:[\"blue-square\",\"alphabet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔤\" src=\"1f524.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},abcd:{keywords:[\"blue-square\",\"alphabet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔡\" src=\"1f521.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},capital_abcd:{keywords:[\"alphabet\",\"words\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔠\" src=\"1f520.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},symbols:{keywords:[\"blue-square\",\"music\",\"note\",\"ampersand\",\"percent\",\"glyphs\",\"characters\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔣\" src=\"1f523.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},musical_note:{keywords:[\"score\",\"tone\",\"sound\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎵\" src=\"1f3b5.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},notes:{keywords:[\"music\",\"score\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎶\" src=\"1f3b6.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},wavy_dash:{keywords:[\"draw\",\"line\",\"moustache\",\"mustache\",\"squiggle\",\"scribble\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"〰️\" src=\"3030.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},curly_loop:{keywords:[\"scribble\",\"draw\",\"shape\",\"squiggle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➰\" src=\"27b0.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_check_mark:{keywords:[\"ok\",\"nike\",\"answer\",\"yes\",\"tick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✔️\" src=\"2714.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},arrows_clockwise:{keywords:[\"sync\",\"cycle\",\"round\",\"repeat\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔃\" src=\"1f503.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_plus_sign:{keywords:[\"math\",\"calculation\",\"addition\",\"more\",\"increase\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➕\" src=\"2795.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_minus_sign:{keywords:[\"math\",\"calculation\",\"subtract\",\"less\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➖\" src=\"2796.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_division_sign:{keywords:[\"divide\",\"math\",\"calculation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"➗\" src=\"2797.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_multiplication_x:{keywords:[\"math\",\"calculation\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"✖️\" src=\"2716.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},infinity:{keywords:[\"forever\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♾\" src=\"267e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},heavy_dollar_sign:{keywords:[\"money\",\"sales\",\"payment\",\"currency\",\"buck\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💲\" src=\"1f4b2.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},currency_exchange:{keywords:[\"money\",\"sales\",\"dollar\",\"travel\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💱\" src=\"1f4b1.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},copyright:{keywords:[\"ip\",\"license\",\"circle\",\"law\",\"legal\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"©️\" src=\"a9.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},registered:{keywords:[\"alphabet\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"®️\" src=\"ae.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},tm:{keywords:[\"trademark\",\"brand\",\"law\",\"legal\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"™️\" src=\"2122.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},end:{keywords:[\"words\",\"arrow\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔚\" src=\"1f51a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},back:{keywords:[\"arrow\",\"words\",\"return\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔙\" src=\"1f519.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},on:{keywords:[\"arrow\",\"words\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔛\" src=\"1f51b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},top:{keywords:[\"words\",\"blue-square\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔝\" src=\"1f51d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},soon:{keywords:[\"arrow\",\"words\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔜\" src=\"1f51c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},ballot_box_with_check:{keywords:[\"ok\",\"agree\",\"confirm\",\"black-square\",\"vote\",\"election\",\"yes\",\"tick\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"☑️\" src=\"2611.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},radio_button:{keywords:[\"input\",\"old\",\"music\",\"circle\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔘\" src=\"1f518.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_circle:{keywords:[\"shape\",\"round\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚪\" src=\"26aa.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_circle:{keywords:[\"shape\",\"button\",\"round\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⚫\" src=\"26ab.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},red_circle:{keywords:[\"shape\",\"error\",\"danger\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔴\" src=\"1f534.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},large_blue_circle:{keywords:[\"shape\",\"icon\",\"button\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔵\" src=\"1f535.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},small_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔸\" src=\"1f538.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},small_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔹\" src=\"1f539.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},large_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔶\" src=\"1f536.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},large_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔷\" src=\"1f537.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},small_red_triangle:{keywords:[\"shape\",\"direction\",\"up\",\"top\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔺\" src=\"1f53a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_small_square:{keywords:[\"shape\",\"icon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"▪️\" src=\"25aa.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_small_square:{keywords:[\"shape\",\"icon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"▫️\" src=\"25ab.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_large_square:{keywords:[\"shape\",\"icon\",\"button\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⬛\" src=\"2b1b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_large_square:{keywords:[\"shape\",\"icon\",\"stone\",\"button\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"⬜\" src=\"2b1c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},small_red_triangle_down:{keywords:[\"shape\",\"direction\",\"bottom\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔻\" src=\"1f53b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_medium_square:{keywords:[\"shape\",\"button\",\"icon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"◼️\" src=\"25fc.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_medium_square:{keywords:[\"shape\",\"stone\",\"icon\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"◻️\" src=\"25fb.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_medium_small_square:{keywords:[\"icon\",\"shape\",\"button\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"◾\" src=\"25fe.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_medium_small_square:{keywords:[\"shape\",\"stone\",\"icon\",\"button\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"◽\" src=\"25fd.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_square_button:{keywords:[\"shape\",\"input\",\"frame\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔲\" src=\"1f532.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},white_square_button:{keywords:[\"shape\",\"input\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔳\" src=\"1f533.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},speaker:{keywords:[\"sound\",\"volume\",\"silence\",\"broadcast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔈\" src=\"1f508.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},sound:{keywords:[\"volume\",\"speaker\",\"broadcast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔉\" src=\"1f509.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},loud_sound:{keywords:[\"volume\",\"noise\",\"noisy\",\"speaker\",\"broadcast\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔊\" src=\"1f50a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},mute:{keywords:[\"sound\",\"volume\",\"silence\",\"quiet\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔇\" src=\"1f507.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},mega:{keywords:[\"sound\",\"speaker\",\"volume\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📣\" src=\"1f4e3.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},loudspeaker:{keywords:[\"volume\",\"sound\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"📢\" src=\"1f4e2.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},bell:{keywords:[\"sound\",\"notification\",\"christmas\",\"xmas\",\"chime\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔔\" src=\"1f514.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},no_bell:{keywords:[\"sound\",\"volume\",\"mute\",\"quiet\",\"silent\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🔕\" src=\"1f515.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},black_joker:{keywords:[\"poker\",\"cards\",\"game\",\"play\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🃏\" src=\"1f0cf.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},mahjong:{keywords:[\"game\",\"play\",\"chinese\",\"kanji\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🀄\" src=\"1f004.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},spades:{keywords:[\"poker\",\"cards\",\"suits\",\"magic\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♠️\" src=\"2660.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clubs:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♣️\" src=\"2663.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},hearts:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♥️\" src=\"2665.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},diamonds:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"♦️\" src=\"2666.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},flower_playing_cards:{keywords:[\"game\",\"sunset\",\"red\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🎴\" src=\"1f3b4.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},thought_balloon:{keywords:[\"bubble\",\"cloud\",\"speech\",\"thinking\",\"dream\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💭\" src=\"1f4ad.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},right_anger_bubble:{keywords:[\"caption\",\"speech\",\"thinking\",\"mad\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗯\" src=\"1f5ef.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},speech_balloon:{keywords:[\"bubble\",\"words\",\"message\",\"talk\",\"chatting\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"💬\" src=\"1f4ac.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},left_speech_bubble:{keywords:[\"words\",\"message\",\"talk\",\"chatting\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🗨\" src=\"1f5e8.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock1:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕐\" src=\"1f550.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock2:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕑\" src=\"1f551.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock3:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕒\" src=\"1f552.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock4:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕓\" src=\"1f553.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock5:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕔\" src=\"1f554.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock6:{keywords:[\"time\",\"late\",\"early\",\"schedule\",\"dawn\",\"dusk\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕕\" src=\"1f555.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock7:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕖\" src=\"1f556.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock8:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕗\" src=\"1f557.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock9:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕘\" src=\"1f558.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock10:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕙\" src=\"1f559.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock11:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕚\" src=\"1f55a.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock12:{keywords:[\"time\",\"noon\",\"midnight\",\"midday\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕛\" src=\"1f55b.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕜\" src=\"1f55c.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕝\" src=\"1f55d.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock330:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕞\" src=\"1f55e.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock430:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕟\" src=\"1f55f.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock530:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕠\" src=\"1f560.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock630:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕡\" src=\"1f561.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock730:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕢\" src=\"1f562.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock830:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕣\" src=\"1f563.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock930:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕤\" src=\"1f564.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock1030:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕥\" src=\"1f565.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock1130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕦\" src=\"1f566.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},clock1230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🕧\" src=\"1f567.png\"/>',fitzpatrick_scale:false,category:\"symbols\"},afghanistan:{keywords:[\"af\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇫\" src=\"1f1e6-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},aland_islands:{keywords:[\"Åland\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇽\" src=\"1f1e6-1f1fd.png\"/>',fitzpatrick_scale:false,category:\"flags\"},albania:{keywords:[\"al\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇱\" src=\"1f1e6-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},algeria:{keywords:[\"dz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇿\" src=\"1f1e9-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},american_samoa:{keywords:[\"american\",\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇸\" src=\"1f1e6-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},andorra:{keywords:[\"ad\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇩\" src=\"1f1e6-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},angola:{keywords:[\"ao\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇴\" src=\"1f1e6-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},anguilla:{keywords:[\"ai\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇮\" src=\"1f1e6-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},antarctica:{keywords:[\"aq\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇶\" src=\"1f1e6-1f1f6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},antigua_barbuda:{keywords:[\"antigua\",\"barbuda\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇬\" src=\"1f1e6-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},argentina:{keywords:[\"ar\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇷\" src=\"1f1e6-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},armenia:{keywords:[\"am\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇲\" src=\"1f1e6-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},aruba:{keywords:[\"aw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇼\" src=\"1f1e6-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},australia:{keywords:[\"au\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇺\" src=\"1f1e6-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},austria:{keywords:[\"at\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇹\" src=\"1f1e6-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},azerbaijan:{keywords:[\"az\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇿\" src=\"1f1e6-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bahamas:{keywords:[\"bs\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇸\" src=\"1f1e7-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bahrain:{keywords:[\"bh\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇭\" src=\"1f1e7-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bangladesh:{keywords:[\"bd\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇩\" src=\"1f1e7-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},barbados:{keywords:[\"bb\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇧\" src=\"1f1e7-1f1e7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},belarus:{keywords:[\"by\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇾\" src=\"1f1e7-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},belgium:{keywords:[\"be\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇪\" src=\"1f1e7-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},belize:{keywords:[\"bz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇿\" src=\"1f1e7-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},benin:{keywords:[\"bj\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇯\" src=\"1f1e7-1f1ef.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bermuda:{keywords:[\"bm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇲\" src=\"1f1e7-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bhutan:{keywords:[\"bt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇹\" src=\"1f1e7-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bolivia:{keywords:[\"bo\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇴\" src=\"1f1e7-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},caribbean_netherlands:{keywords:[\"bonaire\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇶\" src=\"1f1e7-1f1f6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bosnia_herzegovina:{keywords:[\"bosnia\",\"herzegovina\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇦\" src=\"1f1e7-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},botswana:{keywords:[\"bw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇼\" src=\"1f1e7-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},brazil:{keywords:[\"br\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇷\" src=\"1f1e7-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},british_indian_ocean_territory:{keywords:[\"british\",\"indian\",\"ocean\",\"territory\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇴\" src=\"1f1ee-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},british_virgin_islands:{keywords:[\"british\",\"virgin\",\"islands\",\"bvi\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇬\" src=\"1f1fb-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},brunei:{keywords:[\"bn\",\"darussalam\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇳\" src=\"1f1e7-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},bulgaria:{keywords:[\"bg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇬\" src=\"1f1e7-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},burkina_faso:{keywords:[\"burkina\",\"faso\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇫\" src=\"1f1e7-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},burundi:{keywords:[\"bi\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇮\" src=\"1f1e7-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cape_verde:{keywords:[\"cabo\",\"verde\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇻\" src=\"1f1e8-1f1fb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cambodia:{keywords:[\"kh\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇭\" src=\"1f1f0-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cameroon:{keywords:[\"cm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇲\" src=\"1f1e8-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},canada:{keywords:[\"ca\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇦\" src=\"1f1e8-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},canary_islands:{keywords:[\"canary\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇨\" src=\"1f1ee-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cayman_islands:{keywords:[\"cayman\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇾\" src=\"1f1f0-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},central_african_republic:{keywords:[\"central\",\"african\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇫\" src=\"1f1e8-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},chad:{keywords:[\"td\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇩\" src=\"1f1f9-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},chile:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇱\" src=\"1f1e8-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cn:{keywords:[\"china\",\"chinese\",\"prc\",\"flag\",\"country\",\"nation\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇳\" src=\"1f1e8-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},christmas_island:{keywords:[\"christmas\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇽\" src=\"1f1e8-1f1fd.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cocos_islands:{keywords:[\"cocos\",\"keeling\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇨\" src=\"1f1e8-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},colombia:{keywords:[\"co\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇴\" src=\"1f1e8-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},comoros:{keywords:[\"km\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇲\" src=\"1f1f0-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},congo_brazzaville:{keywords:[\"congo\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇬\" src=\"1f1e8-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},congo_kinshasa:{keywords:[\"congo\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇩\" src=\"1f1e8-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cook_islands:{keywords:[\"cook\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇰\" src=\"1f1e8-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},costa_rica:{keywords:[\"costa\",\"rica\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇷\" src=\"1f1e8-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},croatia:{keywords:[\"hr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇭🇷\" src=\"1f1ed-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cuba:{keywords:[\"cu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇺\" src=\"1f1e8-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},curacao:{keywords:[\"curaçao\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇼\" src=\"1f1e8-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cyprus:{keywords:[\"cy\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇾\" src=\"1f1e8-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},czech_republic:{keywords:[\"cz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇿\" src=\"1f1e8-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},denmark:{keywords:[\"dk\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇰\" src=\"1f1e9-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},djibouti:{keywords:[\"dj\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇯\" src=\"1f1e9-1f1ef.png\"/>',fitzpatrick_scale:false,category:\"flags\"},dominica:{keywords:[\"dm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇲\" src=\"1f1e9-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},dominican_republic:{keywords:[\"dominican\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇴\" src=\"1f1e9-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ecuador:{keywords:[\"ec\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇨\" src=\"1f1ea-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},egypt:{keywords:[\"eg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇬\" src=\"1f1ea-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},el_salvador:{keywords:[\"el\",\"salvador\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇻\" src=\"1f1f8-1f1fb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},equatorial_guinea:{keywords:[\"equatorial\",\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇶\" src=\"1f1ec-1f1f6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},eritrea:{keywords:[\"er\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇷\" src=\"1f1ea-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},estonia:{keywords:[\"ee\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇪\" src=\"1f1ea-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ethiopia:{keywords:[\"et\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇹\" src=\"1f1ea-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},eu:{keywords:[\"european\",\"union\",\"flag\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇺\" src=\"1f1ea-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},falkland_islands:{keywords:[\"falkland\",\"islands\",\"malvinas\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇰\" src=\"1f1eb-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},faroe_islands:{keywords:[\"faroe\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇴\" src=\"1f1eb-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},fiji:{keywords:[\"fj\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇯\" src=\"1f1eb-1f1ef.png\"/>',fitzpatrick_scale:false,category:\"flags\"},finland:{keywords:[\"fi\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇮\" src=\"1f1eb-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},fr:{keywords:[\"banner\",\"flag\",\"nation\",\"france\",\"french\",\"country\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇷\" src=\"1f1eb-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},french_guiana:{keywords:[\"french\",\"guiana\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇫\" src=\"1f1ec-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},french_polynesia:{keywords:[\"french\",\"polynesia\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇫\" src=\"1f1f5-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},french_southern_territories:{keywords:[\"french\",\"southern\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇫\" src=\"1f1f9-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},gabon:{keywords:[\"ga\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇦\" src=\"1f1ec-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},gambia:{keywords:[\"gm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇲\" src=\"1f1ec-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},georgia:{keywords:[\"ge\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇪\" src=\"1f1ec-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},de:{keywords:[\"german\",\"nation\",\"flag\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇩🇪\" src=\"1f1e9-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ghana:{keywords:[\"gh\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇭\" src=\"1f1ec-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},gibraltar:{keywords:[\"gi\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇮\" src=\"1f1ec-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},greece:{keywords:[\"gr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇷\" src=\"1f1ec-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},greenland:{keywords:[\"gl\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇱\" src=\"1f1ec-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},grenada:{keywords:[\"gd\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇩\" src=\"1f1ec-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guadeloupe:{keywords:[\"gp\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇵\" src=\"1f1ec-1f1f5.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guam:{keywords:[\"gu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇺\" src=\"1f1ec-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guatemala:{keywords:[\"gt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇹\" src=\"1f1ec-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guernsey:{keywords:[\"gg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇬\" src=\"1f1ec-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guinea:{keywords:[\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇳\" src=\"1f1ec-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guinea_bissau:{keywords:[\"gw\",\"bissau\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇼\" src=\"1f1ec-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},guyana:{keywords:[\"gy\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇾\" src=\"1f1ec-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},haiti:{keywords:[\"ht\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇭🇹\" src=\"1f1ed-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},honduras:{keywords:[\"hn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇭🇳\" src=\"1f1ed-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},hong_kong:{keywords:[\"hong\",\"kong\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇭🇰\" src=\"1f1ed-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},hungary:{keywords:[\"hu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇭🇺\" src=\"1f1ed-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},iceland:{keywords:[\"is\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇸\" src=\"1f1ee-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},india:{keywords:[\"in\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇳\" src=\"1f1ee-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},indonesia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇩\" src=\"1f1ee-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},iran:{keywords:[\"iran,\",\"islamic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇷\" src=\"1f1ee-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},iraq:{keywords:[\"iq\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇶\" src=\"1f1ee-1f1f6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ireland:{keywords:[\"ie\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇪\" src=\"1f1ee-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},isle_of_man:{keywords:[\"isle\",\"man\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇲\" src=\"1f1ee-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},israel:{keywords:[\"il\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇱\" src=\"1f1ee-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},it:{keywords:[\"italy\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇮🇹\" src=\"1f1ee-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},cote_divoire:{keywords:[\"ivory\",\"coast\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇮\" src=\"1f1e8-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},jamaica:{keywords:[\"jm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇯🇲\" src=\"1f1ef-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},jp:{keywords:[\"japanese\",\"nation\",\"flag\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇯🇵\" src=\"1f1ef-1f1f5.png\"/>',fitzpatrick_scale:false,category:\"flags\"},jersey:{keywords:[\"je\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇯🇪\" src=\"1f1ef-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},jordan:{keywords:[\"jo\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇯🇴\" src=\"1f1ef-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kazakhstan:{keywords:[\"kz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇿\" src=\"1f1f0-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kenya:{keywords:[\"ke\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇪\" src=\"1f1f0-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kiribati:{keywords:[\"ki\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇮\" src=\"1f1f0-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kosovo:{keywords:[\"xk\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇽🇰\" src=\"1f1fd-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kuwait:{keywords:[\"kw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇼\" src=\"1f1f0-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kyrgyzstan:{keywords:[\"kg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇬\" src=\"1f1f0-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},laos:{keywords:[\"lao\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇦\" src=\"1f1f1-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},latvia:{keywords:[\"lv\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇻\" src=\"1f1f1-1f1fb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},lebanon:{keywords:[\"lb\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇧\" src=\"1f1f1-1f1e7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},lesotho:{keywords:[\"ls\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇸\" src=\"1f1f1-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},liberia:{keywords:[\"lr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇷\" src=\"1f1f1-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},libya:{keywords:[\"ly\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇾\" src=\"1f1f1-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},liechtenstein:{keywords:[\"li\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇮\" src=\"1f1f1-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},lithuania:{keywords:[\"lt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇹\" src=\"1f1f1-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},luxembourg:{keywords:[\"lu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇺\" src=\"1f1f1-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},macau:{keywords:[\"macao\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇴\" src=\"1f1f2-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},macedonia:{keywords:[\"macedonia,\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇰\" src=\"1f1f2-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},madagascar:{keywords:[\"mg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇬\" src=\"1f1f2-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},malawi:{keywords:[\"mw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇼\" src=\"1f1f2-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},malaysia:{keywords:[\"my\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇾\" src=\"1f1f2-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},maldives:{keywords:[\"mv\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇻\" src=\"1f1f2-1f1fb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mali:{keywords:[\"ml\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇱\" src=\"1f1f2-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},malta:{keywords:[\"mt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇹\" src=\"1f1f2-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},marshall_islands:{keywords:[\"marshall\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇭\" src=\"1f1f2-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},martinique:{keywords:[\"mq\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇶\" src=\"1f1f2-1f1f6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mauritania:{keywords:[\"mr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇷\" src=\"1f1f2-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mauritius:{keywords:[\"mu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇺\" src=\"1f1f2-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mayotte:{keywords:[\"yt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇾🇹\" src=\"1f1fe-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mexico:{keywords:[\"mx\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇽\" src=\"1f1f2-1f1fd.png\"/>',fitzpatrick_scale:false,category:\"flags\"},micronesia:{keywords:[\"micronesia,\",\"federated\",\"states\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇫🇲\" src=\"1f1eb-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},moldova:{keywords:[\"moldova,\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇩\" src=\"1f1f2-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},monaco:{keywords:[\"mc\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇨\" src=\"1f1f2-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mongolia:{keywords:[\"mn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇳\" src=\"1f1f2-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},montenegro:{keywords:[\"me\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇪\" src=\"1f1f2-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},montserrat:{keywords:[\"ms\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇸\" src=\"1f1f2-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},morocco:{keywords:[\"ma\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇦\" src=\"1f1f2-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},mozambique:{keywords:[\"mz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇿\" src=\"1f1f2-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},myanmar:{keywords:[\"mm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇲\" src=\"1f1f2-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},namibia:{keywords:[\"na\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇦\" src=\"1f1f3-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},nauru:{keywords:[\"nr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇷\" src=\"1f1f3-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},nepal:{keywords:[\"np\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇵\" src=\"1f1f3-1f1f5.png\"/>',fitzpatrick_scale:false,category:\"flags\"},netherlands:{keywords:[\"nl\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇱\" src=\"1f1f3-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},new_caledonia:{keywords:[\"new\",\"caledonia\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇨\" src=\"1f1f3-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},new_zealand:{keywords:[\"new\",\"zealand\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇿\" src=\"1f1f3-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},nicaragua:{keywords:[\"ni\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇮\" src=\"1f1f3-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},niger:{keywords:[\"ne\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇪\" src=\"1f1f3-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},nigeria:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇬\" src=\"1f1f3-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},niue:{keywords:[\"nu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇺\" src=\"1f1f3-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},norfolk_island:{keywords:[\"norfolk\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇫\" src=\"1f1f3-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},northern_mariana_islands:{keywords:[\"northern\",\"mariana\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇲🇵\" src=\"1f1f2-1f1f5.png\"/>',fitzpatrick_scale:false,category:\"flags\"},north_korea:{keywords:[\"north\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇵\" src=\"1f1f0-1f1f5.png\"/>',fitzpatrick_scale:false,category:\"flags\"},norway:{keywords:[\"no\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇳🇴\" src=\"1f1f3-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},oman:{keywords:[\"om_symbol\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇴🇲\" src=\"1f1f4-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},pakistan:{keywords:[\"pk\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇰\" src=\"1f1f5-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},palau:{keywords:[\"pw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇼\" src=\"1f1f5-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},palestinian_territories:{keywords:[\"palestine\",\"palestinian\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇸\" src=\"1f1f5-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},panama:{keywords:[\"pa\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇦\" src=\"1f1f5-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},papua_new_guinea:{keywords:[\"papua\",\"new\",\"guinea\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇬\" src=\"1f1f5-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},paraguay:{keywords:[\"py\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇾\" src=\"1f1f5-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},peru:{keywords:[\"pe\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇪\" src=\"1f1f5-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},philippines:{keywords:[\"ph\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇭\" src=\"1f1f5-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},pitcairn_islands:{keywords:[\"pitcairn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇳\" src=\"1f1f5-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},poland:{keywords:[\"pl\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇱\" src=\"1f1f5-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},portugal:{keywords:[\"pt\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇹\" src=\"1f1f5-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},puerto_rico:{keywords:[\"puerto\",\"rico\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇷\" src=\"1f1f5-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},qatar:{keywords:[\"qa\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇶🇦\" src=\"1f1f6-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},reunion:{keywords:[\"réunion\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇷🇪\" src=\"1f1f7-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},romania:{keywords:[\"ro\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇷🇴\" src=\"1f1f7-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ru:{keywords:[\"russian\",\"federation\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇷🇺\" src=\"1f1f7-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},rwanda:{keywords:[\"rw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇷🇼\" src=\"1f1f7-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_barthelemy:{keywords:[\"saint\",\"barthélemy\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇧🇱\" src=\"1f1e7-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_helena:{keywords:[\"saint\",\"helena\",\"ascension\",\"tristan\",\"cunha\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇭\" src=\"1f1f8-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_kitts_nevis:{keywords:[\"saint\",\"kitts\",\"nevis\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇳\" src=\"1f1f0-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_lucia:{keywords:[\"saint\",\"lucia\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇨\" src=\"1f1f1-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_pierre_miquelon:{keywords:[\"saint\",\"pierre\",\"miquelon\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇵🇲\" src=\"1f1f5-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},st_vincent_grenadines:{keywords:[\"saint\",\"vincent\",\"grenadines\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇨\" src=\"1f1fb-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},samoa:{keywords:[\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇼🇸\" src=\"1f1fc-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},san_marino:{keywords:[\"san\",\"marino\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇲\" src=\"1f1f8-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sao_tome_principe:{keywords:[\"sao\",\"tome\",\"principe\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇹\" src=\"1f1f8-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},saudi_arabia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇦\" src=\"1f1f8-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},senegal:{keywords:[\"sn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇳\" src=\"1f1f8-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},serbia:{keywords:[\"rs\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇷🇸\" src=\"1f1f7-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},seychelles:{keywords:[\"sc\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇨\" src=\"1f1f8-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sierra_leone:{keywords:[\"sierra\",\"leone\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇱\" src=\"1f1f8-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},singapore:{keywords:[\"sg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇬\" src=\"1f1f8-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sint_maarten:{keywords:[\"sint\",\"maarten\",\"dutch\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇽\" src=\"1f1f8-1f1fd.png\"/>',fitzpatrick_scale:false,category:\"flags\"},slovakia:{keywords:[\"sk\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇰\" src=\"1f1f8-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},slovenia:{keywords:[\"si\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇮\" src=\"1f1f8-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},solomon_islands:{keywords:[\"solomon\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇧\" src=\"1f1f8-1f1e7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},somalia:{keywords:[\"so\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇴\" src=\"1f1f8-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},south_africa:{keywords:[\"south\",\"africa\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇿🇦\" src=\"1f1ff-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},south_georgia_south_sandwich_islands:{keywords:[\"south\",\"georgia\",\"sandwich\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇸\" src=\"1f1ec-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},kr:{keywords:[\"south\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇰🇷\" src=\"1f1f0-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},south_sudan:{keywords:[\"south\",\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇸\" src=\"1f1f8-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},es:{keywords:[\"spain\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇸\" src=\"1f1ea-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sri_lanka:{keywords:[\"sri\",\"lanka\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇱🇰\" src=\"1f1f1-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sudan:{keywords:[\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇩\" src=\"1f1f8-1f1e9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},suriname:{keywords:[\"sr\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇷\" src=\"1f1f8-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},swaziland:{keywords:[\"sz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇿\" src=\"1f1f8-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},sweden:{keywords:[\"se\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇪\" src=\"1f1f8-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},switzerland:{keywords:[\"ch\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇨🇭\" src=\"1f1e8-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},syria:{keywords:[\"syrian\",\"arab\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇸🇾\" src=\"1f1f8-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},taiwan:{keywords:[\"tw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇼\" src=\"1f1f9-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tajikistan:{keywords:[\"tj\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇯\" src=\"1f1f9-1f1ef.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tanzania:{keywords:[\"tanzania,\",\"united\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇿\" src=\"1f1f9-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},thailand:{keywords:[\"th\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇭\" src=\"1f1f9-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},timor_leste:{keywords:[\"timor\",\"leste\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇱\" src=\"1f1f9-1f1f1.png\"/>',fitzpatrick_scale:false,category:\"flags\"},togo:{keywords:[\"tg\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇬\" src=\"1f1f9-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tokelau:{keywords:[\"tk\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇰\" src=\"1f1f9-1f1f0.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tonga:{keywords:[\"to\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇴\" src=\"1f1f9-1f1f4.png\"/>',fitzpatrick_scale:false,category:\"flags\"},trinidad_tobago:{keywords:[\"trinidad\",\"tobago\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇹\" src=\"1f1f9-1f1f9.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tunisia:{keywords:[\"tn\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇳\" src=\"1f1f9-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tr:{keywords:[\"turkey\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇷\" src=\"1f1f9-1f1f7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},turkmenistan:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇲\" src=\"1f1f9-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},turks_caicos_islands:{keywords:[\"turks\",\"caicos\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇨\" src=\"1f1f9-1f1e8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},tuvalu:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇹🇻\" src=\"1f1f9-1f1fb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},uganda:{keywords:[\"ug\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇬\" src=\"1f1fa-1f1ec.png\"/>',fitzpatrick_scale:false,category:\"flags\"},ukraine:{keywords:[\"ua\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇦\" src=\"1f1fa-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},united_arab_emirates:{keywords:[\"united\",\"arab\",\"emirates\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇦🇪\" src=\"1f1e6-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},uk:{keywords:[\"united\",\"kingdom\",\"great\",\"britain\",\"northern\",\"ireland\",\"flag\",\"nation\",\"country\",\"banner\",\"british\",\"UK\",\"english\",\"england\",\"union jack\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇬🇧\" src=\"1f1ec-1f1e7.png\"/>',fitzpatrick_scale:false,category:\"flags\"},england:{keywords:[\"flag\",\"english\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\" src=\"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png\"/>',fitzpatrick_scale:false,category:\"flags\"},scotland:{keywords:[\"flag\",\"scottish\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\" src=\"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png\"/>',fitzpatrick_scale:false,category:\"flags\"},wales:{keywords:[\"flag\",\"welsh\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\" src=\"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png\"/>',fitzpatrick_scale:false,category:\"flags\"},us:{keywords:[\"united\",\"states\",\"america\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇸\" src=\"1f1fa-1f1f8.png\"/>',fitzpatrick_scale:false,category:\"flags\"},us_virgin_islands:{keywords:[\"virgin\",\"islands\",\"us\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇮\" src=\"1f1fb-1f1ee.png\"/>',fitzpatrick_scale:false,category:\"flags\"},uruguay:{keywords:[\"uy\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇾\" src=\"1f1fa-1f1fe.png\"/>',fitzpatrick_scale:false,category:\"flags\"},uzbekistan:{keywords:[\"uz\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇿\" src=\"1f1fa-1f1ff.png\"/>',fitzpatrick_scale:false,category:\"flags\"},vanuatu:{keywords:[\"vu\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇺\" src=\"1f1fb-1f1fa.png\"/>',fitzpatrick_scale:false,category:\"flags\"},vatican_city:{keywords:[\"vatican\",\"city\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇦\" src=\"1f1fb-1f1e6.png\"/>',fitzpatrick_scale:false,category:\"flags\"},venezuela:{keywords:[\"ve\",\"bolivarian\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇪\" src=\"1f1fb-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},vietnam:{keywords:[\"viet\",\"nam\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇻🇳\" src=\"1f1fb-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},wallis_futuna:{keywords:[\"wallis\",\"futuna\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇼🇫\" src=\"1f1fc-1f1eb.png\"/>',fitzpatrick_scale:false,category:\"flags\"},western_sahara:{keywords:[\"western\",\"sahara\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇪🇭\" src=\"1f1ea-1f1ed.png\"/>',fitzpatrick_scale:false,category:\"flags\"},yemen:{keywords:[\"ye\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇾🇪\" src=\"1f1fe-1f1ea.png\"/>',fitzpatrick_scale:false,category:\"flags\"},zambia:{keywords:[\"zm\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇿🇲\" src=\"1f1ff-1f1f2.png\"/>',fitzpatrick_scale:false,category:\"flags\"},zimbabwe:{keywords:[\"zw\",\"flag\",\"nation\",\"country\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇿🇼\" src=\"1f1ff-1f1fc.png\"/>',fitzpatrick_scale:false,category:\"flags\"},united_nations:{keywords:[\"un\",\"flag\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🇺🇳\" src=\"1f1fa-1f1f3.png\"/>',fitzpatrick_scale:false,category:\"flags\"},pirate_flag:{keywords:[\"skull\",\"crossbones\",\"flag\",\"banner\"],char:'<img data-emoticon=\"true\" style=\"width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em\" draggable=\"false\" alt=\"🏴‍☠️\" src=\"1f3f4-200d-2620-fe0f.png\"/>',fitzpatrick_scale:false,category:\"flags\"}});"
  },
  {
    "path": "public/tinymce6.8.6/plugins/emoticons/js/emojis.js",
    "content": "window.tinymce.Resource.add(\"tinymce.plugins.emoticons\",{grinning:{keywords:[\"face\",\"smile\",\"happy\",\"joy\",\":D\",\"grin\"],char:\"😀\",fitzpatrick_scale:false,category:\"people\"},grimacing:{keywords:[\"face\",\"grimace\",\"teeth\"],char:\"😬\",fitzpatrick_scale:false,category:\"people\"},grin:{keywords:[\"face\",\"happy\",\"smile\",\"joy\",\"kawaii\"],char:\"😁\",fitzpatrick_scale:false,category:\"people\"},joy:{keywords:[\"face\",\"cry\",\"tears\",\"weep\",\"happy\",\"happytears\",\"haha\"],char:\"😂\",fitzpatrick_scale:false,category:\"people\"},rofl:{keywords:[\"face\",\"rolling\",\"floor\",\"laughing\",\"lol\",\"haha\"],char:\"🤣\",fitzpatrick_scale:false,category:\"people\"},partying:{keywords:[\"face\",\"celebration\",\"woohoo\"],char:\"🥳\",fitzpatrick_scale:false,category:\"people\"},smiley:{keywords:[\"face\",\"happy\",\"joy\",\"haha\",\":D\",\":)\",\"smile\",\"funny\"],char:\"😃\",fitzpatrick_scale:false,category:\"people\"},smile:{keywords:[\"face\",\"happy\",\"joy\",\"funny\",\"haha\",\"laugh\",\"like\",\":D\",\":)\"],char:\"😄\",fitzpatrick_scale:false,category:\"people\"},sweat_smile:{keywords:[\"face\",\"hot\",\"happy\",\"laugh\",\"sweat\",\"smile\",\"relief\"],char:\"😅\",fitzpatrick_scale:false,category:\"people\"},laughing:{keywords:[\"happy\",\"joy\",\"lol\",\"satisfied\",\"haha\",\"face\",\"glad\",\"XD\",\"laugh\"],char:\"😆\",fitzpatrick_scale:false,category:\"people\"},innocent:{keywords:[\"face\",\"angel\",\"heaven\",\"halo\"],char:\"😇\",fitzpatrick_scale:false,category:\"people\"},wink:{keywords:[\"face\",\"happy\",\"mischievous\",\"secret\",\";)\",\"smile\",\"eye\"],char:\"😉\",fitzpatrick_scale:false,category:\"people\"},blush:{keywords:[\"face\",\"smile\",\"happy\",\"flushed\",\"crush\",\"embarrassed\",\"shy\",\"joy\"],char:\"😊\",fitzpatrick_scale:false,category:\"people\"},slightly_smiling_face:{keywords:[\"face\",\"smile\"],char:\"🙂\",fitzpatrick_scale:false,category:\"people\"},upside_down_face:{keywords:[\"face\",\"flipped\",\"silly\",\"smile\"],char:\"🙃\",fitzpatrick_scale:false,category:\"people\"},relaxed:{keywords:[\"face\",\"blush\",\"massage\",\"happiness\"],char:\"☺️\",fitzpatrick_scale:false,category:\"people\"},yum:{keywords:[\"happy\",\"joy\",\"tongue\",\"smile\",\"face\",\"silly\",\"yummy\",\"nom\",\"delicious\",\"savouring\"],char:\"😋\",fitzpatrick_scale:false,category:\"people\"},relieved:{keywords:[\"face\",\"relaxed\",\"phew\",\"massage\",\"happiness\"],char:\"😌\",fitzpatrick_scale:false,category:\"people\"},heart_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"heart\"],char:\"😍\",fitzpatrick_scale:false,category:\"people\"},smiling_face_with_three_hearts:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"hearts\",\"adore\"],char:\"🥰\",fitzpatrick_scale:false,category:\"people\"},kissing_heart:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"😘\",fitzpatrick_scale:false,category:\"people\"},kissing:{keywords:[\"love\",\"like\",\"face\",\"3\",\"valentines\",\"infatuation\",\"kiss\"],char:\"😗\",fitzpatrick_scale:false,category:\"people\"},kissing_smiling_eyes:{keywords:[\"face\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"😙\",fitzpatrick_scale:false,category:\"people\"},kissing_closed_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"😚\",fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue_winking_eye:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"wink\",\"tongue\"],char:\"😜\",fitzpatrick_scale:false,category:\"people\"},zany:{keywords:[\"face\",\"goofy\",\"crazy\"],char:\"🤪\",fitzpatrick_scale:false,category:\"people\"},raised_eyebrow:{keywords:[\"face\",\"distrust\",\"scepticism\",\"disapproval\",\"disbelief\",\"surprise\"],char:\"🤨\",fitzpatrick_scale:false,category:\"people\"},monocle:{keywords:[\"face\",\"stuffy\",\"wealthy\"],char:\"🧐\",fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue_closed_eyes:{keywords:[\"face\",\"prank\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:\"😝\",fitzpatrick_scale:false,category:\"people\"},stuck_out_tongue:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:\"😛\",fitzpatrick_scale:false,category:\"people\"},money_mouth_face:{keywords:[\"face\",\"rich\",\"dollar\",\"money\"],char:\"🤑\",fitzpatrick_scale:false,category:\"people\"},nerd_face:{keywords:[\"face\",\"nerdy\",\"geek\",\"dork\"],char:\"🤓\",fitzpatrick_scale:false,category:\"people\"},sunglasses:{keywords:[\"face\",\"cool\",\"smile\",\"summer\",\"beach\",\"sunglass\"],char:\"😎\",fitzpatrick_scale:false,category:\"people\"},star_struck:{keywords:[\"face\",\"smile\",\"starry\",\"eyes\",\"grinning\"],char:\"🤩\",fitzpatrick_scale:false,category:\"people\"},clown_face:{keywords:[\"face\"],char:\"🤡\",fitzpatrick_scale:false,category:\"people\"},cowboy_hat_face:{keywords:[\"face\",\"cowgirl\",\"hat\"],char:\"🤠\",fitzpatrick_scale:false,category:\"people\"},hugs:{keywords:[\"face\",\"smile\",\"hug\"],char:\"🤗\",fitzpatrick_scale:false,category:\"people\"},smirk:{keywords:[\"face\",\"smile\",\"mean\",\"prank\",\"smug\",\"sarcasm\"],char:\"😏\",fitzpatrick_scale:false,category:\"people\"},no_mouth:{keywords:[\"face\",\"hellokitty\"],char:\"😶\",fitzpatrick_scale:false,category:\"people\"},neutral_face:{keywords:[\"indifference\",\"meh\",\":|\",\"neutral\"],char:\"😐\",fitzpatrick_scale:false,category:\"people\"},expressionless:{keywords:[\"face\",\"indifferent\",\"-_-\",\"meh\",\"deadpan\"],char:\"😑\",fitzpatrick_scale:false,category:\"people\"},unamused:{keywords:[\"indifference\",\"bored\",\"straight face\",\"serious\",\"sarcasm\",\"unimpressed\",\"skeptical\",\"dubious\",\"side_eye\"],char:\"😒\",fitzpatrick_scale:false,category:\"people\"},roll_eyes:{keywords:[\"face\",\"eyeroll\",\"frustrated\"],char:\"🙄\",fitzpatrick_scale:false,category:\"people\"},thinking:{keywords:[\"face\",\"hmmm\",\"think\",\"consider\"],char:\"🤔\",fitzpatrick_scale:false,category:\"people\"},lying_face:{keywords:[\"face\",\"lie\",\"pinocchio\"],char:\"🤥\",fitzpatrick_scale:false,category:\"people\"},hand_over_mouth:{keywords:[\"face\",\"whoops\",\"shock\",\"surprise\"],char:\"🤭\",fitzpatrick_scale:false,category:\"people\"},shushing:{keywords:[\"face\",\"quiet\",\"shhh\"],char:\"🤫\",fitzpatrick_scale:false,category:\"people\"},symbols_over_mouth:{keywords:[\"face\",\"swearing\",\"cursing\",\"cussing\",\"profanity\",\"expletive\"],char:\"🤬\",fitzpatrick_scale:false,category:\"people\"},exploding_head:{keywords:[\"face\",\"shocked\",\"mind\",\"blown\"],char:\"🤯\",fitzpatrick_scale:false,category:\"people\"},flushed:{keywords:[\"face\",\"blush\",\"shy\",\"flattered\"],char:\"😳\",fitzpatrick_scale:false,category:\"people\"},disappointed:{keywords:[\"face\",\"sad\",\"upset\",\"depressed\",\":(\"],char:\"😞\",fitzpatrick_scale:false,category:\"people\"},worried:{keywords:[\"face\",\"concern\",\"nervous\",\":(\"],char:\"😟\",fitzpatrick_scale:false,category:\"people\"},angry:{keywords:[\"mad\",\"face\",\"annoyed\",\"frustrated\"],char:\"😠\",fitzpatrick_scale:false,category:\"people\"},rage:{keywords:[\"angry\",\"mad\",\"hate\",\"despise\"],char:\"😡\",fitzpatrick_scale:false,category:\"people\"},pensive:{keywords:[\"face\",\"sad\",\"depressed\",\"upset\"],char:\"😔\",fitzpatrick_scale:false,category:\"people\"},confused:{keywords:[\"face\",\"indifference\",\"huh\",\"weird\",\"hmmm\",\":/\"],char:\"😕\",fitzpatrick_scale:false,category:\"people\"},slightly_frowning_face:{keywords:[\"face\",\"frowning\",\"disappointed\",\"sad\",\"upset\"],char:\"🙁\",fitzpatrick_scale:false,category:\"people\"},frowning_face:{keywords:[\"face\",\"sad\",\"upset\",\"frown\"],char:\"☹\",fitzpatrick_scale:false,category:\"people\"},persevere:{keywords:[\"face\",\"sick\",\"no\",\"upset\",\"oops\"],char:\"😣\",fitzpatrick_scale:false,category:\"people\"},confounded:{keywords:[\"face\",\"confused\",\"sick\",\"unwell\",\"oops\",\":S\"],char:\"😖\",fitzpatrick_scale:false,category:\"people\"},tired_face:{keywords:[\"sick\",\"whine\",\"upset\",\"frustrated\"],char:\"😫\",fitzpatrick_scale:false,category:\"people\"},weary:{keywords:[\"face\",\"tired\",\"sleepy\",\"sad\",\"frustrated\",\"upset\"],char:\"😩\",fitzpatrick_scale:false,category:\"people\"},pleading:{keywords:[\"face\",\"begging\",\"mercy\"],char:\"🥺\",fitzpatrick_scale:false,category:\"people\"},triumph:{keywords:[\"face\",\"gas\",\"phew\",\"proud\",\"pride\"],char:\"😤\",fitzpatrick_scale:false,category:\"people\"},open_mouth:{keywords:[\"face\",\"surprise\",\"impressed\",\"wow\",\"whoa\",\":O\"],char:\"😮\",fitzpatrick_scale:false,category:\"people\"},scream:{keywords:[\"face\",\"munch\",\"scared\",\"omg\"],char:\"😱\",fitzpatrick_scale:false,category:\"people\"},fearful:{keywords:[\"face\",\"scared\",\"terrified\",\"nervous\",\"oops\",\"huh\"],char:\"😨\",fitzpatrick_scale:false,category:\"people\"},cold_sweat:{keywords:[\"face\",\"nervous\",\"sweat\"],char:\"😰\",fitzpatrick_scale:false,category:\"people\"},hushed:{keywords:[\"face\",\"woo\",\"shh\"],char:\"😯\",fitzpatrick_scale:false,category:\"people\"},frowning:{keywords:[\"face\",\"aw\",\"what\"],char:\"😦\",fitzpatrick_scale:false,category:\"people\"},anguished:{keywords:[\"face\",\"stunned\",\"nervous\"],char:\"😧\",fitzpatrick_scale:false,category:\"people\"},cry:{keywords:[\"face\",\"tears\",\"sad\",\"depressed\",\"upset\",\":'(\"],char:\"😢\",fitzpatrick_scale:false,category:\"people\"},disappointed_relieved:{keywords:[\"face\",\"phew\",\"sweat\",\"nervous\"],char:\"😥\",fitzpatrick_scale:false,category:\"people\"},drooling_face:{keywords:[\"face\"],char:\"🤤\",fitzpatrick_scale:false,category:\"people\"},sleepy:{keywords:[\"face\",\"tired\",\"rest\",\"nap\"],char:\"😪\",fitzpatrick_scale:false,category:\"people\"},sweat:{keywords:[\"face\",\"hot\",\"sad\",\"tired\",\"exercise\"],char:\"😓\",fitzpatrick_scale:false,category:\"people\"},hot:{keywords:[\"face\",\"feverish\",\"heat\",\"red\",\"sweating\"],char:\"🥵\",fitzpatrick_scale:false,category:\"people\"},cold:{keywords:[\"face\",\"blue\",\"freezing\",\"frozen\",\"frostbite\",\"icicles\"],char:\"🥶\",fitzpatrick_scale:false,category:\"people\"},sob:{keywords:[\"face\",\"cry\",\"tears\",\"sad\",\"upset\",\"depressed\"],char:\"😭\",fitzpatrick_scale:false,category:\"people\"},dizzy_face:{keywords:[\"spent\",\"unconscious\",\"xox\",\"dizzy\"],char:\"😵\",fitzpatrick_scale:false,category:\"people\"},astonished:{keywords:[\"face\",\"xox\",\"surprised\",\"poisoned\"],char:\"😲\",fitzpatrick_scale:false,category:\"people\"},zipper_mouth_face:{keywords:[\"face\",\"sealed\",\"zipper\",\"secret\"],char:\"🤐\",fitzpatrick_scale:false,category:\"people\"},nauseated_face:{keywords:[\"face\",\"vomit\",\"gross\",\"green\",\"sick\",\"throw up\",\"ill\"],char:\"🤢\",fitzpatrick_scale:false,category:\"people\"},sneezing_face:{keywords:[\"face\",\"gesundheit\",\"sneeze\",\"sick\",\"allergy\"],char:\"🤧\",fitzpatrick_scale:false,category:\"people\"},vomiting:{keywords:[\"face\",\"sick\"],char:\"🤮\",fitzpatrick_scale:false,category:\"people\"},mask:{keywords:[\"face\",\"sick\",\"ill\",\"disease\"],char:\"😷\",fitzpatrick_scale:false,category:\"people\"},face_with_thermometer:{keywords:[\"sick\",\"temperature\",\"thermometer\",\"cold\",\"fever\"],char:\"🤒\",fitzpatrick_scale:false,category:\"people\"},face_with_head_bandage:{keywords:[\"injured\",\"clumsy\",\"bandage\",\"hurt\"],char:\"🤕\",fitzpatrick_scale:false,category:\"people\"},woozy:{keywords:[\"face\",\"dizzy\",\"intoxicated\",\"tipsy\",\"wavy\"],char:\"🥴\",fitzpatrick_scale:false,category:\"people\"},sleeping:{keywords:[\"face\",\"tired\",\"sleepy\",\"night\",\"zzz\"],char:\"😴\",fitzpatrick_scale:false,category:\"people\"},zzz:{keywords:[\"sleepy\",\"tired\",\"dream\"],char:\"💤\",fitzpatrick_scale:false,category:\"people\"},poop:{keywords:[\"hankey\",\"shitface\",\"fail\",\"turd\",\"shit\"],char:\"💩\",fitzpatrick_scale:false,category:\"people\"},smiling_imp:{keywords:[\"devil\",\"horns\"],char:\"😈\",fitzpatrick_scale:false,category:\"people\"},imp:{keywords:[\"devil\",\"angry\",\"horns\"],char:\"👿\",fitzpatrick_scale:false,category:\"people\"},japanese_ogre:{keywords:[\"monster\",\"red\",\"mask\",\"halloween\",\"scary\",\"creepy\",\"devil\",\"demon\",\"japanese\",\"ogre\"],char:\"👹\",fitzpatrick_scale:false,category:\"people\"},japanese_goblin:{keywords:[\"red\",\"evil\",\"mask\",\"monster\",\"scary\",\"creepy\",\"japanese\",\"goblin\"],char:\"👺\",fitzpatrick_scale:false,category:\"people\"},skull:{keywords:[\"dead\",\"skeleton\",\"creepy\",\"death\"],char:\"💀\",fitzpatrick_scale:false,category:\"people\"},ghost:{keywords:[\"halloween\",\"spooky\",\"scary\"],char:\"👻\",fitzpatrick_scale:false,category:\"people\"},alien:{keywords:[\"UFO\",\"paul\",\"weird\",\"outer_space\"],char:\"👽\",fitzpatrick_scale:false,category:\"people\"},robot:{keywords:[\"computer\",\"machine\",\"bot\"],char:\"🤖\",fitzpatrick_scale:false,category:\"people\"},smiley_cat:{keywords:[\"animal\",\"cats\",\"happy\",\"smile\"],char:\"😺\",fitzpatrick_scale:false,category:\"people\"},smile_cat:{keywords:[\"animal\",\"cats\",\"smile\"],char:\"😸\",fitzpatrick_scale:false,category:\"people\"},joy_cat:{keywords:[\"animal\",\"cats\",\"haha\",\"happy\",\"tears\"],char:\"😹\",fitzpatrick_scale:false,category:\"people\"},heart_eyes_cat:{keywords:[\"animal\",\"love\",\"like\",\"affection\",\"cats\",\"valentines\",\"heart\"],char:\"😻\",fitzpatrick_scale:false,category:\"people\"},smirk_cat:{keywords:[\"animal\",\"cats\",\"smirk\"],char:\"😼\",fitzpatrick_scale:false,category:\"people\"},kissing_cat:{keywords:[\"animal\",\"cats\",\"kiss\"],char:\"😽\",fitzpatrick_scale:false,category:\"people\"},scream_cat:{keywords:[\"animal\",\"cats\",\"munch\",\"scared\",\"scream\"],char:\"🙀\",fitzpatrick_scale:false,category:\"people\"},crying_cat_face:{keywords:[\"animal\",\"tears\",\"weep\",\"sad\",\"cats\",\"upset\",\"cry\"],char:\"😿\",fitzpatrick_scale:false,category:\"people\"},pouting_cat:{keywords:[\"animal\",\"cats\"],char:\"😾\",fitzpatrick_scale:false,category:\"people\"},palms_up:{keywords:[\"hands\",\"gesture\",\"cupped\",\"prayer\"],char:\"🤲\",fitzpatrick_scale:true,category:\"people\"},raised_hands:{keywords:[\"gesture\",\"hooray\",\"yea\",\"celebration\",\"hands\"],char:\"🙌\",fitzpatrick_scale:true,category:\"people\"},clap:{keywords:[\"hands\",\"praise\",\"applause\",\"congrats\",\"yay\"],char:\"👏\",fitzpatrick_scale:true,category:\"people\"},wave:{keywords:[\"hands\",\"gesture\",\"goodbye\",\"solong\",\"farewell\",\"hello\",\"hi\",\"palm\"],char:\"👋\",fitzpatrick_scale:true,category:\"people\"},call_me_hand:{keywords:[\"hands\",\"gesture\"],char:\"🤙\",fitzpatrick_scale:true,category:\"people\"},\"+1\":{keywords:[\"thumbsup\",\"yes\",\"awesome\",\"good\",\"agree\",\"accept\",\"cool\",\"hand\",\"like\"],char:\"👍\",fitzpatrick_scale:true,category:\"people\"},\"-1\":{keywords:[\"thumbsdown\",\"no\",\"dislike\",\"hand\"],char:\"👎\",fitzpatrick_scale:true,category:\"people\"},facepunch:{keywords:[\"angry\",\"violence\",\"fist\",\"hit\",\"attack\",\"hand\"],char:\"👊\",fitzpatrick_scale:true,category:\"people\"},fist:{keywords:[\"fingers\",\"hand\",\"grasp\"],char:\"✊\",fitzpatrick_scale:true,category:\"people\"},fist_left:{keywords:[\"hand\",\"fistbump\"],char:\"🤛\",fitzpatrick_scale:true,category:\"people\"},fist_right:{keywords:[\"hand\",\"fistbump\"],char:\"🤜\",fitzpatrick_scale:true,category:\"people\"},v:{keywords:[\"fingers\",\"ohyeah\",\"hand\",\"peace\",\"victory\",\"two\"],char:\"✌\",fitzpatrick_scale:true,category:\"people\"},ok_hand:{keywords:[\"fingers\",\"limbs\",\"perfect\",\"ok\",\"okay\"],char:\"👌\",fitzpatrick_scale:true,category:\"people\"},raised_hand:{keywords:[\"fingers\",\"stop\",\"highfive\",\"palm\",\"ban\"],char:\"✋\",fitzpatrick_scale:true,category:\"people\"},raised_back_of_hand:{keywords:[\"fingers\",\"raised\",\"backhand\"],char:\"🤚\",fitzpatrick_scale:true,category:\"people\"},open_hands:{keywords:[\"fingers\",\"butterfly\",\"hands\",\"open\"],char:\"👐\",fitzpatrick_scale:true,category:\"people\"},muscle:{keywords:[\"arm\",\"flex\",\"hand\",\"summer\",\"strong\",\"biceps\"],char:\"💪\",fitzpatrick_scale:true,category:\"people\"},pray:{keywords:[\"please\",\"hope\",\"wish\",\"namaste\",\"highfive\"],char:\"🙏\",fitzpatrick_scale:true,category:\"people\"},foot:{keywords:[\"kick\",\"stomp\"],char:\"🦶\",fitzpatrick_scale:true,category:\"people\"},leg:{keywords:[\"kick\",\"limb\"],char:\"🦵\",fitzpatrick_scale:true,category:\"people\"},handshake:{keywords:[\"agreement\",\"shake\"],char:\"🤝\",fitzpatrick_scale:false,category:\"people\"},point_up:{keywords:[\"hand\",\"fingers\",\"direction\",\"up\"],char:\"☝\",fitzpatrick_scale:true,category:\"people\"},point_up_2:{keywords:[\"fingers\",\"hand\",\"direction\",\"up\"],char:\"👆\",fitzpatrick_scale:true,category:\"people\"},point_down:{keywords:[\"fingers\",\"hand\",\"direction\",\"down\"],char:\"👇\",fitzpatrick_scale:true,category:\"people\"},point_left:{keywords:[\"direction\",\"fingers\",\"hand\",\"left\"],char:\"👈\",fitzpatrick_scale:true,category:\"people\"},point_right:{keywords:[\"fingers\",\"hand\",\"direction\",\"right\"],char:\"👉\",fitzpatrick_scale:true,category:\"people\"},fu:{keywords:[\"hand\",\"fingers\",\"rude\",\"middle\",\"flipping\"],char:\"🖕\",fitzpatrick_scale:true,category:\"people\"},raised_hand_with_fingers_splayed:{keywords:[\"hand\",\"fingers\",\"palm\"],char:\"🖐\",fitzpatrick_scale:true,category:\"people\"},love_you:{keywords:[\"hand\",\"fingers\",\"gesture\"],char:\"🤟\",fitzpatrick_scale:true,category:\"people\"},metal:{keywords:[\"hand\",\"fingers\",\"evil_eye\",\"sign_of_horns\",\"rock_on\"],char:\"🤘\",fitzpatrick_scale:true,category:\"people\"},crossed_fingers:{keywords:[\"good\",\"lucky\"],char:\"🤞\",fitzpatrick_scale:true,category:\"people\"},vulcan_salute:{keywords:[\"hand\",\"fingers\",\"spock\",\"star trek\"],char:\"🖖\",fitzpatrick_scale:true,category:\"people\"},writing_hand:{keywords:[\"lower_left_ballpoint_pen\",\"stationery\",\"write\",\"compose\"],char:\"✍\",fitzpatrick_scale:true,category:\"people\"},selfie:{keywords:[\"camera\",\"phone\"],char:\"🤳\",fitzpatrick_scale:true,category:\"people\"},nail_care:{keywords:[\"beauty\",\"manicure\",\"finger\",\"fashion\",\"nail\"],char:\"💅\",fitzpatrick_scale:true,category:\"people\"},lips:{keywords:[\"mouth\",\"kiss\"],char:\"👄\",fitzpatrick_scale:false,category:\"people\"},tooth:{keywords:[\"teeth\",\"dentist\"],char:\"🦷\",fitzpatrick_scale:false,category:\"people\"},tongue:{keywords:[\"mouth\",\"playful\"],char:\"👅\",fitzpatrick_scale:false,category:\"people\"},ear:{keywords:[\"face\",\"hear\",\"sound\",\"listen\"],char:\"👂\",fitzpatrick_scale:true,category:\"people\"},nose:{keywords:[\"smell\",\"sniff\"],char:\"👃\",fitzpatrick_scale:true,category:\"people\"},eye:{keywords:[\"face\",\"look\",\"see\",\"watch\",\"stare\"],char:\"👁\",fitzpatrick_scale:false,category:\"people\"},eyes:{keywords:[\"look\",\"watch\",\"stalk\",\"peek\",\"see\"],char:\"👀\",fitzpatrick_scale:false,category:\"people\"},brain:{keywords:[\"smart\",\"intelligent\"],char:\"🧠\",fitzpatrick_scale:false,category:\"people\"},bust_in_silhouette:{keywords:[\"user\",\"person\",\"human\"],char:\"👤\",fitzpatrick_scale:false,category:\"people\"},busts_in_silhouette:{keywords:[\"user\",\"person\",\"human\",\"group\",\"team\"],char:\"👥\",fitzpatrick_scale:false,category:\"people\"},speaking_head:{keywords:[\"user\",\"person\",\"human\",\"sing\",\"say\",\"talk\"],char:\"🗣\",fitzpatrick_scale:false,category:\"people\"},baby:{keywords:[\"child\",\"boy\",\"girl\",\"toddler\"],char:\"👶\",fitzpatrick_scale:true,category:\"people\"},child:{keywords:[\"gender-neutral\",\"young\"],char:\"🧒\",fitzpatrick_scale:true,category:\"people\"},boy:{keywords:[\"man\",\"male\",\"guy\",\"teenager\"],char:\"👦\",fitzpatrick_scale:true,category:\"people\"},girl:{keywords:[\"female\",\"woman\",\"teenager\"],char:\"👧\",fitzpatrick_scale:true,category:\"people\"},adult:{keywords:[\"gender-neutral\",\"person\"],char:\"🧑\",fitzpatrick_scale:true,category:\"people\"},man:{keywords:[\"mustache\",\"father\",\"dad\",\"guy\",\"classy\",\"sir\",\"moustache\"],char:\"👨\",fitzpatrick_scale:true,category:\"people\"},woman:{keywords:[\"female\",\"girls\",\"lady\"],char:\"👩\",fitzpatrick_scale:true,category:\"people\"},blonde_woman:{keywords:[\"woman\",\"female\",\"girl\",\"blonde\",\"person\"],char:\"👱‍♀️\",fitzpatrick_scale:true,category:\"people\"},blonde_man:{keywords:[\"man\",\"male\",\"boy\",\"blonde\",\"guy\",\"person\"],char:\"👱\",fitzpatrick_scale:true,category:\"people\"},bearded_person:{keywords:[\"person\",\"bewhiskered\"],char:\"🧔\",fitzpatrick_scale:true,category:\"people\"},older_adult:{keywords:[\"human\",\"elder\",\"senior\",\"gender-neutral\"],char:\"🧓\",fitzpatrick_scale:true,category:\"people\"},older_man:{keywords:[\"human\",\"male\",\"men\",\"old\",\"elder\",\"senior\"],char:\"👴\",fitzpatrick_scale:true,category:\"people\"},older_woman:{keywords:[\"human\",\"female\",\"women\",\"lady\",\"old\",\"elder\",\"senior\"],char:\"👵\",fitzpatrick_scale:true,category:\"people\"},man_with_gua_pi_mao:{keywords:[\"male\",\"boy\",\"chinese\"],char:\"👲\",fitzpatrick_scale:true,category:\"people\"},woman_with_headscarf:{keywords:[\"female\",\"hijab\",\"mantilla\",\"tichel\"],char:\"🧕\",fitzpatrick_scale:true,category:\"people\"},woman_with_turban:{keywords:[\"female\",\"indian\",\"hinduism\",\"arabs\",\"woman\"],char:\"👳‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_with_turban:{keywords:[\"male\",\"indian\",\"hinduism\",\"arabs\"],char:\"👳\",fitzpatrick_scale:true,category:\"people\"},policewoman:{keywords:[\"woman\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\",\"female\"],char:\"👮‍♀️\",fitzpatrick_scale:true,category:\"people\"},policeman:{keywords:[\"man\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\"],char:\"👮\",fitzpatrick_scale:true,category:\"people\"},construction_worker_woman:{keywords:[\"female\",\"human\",\"wip\",\"build\",\"construction\",\"worker\",\"labor\",\"woman\"],char:\"👷‍♀️\",fitzpatrick_scale:true,category:\"people\"},construction_worker_man:{keywords:[\"male\",\"human\",\"wip\",\"guy\",\"build\",\"construction\",\"worker\",\"labor\"],char:\"👷\",fitzpatrick_scale:true,category:\"people\"},guardswoman:{keywords:[\"uk\",\"gb\",\"british\",\"female\",\"royal\",\"woman\"],char:\"💂‍♀️\",fitzpatrick_scale:true,category:\"people\"},guardsman:{keywords:[\"uk\",\"gb\",\"british\",\"male\",\"guy\",\"royal\"],char:\"💂\",fitzpatrick_scale:true,category:\"people\"},female_detective:{keywords:[\"human\",\"spy\",\"detective\",\"female\",\"woman\"],char:\"🕵️‍♀️\",fitzpatrick_scale:true,category:\"people\"},male_detective:{keywords:[\"human\",\"spy\",\"detective\"],char:\"🕵\",fitzpatrick_scale:true,category:\"people\"},woman_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"woman\",\"human\"],char:\"👩‍⚕️\",fitzpatrick_scale:true,category:\"people\"},man_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"man\",\"human\"],char:\"👨‍⚕️\",fitzpatrick_scale:true,category:\"people\"},woman_farmer:{keywords:[\"rancher\",\"gardener\",\"woman\",\"human\"],char:\"👩‍🌾\",fitzpatrick_scale:true,category:\"people\"},man_farmer:{keywords:[\"rancher\",\"gardener\",\"man\",\"human\"],char:\"👨‍🌾\",fitzpatrick_scale:true,category:\"people\"},woman_cook:{keywords:[\"chef\",\"woman\",\"human\"],char:\"👩‍🍳\",fitzpatrick_scale:true,category:\"people\"},man_cook:{keywords:[\"chef\",\"man\",\"human\"],char:\"👨‍🍳\",fitzpatrick_scale:true,category:\"people\"},woman_student:{keywords:[\"graduate\",\"woman\",\"human\"],char:\"👩‍🎓\",fitzpatrick_scale:true,category:\"people\"},man_student:{keywords:[\"graduate\",\"man\",\"human\"],char:\"👨‍🎓\",fitzpatrick_scale:true,category:\"people\"},woman_singer:{keywords:[\"rockstar\",\"entertainer\",\"woman\",\"human\"],char:\"👩‍🎤\",fitzpatrick_scale:true,category:\"people\"},man_singer:{keywords:[\"rockstar\",\"entertainer\",\"man\",\"human\"],char:\"👨‍🎤\",fitzpatrick_scale:true,category:\"people\"},woman_teacher:{keywords:[\"instructor\",\"professor\",\"woman\",\"human\"],char:\"👩‍🏫\",fitzpatrick_scale:true,category:\"people\"},man_teacher:{keywords:[\"instructor\",\"professor\",\"man\",\"human\"],char:\"👨‍🏫\",fitzpatrick_scale:true,category:\"people\"},woman_factory_worker:{keywords:[\"assembly\",\"industrial\",\"woman\",\"human\"],char:\"👩‍🏭\",fitzpatrick_scale:true,category:\"people\"},man_factory_worker:{keywords:[\"assembly\",\"industrial\",\"man\",\"human\"],char:\"👨‍🏭\",fitzpatrick_scale:true,category:\"people\"},woman_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"woman\",\"human\",\"laptop\",\"computer\"],char:\"👩‍💻\",fitzpatrick_scale:true,category:\"people\"},man_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"man\",\"human\",\"laptop\",\"computer\"],char:\"👨‍💻\",fitzpatrick_scale:true,category:\"people\"},woman_office_worker:{keywords:[\"business\",\"manager\",\"woman\",\"human\"],char:\"👩‍💼\",fitzpatrick_scale:true,category:\"people\"},man_office_worker:{keywords:[\"business\",\"manager\",\"man\",\"human\"],char:\"👨‍💼\",fitzpatrick_scale:true,category:\"people\"},woman_mechanic:{keywords:[\"plumber\",\"woman\",\"human\",\"wrench\"],char:\"👩‍🔧\",fitzpatrick_scale:true,category:\"people\"},man_mechanic:{keywords:[\"plumber\",\"man\",\"human\",\"wrench\"],char:\"👨‍🔧\",fitzpatrick_scale:true,category:\"people\"},woman_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"woman\",\"human\"],char:\"👩‍🔬\",fitzpatrick_scale:true,category:\"people\"},man_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"man\",\"human\"],char:\"👨‍🔬\",fitzpatrick_scale:true,category:\"people\"},woman_artist:{keywords:[\"painter\",\"woman\",\"human\"],char:\"👩‍🎨\",fitzpatrick_scale:true,category:\"people\"},man_artist:{keywords:[\"painter\",\"man\",\"human\"],char:\"👨‍🎨\",fitzpatrick_scale:true,category:\"people\"},woman_firefighter:{keywords:[\"fireman\",\"woman\",\"human\"],char:\"👩‍🚒\",fitzpatrick_scale:true,category:\"people\"},man_firefighter:{keywords:[\"fireman\",\"man\",\"human\"],char:\"👨‍🚒\",fitzpatrick_scale:true,category:\"people\"},woman_pilot:{keywords:[\"aviator\",\"plane\",\"woman\",\"human\"],char:\"👩‍✈️\",fitzpatrick_scale:true,category:\"people\"},man_pilot:{keywords:[\"aviator\",\"plane\",\"man\",\"human\"],char:\"👨‍✈️\",fitzpatrick_scale:true,category:\"people\"},woman_astronaut:{keywords:[\"space\",\"rocket\",\"woman\",\"human\"],char:\"👩‍🚀\",fitzpatrick_scale:true,category:\"people\"},man_astronaut:{keywords:[\"space\",\"rocket\",\"man\",\"human\"],char:\"👨‍🚀\",fitzpatrick_scale:true,category:\"people\"},woman_judge:{keywords:[\"justice\",\"court\",\"woman\",\"human\"],char:\"👩‍⚖️\",fitzpatrick_scale:true,category:\"people\"},man_judge:{keywords:[\"justice\",\"court\",\"man\",\"human\"],char:\"👨‍⚖️\",fitzpatrick_scale:true,category:\"people\"},woman_superhero:{keywords:[\"woman\",\"female\",\"good\",\"heroine\",\"superpowers\"],char:\"🦸‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_superhero:{keywords:[\"man\",\"male\",\"good\",\"hero\",\"superpowers\"],char:\"🦸‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_supervillain:{keywords:[\"woman\",\"female\",\"evil\",\"bad\",\"criminal\",\"heroine\",\"superpowers\"],char:\"🦹‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_supervillain:{keywords:[\"man\",\"male\",\"evil\",\"bad\",\"criminal\",\"hero\",\"superpowers\"],char:\"🦹‍♂️\",fitzpatrick_scale:true,category:\"people\"},mrs_claus:{keywords:[\"woman\",\"female\",\"xmas\",\"mother christmas\"],char:\"🤶\",fitzpatrick_scale:true,category:\"people\"},santa:{keywords:[\"festival\",\"man\",\"male\",\"xmas\",\"father christmas\"],char:\"🎅\",fitzpatrick_scale:true,category:\"people\"},sorceress:{keywords:[\"woman\",\"female\",\"mage\",\"witch\"],char:\"🧙‍♀️\",fitzpatrick_scale:true,category:\"people\"},wizard:{keywords:[\"man\",\"male\",\"mage\",\"sorcerer\"],char:\"🧙‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_elf:{keywords:[\"woman\",\"female\"],char:\"🧝‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_elf:{keywords:[\"man\",\"male\"],char:\"🧝‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_vampire:{keywords:[\"woman\",\"female\"],char:\"🧛‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_vampire:{keywords:[\"man\",\"male\",\"dracula\"],char:\"🧛‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_zombie:{keywords:[\"woman\",\"female\",\"undead\",\"walking dead\"],char:\"🧟‍♀️\",fitzpatrick_scale:false,category:\"people\"},man_zombie:{keywords:[\"man\",\"male\",\"dracula\",\"undead\",\"walking dead\"],char:\"🧟‍♂️\",fitzpatrick_scale:false,category:\"people\"},woman_genie:{keywords:[\"woman\",\"female\"],char:\"🧞‍♀️\",fitzpatrick_scale:false,category:\"people\"},man_genie:{keywords:[\"man\",\"male\"],char:\"🧞‍♂️\",fitzpatrick_scale:false,category:\"people\"},mermaid:{keywords:[\"woman\",\"female\",\"merwoman\",\"ariel\"],char:\"🧜‍♀️\",fitzpatrick_scale:true,category:\"people\"},merman:{keywords:[\"man\",\"male\",\"triton\"],char:\"🧜‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_fairy:{keywords:[\"woman\",\"female\"],char:\"🧚‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_fairy:{keywords:[\"man\",\"male\"],char:\"🧚‍♂️\",fitzpatrick_scale:true,category:\"people\"},angel:{keywords:[\"heaven\",\"wings\",\"halo\"],char:\"👼\",fitzpatrick_scale:true,category:\"people\"},pregnant_woman:{keywords:[\"baby\"],char:\"🤰\",fitzpatrick_scale:true,category:\"people\"},breastfeeding:{keywords:[\"nursing\",\"baby\"],char:\"🤱\",fitzpatrick_scale:true,category:\"people\"},princess:{keywords:[\"girl\",\"woman\",\"female\",\"blond\",\"crown\",\"royal\",\"queen\"],char:\"👸\",fitzpatrick_scale:true,category:\"people\"},prince:{keywords:[\"boy\",\"man\",\"male\",\"crown\",\"royal\",\"king\"],char:\"🤴\",fitzpatrick_scale:true,category:\"people\"},bride_with_veil:{keywords:[\"couple\",\"marriage\",\"wedding\",\"woman\",\"bride\"],char:\"👰\",fitzpatrick_scale:true,category:\"people\"},man_in_tuxedo:{keywords:[\"couple\",\"marriage\",\"wedding\",\"groom\"],char:\"🤵\",fitzpatrick_scale:true,category:\"people\"},running_woman:{keywords:[\"woman\",\"walking\",\"exercise\",\"race\",\"running\",\"female\"],char:\"🏃‍♀️\",fitzpatrick_scale:true,category:\"people\"},running_man:{keywords:[\"man\",\"walking\",\"exercise\",\"race\",\"running\"],char:\"🏃\",fitzpatrick_scale:true,category:\"people\"},walking_woman:{keywords:[\"human\",\"feet\",\"steps\",\"woman\",\"female\"],char:\"🚶‍♀️\",fitzpatrick_scale:true,category:\"people\"},walking_man:{keywords:[\"human\",\"feet\",\"steps\"],char:\"🚶\",fitzpatrick_scale:true,category:\"people\"},dancer:{keywords:[\"female\",\"girl\",\"woman\",\"fun\"],char:\"💃\",fitzpatrick_scale:true,category:\"people\"},man_dancing:{keywords:[\"male\",\"boy\",\"fun\",\"dancer\"],char:\"🕺\",fitzpatrick_scale:true,category:\"people\"},dancing_women:{keywords:[\"female\",\"bunny\",\"women\",\"girls\"],char:\"👯\",fitzpatrick_scale:false,category:\"people\"},dancing_men:{keywords:[\"male\",\"bunny\",\"men\",\"boys\"],char:\"👯‍♂️\",fitzpatrick_scale:false,category:\"people\"},couple:{keywords:[\"pair\",\"people\",\"human\",\"love\",\"date\",\"dating\",\"like\",\"affection\",\"valentines\",\"marriage\"],char:\"👫\",fitzpatrick_scale:false,category:\"people\"},two_men_holding_hands:{keywords:[\"pair\",\"couple\",\"love\",\"like\",\"bromance\",\"friendship\",\"people\",\"human\"],char:\"👬\",fitzpatrick_scale:false,category:\"people\"},two_women_holding_hands:{keywords:[\"pair\",\"friendship\",\"couple\",\"love\",\"like\",\"female\",\"people\",\"human\"],char:\"👭\",fitzpatrick_scale:false,category:\"people\"},bowing_woman:{keywords:[\"woman\",\"female\",\"girl\"],char:\"🙇‍♀️\",fitzpatrick_scale:true,category:\"people\"},bowing_man:{keywords:[\"man\",\"male\",\"boy\"],char:\"🙇\",fitzpatrick_scale:true,category:\"people\"},man_facepalming:{keywords:[\"man\",\"male\",\"boy\",\"disbelief\"],char:\"🤦‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_facepalming:{keywords:[\"woman\",\"female\",\"girl\",\"disbelief\"],char:\"🤦‍♀️\",fitzpatrick_scale:true,category:\"people\"},woman_shrugging:{keywords:[\"woman\",\"female\",\"girl\",\"confused\",\"indifferent\",\"doubt\"],char:\"🤷\",fitzpatrick_scale:true,category:\"people\"},man_shrugging:{keywords:[\"man\",\"male\",\"boy\",\"confused\",\"indifferent\",\"doubt\"],char:\"🤷‍♂️\",fitzpatrick_scale:true,category:\"people\"},tipping_hand_woman:{keywords:[\"female\",\"girl\",\"woman\",\"human\",\"information\"],char:\"💁\",fitzpatrick_scale:true,category:\"people\"},tipping_hand_man:{keywords:[\"male\",\"boy\",\"man\",\"human\",\"information\"],char:\"💁‍♂️\",fitzpatrick_scale:true,category:\"people\"},no_good_woman:{keywords:[\"female\",\"girl\",\"woman\",\"nope\"],char:\"🙅\",fitzpatrick_scale:true,category:\"people\"},no_good_man:{keywords:[\"male\",\"boy\",\"man\",\"nope\"],char:\"🙅‍♂️\",fitzpatrick_scale:true,category:\"people\"},ok_woman:{keywords:[\"women\",\"girl\",\"female\",\"pink\",\"human\",\"woman\"],char:\"🙆\",fitzpatrick_scale:true,category:\"people\"},ok_man:{keywords:[\"men\",\"boy\",\"male\",\"blue\",\"human\",\"man\"],char:\"🙆‍♂️\",fitzpatrick_scale:true,category:\"people\"},raising_hand_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"🙋\",fitzpatrick_scale:true,category:\"people\"},raising_hand_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"🙋‍♂️\",fitzpatrick_scale:true,category:\"people\"},pouting_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"🙎\",fitzpatrick_scale:true,category:\"people\"},pouting_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"🙎‍♂️\",fitzpatrick_scale:true,category:\"people\"},frowning_woman:{keywords:[\"female\",\"girl\",\"woman\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:\"🙍\",fitzpatrick_scale:true,category:\"people\"},frowning_man:{keywords:[\"male\",\"boy\",\"man\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:\"🙍‍♂️\",fitzpatrick_scale:true,category:\"people\"},haircut_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"💇\",fitzpatrick_scale:true,category:\"people\"},haircut_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"💇‍♂️\",fitzpatrick_scale:true,category:\"people\"},massage_woman:{keywords:[\"female\",\"girl\",\"woman\",\"head\"],char:\"💆\",fitzpatrick_scale:true,category:\"people\"},massage_man:{keywords:[\"male\",\"boy\",\"man\",\"head\"],char:\"💆‍♂️\",fitzpatrick_scale:true,category:\"people\"},woman_in_steamy_room:{keywords:[\"female\",\"woman\",\"spa\",\"steamroom\",\"sauna\"],char:\"🧖‍♀️\",fitzpatrick_scale:true,category:\"people\"},man_in_steamy_room:{keywords:[\"male\",\"man\",\"spa\",\"steamroom\",\"sauna\"],char:\"🧖‍♂️\",fitzpatrick_scale:true,category:\"people\"},couple_with_heart_woman_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"💑\",fitzpatrick_scale:false,category:\"people\"},couple_with_heart_woman_woman:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"👩‍❤️‍👩\",fitzpatrick_scale:false,category:\"people\"},couple_with_heart_man_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"👨‍❤️‍👨\",fitzpatrick_scale:false,category:\"people\"},couplekiss_man_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"💏\",fitzpatrick_scale:false,category:\"people\"},couplekiss_woman_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"👩‍❤️‍💋‍👩\",fitzpatrick_scale:false,category:\"people\"},couplekiss_man_man:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"👨‍❤️‍💋‍👨\",fitzpatrick_scale:false,category:\"people\"},family_man_woman_boy:{keywords:[\"home\",\"parents\",\"child\",\"mom\",\"dad\",\"father\",\"mother\",\"people\",\"human\"],char:\"👪\",fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"child\"],char:\"👨‍👩‍👧\",fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👩‍👧‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👩‍👦‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👩‍👧‍👧\",fitzpatrick_scale:false,category:\"people\"},family_woman_woman_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👩‍👩‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👩‍👩‍👧\",fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👩‍👩‍👧‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👩‍👩‍👦‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👩‍👩‍👧‍👧\",fitzpatrick_scale:false,category:\"people\"},family_man_man_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👨‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_man_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👨‍👧\",fitzpatrick_scale:false,category:\"people\"},family_man_man_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👨‍👧‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_man_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👨‍👦‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_man_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"👨‍👨‍👧‍👧\",fitzpatrick_scale:false,category:\"people\"},family_woman_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"👩‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"👩‍👧\",fitzpatrick_scale:false,category:\"people\"},family_woman_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👩‍👧‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👩‍👦‍👦\",fitzpatrick_scale:false,category:\"people\"},family_woman_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👩‍👧‍👧\",fitzpatrick_scale:false,category:\"people\"},family_man_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"👨‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"👨‍👧\",fitzpatrick_scale:false,category:\"people\"},family_man_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👨‍👧‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👨‍👦‍👦\",fitzpatrick_scale:false,category:\"people\"},family_man_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"👨‍👧‍👧\",fitzpatrick_scale:false,category:\"people\"},yarn:{keywords:[\"ball\",\"crochet\",\"knit\"],char:\"🧶\",fitzpatrick_scale:false,category:\"people\"},thread:{keywords:[\"needle\",\"sewing\",\"spool\",\"string\"],char:\"🧵\",fitzpatrick_scale:false,category:\"people\"},coat:{keywords:[\"jacket\"],char:\"🧥\",fitzpatrick_scale:false,category:\"people\"},labcoat:{keywords:[\"doctor\",\"experiment\",\"scientist\",\"chemist\"],char:\"🥼\",fitzpatrick_scale:false,category:\"people\"},womans_clothes:{keywords:[\"fashion\",\"shopping_bags\",\"female\"],char:\"👚\",fitzpatrick_scale:false,category:\"people\"},tshirt:{keywords:[\"fashion\",\"cloth\",\"casual\",\"shirt\",\"tee\"],char:\"👕\",fitzpatrick_scale:false,category:\"people\"},jeans:{keywords:[\"fashion\",\"shopping\"],char:\"👖\",fitzpatrick_scale:false,category:\"people\"},necktie:{keywords:[\"shirt\",\"suitup\",\"formal\",\"fashion\",\"cloth\",\"business\"],char:\"👔\",fitzpatrick_scale:false,category:\"people\"},dress:{keywords:[\"clothes\",\"fashion\",\"shopping\"],char:\"👗\",fitzpatrick_scale:false,category:\"people\"},bikini:{keywords:[\"swimming\",\"female\",\"woman\",\"girl\",\"fashion\",\"beach\",\"summer\"],char:\"👙\",fitzpatrick_scale:false,category:\"people\"},kimono:{keywords:[\"dress\",\"fashion\",\"women\",\"female\",\"japanese\"],char:\"👘\",fitzpatrick_scale:false,category:\"people\"},lipstick:{keywords:[\"female\",\"girl\",\"fashion\",\"woman\"],char:\"💄\",fitzpatrick_scale:false,category:\"people\"},kiss:{keywords:[\"face\",\"lips\",\"love\",\"like\",\"affection\",\"valentines\"],char:\"💋\",fitzpatrick_scale:false,category:\"people\"},footprints:{keywords:[\"feet\",\"tracking\",\"walking\",\"beach\"],char:\"👣\",fitzpatrick_scale:false,category:\"people\"},flat_shoe:{keywords:[\"ballet\",\"slip-on\",\"slipper\"],char:\"🥿\",fitzpatrick_scale:false,category:\"people\"},high_heel:{keywords:[\"fashion\",\"shoes\",\"female\",\"pumps\",\"stiletto\"],char:\"👠\",fitzpatrick_scale:false,category:\"people\"},sandal:{keywords:[\"shoes\",\"fashion\",\"flip flops\"],char:\"👡\",fitzpatrick_scale:false,category:\"people\"},boot:{keywords:[\"shoes\",\"fashion\"],char:\"👢\",fitzpatrick_scale:false,category:\"people\"},mans_shoe:{keywords:[\"fashion\",\"male\"],char:\"👞\",fitzpatrick_scale:false,category:\"people\"},athletic_shoe:{keywords:[\"shoes\",\"sports\",\"sneakers\"],char:\"👟\",fitzpatrick_scale:false,category:\"people\"},hiking_boot:{keywords:[\"backpacking\",\"camping\",\"hiking\"],char:\"🥾\",fitzpatrick_scale:false,category:\"people\"},socks:{keywords:[\"stockings\",\"clothes\"],char:\"🧦\",fitzpatrick_scale:false,category:\"people\"},gloves:{keywords:[\"hands\",\"winter\",\"clothes\"],char:\"🧤\",fitzpatrick_scale:false,category:\"people\"},scarf:{keywords:[\"neck\",\"winter\",\"clothes\"],char:\"🧣\",fitzpatrick_scale:false,category:\"people\"},womans_hat:{keywords:[\"fashion\",\"accessories\",\"female\",\"lady\",\"spring\"],char:\"👒\",fitzpatrick_scale:false,category:\"people\"},tophat:{keywords:[\"magic\",\"gentleman\",\"classy\",\"circus\"],char:\"🎩\",fitzpatrick_scale:false,category:\"people\"},billed_hat:{keywords:[\"cap\",\"baseball\"],char:\"🧢\",fitzpatrick_scale:false,category:\"people\"},rescue_worker_helmet:{keywords:[\"construction\",\"build\"],char:\"⛑\",fitzpatrick_scale:false,category:\"people\"},mortar_board:{keywords:[\"school\",\"college\",\"degree\",\"university\",\"graduation\",\"cap\",\"hat\",\"legal\",\"learn\",\"education\"],char:\"🎓\",fitzpatrick_scale:false,category:\"people\"},crown:{keywords:[\"king\",\"kod\",\"leader\",\"royalty\",\"lord\"],char:\"👑\",fitzpatrick_scale:false,category:\"people\"},school_satchel:{keywords:[\"student\",\"education\",\"bag\",\"backpack\"],char:\"🎒\",fitzpatrick_scale:false,category:\"people\"},luggage:{keywords:[\"packing\",\"travel\"],char:\"🧳\",fitzpatrick_scale:false,category:\"people\"},pouch:{keywords:[\"bag\",\"accessories\",\"shopping\"],char:\"👝\",fitzpatrick_scale:false,category:\"people\"},purse:{keywords:[\"fashion\",\"accessories\",\"money\",\"sales\",\"shopping\"],char:\"👛\",fitzpatrick_scale:false,category:\"people\"},handbag:{keywords:[\"fashion\",\"accessory\",\"accessories\",\"shopping\"],char:\"👜\",fitzpatrick_scale:false,category:\"people\"},briefcase:{keywords:[\"business\",\"documents\",\"work\",\"law\",\"legal\",\"job\",\"career\"],char:\"💼\",fitzpatrick_scale:false,category:\"people\"},eyeglasses:{keywords:[\"fashion\",\"accessories\",\"eyesight\",\"nerdy\",\"dork\",\"geek\"],char:\"👓\",fitzpatrick_scale:false,category:\"people\"},dark_sunglasses:{keywords:[\"face\",\"cool\",\"accessories\"],char:\"🕶\",fitzpatrick_scale:false,category:\"people\"},goggles:{keywords:[\"eyes\",\"protection\",\"safety\"],char:\"🥽\",fitzpatrick_scale:false,category:\"people\"},ring:{keywords:[\"wedding\",\"propose\",\"marriage\",\"valentines\",\"diamond\",\"fashion\",\"jewelry\",\"gem\",\"engagement\"],char:\"💍\",fitzpatrick_scale:false,category:\"people\"},closed_umbrella:{keywords:[\"weather\",\"rain\",\"drizzle\"],char:\"🌂\",fitzpatrick_scale:false,category:\"people\"},dog:{keywords:[\"animal\",\"friend\",\"nature\",\"woof\",\"puppy\",\"pet\",\"faithful\"],char:\"🐶\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cat:{keywords:[\"animal\",\"meow\",\"nature\",\"pet\",\"kitten\"],char:\"🐱\",fitzpatrick_scale:false,category:\"animals_and_nature\"},mouse:{keywords:[\"animal\",\"nature\",\"cheese_wedge\",\"rodent\"],char:\"🐭\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hamster:{keywords:[\"animal\",\"nature\"],char:\"🐹\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rabbit:{keywords:[\"animal\",\"nature\",\"pet\",\"spring\",\"magic\",\"bunny\"],char:\"🐰\",fitzpatrick_scale:false,category:\"animals_and_nature\"},fox_face:{keywords:[\"animal\",\"nature\",\"face\"],char:\"🦊\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bear:{keywords:[\"animal\",\"nature\",\"wild\"],char:\"🐻\",fitzpatrick_scale:false,category:\"animals_and_nature\"},panda_face:{keywords:[\"animal\",\"nature\",\"panda\"],char:\"🐼\",fitzpatrick_scale:false,category:\"animals_and_nature\"},koala:{keywords:[\"animal\",\"nature\"],char:\"🐨\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tiger:{keywords:[\"animal\",\"cat\",\"danger\",\"wild\",\"nature\",\"roar\"],char:\"🐯\",fitzpatrick_scale:false,category:\"animals_and_nature\"},lion:{keywords:[\"animal\",\"nature\"],char:\"🦁\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cow:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:\"🐮\",fitzpatrick_scale:false,category:\"animals_and_nature\"},pig:{keywords:[\"animal\",\"oink\",\"nature\"],char:\"🐷\",fitzpatrick_scale:false,category:\"animals_and_nature\"},pig_nose:{keywords:[\"animal\",\"oink\"],char:\"🐽\",fitzpatrick_scale:false,category:\"animals_and_nature\"},frog:{keywords:[\"animal\",\"nature\",\"croak\",\"toad\"],char:\"🐸\",fitzpatrick_scale:false,category:\"animals_and_nature\"},squid:{keywords:[\"animal\",\"nature\",\"ocean\",\"sea\"],char:\"🦑\",fitzpatrick_scale:false,category:\"animals_and_nature\"},octopus:{keywords:[\"animal\",\"creature\",\"ocean\",\"sea\",\"nature\",\"beach\"],char:\"🐙\",fitzpatrick_scale:false,category:\"animals_and_nature\"},shrimp:{keywords:[\"animal\",\"ocean\",\"nature\",\"seafood\"],char:\"🦐\",fitzpatrick_scale:false,category:\"animals_and_nature\"},monkey_face:{keywords:[\"animal\",\"nature\",\"circus\"],char:\"🐵\",fitzpatrick_scale:false,category:\"animals_and_nature\"},gorilla:{keywords:[\"animal\",\"nature\",\"circus\"],char:\"🦍\",fitzpatrick_scale:false,category:\"animals_and_nature\"},see_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"haha\"],char:\"🙈\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hear_no_evil:{keywords:[\"animal\",\"monkey\",\"nature\"],char:\"🙉\",fitzpatrick_scale:false,category:\"animals_and_nature\"},speak_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"omg\"],char:\"🙊\",fitzpatrick_scale:false,category:\"animals_and_nature\"},monkey:{keywords:[\"animal\",\"nature\",\"banana\",\"circus\"],char:\"🐒\",fitzpatrick_scale:false,category:\"animals_and_nature\"},chicken:{keywords:[\"animal\",\"cluck\",\"nature\",\"bird\"],char:\"🐔\",fitzpatrick_scale:false,category:\"animals_and_nature\"},penguin:{keywords:[\"animal\",\"nature\"],char:\"🐧\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bird:{keywords:[\"animal\",\"nature\",\"fly\",\"tweet\",\"spring\"],char:\"🐦\",fitzpatrick_scale:false,category:\"animals_and_nature\"},baby_chick:{keywords:[\"animal\",\"chicken\",\"bird\"],char:\"🐤\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hatching_chick:{keywords:[\"animal\",\"chicken\",\"egg\",\"born\",\"baby\",\"bird\"],char:\"🐣\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hatched_chick:{keywords:[\"animal\",\"chicken\",\"baby\",\"bird\"],char:\"🐥\",fitzpatrick_scale:false,category:\"animals_and_nature\"},duck:{keywords:[\"animal\",\"nature\",\"bird\",\"mallard\"],char:\"🦆\",fitzpatrick_scale:false,category:\"animals_and_nature\"},eagle:{keywords:[\"animal\",\"nature\",\"bird\"],char:\"🦅\",fitzpatrick_scale:false,category:\"animals_and_nature\"},owl:{keywords:[\"animal\",\"nature\",\"bird\",\"hoot\"],char:\"🦉\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bat:{keywords:[\"animal\",\"nature\",\"blind\",\"vampire\"],char:\"🦇\",fitzpatrick_scale:false,category:\"animals_and_nature\"},wolf:{keywords:[\"animal\",\"nature\",\"wild\"],char:\"🐺\",fitzpatrick_scale:false,category:\"animals_and_nature\"},boar:{keywords:[\"animal\",\"nature\"],char:\"🐗\",fitzpatrick_scale:false,category:\"animals_and_nature\"},horse:{keywords:[\"animal\",\"brown\",\"nature\"],char:\"🐴\",fitzpatrick_scale:false,category:\"animals_and_nature\"},unicorn:{keywords:[\"animal\",\"nature\",\"mystical\"],char:\"🦄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},honeybee:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\",\"spring\",\"honey\"],char:\"🐝\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bug:{keywords:[\"animal\",\"insect\",\"nature\",\"worm\"],char:\"🐛\",fitzpatrick_scale:false,category:\"animals_and_nature\"},butterfly:{keywords:[\"animal\",\"insect\",\"nature\",\"caterpillar\"],char:\"🦋\",fitzpatrick_scale:false,category:\"animals_and_nature\"},snail:{keywords:[\"slow\",\"animal\",\"shell\"],char:\"🐌\",fitzpatrick_scale:false,category:\"animals_and_nature\"},beetle:{keywords:[\"animal\",\"insect\",\"nature\",\"ladybug\"],char:\"🐞\",fitzpatrick_scale:false,category:\"animals_and_nature\"},ant:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\"],char:\"🐜\",fitzpatrick_scale:false,category:\"animals_and_nature\"},grasshopper:{keywords:[\"animal\",\"cricket\",\"chirp\"],char:\"🦗\",fitzpatrick_scale:false,category:\"animals_and_nature\"},spider:{keywords:[\"animal\",\"arachnid\"],char:\"🕷\",fitzpatrick_scale:false,category:\"animals_and_nature\"},scorpion:{keywords:[\"animal\",\"arachnid\"],char:\"🦂\",fitzpatrick_scale:false,category:\"animals_and_nature\"},crab:{keywords:[\"animal\",\"crustacean\"],char:\"🦀\",fitzpatrick_scale:false,category:\"animals_and_nature\"},snake:{keywords:[\"animal\",\"evil\",\"nature\",\"hiss\",\"python\"],char:\"🐍\",fitzpatrick_scale:false,category:\"animals_and_nature\"},lizard:{keywords:[\"animal\",\"nature\",\"reptile\"],char:\"🦎\",fitzpatrick_scale:false,category:\"animals_and_nature\"},\"t-rex\":{keywords:[\"animal\",\"nature\",\"dinosaur\",\"tyrannosaurus\",\"extinct\"],char:\"🦖\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sauropod:{keywords:[\"animal\",\"nature\",\"dinosaur\",\"brachiosaurus\",\"brontosaurus\",\"diplodocus\",\"extinct\"],char:\"🦕\",fitzpatrick_scale:false,category:\"animals_and_nature\"},turtle:{keywords:[\"animal\",\"slow\",\"nature\",\"tortoise\"],char:\"🐢\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tropical_fish:{keywords:[\"animal\",\"swim\",\"ocean\",\"beach\",\"nemo\"],char:\"🐠\",fitzpatrick_scale:false,category:\"animals_and_nature\"},fish:{keywords:[\"animal\",\"food\",\"nature\"],char:\"🐟\",fitzpatrick_scale:false,category:\"animals_and_nature\"},blowfish:{keywords:[\"animal\",\"nature\",\"food\",\"sea\",\"ocean\"],char:\"🐡\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dolphin:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"flipper\",\"fins\",\"beach\"],char:\"🐬\",fitzpatrick_scale:false,category:\"animals_and_nature\"},shark:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"jaws\",\"fins\",\"beach\"],char:\"🦈\",fitzpatrick_scale:false,category:\"animals_and_nature\"},whale:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:\"🐳\",fitzpatrick_scale:false,category:\"animals_and_nature\"},whale2:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:\"🐋\",fitzpatrick_scale:false,category:\"animals_and_nature\"},crocodile:{keywords:[\"animal\",\"nature\",\"reptile\",\"lizard\",\"alligator\"],char:\"🐊\",fitzpatrick_scale:false,category:\"animals_and_nature\"},leopard:{keywords:[\"animal\",\"nature\"],char:\"🐆\",fitzpatrick_scale:false,category:\"animals_and_nature\"},zebra:{keywords:[\"animal\",\"nature\",\"stripes\",\"safari\"],char:\"🦓\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tiger2:{keywords:[\"animal\",\"nature\",\"roar\"],char:\"🐅\",fitzpatrick_scale:false,category:\"animals_and_nature\"},water_buffalo:{keywords:[\"animal\",\"nature\",\"ox\",\"cow\"],char:\"🐃\",fitzpatrick_scale:false,category:\"animals_and_nature\"},ox:{keywords:[\"animal\",\"cow\",\"beef\"],char:\"🐂\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cow2:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:\"🐄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},deer:{keywords:[\"animal\",\"nature\",\"horns\",\"venison\"],char:\"🦌\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dromedary_camel:{keywords:[\"animal\",\"hot\",\"desert\",\"hump\"],char:\"🐪\",fitzpatrick_scale:false,category:\"animals_and_nature\"},camel:{keywords:[\"animal\",\"nature\",\"hot\",\"desert\",\"hump\"],char:\"🐫\",fitzpatrick_scale:false,category:\"animals_and_nature\"},giraffe:{keywords:[\"animal\",\"nature\",\"spots\",\"safari\"],char:\"🦒\",fitzpatrick_scale:false,category:\"animals_and_nature\"},elephant:{keywords:[\"animal\",\"nature\",\"nose\",\"th\",\"circus\"],char:\"🐘\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rhinoceros:{keywords:[\"animal\",\"nature\",\"horn\"],char:\"🦏\",fitzpatrick_scale:false,category:\"animals_and_nature\"},goat:{keywords:[\"animal\",\"nature\"],char:\"🐐\",fitzpatrick_scale:false,category:\"animals_and_nature\"},ram:{keywords:[\"animal\",\"sheep\",\"nature\"],char:\"🐏\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sheep:{keywords:[\"animal\",\"nature\",\"wool\",\"shipit\"],char:\"🐑\",fitzpatrick_scale:false,category:\"animals_and_nature\"},racehorse:{keywords:[\"animal\",\"gamble\",\"luck\"],char:\"🐎\",fitzpatrick_scale:false,category:\"animals_and_nature\"},pig2:{keywords:[\"animal\",\"nature\"],char:\"🐖\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rat:{keywords:[\"animal\",\"mouse\",\"rodent\"],char:\"🐀\",fitzpatrick_scale:false,category:\"animals_and_nature\"},mouse2:{keywords:[\"animal\",\"nature\",\"rodent\"],char:\"🐁\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rooster:{keywords:[\"animal\",\"nature\",\"chicken\"],char:\"🐓\",fitzpatrick_scale:false,category:\"animals_and_nature\"},turkey:{keywords:[\"animal\",\"bird\"],char:\"🦃\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dove:{keywords:[\"animal\",\"bird\"],char:\"🕊\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dog2:{keywords:[\"animal\",\"nature\",\"friend\",\"doge\",\"pet\",\"faithful\"],char:\"🐕\",fitzpatrick_scale:false,category:\"animals_and_nature\"},poodle:{keywords:[\"dog\",\"animal\",\"101\",\"nature\",\"pet\"],char:\"🐩\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cat2:{keywords:[\"animal\",\"meow\",\"pet\",\"cats\"],char:\"🐈\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rabbit2:{keywords:[\"animal\",\"nature\",\"pet\",\"magic\",\"spring\"],char:\"🐇\",fitzpatrick_scale:false,category:\"animals_and_nature\"},chipmunk:{keywords:[\"animal\",\"nature\",\"rodent\",\"squirrel\"],char:\"🐿\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hedgehog:{keywords:[\"animal\",\"nature\",\"spiny\"],char:\"🦔\",fitzpatrick_scale:false,category:\"animals_and_nature\"},raccoon:{keywords:[\"animal\",\"nature\"],char:\"🦝\",fitzpatrick_scale:false,category:\"animals_and_nature\"},llama:{keywords:[\"animal\",\"nature\",\"alpaca\"],char:\"🦙\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hippopotamus:{keywords:[\"animal\",\"nature\"],char:\"🦛\",fitzpatrick_scale:false,category:\"animals_and_nature\"},kangaroo:{keywords:[\"animal\",\"nature\",\"australia\",\"joey\",\"hop\",\"marsupial\"],char:\"🦘\",fitzpatrick_scale:false,category:\"animals_and_nature\"},badger:{keywords:[\"animal\",\"nature\",\"honey\"],char:\"🦡\",fitzpatrick_scale:false,category:\"animals_and_nature\"},swan:{keywords:[\"animal\",\"nature\",\"bird\"],char:\"🦢\",fitzpatrick_scale:false,category:\"animals_and_nature\"},peacock:{keywords:[\"animal\",\"nature\",\"peahen\",\"bird\"],char:\"🦚\",fitzpatrick_scale:false,category:\"animals_and_nature\"},parrot:{keywords:[\"animal\",\"nature\",\"bird\",\"pirate\",\"talk\"],char:\"🦜\",fitzpatrick_scale:false,category:\"animals_and_nature\"},lobster:{keywords:[\"animal\",\"nature\",\"bisque\",\"claws\",\"seafood\"],char:\"🦞\",fitzpatrick_scale:false,category:\"animals_and_nature\"},mosquito:{keywords:[\"animal\",\"nature\",\"insect\",\"malaria\"],char:\"🦟\",fitzpatrick_scale:false,category:\"animals_and_nature\"},paw_prints:{keywords:[\"animal\",\"tracking\",\"footprints\",\"dog\",\"cat\",\"pet\",\"feet\"],char:\"🐾\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dragon:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:\"🐉\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dragon_face:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:\"🐲\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cactus:{keywords:[\"vegetable\",\"plant\",\"nature\"],char:\"🌵\",fitzpatrick_scale:false,category:\"animals_and_nature\"},christmas_tree:{keywords:[\"festival\",\"vacation\",\"december\",\"xmas\",\"celebration\"],char:\"🎄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},evergreen_tree:{keywords:[\"plant\",\"nature\"],char:\"🌲\",fitzpatrick_scale:false,category:\"animals_and_nature\"},deciduous_tree:{keywords:[\"plant\",\"nature\"],char:\"🌳\",fitzpatrick_scale:false,category:\"animals_and_nature\"},palm_tree:{keywords:[\"plant\",\"vegetable\",\"nature\",\"summer\",\"beach\",\"mojito\",\"tropical\"],char:\"🌴\",fitzpatrick_scale:false,category:\"animals_and_nature\"},seedling:{keywords:[\"plant\",\"nature\",\"grass\",\"lawn\",\"spring\"],char:\"🌱\",fitzpatrick_scale:false,category:\"animals_and_nature\"},herb:{keywords:[\"vegetable\",\"plant\",\"medicine\",\"weed\",\"grass\",\"lawn\"],char:\"🌿\",fitzpatrick_scale:false,category:\"animals_and_nature\"},shamrock:{keywords:[\"vegetable\",\"plant\",\"nature\",\"irish\",\"clover\"],char:\"☘\",fitzpatrick_scale:false,category:\"animals_and_nature\"},four_leaf_clover:{keywords:[\"vegetable\",\"plant\",\"nature\",\"lucky\",\"irish\"],char:\"🍀\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bamboo:{keywords:[\"plant\",\"nature\",\"vegetable\",\"panda\",\"pine_decoration\"],char:\"🎍\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tanabata_tree:{keywords:[\"plant\",\"nature\",\"branch\",\"summer\"],char:\"🎋\",fitzpatrick_scale:false,category:\"animals_and_nature\"},leaves:{keywords:[\"nature\",\"plant\",\"tree\",\"vegetable\",\"grass\",\"lawn\",\"spring\"],char:\"🍃\",fitzpatrick_scale:false,category:\"animals_and_nature\"},fallen_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"leaves\"],char:\"🍂\",fitzpatrick_scale:false,category:\"animals_and_nature\"},maple_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"ca\",\"fall\"],char:\"🍁\",fitzpatrick_scale:false,category:\"animals_and_nature\"},ear_of_rice:{keywords:[\"nature\",\"plant\"],char:\"🌾\",fitzpatrick_scale:false,category:\"animals_and_nature\"},hibiscus:{keywords:[\"plant\",\"vegetable\",\"flowers\",\"beach\"],char:\"🌺\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sunflower:{keywords:[\"nature\",\"plant\",\"fall\"],char:\"🌻\",fitzpatrick_scale:false,category:\"animals_and_nature\"},rose:{keywords:[\"flowers\",\"valentines\",\"love\",\"spring\"],char:\"🌹\",fitzpatrick_scale:false,category:\"animals_and_nature\"},wilted_flower:{keywords:[\"plant\",\"nature\",\"flower\"],char:\"🥀\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tulip:{keywords:[\"flowers\",\"plant\",\"nature\",\"summer\",\"spring\"],char:\"🌷\",fitzpatrick_scale:false,category:\"animals_and_nature\"},blossom:{keywords:[\"nature\",\"flowers\",\"yellow\"],char:\"🌼\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cherry_blossom:{keywords:[\"nature\",\"plant\",\"spring\",\"flower\"],char:\"🌸\",fitzpatrick_scale:false,category:\"animals_and_nature\"},bouquet:{keywords:[\"flowers\",\"nature\",\"spring\"],char:\"💐\",fitzpatrick_scale:false,category:\"animals_and_nature\"},mushroom:{keywords:[\"plant\",\"vegetable\"],char:\"🍄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},chestnut:{keywords:[\"food\",\"squirrel\"],char:\"🌰\",fitzpatrick_scale:false,category:\"animals_and_nature\"},jack_o_lantern:{keywords:[\"halloween\",\"light\",\"pumpkin\",\"creepy\",\"fall\"],char:\"🎃\",fitzpatrick_scale:false,category:\"animals_and_nature\"},shell:{keywords:[\"nature\",\"sea\",\"beach\"],char:\"🐚\",fitzpatrick_scale:false,category:\"animals_and_nature\"},spider_web:{keywords:[\"animal\",\"insect\",\"arachnid\",\"silk\"],char:\"🕸\",fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_americas:{keywords:[\"globe\",\"world\",\"USA\",\"international\"],char:\"🌎\",fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_africa:{keywords:[\"globe\",\"world\",\"international\"],char:\"🌍\",fitzpatrick_scale:false,category:\"animals_and_nature\"},earth_asia:{keywords:[\"globe\",\"world\",\"east\",\"international\"],char:\"🌏\",fitzpatrick_scale:false,category:\"animals_and_nature\"},full_moon:{keywords:[\"nature\",\"yellow\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌕\",fitzpatrick_scale:false,category:\"animals_and_nature\"},waning_gibbous_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\",\"waxing_gibbous_moon\"],char:\"🌖\",fitzpatrick_scale:false,category:\"animals_and_nature\"},last_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌗\",fitzpatrick_scale:false,category:\"animals_and_nature\"},waning_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌘\",fitzpatrick_scale:false,category:\"animals_and_nature\"},new_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌑\",fitzpatrick_scale:false,category:\"animals_and_nature\"},waxing_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌒\",fitzpatrick_scale:false,category:\"animals_and_nature\"},first_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌓\",fitzpatrick_scale:false,category:\"animals_and_nature\"},waxing_gibbous_moon:{keywords:[\"nature\",\"night\",\"sky\",\"gray\",\"twilight\",\"planet\",\"space\",\"evening\",\"sleep\"],char:\"🌔\",fitzpatrick_scale:false,category:\"animals_and_nature\"},new_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌚\",fitzpatrick_scale:false,category:\"animals_and_nature\"},full_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌝\",fitzpatrick_scale:false,category:\"animals_and_nature\"},first_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌛\",fitzpatrick_scale:false,category:\"animals_and_nature\"},last_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"🌜\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_with_face:{keywords:[\"nature\",\"morning\",\"sky\"],char:\"🌞\",fitzpatrick_scale:false,category:\"animals_and_nature\"},crescent_moon:{keywords:[\"night\",\"sleep\",\"sky\",\"evening\",\"magic\"],char:\"🌙\",fitzpatrick_scale:false,category:\"animals_and_nature\"},star:{keywords:[\"night\",\"yellow\"],char:\"⭐\",fitzpatrick_scale:false,category:\"animals_and_nature\"},star2:{keywords:[\"night\",\"sparkle\",\"awesome\",\"good\",\"magic\"],char:\"🌟\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dizzy:{keywords:[\"star\",\"sparkle\",\"shoot\",\"magic\"],char:\"💫\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sparkles:{keywords:[\"stars\",\"shine\",\"shiny\",\"cool\",\"awesome\",\"good\",\"magic\"],char:\"✨\",fitzpatrick_scale:false,category:\"animals_and_nature\"},comet:{keywords:[\"space\"],char:\"☄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sunny:{keywords:[\"weather\",\"nature\",\"brightness\",\"summer\",\"beach\",\"spring\"],char:\"☀️\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_small_cloud:{keywords:[\"weather\"],char:\"🌤\",fitzpatrick_scale:false,category:\"animals_and_nature\"},partly_sunny:{keywords:[\"weather\",\"nature\",\"cloudy\",\"morning\",\"fall\",\"spring\"],char:\"⛅\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_large_cloud:{keywords:[\"weather\"],char:\"🌥\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sun_behind_rain_cloud:{keywords:[\"weather\"],char:\"🌦\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud:{keywords:[\"weather\",\"sky\"],char:\"☁️\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_rain:{keywords:[\"weather\"],char:\"🌧\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_lightning_and_rain:{keywords:[\"weather\",\"lightning\"],char:\"⛈\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_lightning:{keywords:[\"weather\",\"thunder\"],char:\"🌩\",fitzpatrick_scale:false,category:\"animals_and_nature\"},zap:{keywords:[\"thunder\",\"weather\",\"lightning bolt\",\"fast\"],char:\"⚡\",fitzpatrick_scale:false,category:\"animals_and_nature\"},fire:{keywords:[\"hot\",\"cook\",\"flame\"],char:\"🔥\",fitzpatrick_scale:false,category:\"animals_and_nature\"},boom:{keywords:[\"bomb\",\"explode\",\"explosion\",\"collision\",\"blown\"],char:\"💥\",fitzpatrick_scale:false,category:\"animals_and_nature\"},snowflake:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\"],char:\"❄️\",fitzpatrick_scale:false,category:\"animals_and_nature\"},cloud_with_snow:{keywords:[\"weather\"],char:\"🌨\",fitzpatrick_scale:false,category:\"animals_and_nature\"},snowman:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\",\"without_snow\"],char:\"⛄\",fitzpatrick_scale:false,category:\"animals_and_nature\"},snowman_with_snow:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\"],char:\"☃\",fitzpatrick_scale:false,category:\"animals_and_nature\"},wind_face:{keywords:[\"gust\",\"air\"],char:\"🌬\",fitzpatrick_scale:false,category:\"animals_and_nature\"},dash:{keywords:[\"wind\",\"air\",\"fast\",\"shoo\",\"fart\",\"smoke\",\"puff\"],char:\"💨\",fitzpatrick_scale:false,category:\"animals_and_nature\"},tornado:{keywords:[\"weather\",\"cyclone\",\"twister\"],char:\"🌪\",fitzpatrick_scale:false,category:\"animals_and_nature\"},fog:{keywords:[\"weather\"],char:\"🌫\",fitzpatrick_scale:false,category:\"animals_and_nature\"},open_umbrella:{keywords:[\"weather\",\"spring\"],char:\"☂\",fitzpatrick_scale:false,category:\"animals_and_nature\"},umbrella:{keywords:[\"rainy\",\"weather\",\"spring\"],char:\"☔\",fitzpatrick_scale:false,category:\"animals_and_nature\"},droplet:{keywords:[\"water\",\"drip\",\"faucet\",\"spring\"],char:\"💧\",fitzpatrick_scale:false,category:\"animals_and_nature\"},sweat_drops:{keywords:[\"water\",\"drip\",\"oops\"],char:\"💦\",fitzpatrick_scale:false,category:\"animals_and_nature\"},ocean:{keywords:[\"sea\",\"water\",\"wave\",\"nature\",\"tsunami\",\"disaster\"],char:\"🌊\",fitzpatrick_scale:false,category:\"animals_and_nature\"},green_apple:{keywords:[\"fruit\",\"nature\"],char:\"🍏\",fitzpatrick_scale:false,category:\"food_and_drink\"},apple:{keywords:[\"fruit\",\"mac\",\"school\"],char:\"🍎\",fitzpatrick_scale:false,category:\"food_and_drink\"},pear:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"🍐\",fitzpatrick_scale:false,category:\"food_and_drink\"},tangerine:{keywords:[\"food\",\"fruit\",\"nature\",\"orange\"],char:\"🍊\",fitzpatrick_scale:false,category:\"food_and_drink\"},lemon:{keywords:[\"fruit\",\"nature\"],char:\"🍋\",fitzpatrick_scale:false,category:\"food_and_drink\"},banana:{keywords:[\"fruit\",\"food\",\"monkey\"],char:\"🍌\",fitzpatrick_scale:false,category:\"food_and_drink\"},watermelon:{keywords:[\"fruit\",\"food\",\"picnic\",\"summer\"],char:\"🍉\",fitzpatrick_scale:false,category:\"food_and_drink\"},grapes:{keywords:[\"fruit\",\"food\",\"wine\"],char:\"🍇\",fitzpatrick_scale:false,category:\"food_and_drink\"},strawberry:{keywords:[\"fruit\",\"food\",\"nature\"],char:\"🍓\",fitzpatrick_scale:false,category:\"food_and_drink\"},melon:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"🍈\",fitzpatrick_scale:false,category:\"food_and_drink\"},cherries:{keywords:[\"food\",\"fruit\"],char:\"🍒\",fitzpatrick_scale:false,category:\"food_and_drink\"},peach:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"🍑\",fitzpatrick_scale:false,category:\"food_and_drink\"},pineapple:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"🍍\",fitzpatrick_scale:false,category:\"food_and_drink\"},coconut:{keywords:[\"fruit\",\"nature\",\"food\",\"palm\"],char:\"🥥\",fitzpatrick_scale:false,category:\"food_and_drink\"},kiwi_fruit:{keywords:[\"fruit\",\"food\"],char:\"🥝\",fitzpatrick_scale:false,category:\"food_and_drink\"},mango:{keywords:[\"fruit\",\"food\",\"tropical\"],char:\"🥭\",fitzpatrick_scale:false,category:\"food_and_drink\"},avocado:{keywords:[\"fruit\",\"food\"],char:\"🥑\",fitzpatrick_scale:false,category:\"food_and_drink\"},broccoli:{keywords:[\"fruit\",\"food\",\"vegetable\"],char:\"🥦\",fitzpatrick_scale:false,category:\"food_and_drink\"},tomato:{keywords:[\"fruit\",\"vegetable\",\"nature\",\"food\"],char:\"🍅\",fitzpatrick_scale:false,category:\"food_and_drink\"},eggplant:{keywords:[\"vegetable\",\"nature\",\"food\",\"aubergine\"],char:\"🍆\",fitzpatrick_scale:false,category:\"food_and_drink\"},cucumber:{keywords:[\"fruit\",\"food\",\"pickle\"],char:\"🥒\",fitzpatrick_scale:false,category:\"food_and_drink\"},carrot:{keywords:[\"vegetable\",\"food\",\"orange\"],char:\"🥕\",fitzpatrick_scale:false,category:\"food_and_drink\"},hot_pepper:{keywords:[\"food\",\"spicy\",\"chilli\",\"chili\"],char:\"🌶\",fitzpatrick_scale:false,category:\"food_and_drink\"},potato:{keywords:[\"food\",\"tuber\",\"vegatable\",\"starch\"],char:\"🥔\",fitzpatrick_scale:false,category:\"food_and_drink\"},corn:{keywords:[\"food\",\"vegetable\",\"plant\"],char:\"🌽\",fitzpatrick_scale:false,category:\"food_and_drink\"},leafy_greens:{keywords:[\"food\",\"vegetable\",\"plant\",\"bok choy\",\"cabbage\",\"kale\",\"lettuce\"],char:\"🥬\",fitzpatrick_scale:false,category:\"food_and_drink\"},sweet_potato:{keywords:[\"food\",\"nature\"],char:\"🍠\",fitzpatrick_scale:false,category:\"food_and_drink\"},peanuts:{keywords:[\"food\",\"nut\"],char:\"🥜\",fitzpatrick_scale:false,category:\"food_and_drink\"},honey_pot:{keywords:[\"bees\",\"sweet\",\"kitchen\"],char:\"🍯\",fitzpatrick_scale:false,category:\"food_and_drink\"},croissant:{keywords:[\"food\",\"bread\",\"french\"],char:\"🥐\",fitzpatrick_scale:false,category:\"food_and_drink\"},bread:{keywords:[\"food\",\"wheat\",\"breakfast\",\"toast\"],char:\"🍞\",fitzpatrick_scale:false,category:\"food_and_drink\"},baguette_bread:{keywords:[\"food\",\"bread\",\"french\"],char:\"🥖\",fitzpatrick_scale:false,category:\"food_and_drink\"},bagel:{keywords:[\"food\",\"bread\",\"bakery\",\"schmear\"],char:\"🥯\",fitzpatrick_scale:false,category:\"food_and_drink\"},pretzel:{keywords:[\"food\",\"bread\",\"twisted\"],char:\"🥨\",fitzpatrick_scale:false,category:\"food_and_drink\"},cheese:{keywords:[\"food\",\"chadder\"],char:\"🧀\",fitzpatrick_scale:false,category:\"food_and_drink\"},egg:{keywords:[\"food\",\"chicken\",\"breakfast\"],char:\"🥚\",fitzpatrick_scale:false,category:\"food_and_drink\"},bacon:{keywords:[\"food\",\"breakfast\",\"pork\",\"pig\",\"meat\"],char:\"🥓\",fitzpatrick_scale:false,category:\"food_and_drink\"},steak:{keywords:[\"food\",\"cow\",\"meat\",\"cut\",\"chop\",\"lambchop\",\"porkchop\"],char:\"🥩\",fitzpatrick_scale:false,category:\"food_and_drink\"},pancakes:{keywords:[\"food\",\"breakfast\",\"flapjacks\",\"hotcakes\"],char:\"🥞\",fitzpatrick_scale:false,category:\"food_and_drink\"},poultry_leg:{keywords:[\"food\",\"meat\",\"drumstick\",\"bird\",\"chicken\",\"turkey\"],char:\"🍗\",fitzpatrick_scale:false,category:\"food_and_drink\"},meat_on_bone:{keywords:[\"good\",\"food\",\"drumstick\"],char:\"🍖\",fitzpatrick_scale:false,category:\"food_and_drink\"},bone:{keywords:[\"skeleton\"],char:\"🦴\",fitzpatrick_scale:false,category:\"food_and_drink\"},fried_shrimp:{keywords:[\"food\",\"animal\",\"appetizer\",\"summer\"],char:\"🍤\",fitzpatrick_scale:false,category:\"food_and_drink\"},fried_egg:{keywords:[\"food\",\"breakfast\",\"kitchen\",\"egg\"],char:\"🍳\",fitzpatrick_scale:false,category:\"food_and_drink\"},hamburger:{keywords:[\"meat\",\"fast food\",\"beef\",\"cheeseburger\",\"mcdonalds\",\"burger king\"],char:\"🍔\",fitzpatrick_scale:false,category:\"food_and_drink\"},fries:{keywords:[\"chips\",\"snack\",\"fast food\"],char:\"🍟\",fitzpatrick_scale:false,category:\"food_and_drink\"},stuffed_flatbread:{keywords:[\"food\",\"flatbread\",\"stuffed\",\"gyro\"],char:\"🥙\",fitzpatrick_scale:false,category:\"food_and_drink\"},hotdog:{keywords:[\"food\",\"frankfurter\"],char:\"🌭\",fitzpatrick_scale:false,category:\"food_and_drink\"},pizza:{keywords:[\"food\",\"party\"],char:\"🍕\",fitzpatrick_scale:false,category:\"food_and_drink\"},sandwich:{keywords:[\"food\",\"lunch\",\"bread\"],char:\"🥪\",fitzpatrick_scale:false,category:\"food_and_drink\"},canned_food:{keywords:[\"food\",\"soup\"],char:\"🥫\",fitzpatrick_scale:false,category:\"food_and_drink\"},spaghetti:{keywords:[\"food\",\"italian\",\"noodle\"],char:\"🍝\",fitzpatrick_scale:false,category:\"food_and_drink\"},taco:{keywords:[\"food\",\"mexican\"],char:\"🌮\",fitzpatrick_scale:false,category:\"food_and_drink\"},burrito:{keywords:[\"food\",\"mexican\"],char:\"🌯\",fitzpatrick_scale:false,category:\"food_and_drink\"},green_salad:{keywords:[\"food\",\"healthy\",\"lettuce\"],char:\"🥗\",fitzpatrick_scale:false,category:\"food_and_drink\"},shallow_pan_of_food:{keywords:[\"food\",\"cooking\",\"casserole\",\"paella\"],char:\"🥘\",fitzpatrick_scale:false,category:\"food_and_drink\"},ramen:{keywords:[\"food\",\"japanese\",\"noodle\",\"chopsticks\"],char:\"🍜\",fitzpatrick_scale:false,category:\"food_and_drink\"},stew:{keywords:[\"food\",\"meat\",\"soup\"],char:\"🍲\",fitzpatrick_scale:false,category:\"food_and_drink\"},fish_cake:{keywords:[\"food\",\"japan\",\"sea\",\"beach\",\"narutomaki\",\"pink\",\"swirl\",\"kamaboko\",\"surimi\",\"ramen\"],char:\"🍥\",fitzpatrick_scale:false,category:\"food_and_drink\"},fortune_cookie:{keywords:[\"food\",\"prophecy\"],char:\"🥠\",fitzpatrick_scale:false,category:\"food_and_drink\"},sushi:{keywords:[\"food\",\"fish\",\"japanese\",\"rice\"],char:\"🍣\",fitzpatrick_scale:false,category:\"food_and_drink\"},bento:{keywords:[\"food\",\"japanese\",\"box\"],char:\"🍱\",fitzpatrick_scale:false,category:\"food_and_drink\"},curry:{keywords:[\"food\",\"spicy\",\"hot\",\"indian\"],char:\"🍛\",fitzpatrick_scale:false,category:\"food_and_drink\"},rice_ball:{keywords:[\"food\",\"japanese\"],char:\"🍙\",fitzpatrick_scale:false,category:\"food_and_drink\"},rice:{keywords:[\"food\",\"china\",\"asian\"],char:\"🍚\",fitzpatrick_scale:false,category:\"food_and_drink\"},rice_cracker:{keywords:[\"food\",\"japanese\"],char:\"🍘\",fitzpatrick_scale:false,category:\"food_and_drink\"},oden:{keywords:[\"food\",\"japanese\"],char:\"🍢\",fitzpatrick_scale:false,category:\"food_and_drink\"},dango:{keywords:[\"food\",\"dessert\",\"sweet\",\"japanese\",\"barbecue\",\"meat\"],char:\"🍡\",fitzpatrick_scale:false,category:\"food_and_drink\"},shaved_ice:{keywords:[\"hot\",\"dessert\",\"summer\"],char:\"🍧\",fitzpatrick_scale:false,category:\"food_and_drink\"},ice_cream:{keywords:[\"food\",\"hot\",\"dessert\"],char:\"🍨\",fitzpatrick_scale:false,category:\"food_and_drink\"},icecream:{keywords:[\"food\",\"hot\",\"dessert\",\"summer\"],char:\"🍦\",fitzpatrick_scale:false,category:\"food_and_drink\"},pie:{keywords:[\"food\",\"dessert\",\"pastry\"],char:\"🥧\",fitzpatrick_scale:false,category:\"food_and_drink\"},cake:{keywords:[\"food\",\"dessert\"],char:\"🍰\",fitzpatrick_scale:false,category:\"food_and_drink\"},cupcake:{keywords:[\"food\",\"dessert\",\"bakery\",\"sweet\"],char:\"🧁\",fitzpatrick_scale:false,category:\"food_and_drink\"},moon_cake:{keywords:[\"food\",\"autumn\"],char:\"🥮\",fitzpatrick_scale:false,category:\"food_and_drink\"},birthday:{keywords:[\"food\",\"dessert\",\"cake\"],char:\"🎂\",fitzpatrick_scale:false,category:\"food_and_drink\"},custard:{keywords:[\"dessert\",\"food\"],char:\"🍮\",fitzpatrick_scale:false,category:\"food_and_drink\"},candy:{keywords:[\"snack\",\"dessert\",\"sweet\",\"lolly\"],char:\"🍬\",fitzpatrick_scale:false,category:\"food_and_drink\"},lollipop:{keywords:[\"food\",\"snack\",\"candy\",\"sweet\"],char:\"🍭\",fitzpatrick_scale:false,category:\"food_and_drink\"},chocolate_bar:{keywords:[\"food\",\"snack\",\"dessert\",\"sweet\"],char:\"🍫\",fitzpatrick_scale:false,category:\"food_and_drink\"},popcorn:{keywords:[\"food\",\"movie theater\",\"films\",\"snack\"],char:\"🍿\",fitzpatrick_scale:false,category:\"food_and_drink\"},dumpling:{keywords:[\"food\",\"empanada\",\"pierogi\",\"potsticker\"],char:\"🥟\",fitzpatrick_scale:false,category:\"food_and_drink\"},doughnut:{keywords:[\"food\",\"dessert\",\"snack\",\"sweet\",\"donut\"],char:\"🍩\",fitzpatrick_scale:false,category:\"food_and_drink\"},cookie:{keywords:[\"food\",\"snack\",\"oreo\",\"chocolate\",\"sweet\",\"dessert\"],char:\"🍪\",fitzpatrick_scale:false,category:\"food_and_drink\"},milk_glass:{keywords:[\"beverage\",\"drink\",\"cow\"],char:\"🥛\",fitzpatrick_scale:false,category:\"food_and_drink\"},beer:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:\"🍺\",fitzpatrick_scale:false,category:\"food_and_drink\"},beers:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:\"🍻\",fitzpatrick_scale:false,category:\"food_and_drink\"},clinking_glasses:{keywords:[\"beverage\",\"drink\",\"party\",\"alcohol\",\"celebrate\",\"cheers\",\"wine\",\"champagne\",\"toast\"],char:\"🥂\",fitzpatrick_scale:false,category:\"food_and_drink\"},wine_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"booze\"],char:\"🍷\",fitzpatrick_scale:false,category:\"food_and_drink\"},tumbler_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"liquor\",\"booze\",\"bourbon\",\"scotch\",\"whisky\",\"glass\",\"shot\"],char:\"🥃\",fitzpatrick_scale:false,category:\"food_and_drink\"},cocktail:{keywords:[\"drink\",\"drunk\",\"alcohol\",\"beverage\",\"booze\",\"mojito\"],char:\"🍸\",fitzpatrick_scale:false,category:\"food_and_drink\"},tropical_drink:{keywords:[\"beverage\",\"cocktail\",\"summer\",\"beach\",\"alcohol\",\"booze\",\"mojito\"],char:\"🍹\",fitzpatrick_scale:false,category:\"food_and_drink\"},champagne:{keywords:[\"drink\",\"wine\",\"bottle\",\"celebration\"],char:\"🍾\",fitzpatrick_scale:false,category:\"food_and_drink\"},sake:{keywords:[\"wine\",\"drink\",\"drunk\",\"beverage\",\"japanese\",\"alcohol\",\"booze\"],char:\"🍶\",fitzpatrick_scale:false,category:\"food_and_drink\"},tea:{keywords:[\"drink\",\"bowl\",\"breakfast\",\"green\",\"british\"],char:\"🍵\",fitzpatrick_scale:false,category:\"food_and_drink\"},cup_with_straw:{keywords:[\"drink\",\"soda\"],char:\"🥤\",fitzpatrick_scale:false,category:\"food_and_drink\"},coffee:{keywords:[\"beverage\",\"caffeine\",\"latte\",\"espresso\"],char:\"☕\",fitzpatrick_scale:false,category:\"food_and_drink\"},baby_bottle:{keywords:[\"food\",\"container\",\"milk\"],char:\"🍼\",fitzpatrick_scale:false,category:\"food_and_drink\"},salt:{keywords:[\"condiment\",\"shaker\"],char:\"🧂\",fitzpatrick_scale:false,category:\"food_and_drink\"},spoon:{keywords:[\"cutlery\",\"kitchen\",\"tableware\"],char:\"🥄\",fitzpatrick_scale:false,category:\"food_and_drink\"},fork_and_knife:{keywords:[\"cutlery\",\"kitchen\"],char:\"🍴\",fitzpatrick_scale:false,category:\"food_and_drink\"},plate_with_cutlery:{keywords:[\"food\",\"eat\",\"meal\",\"lunch\",\"dinner\",\"restaurant\"],char:\"🍽\",fitzpatrick_scale:false,category:\"food_and_drink\"},bowl_with_spoon:{keywords:[\"food\",\"breakfast\",\"cereal\",\"oatmeal\",\"porridge\"],char:\"🥣\",fitzpatrick_scale:false,category:\"food_and_drink\"},takeout_box:{keywords:[\"food\",\"leftovers\"],char:\"🥡\",fitzpatrick_scale:false,category:\"food_and_drink\"},chopsticks:{keywords:[\"food\"],char:\"🥢\",fitzpatrick_scale:false,category:\"food_and_drink\"},soccer:{keywords:[\"sports\",\"football\"],char:\"⚽\",fitzpatrick_scale:false,category:\"activity\"},basketball:{keywords:[\"sports\",\"balls\",\"NBA\"],char:\"🏀\",fitzpatrick_scale:false,category:\"activity\"},football:{keywords:[\"sports\",\"balls\",\"NFL\"],char:\"🏈\",fitzpatrick_scale:false,category:\"activity\"},baseball:{keywords:[\"sports\",\"balls\"],char:\"⚾\",fitzpatrick_scale:false,category:\"activity\"},softball:{keywords:[\"sports\",\"balls\"],char:\"🥎\",fitzpatrick_scale:false,category:\"activity\"},tennis:{keywords:[\"sports\",\"balls\",\"green\"],char:\"🎾\",fitzpatrick_scale:false,category:\"activity\"},volleyball:{keywords:[\"sports\",\"balls\"],char:\"🏐\",fitzpatrick_scale:false,category:\"activity\"},rugby_football:{keywords:[\"sports\",\"team\"],char:\"🏉\",fitzpatrick_scale:false,category:\"activity\"},flying_disc:{keywords:[\"sports\",\"frisbee\",\"ultimate\"],char:\"🥏\",fitzpatrick_scale:false,category:\"activity\"},\"8ball\":{keywords:[\"pool\",\"hobby\",\"game\",\"luck\",\"magic\"],char:\"🎱\",fitzpatrick_scale:false,category:\"activity\"},golf:{keywords:[\"sports\",\"business\",\"flag\",\"hole\",\"summer\"],char:\"⛳\",fitzpatrick_scale:false,category:\"activity\"},golfing_woman:{keywords:[\"sports\",\"business\",\"woman\",\"female\"],char:\"🏌️‍♀️\",fitzpatrick_scale:false,category:\"activity\"},golfing_man:{keywords:[\"sports\",\"business\"],char:\"🏌\",fitzpatrick_scale:true,category:\"activity\"},ping_pong:{keywords:[\"sports\",\"pingpong\"],char:\"🏓\",fitzpatrick_scale:false,category:\"activity\"},badminton:{keywords:[\"sports\"],char:\"🏸\",fitzpatrick_scale:false,category:\"activity\"},goal_net:{keywords:[\"sports\"],char:\"🥅\",fitzpatrick_scale:false,category:\"activity\"},ice_hockey:{keywords:[\"sports\"],char:\"🏒\",fitzpatrick_scale:false,category:\"activity\"},field_hockey:{keywords:[\"sports\"],char:\"🏑\",fitzpatrick_scale:false,category:\"activity\"},lacrosse:{keywords:[\"sports\",\"ball\",\"stick\"],char:\"🥍\",fitzpatrick_scale:false,category:\"activity\"},cricket:{keywords:[\"sports\"],char:\"🏏\",fitzpatrick_scale:false,category:\"activity\"},ski:{keywords:[\"sports\",\"winter\",\"cold\",\"snow\"],char:\"🎿\",fitzpatrick_scale:false,category:\"activity\"},skier:{keywords:[\"sports\",\"winter\",\"snow\"],char:\"⛷\",fitzpatrick_scale:false,category:\"activity\"},snowboarder:{keywords:[\"sports\",\"winter\"],char:\"🏂\",fitzpatrick_scale:true,category:\"activity\"},person_fencing:{keywords:[\"sports\",\"fencing\",\"sword\"],char:\"🤺\",fitzpatrick_scale:false,category:\"activity\"},women_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:\"🤼‍♀️\",fitzpatrick_scale:false,category:\"activity\"},men_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:\"🤼‍♂️\",fitzpatrick_scale:false,category:\"activity\"},woman_cartwheeling:{keywords:[\"gymnastics\"],char:\"🤸‍♀️\",fitzpatrick_scale:true,category:\"activity\"},man_cartwheeling:{keywords:[\"gymnastics\"],char:\"🤸‍♂️\",fitzpatrick_scale:true,category:\"activity\"},woman_playing_handball:{keywords:[\"sports\"],char:\"🤾‍♀️\",fitzpatrick_scale:true,category:\"activity\"},man_playing_handball:{keywords:[\"sports\"],char:\"🤾‍♂️\",fitzpatrick_scale:true,category:\"activity\"},ice_skate:{keywords:[\"sports\"],char:\"⛸\",fitzpatrick_scale:false,category:\"activity\"},curling_stone:{keywords:[\"sports\"],char:\"🥌\",fitzpatrick_scale:false,category:\"activity\"},skateboard:{keywords:[\"board\"],char:\"🛹\",fitzpatrick_scale:false,category:\"activity\"},sled:{keywords:[\"sleigh\",\"luge\",\"toboggan\"],char:\"🛷\",fitzpatrick_scale:false,category:\"activity\"},bow_and_arrow:{keywords:[\"sports\"],char:\"🏹\",fitzpatrick_scale:false,category:\"activity\"},fishing_pole_and_fish:{keywords:[\"food\",\"hobby\",\"summer\"],char:\"🎣\",fitzpatrick_scale:false,category:\"activity\"},boxing_glove:{keywords:[\"sports\",\"fighting\"],char:\"🥊\",fitzpatrick_scale:false,category:\"activity\"},martial_arts_uniform:{keywords:[\"judo\",\"karate\",\"taekwondo\"],char:\"🥋\",fitzpatrick_scale:false,category:\"activity\"},rowing_woman:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\",\"woman\",\"female\"],char:\"🚣‍♀️\",fitzpatrick_scale:true,category:\"activity\"},rowing_man:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\"],char:\"🚣\",fitzpatrick_scale:true,category:\"activity\"},climbing_woman:{keywords:[\"sports\",\"hobby\",\"woman\",\"female\",\"rock\"],char:\"🧗‍♀️\",fitzpatrick_scale:true,category:\"activity\"},climbing_man:{keywords:[\"sports\",\"hobby\",\"man\",\"male\",\"rock\"],char:\"🧗‍♂️\",fitzpatrick_scale:true,category:\"activity\"},swimming_woman:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\",\"woman\",\"female\"],char:\"🏊‍♀️\",fitzpatrick_scale:true,category:\"activity\"},swimming_man:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\"],char:\"🏊\",fitzpatrick_scale:true,category:\"activity\"},woman_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:\"🤽‍♀️\",fitzpatrick_scale:true,category:\"activity\"},man_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:\"🤽‍♂️\",fitzpatrick_scale:true,category:\"activity\"},woman_in_lotus_position:{keywords:[\"woman\",\"female\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:\"🧘‍♀️\",fitzpatrick_scale:true,category:\"activity\"},man_in_lotus_position:{keywords:[\"man\",\"male\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:\"🧘‍♂️\",fitzpatrick_scale:true,category:\"activity\"},surfing_woman:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\",\"woman\",\"female\"],char:\"🏄‍♀️\",fitzpatrick_scale:true,category:\"activity\"},surfing_man:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\"],char:\"🏄\",fitzpatrick_scale:true,category:\"activity\"},bath:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:\"🛀\",fitzpatrick_scale:true,category:\"activity\"},basketball_woman:{keywords:[\"sports\",\"human\",\"woman\",\"female\"],char:\"⛹️‍♀️\",fitzpatrick_scale:true,category:\"activity\"},basketball_man:{keywords:[\"sports\",\"human\"],char:\"⛹\",fitzpatrick_scale:true,category:\"activity\"},weight_lifting_woman:{keywords:[\"sports\",\"training\",\"exercise\",\"woman\",\"female\"],char:\"🏋️‍♀️\",fitzpatrick_scale:true,category:\"activity\"},weight_lifting_man:{keywords:[\"sports\",\"training\",\"exercise\"],char:\"🏋\",fitzpatrick_scale:true,category:\"activity\"},biking_woman:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\",\"woman\",\"female\"],char:\"🚴‍♀️\",fitzpatrick_scale:true,category:\"activity\"},biking_man:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\"],char:\"🚴\",fitzpatrick_scale:true,category:\"activity\"},mountain_biking_woman:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\",\"woman\",\"female\"],char:\"🚵‍♀️\",fitzpatrick_scale:true,category:\"activity\"},mountain_biking_man:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\"],char:\"🚵\",fitzpatrick_scale:true,category:\"activity\"},horse_racing:{keywords:[\"animal\",\"betting\",\"competition\",\"gambling\",\"luck\"],char:\"🏇\",fitzpatrick_scale:true,category:\"activity\"},business_suit_levitating:{keywords:[\"suit\",\"business\",\"levitate\",\"hover\",\"jump\"],char:\"🕴\",fitzpatrick_scale:true,category:\"activity\"},trophy:{keywords:[\"win\",\"award\",\"contest\",\"place\",\"ftw\",\"ceremony\"],char:\"🏆\",fitzpatrick_scale:false,category:\"activity\"},running_shirt_with_sash:{keywords:[\"play\",\"pageant\"],char:\"🎽\",fitzpatrick_scale:false,category:\"activity\"},medal_sports:{keywords:[\"award\",\"winning\"],char:\"🏅\",fitzpatrick_scale:false,category:\"activity\"},medal_military:{keywords:[\"award\",\"winning\",\"army\"],char:\"🎖\",fitzpatrick_scale:false,category:\"activity\"},\"1st_place_medal\":{keywords:[\"award\",\"winning\",\"first\"],char:\"🥇\",fitzpatrick_scale:false,category:\"activity\"},\"2nd_place_medal\":{keywords:[\"award\",\"second\"],char:\"🥈\",fitzpatrick_scale:false,category:\"activity\"},\"3rd_place_medal\":{keywords:[\"award\",\"third\"],char:\"🥉\",fitzpatrick_scale:false,category:\"activity\"},reminder_ribbon:{keywords:[\"sports\",\"cause\",\"support\",\"awareness\"],char:\"🎗\",fitzpatrick_scale:false,category:\"activity\"},rosette:{keywords:[\"flower\",\"decoration\",\"military\"],char:\"🏵\",fitzpatrick_scale:false,category:\"activity\"},ticket:{keywords:[\"event\",\"concert\",\"pass\"],char:\"🎫\",fitzpatrick_scale:false,category:\"activity\"},tickets:{keywords:[\"sports\",\"concert\",\"entrance\"],char:\"🎟\",fitzpatrick_scale:false,category:\"activity\"},performing_arts:{keywords:[\"acting\",\"theater\",\"drama\"],char:\"🎭\",fitzpatrick_scale:false,category:\"activity\"},art:{keywords:[\"design\",\"paint\",\"draw\",\"colors\"],char:\"🎨\",fitzpatrick_scale:false,category:\"activity\"},circus_tent:{keywords:[\"festival\",\"carnival\",\"party\"],char:\"🎪\",fitzpatrick_scale:false,category:\"activity\"},woman_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:\"🤹‍♀️\",fitzpatrick_scale:true,category:\"activity\"},man_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:\"🤹‍♂️\",fitzpatrick_scale:true,category:\"activity\"},microphone:{keywords:[\"sound\",\"music\",\"PA\",\"sing\",\"talkshow\"],char:\"🎤\",fitzpatrick_scale:false,category:\"activity\"},headphones:{keywords:[\"music\",\"score\",\"gadgets\"],char:\"🎧\",fitzpatrick_scale:false,category:\"activity\"},musical_score:{keywords:[\"treble\",\"clef\",\"compose\"],char:\"🎼\",fitzpatrick_scale:false,category:\"activity\"},musical_keyboard:{keywords:[\"piano\",\"instrument\",\"compose\"],char:\"🎹\",fitzpatrick_scale:false,category:\"activity\"},drum:{keywords:[\"music\",\"instrument\",\"drumsticks\",\"snare\"],char:\"🥁\",fitzpatrick_scale:false,category:\"activity\"},saxophone:{keywords:[\"music\",\"instrument\",\"jazz\",\"blues\"],char:\"🎷\",fitzpatrick_scale:false,category:\"activity\"},trumpet:{keywords:[\"music\",\"brass\"],char:\"🎺\",fitzpatrick_scale:false,category:\"activity\"},guitar:{keywords:[\"music\",\"instrument\"],char:\"🎸\",fitzpatrick_scale:false,category:\"activity\"},violin:{keywords:[\"music\",\"instrument\",\"orchestra\",\"symphony\"],char:\"🎻\",fitzpatrick_scale:false,category:\"activity\"},clapper:{keywords:[\"movie\",\"film\",\"record\"],char:\"🎬\",fitzpatrick_scale:false,category:\"activity\"},video_game:{keywords:[\"play\",\"console\",\"PS4\",\"controller\"],char:\"🎮\",fitzpatrick_scale:false,category:\"activity\"},space_invader:{keywords:[\"game\",\"arcade\",\"play\"],char:\"👾\",fitzpatrick_scale:false,category:\"activity\"},dart:{keywords:[\"game\",\"play\",\"bar\",\"target\",\"bullseye\"],char:\"🎯\",fitzpatrick_scale:false,category:\"activity\"},game_die:{keywords:[\"dice\",\"random\",\"tabletop\",\"play\",\"luck\"],char:\"🎲\",fitzpatrick_scale:false,category:\"activity\"},chess_pawn:{keywords:[\"expendable\"],char:\"♟\",fitzpatrick_scale:false,category:\"activity\"},slot_machine:{keywords:[\"bet\",\"gamble\",\"vegas\",\"fruit machine\",\"luck\",\"casino\"],char:\"🎰\",fitzpatrick_scale:false,category:\"activity\"},jigsaw:{keywords:[\"interlocking\",\"puzzle\",\"piece\"],char:\"🧩\",fitzpatrick_scale:false,category:\"activity\"},bowling:{keywords:[\"sports\",\"fun\",\"play\"],char:\"🎳\",fitzpatrick_scale:false,category:\"activity\"},red_car:{keywords:[\"red\",\"transportation\",\"vehicle\"],char:\"🚗\",fitzpatrick_scale:false,category:\"travel_and_places\"},taxi:{keywords:[\"uber\",\"vehicle\",\"cars\",\"transportation\"],char:\"🚕\",fitzpatrick_scale:false,category:\"travel_and_places\"},blue_car:{keywords:[\"transportation\",\"vehicle\"],char:\"🚙\",fitzpatrick_scale:false,category:\"travel_and_places\"},bus:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:\"🚌\",fitzpatrick_scale:false,category:\"travel_and_places\"},trolleybus:{keywords:[\"bart\",\"transportation\",\"vehicle\"],char:\"🚎\",fitzpatrick_scale:false,category:\"travel_and_places\"},racing_car:{keywords:[\"sports\",\"race\",\"fast\",\"formula\",\"f1\"],char:\"🏎\",fitzpatrick_scale:false,category:\"travel_and_places\"},police_car:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"law\",\"legal\",\"enforcement\"],char:\"🚓\",fitzpatrick_scale:false,category:\"travel_and_places\"},ambulance:{keywords:[\"health\",\"911\",\"hospital\"],char:\"🚑\",fitzpatrick_scale:false,category:\"travel_and_places\"},fire_engine:{keywords:[\"transportation\",\"cars\",\"vehicle\"],char:\"🚒\",fitzpatrick_scale:false,category:\"travel_and_places\"},minibus:{keywords:[\"vehicle\",\"car\",\"transportation\"],char:\"🚐\",fitzpatrick_scale:false,category:\"travel_and_places\"},truck:{keywords:[\"cars\",\"transportation\"],char:\"🚚\",fitzpatrick_scale:false,category:\"travel_and_places\"},articulated_lorry:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"express\"],char:\"🚛\",fitzpatrick_scale:false,category:\"travel_and_places\"},tractor:{keywords:[\"vehicle\",\"car\",\"farming\",\"agriculture\"],char:\"🚜\",fitzpatrick_scale:false,category:\"travel_and_places\"},kick_scooter:{keywords:[\"vehicle\",\"kick\",\"razor\"],char:\"🛴\",fitzpatrick_scale:false,category:\"travel_and_places\"},motorcycle:{keywords:[\"race\",\"sports\",\"fast\"],char:\"🏍\",fitzpatrick_scale:false,category:\"travel_and_places\"},bike:{keywords:[\"sports\",\"bicycle\",\"exercise\",\"hipster\"],char:\"🚲\",fitzpatrick_scale:false,category:\"travel_and_places\"},motor_scooter:{keywords:[\"vehicle\",\"vespa\",\"sasha\"],char:\"🛵\",fitzpatrick_scale:false,category:\"travel_and_places\"},rotating_light:{keywords:[\"police\",\"ambulance\",\"911\",\"emergency\",\"alert\",\"error\",\"pinged\",\"law\",\"legal\"],char:\"🚨\",fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_police_car:{keywords:[\"vehicle\",\"law\",\"legal\",\"enforcement\",\"911\"],char:\"🚔\",fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_bus:{keywords:[\"vehicle\",\"transportation\"],char:\"🚍\",fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_automobile:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:\"🚘\",fitzpatrick_scale:false,category:\"travel_and_places\"},oncoming_taxi:{keywords:[\"vehicle\",\"cars\",\"uber\"],char:\"🚖\",fitzpatrick_scale:false,category:\"travel_and_places\"},aerial_tramway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:\"🚡\",fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_cableway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:\"🚠\",fitzpatrick_scale:false,category:\"travel_and_places\"},suspension_railway:{keywords:[\"vehicle\",\"transportation\"],char:\"🚟\",fitzpatrick_scale:false,category:\"travel_and_places\"},railway_car:{keywords:[\"transportation\",\"vehicle\"],char:\"🚃\",fitzpatrick_scale:false,category:\"travel_and_places\"},train:{keywords:[\"transportation\",\"vehicle\",\"carriage\",\"public\",\"travel\"],char:\"🚋\",fitzpatrick_scale:false,category:\"travel_and_places\"},monorail:{keywords:[\"transportation\",\"vehicle\"],char:\"🚝\",fitzpatrick_scale:false,category:\"travel_and_places\"},bullettrain_side:{keywords:[\"transportation\",\"vehicle\"],char:\"🚄\",fitzpatrick_scale:false,category:\"travel_and_places\"},bullettrain_front:{keywords:[\"transportation\",\"vehicle\",\"speed\",\"fast\",\"public\",\"travel\"],char:\"🚅\",fitzpatrick_scale:false,category:\"travel_and_places\"},light_rail:{keywords:[\"transportation\",\"vehicle\"],char:\"🚈\",fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_railway:{keywords:[\"transportation\",\"vehicle\"],char:\"🚞\",fitzpatrick_scale:false,category:\"travel_and_places\"},steam_locomotive:{keywords:[\"transportation\",\"vehicle\",\"train\"],char:\"🚂\",fitzpatrick_scale:false,category:\"travel_and_places\"},train2:{keywords:[\"transportation\",\"vehicle\"],char:\"🚆\",fitzpatrick_scale:false,category:\"travel_and_places\"},metro:{keywords:[\"transportation\",\"blue-square\",\"mrt\",\"underground\",\"tube\"],char:\"🚇\",fitzpatrick_scale:false,category:\"travel_and_places\"},tram:{keywords:[\"transportation\",\"vehicle\"],char:\"🚊\",fitzpatrick_scale:false,category:\"travel_and_places\"},station:{keywords:[\"transportation\",\"vehicle\",\"public\"],char:\"🚉\",fitzpatrick_scale:false,category:\"travel_and_places\"},flying_saucer:{keywords:[\"transportation\",\"vehicle\",\"ufo\"],char:\"🛸\",fitzpatrick_scale:false,category:\"travel_and_places\"},helicopter:{keywords:[\"transportation\",\"vehicle\",\"fly\"],char:\"🚁\",fitzpatrick_scale:false,category:\"travel_and_places\"},small_airplane:{keywords:[\"flight\",\"transportation\",\"fly\",\"vehicle\"],char:\"🛩\",fitzpatrick_scale:false,category:\"travel_and_places\"},airplane:{keywords:[\"vehicle\",\"transportation\",\"flight\",\"fly\"],char:\"✈️\",fitzpatrick_scale:false,category:\"travel_and_places\"},flight_departure:{keywords:[\"airport\",\"flight\",\"landing\"],char:\"🛫\",fitzpatrick_scale:false,category:\"travel_and_places\"},flight_arrival:{keywords:[\"airport\",\"flight\",\"boarding\"],char:\"🛬\",fitzpatrick_scale:false,category:\"travel_and_places\"},sailboat:{keywords:[\"ship\",\"summer\",\"transportation\",\"water\",\"sailing\"],char:\"⛵\",fitzpatrick_scale:false,category:\"travel_and_places\"},motor_boat:{keywords:[\"ship\"],char:\"🛥\",fitzpatrick_scale:false,category:\"travel_and_places\"},speedboat:{keywords:[\"ship\",\"transportation\",\"vehicle\",\"summer\"],char:\"🚤\",fitzpatrick_scale:false,category:\"travel_and_places\"},ferry:{keywords:[\"boat\",\"ship\",\"yacht\"],char:\"⛴\",fitzpatrick_scale:false,category:\"travel_and_places\"},passenger_ship:{keywords:[\"yacht\",\"cruise\",\"ferry\"],char:\"🛳\",fitzpatrick_scale:false,category:\"travel_and_places\"},rocket:{keywords:[\"launch\",\"ship\",\"staffmode\",\"NASA\",\"outer space\",\"outer_space\",\"fly\"],char:\"🚀\",fitzpatrick_scale:false,category:\"travel_and_places\"},artificial_satellite:{keywords:[\"communication\",\"gps\",\"orbit\",\"spaceflight\",\"NASA\",\"ISS\"],char:\"🛰\",fitzpatrick_scale:false,category:\"travel_and_places\"},seat:{keywords:[\"sit\",\"airplane\",\"transport\",\"bus\",\"flight\",\"fly\"],char:\"💺\",fitzpatrick_scale:false,category:\"travel_and_places\"},canoe:{keywords:[\"boat\",\"paddle\",\"water\",\"ship\"],char:\"🛶\",fitzpatrick_scale:false,category:\"travel_and_places\"},anchor:{keywords:[\"ship\",\"ferry\",\"sea\",\"boat\"],char:\"⚓\",fitzpatrick_scale:false,category:\"travel_and_places\"},construction:{keywords:[\"wip\",\"progress\",\"caution\",\"warning\"],char:\"🚧\",fitzpatrick_scale:false,category:\"travel_and_places\"},fuelpump:{keywords:[\"gas station\",\"petroleum\"],char:\"⛽\",fitzpatrick_scale:false,category:\"travel_and_places\"},busstop:{keywords:[\"transportation\",\"wait\"],char:\"🚏\",fitzpatrick_scale:false,category:\"travel_and_places\"},vertical_traffic_light:{keywords:[\"transportation\",\"driving\"],char:\"🚦\",fitzpatrick_scale:false,category:\"travel_and_places\"},traffic_light:{keywords:[\"transportation\",\"signal\"],char:\"🚥\",fitzpatrick_scale:false,category:\"travel_and_places\"},checkered_flag:{keywords:[\"contest\",\"finishline\",\"race\",\"gokart\"],char:\"🏁\",fitzpatrick_scale:false,category:\"travel_and_places\"},ship:{keywords:[\"transportation\",\"titanic\",\"deploy\"],char:\"🚢\",fitzpatrick_scale:false,category:\"travel_and_places\"},ferris_wheel:{keywords:[\"photo\",\"carnival\",\"londoneye\"],char:\"🎡\",fitzpatrick_scale:false,category:\"travel_and_places\"},roller_coaster:{keywords:[\"carnival\",\"playground\",\"photo\",\"fun\"],char:\"🎢\",fitzpatrick_scale:false,category:\"travel_and_places\"},carousel_horse:{keywords:[\"photo\",\"carnival\"],char:\"🎠\",fitzpatrick_scale:false,category:\"travel_and_places\"},building_construction:{keywords:[\"wip\",\"working\",\"progress\"],char:\"🏗\",fitzpatrick_scale:false,category:\"travel_and_places\"},foggy:{keywords:[\"photo\",\"mountain\"],char:\"🌁\",fitzpatrick_scale:false,category:\"travel_and_places\"},tokyo_tower:{keywords:[\"photo\",\"japanese\"],char:\"🗼\",fitzpatrick_scale:false,category:\"travel_and_places\"},factory:{keywords:[\"building\",\"industry\",\"pollution\",\"smoke\"],char:\"🏭\",fitzpatrick_scale:false,category:\"travel_and_places\"},fountain:{keywords:[\"photo\",\"summer\",\"water\",\"fresh\"],char:\"⛲\",fitzpatrick_scale:false,category:\"travel_and_places\"},rice_scene:{keywords:[\"photo\",\"japan\",\"asia\",\"tsukimi\"],char:\"🎑\",fitzpatrick_scale:false,category:\"travel_and_places\"},mountain:{keywords:[\"photo\",\"nature\",\"environment\"],char:\"⛰\",fitzpatrick_scale:false,category:\"travel_and_places\"},mountain_snow:{keywords:[\"photo\",\"nature\",\"environment\",\"winter\",\"cold\"],char:\"🏔\",fitzpatrick_scale:false,category:\"travel_and_places\"},mount_fuji:{keywords:[\"photo\",\"mountain\",\"nature\",\"japanese\"],char:\"🗻\",fitzpatrick_scale:false,category:\"travel_and_places\"},volcano:{keywords:[\"photo\",\"nature\",\"disaster\"],char:\"🌋\",fitzpatrick_scale:false,category:\"travel_and_places\"},japan:{keywords:[\"nation\",\"country\",\"japanese\",\"asia\"],char:\"🗾\",fitzpatrick_scale:false,category:\"travel_and_places\"},camping:{keywords:[\"photo\",\"outdoors\",\"tent\"],char:\"🏕\",fitzpatrick_scale:false,category:\"travel_and_places\"},tent:{keywords:[\"photo\",\"camping\",\"outdoors\"],char:\"⛺\",fitzpatrick_scale:false,category:\"travel_and_places\"},national_park:{keywords:[\"photo\",\"environment\",\"nature\"],char:\"🏞\",fitzpatrick_scale:false,category:\"travel_and_places\"},motorway:{keywords:[\"road\",\"cupertino\",\"interstate\",\"highway\"],char:\"🛣\",fitzpatrick_scale:false,category:\"travel_and_places\"},railway_track:{keywords:[\"train\",\"transportation\"],char:\"🛤\",fitzpatrick_scale:false,category:\"travel_and_places\"},sunrise:{keywords:[\"morning\",\"view\",\"vacation\",\"photo\"],char:\"🌅\",fitzpatrick_scale:false,category:\"travel_and_places\"},sunrise_over_mountains:{keywords:[\"view\",\"vacation\",\"photo\"],char:\"🌄\",fitzpatrick_scale:false,category:\"travel_and_places\"},desert:{keywords:[\"photo\",\"warm\",\"saharah\"],char:\"🏜\",fitzpatrick_scale:false,category:\"travel_and_places\"},beach_umbrella:{keywords:[\"weather\",\"summer\",\"sunny\",\"sand\",\"mojito\"],char:\"🏖\",fitzpatrick_scale:false,category:\"travel_and_places\"},desert_island:{keywords:[\"photo\",\"tropical\",\"mojito\"],char:\"🏝\",fitzpatrick_scale:false,category:\"travel_and_places\"},city_sunrise:{keywords:[\"photo\",\"good morning\",\"dawn\"],char:\"🌇\",fitzpatrick_scale:false,category:\"travel_and_places\"},city_sunset:{keywords:[\"photo\",\"evening\",\"sky\",\"buildings\"],char:\"🌆\",fitzpatrick_scale:false,category:\"travel_and_places\"},cityscape:{keywords:[\"photo\",\"night life\",\"urban\"],char:\"🏙\",fitzpatrick_scale:false,category:\"travel_and_places\"},night_with_stars:{keywords:[\"evening\",\"city\",\"downtown\"],char:\"🌃\",fitzpatrick_scale:false,category:\"travel_and_places\"},bridge_at_night:{keywords:[\"photo\",\"sanfrancisco\"],char:\"🌉\",fitzpatrick_scale:false,category:\"travel_and_places\"},milky_way:{keywords:[\"photo\",\"space\",\"stars\"],char:\"🌌\",fitzpatrick_scale:false,category:\"travel_and_places\"},stars:{keywords:[\"night\",\"photo\"],char:\"🌠\",fitzpatrick_scale:false,category:\"travel_and_places\"},sparkler:{keywords:[\"stars\",\"night\",\"shine\"],char:\"🎇\",fitzpatrick_scale:false,category:\"travel_and_places\"},fireworks:{keywords:[\"photo\",\"festival\",\"carnival\",\"congratulations\"],char:\"🎆\",fitzpatrick_scale:false,category:\"travel_and_places\"},rainbow:{keywords:[\"nature\",\"happy\",\"unicorn_face\",\"photo\",\"sky\",\"spring\"],char:\"🌈\",fitzpatrick_scale:false,category:\"travel_and_places\"},houses:{keywords:[\"buildings\",\"photo\"],char:\"🏘\",fitzpatrick_scale:false,category:\"travel_and_places\"},european_castle:{keywords:[\"building\",\"royalty\",\"history\"],char:\"🏰\",fitzpatrick_scale:false,category:\"travel_and_places\"},japanese_castle:{keywords:[\"photo\",\"building\"],char:\"🏯\",fitzpatrick_scale:false,category:\"travel_and_places\"},stadium:{keywords:[\"photo\",\"place\",\"sports\",\"concert\",\"venue\"],char:\"🏟\",fitzpatrick_scale:false,category:\"travel_and_places\"},statue_of_liberty:{keywords:[\"american\",\"newyork\"],char:\"🗽\",fitzpatrick_scale:false,category:\"travel_and_places\"},house:{keywords:[\"building\",\"home\"],char:\"🏠\",fitzpatrick_scale:false,category:\"travel_and_places\"},house_with_garden:{keywords:[\"home\",\"plant\",\"nature\"],char:\"🏡\",fitzpatrick_scale:false,category:\"travel_and_places\"},derelict_house:{keywords:[\"abandon\",\"evict\",\"broken\",\"building\"],char:\"🏚\",fitzpatrick_scale:false,category:\"travel_and_places\"},office:{keywords:[\"building\",\"bureau\",\"work\"],char:\"🏢\",fitzpatrick_scale:false,category:\"travel_and_places\"},department_store:{keywords:[\"building\",\"shopping\",\"mall\"],char:\"🏬\",fitzpatrick_scale:false,category:\"travel_and_places\"},post_office:{keywords:[\"building\",\"envelope\",\"communication\"],char:\"🏣\",fitzpatrick_scale:false,category:\"travel_and_places\"},european_post_office:{keywords:[\"building\",\"email\"],char:\"🏤\",fitzpatrick_scale:false,category:\"travel_and_places\"},hospital:{keywords:[\"building\",\"health\",\"surgery\",\"doctor\"],char:\"🏥\",fitzpatrick_scale:false,category:\"travel_and_places\"},bank:{keywords:[\"building\",\"money\",\"sales\",\"cash\",\"business\",\"enterprise\"],char:\"🏦\",fitzpatrick_scale:false,category:\"travel_and_places\"},hotel:{keywords:[\"building\",\"accomodation\",\"checkin\"],char:\"🏨\",fitzpatrick_scale:false,category:\"travel_and_places\"},convenience_store:{keywords:[\"building\",\"shopping\",\"groceries\"],char:\"🏪\",fitzpatrick_scale:false,category:\"travel_and_places\"},school:{keywords:[\"building\",\"student\",\"education\",\"learn\",\"teach\"],char:\"🏫\",fitzpatrick_scale:false,category:\"travel_and_places\"},love_hotel:{keywords:[\"like\",\"affection\",\"dating\"],char:\"🏩\",fitzpatrick_scale:false,category:\"travel_and_places\"},wedding:{keywords:[\"love\",\"like\",\"affection\",\"couple\",\"marriage\",\"bride\",\"groom\"],char:\"💒\",fitzpatrick_scale:false,category:\"travel_and_places\"},classical_building:{keywords:[\"art\",\"culture\",\"history\"],char:\"🏛\",fitzpatrick_scale:false,category:\"travel_and_places\"},church:{keywords:[\"building\",\"religion\",\"christ\"],char:\"⛪\",fitzpatrick_scale:false,category:\"travel_and_places\"},mosque:{keywords:[\"islam\",\"worship\",\"minaret\"],char:\"🕌\",fitzpatrick_scale:false,category:\"travel_and_places\"},synagogue:{keywords:[\"judaism\",\"worship\",\"temple\",\"jewish\"],char:\"🕍\",fitzpatrick_scale:false,category:\"travel_and_places\"},kaaba:{keywords:[\"mecca\",\"mosque\",\"islam\"],char:\"🕋\",fitzpatrick_scale:false,category:\"travel_and_places\"},shinto_shrine:{keywords:[\"temple\",\"japan\",\"kyoto\"],char:\"⛩\",fitzpatrick_scale:false,category:\"travel_and_places\"},watch:{keywords:[\"time\",\"accessories\"],char:\"⌚\",fitzpatrick_scale:false,category:\"objects\"},iphone:{keywords:[\"technology\",\"apple\",\"gadgets\",\"dial\"],char:\"📱\",fitzpatrick_scale:false,category:\"objects\"},calling:{keywords:[\"iphone\",\"incoming\"],char:\"📲\",fitzpatrick_scale:false,category:\"objects\"},computer:{keywords:[\"technology\",\"laptop\",\"screen\",\"display\",\"monitor\"],char:\"💻\",fitzpatrick_scale:false,category:\"objects\"},keyboard:{keywords:[\"technology\",\"computer\",\"type\",\"input\",\"text\"],char:\"⌨\",fitzpatrick_scale:false,category:\"objects\"},desktop_computer:{keywords:[\"technology\",\"computing\",\"screen\"],char:\"🖥\",fitzpatrick_scale:false,category:\"objects\"},printer:{keywords:[\"paper\",\"ink\"],char:\"🖨\",fitzpatrick_scale:false,category:\"objects\"},computer_mouse:{keywords:[\"click\"],char:\"🖱\",fitzpatrick_scale:false,category:\"objects\"},trackball:{keywords:[\"technology\",\"trackpad\"],char:\"🖲\",fitzpatrick_scale:false,category:\"objects\"},joystick:{keywords:[\"game\",\"play\"],char:\"🕹\",fitzpatrick_scale:false,category:\"objects\"},clamp:{keywords:[\"tool\"],char:\"🗜\",fitzpatrick_scale:false,category:\"objects\"},minidisc:{keywords:[\"technology\",\"record\",\"data\",\"disk\",\"90s\"],char:\"💽\",fitzpatrick_scale:false,category:\"objects\"},floppy_disk:{keywords:[\"oldschool\",\"technology\",\"save\",\"90s\",\"80s\"],char:\"💾\",fitzpatrick_scale:false,category:\"objects\"},cd:{keywords:[\"technology\",\"dvd\",\"disk\",\"disc\",\"90s\"],char:\"💿\",fitzpatrick_scale:false,category:\"objects\"},dvd:{keywords:[\"cd\",\"disk\",\"disc\"],char:\"📀\",fitzpatrick_scale:false,category:\"objects\"},vhs:{keywords:[\"record\",\"video\",\"oldschool\",\"90s\",\"80s\"],char:\"📼\",fitzpatrick_scale:false,category:\"objects\"},camera:{keywords:[\"gadgets\",\"photography\"],char:\"📷\",fitzpatrick_scale:false,category:\"objects\"},camera_flash:{keywords:[\"photography\",\"gadgets\"],char:\"📸\",fitzpatrick_scale:false,category:\"objects\"},video_camera:{keywords:[\"film\",\"record\"],char:\"📹\",fitzpatrick_scale:false,category:\"objects\"},movie_camera:{keywords:[\"film\",\"record\"],char:\"🎥\",fitzpatrick_scale:false,category:\"objects\"},film_projector:{keywords:[\"video\",\"tape\",\"record\",\"movie\"],char:\"📽\",fitzpatrick_scale:false,category:\"objects\"},film_strip:{keywords:[\"movie\"],char:\"🎞\",fitzpatrick_scale:false,category:\"objects\"},telephone_receiver:{keywords:[\"technology\",\"communication\",\"dial\"],char:\"📞\",fitzpatrick_scale:false,category:\"objects\"},phone:{keywords:[\"technology\",\"communication\",\"dial\",\"telephone\"],char:\"☎️\",fitzpatrick_scale:false,category:\"objects\"},pager:{keywords:[\"bbcall\",\"oldschool\",\"90s\"],char:\"📟\",fitzpatrick_scale:false,category:\"objects\"},fax:{keywords:[\"communication\",\"technology\"],char:\"📠\",fitzpatrick_scale:false,category:\"objects\"},tv:{keywords:[\"technology\",\"program\",\"oldschool\",\"show\",\"television\"],char:\"📺\",fitzpatrick_scale:false,category:\"objects\"},radio:{keywords:[\"communication\",\"music\",\"podcast\",\"program\"],char:\"📻\",fitzpatrick_scale:false,category:\"objects\"},studio_microphone:{keywords:[\"sing\",\"recording\",\"artist\",\"talkshow\"],char:\"🎙\",fitzpatrick_scale:false,category:\"objects\"},level_slider:{keywords:[\"scale\"],char:\"🎚\",fitzpatrick_scale:false,category:\"objects\"},control_knobs:{keywords:[\"dial\"],char:\"🎛\",fitzpatrick_scale:false,category:\"objects\"},compass:{keywords:[\"magnetic\",\"navigation\",\"orienteering\"],char:\"🧭\",fitzpatrick_scale:false,category:\"objects\"},stopwatch:{keywords:[\"time\",\"deadline\"],char:\"⏱\",fitzpatrick_scale:false,category:\"objects\"},timer_clock:{keywords:[\"alarm\"],char:\"⏲\",fitzpatrick_scale:false,category:\"objects\"},alarm_clock:{keywords:[\"time\",\"wake\"],char:\"⏰\",fitzpatrick_scale:false,category:\"objects\"},mantelpiece_clock:{keywords:[\"time\"],char:\"🕰\",fitzpatrick_scale:false,category:\"objects\"},hourglass_flowing_sand:{keywords:[\"oldschool\",\"time\",\"countdown\"],char:\"⏳\",fitzpatrick_scale:false,category:\"objects\"},hourglass:{keywords:[\"time\",\"clock\",\"oldschool\",\"limit\",\"exam\",\"quiz\",\"test\"],char:\"⌛\",fitzpatrick_scale:false,category:\"objects\"},satellite:{keywords:[\"communication\",\"future\",\"radio\",\"space\"],char:\"📡\",fitzpatrick_scale:false,category:\"objects\"},battery:{keywords:[\"power\",\"energy\",\"sustain\"],char:\"🔋\",fitzpatrick_scale:false,category:\"objects\"},electric_plug:{keywords:[\"charger\",\"power\"],char:\"🔌\",fitzpatrick_scale:false,category:\"objects\"},bulb:{keywords:[\"light\",\"electricity\",\"idea\"],char:\"💡\",fitzpatrick_scale:false,category:\"objects\"},flashlight:{keywords:[\"dark\",\"camping\",\"sight\",\"night\"],char:\"🔦\",fitzpatrick_scale:false,category:\"objects\"},candle:{keywords:[\"fire\",\"wax\"],char:\"🕯\",fitzpatrick_scale:false,category:\"objects\"},fire_extinguisher:{keywords:[\"quench\"],char:\"🧯\",fitzpatrick_scale:false,category:\"objects\"},wastebasket:{keywords:[\"bin\",\"trash\",\"rubbish\",\"garbage\",\"toss\"],char:\"🗑\",fitzpatrick_scale:false,category:\"objects\"},oil_drum:{keywords:[\"barrell\"],char:\"🛢\",fitzpatrick_scale:false,category:\"objects\"},money_with_wings:{keywords:[\"dollar\",\"bills\",\"payment\",\"sale\"],char:\"💸\",fitzpatrick_scale:false,category:\"objects\"},dollar:{keywords:[\"money\",\"sales\",\"bill\",\"currency\"],char:\"💵\",fitzpatrick_scale:false,category:\"objects\"},yen:{keywords:[\"money\",\"sales\",\"japanese\",\"dollar\",\"currency\"],char:\"💴\",fitzpatrick_scale:false,category:\"objects\"},euro:{keywords:[\"money\",\"sales\",\"dollar\",\"currency\"],char:\"💶\",fitzpatrick_scale:false,category:\"objects\"},pound:{keywords:[\"british\",\"sterling\",\"money\",\"sales\",\"bills\",\"uk\",\"england\",\"currency\"],char:\"💷\",fitzpatrick_scale:false,category:\"objects\"},moneybag:{keywords:[\"dollar\",\"payment\",\"coins\",\"sale\"],char:\"💰\",fitzpatrick_scale:false,category:\"objects\"},credit_card:{keywords:[\"money\",\"sales\",\"dollar\",\"bill\",\"payment\",\"shopping\"],char:\"💳\",fitzpatrick_scale:false,category:\"objects\"},gem:{keywords:[\"blue\",\"ruby\",\"diamond\",\"jewelry\"],char:\"💎\",fitzpatrick_scale:false,category:\"objects\"},balance_scale:{keywords:[\"law\",\"fairness\",\"weight\"],char:\"⚖\",fitzpatrick_scale:false,category:\"objects\"},toolbox:{keywords:[\"tools\",\"diy\",\"fix\",\"maintainer\",\"mechanic\"],char:\"🧰\",fitzpatrick_scale:false,category:\"objects\"},wrench:{keywords:[\"tools\",\"diy\",\"ikea\",\"fix\",\"maintainer\"],char:\"🔧\",fitzpatrick_scale:false,category:\"objects\"},hammer:{keywords:[\"tools\",\"build\",\"create\"],char:\"🔨\",fitzpatrick_scale:false,category:\"objects\"},hammer_and_pick:{keywords:[\"tools\",\"build\",\"create\"],char:\"⚒\",fitzpatrick_scale:false,category:\"objects\"},hammer_and_wrench:{keywords:[\"tools\",\"build\",\"create\"],char:\"🛠\",fitzpatrick_scale:false,category:\"objects\"},pick:{keywords:[\"tools\",\"dig\"],char:\"⛏\",fitzpatrick_scale:false,category:\"objects\"},nut_and_bolt:{keywords:[\"handy\",\"tools\",\"fix\"],char:\"🔩\",fitzpatrick_scale:false,category:\"objects\"},gear:{keywords:[\"cog\"],char:\"⚙\",fitzpatrick_scale:false,category:\"objects\"},brick:{keywords:[\"bricks\"],char:\"🧱\",fitzpatrick_scale:false,category:\"objects\"},chains:{keywords:[\"lock\",\"arrest\"],char:\"⛓\",fitzpatrick_scale:false,category:\"objects\"},magnet:{keywords:[\"attraction\",\"magnetic\"],char:\"🧲\",fitzpatrick_scale:false,category:\"objects\"},gun:{keywords:[\"violence\",\"weapon\",\"pistol\",\"revolver\"],char:\"🔫\",fitzpatrick_scale:false,category:\"objects\"},bomb:{keywords:[\"boom\",\"explode\",\"explosion\",\"terrorism\"],char:\"💣\",fitzpatrick_scale:false,category:\"objects\"},firecracker:{keywords:[\"dynamite\",\"boom\",\"explode\",\"explosion\",\"explosive\"],char:\"🧨\",fitzpatrick_scale:false,category:\"objects\"},hocho:{keywords:[\"knife\",\"blade\",\"cutlery\",\"kitchen\",\"weapon\"],char:\"🔪\",fitzpatrick_scale:false,category:\"objects\"},dagger:{keywords:[\"weapon\"],char:\"🗡\",fitzpatrick_scale:false,category:\"objects\"},crossed_swords:{keywords:[\"weapon\"],char:\"⚔\",fitzpatrick_scale:false,category:\"objects\"},shield:{keywords:[\"protection\",\"security\"],char:\"🛡\",fitzpatrick_scale:false,category:\"objects\"},smoking:{keywords:[\"kills\",\"tobacco\",\"cigarette\",\"joint\",\"smoke\"],char:\"🚬\",fitzpatrick_scale:false,category:\"objects\"},skull_and_crossbones:{keywords:[\"poison\",\"danger\",\"deadly\",\"scary\",\"death\",\"pirate\",\"evil\"],char:\"☠\",fitzpatrick_scale:false,category:\"objects\"},coffin:{keywords:[\"vampire\",\"dead\",\"die\",\"death\",\"rip\",\"graveyard\",\"cemetery\",\"casket\",\"funeral\",\"box\"],char:\"⚰\",fitzpatrick_scale:false,category:\"objects\"},funeral_urn:{keywords:[\"dead\",\"die\",\"death\",\"rip\",\"ashes\"],char:\"⚱\",fitzpatrick_scale:false,category:\"objects\"},amphora:{keywords:[\"vase\",\"jar\"],char:\"🏺\",fitzpatrick_scale:false,category:\"objects\"},crystal_ball:{keywords:[\"disco\",\"party\",\"magic\",\"circus\",\"fortune_teller\"],char:\"🔮\",fitzpatrick_scale:false,category:\"objects\"},prayer_beads:{keywords:[\"dhikr\",\"religious\"],char:\"📿\",fitzpatrick_scale:false,category:\"objects\"},nazar_amulet:{keywords:[\"bead\",\"charm\"],char:\"🧿\",fitzpatrick_scale:false,category:\"objects\"},barber:{keywords:[\"hair\",\"salon\",\"style\"],char:\"💈\",fitzpatrick_scale:false,category:\"objects\"},alembic:{keywords:[\"distilling\",\"science\",\"experiment\",\"chemistry\"],char:\"⚗\",fitzpatrick_scale:false,category:\"objects\"},telescope:{keywords:[\"stars\",\"space\",\"zoom\",\"science\",\"astronomy\"],char:\"🔭\",fitzpatrick_scale:false,category:\"objects\"},microscope:{keywords:[\"laboratory\",\"experiment\",\"zoomin\",\"science\",\"study\"],char:\"🔬\",fitzpatrick_scale:false,category:\"objects\"},hole:{keywords:[\"embarrassing\"],char:\"🕳\",fitzpatrick_scale:false,category:\"objects\"},pill:{keywords:[\"health\",\"medicine\",\"doctor\",\"pharmacy\",\"drug\"],char:\"💊\",fitzpatrick_scale:false,category:\"objects\"},syringe:{keywords:[\"health\",\"hospital\",\"drugs\",\"blood\",\"medicine\",\"needle\",\"doctor\",\"nurse\"],char:\"💉\",fitzpatrick_scale:false,category:\"objects\"},dna:{keywords:[\"biologist\",\"genetics\",\"life\"],char:\"🧬\",fitzpatrick_scale:false,category:\"objects\"},microbe:{keywords:[\"amoeba\",\"bacteria\",\"germs\"],char:\"🦠\",fitzpatrick_scale:false,category:\"objects\"},petri_dish:{keywords:[\"bacteria\",\"biology\",\"culture\",\"lab\"],char:\"🧫\",fitzpatrick_scale:false,category:\"objects\"},test_tube:{keywords:[\"chemistry\",\"experiment\",\"lab\",\"science\"],char:\"🧪\",fitzpatrick_scale:false,category:\"objects\"},thermometer:{keywords:[\"weather\",\"temperature\",\"hot\",\"cold\"],char:\"🌡\",fitzpatrick_scale:false,category:\"objects\"},broom:{keywords:[\"cleaning\",\"sweeping\",\"witch\"],char:\"🧹\",fitzpatrick_scale:false,category:\"objects\"},basket:{keywords:[\"laundry\"],char:\"🧺\",fitzpatrick_scale:false,category:\"objects\"},toilet_paper:{keywords:[\"roll\"],char:\"🧻\",fitzpatrick_scale:false,category:\"objects\"},label:{keywords:[\"sale\",\"tag\"],char:\"🏷\",fitzpatrick_scale:false,category:\"objects\"},bookmark:{keywords:[\"favorite\",\"label\",\"save\"],char:\"🔖\",fitzpatrick_scale:false,category:\"objects\"},toilet:{keywords:[\"restroom\",\"wc\",\"washroom\",\"bathroom\",\"potty\"],char:\"🚽\",fitzpatrick_scale:false,category:\"objects\"},shower:{keywords:[\"clean\",\"water\",\"bathroom\"],char:\"🚿\",fitzpatrick_scale:false,category:\"objects\"},bathtub:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:\"🛁\",fitzpatrick_scale:false,category:\"objects\"},soap:{keywords:[\"bar\",\"bathing\",\"cleaning\",\"lather\"],char:\"🧼\",fitzpatrick_scale:false,category:\"objects\"},sponge:{keywords:[\"absorbing\",\"cleaning\",\"porous\"],char:\"🧽\",fitzpatrick_scale:false,category:\"objects\"},lotion_bottle:{keywords:[\"moisturizer\",\"sunscreen\"],char:\"🧴\",fitzpatrick_scale:false,category:\"objects\"},key:{keywords:[\"lock\",\"door\",\"password\"],char:\"🔑\",fitzpatrick_scale:false,category:\"objects\"},old_key:{keywords:[\"lock\",\"door\",\"password\"],char:\"🗝\",fitzpatrick_scale:false,category:\"objects\"},couch_and_lamp:{keywords:[\"read\",\"chill\"],char:\"🛋\",fitzpatrick_scale:false,category:\"objects\"},sleeping_bed:{keywords:[\"bed\",\"rest\"],char:\"🛌\",fitzpatrick_scale:true,category:\"objects\"},bed:{keywords:[\"sleep\",\"rest\"],char:\"🛏\",fitzpatrick_scale:false,category:\"objects\"},door:{keywords:[\"house\",\"entry\",\"exit\"],char:\"🚪\",fitzpatrick_scale:false,category:\"objects\"},bellhop_bell:{keywords:[\"service\"],char:\"🛎\",fitzpatrick_scale:false,category:\"objects\"},teddy_bear:{keywords:[\"plush\",\"stuffed\"],char:\"🧸\",fitzpatrick_scale:false,category:\"objects\"},framed_picture:{keywords:[\"photography\"],char:\"🖼\",fitzpatrick_scale:false,category:\"objects\"},world_map:{keywords:[\"location\",\"direction\"],char:\"🗺\",fitzpatrick_scale:false,category:\"objects\"},parasol_on_ground:{keywords:[\"weather\",\"summer\"],char:\"⛱\",fitzpatrick_scale:false,category:\"objects\"},moyai:{keywords:[\"rock\",\"easter island\",\"moai\"],char:\"🗿\",fitzpatrick_scale:false,category:\"objects\"},shopping:{keywords:[\"mall\",\"buy\",\"purchase\"],char:\"🛍\",fitzpatrick_scale:false,category:\"objects\"},shopping_cart:{keywords:[\"trolley\"],char:\"🛒\",fitzpatrick_scale:false,category:\"objects\"},balloon:{keywords:[\"party\",\"celebration\",\"birthday\",\"circus\"],char:\"🎈\",fitzpatrick_scale:false,category:\"objects\"},flags:{keywords:[\"fish\",\"japanese\",\"koinobori\",\"carp\",\"banner\"],char:\"🎏\",fitzpatrick_scale:false,category:\"objects\"},ribbon:{keywords:[\"decoration\",\"pink\",\"girl\",\"bowtie\"],char:\"🎀\",fitzpatrick_scale:false,category:\"objects\"},gift:{keywords:[\"present\",\"birthday\",\"christmas\",\"xmas\"],char:\"🎁\",fitzpatrick_scale:false,category:\"objects\"},confetti_ball:{keywords:[\"festival\",\"party\",\"birthday\",\"circus\"],char:\"🎊\",fitzpatrick_scale:false,category:\"objects\"},tada:{keywords:[\"party\",\"congratulations\",\"birthday\",\"magic\",\"circus\",\"celebration\"],char:\"🎉\",fitzpatrick_scale:false,category:\"objects\"},dolls:{keywords:[\"japanese\",\"toy\",\"kimono\"],char:\"🎎\",fitzpatrick_scale:false,category:\"objects\"},wind_chime:{keywords:[\"nature\",\"ding\",\"spring\",\"bell\"],char:\"🎐\",fitzpatrick_scale:false,category:\"objects\"},crossed_flags:{keywords:[\"japanese\",\"nation\",\"country\",\"border\"],char:\"🎌\",fitzpatrick_scale:false,category:\"objects\"},izakaya_lantern:{keywords:[\"light\",\"paper\",\"halloween\",\"spooky\"],char:\"🏮\",fitzpatrick_scale:false,category:\"objects\"},red_envelope:{keywords:[\"gift\"],char:\"🧧\",fitzpatrick_scale:false,category:\"objects\"},email:{keywords:[\"letter\",\"postal\",\"inbox\",\"communication\"],char:\"✉️\",fitzpatrick_scale:false,category:\"objects\"},envelope_with_arrow:{keywords:[\"email\",\"communication\"],char:\"📩\",fitzpatrick_scale:false,category:\"objects\"},incoming_envelope:{keywords:[\"email\",\"inbox\"],char:\"📨\",fitzpatrick_scale:false,category:\"objects\"},\"e-mail\":{keywords:[\"communication\",\"inbox\"],char:\"📧\",fitzpatrick_scale:false,category:\"objects\"},love_letter:{keywords:[\"email\",\"like\",\"affection\",\"envelope\",\"valentines\"],char:\"💌\",fitzpatrick_scale:false,category:\"objects\"},postbox:{keywords:[\"email\",\"letter\",\"envelope\"],char:\"📮\",fitzpatrick_scale:false,category:\"objects\"},mailbox_closed:{keywords:[\"email\",\"communication\",\"inbox\"],char:\"📪\",fitzpatrick_scale:false,category:\"objects\"},mailbox:{keywords:[\"email\",\"inbox\",\"communication\"],char:\"📫\",fitzpatrick_scale:false,category:\"objects\"},mailbox_with_mail:{keywords:[\"email\",\"inbox\",\"communication\"],char:\"📬\",fitzpatrick_scale:false,category:\"objects\"},mailbox_with_no_mail:{keywords:[\"email\",\"inbox\"],char:\"📭\",fitzpatrick_scale:false,category:\"objects\"},package:{keywords:[\"mail\",\"gift\",\"cardboard\",\"box\",\"moving\"],char:\"📦\",fitzpatrick_scale:false,category:\"objects\"},postal_horn:{keywords:[\"instrument\",\"music\"],char:\"📯\",fitzpatrick_scale:false,category:\"objects\"},inbox_tray:{keywords:[\"email\",\"documents\"],char:\"📥\",fitzpatrick_scale:false,category:\"objects\"},outbox_tray:{keywords:[\"inbox\",\"email\"],char:\"📤\",fitzpatrick_scale:false,category:\"objects\"},scroll:{keywords:[\"documents\",\"ancient\",\"history\",\"paper\"],char:\"📜\",fitzpatrick_scale:false,category:\"objects\"},page_with_curl:{keywords:[\"documents\",\"office\",\"paper\"],char:\"📃\",fitzpatrick_scale:false,category:\"objects\"},bookmark_tabs:{keywords:[\"favorite\",\"save\",\"order\",\"tidy\"],char:\"📑\",fitzpatrick_scale:false,category:\"objects\"},receipt:{keywords:[\"accounting\",\"expenses\"],char:\"🧾\",fitzpatrick_scale:false,category:\"objects\"},bar_chart:{keywords:[\"graph\",\"presentation\",\"stats\"],char:\"📊\",fitzpatrick_scale:false,category:\"objects\"},chart_with_upwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recovery\",\"business\",\"economics\",\"money\",\"sales\",\"good\",\"success\"],char:\"📈\",fitzpatrick_scale:false,category:\"objects\"},chart_with_downwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recession\",\"business\",\"economics\",\"money\",\"sales\",\"bad\",\"failure\"],char:\"📉\",fitzpatrick_scale:false,category:\"objects\"},page_facing_up:{keywords:[\"documents\",\"office\",\"paper\",\"information\"],char:\"📄\",fitzpatrick_scale:false,category:\"objects\"},date:{keywords:[\"calendar\",\"schedule\"],char:\"📅\",fitzpatrick_scale:false,category:\"objects\"},calendar:{keywords:[\"schedule\",\"date\",\"planning\"],char:\"📆\",fitzpatrick_scale:false,category:\"objects\"},spiral_calendar:{keywords:[\"date\",\"schedule\",\"planning\"],char:\"🗓\",fitzpatrick_scale:false,category:\"objects\"},card_index:{keywords:[\"business\",\"stationery\"],char:\"📇\",fitzpatrick_scale:false,category:\"objects\"},card_file_box:{keywords:[\"business\",\"stationery\"],char:\"🗃\",fitzpatrick_scale:false,category:\"objects\"},ballot_box:{keywords:[\"election\",\"vote\"],char:\"🗳\",fitzpatrick_scale:false,category:\"objects\"},file_cabinet:{keywords:[\"filing\",\"organizing\"],char:\"🗄\",fitzpatrick_scale:false,category:\"objects\"},clipboard:{keywords:[\"stationery\",\"documents\"],char:\"📋\",fitzpatrick_scale:false,category:\"objects\"},spiral_notepad:{keywords:[\"memo\",\"stationery\"],char:\"🗒\",fitzpatrick_scale:false,category:\"objects\"},file_folder:{keywords:[\"documents\",\"business\",\"office\"],char:\"📁\",fitzpatrick_scale:false,category:\"objects\"},open_file_folder:{keywords:[\"documents\",\"load\"],char:\"📂\",fitzpatrick_scale:false,category:\"objects\"},card_index_dividers:{keywords:[\"organizing\",\"business\",\"stationery\"],char:\"🗂\",fitzpatrick_scale:false,category:\"objects\"},newspaper_roll:{keywords:[\"press\",\"headline\"],char:\"🗞\",fitzpatrick_scale:false,category:\"objects\"},newspaper:{keywords:[\"press\",\"headline\"],char:\"📰\",fitzpatrick_scale:false,category:\"objects\"},notebook:{keywords:[\"stationery\",\"record\",\"notes\",\"paper\",\"study\"],char:\"📓\",fitzpatrick_scale:false,category:\"objects\"},closed_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"learn\"],char:\"📕\",fitzpatrick_scale:false,category:\"objects\"},green_book:{keywords:[\"read\",\"library\",\"knowledge\",\"study\"],char:\"📗\",fitzpatrick_scale:false,category:\"objects\"},blue_book:{keywords:[\"read\",\"library\",\"knowledge\",\"learn\",\"study\"],char:\"📘\",fitzpatrick_scale:false,category:\"objects\"},orange_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"study\"],char:\"📙\",fitzpatrick_scale:false,category:\"objects\"},notebook_with_decorative_cover:{keywords:[\"classroom\",\"notes\",\"record\",\"paper\",\"study\"],char:\"📔\",fitzpatrick_scale:false,category:\"objects\"},ledger:{keywords:[\"notes\",\"paper\"],char:\"📒\",fitzpatrick_scale:false,category:\"objects\"},books:{keywords:[\"literature\",\"library\",\"study\"],char:\"📚\",fitzpatrick_scale:false,category:\"objects\"},open_book:{keywords:[\"book\",\"read\",\"library\",\"knowledge\",\"literature\",\"learn\",\"study\"],char:\"📖\",fitzpatrick_scale:false,category:\"objects\"},safety_pin:{keywords:[\"diaper\"],char:\"🧷\",fitzpatrick_scale:false,category:\"objects\"},link:{keywords:[\"rings\",\"url\"],char:\"🔗\",fitzpatrick_scale:false,category:\"objects\"},paperclip:{keywords:[\"documents\",\"stationery\"],char:\"📎\",fitzpatrick_scale:false,category:\"objects\"},paperclips:{keywords:[\"documents\",\"stationery\"],char:\"🖇\",fitzpatrick_scale:false,category:\"objects\"},scissors:{keywords:[\"stationery\",\"cut\"],char:\"✂️\",fitzpatrick_scale:false,category:\"objects\"},triangular_ruler:{keywords:[\"stationery\",\"math\",\"architect\",\"sketch\"],char:\"📐\",fitzpatrick_scale:false,category:\"objects\"},straight_ruler:{keywords:[\"stationery\",\"calculate\",\"length\",\"math\",\"school\",\"drawing\",\"architect\",\"sketch\"],char:\"📏\",fitzpatrick_scale:false,category:\"objects\"},abacus:{keywords:[\"calculation\"],char:\"🧮\",fitzpatrick_scale:false,category:\"objects\"},pushpin:{keywords:[\"stationery\",\"mark\",\"here\"],char:\"📌\",fitzpatrick_scale:false,category:\"objects\"},round_pushpin:{keywords:[\"stationery\",\"location\",\"map\",\"here\"],char:\"📍\",fitzpatrick_scale:false,category:\"objects\"},triangular_flag_on_post:{keywords:[\"mark\",\"milestone\",\"place\"],char:\"🚩\",fitzpatrick_scale:false,category:\"objects\"},white_flag:{keywords:[\"losing\",\"loser\",\"lost\",\"surrender\",\"give up\",\"fail\"],char:\"🏳\",fitzpatrick_scale:false,category:\"objects\"},black_flag:{keywords:[\"pirate\"],char:\"🏴\",fitzpatrick_scale:false,category:\"objects\"},rainbow_flag:{keywords:[\"flag\",\"rainbow\",\"pride\",\"gay\",\"lgbt\",\"glbt\",\"queer\",\"homosexual\",\"lesbian\",\"bisexual\",\"transgender\"],char:\"🏳️‍🌈\",fitzpatrick_scale:false,category:\"objects\"},closed_lock_with_key:{keywords:[\"security\",\"privacy\"],char:\"🔐\",fitzpatrick_scale:false,category:\"objects\"},lock:{keywords:[\"security\",\"password\",\"padlock\"],char:\"🔒\",fitzpatrick_scale:false,category:\"objects\"},unlock:{keywords:[\"privacy\",\"security\"],char:\"🔓\",fitzpatrick_scale:false,category:\"objects\"},lock_with_ink_pen:{keywords:[\"security\",\"secret\"],char:\"🔏\",fitzpatrick_scale:false,category:\"objects\"},pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:\"🖊\",fitzpatrick_scale:false,category:\"objects\"},fountain_pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:\"🖋\",fitzpatrick_scale:false,category:\"objects\"},black_nib:{keywords:[\"pen\",\"stationery\",\"writing\",\"write\"],char:\"✒️\",fitzpatrick_scale:false,category:\"objects\"},memo:{keywords:[\"write\",\"documents\",\"stationery\",\"pencil\",\"paper\",\"writing\",\"legal\",\"exam\",\"quiz\",\"test\",\"study\",\"compose\"],char:\"📝\",fitzpatrick_scale:false,category:\"objects\"},pencil2:{keywords:[\"stationery\",\"write\",\"paper\",\"writing\",\"school\",\"study\"],char:\"✏️\",fitzpatrick_scale:false,category:\"objects\"},crayon:{keywords:[\"drawing\",\"creativity\"],char:\"🖍\",fitzpatrick_scale:false,category:\"objects\"},paintbrush:{keywords:[\"drawing\",\"creativity\",\"art\"],char:\"🖌\",fitzpatrick_scale:false,category:\"objects\"},mag:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:\"🔍\",fitzpatrick_scale:false,category:\"objects\"},mag_right:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:\"🔎\",fitzpatrick_scale:false,category:\"objects\"},heart:{keywords:[\"love\",\"like\",\"valentines\"],char:\"❤️\",fitzpatrick_scale:false,category:\"symbols\"},orange_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"🧡\",fitzpatrick_scale:false,category:\"symbols\"},yellow_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💛\",fitzpatrick_scale:false,category:\"symbols\"},green_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💚\",fitzpatrick_scale:false,category:\"symbols\"},blue_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💙\",fitzpatrick_scale:false,category:\"symbols\"},purple_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💜\",fitzpatrick_scale:false,category:\"symbols\"},black_heart:{keywords:[\"evil\"],char:\"🖤\",fitzpatrick_scale:false,category:\"symbols\"},broken_heart:{keywords:[\"sad\",\"sorry\",\"break\",\"heart\",\"heartbreak\"],char:\"💔\",fitzpatrick_scale:false,category:\"symbols\"},heavy_heart_exclamation:{keywords:[\"decoration\",\"love\"],char:\"❣\",fitzpatrick_scale:false,category:\"symbols\"},two_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"heart\"],char:\"💕\",fitzpatrick_scale:false,category:\"symbols\"},revolving_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💞\",fitzpatrick_scale:false,category:\"symbols\"},heartbeat:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"pink\",\"heart\"],char:\"💓\",fitzpatrick_scale:false,category:\"symbols\"},heartpulse:{keywords:[\"like\",\"love\",\"affection\",\"valentines\",\"pink\"],char:\"💗\",fitzpatrick_scale:false,category:\"symbols\"},sparkling_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"💖\",fitzpatrick_scale:false,category:\"symbols\"},cupid:{keywords:[\"love\",\"like\",\"heart\",\"affection\",\"valentines\"],char:\"💘\",fitzpatrick_scale:false,category:\"symbols\"},gift_heart:{keywords:[\"love\",\"valentines\"],char:\"💝\",fitzpatrick_scale:false,category:\"symbols\"},heart_decoration:{keywords:[\"purple-square\",\"love\",\"like\"],char:\"💟\",fitzpatrick_scale:false,category:\"symbols\"},peace_symbol:{keywords:[\"hippie\"],char:\"☮\",fitzpatrick_scale:false,category:\"symbols\"},latin_cross:{keywords:[\"christianity\"],char:\"✝\",fitzpatrick_scale:false,category:\"symbols\"},star_and_crescent:{keywords:[\"islam\"],char:\"☪\",fitzpatrick_scale:false,category:\"symbols\"},om:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:\"🕉\",fitzpatrick_scale:false,category:\"symbols\"},wheel_of_dharma:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:\"☸\",fitzpatrick_scale:false,category:\"symbols\"},star_of_david:{keywords:[\"judaism\"],char:\"✡\",fitzpatrick_scale:false,category:\"symbols\"},six_pointed_star:{keywords:[\"purple-square\",\"religion\",\"jewish\",\"hexagram\"],char:\"🔯\",fitzpatrick_scale:false,category:\"symbols\"},menorah:{keywords:[\"hanukkah\",\"candles\",\"jewish\"],char:\"🕎\",fitzpatrick_scale:false,category:\"symbols\"},yin_yang:{keywords:[\"balance\"],char:\"☯\",fitzpatrick_scale:false,category:\"symbols\"},orthodox_cross:{keywords:[\"suppedaneum\",\"religion\"],char:\"☦\",fitzpatrick_scale:false,category:\"symbols\"},place_of_worship:{keywords:[\"religion\",\"church\",\"temple\",\"prayer\"],char:\"🛐\",fitzpatrick_scale:false,category:\"symbols\"},ophiuchus:{keywords:[\"sign\",\"purple-square\",\"constellation\",\"astrology\"],char:\"⛎\",fitzpatrick_scale:false,category:\"symbols\"},aries:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"♈\",fitzpatrick_scale:false,category:\"symbols\"},taurus:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:\"♉\",fitzpatrick_scale:false,category:\"symbols\"},gemini:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"♊\",fitzpatrick_scale:false,category:\"symbols\"},cancer:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"♋\",fitzpatrick_scale:false,category:\"symbols\"},leo:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"♌\",fitzpatrick_scale:false,category:\"symbols\"},virgo:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"♍\",fitzpatrick_scale:false,category:\"symbols\"},libra:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"♎\",fitzpatrick_scale:false,category:\"symbols\"},scorpius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\",\"scorpio\"],char:\"♏\",fitzpatrick_scale:false,category:\"symbols\"},sagittarius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"♐\",fitzpatrick_scale:false,category:\"symbols\"},capricorn:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"♑\",fitzpatrick_scale:false,category:\"symbols\"},aquarius:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"♒\",fitzpatrick_scale:false,category:\"symbols\"},pisces:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:\"♓\",fitzpatrick_scale:false,category:\"symbols\"},id:{keywords:[\"purple-square\",\"words\"],char:\"🆔\",fitzpatrick_scale:false,category:\"symbols\"},atom_symbol:{keywords:[\"science\",\"physics\",\"chemistry\"],char:\"⚛\",fitzpatrick_scale:false,category:\"symbols\"},u7a7a:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"empty\",\"sky\",\"blue-square\"],char:\"🈳\",fitzpatrick_scale:false,category:\"symbols\"},u5272:{keywords:[\"cut\",\"divide\",\"chinese\",\"kanji\",\"pink-square\"],char:\"🈹\",fitzpatrick_scale:false,category:\"symbols\"},radioactive:{keywords:[\"nuclear\",\"danger\"],char:\"☢\",fitzpatrick_scale:false,category:\"symbols\"},biohazard:{keywords:[\"danger\"],char:\"☣\",fitzpatrick_scale:false,category:\"symbols\"},mobile_phone_off:{keywords:[\"mute\",\"orange-square\",\"silence\",\"quiet\"],char:\"📴\",fitzpatrick_scale:false,category:\"symbols\"},vibration_mode:{keywords:[\"orange-square\",\"phone\"],char:\"📳\",fitzpatrick_scale:false,category:\"symbols\"},u6709:{keywords:[\"orange-square\",\"chinese\",\"have\",\"kanji\"],char:\"🈶\",fitzpatrick_scale:false,category:\"symbols\"},u7121:{keywords:[\"nothing\",\"chinese\",\"kanji\",\"japanese\",\"orange-square\"],char:\"🈚\",fitzpatrick_scale:false,category:\"symbols\"},u7533:{keywords:[\"chinese\",\"japanese\",\"kanji\",\"orange-square\"],char:\"🈸\",fitzpatrick_scale:false,category:\"symbols\"},u55b6:{keywords:[\"japanese\",\"opening hours\",\"orange-square\"],char:\"🈺\",fitzpatrick_scale:false,category:\"symbols\"},u6708:{keywords:[\"chinese\",\"month\",\"moon\",\"japanese\",\"orange-square\",\"kanji\"],char:\"🈷️\",fitzpatrick_scale:false,category:\"symbols\"},eight_pointed_black_star:{keywords:[\"orange-square\",\"shape\",\"polygon\"],char:\"✴️\",fitzpatrick_scale:false,category:\"symbols\"},vs:{keywords:[\"words\",\"orange-square\"],char:\"🆚\",fitzpatrick_scale:false,category:\"symbols\"},accept:{keywords:[\"ok\",\"good\",\"chinese\",\"kanji\",\"agree\",\"yes\",\"orange-circle\"],char:\"🉑\",fitzpatrick_scale:false,category:\"symbols\"},white_flower:{keywords:[\"japanese\",\"spring\"],char:\"💮\",fitzpatrick_scale:false,category:\"symbols\"},ideograph_advantage:{keywords:[\"chinese\",\"kanji\",\"obtain\",\"get\",\"circle\"],char:\"🉐\",fitzpatrick_scale:false,category:\"symbols\"},secret:{keywords:[\"privacy\",\"chinese\",\"sshh\",\"kanji\",\"red-circle\"],char:\"㊙️\",fitzpatrick_scale:false,category:\"symbols\"},congratulations:{keywords:[\"chinese\",\"kanji\",\"japanese\",\"red-circle\"],char:\"㊗️\",fitzpatrick_scale:false,category:\"symbols\"},u5408:{keywords:[\"japanese\",\"chinese\",\"join\",\"kanji\",\"red-square\"],char:\"🈴\",fitzpatrick_scale:false,category:\"symbols\"},u6e80:{keywords:[\"full\",\"chinese\",\"japanese\",\"red-square\",\"kanji\"],char:\"🈵\",fitzpatrick_scale:false,category:\"symbols\"},u7981:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"forbidden\",\"limit\",\"restricted\",\"red-square\"],char:\"🈲\",fitzpatrick_scale:false,category:\"symbols\"},a:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:\"🅰️\",fitzpatrick_scale:false,category:\"symbols\"},b:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:\"🅱️\",fitzpatrick_scale:false,category:\"symbols\"},ab:{keywords:[\"red-square\",\"alphabet\"],char:\"🆎\",fitzpatrick_scale:false,category:\"symbols\"},cl:{keywords:[\"alphabet\",\"words\",\"red-square\"],char:\"🆑\",fitzpatrick_scale:false,category:\"symbols\"},o2:{keywords:[\"alphabet\",\"red-square\",\"letter\"],char:\"🅾️\",fitzpatrick_scale:false,category:\"symbols\"},sos:{keywords:[\"help\",\"red-square\",\"words\",\"emergency\",\"911\"],char:\"🆘\",fitzpatrick_scale:false,category:\"symbols\"},no_entry:{keywords:[\"limit\",\"security\",\"privacy\",\"bad\",\"denied\",\"stop\",\"circle\"],char:\"⛔\",fitzpatrick_scale:false,category:\"symbols\"},name_badge:{keywords:[\"fire\",\"forbid\"],char:\"📛\",fitzpatrick_scale:false,category:\"symbols\"},no_entry_sign:{keywords:[\"forbid\",\"stop\",\"limit\",\"denied\",\"disallow\",\"circle\"],char:\"🚫\",fitzpatrick_scale:false,category:\"symbols\"},x:{keywords:[\"no\",\"delete\",\"remove\",\"cancel\",\"red\"],char:\"❌\",fitzpatrick_scale:false,category:\"symbols\"},o:{keywords:[\"circle\",\"round\"],char:\"⭕\",fitzpatrick_scale:false,category:\"symbols\"},stop_sign:{keywords:[\"stop\"],char:\"🛑\",fitzpatrick_scale:false,category:\"symbols\"},anger:{keywords:[\"angry\",\"mad\"],char:\"💢\",fitzpatrick_scale:false,category:\"symbols\"},hotsprings:{keywords:[\"bath\",\"warm\",\"relax\"],char:\"♨️\",fitzpatrick_scale:false,category:\"symbols\"},no_pedestrians:{keywords:[\"rules\",\"crossing\",\"walking\",\"circle\"],char:\"🚷\",fitzpatrick_scale:false,category:\"symbols\"},do_not_litter:{keywords:[\"trash\",\"bin\",\"garbage\",\"circle\"],char:\"🚯\",fitzpatrick_scale:false,category:\"symbols\"},no_bicycles:{keywords:[\"cyclist\",\"prohibited\",\"circle\"],char:\"🚳\",fitzpatrick_scale:false,category:\"symbols\"},\"non-potable_water\":{keywords:[\"drink\",\"faucet\",\"tap\",\"circle\"],char:\"🚱\",fitzpatrick_scale:false,category:\"symbols\"},underage:{keywords:[\"18\",\"drink\",\"pub\",\"night\",\"minor\",\"circle\"],char:\"🔞\",fitzpatrick_scale:false,category:\"symbols\"},no_mobile_phones:{keywords:[\"iphone\",\"mute\",\"circle\"],char:\"📵\",fitzpatrick_scale:false,category:\"symbols\"},exclamation:{keywords:[\"heavy_exclamation_mark\",\"danger\",\"surprise\",\"punctuation\",\"wow\",\"warning\"],char:\"❗\",fitzpatrick_scale:false,category:\"symbols\"},grey_exclamation:{keywords:[\"surprise\",\"punctuation\",\"gray\",\"wow\",\"warning\"],char:\"❕\",fitzpatrick_scale:false,category:\"symbols\"},question:{keywords:[\"doubt\",\"confused\"],char:\"❓\",fitzpatrick_scale:false,category:\"symbols\"},grey_question:{keywords:[\"doubts\",\"gray\",\"huh\",\"confused\"],char:\"❔\",fitzpatrick_scale:false,category:\"symbols\"},bangbang:{keywords:[\"exclamation\",\"surprise\"],char:\"‼️\",fitzpatrick_scale:false,category:\"symbols\"},interrobang:{keywords:[\"wat\",\"punctuation\",\"surprise\"],char:\"⁉️\",fitzpatrick_scale:false,category:\"symbols\"},100:{keywords:[\"score\",\"perfect\",\"numbers\",\"century\",\"exam\",\"quiz\",\"test\",\"pass\",\"hundred\"],char:\"💯\",fitzpatrick_scale:false,category:\"symbols\"},low_brightness:{keywords:[\"sun\",\"afternoon\",\"warm\",\"summer\"],char:\"🔅\",fitzpatrick_scale:false,category:\"symbols\"},high_brightness:{keywords:[\"sun\",\"light\"],char:\"🔆\",fitzpatrick_scale:false,category:\"symbols\"},trident:{keywords:[\"weapon\",\"spear\"],char:\"🔱\",fitzpatrick_scale:false,category:\"symbols\"},fleur_de_lis:{keywords:[\"decorative\",\"scout\"],char:\"⚜\",fitzpatrick_scale:false,category:\"symbols\"},part_alternation_mark:{keywords:[\"graph\",\"presentation\",\"stats\",\"business\",\"economics\",\"bad\"],char:\"〽️\",fitzpatrick_scale:false,category:\"symbols\"},warning:{keywords:[\"exclamation\",\"wip\",\"alert\",\"error\",\"problem\",\"issue\"],char:\"⚠️\",fitzpatrick_scale:false,category:\"symbols\"},children_crossing:{keywords:[\"school\",\"warning\",\"danger\",\"sign\",\"driving\",\"yellow-diamond\"],char:\"🚸\",fitzpatrick_scale:false,category:\"symbols\"},beginner:{keywords:[\"badge\",\"shield\"],char:\"🔰\",fitzpatrick_scale:false,category:\"symbols\"},recycle:{keywords:[\"arrow\",\"environment\",\"garbage\",\"trash\"],char:\"♻️\",fitzpatrick_scale:false,category:\"symbols\"},u6307:{keywords:[\"chinese\",\"point\",\"green-square\",\"kanji\"],char:\"🈯\",fitzpatrick_scale:false,category:\"symbols\"},chart:{keywords:[\"green-square\",\"graph\",\"presentation\",\"stats\"],char:\"💹\",fitzpatrick_scale:false,category:\"symbols\"},sparkle:{keywords:[\"stars\",\"green-square\",\"awesome\",\"good\",\"fireworks\"],char:\"❇️\",fitzpatrick_scale:false,category:\"symbols\"},eight_spoked_asterisk:{keywords:[\"star\",\"sparkle\",\"green-square\"],char:\"✳️\",fitzpatrick_scale:false,category:\"symbols\"},negative_squared_cross_mark:{keywords:[\"x\",\"green-square\",\"no\",\"deny\"],char:\"❎\",fitzpatrick_scale:false,category:\"symbols\"},white_check_mark:{keywords:[\"green-square\",\"ok\",\"agree\",\"vote\",\"election\",\"answer\",\"tick\"],char:\"✅\",fitzpatrick_scale:false,category:\"symbols\"},diamond_shape_with_a_dot_inside:{keywords:[\"jewel\",\"blue\",\"gem\",\"crystal\",\"fancy\"],char:\"💠\",fitzpatrick_scale:false,category:\"symbols\"},cyclone:{keywords:[\"weather\",\"swirl\",\"blue\",\"cloud\",\"vortex\",\"spiral\",\"whirlpool\",\"spin\",\"tornado\",\"hurricane\",\"typhoon\"],char:\"🌀\",fitzpatrick_scale:false,category:\"symbols\"},loop:{keywords:[\"tape\",\"cassette\"],char:\"➿\",fitzpatrick_scale:false,category:\"symbols\"},globe_with_meridians:{keywords:[\"earth\",\"international\",\"world\",\"internet\",\"interweb\",\"i18n\"],char:\"🌐\",fitzpatrick_scale:false,category:\"symbols\"},m:{keywords:[\"alphabet\",\"blue-circle\",\"letter\"],char:\"Ⓜ️\",fitzpatrick_scale:false,category:\"symbols\"},atm:{keywords:[\"money\",\"sales\",\"cash\",\"blue-square\",\"payment\",\"bank\"],char:\"🏧\",fitzpatrick_scale:false,category:\"symbols\"},sa:{keywords:[\"japanese\",\"blue-square\",\"katakana\"],char:\"🈂️\",fitzpatrick_scale:false,category:\"symbols\"},passport_control:{keywords:[\"custom\",\"blue-square\"],char:\"🛂\",fitzpatrick_scale:false,category:\"symbols\"},customs:{keywords:[\"passport\",\"border\",\"blue-square\"],char:\"🛃\",fitzpatrick_scale:false,category:\"symbols\"},baggage_claim:{keywords:[\"blue-square\",\"airport\",\"transport\"],char:\"🛄\",fitzpatrick_scale:false,category:\"symbols\"},left_luggage:{keywords:[\"blue-square\",\"travel\"],char:\"🛅\",fitzpatrick_scale:false,category:\"symbols\"},wheelchair:{keywords:[\"blue-square\",\"disabled\",\"a11y\",\"accessibility\"],char:\"♿\",fitzpatrick_scale:false,category:\"symbols\"},no_smoking:{keywords:[\"cigarette\",\"blue-square\",\"smell\",\"smoke\"],char:\"🚭\",fitzpatrick_scale:false,category:\"symbols\"},wc:{keywords:[\"toilet\",\"restroom\",\"blue-square\"],char:\"🚾\",fitzpatrick_scale:false,category:\"symbols\"},parking:{keywords:[\"cars\",\"blue-square\",\"alphabet\",\"letter\"],char:\"🅿️\",fitzpatrick_scale:false,category:\"symbols\"},potable_water:{keywords:[\"blue-square\",\"liquid\",\"restroom\",\"cleaning\",\"faucet\"],char:\"🚰\",fitzpatrick_scale:false,category:\"symbols\"},mens:{keywords:[\"toilet\",\"restroom\",\"wc\",\"blue-square\",\"gender\",\"male\"],char:\"🚹\",fitzpatrick_scale:false,category:\"symbols\"},womens:{keywords:[\"purple-square\",\"woman\",\"female\",\"toilet\",\"loo\",\"restroom\",\"gender\"],char:\"🚺\",fitzpatrick_scale:false,category:\"symbols\"},baby_symbol:{keywords:[\"orange-square\",\"child\"],char:\"🚼\",fitzpatrick_scale:false,category:\"symbols\"},restroom:{keywords:[\"blue-square\",\"toilet\",\"refresh\",\"wc\",\"gender\"],char:\"🚻\",fitzpatrick_scale:false,category:\"symbols\"},put_litter_in_its_place:{keywords:[\"blue-square\",\"sign\",\"human\",\"info\"],char:\"🚮\",fitzpatrick_scale:false,category:\"symbols\"},cinema:{keywords:[\"blue-square\",\"record\",\"film\",\"movie\",\"curtain\",\"stage\",\"theater\"],char:\"🎦\",fitzpatrick_scale:false,category:\"symbols\"},signal_strength:{keywords:[\"blue-square\",\"reception\",\"phone\",\"internet\",\"connection\",\"wifi\",\"bluetooth\",\"bars\"],char:\"📶\",fitzpatrick_scale:false,category:\"symbols\"},koko:{keywords:[\"blue-square\",\"here\",\"katakana\",\"japanese\",\"destination\"],char:\"🈁\",fitzpatrick_scale:false,category:\"symbols\"},ng:{keywords:[\"blue-square\",\"words\",\"shape\",\"icon\"],char:\"🆖\",fitzpatrick_scale:false,category:\"symbols\"},ok:{keywords:[\"good\",\"agree\",\"yes\",\"blue-square\"],char:\"🆗\",fitzpatrick_scale:false,category:\"symbols\"},up:{keywords:[\"blue-square\",\"above\",\"high\"],char:\"🆙\",fitzpatrick_scale:false,category:\"symbols\"},cool:{keywords:[\"words\",\"blue-square\"],char:\"🆒\",fitzpatrick_scale:false,category:\"symbols\"},new:{keywords:[\"blue-square\",\"words\",\"start\"],char:\"🆕\",fitzpatrick_scale:false,category:\"symbols\"},free:{keywords:[\"blue-square\",\"words\"],char:\"🆓\",fitzpatrick_scale:false,category:\"symbols\"},zero:{keywords:[\"0\",\"numbers\",\"blue-square\",\"null\"],char:\"0️⃣\",fitzpatrick_scale:false,category:\"symbols\"},one:{keywords:[\"blue-square\",\"numbers\",\"1\"],char:\"1️⃣\",fitzpatrick_scale:false,category:\"symbols\"},two:{keywords:[\"numbers\",\"2\",\"prime\",\"blue-square\"],char:\"2️⃣\",fitzpatrick_scale:false,category:\"symbols\"},three:{keywords:[\"3\",\"numbers\",\"prime\",\"blue-square\"],char:\"3️⃣\",fitzpatrick_scale:false,category:\"symbols\"},four:{keywords:[\"4\",\"numbers\",\"blue-square\"],char:\"4️⃣\",fitzpatrick_scale:false,category:\"symbols\"},five:{keywords:[\"5\",\"numbers\",\"blue-square\",\"prime\"],char:\"5️⃣\",fitzpatrick_scale:false,category:\"symbols\"},six:{keywords:[\"6\",\"numbers\",\"blue-square\"],char:\"6️⃣\",fitzpatrick_scale:false,category:\"symbols\"},seven:{keywords:[\"7\",\"numbers\",\"blue-square\",\"prime\"],char:\"7️⃣\",fitzpatrick_scale:false,category:\"symbols\"},eight:{keywords:[\"8\",\"blue-square\",\"numbers\"],char:\"8️⃣\",fitzpatrick_scale:false,category:\"symbols\"},nine:{keywords:[\"blue-square\",\"numbers\",\"9\"],char:\"9️⃣\",fitzpatrick_scale:false,category:\"symbols\"},keycap_ten:{keywords:[\"numbers\",\"10\",\"blue-square\"],char:\"🔟\",fitzpatrick_scale:false,category:\"symbols\"},asterisk:{keywords:[\"star\",\"keycap\"],char:\"*⃣\",fitzpatrick_scale:false,category:\"symbols\"},1234:{keywords:[\"numbers\",\"blue-square\"],char:\"🔢\",fitzpatrick_scale:false,category:\"symbols\"},eject_button:{keywords:[\"blue-square\"],char:\"⏏️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_forward:{keywords:[\"blue-square\",\"right\",\"direction\",\"play\"],char:\"▶️\",fitzpatrick_scale:false,category:\"symbols\"},pause_button:{keywords:[\"pause\",\"blue-square\"],char:\"⏸\",fitzpatrick_scale:false,category:\"symbols\"},next_track_button:{keywords:[\"forward\",\"next\",\"blue-square\"],char:\"⏭\",fitzpatrick_scale:false,category:\"symbols\"},stop_button:{keywords:[\"blue-square\"],char:\"⏹\",fitzpatrick_scale:false,category:\"symbols\"},record_button:{keywords:[\"blue-square\"],char:\"⏺\",fitzpatrick_scale:false,category:\"symbols\"},play_or_pause_button:{keywords:[\"blue-square\",\"play\",\"pause\"],char:\"⏯\",fitzpatrick_scale:false,category:\"symbols\"},previous_track_button:{keywords:[\"backward\"],char:\"⏮\",fitzpatrick_scale:false,category:\"symbols\"},fast_forward:{keywords:[\"blue-square\",\"play\",\"speed\",\"continue\"],char:\"⏩\",fitzpatrick_scale:false,category:\"symbols\"},rewind:{keywords:[\"play\",\"blue-square\"],char:\"⏪\",fitzpatrick_scale:false,category:\"symbols\"},twisted_rightwards_arrows:{keywords:[\"blue-square\",\"shuffle\",\"music\",\"random\"],char:\"🔀\",fitzpatrick_scale:false,category:\"symbols\"},repeat:{keywords:[\"loop\",\"record\"],char:\"🔁\",fitzpatrick_scale:false,category:\"symbols\"},repeat_one:{keywords:[\"blue-square\",\"loop\"],char:\"🔂\",fitzpatrick_scale:false,category:\"symbols\"},arrow_backward:{keywords:[\"blue-square\",\"left\",\"direction\"],char:\"◀️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_up_small:{keywords:[\"blue-square\",\"triangle\",\"direction\",\"point\",\"forward\",\"top\"],char:\"🔼\",fitzpatrick_scale:false,category:\"symbols\"},arrow_down_small:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"🔽\",fitzpatrick_scale:false,category:\"symbols\"},arrow_double_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:\"⏫\",fitzpatrick_scale:false,category:\"symbols\"},arrow_double_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"⏬\",fitzpatrick_scale:false,category:\"symbols\"},arrow_right:{keywords:[\"blue-square\",\"next\"],char:\"➡️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_left:{keywords:[\"blue-square\",\"previous\",\"back\"],char:\"⬅️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_up:{keywords:[\"blue-square\",\"continue\",\"top\",\"direction\"],char:\"⬆️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"⬇️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_upper_right:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northeast\"],char:\"↗️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_lower_right:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southeast\"],char:\"↘️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_lower_left:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southwest\"],char:\"↙️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_upper_left:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northwest\"],char:\"↖️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_up_down:{keywords:[\"blue-square\",\"direction\",\"way\",\"vertical\"],char:\"↕️\",fitzpatrick_scale:false,category:\"symbols\"},left_right_arrow:{keywords:[\"shape\",\"direction\",\"horizontal\",\"sideways\"],char:\"↔️\",fitzpatrick_scale:false,category:\"symbols\"},arrows_counterclockwise:{keywords:[\"blue-square\",\"sync\",\"cycle\"],char:\"🔄\",fitzpatrick_scale:false,category:\"symbols\"},arrow_right_hook:{keywords:[\"blue-square\",\"return\",\"rotate\",\"direction\"],char:\"↪️\",fitzpatrick_scale:false,category:\"symbols\"},leftwards_arrow_with_hook:{keywords:[\"back\",\"return\",\"blue-square\",\"undo\",\"enter\"],char:\"↩️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_heading_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:\"⤴️\",fitzpatrick_scale:false,category:\"symbols\"},arrow_heading_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"⤵️\",fitzpatrick_scale:false,category:\"symbols\"},hash:{keywords:[\"symbol\",\"blue-square\",\"twitter\"],char:\"#️⃣\",fitzpatrick_scale:false,category:\"symbols\"},information_source:{keywords:[\"blue-square\",\"alphabet\",\"letter\"],char:\"ℹ️\",fitzpatrick_scale:false,category:\"symbols\"},abc:{keywords:[\"blue-square\",\"alphabet\"],char:\"🔤\",fitzpatrick_scale:false,category:\"symbols\"},abcd:{keywords:[\"blue-square\",\"alphabet\"],char:\"🔡\",fitzpatrick_scale:false,category:\"symbols\"},capital_abcd:{keywords:[\"alphabet\",\"words\",\"blue-square\"],char:\"🔠\",fitzpatrick_scale:false,category:\"symbols\"},symbols:{keywords:[\"blue-square\",\"music\",\"note\",\"ampersand\",\"percent\",\"glyphs\",\"characters\"],char:\"🔣\",fitzpatrick_scale:false,category:\"symbols\"},musical_note:{keywords:[\"score\",\"tone\",\"sound\"],char:\"🎵\",fitzpatrick_scale:false,category:\"symbols\"},notes:{keywords:[\"music\",\"score\"],char:\"🎶\",fitzpatrick_scale:false,category:\"symbols\"},wavy_dash:{keywords:[\"draw\",\"line\",\"moustache\",\"mustache\",\"squiggle\",\"scribble\"],char:\"〰️\",fitzpatrick_scale:false,category:\"symbols\"},curly_loop:{keywords:[\"scribble\",\"draw\",\"shape\",\"squiggle\"],char:\"➰\",fitzpatrick_scale:false,category:\"symbols\"},heavy_check_mark:{keywords:[\"ok\",\"nike\",\"answer\",\"yes\",\"tick\"],char:\"✔️\",fitzpatrick_scale:false,category:\"symbols\"},arrows_clockwise:{keywords:[\"sync\",\"cycle\",\"round\",\"repeat\"],char:\"🔃\",fitzpatrick_scale:false,category:\"symbols\"},heavy_plus_sign:{keywords:[\"math\",\"calculation\",\"addition\",\"more\",\"increase\"],char:\"➕\",fitzpatrick_scale:false,category:\"symbols\"},heavy_minus_sign:{keywords:[\"math\",\"calculation\",\"subtract\",\"less\"],char:\"➖\",fitzpatrick_scale:false,category:\"symbols\"},heavy_division_sign:{keywords:[\"divide\",\"math\",\"calculation\"],char:\"➗\",fitzpatrick_scale:false,category:\"symbols\"},heavy_multiplication_x:{keywords:[\"math\",\"calculation\"],char:\"✖️\",fitzpatrick_scale:false,category:\"symbols\"},infinity:{keywords:[\"forever\"],char:\"♾\",fitzpatrick_scale:false,category:\"symbols\"},heavy_dollar_sign:{keywords:[\"money\",\"sales\",\"payment\",\"currency\",\"buck\"],char:\"💲\",fitzpatrick_scale:false,category:\"symbols\"},currency_exchange:{keywords:[\"money\",\"sales\",\"dollar\",\"travel\"],char:\"💱\",fitzpatrick_scale:false,category:\"symbols\"},copyright:{keywords:[\"ip\",\"license\",\"circle\",\"law\",\"legal\"],char:\"©️\",fitzpatrick_scale:false,category:\"symbols\"},registered:{keywords:[\"alphabet\",\"circle\"],char:\"®️\",fitzpatrick_scale:false,category:\"symbols\"},tm:{keywords:[\"trademark\",\"brand\",\"law\",\"legal\"],char:\"™️\",fitzpatrick_scale:false,category:\"symbols\"},end:{keywords:[\"words\",\"arrow\"],char:\"🔚\",fitzpatrick_scale:false,category:\"symbols\"},back:{keywords:[\"arrow\",\"words\",\"return\"],char:\"🔙\",fitzpatrick_scale:false,category:\"symbols\"},on:{keywords:[\"arrow\",\"words\"],char:\"🔛\",fitzpatrick_scale:false,category:\"symbols\"},top:{keywords:[\"words\",\"blue-square\"],char:\"🔝\",fitzpatrick_scale:false,category:\"symbols\"},soon:{keywords:[\"arrow\",\"words\"],char:\"🔜\",fitzpatrick_scale:false,category:\"symbols\"},ballot_box_with_check:{keywords:[\"ok\",\"agree\",\"confirm\",\"black-square\",\"vote\",\"election\",\"yes\",\"tick\"],char:\"☑️\",fitzpatrick_scale:false,category:\"symbols\"},radio_button:{keywords:[\"input\",\"old\",\"music\",\"circle\"],char:\"🔘\",fitzpatrick_scale:false,category:\"symbols\"},white_circle:{keywords:[\"shape\",\"round\"],char:\"⚪\",fitzpatrick_scale:false,category:\"symbols\"},black_circle:{keywords:[\"shape\",\"button\",\"round\"],char:\"⚫\",fitzpatrick_scale:false,category:\"symbols\"},red_circle:{keywords:[\"shape\",\"error\",\"danger\"],char:\"🔴\",fitzpatrick_scale:false,category:\"symbols\"},large_blue_circle:{keywords:[\"shape\",\"icon\",\"button\"],char:\"🔵\",fitzpatrick_scale:false,category:\"symbols\"},small_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"🔸\",fitzpatrick_scale:false,category:\"symbols\"},small_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"🔹\",fitzpatrick_scale:false,category:\"symbols\"},large_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"🔶\",fitzpatrick_scale:false,category:\"symbols\"},large_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"🔷\",fitzpatrick_scale:false,category:\"symbols\"},small_red_triangle:{keywords:[\"shape\",\"direction\",\"up\",\"top\"],char:\"🔺\",fitzpatrick_scale:false,category:\"symbols\"},black_small_square:{keywords:[\"shape\",\"icon\"],char:\"▪️\",fitzpatrick_scale:false,category:\"symbols\"},white_small_square:{keywords:[\"shape\",\"icon\"],char:\"▫️\",fitzpatrick_scale:false,category:\"symbols\"},black_large_square:{keywords:[\"shape\",\"icon\",\"button\"],char:\"⬛\",fitzpatrick_scale:false,category:\"symbols\"},white_large_square:{keywords:[\"shape\",\"icon\",\"stone\",\"button\"],char:\"⬜\",fitzpatrick_scale:false,category:\"symbols\"},small_red_triangle_down:{keywords:[\"shape\",\"direction\",\"bottom\"],char:\"🔻\",fitzpatrick_scale:false,category:\"symbols\"},black_medium_square:{keywords:[\"shape\",\"button\",\"icon\"],char:\"◼️\",fitzpatrick_scale:false,category:\"symbols\"},white_medium_square:{keywords:[\"shape\",\"stone\",\"icon\"],char:\"◻️\",fitzpatrick_scale:false,category:\"symbols\"},black_medium_small_square:{keywords:[\"icon\",\"shape\",\"button\"],char:\"◾\",fitzpatrick_scale:false,category:\"symbols\"},white_medium_small_square:{keywords:[\"shape\",\"stone\",\"icon\",\"button\"],char:\"◽\",fitzpatrick_scale:false,category:\"symbols\"},black_square_button:{keywords:[\"shape\",\"input\",\"frame\"],char:\"🔲\",fitzpatrick_scale:false,category:\"symbols\"},white_square_button:{keywords:[\"shape\",\"input\"],char:\"🔳\",fitzpatrick_scale:false,category:\"symbols\"},speaker:{keywords:[\"sound\",\"volume\",\"silence\",\"broadcast\"],char:\"🔈\",fitzpatrick_scale:false,category:\"symbols\"},sound:{keywords:[\"volume\",\"speaker\",\"broadcast\"],char:\"🔉\",fitzpatrick_scale:false,category:\"symbols\"},loud_sound:{keywords:[\"volume\",\"noise\",\"noisy\",\"speaker\",\"broadcast\"],char:\"🔊\",fitzpatrick_scale:false,category:\"symbols\"},mute:{keywords:[\"sound\",\"volume\",\"silence\",\"quiet\"],char:\"🔇\",fitzpatrick_scale:false,category:\"symbols\"},mega:{keywords:[\"sound\",\"speaker\",\"volume\"],char:\"📣\",fitzpatrick_scale:false,category:\"symbols\"},loudspeaker:{keywords:[\"volume\",\"sound\"],char:\"📢\",fitzpatrick_scale:false,category:\"symbols\"},bell:{keywords:[\"sound\",\"notification\",\"christmas\",\"xmas\",\"chime\"],char:\"🔔\",fitzpatrick_scale:false,category:\"symbols\"},no_bell:{keywords:[\"sound\",\"volume\",\"mute\",\"quiet\",\"silent\"],char:\"🔕\",fitzpatrick_scale:false,category:\"symbols\"},black_joker:{keywords:[\"poker\",\"cards\",\"game\",\"play\",\"magic\"],char:\"🃏\",fitzpatrick_scale:false,category:\"symbols\"},mahjong:{keywords:[\"game\",\"play\",\"chinese\",\"kanji\"],char:\"🀄\",fitzpatrick_scale:false,category:\"symbols\"},spades:{keywords:[\"poker\",\"cards\",\"suits\",\"magic\"],char:\"♠️\",fitzpatrick_scale:false,category:\"symbols\"},clubs:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"♣️\",fitzpatrick_scale:false,category:\"symbols\"},hearts:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"♥️\",fitzpatrick_scale:false,category:\"symbols\"},diamonds:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"♦️\",fitzpatrick_scale:false,category:\"symbols\"},flower_playing_cards:{keywords:[\"game\",\"sunset\",\"red\"],char:\"🎴\",fitzpatrick_scale:false,category:\"symbols\"},thought_balloon:{keywords:[\"bubble\",\"cloud\",\"speech\",\"thinking\",\"dream\"],char:\"💭\",fitzpatrick_scale:false,category:\"symbols\"},right_anger_bubble:{keywords:[\"caption\",\"speech\",\"thinking\",\"mad\"],char:\"🗯\",fitzpatrick_scale:false,category:\"symbols\"},speech_balloon:{keywords:[\"bubble\",\"words\",\"message\",\"talk\",\"chatting\"],char:\"💬\",fitzpatrick_scale:false,category:\"symbols\"},left_speech_bubble:{keywords:[\"words\",\"message\",\"talk\",\"chatting\"],char:\"🗨\",fitzpatrick_scale:false,category:\"symbols\"},clock1:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕐\",fitzpatrick_scale:false,category:\"symbols\"},clock2:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕑\",fitzpatrick_scale:false,category:\"symbols\"},clock3:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕒\",fitzpatrick_scale:false,category:\"symbols\"},clock4:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕓\",fitzpatrick_scale:false,category:\"symbols\"},clock5:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕔\",fitzpatrick_scale:false,category:\"symbols\"},clock6:{keywords:[\"time\",\"late\",\"early\",\"schedule\",\"dawn\",\"dusk\"],char:\"🕕\",fitzpatrick_scale:false,category:\"symbols\"},clock7:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕖\",fitzpatrick_scale:false,category:\"symbols\"},clock8:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕗\",fitzpatrick_scale:false,category:\"symbols\"},clock9:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕘\",fitzpatrick_scale:false,category:\"symbols\"},clock10:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕙\",fitzpatrick_scale:false,category:\"symbols\"},clock11:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕚\",fitzpatrick_scale:false,category:\"symbols\"},clock12:{keywords:[\"time\",\"noon\",\"midnight\",\"midday\",\"late\",\"early\",\"schedule\"],char:\"🕛\",fitzpatrick_scale:false,category:\"symbols\"},clock130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕜\",fitzpatrick_scale:false,category:\"symbols\"},clock230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕝\",fitzpatrick_scale:false,category:\"symbols\"},clock330:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕞\",fitzpatrick_scale:false,category:\"symbols\"},clock430:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕟\",fitzpatrick_scale:false,category:\"symbols\"},clock530:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕠\",fitzpatrick_scale:false,category:\"symbols\"},clock630:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕡\",fitzpatrick_scale:false,category:\"symbols\"},clock730:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕢\",fitzpatrick_scale:false,category:\"symbols\"},clock830:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕣\",fitzpatrick_scale:false,category:\"symbols\"},clock930:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕤\",fitzpatrick_scale:false,category:\"symbols\"},clock1030:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕥\",fitzpatrick_scale:false,category:\"symbols\"},clock1130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕦\",fitzpatrick_scale:false,category:\"symbols\"},clock1230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"🕧\",fitzpatrick_scale:false,category:\"symbols\"},afghanistan:{keywords:[\"af\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇫\",fitzpatrick_scale:false,category:\"flags\"},aland_islands:{keywords:[\"Åland\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇽\",fitzpatrick_scale:false,category:\"flags\"},albania:{keywords:[\"al\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇱\",fitzpatrick_scale:false,category:\"flags\"},algeria:{keywords:[\"dz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇩🇿\",fitzpatrick_scale:false,category:\"flags\"},american_samoa:{keywords:[\"american\",\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇸\",fitzpatrick_scale:false,category:\"flags\"},andorra:{keywords:[\"ad\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇩\",fitzpatrick_scale:false,category:\"flags\"},angola:{keywords:[\"ao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇴\",fitzpatrick_scale:false,category:\"flags\"},anguilla:{keywords:[\"ai\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇮\",fitzpatrick_scale:false,category:\"flags\"},antarctica:{keywords:[\"aq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇶\",fitzpatrick_scale:false,category:\"flags\"},antigua_barbuda:{keywords:[\"antigua\",\"barbuda\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇬\",fitzpatrick_scale:false,category:\"flags\"},argentina:{keywords:[\"ar\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇷\",fitzpatrick_scale:false,category:\"flags\"},armenia:{keywords:[\"am\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇲\",fitzpatrick_scale:false,category:\"flags\"},aruba:{keywords:[\"aw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇼\",fitzpatrick_scale:false,category:\"flags\"},australia:{keywords:[\"au\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇺\",fitzpatrick_scale:false,category:\"flags\"},austria:{keywords:[\"at\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇹\",fitzpatrick_scale:false,category:\"flags\"},azerbaijan:{keywords:[\"az\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇿\",fitzpatrick_scale:false,category:\"flags\"},bahamas:{keywords:[\"bs\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇸\",fitzpatrick_scale:false,category:\"flags\"},bahrain:{keywords:[\"bh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇭\",fitzpatrick_scale:false,category:\"flags\"},bangladesh:{keywords:[\"bd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇩\",fitzpatrick_scale:false,category:\"flags\"},barbados:{keywords:[\"bb\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇧\",fitzpatrick_scale:false,category:\"flags\"},belarus:{keywords:[\"by\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇾\",fitzpatrick_scale:false,category:\"flags\"},belgium:{keywords:[\"be\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇪\",fitzpatrick_scale:false,category:\"flags\"},belize:{keywords:[\"bz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇿\",fitzpatrick_scale:false,category:\"flags\"},benin:{keywords:[\"bj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇯\",fitzpatrick_scale:false,category:\"flags\"},bermuda:{keywords:[\"bm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇲\",fitzpatrick_scale:false,category:\"flags\"},bhutan:{keywords:[\"bt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇹\",fitzpatrick_scale:false,category:\"flags\"},bolivia:{keywords:[\"bo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇴\",fitzpatrick_scale:false,category:\"flags\"},caribbean_netherlands:{keywords:[\"bonaire\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇶\",fitzpatrick_scale:false,category:\"flags\"},bosnia_herzegovina:{keywords:[\"bosnia\",\"herzegovina\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇦\",fitzpatrick_scale:false,category:\"flags\"},botswana:{keywords:[\"bw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇼\",fitzpatrick_scale:false,category:\"flags\"},brazil:{keywords:[\"br\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇷\",fitzpatrick_scale:false,category:\"flags\"},british_indian_ocean_territory:{keywords:[\"british\",\"indian\",\"ocean\",\"territory\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇴\",fitzpatrick_scale:false,category:\"flags\"},british_virgin_islands:{keywords:[\"british\",\"virgin\",\"islands\",\"bvi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇬\",fitzpatrick_scale:false,category:\"flags\"},brunei:{keywords:[\"bn\",\"darussalam\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇳\",fitzpatrick_scale:false,category:\"flags\"},bulgaria:{keywords:[\"bg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇬\",fitzpatrick_scale:false,category:\"flags\"},burkina_faso:{keywords:[\"burkina\",\"faso\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇫\",fitzpatrick_scale:false,category:\"flags\"},burundi:{keywords:[\"bi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇮\",fitzpatrick_scale:false,category:\"flags\"},cape_verde:{keywords:[\"cabo\",\"verde\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇻\",fitzpatrick_scale:false,category:\"flags\"},cambodia:{keywords:[\"kh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇭\",fitzpatrick_scale:false,category:\"flags\"},cameroon:{keywords:[\"cm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇲\",fitzpatrick_scale:false,category:\"flags\"},canada:{keywords:[\"ca\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇦\",fitzpatrick_scale:false,category:\"flags\"},canary_islands:{keywords:[\"canary\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇨\",fitzpatrick_scale:false,category:\"flags\"},cayman_islands:{keywords:[\"cayman\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇾\",fitzpatrick_scale:false,category:\"flags\"},central_african_republic:{keywords:[\"central\",\"african\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇫\",fitzpatrick_scale:false,category:\"flags\"},chad:{keywords:[\"td\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇩\",fitzpatrick_scale:false,category:\"flags\"},chile:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇱\",fitzpatrick_scale:false,category:\"flags\"},cn:{keywords:[\"china\",\"chinese\",\"prc\",\"flag\",\"country\",\"nation\",\"banner\"],char:\"🇨🇳\",fitzpatrick_scale:false,category:\"flags\"},christmas_island:{keywords:[\"christmas\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇽\",fitzpatrick_scale:false,category:\"flags\"},cocos_islands:{keywords:[\"cocos\",\"keeling\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇨\",fitzpatrick_scale:false,category:\"flags\"},colombia:{keywords:[\"co\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇴\",fitzpatrick_scale:false,category:\"flags\"},comoros:{keywords:[\"km\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇲\",fitzpatrick_scale:false,category:\"flags\"},congo_brazzaville:{keywords:[\"congo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇬\",fitzpatrick_scale:false,category:\"flags\"},congo_kinshasa:{keywords:[\"congo\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇩\",fitzpatrick_scale:false,category:\"flags\"},cook_islands:{keywords:[\"cook\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇰\",fitzpatrick_scale:false,category:\"flags\"},costa_rica:{keywords:[\"costa\",\"rica\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇷\",fitzpatrick_scale:false,category:\"flags\"},croatia:{keywords:[\"hr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇭🇷\",fitzpatrick_scale:false,category:\"flags\"},cuba:{keywords:[\"cu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇺\",fitzpatrick_scale:false,category:\"flags\"},curacao:{keywords:[\"curaçao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇼\",fitzpatrick_scale:false,category:\"flags\"},cyprus:{keywords:[\"cy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇾\",fitzpatrick_scale:false,category:\"flags\"},czech_republic:{keywords:[\"cz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇿\",fitzpatrick_scale:false,category:\"flags\"},denmark:{keywords:[\"dk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇩🇰\",fitzpatrick_scale:false,category:\"flags\"},djibouti:{keywords:[\"dj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇩🇯\",fitzpatrick_scale:false,category:\"flags\"},dominica:{keywords:[\"dm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇩🇲\",fitzpatrick_scale:false,category:\"flags\"},dominican_republic:{keywords:[\"dominican\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇩🇴\",fitzpatrick_scale:false,category:\"flags\"},ecuador:{keywords:[\"ec\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇨\",fitzpatrick_scale:false,category:\"flags\"},egypt:{keywords:[\"eg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇬\",fitzpatrick_scale:false,category:\"flags\"},el_salvador:{keywords:[\"el\",\"salvador\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇻\",fitzpatrick_scale:false,category:\"flags\"},equatorial_guinea:{keywords:[\"equatorial\",\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇶\",fitzpatrick_scale:false,category:\"flags\"},eritrea:{keywords:[\"er\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇷\",fitzpatrick_scale:false,category:\"flags\"},estonia:{keywords:[\"ee\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇪\",fitzpatrick_scale:false,category:\"flags\"},ethiopia:{keywords:[\"et\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇹\",fitzpatrick_scale:false,category:\"flags\"},eu:{keywords:[\"european\",\"union\",\"flag\",\"banner\"],char:\"🇪🇺\",fitzpatrick_scale:false,category:\"flags\"},falkland_islands:{keywords:[\"falkland\",\"islands\",\"malvinas\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇫🇰\",fitzpatrick_scale:false,category:\"flags\"},faroe_islands:{keywords:[\"faroe\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇫🇴\",fitzpatrick_scale:false,category:\"flags\"},fiji:{keywords:[\"fj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇫🇯\",fitzpatrick_scale:false,category:\"flags\"},finland:{keywords:[\"fi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇫🇮\",fitzpatrick_scale:false,category:\"flags\"},fr:{keywords:[\"banner\",\"flag\",\"nation\",\"france\",\"french\",\"country\"],char:\"🇫🇷\",fitzpatrick_scale:false,category:\"flags\"},french_guiana:{keywords:[\"french\",\"guiana\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇫\",fitzpatrick_scale:false,category:\"flags\"},french_polynesia:{keywords:[\"french\",\"polynesia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇫\",fitzpatrick_scale:false,category:\"flags\"},french_southern_territories:{keywords:[\"french\",\"southern\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇫\",fitzpatrick_scale:false,category:\"flags\"},gabon:{keywords:[\"ga\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇦\",fitzpatrick_scale:false,category:\"flags\"},gambia:{keywords:[\"gm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇲\",fitzpatrick_scale:false,category:\"flags\"},georgia:{keywords:[\"ge\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇪\",fitzpatrick_scale:false,category:\"flags\"},de:{keywords:[\"german\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"🇩🇪\",fitzpatrick_scale:false,category:\"flags\"},ghana:{keywords:[\"gh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇭\",fitzpatrick_scale:false,category:\"flags\"},gibraltar:{keywords:[\"gi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇮\",fitzpatrick_scale:false,category:\"flags\"},greece:{keywords:[\"gr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇷\",fitzpatrick_scale:false,category:\"flags\"},greenland:{keywords:[\"gl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇱\",fitzpatrick_scale:false,category:\"flags\"},grenada:{keywords:[\"gd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇩\",fitzpatrick_scale:false,category:\"flags\"},guadeloupe:{keywords:[\"gp\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇵\",fitzpatrick_scale:false,category:\"flags\"},guam:{keywords:[\"gu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇺\",fitzpatrick_scale:false,category:\"flags\"},guatemala:{keywords:[\"gt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇹\",fitzpatrick_scale:false,category:\"flags\"},guernsey:{keywords:[\"gg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇬\",fitzpatrick_scale:false,category:\"flags\"},guinea:{keywords:[\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇳\",fitzpatrick_scale:false,category:\"flags\"},guinea_bissau:{keywords:[\"gw\",\"bissau\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇼\",fitzpatrick_scale:false,category:\"flags\"},guyana:{keywords:[\"gy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇾\",fitzpatrick_scale:false,category:\"flags\"},haiti:{keywords:[\"ht\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇭🇹\",fitzpatrick_scale:false,category:\"flags\"},honduras:{keywords:[\"hn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇭🇳\",fitzpatrick_scale:false,category:\"flags\"},hong_kong:{keywords:[\"hong\",\"kong\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇭🇰\",fitzpatrick_scale:false,category:\"flags\"},hungary:{keywords:[\"hu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇭🇺\",fitzpatrick_scale:false,category:\"flags\"},iceland:{keywords:[\"is\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇸\",fitzpatrick_scale:false,category:\"flags\"},india:{keywords:[\"in\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇳\",fitzpatrick_scale:false,category:\"flags\"},indonesia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇩\",fitzpatrick_scale:false,category:\"flags\"},iran:{keywords:[\"iran,\",\"islamic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇷\",fitzpatrick_scale:false,category:\"flags\"},iraq:{keywords:[\"iq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇶\",fitzpatrick_scale:false,category:\"flags\"},ireland:{keywords:[\"ie\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇪\",fitzpatrick_scale:false,category:\"flags\"},isle_of_man:{keywords:[\"isle\",\"man\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇲\",fitzpatrick_scale:false,category:\"flags\"},israel:{keywords:[\"il\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇱\",fitzpatrick_scale:false,category:\"flags\"},it:{keywords:[\"italy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇮🇹\",fitzpatrick_scale:false,category:\"flags\"},cote_divoire:{keywords:[\"ivory\",\"coast\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇮\",fitzpatrick_scale:false,category:\"flags\"},jamaica:{keywords:[\"jm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇯🇲\",fitzpatrick_scale:false,category:\"flags\"},jp:{keywords:[\"japanese\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"🇯🇵\",fitzpatrick_scale:false,category:\"flags\"},jersey:{keywords:[\"je\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇯🇪\",fitzpatrick_scale:false,category:\"flags\"},jordan:{keywords:[\"jo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇯🇴\",fitzpatrick_scale:false,category:\"flags\"},kazakhstan:{keywords:[\"kz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇿\",fitzpatrick_scale:false,category:\"flags\"},kenya:{keywords:[\"ke\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇪\",fitzpatrick_scale:false,category:\"flags\"},kiribati:{keywords:[\"ki\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇮\",fitzpatrick_scale:false,category:\"flags\"},kosovo:{keywords:[\"xk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇽🇰\",fitzpatrick_scale:false,category:\"flags\"},kuwait:{keywords:[\"kw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇼\",fitzpatrick_scale:false,category:\"flags\"},kyrgyzstan:{keywords:[\"kg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇬\",fitzpatrick_scale:false,category:\"flags\"},laos:{keywords:[\"lao\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇦\",fitzpatrick_scale:false,category:\"flags\"},latvia:{keywords:[\"lv\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇻\",fitzpatrick_scale:false,category:\"flags\"},lebanon:{keywords:[\"lb\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇧\",fitzpatrick_scale:false,category:\"flags\"},lesotho:{keywords:[\"ls\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇸\",fitzpatrick_scale:false,category:\"flags\"},liberia:{keywords:[\"lr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇷\",fitzpatrick_scale:false,category:\"flags\"},libya:{keywords:[\"ly\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇾\",fitzpatrick_scale:false,category:\"flags\"},liechtenstein:{keywords:[\"li\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇮\",fitzpatrick_scale:false,category:\"flags\"},lithuania:{keywords:[\"lt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇹\",fitzpatrick_scale:false,category:\"flags\"},luxembourg:{keywords:[\"lu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇺\",fitzpatrick_scale:false,category:\"flags\"},macau:{keywords:[\"macao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇴\",fitzpatrick_scale:false,category:\"flags\"},macedonia:{keywords:[\"macedonia,\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇰\",fitzpatrick_scale:false,category:\"flags\"},madagascar:{keywords:[\"mg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇬\",fitzpatrick_scale:false,category:\"flags\"},malawi:{keywords:[\"mw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇼\",fitzpatrick_scale:false,category:\"flags\"},malaysia:{keywords:[\"my\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇾\",fitzpatrick_scale:false,category:\"flags\"},maldives:{keywords:[\"mv\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇻\",fitzpatrick_scale:false,category:\"flags\"},mali:{keywords:[\"ml\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇱\",fitzpatrick_scale:false,category:\"flags\"},malta:{keywords:[\"mt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇹\",fitzpatrick_scale:false,category:\"flags\"},marshall_islands:{keywords:[\"marshall\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇭\",fitzpatrick_scale:false,category:\"flags\"},martinique:{keywords:[\"mq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇶\",fitzpatrick_scale:false,category:\"flags\"},mauritania:{keywords:[\"mr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇷\",fitzpatrick_scale:false,category:\"flags\"},mauritius:{keywords:[\"mu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇺\",fitzpatrick_scale:false,category:\"flags\"},mayotte:{keywords:[\"yt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇾🇹\",fitzpatrick_scale:false,category:\"flags\"},mexico:{keywords:[\"mx\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇽\",fitzpatrick_scale:false,category:\"flags\"},micronesia:{keywords:[\"micronesia,\",\"federated\",\"states\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇫🇲\",fitzpatrick_scale:false,category:\"flags\"},moldova:{keywords:[\"moldova,\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇩\",fitzpatrick_scale:false,category:\"flags\"},monaco:{keywords:[\"mc\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇨\",fitzpatrick_scale:false,category:\"flags\"},mongolia:{keywords:[\"mn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇳\",fitzpatrick_scale:false,category:\"flags\"},montenegro:{keywords:[\"me\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇪\",fitzpatrick_scale:false,category:\"flags\"},montserrat:{keywords:[\"ms\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇸\",fitzpatrick_scale:false,category:\"flags\"},morocco:{keywords:[\"ma\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇦\",fitzpatrick_scale:false,category:\"flags\"},mozambique:{keywords:[\"mz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇿\",fitzpatrick_scale:false,category:\"flags\"},myanmar:{keywords:[\"mm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇲\",fitzpatrick_scale:false,category:\"flags\"},namibia:{keywords:[\"na\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇦\",fitzpatrick_scale:false,category:\"flags\"},nauru:{keywords:[\"nr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇷\",fitzpatrick_scale:false,category:\"flags\"},nepal:{keywords:[\"np\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇵\",fitzpatrick_scale:false,category:\"flags\"},netherlands:{keywords:[\"nl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇱\",fitzpatrick_scale:false,category:\"flags\"},new_caledonia:{keywords:[\"new\",\"caledonia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇨\",fitzpatrick_scale:false,category:\"flags\"},new_zealand:{keywords:[\"new\",\"zealand\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇿\",fitzpatrick_scale:false,category:\"flags\"},nicaragua:{keywords:[\"ni\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇮\",fitzpatrick_scale:false,category:\"flags\"},niger:{keywords:[\"ne\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇪\",fitzpatrick_scale:false,category:\"flags\"},nigeria:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇬\",fitzpatrick_scale:false,category:\"flags\"},niue:{keywords:[\"nu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇺\",fitzpatrick_scale:false,category:\"flags\"},norfolk_island:{keywords:[\"norfolk\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇫\",fitzpatrick_scale:false,category:\"flags\"},northern_mariana_islands:{keywords:[\"northern\",\"mariana\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇲🇵\",fitzpatrick_scale:false,category:\"flags\"},north_korea:{keywords:[\"north\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"🇰🇵\",fitzpatrick_scale:false,category:\"flags\"},norway:{keywords:[\"no\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇳🇴\",fitzpatrick_scale:false,category:\"flags\"},oman:{keywords:[\"om_symbol\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇴🇲\",fitzpatrick_scale:false,category:\"flags\"},pakistan:{keywords:[\"pk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇰\",fitzpatrick_scale:false,category:\"flags\"},palau:{keywords:[\"pw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇼\",fitzpatrick_scale:false,category:\"flags\"},palestinian_territories:{keywords:[\"palestine\",\"palestinian\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇸\",fitzpatrick_scale:false,category:\"flags\"},panama:{keywords:[\"pa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇦\",fitzpatrick_scale:false,category:\"flags\"},papua_new_guinea:{keywords:[\"papua\",\"new\",\"guinea\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇬\",fitzpatrick_scale:false,category:\"flags\"},paraguay:{keywords:[\"py\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇾\",fitzpatrick_scale:false,category:\"flags\"},peru:{keywords:[\"pe\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇪\",fitzpatrick_scale:false,category:\"flags\"},philippines:{keywords:[\"ph\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇭\",fitzpatrick_scale:false,category:\"flags\"},pitcairn_islands:{keywords:[\"pitcairn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇳\",fitzpatrick_scale:false,category:\"flags\"},poland:{keywords:[\"pl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇱\",fitzpatrick_scale:false,category:\"flags\"},portugal:{keywords:[\"pt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇹\",fitzpatrick_scale:false,category:\"flags\"},puerto_rico:{keywords:[\"puerto\",\"rico\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇷\",fitzpatrick_scale:false,category:\"flags\"},qatar:{keywords:[\"qa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇶🇦\",fitzpatrick_scale:false,category:\"flags\"},reunion:{keywords:[\"réunion\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇷🇪\",fitzpatrick_scale:false,category:\"flags\"},romania:{keywords:[\"ro\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇷🇴\",fitzpatrick_scale:false,category:\"flags\"},ru:{keywords:[\"russian\",\"federation\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇷🇺\",fitzpatrick_scale:false,category:\"flags\"},rwanda:{keywords:[\"rw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇷🇼\",fitzpatrick_scale:false,category:\"flags\"},st_barthelemy:{keywords:[\"saint\",\"barthélemy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇧🇱\",fitzpatrick_scale:false,category:\"flags\"},st_helena:{keywords:[\"saint\",\"helena\",\"ascension\",\"tristan\",\"cunha\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇭\",fitzpatrick_scale:false,category:\"flags\"},st_kitts_nevis:{keywords:[\"saint\",\"kitts\",\"nevis\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇰🇳\",fitzpatrick_scale:false,category:\"flags\"},st_lucia:{keywords:[\"saint\",\"lucia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇨\",fitzpatrick_scale:false,category:\"flags\"},st_pierre_miquelon:{keywords:[\"saint\",\"pierre\",\"miquelon\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇵🇲\",fitzpatrick_scale:false,category:\"flags\"},st_vincent_grenadines:{keywords:[\"saint\",\"vincent\",\"grenadines\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇨\",fitzpatrick_scale:false,category:\"flags\"},samoa:{keywords:[\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇼🇸\",fitzpatrick_scale:false,category:\"flags\"},san_marino:{keywords:[\"san\",\"marino\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇲\",fitzpatrick_scale:false,category:\"flags\"},sao_tome_principe:{keywords:[\"sao\",\"tome\",\"principe\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇹\",fitzpatrick_scale:false,category:\"flags\"},saudi_arabia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇦\",fitzpatrick_scale:false,category:\"flags\"},senegal:{keywords:[\"sn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇳\",fitzpatrick_scale:false,category:\"flags\"},serbia:{keywords:[\"rs\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇷🇸\",fitzpatrick_scale:false,category:\"flags\"},seychelles:{keywords:[\"sc\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇨\",fitzpatrick_scale:false,category:\"flags\"},sierra_leone:{keywords:[\"sierra\",\"leone\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇱\",fitzpatrick_scale:false,category:\"flags\"},singapore:{keywords:[\"sg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇬\",fitzpatrick_scale:false,category:\"flags\"},sint_maarten:{keywords:[\"sint\",\"maarten\",\"dutch\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇽\",fitzpatrick_scale:false,category:\"flags\"},slovakia:{keywords:[\"sk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇰\",fitzpatrick_scale:false,category:\"flags\"},slovenia:{keywords:[\"si\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇮\",fitzpatrick_scale:false,category:\"flags\"},solomon_islands:{keywords:[\"solomon\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇧\",fitzpatrick_scale:false,category:\"flags\"},somalia:{keywords:[\"so\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇴\",fitzpatrick_scale:false,category:\"flags\"},south_africa:{keywords:[\"south\",\"africa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇿🇦\",fitzpatrick_scale:false,category:\"flags\"},south_georgia_south_sandwich_islands:{keywords:[\"south\",\"georgia\",\"sandwich\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇬🇸\",fitzpatrick_scale:false,category:\"flags\"},kr:{keywords:[\"south\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"🇰🇷\",fitzpatrick_scale:false,category:\"flags\"},south_sudan:{keywords:[\"south\",\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇸\",fitzpatrick_scale:false,category:\"flags\"},es:{keywords:[\"spain\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇸\",fitzpatrick_scale:false,category:\"flags\"},sri_lanka:{keywords:[\"sri\",\"lanka\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇱🇰\",fitzpatrick_scale:false,category:\"flags\"},sudan:{keywords:[\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇩\",fitzpatrick_scale:false,category:\"flags\"},suriname:{keywords:[\"sr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇷\",fitzpatrick_scale:false,category:\"flags\"},swaziland:{keywords:[\"sz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇿\",fitzpatrick_scale:false,category:\"flags\"},sweden:{keywords:[\"se\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇪\",fitzpatrick_scale:false,category:\"flags\"},switzerland:{keywords:[\"ch\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇨🇭\",fitzpatrick_scale:false,category:\"flags\"},syria:{keywords:[\"syrian\",\"arab\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇸🇾\",fitzpatrick_scale:false,category:\"flags\"},taiwan:{keywords:[\"tw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇼\",fitzpatrick_scale:false,category:\"flags\"},tajikistan:{keywords:[\"tj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇯\",fitzpatrick_scale:false,category:\"flags\"},tanzania:{keywords:[\"tanzania,\",\"united\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇿\",fitzpatrick_scale:false,category:\"flags\"},thailand:{keywords:[\"th\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇭\",fitzpatrick_scale:false,category:\"flags\"},timor_leste:{keywords:[\"timor\",\"leste\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇱\",fitzpatrick_scale:false,category:\"flags\"},togo:{keywords:[\"tg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇬\",fitzpatrick_scale:false,category:\"flags\"},tokelau:{keywords:[\"tk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇰\",fitzpatrick_scale:false,category:\"flags\"},tonga:{keywords:[\"to\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇴\",fitzpatrick_scale:false,category:\"flags\"},trinidad_tobago:{keywords:[\"trinidad\",\"tobago\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇹\",fitzpatrick_scale:false,category:\"flags\"},tunisia:{keywords:[\"tn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇳\",fitzpatrick_scale:false,category:\"flags\"},tr:{keywords:[\"turkey\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇷\",fitzpatrick_scale:false,category:\"flags\"},turkmenistan:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇲\",fitzpatrick_scale:false,category:\"flags\"},turks_caicos_islands:{keywords:[\"turks\",\"caicos\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇨\",fitzpatrick_scale:false,category:\"flags\"},tuvalu:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇹🇻\",fitzpatrick_scale:false,category:\"flags\"},uganda:{keywords:[\"ug\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇺🇬\",fitzpatrick_scale:false,category:\"flags\"},ukraine:{keywords:[\"ua\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇺🇦\",fitzpatrick_scale:false,category:\"flags\"},united_arab_emirates:{keywords:[\"united\",\"arab\",\"emirates\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇦🇪\",fitzpatrick_scale:false,category:\"flags\"},uk:{keywords:[\"united\",\"kingdom\",\"great\",\"britain\",\"northern\",\"ireland\",\"flag\",\"nation\",\"country\",\"banner\",\"british\",\"UK\",\"english\",\"england\",\"union jack\"],char:\"🇬🇧\",fitzpatrick_scale:false,category:\"flags\"},england:{keywords:[\"flag\",\"english\"],char:\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",fitzpatrick_scale:false,category:\"flags\"},scotland:{keywords:[\"flag\",\"scottish\"],char:\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",fitzpatrick_scale:false,category:\"flags\"},wales:{keywords:[\"flag\",\"welsh\"],char:\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",fitzpatrick_scale:false,category:\"flags\"},us:{keywords:[\"united\",\"states\",\"america\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇺🇸\",fitzpatrick_scale:false,category:\"flags\"},us_virgin_islands:{keywords:[\"virgin\",\"islands\",\"us\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇮\",fitzpatrick_scale:false,category:\"flags\"},uruguay:{keywords:[\"uy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇺🇾\",fitzpatrick_scale:false,category:\"flags\"},uzbekistan:{keywords:[\"uz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇺🇿\",fitzpatrick_scale:false,category:\"flags\"},vanuatu:{keywords:[\"vu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇺\",fitzpatrick_scale:false,category:\"flags\"},vatican_city:{keywords:[\"vatican\",\"city\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇦\",fitzpatrick_scale:false,category:\"flags\"},venezuela:{keywords:[\"ve\",\"bolivarian\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇪\",fitzpatrick_scale:false,category:\"flags\"},vietnam:{keywords:[\"viet\",\"nam\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇻🇳\",fitzpatrick_scale:false,category:\"flags\"},wallis_futuna:{keywords:[\"wallis\",\"futuna\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇼🇫\",fitzpatrick_scale:false,category:\"flags\"},western_sahara:{keywords:[\"western\",\"sahara\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇪🇭\",fitzpatrick_scale:false,category:\"flags\"},yemen:{keywords:[\"ye\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇾🇪\",fitzpatrick_scale:false,category:\"flags\"},zambia:{keywords:[\"zm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇿🇲\",fitzpatrick_scale:false,category:\"flags\"},zimbabwe:{keywords:[\"zw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"🇿🇼\",fitzpatrick_scale:false,category:\"flags\"},united_nations:{keywords:[\"un\",\"flag\",\"banner\"],char:\"🇺🇳\",fitzpatrick_scale:false,category:\"flags\"},pirate_flag:{keywords:[\"skull\",\"crossbones\",\"flag\",\"banner\"],char:\"🏴‍☠️\",fitzpatrick_scale:false,category:\"flags\"}});"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ar.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar',\n'<h1>بدء التنقل بواسطة لوحة المفاتيح</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>التركيز على شريط القوائم</dt>\\n' +\n  '  <dd>نظاما التشغيل Windows أو Linux: Alt + F9</dd>\\n' +\n  '  <dd>نظام التشغيل macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>التركيز على شريط الأدوات</dt>\\n' +\n  '  <dd>نظاما التشغيل Windows أو Linux: Alt + F10</dd>\\n' +\n  '  <dd>نظام التشغيل macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>التركيز على التذييل</dt>\\n' +\n  '  <dd>نظاما التشغيل Windows أو Linux: Alt + F11</dd>\\n' +\n  '  <dd>نظام التشغيل macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>التركيز على شريط أدوات السياق</dt>\\n' +\n  '  <dd>أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\\n' +\n  '  مسار عنصر التذييل.</p>\\n' +\n  '\\n' +\n  '<h1>التنقل بين أقسام واجهة المستخدم</h1>\\n' +\n  '\\n' +\n  '<p>للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>ترتيب علامات <strong>Tab</strong> لأقسام واجهة المستخدم هذه هو:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>شريط القوائم</li>\\n' +\n  '  <li>كل مجموعة شريط الأدوات</li>\\n' +\n  '  <li>الشريط الجانبي</li>\\n' +\n  '  <li>مسار العنصر في التذييل</li>\\n' +\n  '  <li>زر تبديل عدد الكلمات في التذييل</li>\\n' +\n  '  <li>رابط إدراج العلامة التجارية في التذييل</li>\\n' +\n  '  <li>مؤشر تغيير حجم المحرر في التذييل</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.</p>\\n' +\n  '\\n' +\n  '<p>إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على <strong>Shift+Tab</strong>\\n' +\n  '  ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.</p>\\n' +\n  '\\n' +\n  '<h1>التنقل بين أقسام واجهة المستخدم</h1>\\n' +\n  '\\n' +\n  '<p>للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح <strong>السهم</strong> المناسب.</p>\\n' +\n  '\\n' +\n  '<p>مفتاحا السهمين <strong>اليسار‎</strong> و<strong>اليمين‎</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>التنقل بين القوائم في شريط القوائم.</li>\\n' +\n  '  <li>فتح قائمة فرعية في القائمة.</li>\\n' +\n  '  <li>التنقل بين الأزرار في مجموعة شريط الأدوات.</li>\\n' +\n  '  <li>التنقل بين العناصر في مسار عنصر التذييل.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>مفتاحا السهمين <strong>لأسفل‎</strong> و<strong>لأعلى‎</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>التنقل بين عناصر القائمة في القائمة.</li>\\n' +\n  '  <li>التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>دورة مفاتيح <strong>الأسهم‎</strong> داخل قسم واجهة المستخدم التي تم التركيز عليها.</p>\\n' +\n  '\\n' +\n  '<p>لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>إذا كان التركيز الحالي على \"الجزء العلوي\" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح <strong>Esc</strong> يؤدي أيضًا إلى الخروج\\n' +\n  '  من التنقل بواسطة لوحة المفاتيح بالكامل.</p>\\n' +\n  '\\n' +\n  '<h1>تنفيذ عنصر قائمة أو زر شريط أدوات</h1>\\n' +\n  '\\n' +\n  '<p>عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر <strong>Return</strong>، أو <strong>Enter</strong>،\\n' +\n  '  أو <strong>مفتاح المسافة</strong> لتنفيذ العنصر.</p>\\n' +\n  '\\n' +\n  '<h1>التنقل في مربعات الحوار غير المبوبة</h1>\\n' +\n  '\\n' +\n  '<p>في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.</p>\\n' +\n  '\\n' +\n  '<p>التنقل بين مكونات الحوار التفاعلي بالضغط على زر <strong>Tab</strong> أو <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>التنقل في مربعات الحوار المبوبة</h1>\\n' +\n  '\\n' +\n  '<p>في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.</p>\\n' +\n  '\\n' +\n  '<p>التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر <strong>Tab</strong> أو\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر <strong>السهم</strong> المناسب\\n' +\n  '  مفتاح للتنقل بين علامات التبويب المتاحة.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/bg_BG.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG',\n'<h1>Начало на навигацията с клавиатурата</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Фокусиране върху лентата с менюта</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Фокусиране върху лентата с инструменти</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Фокусиране върху долния колонтитул</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Фокусиране върху контекстуалната лента с инструменти</dt>\\n' +\n  '  <dd>Windows, Linux или macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\\n' +\n  '  пътя до елемента в долния колонтитул.</p>\\n' +\n  '\\n' +\n  '<h1>Навигиране между раздели на ПИ</h1>\\n' +\n  '\\n' +\n  '<p>За да преминете от един раздел на ПИ към следващия, натиснете <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>За да преминете от един раздел на ПИ към предишния, натиснете <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Редът за <strong>обхождане с табулация</strong> на тези раздели на ПИ е:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Лентата с менюта</li>\\n' +\n  '  <li>Всяка група на лентата с инструменти</li>\\n' +\n  '  <li>Страничната лента</li>\\n' +\n  '  <li>Пътят до елемента в долния колонтитул</li>\\n' +\n  '  <li>Бутонът за превключване на броя на думите в долния колонтитул</li>\\n' +\n  '  <li>Връзката за търговска марка в долния колонтитул</li>\\n' +\n  '  <li>Манипулаторът за преоразмеряване на редактора в долния колонтитул</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Ако някой раздел на ПИ липсва, той се пропуска.</p>\\n' +\n  '\\n' +\n  '<p>Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на <strong>Shift+Tab</strong>\\n' +\n  '  премества фокуса към първата група на лентата с инструменти, а не към последната.</p>\\n' +\n  '\\n' +\n  '<h1>Навигиране в разделите на ПИ</h1>\\n' +\n  '\\n' +\n  '<p>За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със <strong>стрелка</strong>.</p>\\n' +\n  '\\n' +\n  '<p>С клавишите със стрелка <strong>наляво</strong> и <strong>надясно</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>се придвижвате между менютата в лентата с менюто;</li>\\n' +\n  '  <li>отваряте подменю в меню;</li>\\n' +\n  '  <li>се придвижвате между бутоните в група на лентата с инструменти;</li>\\n' +\n  '  <li>се придвижвате между елементи в пътя до елемент в долния колонтитул.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>С клавишите със стрелка <strong>надолу</strong> и <strong>нагоре</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>се придвижвате между елементите от менюто в дадено меню;</li>\\n' +\n  '  <li>се придвижвате между елементите в изскачащо меню на лентата с инструменти.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Клавишите със <strong>стрелки</strong> се придвижват в рамките на фокусирания раздел на ПИ.</p>\\n' +\n  '\\n' +\n  '<p>За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша <strong>Esc</strong> също излиза\\n' +\n  '  напълно от навигацията с клавиатурата.</p>\\n' +\n  '\\n' +\n  '<h1>Изпълнение на елемент от менюто или бутон от лентата с инструменти</h1>\\n' +\n  '\\n' +\n  '<p>Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  или <strong>клавиша за интервал</strong>, за да изпълните елемента.</p>\\n' +\n  '\\n' +\n  '<h1>Навигиране в диалогови прозорци без раздели</h1>\\n' +\n  '\\n' +\n  '<p>В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.</p>\\n' +\n  '\\n' +\n  '<p>Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете <strong>Tab</strong> или <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Навигиране в диалогови прозорци с раздели</h1>\\n' +\n  '\\n' +\n  '<p>В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.</p>\\n' +\n  '\\n' +\n  '<p>Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете <strong>Tab</strong> или\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със <strong>стрелка</strong>,\\n' +\n  '  за да преминете през наличните раздели.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ca.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca',\n'<h1>Inici de la navegació amb el teclat</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Enfocar la barra de menús</dt>\\n' +\n  '  <dd>Windows o Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  \"  <dt>Enfocar la barra d'eines</dt>\\n\" +\n  '  <dd>Windows o Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Enfocar el peu de pàgina</dt>\\n' +\n  '  <dd>Windows o Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  \"  <dt>Enfocar una barra d'eines contextual</dt>\\n\" +\n  '  <dd>Windows, Linux o macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  \"<p>La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\\n\" +\n  \"  la ruta de l'element de peu de pàgina.</p>\\n\" +\n  '\\n' +\n  \"<h1>Navegació entre seccions de la interfície d'usuari</h1>\\n\" +\n  '\\n' +\n  \"<p>Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla <strong>Tab</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles <strong>Maj+Tab</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>L'ordre en prémer la tecla <strong>Tab</strong> d'aquestes secciones de la interfície d'usuari és:</p>\\n\" +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barra de menús</li>\\n' +\n  \"  <li>Cada grup de la barra d'eines</li>\\n\" +\n  '  <li>Barra lateral</li>\\n' +\n  \"  <li>Ruta de l'element del peu de pàgina</li>\\n\" +\n  '  <li>Botó de commutació de recompte de paraules al peu de pàgina</li>\\n' +\n  '  <li>Enllaç de marca del peu de pàgina</li>\\n' +\n  \"  <li>Control de canvi de mida de l'editor al peu de pàgina</li>\\n\" +\n  '</ol>\\n' +\n  '\\n' +\n  \"<p>Si no hi ha una secció de la interfície d'usuari, s'ometrà.</p>\\n\" +\n  '\\n' +\n  '<p>Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer <strong>Maj+Tab</strong>\\n' +\n  \"  el focus es mou al primer grup de la barra d'eines, no l'últim.</p>\\n\" +\n  '\\n' +\n  \"<h1>Navegació dins de les seccions de la interfície d'usuari</h1>\\n\" +\n  '\\n' +\n  \"<p>Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de <strong>Fletxa</strong> adequada.</p>\\n\" +\n  '\\n' +\n  '<p>Les tecles de fletxa <strong>Esquerra</strong> i <strong>Dreta</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>us permeten desplaçar-vos entre menús de la barra de menús.</li>\\n' +\n  '  <li>obren un submenú en un menú.</li>\\n' +\n  \"  <li>us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.</li>\\n\" +\n  \"  <li>us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.</li>\\n\" +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Les tecles de fletxa <strong>Avall</strong> i <strong>Amunt</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  \"  <li>us permeten desplaçar-vos entre elements de menú d'un menú.</li>\\n\" +\n  \"  <li>us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.</li>\\n\" +\n  '</ul>\\n' +\n  '\\n' +\n  \"<p>Les tecles de <strong>Fletxa</strong> us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.</p>\\n\" +\n  '\\n' +\n  '<p>Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Si el focus actual es troba a la ‘part superior’ d'una secció específica de la interfície d'usuari, en prémer la tecla <strong>Esc</strong> també es tanca\\n\" +\n  '  completament la navegació amb el teclat.</p>\\n' +\n  '\\n' +\n  \"<h1>Execució d'un element de menú o d'un botó de la barra d'eines</h1>\\n\" +\n  '\\n' +\n  \"<p>Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu <strong>Retorn</strong>, <strong>Intro</strong>\\n\" +\n  \"  o la <strong>barra d'espai</strong> per executar l'element.</p>\\n\" +\n  '\\n' +\n  '<h1>Navegació per quadres de diàleg sense pestanyes</h1>\\n' +\n  '\\n' +\n  \"<p>En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.</p>\\n\" +\n  '\\n' +\n  '<p>Premeu la tecla <strong>Tab</strong> o les tecles <strong>Maj+Tab</strong> per desplaçar-vos entre components interactius del quadre de diàleg.</p>\\n' +\n  '\\n' +\n  '<h1>Navegació per quadres de diàleg amb pestanyes</h1>\\n' +\n  '\\n' +\n  \"<p>En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.</p>\\n\" +\n  '\\n' +\n  \"<p>Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla <strong>Tab</strong> o\\n\" +\n  '  les tecles <strong>Maj+Tab</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla <strong>Fletxa</strong> adequada\\n\" +\n  '  per canviar entre les pestanyes disponibles.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/cs.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs',\n'<h1>Začínáme navigovat pomocí klávesnice</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Přejít na řádek nabídek</dt>\\n' +\n  '  <dd>Windows nebo Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Přejít na panel nástrojů</dt>\\n' +\n  '  <dd>Windows nebo Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Přejít na zápatí</dt>\\n' +\n  '  <dd>Windows nebo Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Přejít na kontextový panel nástrojů</dt>\\n' +\n  '  <dd>Windows, Linux nebo macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\\n' +\n  '  cesty k prvku zápatí podtržena.</p>\\n' +\n  '\\n' +\n  '<h1>Navigace mezi oddíly uživatelského rozhraní</h1>\\n' +\n  '\\n' +\n  '<p>Stisknutím klávesy <strong>Tab</strong> se posunete z jednoho oddílu uživatelského rozhraní na další.</p>\\n' +\n  '\\n' +\n  '<p>Stisknutím kláves <strong>Shift+Tab</strong> se posunete z jednoho oddílu uživatelského rozhraní na předchozí.</p>\\n' +\n  '\\n' +\n  '<p>Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy <strong>Tab</strong>:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Řádek nabídek</li>\\n' +\n  '  <li>Každá skupina panelu nástrojů</li>\\n' +\n  '  <li>Boční panel</li>\\n' +\n  '  <li>Cesta k prvku v zápatí.</li>\\n' +\n  '  <li>Tlačítko přepínače počtu slov v zápatí</li>\\n' +\n  '  <li>Odkaz na informace o značce v zápatí</li>\\n' +\n  '  <li>Úchyt pro změnu velikosti editoru v zápatí</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.</p>\\n' +\n  '\\n' +\n  '<p>Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves <strong>Shift+Tab</strong>\\n' +\n  '  přejdete na první skupinu panelu nástrojů, nikoli na poslední.</p>\\n' +\n  '\\n' +\n  '<h1>Navigace v rámci oddílů uživatelského rozhraní</h1>\\n' +\n  '\\n' +\n  '<p>Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s <strong>šipkou</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Klávesy s šipkou <strong>vlevo</strong> a <strong>vpravo</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>umožňují přesun mezi nabídkami na řádku nabídek;</li>\\n' +\n  '  <li>otevírají podnabídku nabídky;</li>\\n' +\n  '  <li>umožňují přesun mezi tlačítky ve skupině panelu nástrojů;</li>\\n' +\n  '  <li>umožňují přesun mezi položkami cesty prvku v zápatí.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Klávesy se šipkou <strong>dolů</strong> a <strong>nahoru</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>umožňují přesun mezi položkami nabídky;</li>\\n' +\n  '  <li>umožňují přesun mezi položkami místní nabídky panelu nástrojů.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Šipky</strong> provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.</p>\\n' +\n  '\\n' +\n  '<p>Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy <strong>Esc</strong> zcela ukončíte také\\n' +\n  '  navigaci pomocí klávesnice.</p>\\n' +\n  '\\n' +\n  '<h1>Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů</h1>\\n' +\n  '\\n' +\n  '<p>Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  nebo <strong>mezerníku</strong> provedete příslušný příkaz.</p>\\n' +\n  '\\n' +\n  '<h1>Navigace v dialogových oknech bez záložek</h1>\\n' +\n  '\\n' +\n  '<p>Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.</p>\\n' +\n  '\\n' +\n  '<p>Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy <strong>Tab</strong> nebo kombinace <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigace v dialogových oknech se záložkami</h1>\\n' +\n  '\\n' +\n  '<p>Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.</p>\\n' +\n  '\\n' +\n  '<p>Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy <strong>Tab</strong> nebo\\n' +\n  '  kombinace <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované <strong>šipky</strong>\\n' +\n  '  přepínat mezi dostupnými záložkami.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/da.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.da',\n'<h1>Start tastaturnavigation</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokuser på menulinjen</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokuser på værktøjslinjen</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokuser på sidefoden</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokuser på kontekstuel værktøjslinje</dt>\\n' +\n  '  <dd>Windows, Linux eller macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\\n' +\n  '  sidefodens sti til elementet.</p>\\n' +\n  '\\n' +\n  '<h1>Naviger mellem UI-sektioner</h1>\\n' +\n  '\\n' +\n  '<p>Gå fra én UI-sektion til den næste ved at trykke på <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Gå fra én UI-sektion til den forrige ved at trykke på <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong>-rækkefølgen af disse UI-sektioner er:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menulinje</li>\\n' +\n  '  <li>Hver værktøjsgruppe</li>\\n' +\n  '  <li>Sidepanel</li>\\n' +\n  '  <li>Sti til elementet i sidefoden</li>\\n' +\n  '  <li>Til/fra-knap for ordoptælling i sidefoden</li>\\n' +\n  '  <li>Brandinglink i sidefoden</li>\\n' +\n  '  <li>Tilpasningshåndtag for editor i sidefoden</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Hvis en UI-sektion ikke er til stede, springes den over.</p>\\n' +\n  '\\n' +\n  '<p>Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på <strong>Shift+Tab</strong>\\n' +\n  '  for at flytte fokus til den første værktøjsgruppe, ikke den sidste.</p>\\n' +\n  '\\n' +\n  '<h1>Naviger inden for UI-sektioner</h1>\\n' +\n  '\\n' +\n  '<p>Gå fra ét UI-element til det næste ved at trykke på den relevante <strong>piletast</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Venstre</strong> og <strong>højre</strong> piletast</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>flytter mellem menuerne i menulinjen.</li>\\n' +\n  '  <li>åbner en undermenu i en menu.</li>\\n' +\n  '  <li>flytter mellem knapperne i en værktøjsgruppe.</li>\\n' +\n  '  <li>flytter mellem elementer i sidefodens sti til elementet.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Pil <strong>ned</strong> og <strong>op</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>flytter mellem menupunkterne i en menu.</li>\\n' +\n  '  <li>flytter mellem punkterne i en genvejsmenu i værktøjslinjen.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Piletasterne</strong> kører rundt inden for UI-sektionen, der fokuseres på.</p>\\n' +\n  '\\n' +\n  '<p>For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på <strong>Esc</strong>-tasten.</p>\\n' +\n  '\\n' +\n  \"<p>Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på <strong>Esc</strong>-tasten også afslutte\\n\" +\n  '  tastaturnavigationen helt.</p>\\n' +\n  '\\n' +\n  '<h1>Udfør et menupunkt eller en værktøjslinjeknap</h1>\\n' +\n  '\\n' +\n  '<p>Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på <strong>Retur</strong>, <strong>Enter</strong>\\n' +\n  '  eller <strong>mellemrumstasten</strong> for at udføre elementet.</p>\\n' +\n  '\\n' +\n  '<h1>Naviger i ikke-faneopdelte dialogbokse</h1>\\n' +\n  '\\n' +\n  '<p>I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.</p>\\n' +\n  '\\n' +\n  '<p>Naviger mellem interaktive dialogbokskomponenter ved at trykke på <strong>Tab</strong> eller <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Naviger i faneopdelte dialogbokse</h1>\\n' +\n  '\\n' +\n  '<p>I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.</p>\\n' +\n  '\\n' +\n  '<p>Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på <strong>Tab</strong> eller\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante <strong>piletast</strong>\\n' +\n  '  for at køre igennem de tilgængelige faner.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/de.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.de',\n'<h1>Grundlagen der Tastaturnavigation</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokus auf Menüleiste</dt>\\n' +\n  '  <dd>Windows oder Linux: ALT+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokus auf Symbolleiste</dt>\\n' +\n  '  <dd>Windows oder Linux: ALT+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokus auf Fußzeile</dt>\\n' +\n  '  <dd>Windows oder Linux: ALT+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokus auf kontextbezogene Symbolleiste</dt>\\n' +\n  '  <dd>Windows, Linux oder macOS: STRG+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\\n' +\n  '  ist es unterstrichen.</p>\\n' +\n  '\\n' +\n  '<h1>Zwischen Abschnitten der Benutzeroberfläche navigieren</h1>\\n' +\n  '\\n' +\n  '<p>Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie <strong>TAB</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie <strong>UMSCHALT+TAB</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Die Abschnitte der Benutzeroberfläche haben folgende <strong>TAB</strong>-Reihenfolge:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menüleiste</li>\\n' +\n  '  <li>Einzelne Gruppen der Symbolleiste</li>\\n' +\n  '  <li>Randleiste</li>\\n' +\n  '  <li>Elementpfad in der Fußzeile</li>\\n' +\n  '  <li>Umschaltfläche „Wörter zählen“ in der Fußzeile</li>\\n' +\n  '  <li>Branding-Link in der Fußzeile</li>\\n' +\n  '  <li>Editor-Ziehpunkt zur Größenänderung in der Fußzeile</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.</p>\\n' +\n  '\\n' +\n  '<p>Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von <strong>UMSCHALT+TAB</strong>\\n' +\n  '  zur ersten Gruppe der Symbolleiste, nicht zur letzten.</p>\\n' +\n  '\\n' +\n  '<h1>Innerhalb von Abschnitten der Benutzeroberfläche navigieren</h1>\\n' +\n  '\\n' +\n  '<p>Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende <strong>Pfeiltaste</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Die Pfeiltasten <strong>Links</strong> und <strong>Rechts</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>wechseln zwischen Menüs in der Menüleiste.</li>\\n' +\n  '  <li>öffnen das Untermenü eines Menüs.</li>\\n' +\n  '  <li>wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.</li>\\n' +\n  '  <li>wechseln zwischen Elementen im Elementpfad der Fußzeile.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Die Pfeiltasten <strong>Abwärts</strong> und <strong>Aufwärts</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>wechseln zwischen Menüelementen in einem Menü.</li>\\n' +\n  '  <li>wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Die <strong>Pfeiltasten</strong> rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.</p>\\n' +\n  '\\n' +\n  '<p>Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die <strong>ESC</strong>-Taste.</p>\\n' +\n  '\\n' +\n  '<p>Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der <strong>ESC</strong>-Taste auch\\n' +\n  '  die Tastaturnavigation beendet.</p>\\n' +\n  '\\n' +\n  '<h1>Ein Menüelement oder eine Symbolleistenschaltfläche ausführen</h1>\\n' +\n  '\\n' +\n  '<p>Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie <strong>Zurück</strong>, <strong>Eingabe</strong>\\n' +\n  '  oder die <strong>Leertaste</strong>, um das Element auszuführen.</p>\\n' +\n  '\\n' +\n  '<h1>In Dialogfeldern ohne Registerkarten navigieren</h1>\\n' +\n  '\\n' +\n  '<p>In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.</p>\\n' +\n  '\\n' +\n  '<p>Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie <strong>TAB</strong> oder <strong>UMSCHALT+TAB</strong> drücken.</p>\\n' +\n  '\\n' +\n  '<h1>In Dialogfeldern mit Registerkarten navigieren</h1>\\n' +\n  '\\n' +\n  '<p>In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.</p>\\n' +\n  '\\n' +\n  '<p>Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie <strong>TAB</strong> oder\\n' +\n  '  <strong>UMSCHALT+TAB</strong> drücken.</p>\\n' +\n  '\\n' +\n  '<p>Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende <strong>Pfeiltaste</strong>\\n' +\n  '  drücken, um durch die verfügbaren Registerkarten zu rotieren.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/el.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.el',\n'<h1>Έναρξη πλοήγησης μέσω πληκτρολογίου</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Εστίαση στη γραμμή μενού</dt>\\n' +\n  '  <dd>Windows ή Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Εστίαση στη γραμμή εργαλείων</dt>\\n' +\n  '  <dd>Windows ή Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Εστίαση στο υποσέλιδο</dt>\\n' +\n  '  <dd>Windows ή Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου</dt>\\n' +\n  '  <dd>Windows, Linux ή macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\\n' +\n  '  όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.</p>\\n' +\n  '\\n' +\n  '<h1>Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη</h1>\\n' +\n  '\\n' +\n  '<p>Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Η σειρά <strong>Tab</strong> αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Γραμμή μενού</li>\\n' +\n  '  <li>Κάθε ομάδα γραμμής εργαλείων</li>\\n' +\n  '  <li>Πλαϊνή γραμμή</li>\\n' +\n  '  <li>Διαδρομή στοιχείου στο υποσέλιδο</li>\\n' +\n  '  <li>Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο</li>\\n' +\n  '  <li>Σύνδεσμος επωνυμίας στο υποσέλιδο</li>\\n' +\n  '  <li>Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.</p>\\n' +\n  '\\n' +\n  '<p>Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε <strong>Shift+Tab</strong>\\n' +\n  '  η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.</p>\\n' +\n  '\\n' +\n  '<h1>Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη</h1>\\n' +\n  '\\n' +\n  '<p>Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο <strong>βέλους</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Με τα πλήκτρα <strong>αριστερού</strong> και <strong>δεξιού</strong> βέλους</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.</li>\\n' +\n  '  <li>ανοίγει ένα υπομενού σε ένα μενού.</li>\\n' +\n  '  <li>γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.</li>\\n' +\n  '  <li>γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Με τα πλήκτρα <strong>επάνω</strong> και <strong>κάτω</strong> βέλους</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.</li>\\n' +\n  '  <li>γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Με τα πλήκτρα <strong>βέλους</strong> γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.</p>\\n' +\n  '\\n' +\n  '<p>Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο <strong>Esc</strong>,\\n' +\n  '  γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.</p>\\n' +\n  '\\n' +\n  '<h1>Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων</h1>\\n' +\n  '\\n' +\n  '<p>Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  ή το <strong>πλήκτρο διαστήματος</strong> για να εκτελέσετε το στοιχείο.</p>\\n' +\n  '\\n' +\n  '<h1>Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες</h1>\\n' +\n  '\\n' +\n  '<p>Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.</p>\\n' +\n  '\\n' +\n  '<p>Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα <strong>Tab</strong> ή <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Πλοήγηση σε παράθυρα διαλόγου με καρτέλες</h1>\\n' +\n  '\\n' +\n  '<p>Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.</p>\\n' +\n  '\\n' +\n  '<p>Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα <strong>Tab</strong> ή\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο <strong>βέλους</strong>\\n' +\n  '  για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/en.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.en',\n'<h1>Begin keyboard navigation</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Focus the Menu bar</dt>\\n' +\n  '  <dd>Windows or Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Focus the Toolbar</dt>\\n' +\n  '  <dd>Windows or Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Focus the footer</dt>\\n' +\n  '  <dd>Windows or Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Focus a contextual toolbar</dt>\\n' +\n  '  <dd>Windows, Linux or macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\\n' +\n  '  the Footer element path.</p>\\n' +\n  '\\n' +\n  '<h1>Navigate between UI sections</h1>\\n' +\n  '\\n' +\n  '<p>To move from one UI section to the next, press <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>To move from one UI section to the previous, press <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>The <strong>Tab</strong> order of these UI sections is:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menu bar</li>\\n' +\n  '  <li>Each toolbar group</li>\\n' +\n  '  <li>Sidebar</li>\\n' +\n  '  <li>Element path in the footer</li>\\n' +\n  '  <li>Word count toggle button in the footer</li>\\n' +\n  '  <li>Branding link in the footer</li>\\n' +\n  '  <li>Editor resize handle in the footer</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>If a UI section is not present, it is skipped.</p>\\n' +\n  '\\n' +\n  '<p>If the footer has keyboard navigation focus, and there is no visible sidebar, pressing <strong>Shift+Tab</strong>\\n' +\n  '  moves focus to the first toolbar group, not the last.</p>\\n' +\n  '\\n' +\n  '<h1>Navigate within UI sections</h1>\\n' +\n  '\\n' +\n  '<p>To move from one UI element to the next, press the appropriate <strong>Arrow</strong> key.</p>\\n' +\n  '\\n' +\n  '<p>The <strong>Left</strong> and <strong>Right</strong> arrow keys</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>move between menus in the menu bar.</li>\\n' +\n  '  <li>open a sub-menu in a menu.</li>\\n' +\n  '  <li>move between buttons in a toolbar group.</li>\\n' +\n  '  <li>move between items in the footer’s element path.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>The <strong>Down</strong> and <strong>Up</strong> arrow keys</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>move between menu items in a menu.</li>\\n' +\n  '  <li>move between items in a toolbar pop-up menu.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Arrow</strong> keys cycle within the focused UI section.</p>\\n' +\n  '\\n' +\n  '<p>To close an open menu, an open sub-menu, or an open pop-up menu, press the <strong>Esc</strong> key.</p>\\n' +\n  '\\n' +\n  '<p>If the current focus is at the ‘top’ of a particular UI section, pressing the <strong>Esc</strong> key also exits\\n' +\n  '  keyboard navigation entirely.</p>\\n' +\n  '\\n' +\n  '<h1>Execute a menu item or toolbar button</h1>\\n' +\n  '\\n' +\n  '<p>When the desired menu item or toolbar button is highlighted, press <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  or the <strong>Space bar</strong> to execute the item.</p>\\n' +\n  '\\n' +\n  '<h1>Navigate non-tabbed dialogs</h1>\\n' +\n  '\\n' +\n  '<p>In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.</p>\\n' +\n  '\\n' +\n  '<p>Navigate between interactive dialog components by pressing <strong>Tab</strong> or <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigate tabbed dialogs</h1>\\n' +\n  '\\n' +\n  '<p>In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.</p>\\n' +\n  '\\n' +\n  '<p>Navigate between interactive components of this dialog tab by pressing <strong>Tab</strong> or\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate <strong>Arrow</strong>\\n' +\n  '  key to cycle through the available tabs.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/es.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.es',\n'<h1>Iniciar la navegación con el teclado</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Enfocar la barra de menús</dt>\\n' +\n  '  <dd>Windows o Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Enfocar la barra de herramientas</dt>\\n' +\n  '  <dd>Windows o Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Enfocar el pie de página</dt>\\n' +\n  '  <dd>Windows o Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Enfocar una barra de herramientas contextual</dt>\\n' +\n  '  <dd>Windows, Linux o macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\\n' +\n  '  la ruta de elemento del pie de página.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar entre las secciones de la IU</h1>\\n' +\n  '\\n' +\n  '<p>Para pasar de una sección de la IU a la siguiente, pulse la tecla <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Para pasar de una sección de la IU a la anterior, pulse <strong>Mayús+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>El orden de <strong>tabulación</strong> de estas secciones de la IU es:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barra de menús</li>\\n' +\n  '  <li>Cada grupo de barra de herramientas</li>\\n' +\n  '  <li>Barra lateral</li>\\n' +\n  '  <li>Ruta del elemento en el pie de página</li>\\n' +\n  '  <li>Botón de alternancia de recuento de palabras en el pie de página</li>\\n' +\n  '  <li>Enlace de personalización de marca en el pie de página</li>\\n' +\n  '  <li>Controlador de cambio de tamaño en el pie de página</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Si una sección de la IU no está presente, esta se omite.</p>\\n' +\n  '\\n' +\n  '<p>Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar <strong>Mayús+Tab</strong>,\\n' +\n  '  el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar dentro de las secciones de la IU</h1>\\n' +\n  '\\n' +\n  '<p>Para pasar de un elemento de la IU al siguiente, pulse la tecla de <strong>flecha</strong> correspondiente.</p>\\n' +\n  '\\n' +\n  '<p>Las teclas de flecha <strong>izquierda</strong> y <strong>derecha</strong> permiten</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>desplazarse entre los menús de la barra de menús.</li>\\n' +\n  '  <li>abrir el submenú de un menú.</li>\\n' +\n  '  <li>desplazarse entre los botones de un grupo de barra de herramientas.</li>\\n' +\n  '  <li>desplazarse entre los elementos de la ruta de elemento del pie de página.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Las teclas de flecha <strong>abajo</strong> y <strong>arriba</strong> permiten</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>desplazarse entre los elementos de menú de un menú.</li>\\n' +\n  '  <li>desplazarse entre los elementos de un menú emergente de una barra de herramientas.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Las teclas de <strong>flecha</strong> van cambiando dentro de la sección de la IU enfocada.</p>\\n' +\n  '\\n' +\n  '<p>Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla <strong>Esc</strong> saldrá\\n' +\n  '  de la navegación con el teclado por completo.</p>\\n' +\n  '\\n' +\n  '<h1>Ejecutar un elemento de menú o un botón de barra de herramientas</h1>\\n' +\n  '\\n' +\n  '<p>Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla <strong>Retorno</strong> o <strong>Entrar</strong>,\\n' +\n  '  o la <strong>barra espaciadora</strong> para ejecutar el elemento.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar por cuadros de diálogo sin pestañas</h1>\\n' +\n  '\\n' +\n  '<p>En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.</p>\\n' +\n  '\\n' +\n  '<p>Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas <strong>Tab</strong> o <strong>Mayús+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar por cuadros de diálogo con pestañas</h1>\\n' +\n  '\\n' +\n  '<p>En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.</p>\\n' +\n  '\\n' +\n  '<p>Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas <strong>Tab</strong> o\\n' +\n  '  <strong>Mayús+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de <strong>flecha</strong>\\n' +\n  '  correspondiente para moverse por las pestañas disponibles.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/eu.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu',\n'<h1>Hasi teklatuaren nabigazioa</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokuratu menu-barra</dt>\\n' +\n  '  <dd>Windows edo Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokuratu tresna-barra</dt>\\n' +\n  '  <dd>Windows edo Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokuratu orri-oina</dt>\\n' +\n  '  <dd>Windows edo Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokuratu testuinguruaren tresna-barra</dt>\\n' +\n  '  <dd>Windows, Linux edo macOS: Ktrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\\n' +\n  '  orri-oineko elementuaren bidea.</p>\\n' +\n  '\\n' +\n  '<h1>Nabigatu EIko atalen artean</h1>\\n' +\n  '\\n' +\n  '<p>EIko atal batetik hurrengora mugitzeko, sakatu <strong>Tabuladorea</strong>.</p>\\n' +\n  '\\n' +\n  '<p>EIko atal batetik aurrekora mugitzeko, sakatu <strong>Maius+Tabuladorea</strong>.</p>\\n' +\n  '\\n' +\n  '<p>EIko atal hauen <strong>Tabuladorea</strong> da:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menu-barra</li>\\n' +\n  '  <li>Tresna-barraren talde bakoitza</li>\\n' +\n  '  <li>Alboko barra</li>\\n' +\n  '  <li>Orri-oineko elementuaren bidea</li>\\n' +\n  '  <li>Orri-oneko urrats-kontaketa txandakatzeko botoia</li>\\n' +\n  '  <li>Orri-oineko marken esteka</li>\\n' +\n  '  <li>Orri-oineko editorearen tamaina aldatzeko heldulekua</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>EIko atal bat ez badago, saltatu egin da.</p>\\n' +\n  '\\n' +\n  '<p>Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, <strong>Maius+Tabuladorea</strong> sakatuz gero,\\n' +\n  '  fokua tresna-barrako lehen taldera eramaten da, ez azkenera.</p>\\n' +\n  '\\n' +\n  '<h1>Nabigatu EIko atalen barruan</h1>\\n' +\n  '\\n' +\n  '<p>EIko elementu batetik hurrengora mugitzeko, sakatu dagokion <strong>Gezia</strong> tekla.</p>\\n' +\n  '\\n' +\n  '<p><strong>Ezkerrera</strong> eta <strong>Eskuinera</strong> gezi-teklak</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>menu-barrako menuen artean mugitzen da.</li>\\n' +\n  '  <li>ireki azpimenu bat menuan.</li>\\n' +\n  '  <li>mugitu botoi batetik bestera tresna-barren talde batean.</li>\\n' +\n  '  <li>mugitu orri-oineko elementuaren bideko elementu batetik bestera.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Gora</strong> eta <strong>Behera</strong> gezi-teklak</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>mugitu menu bateko menu-elementuen artean.</li>\\n' +\n  '  <li>mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Gezia</strong> teklen zikloa nabarmendutako EI atalen barruan.</p>\\n' +\n  '\\n' +\n  '<p>Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu <strong>Ihes</strong> tekla.</p>\\n' +\n  '\\n' +\n  '<p>Une horretan fokuratzea EIko atal jakin baten \"goialdean\" badago, <strong>Ihes</strong> tekla sakatuz gero\\n' +\n  '  teklatuaren nabigaziotik irtengo zara.</p>\\n' +\n  '\\n' +\n  '<h1>Exekutatu menuko elementu bat edo tresna-barrako botoi bat</h1>\\n' +\n  '\\n' +\n  '<p>Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu <strong>Itzuli</strong>, <strong>Sartu</strong>\\n' +\n  '  edo <strong>Zuriune-barra</strong> elementua exekutatzeko.</p>\\n' +\n  '\\n' +\n  '<h1>Nabigatu fitxarik gabeko elkarrizketak</h1>\\n' +\n  '\\n' +\n  '<p>Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.</p>\\n' +\n  '\\n' +\n  '<p>Nabigatu elkarrizketa interaktiboko osagai batetik bestera <strong>Tabuladorea</strong> edo <strong>Maius+Tabuladorea</strong> sakatuta.</p>\\n' +\n  '\\n' +\n  '<h1>Nabigatu fitxadun elkarrizketak</h1>\\n' +\n  '\\n' +\n  '<p>Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.</p>\\n' +\n  '\\n' +\n  '<p>Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera <strong>Tabuladorea</strong> edo\\n' +\n  '  <strong>Maius+Tabuladorea</strong> sakatuta.</p>\\n' +\n  '\\n' +\n  '<p>Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion <strong>Gezia</strong>\\n' +\n  '  tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/fa.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa',\n'<h1>شروع پیمایش صفحه‌کلید</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>تمرکز بر نوار منو</dt>\\n' +\n  '  <dd>Windows یا Linux:‎‏: Alt+F9</dd>\\n' +\n  '  <dd>‎‏macOS: &#x2325;F9‎‏</dd>\\n' +\n  '  <dt>تمرکز بر نوار ابزار</dt>\\n' +\n  '  <dd>Windows یا Linux‎‏: Alt+F10</dd>\\n' +\n  '  <dd>‎‏macOS: &#x2325;F10‎‏</dd>\\n' +\n  '  <dt>تمرکز بر پانویس</dt>\\n' +\n  '  <dd>Windows یا Linux‎‏: Alt+F11</dd>\\n' +\n  '  <dd>‎‏macOS: &#x2325;F11‎‏</dd>\\n' +\n  '  <dt>تمرکز بر نوار ابزار بافتاری</dt>\\n' +\n  '  <dd>Windows ،Linux یا macOS:‏ Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\\n' +\n  '  مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.</p>\\n' +\n  '\\n' +\n  '<h1>پیمایش بین بخش‌های رابط کاربری</h1>\\n' +\n  '\\n' +\n  '<p>برای جابجایی از یک بخش رابط کاربری به بخش بعدی، <strong>Tab</strong> را فشار دهید.</p>\\n' +\n  '\\n' +\n  '<p>برای جابجایی از یک بخش رابط کاربری به بخش قبلی، <strong>Shift+Tab</strong> را فشار دهید.</p>\\n' +\n  '\\n' +\n  '<p>ترتیب <strong>Tab</strong> این بخش‌های رابط کاربری عبارتند از:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>نوار منو</li>\\n' +\n  '  <li>هر گروه نوار ابزار</li>\\n' +\n  '  <li>نوار کناری</li>\\n' +\n  '  <li>مسیر عنصر در پانویس</li>\\n' +\n  '  <li>دکمه تغییر وضعیت تعداد کلمات در پانویس</li>\\n' +\n  '  <li>پیوند نمانام‌سازی در پانویس</li>\\n' +\n  '  <li>دسته تغییر اندازه ویرایشگر در پانویس</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.</p>\\n' +\n  '\\n' +\n  '<p>اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن <strong>Shift+Tab</strong>\\n' +\n  '  تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.</p>\\n' +\n  '\\n' +\n  '<h1>پیمایش در بخش‌های رابط کاربری</h1>\\n' +\n  '\\n' +\n  '<p>برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید <strong>جهت‌نمای</strong> مناسب را فشار دهید.</p>\\n' +\n  '\\n' +\n  '<p>کلیدهای جهت‌نمای <strong>چپ</strong> و <strong>راست</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>جابجایی بین منوها در نوار منو.</li>\\n' +\n  '  <li>باز کردن منوی فرعی در یک منو.</li>\\n' +\n  '  <li>جابجایی بین دکمه‌ها در یک گروه نوار ابزار.</li>\\n' +\n  '  <li>جابجایی بین موارد در مسیر عنصر پانویس.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>کلیدهای جهت‌نمای <strong>پایین</strong> و <strong>بالا</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>جابجایی بین موارد منو در یک منو.</li>\\n' +\n  '  <li>جابجایی بین موارد در یک منوی بازشوی نوار ابزار.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>کلیدهای<strong>جهت‌نما</strong> در بخش رابط کاربری متمرکز می‌چرخند.</p>\\n' +\n  '\\n' +\n  '<p>برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید <strong>Esc</strong> را فشار دهید.</p>\\n' +\n  '\\n' +\n  '<p>اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید <strong>Esc</strong> نیز موجب\\n' +\n  '  خروج کامل از پیمایش صفحه‌کلید می‌شود.</p>\\n' +\n  '\\n' +\n  '<h1>اجرای یک مورد منو یا دکمه نوار ابزار</h1>\\n' +\n  '\\n' +\n  '<p>وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه <strong>بازگشت</strong>، <strong>Enter</strong>،\\n' +\n  '  یا <strong>نوار Space</strong> را فشار دهید تا مورد را اجرا کنید.</p>\\n' +\n  '\\n' +\n  '<h1>پیمایش در کادرهای گفتگوی بدون زبانه</h1>\\n' +\n  '\\n' +\n  '<p>در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.</p>\\n' +\n  '\\n' +\n  '<p>با فشردن <strong>Tab</strong> یا <strong>Shift+Tab</strong>، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.</p>\\n' +\n  '\\n' +\n  '<h1>پیمایش کادرهای گفتگوی زبانه‌دار</h1>\\n' +\n  '\\n' +\n  '<p>در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.</p>\\n' +\n  '\\n' +\n  '<p>با فشردن <strong>Tab</strong> یا\\n' +\n  '  <strong>Shift+Tab</strong>، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.</p>\\n' +\n  '\\n' +\n  '<p>با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید <strong>جهت‌نمای</strong>\\n' +\n  '  مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/fi.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi',\n'<h1>Näppäimistönavigoinnin aloittaminen</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Siirrä kohdistus valikkopalkkiin</dt>\\n' +\n  '  <dd>Windows tai Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Siirrä kohdistus työkalupalkkiin</dt>\\n' +\n  '  <dd>Windows tai Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Siirrä kohdistus alatunnisteeseen</dt>\\n' +\n  '  <dd>Windows tai Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Siirrä kohdistus kontekstuaaliseen työkalupalkkiin</dt>\\n' +\n  '  <dd>Windows, Linux tai macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\\n' +\n  '  kyseessä on Alatunniste-elementin polun ensimmäinen kohde.</p>\\n' +\n  '\\n' +\n  '<h1>Käyttöliittymän eri osien välillä navigointi</h1>\\n' +\n  '\\n' +\n  '<p>Paina <strong>sarkainnäppäintä</strong> siirtyäksesi käyttöliittymän osasta seuraavaan.</p>\\n' +\n  '\\n' +\n  '<p>Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina <strong>Shift+sarkainnäppäin</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Sarkainnäppäin</strong> siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Valikkopalkki</li>\\n' +\n  '  <li>Työkalupalkin ryhmät</li>\\n' +\n  '  <li>Sivupalkki</li>\\n' +\n  '  <li>Elementin polku alatunnisteessa</li>\\n' +\n  '  <li>Sanalaskurin vaihtopainike alatunnisteessa</li>\\n' +\n  '  <li>Brändäyslinkki alatunnisteessa</li>\\n' +\n  '  <li>Editorin koon muuttamisen kahva alatunnisteessa</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.</p>\\n' +\n  '\\n' +\n  '<p>Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, <strong>Shift+sarkainnäppäin</strong>\\n' +\n  '  siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.</p>\\n' +\n  '\\n' +\n  '<h1>Käyttöliittymän eri osien sisällä navigointi</h1>\\n' +\n  '\\n' +\n  '<p>Paina <strong>nuolinäppäimiä</strong> siirtyäksesi käyttöliittymäelementistä seuraavaan.</p>\\n' +\n  '\\n' +\n  '<p><strong>Vasen</strong>- ja <strong>Oikea</strong>-nuolinäppäimet</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>siirtävät sinua valikkopalkin valikoiden välillä.</li>\\n' +\n  '  <li>avaavat valikon alavalikon.</li>\\n' +\n  '  <li>siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.</li>\\n' +\n  '  <li>siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Alas</strong>- ja <strong>Ylös</strong>-nuolinäppäimet</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>siirtävät sinua valikon valikkokohteiden välillä.</li>\\n' +\n  '  <li>siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Nuolinäppäimet</strong> siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.</p>\\n' +\n  '\\n' +\n  '<p>Paina <strong>Esc</strong>-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.</p>\\n' +\n  '\\n' +\n  '<p>Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, <strong>Esc</strong>-näppäimen painaminen\\n' +\n  '  poistuu myös näppäimistönavigoinnista kokonaan.</p>\\n' +\n  '\\n' +\n  '<h1>Suorita valikkokohde tai työkalupalkin painike</h1>\\n' +\n  '\\n' +\n  '<p>Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina <strong>Return</strong>-, <strong>Enter</strong>-\\n' +\n  '  tai <strong>välilyöntinäppäintä</strong> suorittaaksesi kohteen.</p>\\n' +\n  '\\n' +\n  '<h1>Välilehdittömissä valintaikkunoissa navigointi</h1>\\n' +\n  '\\n' +\n  '<p>Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.</p>\\n' +\n  '\\n' +\n  '<p>Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla <strong>sarkainnäppäintä</strong> tai <strong>Shift+sarkainnäppäin</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Välilehdellisissä valintaikkunoissa navigointi</h1>\\n' +\n  '\\n' +\n  '<p>Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.</p>\\n' +\n  '\\n' +\n  '<p>Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla <strong>sarkainnäppäintä</strong> tai\\n' +\n  '  <strong>Shift+sarkainnäppäin</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa <strong>nuolinäppäintä</strong>\\n' +\n  '  siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/fr_FR.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR',\n'<h1>Débuter la navigation au clavier</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Cibler la barre du menu</dt>\\n' +\n  '  <dd>Windows ou Linux : Alt+F9</dd>\\n' +\n  '  <dd>macOS : &#x2325;F9</dd>\\n' +\n  \"  <dt>Cibler la barre d'outils</dt>\\n\" +\n  '  <dd>Windows ou Linux : Alt+F10</dd>\\n' +\n  '  <dd>macOS : &#x2325;F10</dd>\\n' +\n  '  <dt>Cibler le pied de page</dt>\\n' +\n  '  <dd>Windows ou Linux : Alt+F11</dd>\\n' +\n  '  <dd>macOS : &#x2325;F11</dd>\\n' +\n  \"  <dt>Cibler une barre d'outils contextuelle</dt>\\n\" +\n  '  <dd>Windows, Linux ou macOS : Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  \"<p>La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\\n\" +\n  \"  chemin d'éléments du pied de page.</p>\\n\" +\n  '\\n' +\n  \"<h1>Naviguer entre les sections de l'interface utilisateur</h1>\\n\" +\n  '\\n' +\n  \"<p>Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur <strong>Tabulation</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur <strong>Maj+Tabulation</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>L'ordre de <strong>Tabulation</strong> de ces sections de l'interface utilisateur est le suivant :</p>\\n\" +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barre du menu</li>\\n' +\n  \"  <li>Chaque groupe de barres d'outils</li>\\n\" +\n  '  <li>Barre latérale</li>\\n' +\n  \"  <li>Chemin d'éléments du pied de page</li>\\n\" +\n  \"  <li>Bouton d'activation du compteur de mots dans le pied de page</li>\\n\" +\n  '  <li>Lien de marque dans le pied de page</li>\\n' +\n  \"  <li>Poignée de redimensionnement de l'éditeur dans le pied de page</li>\\n\" +\n  '</ol>\\n' +\n  '\\n' +\n  \"<p>Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.</p>\\n\" +\n  '\\n' +\n  \"<p>Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur <strong>Maj+Tabulation</strong>\\n\" +\n  \"  déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.</p>\\n\" +\n  '\\n' +\n  \"<h1>Naviguer au sein des sections de l'interface utilisateur</h1>\\n\" +\n  '\\n' +\n  \"<p>Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la <strong>Flèche</strong> appropriée.</p>\\n\" +\n  '\\n' +\n  '<p>Les touches fléchées <strong>Gauche</strong> et <strong>Droite</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>se déplacent entre les menus de la barre des menus.</li>\\n' +\n  \"  <li>ouvrent un sous-menu au sein d'un menu.</li>\\n\" +\n  \"  <li>se déplacent entre les boutons d'un groupe de barres d'outils.</li>\\n\" +\n  \"  <li>se déplacent entre les éléments du chemin d'éléments du pied de page.</li>\\n\" +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Les touches fléchées <strong>Bas</strong> et <strong>Haut</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  \"  <li>se déplacent entre les éléments de menu au sein d'un menu.</li>\\n\" +\n  \"  <li>se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.</li>\\n\" +\n  '</ul>\\n' +\n  '\\n' +\n  \"<p>Les <strong>Flèches</strong> parcourent la section de l'interface utilisateur ciblée.</p>\\n\" +\n  '\\n' +\n  '<p>Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur <strong>Echap</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur <strong>Echap</strong> permet également de quitter\\n\" +\n  '  entièrement la navigation au clavier.</p>\\n' +\n  '\\n' +\n  \"<h1>Exécuter un élément de menu ou un bouton de barre d'outils</h1>\\n\" +\n  '\\n' +\n  \"<p>Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche <strong>Retour arrière</strong>, <strong>Entrée</strong>\\n\" +\n  \"  ou la <strong>Barre d'espace</strong> pour exécuter l'élément.</p>\\n\" +\n  '\\n' +\n  '<h1>Naviguer au sein de dialogues sans onglets</h1>\\n' +\n  '\\n' +\n  \"<p>Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.</p>\\n\" +\n  '\\n' +\n  '<p>Naviguez entre les composants du dialogue interactif en appuyant sur <strong>Tabulation</strong> ou <strong>Maj+Tabulation</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Naviguer au sein de dialogues avec onglets</h1>\\n' +\n  '\\n' +\n  \"<p>Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.</p>\\n\" +\n  '\\n' +\n  '<p>Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur <strong>Tabulation</strong> ou\\n' +\n  '  <strong>Maj+Tabulation</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la <strong>Flèche</strong>\\n\" +\n  '  appropriée pour parcourir les onglets disponibles.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/he_IL.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL',\n'<h1>התחל ניווט במקלדת</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>התמקד בשורת התפריטים</dt>\\n' +\n  '  <dd>Windows או Linux:‏ Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>העבר מיקוד לסרגל הכלים</dt>\\n' +\n  '  <dd>Windows או Linux:‏ Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>העבר מיקוד לכותרת התחתונה</dt>\\n' +\n  '  <dd>Windows או Linux:‏ Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>העבר מיקוד לסרגל כלים הקשרי</dt>\\n' +\n  '  <dd>Windows‏, Linux או macOS:‏ Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\\n' +\n  '  הנתיב של רכיב הכותרת התחתונה.</p>\\n' +\n  '\\n' +\n  '<h1>עבור בין מקטעים במסך</h1>\\n' +\n  '\\n' +\n  '<p>כדי לעבור בין המקטעים במסך, הקש <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>כדי לעבור למקטע הקודם במסך, הקש <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>הסדר מבחינת מקש <strong>Tab</strong> של הרכיבים במסך:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>שורת התפריטים</li>\\n' +\n  '  <li>כל קבוצה בסרגל הכלים</li>\\n' +\n  '  <li>הסרגל הצידי</li>\\n' +\n  '  <li>נתיב של רכיב בכותרת התחתונה</li>\\n' +\n  '  <li>לחצן לספירת מילים בכותרת התחתונה</li>\\n' +\n  '  <li>קישור של המותג בכותרת התחתונה</li>\\n' +\n  '  <li>ידית לשינוי גודל עבור העורך בכותרת התחתונה</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.</p>\\n' +\n  '\\n' +\n  '<p>אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש <strong>Shift+Tab</strong>\\n' +\n  '  מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.</p>\\n' +\n  '\\n' +\n  '<h1>עבור בתוך מקטעים במסך</h1>\\n' +\n  '\\n' +\n  '<p>כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש <strong>החץ</strong> המתאים.</p>\\n' +\n  '\\n' +\n  '<p>מקשי החיצים <strong>שמאלה</strong> ו<strong>ימינה</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>עבור בין תפריטים בשורת התפריטים.</li>\\n' +\n  '  <li>פתח תפריט משני בתפריט.</li>\\n' +\n  '  <li>עבור בין לחצנים בקבוצה בסרגל הכלים.</li>\\n' +\n  '  <li>עבור בין פריטים ברכיב בכותרת התחתונה.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>מקשי החיצים <strong>למטה</strong> ו<strong>למעלה</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>עבור בין פריטים בתפריט.</li>\\n' +\n  '  <li>עבור בין פריטים בחלון הקובץ של סרגל הכלים.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>מקשי <strong>החצים</strong> משתנים בתוך המקטע במסך שעליו נמצא המיקוד.</p>\\n' +\n  '\\n' +\n  '<p>כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על <strong>Esc</strong> מביאה גם ליציאה\\n\" +\n  '  מהניווט במקלדת לחלוטין.</p>\\n' +\n  '\\n' +\n  '<h1>הפעל פריט בתפריט או לחצן בסרגל הכלים</h1>\\n' +\n  '\\n' +\n  '<p>כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  או על <strong>מקש הרווח</strong> כדי להפעיל את הפריט.</p>\\n' +\n  '\\n' +\n  '<h1>ניווט בחלונות דו-שיח בלי כרטיסיות</h1>\\n' +\n  '\\n' +\n  '<p>בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.</p>\\n' +\n  '\\n' +\n  '<p>עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על <strong>Tab</strong> או <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>ניווט בחלונות דו-שיח עם כרטיסיות</h1>\\n' +\n  '\\n' +\n  '<p>בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.</p>\\n' +\n  '\\n' +\n  '<p>עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על <strong>Tab</strong> או\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על <strong>החץ</strong>המתאים\\n' +\n  '  כדי לעבור בין הכרטיסיות הזמינות.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/hi.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi',\n'<h1>कीबोर्ड नेविगेशन शुरू करें</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>मेन्यू बार पर फ़ोकस करें</dt>\\n' +\n  '  <dd>Windows या Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>टूलबार पर फ़ोकस करें</dt>\\n' +\n  '  <dd>Windows या Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>फ़ुटर पर फ़ोकस करें</dt>\\n' +\n  '  <dd>Windows या Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>प्रासंगिक टूलबार पर फ़ोकस करें</dt>\\n' +\n  '  <dd>Windows, Linux या macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\\n' +\n  '  रेखांकित किया जाएगा।</p>\\n' +\n  '\\n' +\n  '<h1>UI सेक्शन के बीच नेविगेट करें</h1>\\n' +\n  '\\n' +\n  '<p>एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, <strong>Tab</strong> दबाएं।</p>\\n' +\n  '\\n' +\n  '<p>एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, <strong>Shift+Tab</strong> दबाएं।</p>\\n' +\n  '\\n' +\n  '<p>इन UI सेक्शन का <strong>Tab</strong> क्रम नीचे दिया गया है:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>मेन्यू बार</li>\\n' +\n  '  <li>प्रत्येक टूलबार समूह</li>\\n' +\n  '  <li>साइडबार</li>\\n' +\n  '  <li>फ़ुटर में तत्व पथ</li>\\n' +\n  '  <li>फ़ुटर में शब्द गणना टॉगल बटन</li>\\n' +\n  '  <li>फ़ुटर में ब्रांडिंग लिंक</li>\\n' +\n  '  <li>फ़ुटर में संपादक का आकार बदलने का हैंडल</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।</p>\\n' +\n  '\\n' +\n  '<p>अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो <strong>Shift+Tab</strong> दबाने से\\n' +\n  '  फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।</p>\\n' +\n  '\\n' +\n  '<h1>UI सेक्शन के भीतर नेविगेट करें</h1>\\n' +\n  '\\n' +\n  '<p>एक UI तत्व से दूसरे में जाने के लिए उपयुक्त <strong>ऐरो</strong> कुंजी दबाएं।</p>\\n' +\n  '\\n' +\n  '<p><strong>बाएं</strong> और <strong>दाएं</strong> ऐरो कुंजियां</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>मेन्यू बार में मेन्यू के बीच ले जाती हैं।</li>\\n' +\n  '  <li>मेन्यू में एक सब-मेन्यू खोलें।</li>\\n' +\n  '  <li>टूलबार समूह में बटनों के बीच ले जाएं।</li>\\n' +\n  '  <li>फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>नीचे</strong> और <strong>ऊपर</strong> ऐरो कुंजियां</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।</li>\\n' +\n  '  <li>टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>फ़ोकस वाले UI सेक्शन के भीतर <strong>ऐरो</strong> कुंजियां चलाती रहती हैं।</p>\\n' +\n  '\\n' +\n  '<p>कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए <strong>Esc</strong> कुंजी दबाएं।</p>\\n' +\n  '\\n' +\n  \"<p>अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो <strong>Esc</strong> कुंजी दबाने से भी\\n\" +\n  '  कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।</p>\\n' +\n  '\\n' +\n  '<h1>मेन्यू आइटम या टूलबार बटन निष्पादित करें</h1>\\n' +\n  '\\n' +\n  '<p>जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  या <strong>Space bar</strong> दबाएं।</p>\\n' +\n  '\\n' +\n  '<h1>गैर-टैब वाले डायलॉग पर नेविगेट करें</h1>\\n' +\n  '\\n' +\n  '<p>गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong> or <strong>Shift+Tab</strong> दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।</p>\\n' +\n  '\\n' +\n  '<h1>टैब किए गए डायलॉग पर नेविगेट करें</h1>\\n' +\n  '\\n' +\n  '<p>टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।</p>\\n' +\n  '\\n' +\n  '<p>इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए <strong>Tab</strong> या\\n' +\n  '  <strong>Shift+Tab</strong> दबाएं।</p>\\n' +\n  '\\n' +\n  '<p>टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त <strong>ऐरो</strong>\\n' +\n  '  कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/hr.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr',\n'<h1>Početak navigacije na tipkovnici</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokusiranje trake izbornika</dt>\\n' +\n  '  <dd>Windows ili Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokusiranje alatne trake</dt>\\n' +\n  '  <dd>Windows ili Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokusiranje podnožja</dt>\\n' +\n  '  <dd>Windows ili Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokusiranje kontekstne alatne trake</dt>\\n' +\n  '  <dd>Windows, Linux ili macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\\n' +\n  '  putu elementa u podnožju.</p>\\n' +\n  '\\n' +\n  '<h1>Navigacija između dijelova korisničkog sučelja</h1>\\n' +\n  '\\n' +\n  '<p>Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite <strong>tabulator</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite <strong>Shift + tabulator</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ovo je redoslijed pomicanja <strong>tabulatora</strong> po dijelovima korisničkog sučelja:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Traka izbornika</li>\\n' +\n  '  <li>Pojedinačne grupe na alatnoj traci</li>\\n' +\n  '  <li>Bočna traka</li>\\n' +\n  '  <li>Put elemenata u podnožju</li>\\n' +\n  '  <li>Gumb za pomicanje po broju riječi u podnožju</li>\\n' +\n  '  <li>Veza na brand u podnožju</li>\\n' +\n  '  <li>Značajka za promjenu veličine alata za uređivanje u podnožju</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Ako neki dio korisničkog sučelja nije naveden, on se preskače.</p>\\n' +\n  '\\n' +\n  '<p>Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na <strong>Shift + tabulator</strong>\\n' +\n  '  fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.</p>\\n' +\n  '\\n' +\n  '<h1>Navigacija unutar dijelova korisničkog sučelja</h1>\\n' +\n  '\\n' +\n  '<p>Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom <strong>strelicom</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Tipke s <strong>lijevom</strong> i <strong>desnom</strong> strelicom</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>služe za pomicanje između izbornika na alatnoj traci.</li>\\n' +\n  '  <li>otvaraju podizbornik unutar izbornika.</li>\\n' +\n  '  <li>služe za pomicanje između gumba unutar skupina na alatnoj traci.</li>\\n' +\n  '  <li>služe za pomicanje između stavki na elementu puta u podnožju.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tipke s <strong>donjom</strong> i <strong>gornjom</strong> strelicom</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>služe za pomicanje između stavki unutar izbornika.</li>\\n' +\n  '  <li>služe za pomicanje između stavki na alatnoj traci skočnog izbornika.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tipkama <strong>strelica</strong> kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.</p>\\n' +\n  '\\n' +\n  '<p>Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku <strong>Esc</strong> također\\n' +\n  '  u potpunosti zatvarate navigaciju na tipkovnici.</p>\\n' +\n  '\\n' +\n  '<h1>Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci</h1>\\n' +\n  '\\n' +\n  '<p>Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  ili <strong>razmak</strong> da biste pokrenuli željenu radnju.</p>\\n' +\n  '\\n' +\n  '<h1>Navigacija dijaloškim okvirima izvan kartica</h1>\\n' +\n  '\\n' +\n  '<p>Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.</p>\\n' +\n  '\\n' +\n  '<p>Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na <strong>tabulator</strong> ili <strong>Shift + tabulator</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigacija dijaloškim okvirima u karticama</h1>\\n' +\n  '\\n' +\n  '<p>Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.</p>\\n' +\n  '\\n' +\n  '<p>Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na <strong>tabulator</strong> ili\\n' +\n  '  <strong>Shift + tabulator</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom <strong>strelicom</strong>\\n' +\n  '  za kružno pomicanje između dostupnih kartica.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/hu_HU.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU',\n'<h1>Billentyűzetes navigáció indítása</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fókusz a menüsávra</dt>\\n' +\n  '  <dd>Windows és Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fókusz az eszköztárra</dt>\\n' +\n  '  <dd>Windows és Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fókusz a láblécre</dt>\\n' +\n  '  <dd>Windows és Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fókusz egy környezetfüggő eszköztárra</dt>\\n' +\n  '  <dd>Windows, Linux és macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\\n' +\n  '  a lábléc elemútvonalán.</p>\\n' +\n  '\\n' +\n  '<h1>Navigálás a felhasználói felület szakaszai között</h1>\\n' +\n  '\\n' +\n  '<p>A felhasználói felület következő szakaszára váltáshoz nyomja meg a <strong>Tab</strong> billentyűt.</p>\\n' +\n  '\\n' +\n  '<p>A felhasználói felület előző szakaszára váltáshoz nyomja meg a <strong>Shift+Tab</strong> billentyűt.</p>\\n' +\n  '\\n' +\n  '<p>A <strong>Tab</strong> billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menüsáv</li>\\n' +\n  '  <li>Az egyes eszköztárcsoportok</li>\\n' +\n  '  <li>Oldalsáv</li>\\n' +\n  '  <li>Elemútvonal a láblécen</li>\\n' +\n  '  <li>Szószámátkapcsoló gomb a láblécen</li>\\n' +\n  '  <li>Márkalink a láblécen</li>\\n' +\n  '  <li>Szerkesztő átméretezési fogópontja a láblécen</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.</p>\\n' +\n  '\\n' +\n  '<p>Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a <strong>Shift+Tab</strong>\\n' +\n  '  billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.</p>\\n' +\n  '\\n' +\n  '<h1>Navigálás a felhasználói felület szakaszain belül</h1>\\n' +\n  '\\n' +\n  '<p>A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő <strong>nyílbillentyűt</strong>.</p>\\n' +\n  '\\n' +\n  '<p>A <strong>bal</strong> és a <strong>jobb</strong> nyílgomb</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>a menüsávban a menük között vált.</li>\\n' +\n  '  <li>a menükben megnyit egy almenüt.</li>\\n' +\n  '  <li>az eszköztárcsoportban a gombok között vált.</li>\\n' +\n  '  <li>a lábléc elemútvonalán az elemek között vált.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>A <strong>le</strong> és a <strong>fel</strong> nyílgomb</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>a menükben a menüpontok között vált.</li>\\n' +\n  '  <li>az eszköztár előugró menüjében az elemek között vált.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>A <strong>nyílbillentyűk</strong> lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.</p>\\n' +\n  '\\n' +\n  '<p>A megnyitott menüket, almenüket és előugró menüket az <strong>Esc</strong> billentyűvel zárhatja be.</p>\\n' +\n  '\\n' +\n  '<p>Ha a fókusz az aktuális felületi elem „felső” részén van, az <strong>Esc</strong> billentyűvel az egész\\n' +\n  '  billentyűzetes navigációból kilép.</p>\\n' +\n  '\\n' +\n  '<h1>Menüpont vagy eszköztárgomb aktiválása</h1>\\n' +\n  '\\n' +\n  '<p>Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a <strong>Return</strong>, az <strong>Enter</strong>\\n' +\n  '  vagy a <strong>Szóköz</strong> billentyűt az adott elem vagy gomb aktiválásához.</p>\\n' +\n  '\\n' +\n  '<h1>Navigálás a lapokkal nem rendelkező párbeszédablakokban</h1>\\n' +\n  '\\n' +\n  '<p>A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.</p>\\n' +\n  '\\n' +\n  '<p>A párbeszédpanelek interaktív összetevői között a <strong>Tab</strong> vagy a <strong>Shift+Tab</strong> billentyűvel navigálhat.</p>\\n' +\n  '\\n' +\n  '<h1>Navigálás a lapokkal rendelkező párbeszédablakokban</h1>\\n' +\n  '\\n' +\n  '<p>A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.</p>\\n' +\n  '\\n' +\n  '<p>A párbeszédpanel e lapjának interaktív összetevői között a <strong>Tab</strong> vagy\\n' +\n  '  <strong>Shift+Tab</strong> billentyűvel navigálhat.</p>\\n' +\n  '\\n' +\n  '<p>A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő <strong>nyílbillentyűt</strong>\\n' +\n  '  a rendelkezésre álló lapok közötti lépkedéshez.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/id.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.id',\n'<h1>Memulai navigasi keyboard</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokus pada bilah Menu</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokus pada Bilah Alat</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokus pada footer</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokus pada bilah alat kontekstual</dt>\\n' +\n  '  <dd>Windows, Linux, atau macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\\n' +\n  '  alur elemen Footer.</p>\\n' +\n  '\\n' +\n  '<h1>Berpindah antar-bagian UI</h1>\\n' +\n  '\\n' +\n  '<p>Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Urutan <strong>Tab</strong> bagian-bagian UI ini adalah:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Bilah menu</li>\\n' +\n  '  <li>Tiap grup bilah alat</li>\\n' +\n  '  <li>Bilah sisi</li>\\n' +\n  '  <li>Alur elemen di footer</li>\\n' +\n  '  <li>Tombol aktifkan/nonaktifkan jumlah kata di footer</li>\\n' +\n  '  <li>Tautan merek di footer</li>\\n' +\n  '  <li>Pengatur pengubahan ukuran editor di footer</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Jika suatu bagian UI tidak ada, bagian tersebut dilewati.</p>\\n' +\n  '\\n' +\n  '<p>Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan <strong>Shift+Tab</strong>\\n' +\n  '  akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.</p>\\n' +\n  '\\n' +\n  '<h1>Berpindah di dalam bagian-bagian UI</h1>\\n' +\n  '\\n' +\n  '<p>Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol <strong>Panah</strong> yang sesuai.</p>\\n' +\n  '\\n' +\n  '<p>Tombol panah <strong>Kiri</strong> dan <strong>Kanan</strong> untuk</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>berpindah-pindah antar-menu di dalam bilah menu.</li>\\n' +\n  '  <li>membuka sub-menu di dalam menu.</li>\\n' +\n  '  <li>berpindah-pindah antar-tombol di dalam grup bilah alat.</li>\\n' +\n  '  <li>berpindah-pindah antar-item di dalam alur elemen footer.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tombol panah <strong>Bawah</strong> dan <strong>Atas</strong> untuk</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>berpindah-pindah antar-item menu di dalam menu.</li>\\n' +\n  '  <li>berpindah-pindah antar-item di dalam menu pop-up bilah alat.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tombol <strong>Panah</strong> hanya bergerak di dalam bagian UI yang difokuskan.</p>\\n' +\n  '\\n' +\n  '<p>Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Jika fokus sedang berada di ‘atas’ bagian UI tertentu, menekan tombol <strong>Esc</strong> juga dapat mengeluarkan fokus\\n' +\n  '  dari seluruh navigasi keyboard.</p>\\n' +\n  '\\n' +\n  '<h1>Menjalankan item menu atau tombol bilah alat</h1>\\n' +\n  '\\n' +\n  '<p>Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  atau <strong>Spasi</strong> untuk menjalankan item.</p>\\n' +\n  '\\n' +\n  '<h1>Berpindah dalam dialog tanpa tab</h1>\\n' +\n  '\\n' +\n  '<p>Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.</p>\\n' +\n  '\\n' +\n  '<p>Berpindah di antara komponen dalam dialog interaktif dengan menekan <strong>Tab</strong> atau <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Berpindah dalam dialog dengan tab</h1>\\n' +\n  '\\n' +\n  '<p>Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.</p>\\n' +\n  '\\n' +\n  '<p>Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan <strong>Tab</strong> atau\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol <strong>Panah</strong>\\n' +\n  '  yang sesuai untuk berpindah ke berbagai tab yang tersedia.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/it.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.it',\n'<h1>Iniziare la navigazione tramite tastiera</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Impostare lo stato attivo per la barra dei menu</dt>\\n' +\n  '  <dd>Windows o Linux: ALT+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Impostare lo stato attivo per la barra degli strumenti</dt>\\n' +\n  '  <dd>Windows o Linux: ALT+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Impostare lo stato attivo per il piè di pagina</dt>\\n' +\n  '  <dd>Windows o Linux: ALT+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Impostare lo stato attivo per la barra degli strumenti contestuale</dt>\\n' +\n  '  <dd>Windows, Linux o macOS: CTRL+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  \"<p>La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\\n\" +\n  \"  nel percorso dell'elemento del piè di pagina.</p>\\n\" +\n  '\\n' +\n  \"<h1>Navigare tra le sezioni dell'interfaccia utente</h1>\\n\" +\n  '\\n' +\n  \"<p>Per passare da una sezione dell'interfaccia utente alla successiva, premere <strong>TAB</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>Per passare da una sezione dell'interfaccia utente alla precedente, premere <strong>MAIUSC+TAB</strong>.</p>\\n\" +\n  '\\n' +\n  \"<p>L'ordine di <strong>tabulazione</strong> di queste sezioni dell'interfaccia utente è:</p>\\n\" +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barra dei menu</li>\\n' +\n  '  <li>Ogni gruppo di barre degli strumenti</li>\\n' +\n  '  <li>Barra laterale</li>\\n' +\n  \"  <li>Percorso dell'elemento nel piè di pagina</li>\\n\" +\n  '  <li>Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina</li>\\n' +\n  '  <li>Collegamento al marchio nel piè di pagina</li>\\n' +\n  \"  <li>Quadratino di ridimensionamento dell'editor nel piè di pagina</li>\\n\" +\n  '</ol>\\n' +\n  '\\n' +\n  \"<p>Se una sezione dell'interfaccia utente non è presente, viene saltata.</p>\\n\" +\n  '\\n' +\n  '<p>Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo <strong>MAIUSC+TAB</strong>\\n' +\n  \"  si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.</p>\\n\" +\n  '\\n' +\n  \"<h1>Navigare all'interno delle sezioni dell'interfaccia utente</h1>\\n\" +\n  '\\n' +\n  \"<p>Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto <strong>freccia</strong> appropriato.</p>\\n\" +\n  '\\n' +\n  '<p>I tasti freccia <strong>Sinistra</strong> e <strong>Destra</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>consentono di spostarsi tra i menu della barra dei menu.</li>\\n' +\n  '  <li>aprono un sottomenu in un menu.</li>\\n' +\n  '  <li>consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.</li>\\n' +\n  \"  <li>consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.</li>\\n\" +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>I tasti freccia <strong>Giù</strong> e <strong>Su</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>consentono di spostarsi tra le voci di un menu.</li>\\n' +\n  '  <li>consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  \"<p>I tasti <strong>freccia</strong> consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.</p>\\n\" +\n  '\\n' +\n  '<p>Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto <strong>ESC</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto <strong>ESC</strong> si esce\\n\" +\n  '  completamente dalla navigazione tramite tastiera.</p>\\n' +\n  '\\n' +\n  '<h1>Eseguire una voce di menu o un pulsante della barra degli strumenti</h1>\\n' +\n  '\\n' +\n  '<p>Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto di<strong>ritorno a capo</strong>, il tasto <strong>Invio</strong>\\n' +\n  '  o la <strong>barra spaziatrice</strong> per eseguirli.</p>\\n' +\n  '\\n' +\n  '<h1>Navigare nelle finestre di dialogo non a schede</h1>\\n' +\n  '\\n' +\n  \"<p>Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.</p>\\n\" +\n  '\\n' +\n  '<p>Per spostarsi tra i componenti interattivi della finestra di dialogo, premere <strong>TAB</strong> o <strong>MAIUSC+TAB</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigare nelle finestre di dialogo a schede</h1>\\n' +\n  '\\n' +\n  \"<p>Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.</p>\\n\" +\n  '\\n' +\n  '<p>Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere <strong>TAB</strong> o\\n' +\n  '  <strong>MAIUSC+TAB</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto <strong>freccia</strong>\\n\" +\n  '  appropriato per scorrere le schede disponibili.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ja.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja',\n'<h1>キーボード ナビゲーションの開始</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>メニュー バーをフォーカス</dt>\\n' +\n  '  <dd>Windows または Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>ツール バーをフォーカス</dt>\\n' +\n  '  <dd>Windows または Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>フッターをフォーカス</dt>\\n' +\n  '  <dd>Windows または Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>コンテキスト ツール バーをフォーカス</dt>\\n' +\n  '  <dd>Windows、Linux または macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\\n' +\n  '  下線が引かれます。</p>\\n' +\n  '\\n' +\n  '<h1>UI セクション間の移動</h1>\\n' +\n  '\\n' +\n  '<p>次の UI セクションに移動するには、<strong>Tab</strong> を押します。</p>\\n' +\n  '\\n' +\n  '<p>前の UI セクションに移動するには、<strong>Shift+Tab</strong> を押します。</p>\\n' +\n  '\\n' +\n  '<p>これらの UI セクションの <strong>Tab</strong> の順序:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>メニュー バー</li>\\n' +\n  '  <li>各ツール バー グループ</li>\\n' +\n  '  <li>サイド バー</li>\\n' +\n  '  <li>フッターの要素パス</li>\\n' +\n  '  <li>フッターの単語数切り替えボタン</li>\\n' +\n  '  <li>フッターのブランド リンク</li>\\n' +\n  '  <li>フッターのエディター サイズ変更ハンドル</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>UI セクションが存在しない場合は、スキップされます。</p>\\n' +\n  '\\n' +\n  '<p>フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、<strong>Shift+Tab</strong> を押すと、\\n' +\n  '  フォーカスが最後ではなく最初のツール バー グループに移動します。</p>\\n' +\n  '\\n' +\n  '<h1>UI セクション内の移動</h1>\\n' +\n  '\\n' +\n  '<p>次の UI 要素に移動するには、適切な<strong>矢印</strong>キーを押します。</p>\\n' +\n  '\\n' +\n  '<p><strong>左矢印</strong>と<strong>右矢印</strong>のキー</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>メニュー バーのメニュー間で移動します。</li>\\n' +\n  '  <li>メニュー内のサブメニューを開きます。</li>\\n' +\n  '  <li>ツール バー グループのボタン間で移動します。</li>\\n' +\n  '  <li>フッターの要素パスの項目間で移動します。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>下矢印</strong>と<strong>上矢印</strong>のキー</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>メニュー内のメニュー項目間で移動します。</li>\\n' +\n  '  <li>ツール バー ポップアップ メニュー内のメニュー項目間で移動します。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>矢印</strong>キーで、フォーカスされた UI セクション内で循環します。</p>\\n' +\n  '\\n' +\n  '<p>開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、<strong>Esc</strong> キーを押します。</p>\\n' +\n  '\\n' +\n  '<p>現在のフォーカスが特定の UI セクションの「一番上」にある場合、<strong>Esc</strong> キーを押すと\\n' +\n  '  キーボード ナビゲーションも完全に閉じられます。</p>\\n' +\n  '\\n' +\n  '<h1>メニュー項目またはツール バー ボタンの実行</h1>\\n' +\n  '\\n' +\n  '<p>目的のメニュー項目やツール バー ボタンが強調表示されている場合、<strong>リターン</strong>、<strong>Enter</strong>、\\n' +\n  '  または<strong>スペース キー</strong>を押して項目を実行します。</p>\\n' +\n  '\\n' +\n  '<h1>タブのないダイアログの移動</h1>\\n' +\n  '\\n' +\n  '<p>タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong> または <strong>Shift+Tab</strong> を押して、対話型ダイアログ コンポーネント間で移動します。</p>\\n' +\n  '\\n' +\n  '<h1>タブ付きダイアログの移動</h1>\\n' +\n  '\\n' +\n  '<p>タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong> または\\n' +\n  '  <strong>Shift+Tab</strong> を押して、このダイアログ タブの対話型コンポーネント間で移動します。</p>\\n' +\n  '\\n' +\n  '<p>タブ メニューをフォーカスしてから適切な<strong>矢印</strong>キーを押して表示可能なタブを循環して、\\n' +\n  '  別のダイアログに切り替えます。</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/kk.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk',\n'<h1>Пернетақта навигациясын бастау</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Мәзір жолағын фокустау</dt>\\n' +\n  '  <dd>Windows немесе Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Құралдар тақтасын фокустау</dt>\\n' +\n  '  <dd>Windows немесе Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Төменгі деректемені фокустау</dt>\\n' +\n  '  <dd>Windows немесе Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Мәтінмәндік құралдар тақтасын фокустау</dt>\\n' +\n  '  <dd>Windows, Linux немесе macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\\n' +\n  '  бірінші ПИ элементінен басталады.</p>\\n' +\n  '\\n' +\n  '<h1>ПИ бөлімдері арасында навигациялау</h1>\\n' +\n  '\\n' +\n  '<p>Бір ПИ бөлімінен келесісіне өту үшін <strong>Tab</strong> пернесін басыңыз.</p>\\n' +\n  '\\n' +\n  '<p>Бір ПИ бөлімінен алдыңғысына өту үшін <strong>Shift+Tab</strong> пернесін басыңыз.</p>\\n' +\n  '\\n' +\n  '<p>Осы ПИ бөлімдерінің <strong>Tab</strong> реті:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Мәзір жолағы</li>\\n' +\n  '  <li>Әрбір құралдар тақтасы тобы</li>\\n' +\n  '  <li>Бүйірлік жолақ</li>\\n' +\n  '  <li>Төменгі деректемедегі элемент жолы</li>\\n' +\n  '  <li>Төменгі деректемедегі сөздер санын ауыстыру түймесі</li>\\n' +\n  '  <li>Төменгі деректемедегі брендингтік сілтеме</li>\\n' +\n  '  <li>Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.</p>\\n' +\n  '\\n' +\n  '<p>Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, <strong>Shift+Tab</strong> тіркесімін басу әрекеті\\n' +\n  '  фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.</p>\\n' +\n  '\\n' +\n  '<h1>ПИ бөлімдерінде навигациялау</h1>\\n' +\n  '\\n' +\n  '<p>Бір ПИ элементінен келесісіне өту үшін <strong>Arrow</strong> (Көрсеткі) пернесін басыңыз.</p>\\n' +\n  '\\n' +\n  '<p><strong>Left</strong> (Сол жақ) және <strong>Right</strong> (Оң жақ) көрсеткі пернелері</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>мәзір жолағындағы мәзірлер арасында жылжыту.</li>\\n' +\n  '  <li>мәзірде ішкі мәзірді ашу.</li>\\n' +\n  '  <li>құралдар тақтасы тобындағы түймелер арасында жылжыту.</li>\\n' +\n  '  <li>төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Down</strong> (Төмен) және <strong>Up</strong> (Жоғары) көрсеткі пернелері</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>мәзірдегі мәзір элементтері арасында жылжыту.</li>\\n' +\n  '  <li>құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Фокусталған ПИ бөліміндегі <strong>Arrow</strong> (Көрсеткі) пернелерінің циклі.</p>\\n' +\n  '\\n' +\n  '<p>Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, <strong>Esc</strong> пернесін басыңыз.</p>\\n' +\n  '\\n' +\n  '<p>Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, <strong>Esc</strong> пернесін басу әрекеті пернетақта\\n' +\n  '  навигациясын толығымен жабады.</p>\\n' +\n  '\\n' +\n  '<h1>Мәзір элементін немесе құралдар тақтасы түймесін орындау</h1>\\n' +\n  '\\n' +\n  '<p>Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін <strong>Return</strong> (Қайтару), <strong>Enter</strong> (Енгізу)\\n' +\n  '  немесе <strong>Space bar</strong> (Бос орын) пернесін басыңыз.</p>\\n' +\n  '\\n' +\n  '<h1>Белгіленбеген диалог терезелерін навигациялау</h1>\\n' +\n  '\\n' +\n  '<p>Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong> немесе <strong>Shift+Tab</strong> пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.</p>\\n' +\n  '\\n' +\n  '<h1>Белгіленген диалог терезелерін навигациялау</h1>\\n' +\n  '\\n' +\n  '<p>Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.</p>\\n' +\n  '\\n' +\n  '<p><strong>Tab</strong> немесе\\n' +\n  '  <strong>Shift+Tab</strong> пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.</p>\\n' +\n  '\\n' +\n  '<p>Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті <strong>Arrow</strong> (Көрсеткі)\\n' +\n  '  пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ko_KR.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR',\n'<h1>키보드 탐색 시작</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>메뉴 모음 포커스 표시</dt>\\n' +\n  '  <dd>Windows 또는 Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>도구 모음 포커스 표시</dt>\\n' +\n  '  <dd>Windows 또는 Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>푸터 포커스 표시</dt>\\n' +\n  '  <dd>Windows 또는 Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>컨텍스트 도구 모음에 포커스 표시</dt>\\n' +\n  '  <dd>Windows, Linux 또는 macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\\n' +\n  '  경우 밑줄 표시됩니다.</p>\\n' +\n  '\\n' +\n  '<h1>UI 섹션 간 탐색</h1>\\n' +\n  '\\n' +\n  '<p>한 UI 섹션에서 다음 UI 섹션으로 이동하려면 <strong>Tab(탭)</strong>을 누릅니다.</p>\\n' +\n  '\\n' +\n  '<p>한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\\n' +\n  '\\n' +\n  '<p>이 UI 섹션의 <strong>Tab(탭)</strong> 순서는 다음과 같습니다.</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>메뉴 바</li>\\n' +\n  '  <li>각 도구 모음 그룹</li>\\n' +\n  '  <li>사이드바</li>\\n' +\n  '  <li>푸터의 요소 경로</li>\\n' +\n  '  <li>푸터의 단어 수 토글 버튼</li>\\n' +\n  '  <li>푸터의 브랜딩 링크</li>\\n' +\n  '  <li>푸터의 에디터 크기 변경 핸들</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>UI 섹션이 없는 경우 건너뛰기합니다.</p>\\n' +\n  '\\n' +\n  '<p>푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 <strong>Shift+Tab(시프트+탭)</strong>을 누르면\\n' +\n  '  포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.</p>\\n' +\n  '\\n' +\n  '<h1>UI 섹션 내 탐색</h1>\\n' +\n  '\\n' +\n  '<p>한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 <strong>화살표</strong> 키를 누릅니다.</p>\\n' +\n  '\\n' +\n  '<p><strong>왼쪽</strong>과 <strong>오른쪽</strong> 화살표 키의 용도:</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>메뉴 모음에서 메뉴 항목 사이를 이동합니다.</li>\\n' +\n  '  <li>메뉴에서 하위 메뉴를 엽니다.</li>\\n' +\n  '  <li>도구 모음 그룹에서 버튼 사이를 이동합니다.</li>\\n' +\n  '  <li>푸터의 요소 경로에서 항목 간에 이동합니다.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>아래</strong>와 <strong>위</strong> 화살표 키의 용도:</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>메뉴에서 메뉴 항목 사이를 이동합니다.</li>\\n' +\n  '  <li>도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>화살표</strong> 키는 포커스 표시 UI 섹션 내에서 순환됩니다.</p>\\n' +\n  '\\n' +\n  '<p>열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 <strong>Esc</strong> 키를 누릅니다.</p>\\n' +\n  '\\n' +\n  \"<p>현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 <strong>Esc</strong> 키를 누르면\\n\" +\n  '  키보드 탐색이 완전히 종료됩니다.</p>\\n' +\n  '\\n' +\n  '<h1>메뉴 항목 또는 도구 모음 버튼 실행</h1>\\n' +\n  '\\n' +\n  '<p>원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 <strong>Return(리턴)</strong>, <strong>Enter(엔터)</strong>,\\n' +\n  '  또는 <strong>Space bar(스페이스바)</strong>를 눌러 해당 항목을 실행합니다.</p>\\n' +\n  '\\n' +\n  '<h1>탭이 없는 대화 탐색</h1>\\n' +\n  '\\n' +\n  '<p>탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.</p>\\n' +\n  '\\n' +\n  '<p>대화형 요소들 사이를 이동할 때는 <strong>Tab(탭)</strong> 또는 <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\\n' +\n  '\\n' +\n  '<h1>탭이 있는 대화 탐색</h1>\\n' +\n  '\\n' +\n  '<p>탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.</p>\\n' +\n  '\\n' +\n  '<p>이 대화 탭의 대화형 요소들 사이를 이동할 때는 <strong>Tab(탭)</strong> 또는\\n' +\n  '  <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\\n' +\n  '\\n' +\n  '<p>다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 <strong>화살표</strong>\\n' +\n  '  키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ms.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms',\n'<h1>Mulakan navigasi papan kekunci</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokus bar Menu</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokus Bar Alat</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokus pengaki</dt>\\n' +\n  '  <dd>Windows atau Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokus bar alat kontekstual</dt>\\n' +\n  '  <dd>Windows, Linux atau macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\\n' +\n  '  laluan elemen Pengaki.</p>\\n' +\n  '\\n' +\n  '<h1>Navigasi antara bahagian UI</h1>\\n' +\n  '\\n' +\n  '<p>Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Tertib <strong>Tab</strong> bahagian UI ini ialah:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Bar menu</li>\\n' +\n  '  <li>Setiap kumpulan bar alat</li>\\n' +\n  '  <li>Bar sisi</li>\\n' +\n  '  <li>Laluan elemen dalam pengaki</li>\\n' +\n  '  <li>Butang togol kiraan perkataan dalam pengaki</li>\\n' +\n  '  <li>Pautan penjenamaan dalam pengaki</li>\\n' +\n  '  <li>Pemegang saiz semula editor dalam pengaki</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Jika bahagian UI tidak wujud, ia dilangkau.</p>\\n' +\n  '\\n' +\n  '<p>Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan <strong>Shift+Tab</strong>\\n' +\n  '  akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.</p>\\n' +\n  '\\n' +\n  '<h1>Navigasi dalam bahagian UI</h1>\\n' +\n  '\\n' +\n  '<p>Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci <strong>Anak Panah</strong> yang bersesuaian.</p>\\n' +\n  '\\n' +\n  '<p>Kekunci anak panah <strong>Kiri</strong> dan <strong>Kanan</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>bergerak antara menu dalam bar menu.</li>\\n' +\n  '  <li>membukan submenu dalam menu.</li>\\n' +\n  '  <li>bergerak antara butang dalam kumpulan bar alat.</li>\\n' +\n  '  <li>Laluan elemen dalam pengaki.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Kekunci anak panah <strong>Bawah</strong> dan <strong>Atas</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>bergerak antara item menu dalam menu.</li>\\n' +\n  '  <li>bergerak antara item dalam menu timbul bar alat.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Kekunci <strong>Anak Panah</strong> berkitar dalam bahagian UI difokuskan.</p>\\n' +\n  '\\n' +\n  '<p>Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  \"<p>Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci <strong>Esc</strong> juga akan keluar daripada\\n\" +\n  '  navigasi papan kekunci sepenuhnya.</p>\\n' +\n  '\\n' +\n  '<h1>Laksanakan item menu atau butang bar alat</h1>\\n' +\n  '\\n' +\n  '<p>Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  atau <strong>bar Space</strong> untuk melaksanakan item.</p>\\n' +\n  '\\n' +\n  '<h1>Navigasi ke dialog tidak bertab</h1>\\n' +\n  '\\n' +\n  '<p>Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.</p>\\n' +\n  '\\n' +\n  '<p>Navigasi antara komponen dialog interaktif dengan menekan <strong>Tab</strong> atau <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigasi ke dialog bertab</h1>\\n' +\n  '\\n' +\n  '<p>Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.</p>\\n' +\n  '\\n' +\n  '<p>Navigasi antara komponen interaktif tab dialog ini dengan menekan <strong>Tab</strong> atau\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci <strong>Anak Panah</strong> yang bersesuaian\\n' +\n  '  untuk berkitar menerusi tab yang tersedia.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/nb_NO.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO',\n'<h1>Starte tastaturnavigering</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Utheve menylinjen</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt + F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Utheve verktøylinjen</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt + F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Utheve bunnteksten</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt + F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Utheve en kontekstuell verktøylinje</dt>\\n' +\n  '  <dd>Windows, Linux eller macOS: Ctrl + F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\\n' +\n  '  elementstien i bunnteksten.</p>\\n' +\n  '\\n' +\n  '<h1>Navigere mellom grensesnittdeler</h1>\\n' +\n  '\\n' +\n  '<p>Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på <strong>tabulatortasten</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på <strong>Shift + tabulatortasten</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Rekkefølgen til <strong>tabulatortasten</strong> gjennom grensesnittdelene er:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menylinjen</li>\\n' +\n  '  <li>Hver gruppe på verktøylinjen</li>\\n' +\n  '  <li>Sidestolpen</li>\\n' +\n  '  <li>Elementstien i bunnteksten</li>\\n' +\n  '  <li>Veksleknappen for ordantall i bunnteksten</li>\\n' +\n  '  <li>Merkelenken i bunnteksten</li>\\n' +\n  '  <li>Skaleringshåndtaket for redigeringsprogrammet i bunnteksten</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Hvis en grensesnittdel ikke er til stede, blir den hoppet over.</p>\\n' +\n  '\\n' +\n  '<p>Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på <strong>Shift + tabulatortasten</strong>\\n' +\n  '  for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.</p>\\n' +\n  '\\n' +\n  '<h1>Navigere innenfor grensesnittdeler</h1>\\n' +\n  '\\n' +\n  '<p>Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle <strong>piltasten</strong>.</p>\\n' +\n  '\\n' +\n  '<p>De <strong>venstre</strong> og <strong>høyre</strong> piltastene</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>beveger deg mellom menyer på menylinjen.</li>\\n' +\n  '  <li>åpner en undermeny i en meny.</li>\\n' +\n  '  <li>beveger deg mellom knapper i en gruppe på verktøylinjen.</li>\\n' +\n  '  <li>beveger deg mellom elementer i elementstien i bunnteksten.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Ned</strong>- og <strong>opp</strong>-piltastene</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>beveger deg mellom menyelementer i en meny.</li>\\n' +\n  '  <li>beveger deg mellom elementer i en hurtigmeny på verktøylinjen.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Med <strong>piltastene</strong> kan du bevege deg innenfor den uthevede grensesnittdelen.</p>\\n' +\n  '\\n' +\n  '<p>Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på <strong>Esc</strong>-tasten.</p>\\n' +\n  '\\n' +\n  '<p>Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på <strong>Esc</strong> også avslutte\\n' +\n  '  tastaturnavigeringen helt.</p>\\n' +\n  '\\n' +\n  '<h1>Utføre et menyelement eller en knapp på en verktøylinje</h1>\\n' +\n  '\\n' +\n  '<p>Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på <strong>Retur</strong>, <strong>Enter</strong>,\\n' +\n  '  eller <strong>mellomromstasten</strong> for å utføre elementet.</p>\\n' +\n  '\\n' +\n  '<h1>Navigere i dialogbokser uten faner</h1>\\n' +\n  '\\n' +\n  '<p>I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.</p>\\n' +\n  '\\n' +\n  '<p>Naviger mellom interaktive komponenter i dialogboksen ved å trykke på <strong>tabulatortasten</strong> eller <strong>Shift + tabulatortasten</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigere i fanebaserte dialogbokser</h1>\\n' +\n  '\\n' +\n  '<p>I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.</p>\\n' +\n  '\\n' +\n  '<p>Naviger mellom interaktive komponenter i fanen ved å trykke på <strong>tabulatortasten</strong> eller\\n' +\n  '  <strong>Shift + tabulatortasten</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle <strong>piltasten</strong>\\n' +\n  '  for å bevege deg mellom de tilgjengelige fanene.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/nl.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl',\n'<h1>Toetsenbordnavigatie starten</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Focus op de menubalk instellen</dt>\\n' +\n  '  <dd>Windows of Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Focus op de werkbalk instellen</dt>\\n' +\n  '  <dd>Windows of Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Focus op de voettekst instellen</dt>\\n' +\n  '  <dd>Windows of Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Focus op een contextuele werkbalk instellen</dt>\\n' +\n  '  <dd>Windows, Linux of macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\\n' +\n  '  in het elementenpad van de voettekst bevindt.</p>\\n' +\n  '\\n' +\n  '<h1>Navigeren tussen UI-secties</h1>\\n' +\n  '\\n' +\n  '<p>Druk op <strong>Tab</strong> om naar de volgende UI-sectie te gaan.</p>\\n' +\n  '\\n' +\n  '<p>Druk op <strong>Shift+Tab</strong> om naar de vorige UI-sectie te gaan.</p>\\n' +\n  '\\n' +\n  '<p>De <strong>Tab</strong>-volgorde van deze UI-secties is:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menubalk</li>\\n' +\n  '  <li>Elke werkbalkgroep</li>\\n' +\n  '  <li>Zijbalk</li>\\n' +\n  '  <li>Elementenpad in de voettekst</li>\\n' +\n  '  <li>Wisselknop voor aantal woorden in de voettekst</li>\\n' +\n  '  <li>Merkkoppeling in de voettekst</li>\\n' +\n  '  <li>Greep voor het wijzigen van het formaat van de editor in de voettekst</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.</p>\\n' +\n  '\\n' +\n  '<p>Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op <strong>Shift+Tab</strong> drukken\\n' +\n  '  om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.</p>\\n' +\n  '\\n' +\n  '<h1>Navigeren binnen UI-secties</h1>\\n' +\n  '\\n' +\n  '<p>Druk op de <strong>pijltjestoets</strong> om naar het betreffende UI-element te gaan.</p>\\n' +\n  '\\n' +\n  '<p>Met de pijltjestoetsen <strong>Links</strong> en <strong>Rechts</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  \"  <li>wissel je tussen menu's in de menubalk.</li>\\n\" +\n  '  <li>open je een submenu in een menu.</li>\\n' +\n  '  <li>wissel je tussen knoppen in een werkbalkgroep.</li>\\n' +\n  '  <li>wissel je tussen items in het elementenpad in de voettekst.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Met de pijltjestoetsen <strong>Omlaag</strong> en <strong>Omhoog</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>wissel je tussen menu-items in een menu.</li>\\n' +\n  '  <li>wissel je tussen items in een werkbalkpop-upmenu.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Met de <strong>pijltjestoetsen</strong> wissel je binnen de UI-sectie waarop de focus is ingesteld.</p>\\n' +\n  '\\n' +\n  '<p>Druk op de toets <strong>Esc</strong> om een geopend menu, submenu of pop-upmenu te sluiten.</p>\\n' +\n  '\\n' +\n  \"<p>Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets <strong>Esc</strong> drukken\\n\" +\n  '  om de toetsenbordnavigatie af te sluiten.</p>\\n' +\n  '\\n' +\n  '<h1>Een menu-item of werkbalkknop uitvoeren</h1>\\n' +\n  '\\n' +\n  '<p>Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  of de <strong>spatiebalk</strong> drukken om het item uit te voeren.</p>\\n' +\n  '\\n' +\n  '<h1>Navigeren in dialoogvensters zonder tabblad</h1>\\n' +\n  '\\n' +\n  '<p>Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.</p>\\n' +\n  '\\n' +\n  '<p>Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op <strong>Tab</strong> of <strong>Shift+Tab</strong> te drukken.</p>\\n' +\n  '\\n' +\n  '<h1>Navigeren in dialoogvensters met tabblad</h1>\\n' +\n  '\\n' +\n  '<p>Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.</p>\\n' +\n  '\\n' +\n  '<p>Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op <strong>Tab</strong> of\\n' +\n  '  <strong>Shift+Tab</strong> te drukken.</p>\\n' +\n  '\\n' +\n  '<p>Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste <strong>pijltjestoets</strong>\\n' +\n  '  te drukken om tussen de beschikbare tabbladen te wisselen.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/pl.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl',\n'<h1>Początek nawigacji przy użyciu klawiatury</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Ustaw fokus na pasek menu</dt>\\n' +\n  '  <dd>Windows lub Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Ustaw fokus na pasek narzędzi</dt>\\n' +\n  '  <dd>Windows lub Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Ustaw fokus na sekcję Footer</dt>\\n' +\n  '  <dd>Windows lub Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Ustaw fokus na kontekstowy pasek narzędzi</dt>\\n' +\n  '  <dd>Windows, Linux lub macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\\n' +\n  '  w ścieżce elementów w sekcji Footer — podkreślony.</p>\\n' +\n  '\\n' +\n  '<h1>Nawigacja pomiędzy sekcjami interfejsu użytkownika</h1>\\n' +\n  '\\n' +\n  '<p>Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Kolejność klawisza <strong>Tab</strong> w takich sekcjach interfejsu użytkownika jest następująca:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Pasek menu</li>\\n' +\n  '  <li>Każda grupa na pasku narzędzi</li>\\n' +\n  '  <li>Pasek boczny</li>\\n' +\n  '  <li>Ścieżka elementów w sekcji Footer</li>\\n' +\n  '  <li>Przycisk przełączania liczby słów w sekcji Footer</li>\\n' +\n  '  <li>Łącze brandujące w sekcji Footer</li>\\n' +\n  '  <li>Uchwyt zmiany rozmiaru edytora w sekcji Footer</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.</p>\\n' +\n  '\\n' +\n  '<p>Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie <strong>Shift+Tab</strong>\\n' +\n  '  przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.</p>\\n' +\n  '\\n' +\n  '<h1>Nawigacja wewnątrz sekcji interfejsu użytkownika</h1>\\n' +\n  '\\n' +\n  '<p>Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz <strong>strzałki</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Klawisze strzałek <strong>w prawo</strong> i <strong>w lewo</strong> służą do</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>przenoszenia się pomiędzy menu na pasku menu,</li>\\n' +\n  '  <li>otwarcia podmenu w menu,</li>\\n' +\n  '  <li>przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,</li>\\n' +\n  '  <li>przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Klawisze strzałek <strong>w dół</strong> i <strong>w górę</strong> służą do</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>przenoszenia się pomiędzy elementami menu w menu,</li>\\n' +\n  '  <li>przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Klawisze <strong>strzałek</strong> służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.</p>\\n' +\n  '\\n' +\n  '<p>Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza <strong>Esc</strong> powoduje wyjście\\n' +\n  '  z nawigacji przy użyciu klawiatury.</p>\\n' +\n  '\\n' +\n  '<h1>Wykonanie elementu menu lub przycisku paska narzędzi</h1>\\n' +\n  '\\n' +\n  '<p>Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  lub <strong>Spacja</strong>, aby go wykonać.</p>\\n' +\n  '\\n' +\n  '<h1>Nawigacja po oknie dialogowym bez kart</h1>\\n' +\n  '\\n' +\n  '<p>Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.</p>\\n' +\n  '\\n' +\n  '<p>Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze <strong>Tab</strong> lub <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Nawigacja po oknie dialogowym z kartami</h1>\\n' +\n  '\\n' +\n  '<p>W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.</p>\\n' +\n  '\\n' +\n  '<p>Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy <strong>Tab</strong> lub\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza <strong>strzałki</strong>\\n' +\n  '  w celu przemieszczenia się pomiędzy dostępnymi kartami.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/pt_BR.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR',\n'<h1>Iniciar navegação pelo teclado</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Foco na barra de menus</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Foco na barra de ferramentas</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Foco no rodapé</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Foco na barra de ferramentas contextual</dt>\\n' +\n  '  <dd>Windows, Linux ou macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\\n' +\n  '  caminho do elemento Rodapé.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar entre seções da IU</h1>\\n' +\n  '\\n' +\n  '<p>Para ir de uma seção da IU para a seguinte, pressione <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Para ir de uma seção da IU para a anterior, pressione <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>A ordem de <strong>Tab</strong> destas seções da IU é:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barra de menus</li>\\n' +\n  '  <li>Cada grupo da barra de ferramentas</li>\\n' +\n  '  <li>Barra lateral</li>\\n' +\n  '  <li>Caminho do elemento no rodapé</li>\\n' +\n  '  <li>Botão de alternar contagem de palavras no rodapé</li>\\n' +\n  '  <li>Link da marca no rodapé</li>\\n' +\n  '  <li>Alça de redimensionamento do editor no rodapé</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Se não houver uma seção da IU, ela será pulada.</p>\\n' +\n  '\\n' +\n  '<p>Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar <strong>Shift+Tab</strong>\\n' +\n  '  move o foco para o primeiro grupo da barra de ferramentas, não para o último.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar dentro das seções da IU</h1>\\n' +\n  '\\n' +\n  '<p>Para ir de um elemento da IU para o seguinte, pressione a <strong>Seta</strong> correspondente.</p>\\n' +\n  '\\n' +\n  '<p>As teclas de seta <strong>Esquerda</strong> e <strong>Direita</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>movem entre menus na barra de menus.</li>\\n' +\n  '  <li>abrem um submenu em um menu.</li>\\n' +\n  '  <li>movem entre botões em um grupo da barra de ferramentas.</li>\\n' +\n  '  <li>movem entre itens no caminho do elemento do rodapé.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>As teclas de seta <strong>Abaixo</strong> e <strong>Acima</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>movem entre itens de menu em um menu.</li>\\n' +\n  '  <li>movem entre itens em um menu suspenso da barra de ferramentas.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>As teclas de <strong>Seta</strong> alternam dentre a seção da IU em foco.</p>\\n' +\n  '\\n' +\n  '<p>Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Se o foco atual estiver no ‘alto’ de determinada seção da IU, pressionar <strong>Esc</strong> também sai\\n' +\n  '  totalmente da navegação pelo teclado.</p>\\n' +\n  '\\n' +\n  '<h1>Executar um item de menu ou botão da barra de ferramentas</h1>\\n' +\n  '\\n' +\n  '<p>Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  ou a <strong>Barra de espaço</strong> para executar o item.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar por caixas de diálogo sem guias</h1>\\n' +\n  '\\n' +\n  '<p>Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.</p>\\n' +\n  '\\n' +\n  '<p>Navegue entre componentes interativos de caixa de diálogo pressionando <strong>Tab</strong> ou <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar por caixas de diálogo com guias</h1>\\n' +\n  '\\n' +\n  '<p>Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.</p>\\n' +\n  '\\n' +\n  '<p>Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando <strong>Tab</strong> ou\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a <strong>Seta</strong>\\n' +\n  '  adequada para percorrer as guias disponíveis.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/pt_PT.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT',\n'<h1>Iniciar navegação com teclado</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Foco na barra de menu</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Foco na barra de ferramentas</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Foco no rodapé</dt>\\n' +\n  '  <dd>Windows ou Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Foco numa barra de ferramentas contextual</dt>\\n' +\n  '  <dd>Windows, Linux ou macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\\n' +\n  '  caminho do elemento do rodapé.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar entre secções de IU</h1>\\n' +\n  '\\n' +\n  '<p>Para se mover de uma secção de IU para a seguinte, prima <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Para se mover de uma secção de IU para a anterior, prima <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>A ordem de <strong>tabulação</strong> destas secções de IU é:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Barra de menu</li>\\n' +\n  '  <li>Cada grupo da barra de ferramentas</li>\\n' +\n  '  <li>Barra lateral</li>\\n' +\n  '  <li>Caminho do elemento no rodapé</li>\\n' +\n  '  <li>Botão de alternar da contagem de palavras no rodapé</li>\\n' +\n  '  <li>Ligação da marca no rodapé</li>\\n' +\n  '  <li>Alça de redimensionamento do editor no rodapé</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Se uma secção de IU não estiver presente, é ignorada.</p>\\n' +\n  '\\n' +\n  '<p>Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir <strong>Shift+Tab</strong>\\n' +\n  '  move o foco para o primeiro grupo da barra de ferramentas e não para o último.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar nas secções de IU</h1>\\n' +\n  '\\n' +\n  '<p>Para se mover de um elemento de IU para o seguinte, prima a tecla de <strong>seta</strong> adequada.</p>\\n' +\n  '\\n' +\n  '<p>As teclas de seta <strong>Para a esquerda</strong> e <strong>Para a direita</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>movem-se entre menus na barra de menu.</li>\\n' +\n  '  <li>abrem um submenu num menu.</li>\\n' +\n  '  <li>movem-se entre botões num grupo da barra de ferramentas.</li>\\n' +\n  '  <li>movem-se entre itens no caminho do elemento do rodapé.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>As teclas de seta <strong>Para cima</strong> e <strong>Para baixo</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>movem-se entre itens de menu num menu.</li>\\n' +\n  '  <li>movem-se entre itens num menu de pop-up da barra de ferramentas.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>As teclas de <strong>seta</strong> deslocam-se ciclicamente na secção de IU em foco.</p>\\n' +\n  '\\n' +\n  '<p>Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Se o foco atual estiver no \"topo\" de determinada secção de IU, premir a tecla <strong>Esc</strong> também fecha\\n' +\n  '  completamente a navegação com teclado.</p>\\n' +\n  '\\n' +\n  '<h1>Executar um item de menu ou botão da barra de ferramentas</h1>\\n' +\n  '\\n' +\n  '<p>Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima <strong>Retrocesso</strong>, <strong>Enter</strong>\\n' +\n  '  ou a <strong>Barra de espaço</strong> para executar o item.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar em diálogos sem separadores</h1>\\n' +\n  '\\n' +\n  '<p>Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.</p>\\n' +\n  '\\n' +\n  '<p>Navegue entre componentes interativos do diálogo, premindo <strong>Tab</strong> ou <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navegar em diálogos com separadores</h1>\\n' +\n  '\\n' +\n  '<p>Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.</p>\\n' +\n  '\\n' +\n  '<p>Navegue entre os componentes interativos deste separador do diálogo, premindo <strong>Tab</strong> ou\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de <strong>seta</strong>\\n' +\n  '  adequada para se deslocar ciclicamente pelos separadores disponíveis.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ro.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro',\n'<h1>Începeți navigarea de la tastatură</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Focalizare pe bara de meniu</dt>\\n' +\n  '  <dd>Windows sau Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Focalizare pe bara de instrumente</dt>\\n' +\n  '  <dd>Windows sau Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Focalizare pe subsol</dt>\\n' +\n  '  <dd>Windows sau Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Focalizare pe o bară de instrumente contextuală</dt>\\n' +\n  '  <dd>Windows, Linux sau macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\\n' +\n  '  calea elementului Subsol.</p>\\n' +\n  '\\n' +\n  '<h1>Navigați între secțiunile interfeței cu utilizatorul</h1>\\n' +\n  '\\n' +\n  '<p>Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ordinea cu <strong>Tab</strong> a acestor secțiuni ale interfeței cu utilizatorul este următoarea:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Bara de meniu</li>\\n' +\n  '  <li>Fiecare grup de bare de instrumente</li>\\n' +\n  '  <li>Bara laterală</li>\\n' +\n  '  <li>Calea elementului în subsol</li>\\n' +\n  '  <li>Buton de comutare a numărului de cuvinte în subsol</li>\\n' +\n  '  <li>Link de branding în subsol</li>\\n' +\n  '  <li>Mâner de redimensionare a editorului în subsol</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.</p>\\n' +\n  '\\n' +\n  '<p>În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului <strong>Shift+Tab</strong>\\n' +\n  '  mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.</p>\\n' +\n  '\\n' +\n  '<h1>Navigați în secțiunile interfeței cu utilizatorul</h1>\\n' +\n  '\\n' +\n  '<p>Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu <strong>săgeata</strong> corespunzătoare.</p>\\n' +\n  '\\n' +\n  '<p>Tastele cu săgeți către <strong>stânga</strong> și <strong>dreapta</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>navighează între meniurile din bara de meniuri.</li>\\n' +\n  '  <li>deschid un sub-meniu dintr-un meniu.</li>\\n' +\n  '  <li>navighează între butoanele dintr-un grup de bare de instrumente.</li>\\n' +\n  '  <li>navighează între elementele din calea elementelor subsolului.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tastele cu săgeți în <strong>sus</strong> și în <strong>jos</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>navighează între elementele de meniu dintr-un meniu.</li>\\n' +\n  '  <li>navighează între elementele unui meniu pop-up din bara de instrumente.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Tastele cu <strong>săgeți</strong> navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.</p>\\n' +\n  '\\n' +\n  '<p>Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei <strong>Esc</strong> se iese, de asemenea,\\n' +\n  '  în întregime din navigarea de la tastatură.</p>\\n' +\n  '\\n' +\n  '<h1>Executarea unui element de meniu sau a unui buton din bara de instrumente</h1>\\n' +\n  '\\n' +\n  '<p>Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  sau <strong>bara de spațiu</strong> pentru a executa elementul.</p>\\n' +\n  '\\n' +\n  '<h1>Navigarea de dialoguri fără file</h1>\\n' +\n  '\\n' +\n  '<p>În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.</p>\\n' +\n  '\\n' +\n  '<p>Navigați între componentele dialogului interactiv apăsând <strong>Tab</strong> sau <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigarea de dialoguri cu file</h1>\\n' +\n  '\\n' +\n  '<p>În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.</p>\\n' +\n  '\\n' +\n  '<p>Navigați între componentele interactive ale acestei file de dialog apăsând <strong>Tab</strong> sau\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând <strong>săgeata</strong> corespunzătoare\\n' +\n  '  pentru a parcurge filele disponibile.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/ru.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru',\n'<h1>Начните управление с помощью клавиатуры</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Фокус на панели меню</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Фокус на панели инструментов</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Фокус на нижнем колонтитуле</dt>\\n' +\n  '  <dd>Windows или Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Фокус на контекстной панели инструментов</dt>\\n' +\n  '  <dd>Windows, Linux или macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\\n' +\n  '  в пути элементов нижнего колонтитула).</p>\\n' +\n  '\\n' +\n  '<h1>Переход между разделами пользовательского интерфейса</h1>\\n' +\n  '\\n' +\n  '<p>Чтобы перейти из текущего раздела интерфейса в следующий, нажмите <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Вкладки</strong> разделов интерфейса расположены в следующем порядке:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Панель меню</li>\\n' +\n  '  <li>Группы панели инструментов</li>\\n' +\n  '  <li>Боковая панель</li>\\n' +\n  '  <li>Путь элементов нижнего колонтитула</li>\\n' +\n  '  <li>Подсчет слов/символов в нижнем колонтитуле</li>\\n' +\n  '  <li>Брендовая ссылка в нижнем колонтитуле</li>\\n' +\n  '  <li>Угол для изменения размера окна редактора</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Если раздел интерфейса отсутствует, он пропускается.</p>\\n' +\n  '\\n' +\n  '<p>Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш <strong>Shift+Tab</strong>\\n' +\n  '  фокус переносится на первую группу панели инструментов, а не на последнюю.</p>\\n' +\n  '\\n' +\n  '<h1>Переход между элементами внутри разделов пользовательского интерфейса</h1>\\n' +\n  '\\n' +\n  '<p>Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую <strong>клавишу со стрелкой</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Клавиши со стрелками <strong>влево</strong> и <strong>вправо</strong> позволяют</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>перемещаться между разными меню в панели меню.</li>\\n' +\n  '  <li>открывать разделы меню.</li>\\n' +\n  '  <li>перемещаться между кнопками в группе панели инструментов.</li>\\n' +\n  '  <li>перемещаться между элементами в пути элементов нижнего колонтитула.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Клавиши со стрелками <strong>вниз</strong> и <strong>вверх</strong> позволяют</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>перемещаться между элементами одного меню.</li>\\n' +\n  '  <li>перемещаться между элементами всплывающего меню в панели инструментов.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>При использовании <strong>клавиш со стрелками</strong> вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.</p>\\n' +\n  '\\n' +\n  '<p>Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши <strong>Esc</strong> также приведет\\n' +\n  '  к выходу из режима управления с помощью клавиатуры.</p>\\n' +\n  '\\n' +\n  '<h1>Использование элемента меню или кнопки на панели инструментов</h1>\\n' +\n  '\\n' +\n  '<p>Когда элемент меню или кнопка панели инструментов будут выделены, нажмите <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  или <strong>Space</strong>, чтобы их активировать.</p>\\n' +\n  '\\n' +\n  '<h1>Управление в диалоговом окне без вкладок</h1>\\n' +\n  '\\n' +\n  '<p>При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.</p>\\n' +\n  '\\n' +\n  '<p>Для перехода между интерактивными компонентами диалогового окна нажимайте <strong>Tab</strong> или <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Управление в диалоговом окне с вкладками</h1>\\n' +\n  '\\n' +\n  '<p>При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.</p>\\n' +\n  '\\n' +\n  '<p>Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте <strong>Tab</strong> или\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте <strong>клавиши со стрелками</strong>\\n' +\n  '  для циклического переключения между доступными вкладками.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/sk.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk',\n'<h1>Začíname s navigáciou pomocou klávesnice</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Prejsť na panel s ponukami</dt>\\n' +\n  '  <dd>Windows alebo Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Prejsť na panel nástrojov</dt>\\n' +\n  '  <dd>Windows alebo Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Prejsť na pätičku</dt>\\n' +\n  '  <dd>Windows alebo Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Prejsť na kontextový panel nástrojov</dt>\\n' +\n  '  <dd>Windows, Linux alebo macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\\n' +\n  '  cesty k pätičke podčiarknutá.</p>\\n' +\n  '\\n' +\n  '<h1>Navigácia medzi časťami používateľského rozhrania</h1>\\n' +\n  '\\n' +\n  '<p>Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá <strong>Shift + Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla <strong>Tab</strong>:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Panel s ponukou</li>\\n' +\n  '  <li>Každá skupina panela nástrojov</li>\\n' +\n  '  <li>Bočný panel</li>\\n' +\n  '  <li>Cesta k prvku v pätičke</li>\\n' +\n  '  <li>Prepínač počtu slov v pätičke</li>\\n' +\n  '  <li>Odkaz na informácie o značke v pätičke</li>\\n' +\n  '  <li>Úchyt na zmenu veľkosti editora v pätičke</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.</p>\\n' +\n  '\\n' +\n  '<p>Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov <strong>Shift+Tab</strong>\\n' +\n  '  prejdete na prvú skupinu panela nástrojov, nie na poslednú.</p>\\n' +\n  '\\n' +\n  '<h1>Navigácia v rámci častí používateľského rozhrania</h1>\\n' +\n  '\\n' +\n  '<p>Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so <strong>šípkou</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Klávesy so šípkami <strong>doľava</strong> a <strong>doprava</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>umožňujú presun medzi ponukami na paneli ponúk,</li>\\n' +\n  '  <li>otvárajú podponuku v rámci ponuky,</li>\\n' +\n  '  <li>umožňujú presun medzi tlačidlami v skupine panelov nástrojov,</li>\\n' +\n  '  <li>umožňujú presun medzi položkami cesty prvku v pätičke.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Klávesy so šípkami <strong>dole</strong> a <strong>hore</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>umožňujú presun medzi položkami ponuky,</li>\\n' +\n  '  <li>umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Klávesy so <strong>šípkami</strong> vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.</p>\\n' +\n  '\\n' +\n  '<p>Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu <strong>Esc</strong> úplne ukončíte tiež\\n' +\n  '  navigáciu pomocou klávesnice.</p>\\n' +\n  '\\n' +\n  '<h1>Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov</h1>\\n' +\n  '\\n' +\n  '<p>Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  alebo <strong>medzerníka</strong> vykonáte príslušný príkaz položky.</p>\\n' +\n  '\\n' +\n  '<h1>Navigácia v dialógových oknách bez záložiek</h1>\\n' +\n  '\\n' +\n  '<p>Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.</p>\\n' +\n  '\\n' +\n  '<p>Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov <strong>Tab</strong> alebo <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigácia v dialógových oknách so záložkami</h1>\\n' +\n  '\\n' +\n  '<p>Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.</p>\\n' +\n  '\\n' +\n  '<p>Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov <strong>Tab</strong> alebo\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so <strong>šípkou</strong>\\n' +\n  '  prepínať medzi dostupnými záložkami.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/sl_SI.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI',\n'<h1>Začetek krmarjenja s tipkovnico</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokus na menijsko vrstico</dt>\\n' +\n  '  <dd>Windows ali Linux: Alt + F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokus na orodno vrstico</dt>\\n' +\n  '  <dd>Windows ali Linux: Alt + F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokus na nogo</dt>\\n' +\n  '  <dd>Windows ali Linux: Alt + F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokus na kontekstualno orodno vrstico</dt>\\n' +\n  '  <dd>Windows, Linux ali macOS: Ctrl + F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\\n' +\n  '  poti do elementa noge.</p>\\n' +\n  '\\n' +\n  '<h1>Krmarjenje med razdelki uporabniškega vmesnika</h1>\\n' +\n  '\\n' +\n  '<p>Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite <strong>tabulatorko</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite <strong>shift + tabulatorko</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate <strong>tabulatorko</strong>, je:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menijska vrstica</li>\\n' +\n  '  <li>Posamezne skupine orodne vrstice</li>\\n' +\n  '  <li>Stranska vrstica</li>\\n' +\n  '  <li>Pod do elementa v nogi</li>\\n' +\n  '  <li>Gumb za preklop štetja besed v nogi</li>\\n' +\n  '  <li>Povezava do blagovne znamke v nogi</li>\\n' +\n  '  <li>Ročaj za spreminjanje velikosti urejevalnika v nogi</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.</p>\\n' +\n  '\\n' +\n  '<p>Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na <strong>shift + tabulatorko</strong>\\n' +\n  '  fokus premaknete na prvo skupino orodne vrstice, ne zadnjo</p>.\\n' +\n  '\\n' +\n  '<h1>Krmarjenje v razdelkih uporabniškega vmesnika</h1>\\n' +\n  '\\n' +\n  '<p>Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno <strong>puščično</strong> tipko.</p>\\n' +\n  '\\n' +\n  '<p><strong>Leva</strong> in <strong>desna</strong> puščična tipka</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>omogočata premikanje med meniji v menijski vrstici.</li>\\n' +\n  '  <li>odpreta podmeni v meniju.</li>\\n' +\n  '  <li>omogočata premikanje med gumbi v skupini orodne vrstice.</li>\\n' +\n  '  <li>omogočata premikanje med elementi na poti do elementov noge.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Spodnja</strong> in <strong>zgornja</strong> puščična tipka</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>omogočata premikanje med elementi menija.</li>\\n' +\n  '  <li>omogočata premikanje med elementi v pojavnem meniju orodne vrstice.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Puščične</strong> tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.</p>\\n' +\n  '\\n' +\n  '<p>Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke <strong>Esc</strong> zaprete\\n' +\n  '  tudi celotno krmarjenje s tipkovnico.</p>\\n' +\n  '\\n' +\n  '<h1>Izvajanje menijskega elementa ali gumba orodne vrstice</h1>\\n' +\n  '\\n' +\n  '<p>Ko je označen želeni menijski element ali orodja vrstica, pritisnite <strong>vračalko</strong>, <strong>Enter</strong>\\n' +\n  '  ali <strong>preslednico</strong>, da izvedete element.</p>\\n' +\n  '\\n' +\n  '<h1>Krmarjenje po pogovornih oknih brez zavihkov</h1>\\n' +\n  '\\n' +\n  '<p>Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.</p>\\n' +\n  '\\n' +\n  '<p>Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom <strong>tabulatorke</strong> ali kombinacije tipke <strong>shift + tabulatorke</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Krmarjenje po pogovornih oknih z zavihki</h1>\\n' +\n  '\\n' +\n  '<p>Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.</p>\\n' +\n  '\\n' +\n  '<p>Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom <strong>tabulatorke</strong> ali\\n' +\n  '  kombinacije tipke <strong>shift + tabulatorke</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno <strong>puščično</strong>\\n' +\n  '  tipko, da se pomaknete med razpoložljivimi zavihki.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/sv_SE.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE',\n'<h1>Påbörja tangentbordsnavigering</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Fokusera på menyraden</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Fokusera på verktygsraden</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Fokusera på verktygsraden</dt>\\n' +\n  '  <dd>Windows eller Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Fokusera på en snabbverktygsrad</dt>\\n' +\n  '  <dd>Windows, Linux eller macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\\n' +\n  '  sidfotens elementsökväg.</p>\\n' +\n  '\\n' +\n  '<h1>Navigera mellan UI-avsnitt</h1>\\n' +\n  '\\n' +\n  '<p>Flytta från ett UI-avsnitt till nästa genom att trycka på <strong>Tabb</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Flytta från ett UI-avsnitt till det föregående genom att trycka på <strong>Skift+Tabb</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Tabb</strong>-ordningen för dessa UI-avsnitt är:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menyrad</li>\\n' +\n  '  <li>Varje verktygsradsgrupp</li>\\n' +\n  '  <li>Sidoruta</li>\\n' +\n  '  <li>Elementsökväg i sidfoten</li>\\n' +\n  '  <li>Växlingsknapp för ordantal i sidfoten</li>\\n' +\n  '  <li>Varumärkeslänk i sidfoten</li>\\n' +\n  '  <li>Storlekshandtag för redigeraren i sidfoten</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Om ett UI-avsnitt inte finns hoppas det över.</p>\\n' +\n  '\\n' +\n  '<p>Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\\n' +\n  '  när du trycker på <strong>Skift+Tabb</strong>, inte till den sista.</p>\\n' +\n  '\\n' +\n  '<h1>Navigera i UI-avsnitt</h1>\\n' +\n  '\\n' +\n  '<p>Flytta från ett UI-element till nästa genom att trycka på motsvarande <strong>piltangent</strong>.</p>\\n' +\n  '\\n' +\n  '<p><strong>Vänsterpil</strong> och <strong>högerpil</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>flytta mellan menyer på menyraden.</li>\\n' +\n  '  <li>öppna en undermeny på en meny.</li>\\n' +\n  '  <li>flytta mellan knappar i en verktygsradgrupp.</li>\\n' +\n  '  <li>flytta mellan objekt i sidfotens elementsökväg.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Nedpil</strong> och <strong>uppil</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>flytta mellan menyalternativ på en meny.</li>\\n' +\n  '  <li>flytta mellan alternativ på en popup-meny på verktygsraden.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Piltangenterna</strong> cirkulerar inom det fokuserade UI-avsnittet.</p>\\n' +\n  '\\n' +\n  '<p>Tryck på <strong>Esc</strong>-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.</p>\\n' +\n  '\\n' +\n  '<p>Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\\n' +\n  '  du trycker på <strong>Esc</strong>-tangenten.</p>\\n' +\n  '\\n' +\n  '<h1>Köra ett menyalternativ eller en verktygfältsknapp</h1>\\n' +\n  '\\n' +\n  '<p>När menyalternativet eller verktygsradsknappen är markerad trycker du på <strong>Retur</strong>, <strong>Enter</strong>\\n' +\n  '  eller <strong>blanksteg</strong> för att köra alternativet.</p>\\n' +\n  '\\n' +\n  '<h1>Navigera i dialogrutor utan flikar</h1>\\n' +\n  '\\n' +\n  '<p>I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.</p>\\n' +\n  '\\n' +\n  '<p>Navigera mellan interaktiva dialogkomponenter genom att trycka på <strong>Tabb</strong> eller <strong>Skift+Tabb</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Navigera i dialogrutor med flikar</h1>\\n' +\n  '\\n' +\n  '<p>I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.</p>\\n' +\n  '\\n' +\n  '<p>Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på <strong>Tabb</strong> eller\\n' +\n  '  <strong>Skift+Tabb</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande <strong>piltangent</strong>\\n' +\n  '  för att cirkulera mellan de tillgängliga flikarna.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/th_TH.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH',\n'<h1>เริ่มต้นการนำทางด้วยแป้นพิมพ์</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>โฟกัสที่แถบเมนู</dt>\\n' +\n  '  <dd>Windows หรือ Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>โฟกัสที่แถบเครื่องมือ</dt>\\n' +\n  '  <dd>Windows หรือ Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>โฟกัสที่ส่วนท้าย</dt>\\n' +\n  '  <dd>Windows หรือ Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>โฟกัสที่แถบเครื่องมือตามบริบท</dt>\\n' +\n  '  <dd>Windows, Linux หรือ macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\\n' +\n  '  พาธองค์ประกอบส่วนท้าย</p>\\n' +\n  '\\n' +\n  '<h1>การนำทางระหว่างส่วนต่างๆ ของ UI</h1>\\n' +\n  '\\n' +\n  '<p>ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด <strong>Tab</strong></p>\\n' +\n  '\\n' +\n  '<p>ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด <strong>Shift+Tab</strong></p>\\n' +\n  '\\n' +\n  '<p>ลำดับ<strong>แท็บ</strong>ของส่วนต่างๆ ของ UI คือ:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>แถบเมนู</li>\\n' +\n  '  <li>แต่ละกลุ่มแถบเครื่องมือ</li>\\n' +\n  '  <li>แถบข้าง</li>\\n' +\n  '  <li>พาธองค์ประกอบในส่วนท้าย</li>\\n' +\n  '  <li>ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย</li>\\n' +\n  '  <li>ลิงก์ชื่อแบรนด์ในส่วนท้าย</li>\\n' +\n  '  <li>จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป</p>\\n' +\n  '\\n' +\n  '<p>หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด <strong>Shift+Tab</strong>\\n' +\n  '  จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย</p>\\n' +\n  '\\n' +\n  '<h1>การนำทางภายในส่วนต่างๆ ของ UI</h1>\\n' +\n  '\\n' +\n  '<p>ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่ม<strong>ลูกศร</strong>ที่เหมาะสม</p>\\n' +\n  '\\n' +\n  '<p>ปุ่มลูกศร<strong>ซ้าย</strong>และ<strong>ขวา</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู</li>\\n' +\n  '  <li>เปิดเมนูย่อยในเมนู</li>\\n' +\n  '  <li>ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ</li>\\n' +\n  '  <li>ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>ปุ่มลูกศร<strong>ลง</strong>และ<strong>ขึ้น</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู</li>\\n' +\n  '  <li>ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>ปุ่ม<strong>ลูกศร</strong>จะเลื่อนไปมาภายในส่วน UI ที่โฟกัส</p>\\n' +\n  '\\n' +\n  '<p>ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม <strong>Esc</strong></p>\\n' +\n  '\\n' +\n  '<p>หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม <strong>Esc</strong> จะทำให้ออกจาก\\n' +\n  '  การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน</p>\\n' +\n  '\\n' +\n  '<h1>การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ</h1>\\n' +\n  '\\n' +\n  '<p>เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  หรือ <strong>Space bar</strong> เพื่อดำเนินการรายการดังกล่าว</p>\\n' +\n  '\\n' +\n  '<h1>การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ</h1>\\n' +\n  '\\n' +\n  '<p>ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด</p>\\n' +\n  '\\n' +\n  '<p>นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด <strong>Tab</strong> หรือ <strong>Shift+Tab</strong></p>\\n' +\n  '\\n' +\n  '<h1>การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ</h1>\\n' +\n  '\\n' +\n  '<p>ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด</p>\\n' +\n  '\\n' +\n  '<p>นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด <strong>Tab</strong> หรือ\\n' +\n  '  <strong>Shift+Tab</strong></p>\\n' +\n  '\\n' +\n  '<p>สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่ม<strong>ลูกศร</strong>ที่เหมาะสม\\n' +\n  '  เพื่อเลือกแท็บที่ใช้ได้</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/tr.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr',\n'<h1>Klavyeyle gezintiyi başlatma</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Menü çubuğuna odaklan</dt>\\n' +\n  '  <dd>Windows veya Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Araç çubuğuna odaklan</dt>\\n' +\n  '  <dd>Windows veya Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Alt bilgiye odaklan</dt>\\n' +\n  '  <dd>Windows veya Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Bağlamsal araç çubuğuna odaklan</dt>\\n' +\n  '  <dd>Windows, Linux veya macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\\n' +\n  '  yolundaysa altı çizilir.</p>\\n' +\n  '\\n' +\n  '<h1>Kullanıcı arabirimi bölümleri arasında gezinme</h1>\\n' +\n  '\\n' +\n  '<p>Sonraki kullanıcı arabirimi bölümüne gitmek için <strong>Sekme</strong> tuşuna basın.</p>\\n' +\n  '\\n' +\n  '<p>Önceki kullanıcı arabirimi bölümüne gitmek için <strong>Shift+Sekme</strong> tuşlarına basın.</p>\\n' +\n  '\\n' +\n  '<p>Bu kullanıcı arabirimi bölümlerinin <strong>Sekme</strong> sırası:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Menü çubuğu</li>\\n' +\n  '  <li>Her araç çubuğu grubu</li>\\n' +\n  '  <li>Kenar çubuğu</li>\\n' +\n  '  <li>Alt bilgide öğe yolu</li>\\n' +\n  '  <li>Alt bilgide sözcük sayısı geçiş düğmesi</li>\\n' +\n  '  <li>Alt bilgide marka bağlantısı</li>\\n' +\n  '  <li>Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Kullanıcı arabirimi bölümü yoksa atlanır.</p>\\n' +\n  '\\n' +\n  '<p>Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse <strong>Shift+Sekme</strong> tuşlarına basıldığında\\n' +\n  '  odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.</p>\\n' +\n  '\\n' +\n  '<h1>Kullanıcı arabirimi bölümleri içinde gezinme</h1>\\n' +\n  '\\n' +\n  '<p>Sonraki kullanıcı arabirimi elemanına gitmek için uygun <strong>Ok</strong> tuşuna basın.</p>\\n' +\n  '\\n' +\n  '<p><strong>Sol</strong> ve <strong>Sağ</strong> ok tuşları</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>menü çubuğundaki menüler arasında hareket eder.</li>\\n' +\n  '  <li>menüde bir alt menü açar.</li>\\n' +\n  '  <li>araç çubuğu grubundaki düğmeler arasında hareket eder.</li>\\n' +\n  '  <li>alt bilginin öğe yolundaki öğeler arasında hareket eder.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Aşağı</strong> ve <strong>Yukarı</strong> ok tuşları</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>menüdeki menü öğeleri arasında hareket eder.</li>\\n' +\n  '  <li>araç çubuğu açılır menüsündeki öğeler arasında hareket eder.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>Ok</strong> tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.</p>\\n' +\n  '\\n' +\n  '<p>Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için <strong>Esc</strong> tuşuna basın.</p>\\n' +\n  '\\n' +\n  '<p>Geçerli odak belirli bir kullanıcı arabirimi bölümünün \"üst\" kısmındaysa <strong>Esc</strong> tuşuna basıldığında\\n' +\n  '  klavyeyle gezintiden de tamamen çıkılır.</p>\\n' +\n  '\\n' +\n  '<h1>Menü öğesini veya araç çubuğu düğmesini yürütme</h1>\\n' +\n  '\\n' +\n  '<p>İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında <strong>Return</strong>, <strong>Enter</strong>\\n' +\n  '  veya <strong>Ara çubuğu</strong> tuşuna basın.</p>\\n' +\n  '\\n' +\n  '<h1>Sekme bulunmayan iletişim kutularında gezinme</h1>\\n' +\n  '\\n' +\n  '<p>Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.</p>\\n' +\n  '\\n' +\n  '<p>Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için <strong>Sekme</strong> veya <strong>Shift+ Sekme</strong> tuşlarına basın.</p>\\n' +\n  '\\n' +\n  '<h1>Sekmeli iletişim kutularında gezinme</h1>\\n' +\n  '\\n' +\n  '<p>Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.</p>\\n' +\n  '\\n' +\n  '<p>Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için <strong>Sekme</strong> veya\\n' +\n  '  <strong>Shift+Sekme</strong> tuşlarına basın.</p>\\n' +\n  '\\n' +\n  '<p>Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun <strong>Ok</strong> tuşuna basarak\\n' +\n  '  başka bir iletişim kutusu sekmesine geçiş yapın.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/uk.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk',\n'<h1>Початок роботи з навігацією за допомогою клавіатури</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Фокус на рядок меню</dt>\\n' +\n  '  <dd>Windows або Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Фокус на панелі інструментів</dt>\\n' +\n  '  <dd>Windows або Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Фокус на розділі \"Нижній колонтитул\"</dt>\\n' +\n  '  <dd>Windows або Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Фокус на контекстній панелі інструментів</dt>\\n' +\n  '  <dd>Windows, Linux або macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\\n' +\n  '  шляху до елемента \"Нижній колонтитул\".</p>\\n' +\n  '\\n' +\n  '<h1>Навігація між розділами інтерфейсу користувача</h1>\\n' +\n  '\\n' +\n  '<p>Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Порядок <strong>Вкладок</strong> цих розділів інтерфейсу користувача такий:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Рядок меню</li>\\n' +\n  '  <li>Кожна група панелей інструментів</li>\\n' +\n  '  <li>Бічна панель</li>\\n' +\n  '  <li>Шлях до елементів у розділі \"Нижній колонтитул\"</li>\\n' +\n  '  <li>Кнопка перемикача \"Кількість слів\" у розділі \"Нижній колонтитул\"</li>\\n' +\n  '  <li>Посилання на брендинг у розділі \"Нижній колонтитул\"</li>\\n' +\n  '  <li>Маркер змінення розміру в розділі \"Нижній колонтитул\"</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Якщо розділ інтерфейсу користувача відсутній, він пропускається.</p>\\n' +\n  '\\n' +\n  '<p>Якщо фокус навігації клавіатури знаходиться на розділі \"Нижній колонтитул\", але користувач не бачить видиму бічну панель, натисніть <strong>Shift+Tab</strong>,\\n' +\n  '  щоб перемістити фокус на першу групу панелі інструментів, а не на останню.</p>\\n' +\n  '\\n' +\n  '<h1>Навігація в межах розділів інтерфейсу користувача</h1>\\n' +\n  '\\n' +\n  '<p>Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу <strong>зі стрілкою</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Клавіші зі стрілками <strong>Ліворуч</strong> і <strong>Праворуч</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>переміщують між меню в рядку меню.</li>\\n' +\n  '  <li>відкривають вкладене меню в меню.</li>\\n' +\n  '  <li>переміщують користувача між кнопками в групі панелі інструментів.</li>\\n' +\n  '  <li>переміщують між елементами в шляху до елементів у розділі \"Нижній колонтитул\".</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Клавіші зі стрілками <strong>Вниз</strong> і <strong>Вгору</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>переміщують між елементами меню в меню.</li>\\n' +\n  '  <li>переміщують між елементами в спливаючому меню панелі інструментів.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Клавіші <strong>зі стрілками</strong> переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.</p>\\n' +\n  '\\n' +\n  '<p>Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші <strong>Esc</strong> також виконує вихід\\n' +\n  '  з навігації за допомогою клавіатури повністю.</p>\\n' +\n  '\\n' +\n  '<h1>Виконання елементу меню або кнопки панелі інструментів</h1>\\n' +\n  '\\n' +\n  '<p>Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  або <strong>Пробіл</strong>, щоб виконати цей елемент.</p>\\n' +\n  '\\n' +\n  '<h1>Навігація по діалоговим вікнам без вкладок</h1>\\n' +\n  '\\n' +\n  '<p>У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.</p>\\n' +\n  '\\n' +\n  '<p>Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші <strong>Tab</strong> або <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Навігація по діалоговим вікнам з вкладками</h1>\\n' +\n  '\\n' +\n  '<p>У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.</p>\\n' +\n  '\\n' +\n  '<p>Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші <strong>Tab</strong> або\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу <strong>зі стрілкою</strong>,\\n' +\n  '  щоб циклічно переходити по доступним вкладкам.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/vi.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi',\n'<h1>Bắt đầu điều hướng bàn phím</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>Tập trung vào thanh menu</dt>\\n' +\n  '  <dd>Windows hoặc Linux: Alt+F9</dd>\\n' +\n  '  <dd>macOS: &#x2325;F9</dd>\\n' +\n  '  <dt>Tập trung vào thanh công cụ</dt>\\n' +\n  '  <dd>Windows hoặc Linux: Alt+F10</dd>\\n' +\n  '  <dd>macOS: &#x2325;F10</dd>\\n' +\n  '  <dt>Tập trung vào chân trang</dt>\\n' +\n  '  <dd>Windows hoặc Linux: Alt+F11</dd>\\n' +\n  '  <dd>macOS: &#x2325;F11</dd>\\n' +\n  '  <dt>Tập trung vào thanh công cụ ngữ cảnh</dt>\\n' +\n  '  <dd>Windows, Linux hoặc macOS: Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\\n' +\n  '  đường dẫn phần tử Chân trang).</p>\\n' +\n  '\\n' +\n  '<h1>Di chuyển qua lại giữa các phần UI</h1>\\n' +\n  '\\n' +\n  '<p>Để di chuyển từ một phần UI sang phần tiếp theo, ấn <strong>Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Để di chuyển từ một phần UI về phần trước đó, ấn <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Thứ tự <strong>Tab</strong> của các phần UI này như sau:</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>Thanh menu</li>\\n' +\n  '  <li>Từng nhóm thanh công cụ</li>\\n' +\n  '  <li>Thanh bên</li>\\n' +\n  '  <li>Đường dẫn phần tử trong chân trang</li>\\n' +\n  '  <li>Nút chuyển đổi đếm chữ ở chân trang</li>\\n' +\n  '  <li>Liên kết thương hiệu ở chân trang</li>\\n' +\n  '  <li>Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.</p>\\n' +\n  '\\n' +\n  '<p>Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn <strong>Shift+Tab</strong>\\n' +\n  '  sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.</p>\\n' +\n  '\\n' +\n  '<h1>Di chuyển qua lại trong các phần UI</h1>\\n' +\n  '\\n' +\n  '<p>Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím <strong>Mũi tên</strong> tương ứng cho phù hợp.</p>\\n' +\n  '\\n' +\n  '<p>Các phím mũi tên <strong>Trái</strong> và <strong>Phải</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>di chuyển giữa các menu trong thanh menu.</li>\\n' +\n  '  <li>mở menu phụ trong một menu.</li>\\n' +\n  '  <li>di chuyển giữa các nút trong nhóm thanh công cụ.</li>\\n' +\n  '  <li>di chuyển giữa các mục trong đường dẫn phần tử của chân trang.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Các phím mũi tên <strong>Hướng xuống</strong> và <strong>Hướng lên</strong></p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>di chuyển giữa các mục menu trong menu.</li>\\n' +\n  '  <li>di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p>Các phím <strong>mũi tên</strong> xoay vòng trong một phần UI tập trung.</p>\\n' +\n  '\\n' +\n  '<p>Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím <strong>Esc</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím <strong>Esc</strong> cũng sẽ thoát\\n' +\n  '  toàn bộ phần điều hướng bàn phím.</p>\\n' +\n  '\\n' +\n  '<h1>Thực hiện chức năng của một mục menu hoặc nút thanh công cụ</h1>\\n' +\n  '\\n' +\n  '<p>Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn <strong>Return</strong>, <strong>Enter</strong>,\\n' +\n  '  hoặc <strong>Phím cách</strong> để thực hiện chức năng mục đó.</p>\\n' +\n  '\\n' +\n  '<h1>Điều hướng giữa các hộp thoại không có nhiều tab</h1>\\n' +\n  '\\n' +\n  '<p>Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.</p>\\n' +\n  '\\n' +\n  '<p>Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn <strong>Tab</strong> hoặc <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<h1>Điều hướng giữa các hộp thoại có nhiều tab</h1>\\n' +\n  '\\n' +\n  '<p>Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.</p>\\n' +\n  '\\n' +\n  '<p>Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn <strong>Tab</strong> hoặc\\n' +\n  '  <strong>Shift+Tab</strong>.</p>\\n' +\n  '\\n' +\n  '<p>Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím <strong>Mũi tên</strong> phù hợp\\n' +\n  '  để xoay vòng các tab hiện có.</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/zh_CN.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN',\n'<h1>开始键盘导航</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>聚焦于菜单栏</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F9</dd>\\n' +\n  '  <dd>macOS：&#x2325;F9</dd>\\n' +\n  '  <dt>聚焦于工具栏</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F10</dd>\\n' +\n  '  <dd>macOS：&#x2325;F10</dd>\\n' +\n  '  <dt>聚焦于页脚</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F11</dd>\\n' +\n  '  <dd>macOS：&#x2325;F11</dd>\\n' +\n  '  <dt>聚焦于上下文工具栏</dt>\\n' +\n  '  <dd>Windows、Linux 或 macOS：Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>导航将在第一个 UI 项上开始，其中突出显示该项，或者对于页脚元素路径中的第一项，将为其添加下划线。</p>\\n' +\n  '\\n' +\n  '<h1>在 UI 部分之间导航</h1>\\n' +\n  '\\n' +\n  '<p>要从一个 UI 部分移至下一个，请按 <strong>Tab</strong>。</p>\\n' +\n  '\\n' +\n  '<p>要从一个 UI 部分移至上一个，请按 <strong>Shift+Tab</strong>。</p>\\n' +\n  '\\n' +\n  '<p>这些 UI 部分的 <strong>Tab</strong> 顺序为：</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>菜单栏</li>\\n' +\n  '  <li>每个工具栏组</li>\\n' +\n  '  <li>边栏</li>\\n' +\n  '  <li>页脚中的元素路径</li>\\n' +\n  '  <li>页脚中的字数切换按钮</li>\\n' +\n  '  <li>页脚中的品牌链接</li>\\n' +\n  '  <li>页脚中的编辑器调整大小图柄</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>如果不存在某个 UI 部分，则跳过它。</p>\\n' +\n  '\\n' +\n  '<p>如果键盘导航焦点在页脚，并且没有可见的边栏，则按 <strong>Shift+Tab</strong> 将焦点移至第一个工具栏组而非最后一个。</p>\\n' +\n  '\\n' +\n  '<h1>在 UI 部分内导航</h1>\\n' +\n  '\\n' +\n  '<p>要从一个 UI 元素移至下一个，请按相应的<strong>箭头</strong>键。</p>\\n' +\n  '\\n' +\n  '<p><strong>左</strong>和<strong>右</strong>箭头键</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>在菜单栏中的菜单之间移动。</li>\\n' +\n  '  <li>打开菜单中的子菜单。</li>\\n' +\n  '  <li>在工具栏组中的按钮之间移动。</li>\\n' +\n  '  <li>在页脚的元素路径中的各项之间移动。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>下</strong>和<strong>上</strong>箭头键</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>在菜单中的菜单项之间移动。</li>\\n' +\n  '  <li>在工具栏弹出菜单中的各项之间移动。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>箭头</strong>键在具有焦点的 UI 部分内循环。</p>\\n' +\n  '\\n' +\n  '<p>要关闭打开的菜单、打开的子菜单或打开的弹出菜单，请按 <strong>Esc</strong> 键。</p>\\n' +\n  '\\n' +\n  '<p>如果当前的焦点在特定 UI 部分的“顶部”，则按 <strong>Esc</strong> 键还将完全退出键盘导航。</p>\\n' +\n  '\\n' +\n  '<h1>执行菜单项或工具栏按钮</h1>\\n' +\n  '\\n' +\n  '<p>当突出显示所需的菜单项或工具栏按钮时，按 <strong>Return</strong>、<strong>Enter</strong> 或<strong>空格</strong>以执行该项。</p>\\n' +\n  '\\n' +\n  '<h1>在非标签页式对话框中导航</h1>\\n' +\n  '\\n' +\n  '<p>在非标签页式对话框中，当对话框打开时，第一个交互组件获得焦点。</p>\\n' +\n  '\\n' +\n  '<p>通过按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong>，在交互对话框组件之间导航。</p>\\n' +\n  '\\n' +\n  '<h1>在标签页式对话框中导航</h1>\\n' +\n  '\\n' +\n  '<p>在标签页式对话框中，当对话框打开时，标签页菜单中的第一个按钮获得焦点。</p>\\n' +\n  '\\n' +\n  '<p>通过按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong>，在此对话框的交互组件之间导航。</p>\\n' +\n  '\\n' +\n  '<p>通过将焦点移至另一对话框标签页的菜单，然后按相应的<strong>箭头</strong>键以在可用的标签页间循环，从而切换到该对话框标签页。</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/plugins/help/js/i18n/keynav/zh_TW.js",
    "content": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW',\n'<h1>開始鍵盤瀏覽</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>跳至功能表列</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F9</dd>\\n' +\n  '  <dd>macOS：&#x2325;F9</dd>\\n' +\n  '  <dt>跳至工具列</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F10</dd>\\n' +\n  '  <dd>macOS：&#x2325;F10</dd>\\n' +\n  '  <dt>跳至頁尾</dt>\\n' +\n  '  <dd>Windows 或 Linux：Alt+F11</dd>\\n' +\n  '  <dd>macOS：&#x2325;F11</dd>\\n' +\n  '  <dt>跳至關聯式工具列</dt>\\n' +\n  '  <dd>Windows、Linux 或 macOS：Ctrl+F9\\n' +\n  '</dl>\\n' +\n  '\\n' +\n  '<p>瀏覽會從第一個 UI 項目開始，該項目會反白顯示，但如果是「頁尾」元素路徑的第一項，\\n' +\n  '  則加底線。</p>\\n' +\n  '\\n' +\n  '<h1>在 UI 區段之間瀏覽</h1>\\n' +\n  '\\n' +\n  '<p>從 UI 區段移至下一個，請按 <strong>Tab</strong>。</p>\\n' +\n  '\\n' +\n  '<p>從 UI 區段移回上一個，請按 <strong>Shift+Tab</strong>。</p>\\n' +\n  '\\n' +\n  '<p>這些 UI 區段的 <strong>Tab</strong> 順序如下：</p>\\n' +\n  '\\n' +\n  '<ol>\\n' +\n  '  <li>功能表列</li>\\n' +\n  '  <li>各個工具列群組</li>\\n' +\n  '  <li>側邊欄</li>\\n' +\n  '  <li>頁尾中的元素路徑</li>\\n' +\n  '  <li>頁尾中字數切換按鈕</li>\\n' +\n  '  <li>頁尾中的品牌連結</li>\\n' +\n  '  <li>頁尾中編輯器調整大小控點</li>\\n' +\n  '</ol>\\n' +\n  '\\n' +\n  '<p>如果 UI 區段未顯示，表示已略過該區段。</p>\\n' +\n  '\\n' +\n  '<p>如果鍵盤瀏覽跳至頁尾，但沒有顯示側邊欄，則按下 <strong>Shift+Tab</strong>\\n' +\n  '  會跳至第一個工具列群組，而不是最後一個。</p>\\n' +\n  '\\n' +\n  '<h1>在 UI 區段之內瀏覽</h1>\\n' +\n  '\\n' +\n  '<p>在兩個 UI 元素之間移動，請按適當的<strong>方向</strong>鍵。</p>\\n' +\n  '\\n' +\n  '<p><strong>向左</strong>和<strong>向右</strong>方向鍵</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>在功能表列中的功能表之間移動。</li>\\n' +\n  '  <li>開啟功能表中的子功能表。</li>\\n' +\n  '  <li>在工具列群組中的按鈕之間移動。</li>\\n' +\n  '  <li>在頁尾的元素路徑中項目之間移動。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>向下</strong>和<strong>向上</strong>方向鍵</p>\\n' +\n  '\\n' +\n  '<ul>\\n' +\n  '  <li>在功能表中的功能表項目之間移動。</li>\\n' +\n  '  <li>在工具列快顯功能表中的項目之間移動。</li>\\n' +\n  '</ul>\\n' +\n  '\\n' +\n  '<p><strong>方向</strong>鍵會在所跳至 UI 區段之內循環。</p>\\n' +\n  '\\n' +\n  '<p>若要關閉已開啟的功能表、已開啟的子功能表，或已開啟的快顯功能表，請按 <strong>Esc</strong> 鍵。</p>\\n' +\n  '\\n' +\n  '<p>如果目前已跳至特定 UI 區段的「頂端」，則按 <strong>Esc</strong> 鍵也會結束\\n' +\n  '  整個鍵盤瀏覽。</p>\\n' +\n  '\\n' +\n  '<h1>執行功能表列項目或工具列按鈕</h1>\\n' +\n  '\\n' +\n  '<p>當想要的功能表項目或工具列按鈕已反白顯示時，按 <strong>Return</strong>、<strong>Enter</strong>、\\n' +\n  '  或<strong>空白鍵</strong>即可執行該項目。</p>\\n' +\n  '\\n' +\n  '<h1>瀏覽非索引標籤式對話方塊</h1>\\n' +\n  '\\n' +\n  '<p>在非索引標籤式對話方塊中，開啟對話方塊時會跳至第一個互動元件。</p>\\n' +\n  '\\n' +\n  '<p>按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong> 即可在互動式對話方塊元件之間瀏覽。</p>\\n' +\n  '\\n' +\n  '<h1>瀏覽索引標籤式對話方塊</h1>\\n' +\n  '\\n' +\n  '<p>在索引標籤式對話方塊中，開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。</p>\\n' +\n  '\\n' +\n  '<p>若要在此對話方塊的互動式元件之間瀏覽，請按 <strong>Tab</strong> 或\\n' +\n  '  <strong>Shift+Tab</strong>。</p>\\n' +\n  '\\n' +\n  '<p>先跳至索引標籤式功能表，然後按適當的<strong>方向</strong>鍵，即可切換至另一個對話方塊索引標籤，\\n' +\n  '  以循環瀏覽可用的索引標籤。</p>\\n');"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/dark/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/dark/content.css', \"body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/default/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/default/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/document/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/document/content.css', \"@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/tinymce-5/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/tinymce-5/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/tinymce-5-dark/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/tinymce-5-dark/content.css', \"body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/content/writer/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('content/writer/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) td,table[border]:not([border=\\\"0\\\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide/content.inline.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/default/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}\")\n//# sourceMappingURL=content.inline.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/default/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide/skin.js",
    "content": "tinymce.Resource.add('ui/default/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:2px solid #eee;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:2px solid #eee;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(0,101,216,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.08);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{font-size:14px;margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#eee;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#006ce7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#006ce7;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button::before{border-radius:6px;bottom:-1px;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px #006ce7,0 0 0 3px rgba(0,108,231,.25);content:'';left:-1px;opacity:0;pointer-events:none;position:absolute;right:-1px;top:-1px}.tox .tox-button[disabled]{background-color:#006ce7;background-image:none;border-color:#006ce7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:focus-visible:not(:disabled)::before{opacity:1}.tox .tox-button:hover:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled[disabled]{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:#003c81;background-image:none;border-color:#003c81;box-shadow:none;color:#fff}.tox .tox-button--icon-and-text,.tox .tox-button.tox-button--icon-and-text,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text{display:flex;padding:5px 4px}.tox .tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg{display:block;fill:currentColor}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled{background-color:#a8c8ed;background-image:none;border-color:#a8c8ed;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled[disabled]{background-color:#a8c8ed;background-image:none;border-color:#a8c8ed;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:#93bbe9;background-image:none;border-color:#93bbe9;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:#93bbe9;background-image:none;border-color:#93bbe9;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:#7daee4;background-image:none;border-color:#7daee4;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:rgba(34,47,62,.18);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:6px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:6px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#006ce7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#006ce7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:6px;box-shadow:inset 0 0 0 1px #006ce7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#e3e3e3;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#fcfcfc;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#cce2fa}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#cce2fa}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#cce2fa;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #e3e3e3;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#cce2fa}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:\\\"\\\";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:\\\"\\\";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#eee;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #006ce7;color:#006ce7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#006ce7;cursor:pointer;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#003c81;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #006ce7;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#00244e;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #626262}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #eee;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #eee;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #2d6adf;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #eee}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:0 2px 2px -2px rgba(34,47,62,.1),0 8px 8px -4px rgba(34,47,62,.07);padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #e3e3e3;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"0\\\"],.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"1\\\"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size=\\\"0\\\"],.tox[dir=rtl] .tox-selectfield select[size=\\\"1\\\"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#eee;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(0,108,231,.5);border-color:rgba(0,108,231,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid transparent;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#eee transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #eee transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #eee transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #eee;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #eee;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #e3e3e3;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,.8);height:1.14em;vertical-align:-.28em;width:3.6em}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-bottom:3px;padding-left:1ch;padding-right:3px}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.5)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#dee0e2;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px #dee0e2}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#cce2fa;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-number-input{border-radius:3px;display:flex;margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-number-input .tox-input-wrapper{background:#f7f7f7;display:flex;pointer-events:none;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background:#cce2fa}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;width:60px}.tox .tox-number-input input:hover{background:#cce2fa;color:#222f3e}.tox .tox-number-input input:focus{background:#fff;color:#222f3e}.tox .tox-number-input input:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{background:#f7f7f7;color:#222f3e;height:28px;text-align:center;width:24px}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}.tox .tox-number-input button:focus{background:#cce2fa}.tox .tox-number-input button:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#cce2fa}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke{background:#f7f7f7}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:6px 1px 5px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #cce2fa inset}.tox .tox-split-button:focus{background:#cce2fa;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox.tox-platform-touch .tox-split-button .tox-tbtn--select{padding:0 0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color,.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color{opacity:.6}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#e3e3e3 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:6px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#cce2fa;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px 8px 0 8px;position:relative}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;padding:8px 8px 0 8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;width:100%}.tox .tox-view__pane_panel{border:1px solid #eee;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #eee;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #eee;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:\\\"\\\";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}\")\n//# sourceMappingURL=skin.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide/skin.shadowdom.js",
    "content": "tinymce.Resource.add('ui/default/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}\")\n//# sourceMappingURL=skin.shadowdom.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide-dark/content.inline.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/dark/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}\")\n//# sourceMappingURL=content.inline.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide-dark/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/dark/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide-dark/skin.js",
    "content": "tinymce.Resource.add('ui/dark/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:2px solid #161f29;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:2px solid #161f29;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(0,101,216,.4);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{font-size:14px;margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#161f29;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#006ce7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#006ce7;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button::before{border-radius:6px;bottom:-1px;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px #006ce7,0 0 0 3px rgba(0,108,231,.25);content:'';left:-1px;opacity:0;pointer-events:none;position:absolute;right:-1px;top:-1px}.tox .tox-button[disabled]{background-color:#006ce7;background-image:none;border-color:#006ce7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:focus-visible:not(:disabled)::before{opacity:1}.tox .tox-button:hover:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled[disabled]{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:#003c81;background-image:none;border-color:#003c81;box-shadow:none;color:#fff}.tox .tox-button--icon-and-text,.tox .tox-button.tox-button--icon-and-text,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text{display:flex;padding:5px 4px}.tox .tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg{display:block;fill:currentColor}.tox .tox-button--secondary{background-color:#3d546f;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#3d546f;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;color:#fff;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#3d546f;background-image:none;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:hover:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:active:not(:disabled){background-color:#2b3b4e;background-image:none;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled{background-color:#2b5c93;background-image:none;border-color:#2b5c93;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled[disabled]{background-color:#2b5c93;background-image:none;border-color:#2b5c93;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:#254f80;background-image:none;border-color:#254f80;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:#254f80;background-image:none;border-color:#254f80;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:#1f436c;background-image:none;border-color:#1f436c;box-shadow:none;color:#fff}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked[disabled]{background-color:rgba(255,255,255,.2);border-color:transparent;box-shadow:unset;color:rgba(255,255,255,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:rgba(255,255,255,.2);border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked:focus:not(:disabled){background-color:rgba(255,255,255,.2);border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked:active:not(:disabled){background-color:rgba(255,255,255,.3);border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#fff}.tox .tox-checkbox{align-items:center;border-radius:6px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:6px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(255,255,255,.2)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#006ce7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#006ce7}.tox .tox-checkbox--disabled{color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(255,255,255,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:6px;box-shadow:inset 0 0 0 1px #006ce7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:rgba(255,255,255,.15);border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.5);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active{background-color:#3389ec}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#599fef;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#3389ec}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#599fef;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#3389ec;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(255,255,255,.5);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#fff}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#3389ec}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#2b3b4e;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#2b3b4e;border:1px solid #161f29;border-radius:6px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#2b3b4e;bottom:0;content:\\\"\\\";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(43,59,78,0),#2b3b4e);bottom:0;content:\\\"\\\";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#2b3b4e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#2b3b4e;box-shadow:0 0 8px 8px #2b3b4e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#2b3b4e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#161f29;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #67aeff;color:#67aeff}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#67aeff;cursor:pointer;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#cde5ff;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #67aeff;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#fff;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #161f29;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #161f29;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #fff;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #161f29}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:1px solid rgba(255,255,255,.15);box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid rgba(255,255,255,.15);box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:none}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"0\\\"],.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"1\\\"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size=\\\"0\\\"],.tox[dir=rtl] .tox-selectfield select[size=\\\"1\\\"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:rgba(255,255,255,.15);border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(0,108,231,.5);border-color:rgba(0,108,231,.5)}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:none;display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#3389ec;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn--active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#3389ec;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:rgba(255,255,255,.15);color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #161f29;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#161f29 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #161f29 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #161f29 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #161f29;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:#222f3e;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #161f29;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.75);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(255,255,255,.75);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,.8);height:1.14em;vertical-align:-.28em;width:3.6em}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-bottom:3px;padding-left:1ch;padding-right:3px}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,.5)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#434e5b;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px #434e5b}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#fff}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#3389ec;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#3389ec;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-number-input{border-radius:3px;display:flex;margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-number-input .tox-input-wrapper{background:#2f4055;display:flex;pointer-events:none;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background:#3389ec}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;width:60px}.tox .tox-number-input input:hover{background:#3389ec;color:#fff}.tox .tox-number-input input:focus{background:#fff;color:#222f3e}.tox .tox-number-input input:disabled{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{background:#2f4055;color:#fff;height:28px;text-align:center;width:24px}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}.tox .tox-number-input button:focus{background:#3389ec}.tox .tox-number-input button:hover{background:#3389ec;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#3389ec}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--bespoke{background:#2f4055}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:6px 1px 5px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #3389ec inset}.tox .tox-split-button:focus{background:#3389ec;box-shadow:none;color:#fff}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(255,255,255,.5)}.tox.tox-platform-touch .tox-split-button .tox-tbtn--select{padding:0 0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color,.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color{opacity:.6}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(rgba(255,255,255,.15) 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#3d546f;border-radius:6px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #3d546f;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #3d546f;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #3d546f;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #3d546f;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#3389ec;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#3389ec;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px 8px 0 8px;position:relative}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;padding:8px 8px 0 8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;width:100%}.tox .tox-view__pane_panel{border:1px solid #161f29;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #161f29;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #161f29;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:\\\"\\\";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox.tox-tinymce-aux .tox-toolbar__overflow{box-shadow:0 0 0 1px rgba(255,255,255,.15)}\")\n//# sourceMappingURL=skin.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/oxide-dark/skin.shadowdom.js",
    "content": "tinymce.Resource.add('ui/dark/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}\")\n//# sourceMappingURL=skin.shadowdom.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5/content.inline.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/tinymce-5/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}\")\n//# sourceMappingURL=content.inline.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/tinymce-5/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5/skin.js",
    "content": "tinymce.Resource.add('ui/tinymce-5/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:1px solid #ccc;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(30,113,170,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.08);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{font-size:14px;margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#ccc;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button::before{border-radius:3px;bottom:-1px;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px #207ab7,0 0 0 3px rgba(32,122,183,.25);content:'';left:-1px;opacity:0;pointer-events:none;position:absolute;right:-1px;top:-1px}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:focus-visible:not(:disabled)::before{opacity:1}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled{background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled[disabled]{background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:#154f76;background-image:none;border-color:#154f76;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:#154f76;background-image:none;border-color:#154f76;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:#114060;background-image:none;border-color:#114060;box-shadow:none;color:#fff}.tox .tox-button--icon-and-text,.tox .tox-button.tox-button--icon-and-text,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text{display:flex;padding:5px 4px}.tox .tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg{display:block;fill:currentColor}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled{background-color:#b1ccdf;background-image:none;border-color:#b1ccdf;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled[disabled]{background-color:#b1ccdf;background-image:none;border-color:#b1ccdf;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:#9fc1d7;background-image:none;border-color:#9fc1d7;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:#9fc1d7;background-image:none;border-color:#9fc1d7;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:#8db5d0;background-image:none;border-color:#8db5d0;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:\\\"\\\";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:\\\"\\\";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#114060;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #207ab7;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#092335;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #404040}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #ccc;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #2d6adf;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #ccc;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"0\\\"],.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"1\\\"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size=\\\"0\\\"],.tox[dir=rtl] .tox-selectfield select[size=\\\"1\\\"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\\\") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\\\") left 0 top 0 #fff;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,.8);height:1.14em;vertical-align:-.28em;width:3.6em}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-bottom:3px;padding-left:1ch;padding-right:3px}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.5)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#dee0e2;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px #dee0e2}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-number-input{border-radius:3px;display:flex;margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-number-input .tox-input-wrapper{background:0 0;display:flex;pointer-events:none;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background:#dee0e2}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;width:60px}.tox .tox-number-input input:hover{background:#dee0e2;color:#222f3e}.tox .tox-number-input input:focus{background:#fff;color:#222f3e}.tox .tox-number-input input:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{background:0 0;color:#222f3e;height:34px;text-align:center;width:24px}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}.tox .tox-number-input button:focus{background:#dee0e2}.tox .tox-number-input button:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#dee0e2}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:3px 0 2px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #dee0e2 inset}.tox .tox-split-button:focus{background:#dee0e2;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox.tox-platform-touch .tox-split-button .tox-tbtn--select{padding:0 0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color,.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color{opacity:.6}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#ccc 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #ccc;margin-top:-1px;padding-bottom:0;padding-top:0}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px 8px 0 8px;position:relative}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;padding:8px 8px 0 8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;width:100%}.tox .tox-view__pane_panel{border:1px solid #ccc;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:\\\"\\\";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select{margin:2px 0 3px 0}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\\\") left 0 top 0 #fff!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #ccc;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:rgba(34,47,62,.7);text-decoration:underline}.tox .tox-statusbar__branding svg{vertical-align:-.25em}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none}\")\n//# sourceMappingURL=skin.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5/skin.shadowdom.js",
    "content": "tinymce.Resource.add('ui/tinymce-5/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}\")\n//# sourceMappingURL=skin.shadowdom.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5-dark/content.inline.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/tinymce-5-dark/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}\")\n//# sourceMappingURL=content.inline.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5-dark/content.js",
    "content": "/* This file is bundled with the code from the following third party libraries */\n\n/**\n * http://prismjs.com/\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @see https://github.com/PrismJS/prism/blob/master/LICENSE\n *\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ntinymce.Resource.add('ui/tinymce-5-dark/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\\\")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\\\"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\\\") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected=\\\"2\\\"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\\\") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url(\\\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\\\");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border=\\\"0\\\"],.mce-item-table[border=\\\"0\\\"] caption,.mce-item-table[border=\\\"0\\\"] td,.mce-item-table[border=\\\"0\\\"] th,table[style*=\\\"border-width: 0px\\\"],table[style*=\\\"border-width: 0px\\\"] caption,table[style*=\\\"border-width: 0px\\\"] td,table[style*=\\\"border-width: 0px\\\"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}\")\n//# sourceMappingURL=content.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5-dark/skin.js",
    "content": "tinymce.Resource.add('ui/tinymce-5-dark/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#2a3746;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:1px solid #000;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(30,113,170,.4);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{font-size:14px;margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#000;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button::before{border-radius:3px;bottom:-1px;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px #207ab7,0 0 0 3px rgba(32,122,183,.25);content:'';left:-1px;opacity:0;pointer-events:none;position:absolute;right:-1px;top:-1px}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:focus-visible:not(:disabled)::before{opacity:1}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled{background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled[disabled]{background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:#154f76;background-image:none;border-color:#154f76;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:#154f76;background-image:none;border-color:#154f76;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:#114060;background-image:none;border-color:#114060;box-shadow:none;color:#fff}.tox .tox-button--icon-and-text,.tox .tox-button.tox-button--icon-and-text,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text{display:flex;padding:5px 4px}.tox .tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg{display:block;fill:currentColor}.tox .tox-button--secondary{background-color:#3d546f;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#3d546f;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#fff;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#3d546f;background-image:none;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:hover:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:active:not(:disabled){background-color:#2b3b4e;background-image:none;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled{background-color:#346085;background-image:none;border-color:#346085;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled[disabled]{background-color:#346085;background-image:none;border-color:#346085;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:#2d5373;background-image:none;border-color:#2d5373;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:#2d5373;background-image:none;border-color:#2d5373;box-shadow:none;color:#fff}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:#264560;background-image:none;border-color:#264560;box-shadow:none;color:#fff}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:focus:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:active:not(:disabled){background-color:#2b3b4e;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#fff}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(255,255,255,.2)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(255,255,255,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(255,255,255,.5);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#fff}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#2b3b4e;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#2b3b4e;bottom:0;content:\\\"\\\";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(43,59,78,0),#2b3b4e);bottom:0;content:\\\"\\\";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#2b3b4e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#2b3b4e;box-shadow:0 0 8px 8px #2b3b4e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#2b3b4e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#114060;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #207ab7;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#092335;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #000;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #2d6adf;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #000;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(42,55,70,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\\\"Helvetica Neue\\\",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"0\\\"],.tox:not([dir=rtl]) .tox-selectfield select[size=\\\"1\\\"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size=\\\"0\\\"],.tox[dir=rtl] .tox-selectfield select[size=\\\"1\\\"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#000;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\\\") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\\\") left 0 top 0 #222f3e;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn--active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:#000;color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:#222f3e;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,.8);height:1.14em;vertical-align:-.28em;width:3.6em}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-bottom:3px;padding-left:1ch;padding-right:3px}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,.5)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#4a5562;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px #4a5562}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#fff}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-number-input{border-radius:3px;display:flex;margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-number-input .tox-input-wrapper{background:0 0;display:flex;pointer-events:none;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background:#4a5562}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;width:60px}.tox .tox-number-input input:hover{background:#4a5562;color:#fff}.tox .tox-number-input input:focus{background:#fff;color:#2a3746}.tox .tox-number-input input:disabled{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{background:0 0;color:#fff;height:34px;text-align:center;width:24px}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}.tox .tox-number-input button:focus{background:#4a5562}.tox .tox-number-input button:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#4a5562}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:3px 0 2px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #4a5562 inset}.tox .tox-split-button:focus{background:#4a5562;box-shadow:none;color:#fff}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(255,255,255,.5)}.tox.tox-platform-touch .tox-split-button .tox-tbtn--select{padding:0 0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color,.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color{opacity:.6}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(#000 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #000;margin-top:-1px;padding-bottom:0;padding-top:0}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);overscroll-behavior:none;padding:4px 0}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#3d546f;border-radius:3px;box-shadow:0 2px 4px rgba(42,55,70,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #3d546f;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #3d546f;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #3d546f;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #3d546f;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px 8px 0 8px;position:relative}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;padding:8px 8px 0 8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;width:100%}.tox .tox-view__pane_panel{border:1px solid #000;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:\\\"\\\";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select{margin:2px 0 3px 0}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\\\") left 0 top 0 #222f3e!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #000;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #000;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #000}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #000}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;text-decoration:underline}.tox .tox-statusbar__branding svg{vertical-align:-.25em}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none}\")\n//# sourceMappingURL=skin.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/skins/ui/tinymce-5-dark/skin.shadowdom.js",
    "content": "tinymce.Resource.add('ui/tinymce-5-dark/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}\")\n//# sourceMappingURL=skin.shadowdom.js.map\n"
  },
  {
    "path": "public/tinymce6.8.6/tinymce.d.ts",
    "content": "interface StringPathBookmark {\n    start: string;\n    end?: string;\n    forward?: boolean;\n}\ninterface RangeBookmark {\n    rng: Range;\n    forward?: boolean;\n}\ninterface IdBookmark {\n    id: string;\n    keep?: boolean;\n    forward?: boolean;\n}\ninterface IndexBookmark {\n    name: string;\n    index: number;\n}\ninterface PathBookmark {\n    start: number[];\n    end?: number[];\n    isFakeCaret?: boolean;\n    forward?: boolean;\n}\ntype Bookmark = StringPathBookmark | RangeBookmark | IdBookmark | IndexBookmark | PathBookmark;\ntype NormalizedEvent<E, T = any> = E & {\n    readonly type: string;\n    readonly target: T;\n    readonly isDefaultPrevented: () => boolean;\n    readonly preventDefault: () => void;\n    readonly isPropagationStopped: () => boolean;\n    readonly stopPropagation: () => void;\n    readonly isImmediatePropagationStopped: () => boolean;\n    readonly stopImmediatePropagation: () => void;\n};\ntype MappedEvent<T extends {}, K extends string> = K extends keyof T ? T[K] : any;\ninterface NativeEventMap {\n    'beforepaste': Event;\n    'blur': FocusEvent;\n    'beforeinput': InputEvent;\n    'click': MouseEvent;\n    'compositionend': Event;\n    'compositionstart': Event;\n    'compositionupdate': Event;\n    'contextmenu': PointerEvent;\n    'copy': ClipboardEvent;\n    'cut': ClipboardEvent;\n    'dblclick': MouseEvent;\n    'drag': DragEvent;\n    'dragdrop': DragEvent;\n    'dragend': DragEvent;\n    'draggesture': DragEvent;\n    'dragover': DragEvent;\n    'dragstart': DragEvent;\n    'drop': DragEvent;\n    'focus': FocusEvent;\n    'focusin': FocusEvent;\n    'focusout': FocusEvent;\n    'input': InputEvent;\n    'keydown': KeyboardEvent;\n    'keypress': KeyboardEvent;\n    'keyup': KeyboardEvent;\n    'mousedown': MouseEvent;\n    'mouseenter': MouseEvent;\n    'mouseleave': MouseEvent;\n    'mousemove': MouseEvent;\n    'mouseout': MouseEvent;\n    'mouseover': MouseEvent;\n    'mouseup': MouseEvent;\n    'paste': ClipboardEvent;\n    'selectionchange': Event;\n    'submit': Event;\n    'touchend': TouchEvent;\n    'touchmove': TouchEvent;\n    'touchstart': TouchEvent;\n    'touchcancel': TouchEvent;\n    'wheel': WheelEvent;\n}\ntype EditorEvent<T> = NormalizedEvent<T>;\ninterface EventDispatcherSettings {\n    scope?: any;\n    toggleEvent?: (name: string, state: boolean) => void | boolean;\n    beforeFire?: <T>(args: EditorEvent<T>) => void;\n}\ninterface EventDispatcherConstructor<T extends {}> {\n    readonly prototype: EventDispatcher<T>;\n    new (settings?: EventDispatcherSettings): EventDispatcher<T>;\n    isNative: (name: string) => boolean;\n}\ndeclare class EventDispatcher<T extends {}> {\n    static isNative(name: string): boolean;\n    private readonly settings;\n    private readonly scope;\n    private readonly toggleEvent;\n    private bindings;\n    constructor(settings?: EventDispatcherSettings);\n    fire<K extends string, U extends MappedEvent<T, K>>(name: K, args?: U): EditorEvent<U>;\n    dispatch<K extends string, U extends MappedEvent<T, K>>(name: K, args?: U): EditorEvent<U>;\n    on<K extends string>(name: K, callback: false | ((event: EditorEvent<MappedEvent<T, K>>) => void | boolean), prepend?: boolean, extra?: {}): this;\n    off<K extends string>(name?: K, callback?: (event: EditorEvent<MappedEvent<T, K>>) => void): this;\n    once<K extends string>(name: K, callback: (event: EditorEvent<MappedEvent<T, K>>) => void, prepend?: boolean): this;\n    has(name: string): boolean;\n}\ntype UndoLevelType = 'fragmented' | 'complete';\ninterface BaseUndoLevel {\n    type: UndoLevelType;\n    bookmark: Bookmark | null;\n    beforeBookmark: Bookmark | null;\n}\ninterface FragmentedUndoLevel extends BaseUndoLevel {\n    type: 'fragmented';\n    fragments: string[];\n    content: '';\n}\ninterface CompleteUndoLevel extends BaseUndoLevel {\n    type: 'complete';\n    fragments: null;\n    content: string;\n}\ntype NewUndoLevel = CompleteUndoLevel | FragmentedUndoLevel;\ntype UndoLevel = NewUndoLevel & {\n    bookmark: Bookmark;\n};\ninterface UndoManager {\n    data: UndoLevel[];\n    typing: boolean;\n    add: (level?: Partial<UndoLevel>, event?: EditorEvent<any>) => UndoLevel | null;\n    dispatchChange: () => void;\n    beforeChange: () => void;\n    undo: () => UndoLevel | undefined;\n    redo: () => UndoLevel | undefined;\n    clear: () => void;\n    reset: () => void;\n    hasUndo: () => boolean;\n    hasRedo: () => boolean;\n    transact: (callback: () => void) => UndoLevel | null;\n    ignore: (callback: () => void) => void;\n    extra: (callback1: () => void, callback2: () => void) => void;\n}\ntype SchemaType = 'html4' | 'html5' | 'html5-strict';\ninterface ElementSettings {\n    block_elements?: string;\n    boolean_attributes?: string;\n    move_caret_before_on_enter_elements?: string;\n    non_empty_elements?: string;\n    self_closing_elements?: string;\n    text_block_elements?: string;\n    text_inline_elements?: string;\n    void_elements?: string;\n    whitespace_elements?: string;\n    transparent_elements?: string;\n    wrap_block_elements?: string;\n}\ninterface SchemaSettings extends ElementSettings {\n    custom_elements?: string;\n    extended_valid_elements?: string;\n    invalid_elements?: string;\n    invalid_styles?: string | Record<string, string>;\n    schema?: SchemaType;\n    valid_children?: string;\n    valid_classes?: string | Record<string, string>;\n    valid_elements?: string;\n    valid_styles?: string | Record<string, string>;\n    verify_html?: boolean;\n    padd_empty_block_inline_children?: boolean;\n}\ninterface Attribute {\n    required?: boolean;\n    defaultValue?: string;\n    forcedValue?: string;\n    validValues?: Record<string, {}>;\n}\ninterface DefaultAttribute {\n    name: string;\n    value: string;\n}\ninterface AttributePattern extends Attribute {\n    pattern: RegExp;\n}\ninterface ElementRule {\n    attributes: Record<string, Attribute>;\n    attributesDefault?: DefaultAttribute[];\n    attributesForced?: DefaultAttribute[];\n    attributesOrder: string[];\n    attributePatterns?: AttributePattern[];\n    attributesRequired?: string[];\n    paddEmpty?: boolean;\n    removeEmpty?: boolean;\n    removeEmptyAttrs?: boolean;\n    paddInEmptyBlock?: boolean;\n}\ninterface SchemaElement extends ElementRule {\n    outputName?: string;\n    parentsRequired?: string[];\n    pattern?: RegExp;\n}\ninterface SchemaMap {\n    [name: string]: {};\n}\ninterface SchemaRegExpMap {\n    [name: string]: RegExp;\n}\ninterface Schema {\n    type: SchemaType;\n    children: Record<string, SchemaMap>;\n    elements: Record<string, SchemaElement>;\n    getValidStyles: () => Record<string, string[]> | undefined;\n    getValidClasses: () => Record<string, SchemaMap> | undefined;\n    getBlockElements: () => SchemaMap;\n    getInvalidStyles: () => Record<string, SchemaMap> | undefined;\n    getVoidElements: () => SchemaMap;\n    getTextBlockElements: () => SchemaMap;\n    getTextInlineElements: () => SchemaMap;\n    getBoolAttrs: () => SchemaMap;\n    getElementRule: (name: string) => SchemaElement | undefined;\n    getSelfClosingElements: () => SchemaMap;\n    getNonEmptyElements: () => SchemaMap;\n    getMoveCaretBeforeOnEnterElements: () => SchemaMap;\n    getWhitespaceElements: () => SchemaMap;\n    getTransparentElements: () => SchemaMap;\n    getSpecialElements: () => SchemaRegExpMap;\n    isValidChild: (name: string, child: string) => boolean;\n    isValid: (name: string, attr?: string) => boolean;\n    isBlock: (name: string) => boolean;\n    isInline: (name: string) => boolean;\n    isWrapper: (name: string) => boolean;\n    getCustomElements: () => SchemaMap;\n    addValidElements: (validElements: string) => void;\n    setValidElements: (validElements: string) => void;\n    addCustomElements: (customElements: string) => void;\n    addValidChildren: (validChildren: any) => void;\n}\ntype Attributes$1 = Array<{\n    name: string;\n    value: string;\n}> & {\n    map: Record<string, string>;\n};\ninterface AstNodeConstructor {\n    readonly prototype: AstNode;\n    new (name: string, type: number): AstNode;\n    create(name: string, attrs?: Record<string, string>): AstNode;\n}\ndeclare class AstNode {\n    static create(name: string, attrs?: Record<string, string>): AstNode;\n    name: string;\n    type: number;\n    attributes?: Attributes$1;\n    value?: string;\n    parent?: AstNode | null;\n    firstChild?: AstNode | null;\n    lastChild?: AstNode | null;\n    next?: AstNode | null;\n    prev?: AstNode | null;\n    raw?: boolean;\n    constructor(name: string, type: number);\n    replace(node: AstNode): AstNode;\n    attr(name: string, value: string | null | undefined): AstNode | undefined;\n    attr(name: Record<string, string | null | undefined> | undefined): AstNode | undefined;\n    attr(name: string): string | undefined;\n    clone(): AstNode;\n    wrap(wrapper: AstNode): AstNode;\n    unwrap(): void;\n    remove(): AstNode;\n    append(node: AstNode): AstNode;\n    insert(node: AstNode, refNode: AstNode, before?: boolean): AstNode;\n    getAll(name: string): AstNode[];\n    children(): AstNode[];\n    empty(): AstNode;\n    isEmpty(elements: SchemaMap, whitespace?: SchemaMap, predicate?: (node: AstNode) => boolean): boolean;\n    walk(prev?: boolean): AstNode | null | undefined;\n}\ntype Content = string | AstNode;\ntype ContentFormat = 'raw' | 'text' | 'html' | 'tree';\ninterface GetContentArgs {\n    format: ContentFormat;\n    get: boolean;\n    getInner: boolean;\n    no_events?: boolean;\n    save?: boolean;\n    source_view?: boolean;\n    [key: string]: any;\n}\ninterface SetContentArgs {\n    format: string;\n    set: boolean;\n    content: Content;\n    no_events?: boolean;\n    no_selection?: boolean;\n    paste?: boolean;\n    load?: boolean;\n    initial?: boolean;\n    [key: string]: any;\n}\ninterface GetSelectionContentArgs extends GetContentArgs {\n    selection?: boolean;\n    contextual?: boolean;\n}\ninterface SetSelectionContentArgs extends SetContentArgs {\n    content: string;\n    selection?: boolean;\n}\ninterface BlobInfoData {\n    id?: string;\n    name?: string;\n    filename?: string;\n    blob: Blob;\n    base64: string;\n    blobUri?: string;\n    uri?: string;\n}\ninterface BlobInfo {\n    id: () => string;\n    name: () => string;\n    filename: () => string;\n    blob: () => Blob;\n    base64: () => string;\n    blobUri: () => string;\n    uri: () => string | undefined;\n}\ninterface BlobCache {\n    create: {\n        (o: BlobInfoData): BlobInfo;\n        (id: string, blob: Blob, base64: string, name?: string, filename?: string): BlobInfo;\n    };\n    add: (blobInfo: BlobInfo) => void;\n    get: (id: string) => BlobInfo | undefined;\n    getByUri: (blobUri: string) => BlobInfo | undefined;\n    getByData: (base64: string, type: string) => BlobInfo | undefined;\n    findFirst: (predicate: (blobInfo: BlobInfo) => boolean) => BlobInfo | undefined;\n    removeByUri: (blobUri: string) => void;\n    destroy: () => void;\n}\ninterface BlobInfoImagePair {\n    image: HTMLImageElement;\n    blobInfo: BlobInfo;\n}\ndeclare class NodeChange {\n    private readonly editor;\n    private lastPath;\n    constructor(editor: Editor);\n    nodeChanged(args?: Record<string, any>): void;\n    private isSameElementPath;\n}\ninterface SelectionOverrides {\n    showCaret: (direction: number, node: HTMLElement, before: boolean, scrollIntoView?: boolean) => Range | null;\n    showBlockCaretContainer: (blockCaretContainer: HTMLElement) => void;\n    hideFakeCaret: () => void;\n    destroy: () => void;\n}\ninterface Quirks {\n    refreshContentEditable(): void;\n    isHidden(): boolean;\n}\ntype DecoratorData = Record<string, any>;\ntype Decorator = (uid: string, data: DecoratorData) => {\n    attributes?: {};\n    classes?: string[];\n};\ntype AnnotationListener = (state: boolean, name: string, data?: {\n    uid: string;\n    nodes: any[];\n}) => void;\ntype AnnotationListenerApi = AnnotationListener;\ninterface AnnotatorSettings {\n    decorate: Decorator;\n    persistent?: boolean;\n}\ninterface Annotator {\n    register: (name: string, settings: AnnotatorSettings) => void;\n    annotate: (name: string, data: DecoratorData) => void;\n    annotationChanged: (name: string, f: AnnotationListenerApi) => void;\n    remove: (name: string) => void;\n    removeAll: (name: string) => void;\n    getAll: (name: string) => Record<string, Element[]>;\n}\ninterface GeomRect {\n    readonly x: number;\n    readonly y: number;\n    readonly w: number;\n    readonly h: number;\n}\ninterface Rect {\n    inflate: (rect: GeomRect, w: number, h: number) => GeomRect;\n    relativePosition: (rect: GeomRect, targetRect: GeomRect, rel: string) => GeomRect;\n    findBestRelativePosition: (rect: GeomRect, targetRect: GeomRect, constrainRect: GeomRect, rels: string[]) => string | null;\n    intersect: (rect: GeomRect, cropRect: GeomRect) => GeomRect | null;\n    clamp: (rect: GeomRect, clampRect: GeomRect, fixedSize?: boolean) => GeomRect;\n    create: (x: number, y: number, w: number, h: number) => GeomRect;\n    fromClientRect: (clientRect: DOMRect) => GeomRect;\n}\ninterface NotificationManagerImpl {\n    open: (spec: NotificationSpec, closeCallback: () => void) => NotificationApi;\n    close: <T extends NotificationApi>(notification: T) => void;\n    getArgs: <T extends NotificationApi>(notification: T) => NotificationSpec;\n}\ninterface NotificationSpec {\n    type?: 'info' | 'warning' | 'error' | 'success';\n    text: string;\n    icon?: string;\n    progressBar?: boolean;\n    timeout?: number;\n    closeButton?: boolean;\n}\ninterface NotificationApi {\n    close: () => void;\n    progressBar: {\n        value: (percent: number) => void;\n    };\n    text: (text: string) => void;\n    reposition: () => void;\n    getEl: () => HTMLElement;\n    settings: NotificationSpec;\n}\ninterface NotificationManager {\n    open: (spec: NotificationSpec) => NotificationApi;\n    close: () => void;\n    getNotifications: () => NotificationApi[];\n}\ninterface UploadFailure {\n    message: string;\n    remove?: boolean;\n}\ntype ProgressFn = (percent: number) => void;\ntype UploadHandler = (blobInfo: BlobInfo, progress: ProgressFn) => Promise<string>;\ninterface UploadResult$2 {\n    url: string;\n    blobInfo: BlobInfo;\n    status: boolean;\n    error?: UploadFailure;\n}\ninterface RawPattern {\n    start?: any;\n    end?: any;\n    format?: any;\n    cmd?: any;\n    value?: any;\n    replacement?: any;\n}\ninterface InlineBasePattern {\n    readonly start: string;\n    readonly end: string;\n}\ninterface InlineFormatPattern extends InlineBasePattern {\n    readonly type: 'inline-format';\n    readonly format: string[];\n}\ninterface InlineCmdPattern extends InlineBasePattern {\n    readonly type: 'inline-command';\n    readonly cmd: string;\n    readonly value?: any;\n}\ntype InlinePattern = InlineFormatPattern | InlineCmdPattern;\ninterface BlockBasePattern {\n    readonly start: string;\n}\ninterface BlockFormatPattern extends BlockBasePattern {\n    readonly type: 'block-format';\n    readonly format: string;\n}\ninterface BlockCmdPattern extends BlockBasePattern {\n    readonly type: 'block-command';\n    readonly cmd: string;\n    readonly value?: any;\n}\ntype BlockPattern = BlockFormatPattern | BlockCmdPattern;\ntype Pattern = InlinePattern | BlockPattern;\ninterface DynamicPatternContext {\n    readonly text: string;\n    readonly block: Element;\n}\ntype DynamicPatternsLookup = (ctx: DynamicPatternContext) => Pattern[];\ntype RawDynamicPatternsLookup = (ctx: DynamicPatternContext) => RawPattern[];\ninterface AlertBannerSpec {\n    type: 'alertbanner';\n    level: 'info' | 'warn' | 'error' | 'success';\n    text: string;\n    icon: string;\n    url?: string;\n}\ninterface ButtonSpec {\n    type: 'button';\n    text: string;\n    enabled?: boolean;\n    primary?: boolean;\n    name?: string;\n    icon?: string;\n    borderless?: boolean;\n    buttonType?: 'primary' | 'secondary' | 'toolbar';\n}\ninterface FormComponentSpec {\n    type: string;\n    name: string;\n}\ninterface FormComponentWithLabelSpec extends FormComponentSpec {\n    label?: string;\n}\ninterface CheckboxSpec extends FormComponentSpec {\n    type: 'checkbox';\n    label: string;\n    enabled?: boolean;\n}\ninterface CollectionSpec extends FormComponentWithLabelSpec {\n    type: 'collection';\n}\ninterface CollectionItem {\n    value: string;\n    text: string;\n    icon: string;\n}\ninterface ColorInputSpec extends FormComponentWithLabelSpec {\n    type: 'colorinput';\n    storageKey?: string;\n}\ninterface ColorPickerSpec extends FormComponentWithLabelSpec {\n    type: 'colorpicker';\n}\ninterface CustomEditorInit {\n    setValue: (value: string) => void;\n    getValue: () => string;\n    destroy: () => void;\n}\ntype CustomEditorInitFn = (elm: HTMLElement, settings: any) => Promise<CustomEditorInit>;\ninterface CustomEditorOldSpec extends FormComponentSpec {\n    type: 'customeditor';\n    tag?: string;\n    init: (e: HTMLElement) => Promise<CustomEditorInit>;\n}\ninterface CustomEditorNewSpec extends FormComponentSpec {\n    type: 'customeditor';\n    tag?: string;\n    scriptId: string;\n    scriptUrl: string;\n    settings?: any;\n}\ntype CustomEditorSpec = CustomEditorOldSpec | CustomEditorNewSpec;\ninterface DropZoneSpec extends FormComponentWithLabelSpec {\n    type: 'dropzone';\n}\ninterface GridSpec {\n    type: 'grid';\n    columns: number;\n    items: BodyComponentSpec[];\n}\ninterface HtmlPanelSpec {\n    type: 'htmlpanel';\n    html: string;\n    presets?: 'presentation' | 'document';\n}\ninterface IframeSpec extends FormComponentWithLabelSpec {\n    type: 'iframe';\n    border?: boolean;\n    sandboxed?: boolean;\n    streamContent?: boolean;\n    transparent?: boolean;\n}\ninterface ImagePreviewSpec extends FormComponentSpec {\n    type: 'imagepreview';\n    height?: string;\n}\ninterface InputSpec extends FormComponentWithLabelSpec {\n    type: 'input';\n    inputMode?: string;\n    placeholder?: string;\n    maximized?: boolean;\n    enabled?: boolean;\n}\ntype Alignment = 'start' | 'center' | 'end';\ninterface LabelSpec {\n    type: 'label';\n    label: string;\n    items: BodyComponentSpec[];\n    align?: Alignment;\n}\ninterface ListBoxSingleItemSpec {\n    text: string;\n    value: string;\n}\ninterface ListBoxNestedItemSpec {\n    text: string;\n    items: ListBoxItemSpec[];\n}\ntype ListBoxItemSpec = ListBoxNestedItemSpec | ListBoxSingleItemSpec;\ninterface ListBoxSpec extends FormComponentWithLabelSpec {\n    type: 'listbox';\n    items: ListBoxItemSpec[];\n    disabled?: boolean;\n}\ninterface PanelSpec {\n    type: 'panel';\n    classes?: string[];\n    items: BodyComponentSpec[];\n}\ninterface SelectBoxItemSpec {\n    text: string;\n    value: string;\n}\ninterface SelectBoxSpec extends FormComponentWithLabelSpec {\n    type: 'selectbox';\n    items: SelectBoxItemSpec[];\n    size?: number;\n    enabled?: boolean;\n}\ninterface SizeInputSpec extends FormComponentWithLabelSpec {\n    type: 'sizeinput';\n    constrain?: boolean;\n    enabled?: boolean;\n}\ninterface SliderSpec extends FormComponentSpec {\n    type: 'slider';\n    label: string;\n    min?: number;\n    max?: number;\n}\ninterface TableSpec {\n    type: 'table';\n    header: string[];\n    cells: string[][];\n}\ninterface TextAreaSpec extends FormComponentWithLabelSpec {\n    type: 'textarea';\n    placeholder?: string;\n    maximized?: boolean;\n    enabled?: boolean;\n}\ninterface BaseToolbarButtonSpec<I extends BaseToolbarButtonInstanceApi> {\n    enabled?: boolean;\n    tooltip?: string;\n    icon?: string;\n    text?: string;\n    onSetup?: (api: I) => (api: I) => void;\n}\ninterface BaseToolbarButtonInstanceApi {\n    isEnabled: () => boolean;\n    setEnabled: (state: boolean) => void;\n    setText: (text: string) => void;\n    setIcon: (icon: string) => void;\n}\ninterface ToolbarButtonSpec extends BaseToolbarButtonSpec<ToolbarButtonInstanceApi> {\n    type?: 'button';\n    onAction: (api: ToolbarButtonInstanceApi) => void;\n}\ninterface ToolbarButtonInstanceApi extends BaseToolbarButtonInstanceApi {\n}\ninterface ToolbarGroupSetting {\n    name: string;\n    items: string[];\n}\ntype ToolbarConfig = string | ToolbarGroupSetting[];\ninterface GroupToolbarButtonInstanceApi extends BaseToolbarButtonInstanceApi {\n}\ninterface GroupToolbarButtonSpec extends BaseToolbarButtonSpec<GroupToolbarButtonInstanceApi> {\n    type?: 'grouptoolbarbutton';\n    items?: ToolbarConfig;\n}\ninterface CardImageSpec {\n    type: 'cardimage';\n    src: string;\n    alt?: string;\n    classes?: string[];\n}\ninterface CardTextSpec {\n    type: 'cardtext';\n    text: string;\n    name?: string;\n    classes?: string[];\n}\ntype CardItemSpec = CardContainerSpec | CardImageSpec | CardTextSpec;\ntype CardContainerDirection = 'vertical' | 'horizontal';\ntype CardContainerAlign = 'left' | 'right';\ntype CardContainerValign = 'top' | 'middle' | 'bottom';\ninterface CardContainerSpec {\n    type: 'cardcontainer';\n    items: CardItemSpec[];\n    direction?: CardContainerDirection;\n    align?: CardContainerAlign;\n    valign?: CardContainerValign;\n}\ninterface CommonMenuItemSpec {\n    enabled?: boolean;\n    text?: string;\n    value?: string;\n    meta?: Record<string, any>;\n    shortcut?: string;\n}\ninterface CommonMenuItemInstanceApi {\n    isEnabled: () => boolean;\n    setEnabled: (state: boolean) => void;\n}\ninterface CardMenuItemInstanceApi extends CommonMenuItemInstanceApi {\n}\ninterface CardMenuItemSpec extends Omit<CommonMenuItemSpec, 'text' | 'shortcut'> {\n    type: 'cardmenuitem';\n    label?: string;\n    items: CardItemSpec[];\n    onSetup?: (api: CardMenuItemInstanceApi) => (api: CardMenuItemInstanceApi) => void;\n    onAction?: (api: CardMenuItemInstanceApi) => void;\n}\ninterface ChoiceMenuItemSpec extends CommonMenuItemSpec {\n    type?: 'choiceitem';\n    icon?: string;\n}\ninterface ChoiceMenuItemInstanceApi extends CommonMenuItemInstanceApi {\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n}\ninterface ContextMenuItem extends CommonMenuItemSpec {\n    text: string;\n    icon?: string;\n    type?: 'item';\n    onAction: () => void;\n}\ninterface ContextSubMenu extends CommonMenuItemSpec {\n    type: 'submenu';\n    text: string;\n    icon?: string;\n    getSubmenuItems: () => string | Array<ContextMenuContents>;\n}\ntype ContextMenuContents = string | ContextMenuItem | SeparatorMenuItemSpec | ContextSubMenu;\ninterface ContextMenuApi {\n    update: (element: Element) => string | Array<ContextMenuContents>;\n}\ninterface FancyActionArgsMap {\n    'inserttable': {\n        numRows: number;\n        numColumns: number;\n    };\n    'colorswatch': {\n        value: string;\n    };\n}\ninterface BaseFancyMenuItemSpec<T extends keyof FancyActionArgsMap> {\n    type: 'fancymenuitem';\n    fancytype: T;\n    initData?: Record<string, unknown>;\n    onAction?: (data: FancyActionArgsMap[T]) => void;\n}\ninterface InsertTableMenuItemSpec extends BaseFancyMenuItemSpec<'inserttable'> {\n    fancytype: 'inserttable';\n    initData?: {};\n}\ninterface ColorSwatchMenuItemSpec extends BaseFancyMenuItemSpec<'colorswatch'> {\n    fancytype: 'colorswatch';\n    select?: (value: string) => boolean;\n    initData?: {\n        allowCustomColors?: boolean;\n        colors?: ChoiceMenuItemSpec[];\n        storageKey?: string;\n    };\n}\ntype FancyMenuItemSpec = InsertTableMenuItemSpec | ColorSwatchMenuItemSpec;\ninterface MenuItemSpec extends CommonMenuItemSpec {\n    type?: 'menuitem';\n    icon?: string;\n    onSetup?: (api: MenuItemInstanceApi) => (api: MenuItemInstanceApi) => void;\n    onAction?: (api: MenuItemInstanceApi) => void;\n}\ninterface MenuItemInstanceApi extends CommonMenuItemInstanceApi {\n}\ninterface SeparatorMenuItemSpec {\n    type?: 'separator';\n    text?: string;\n}\ninterface ToggleMenuItemSpec extends CommonMenuItemSpec {\n    type?: 'togglemenuitem';\n    icon?: string;\n    active?: boolean;\n    onSetup?: (api: ToggleMenuItemInstanceApi) => void;\n    onAction: (api: ToggleMenuItemInstanceApi) => void;\n}\ninterface ToggleMenuItemInstanceApi extends CommonMenuItemInstanceApi {\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n}\ntype NestedMenuItemContents = string | MenuItemSpec | NestedMenuItemSpec | ToggleMenuItemSpec | SeparatorMenuItemSpec | FancyMenuItemSpec;\ninterface NestedMenuItemSpec extends CommonMenuItemSpec {\n    type?: 'nestedmenuitem';\n    icon?: string;\n    getSubmenuItems: () => string | Array<NestedMenuItemContents>;\n    onSetup?: (api: NestedMenuItemInstanceApi) => (api: NestedMenuItemInstanceApi) => void;\n}\ninterface NestedMenuItemInstanceApi extends CommonMenuItemInstanceApi {\n    setTooltip: (tooltip: string) => void;\n    setIconFill: (id: string, value: string) => void;\n}\ntype MenuButtonItemTypes = NestedMenuItemContents;\ntype SuccessCallback$1 = (menu: string | MenuButtonItemTypes[]) => void;\ninterface MenuButtonFetchContext {\n    pattern: string;\n}\ninterface BaseMenuButtonSpec {\n    text?: string;\n    tooltip?: string;\n    icon?: string;\n    search?: boolean | {\n        placeholder?: string;\n    };\n    fetch: (success: SuccessCallback$1, fetchContext: MenuButtonFetchContext, api: BaseMenuButtonInstanceApi) => void;\n    onSetup?: (api: BaseMenuButtonInstanceApi) => (api: BaseMenuButtonInstanceApi) => void;\n}\ninterface BaseMenuButtonInstanceApi {\n    isEnabled: () => boolean;\n    setEnabled: (state: boolean) => void;\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n    setText: (text: string) => void;\n    setIcon: (icon: string) => void;\n}\ninterface ToolbarMenuButtonSpec extends BaseMenuButtonSpec {\n    type?: 'menubutton';\n    onSetup?: (api: ToolbarMenuButtonInstanceApi) => (api: ToolbarMenuButtonInstanceApi) => void;\n}\ninterface ToolbarMenuButtonInstanceApi extends BaseMenuButtonInstanceApi {\n}\ntype ToolbarSplitButtonItemTypes = ChoiceMenuItemSpec | SeparatorMenuItemSpec;\ntype SuccessCallback = (menu: ToolbarSplitButtonItemTypes[]) => void;\ntype SelectPredicate = (value: string) => boolean;\ntype PresetTypes = 'color' | 'normal' | 'listpreview';\ntype ColumnTypes$1 = number | 'auto';\ninterface ToolbarSplitButtonSpec {\n    type?: 'splitbutton';\n    tooltip?: string;\n    icon?: string;\n    text?: string;\n    select?: SelectPredicate;\n    presets?: PresetTypes;\n    columns?: ColumnTypes$1;\n    fetch: (success: SuccessCallback) => void;\n    onSetup?: (api: ToolbarSplitButtonInstanceApi) => (api: ToolbarSplitButtonInstanceApi) => void;\n    onAction: (api: ToolbarSplitButtonInstanceApi) => void;\n    onItemAction: (api: ToolbarSplitButtonInstanceApi, value: string) => void;\n}\ninterface ToolbarSplitButtonInstanceApi {\n    isEnabled: () => boolean;\n    setEnabled: (state: boolean) => void;\n    setIconFill: (id: string, value: string) => void;\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n    setTooltip: (tooltip: string) => void;\n    setText: (text: string) => void;\n    setIcon: (icon: string) => void;\n}\ninterface BaseToolbarToggleButtonSpec<I extends BaseToolbarButtonInstanceApi> extends BaseToolbarButtonSpec<I> {\n    active?: boolean;\n}\ninterface BaseToolbarToggleButtonInstanceApi extends BaseToolbarButtonInstanceApi {\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n}\ninterface ToolbarToggleButtonSpec extends BaseToolbarToggleButtonSpec<ToolbarToggleButtonInstanceApi> {\n    type?: 'togglebutton';\n    onAction: (api: ToolbarToggleButtonInstanceApi) => void;\n}\ninterface ToolbarToggleButtonInstanceApi extends BaseToolbarToggleButtonInstanceApi {\n}\ntype Id = string;\ninterface TreeSpec {\n    type: 'tree';\n    items: TreeItemSpec[];\n    onLeafAction?: (id: Id) => void;\n    defaultExpandedIds?: Id[];\n    onToggleExpand?: (expandedIds: Id[], { expanded, node }: {\n        expanded: boolean;\n        node: Id;\n    }) => void;\n    defaultSelectedId?: Id;\n}\ninterface BaseTreeItemSpec {\n    title: string;\n    id: Id;\n    menu?: ToolbarMenuButtonSpec;\n}\ninterface DirectorySpec extends BaseTreeItemSpec {\n    type: 'directory';\n    children: TreeItemSpec[];\n}\ninterface LeafSpec extends BaseTreeItemSpec {\n    type: 'leaf';\n}\ntype TreeItemSpec = DirectorySpec | LeafSpec;\ninterface UrlInputSpec extends FormComponentWithLabelSpec {\n    type: 'urlinput';\n    filetype?: 'image' | 'media' | 'file';\n    enabled?: boolean;\n    picker_text?: string;\n}\ninterface UrlInputData {\n    value: string;\n    meta: {\n        text?: string;\n    };\n}\ntype BodyComponentSpec = BarSpec | ButtonSpec | CheckboxSpec | TextAreaSpec | InputSpec | ListBoxSpec | SelectBoxSpec | SizeInputSpec | SliderSpec | IframeSpec | HtmlPanelSpec | UrlInputSpec | DropZoneSpec | ColorInputSpec | GridSpec | ColorPickerSpec | ImagePreviewSpec | AlertBannerSpec | CollectionSpec | LabelSpec | TableSpec | TreeSpec | PanelSpec | CustomEditorSpec;\ninterface BarSpec {\n    type: 'bar';\n    items: BodyComponentSpec[];\n}\ninterface DialogToggleMenuItemSpec extends CommonMenuItemSpec {\n    type?: 'togglemenuitem';\n    name: string;\n}\ntype DialogFooterMenuButtonItemSpec = DialogToggleMenuItemSpec;\ninterface BaseDialogFooterButtonSpec {\n    name?: string;\n    align?: 'start' | 'end';\n    primary?: boolean;\n    enabled?: boolean;\n    icon?: string;\n    buttonType?: 'primary' | 'secondary';\n}\ninterface DialogFooterNormalButtonSpec extends BaseDialogFooterButtonSpec {\n    type: 'submit' | 'cancel' | 'custom';\n    text: string;\n}\ninterface DialogFooterMenuButtonSpec extends BaseDialogFooterButtonSpec {\n    type: 'menu';\n    text?: string;\n    tooltip?: string;\n    icon?: string;\n    items: DialogFooterMenuButtonItemSpec[];\n}\ninterface DialogFooterToggleButtonSpec extends BaseDialogFooterButtonSpec {\n    type: 'togglebutton';\n    tooltip?: string;\n    icon?: string;\n    text?: string;\n    active?: boolean;\n}\ntype DialogFooterButtonSpec = DialogFooterNormalButtonSpec | DialogFooterMenuButtonSpec | DialogFooterToggleButtonSpec;\ninterface TabSpec {\n    name?: string;\n    title: string;\n    items: BodyComponentSpec[];\n}\ninterface TabPanelSpec {\n    type: 'tabpanel';\n    tabs: TabSpec[];\n}\ntype DialogDataItem = any;\ntype DialogData = Record<string, DialogDataItem>;\ninterface DialogInstanceApi<T extends DialogData> {\n    getData: () => T;\n    setData: (data: Partial<T>) => void;\n    setEnabled: (name: string, state: boolean) => void;\n    focus: (name: string) => void;\n    showTab: (name: string) => void;\n    redial: (nu: DialogSpec<T>) => void;\n    block: (msg: string) => void;\n    unblock: () => void;\n    toggleFullscreen: () => void;\n    close: () => void;\n}\ninterface DialogActionDetails {\n    name: string;\n    value?: any;\n}\ninterface DialogChangeDetails<T> {\n    name: keyof T;\n}\ninterface DialogTabChangeDetails {\n    newTabName: string;\n    oldTabName: string;\n}\ntype DialogActionHandler<T extends DialogData> = (api: DialogInstanceApi<T>, details: DialogActionDetails) => void;\ntype DialogChangeHandler<T extends DialogData> = (api: DialogInstanceApi<T>, details: DialogChangeDetails<T>) => void;\ntype DialogSubmitHandler<T extends DialogData> = (api: DialogInstanceApi<T>) => void;\ntype DialogCloseHandler = () => void;\ntype DialogCancelHandler<T extends DialogData> = (api: DialogInstanceApi<T>) => void;\ntype DialogTabChangeHandler<T extends DialogData> = (api: DialogInstanceApi<T>, details: DialogTabChangeDetails) => void;\ntype DialogSize = 'normal' | 'medium' | 'large';\ninterface DialogSpec<T extends DialogData> {\n    title: string;\n    size?: DialogSize;\n    body: TabPanelSpec | PanelSpec;\n    buttons?: DialogFooterButtonSpec[];\n    initialData?: Partial<T>;\n    onAction?: DialogActionHandler<T>;\n    onChange?: DialogChangeHandler<T>;\n    onSubmit?: DialogSubmitHandler<T>;\n    onClose?: DialogCloseHandler;\n    onCancel?: DialogCancelHandler<T>;\n    onTabChange?: DialogTabChangeHandler<T>;\n}\ninterface UrlDialogInstanceApi {\n    block: (msg: string) => void;\n    unblock: () => void;\n    close: () => void;\n    sendMessage: (msg: any) => void;\n}\ninterface UrlDialogActionDetails {\n    name: string;\n    value?: any;\n}\ninterface UrlDialogMessage {\n    mceAction: string;\n    [key: string]: any;\n}\ntype UrlDialogActionHandler = (api: UrlDialogInstanceApi, actions: UrlDialogActionDetails) => void;\ntype UrlDialogCloseHandler = () => void;\ntype UrlDialogCancelHandler = (api: UrlDialogInstanceApi) => void;\ntype UrlDialogMessageHandler = (api: UrlDialogInstanceApi, message: UrlDialogMessage) => void;\ninterface UrlDialogFooterButtonSpec extends DialogFooterNormalButtonSpec {\n    type: 'cancel' | 'custom';\n}\ninterface UrlDialogSpec {\n    title: string;\n    url: string;\n    height?: number;\n    width?: number;\n    buttons?: UrlDialogFooterButtonSpec[];\n    onAction?: UrlDialogActionHandler;\n    onClose?: UrlDialogCloseHandler;\n    onCancel?: UrlDialogCancelHandler;\n    onMessage?: UrlDialogMessageHandler;\n}\ntype ColumnTypes = number | 'auto';\ntype SeparatorItemSpec = SeparatorMenuItemSpec;\ninterface AutocompleterItemSpec {\n    type?: 'autocompleteitem';\n    value: string;\n    text?: string;\n    icon?: string;\n    meta?: Record<string, any>;\n}\ntype AutocompleterContents = SeparatorItemSpec | AutocompleterItemSpec | CardMenuItemSpec;\ninterface AutocompleterSpec {\n    type?: 'autocompleter';\n    ch?: string;\n    trigger?: string;\n    minChars?: number;\n    columns?: ColumnTypes;\n    matches?: (rng: Range, text: string, pattern: string) => boolean;\n    fetch: (pattern: string, maxResults: number, fetchOptions: Record<string, any>) => Promise<AutocompleterContents[]>;\n    onAction: (autocompleterApi: AutocompleterInstanceApi, rng: Range, value: string, meta: Record<string, any>) => void;\n    maxResults?: number;\n    highlightOn?: string[];\n}\ninterface AutocompleterInstanceApi {\n    hide: () => void;\n    reload: (fetchOptions: Record<string, any>) => void;\n}\ntype ContextPosition = 'node' | 'selection' | 'line';\ntype ContextScope = 'node' | 'editor';\ninterface ContextBarSpec {\n    predicate?: (elem: Element) => boolean;\n    position?: ContextPosition;\n    scope?: ContextScope;\n}\ninterface ContextFormLaunchButtonApi extends BaseToolbarButtonSpec<BaseToolbarButtonInstanceApi> {\n    type: 'contextformbutton';\n}\ninterface ContextFormLaunchToggleButtonSpec extends BaseToolbarToggleButtonSpec<BaseToolbarToggleButtonInstanceApi> {\n    type: 'contextformtogglebutton';\n}\ninterface ContextFormButtonInstanceApi extends BaseToolbarButtonInstanceApi {\n}\ninterface ContextFormToggleButtonInstanceApi extends BaseToolbarToggleButtonInstanceApi {\n}\ninterface ContextFormButtonSpec extends BaseToolbarButtonSpec<ContextFormButtonInstanceApi> {\n    type?: 'contextformbutton';\n    primary?: boolean;\n    onAction: (formApi: ContextFormInstanceApi, api: ContextFormButtonInstanceApi) => void;\n}\ninterface ContextFormToggleButtonSpec extends BaseToolbarToggleButtonSpec<ContextFormToggleButtonInstanceApi> {\n    type?: 'contextformtogglebutton';\n    onAction: (formApi: ContextFormInstanceApi, buttonApi: ContextFormToggleButtonInstanceApi) => void;\n    primary?: boolean;\n}\ninterface ContextFormInstanceApi {\n    hide: () => void;\n    getValue: () => string;\n}\ninterface ContextFormSpec extends ContextBarSpec {\n    type?: 'contextform';\n    initValue?: () => string;\n    label?: string;\n    launch?: ContextFormLaunchButtonApi | ContextFormLaunchToggleButtonSpec;\n    commands: Array<ContextFormToggleButtonSpec | ContextFormButtonSpec>;\n}\ninterface ContextToolbarSpec extends ContextBarSpec {\n    type?: 'contexttoolbar';\n    items: string;\n}\ntype PublicDialog_d_AlertBannerSpec = AlertBannerSpec;\ntype PublicDialog_d_BarSpec = BarSpec;\ntype PublicDialog_d_BodyComponentSpec = BodyComponentSpec;\ntype PublicDialog_d_ButtonSpec = ButtonSpec;\ntype PublicDialog_d_CheckboxSpec = CheckboxSpec;\ntype PublicDialog_d_CollectionItem = CollectionItem;\ntype PublicDialog_d_CollectionSpec = CollectionSpec;\ntype PublicDialog_d_ColorInputSpec = ColorInputSpec;\ntype PublicDialog_d_ColorPickerSpec = ColorPickerSpec;\ntype PublicDialog_d_CustomEditorSpec = CustomEditorSpec;\ntype PublicDialog_d_CustomEditorInit = CustomEditorInit;\ntype PublicDialog_d_CustomEditorInitFn = CustomEditorInitFn;\ntype PublicDialog_d_DialogData = DialogData;\ntype PublicDialog_d_DialogSize = DialogSize;\ntype PublicDialog_d_DialogSpec<T extends DialogData> = DialogSpec<T>;\ntype PublicDialog_d_DialogInstanceApi<T extends DialogData> = DialogInstanceApi<T>;\ntype PublicDialog_d_DialogFooterButtonSpec = DialogFooterButtonSpec;\ntype PublicDialog_d_DialogActionDetails = DialogActionDetails;\ntype PublicDialog_d_DialogChangeDetails<T> = DialogChangeDetails<T>;\ntype PublicDialog_d_DialogTabChangeDetails = DialogTabChangeDetails;\ntype PublicDialog_d_DropZoneSpec = DropZoneSpec;\ntype PublicDialog_d_GridSpec = GridSpec;\ntype PublicDialog_d_HtmlPanelSpec = HtmlPanelSpec;\ntype PublicDialog_d_IframeSpec = IframeSpec;\ntype PublicDialog_d_ImagePreviewSpec = ImagePreviewSpec;\ntype PublicDialog_d_InputSpec = InputSpec;\ntype PublicDialog_d_LabelSpec = LabelSpec;\ntype PublicDialog_d_ListBoxSpec = ListBoxSpec;\ntype PublicDialog_d_ListBoxItemSpec = ListBoxItemSpec;\ntype PublicDialog_d_ListBoxNestedItemSpec = ListBoxNestedItemSpec;\ntype PublicDialog_d_ListBoxSingleItemSpec = ListBoxSingleItemSpec;\ntype PublicDialog_d_PanelSpec = PanelSpec;\ntype PublicDialog_d_SelectBoxSpec = SelectBoxSpec;\ntype PublicDialog_d_SelectBoxItemSpec = SelectBoxItemSpec;\ntype PublicDialog_d_SizeInputSpec = SizeInputSpec;\ntype PublicDialog_d_SliderSpec = SliderSpec;\ntype PublicDialog_d_TableSpec = TableSpec;\ntype PublicDialog_d_TabSpec = TabSpec;\ntype PublicDialog_d_TabPanelSpec = TabPanelSpec;\ntype PublicDialog_d_TextAreaSpec = TextAreaSpec;\ntype PublicDialog_d_TreeSpec = TreeSpec;\ntype PublicDialog_d_TreeItemSpec = TreeItemSpec;\ntype PublicDialog_d_UrlInputData = UrlInputData;\ntype PublicDialog_d_UrlInputSpec = UrlInputSpec;\ntype PublicDialog_d_UrlDialogSpec = UrlDialogSpec;\ntype PublicDialog_d_UrlDialogFooterButtonSpec = UrlDialogFooterButtonSpec;\ntype PublicDialog_d_UrlDialogInstanceApi = UrlDialogInstanceApi;\ntype PublicDialog_d_UrlDialogActionDetails = UrlDialogActionDetails;\ntype PublicDialog_d_UrlDialogMessage = UrlDialogMessage;\ndeclare namespace PublicDialog_d {\n    export { PublicDialog_d_AlertBannerSpec as AlertBannerSpec, PublicDialog_d_BarSpec as BarSpec, PublicDialog_d_BodyComponentSpec as BodyComponentSpec, PublicDialog_d_ButtonSpec as ButtonSpec, PublicDialog_d_CheckboxSpec as CheckboxSpec, PublicDialog_d_CollectionItem as CollectionItem, PublicDialog_d_CollectionSpec as CollectionSpec, PublicDialog_d_ColorInputSpec as ColorInputSpec, PublicDialog_d_ColorPickerSpec as ColorPickerSpec, PublicDialog_d_CustomEditorSpec as CustomEditorSpec, PublicDialog_d_CustomEditorInit as CustomEditorInit, PublicDialog_d_CustomEditorInitFn as CustomEditorInitFn, PublicDialog_d_DialogData as DialogData, PublicDialog_d_DialogSize as DialogSize, PublicDialog_d_DialogSpec as DialogSpec, PublicDialog_d_DialogInstanceApi as DialogInstanceApi, PublicDialog_d_DialogFooterButtonSpec as DialogFooterButtonSpec, PublicDialog_d_DialogActionDetails as DialogActionDetails, PublicDialog_d_DialogChangeDetails as DialogChangeDetails, PublicDialog_d_DialogTabChangeDetails as DialogTabChangeDetails, PublicDialog_d_DropZoneSpec as DropZoneSpec, PublicDialog_d_GridSpec as GridSpec, PublicDialog_d_HtmlPanelSpec as HtmlPanelSpec, PublicDialog_d_IframeSpec as IframeSpec, PublicDialog_d_ImagePreviewSpec as ImagePreviewSpec, PublicDialog_d_InputSpec as InputSpec, PublicDialog_d_LabelSpec as LabelSpec, PublicDialog_d_ListBoxSpec as ListBoxSpec, PublicDialog_d_ListBoxItemSpec as ListBoxItemSpec, PublicDialog_d_ListBoxNestedItemSpec as ListBoxNestedItemSpec, PublicDialog_d_ListBoxSingleItemSpec as ListBoxSingleItemSpec, PublicDialog_d_PanelSpec as PanelSpec, PublicDialog_d_SelectBoxSpec as SelectBoxSpec, PublicDialog_d_SelectBoxItemSpec as SelectBoxItemSpec, PublicDialog_d_SizeInputSpec as SizeInputSpec, PublicDialog_d_SliderSpec as SliderSpec, PublicDialog_d_TableSpec as TableSpec, PublicDialog_d_TabSpec as TabSpec, PublicDialog_d_TabPanelSpec as TabPanelSpec, PublicDialog_d_TextAreaSpec as TextAreaSpec, PublicDialog_d_TreeSpec as TreeSpec, PublicDialog_d_TreeItemSpec as TreeItemSpec, DirectorySpec as TreeDirectorySpec, LeafSpec as TreeLeafSpec, PublicDialog_d_UrlInputData as UrlInputData, PublicDialog_d_UrlInputSpec as UrlInputSpec, PublicDialog_d_UrlDialogSpec as UrlDialogSpec, PublicDialog_d_UrlDialogFooterButtonSpec as UrlDialogFooterButtonSpec, PublicDialog_d_UrlDialogInstanceApi as UrlDialogInstanceApi, PublicDialog_d_UrlDialogActionDetails as UrlDialogActionDetails, PublicDialog_d_UrlDialogMessage as UrlDialogMessage, };\n}\ntype PublicInlineContent_d_AutocompleterSpec = AutocompleterSpec;\ntype PublicInlineContent_d_AutocompleterItemSpec = AutocompleterItemSpec;\ntype PublicInlineContent_d_AutocompleterContents = AutocompleterContents;\ntype PublicInlineContent_d_AutocompleterInstanceApi = AutocompleterInstanceApi;\ntype PublicInlineContent_d_ContextPosition = ContextPosition;\ntype PublicInlineContent_d_ContextScope = ContextScope;\ntype PublicInlineContent_d_ContextFormSpec = ContextFormSpec;\ntype PublicInlineContent_d_ContextFormInstanceApi = ContextFormInstanceApi;\ntype PublicInlineContent_d_ContextFormButtonSpec = ContextFormButtonSpec;\ntype PublicInlineContent_d_ContextFormButtonInstanceApi = ContextFormButtonInstanceApi;\ntype PublicInlineContent_d_ContextFormToggleButtonSpec = ContextFormToggleButtonSpec;\ntype PublicInlineContent_d_ContextFormToggleButtonInstanceApi = ContextFormToggleButtonInstanceApi;\ntype PublicInlineContent_d_ContextToolbarSpec = ContextToolbarSpec;\ntype PublicInlineContent_d_SeparatorItemSpec = SeparatorItemSpec;\ndeclare namespace PublicInlineContent_d {\n    export { PublicInlineContent_d_AutocompleterSpec as AutocompleterSpec, PublicInlineContent_d_AutocompleterItemSpec as AutocompleterItemSpec, PublicInlineContent_d_AutocompleterContents as AutocompleterContents, PublicInlineContent_d_AutocompleterInstanceApi as AutocompleterInstanceApi, PublicInlineContent_d_ContextPosition as ContextPosition, PublicInlineContent_d_ContextScope as ContextScope, PublicInlineContent_d_ContextFormSpec as ContextFormSpec, PublicInlineContent_d_ContextFormInstanceApi as ContextFormInstanceApi, PublicInlineContent_d_ContextFormButtonSpec as ContextFormButtonSpec, PublicInlineContent_d_ContextFormButtonInstanceApi as ContextFormButtonInstanceApi, PublicInlineContent_d_ContextFormToggleButtonSpec as ContextFormToggleButtonSpec, PublicInlineContent_d_ContextFormToggleButtonInstanceApi as ContextFormToggleButtonInstanceApi, PublicInlineContent_d_ContextToolbarSpec as ContextToolbarSpec, PublicInlineContent_d_SeparatorItemSpec as SeparatorItemSpec, };\n}\ntype PublicMenu_d_MenuItemSpec = MenuItemSpec;\ntype PublicMenu_d_MenuItemInstanceApi = MenuItemInstanceApi;\ntype PublicMenu_d_NestedMenuItemContents = NestedMenuItemContents;\ntype PublicMenu_d_NestedMenuItemSpec = NestedMenuItemSpec;\ntype PublicMenu_d_NestedMenuItemInstanceApi = NestedMenuItemInstanceApi;\ntype PublicMenu_d_FancyMenuItemSpec = FancyMenuItemSpec;\ntype PublicMenu_d_ColorSwatchMenuItemSpec = ColorSwatchMenuItemSpec;\ntype PublicMenu_d_InsertTableMenuItemSpec = InsertTableMenuItemSpec;\ntype PublicMenu_d_ToggleMenuItemSpec = ToggleMenuItemSpec;\ntype PublicMenu_d_ToggleMenuItemInstanceApi = ToggleMenuItemInstanceApi;\ntype PublicMenu_d_ChoiceMenuItemSpec = ChoiceMenuItemSpec;\ntype PublicMenu_d_ChoiceMenuItemInstanceApi = ChoiceMenuItemInstanceApi;\ntype PublicMenu_d_SeparatorMenuItemSpec = SeparatorMenuItemSpec;\ntype PublicMenu_d_ContextMenuApi = ContextMenuApi;\ntype PublicMenu_d_ContextMenuContents = ContextMenuContents;\ntype PublicMenu_d_ContextMenuItem = ContextMenuItem;\ntype PublicMenu_d_ContextSubMenu = ContextSubMenu;\ntype PublicMenu_d_CardMenuItemSpec = CardMenuItemSpec;\ntype PublicMenu_d_CardMenuItemInstanceApi = CardMenuItemInstanceApi;\ntype PublicMenu_d_CardItemSpec = CardItemSpec;\ntype PublicMenu_d_CardContainerSpec = CardContainerSpec;\ntype PublicMenu_d_CardImageSpec = CardImageSpec;\ntype PublicMenu_d_CardTextSpec = CardTextSpec;\ndeclare namespace PublicMenu_d {\n    export { PublicMenu_d_MenuItemSpec as MenuItemSpec, PublicMenu_d_MenuItemInstanceApi as MenuItemInstanceApi, PublicMenu_d_NestedMenuItemContents as NestedMenuItemContents, PublicMenu_d_NestedMenuItemSpec as NestedMenuItemSpec, PublicMenu_d_NestedMenuItemInstanceApi as NestedMenuItemInstanceApi, PublicMenu_d_FancyMenuItemSpec as FancyMenuItemSpec, PublicMenu_d_ColorSwatchMenuItemSpec as ColorSwatchMenuItemSpec, PublicMenu_d_InsertTableMenuItemSpec as InsertTableMenuItemSpec, PublicMenu_d_ToggleMenuItemSpec as ToggleMenuItemSpec, PublicMenu_d_ToggleMenuItemInstanceApi as ToggleMenuItemInstanceApi, PublicMenu_d_ChoiceMenuItemSpec as ChoiceMenuItemSpec, PublicMenu_d_ChoiceMenuItemInstanceApi as ChoiceMenuItemInstanceApi, PublicMenu_d_SeparatorMenuItemSpec as SeparatorMenuItemSpec, PublicMenu_d_ContextMenuApi as ContextMenuApi, PublicMenu_d_ContextMenuContents as ContextMenuContents, PublicMenu_d_ContextMenuItem as ContextMenuItem, PublicMenu_d_ContextSubMenu as ContextSubMenu, PublicMenu_d_CardMenuItemSpec as CardMenuItemSpec, PublicMenu_d_CardMenuItemInstanceApi as CardMenuItemInstanceApi, PublicMenu_d_CardItemSpec as CardItemSpec, PublicMenu_d_CardContainerSpec as CardContainerSpec, PublicMenu_d_CardImageSpec as CardImageSpec, PublicMenu_d_CardTextSpec as CardTextSpec, };\n}\ninterface SidebarInstanceApi {\n    element: () => HTMLElement;\n}\ninterface SidebarSpec {\n    icon?: string;\n    tooltip?: string;\n    onShow?: (api: SidebarInstanceApi) => void;\n    onSetup?: (api: SidebarInstanceApi) => (api: SidebarInstanceApi) => void;\n    onHide?: (api: SidebarInstanceApi) => void;\n}\ntype PublicSidebar_d_SidebarSpec = SidebarSpec;\ntype PublicSidebar_d_SidebarInstanceApi = SidebarInstanceApi;\ndeclare namespace PublicSidebar_d {\n    export { PublicSidebar_d_SidebarSpec as SidebarSpec, PublicSidebar_d_SidebarInstanceApi as SidebarInstanceApi, };\n}\ntype PublicToolbar_d_ToolbarButtonSpec = ToolbarButtonSpec;\ntype PublicToolbar_d_ToolbarButtonInstanceApi = ToolbarButtonInstanceApi;\ntype PublicToolbar_d_ToolbarSplitButtonSpec = ToolbarSplitButtonSpec;\ntype PublicToolbar_d_ToolbarSplitButtonInstanceApi = ToolbarSplitButtonInstanceApi;\ntype PublicToolbar_d_ToolbarMenuButtonSpec = ToolbarMenuButtonSpec;\ntype PublicToolbar_d_ToolbarMenuButtonInstanceApi = ToolbarMenuButtonInstanceApi;\ntype PublicToolbar_d_ToolbarToggleButtonSpec = ToolbarToggleButtonSpec;\ntype PublicToolbar_d_ToolbarToggleButtonInstanceApi = ToolbarToggleButtonInstanceApi;\ntype PublicToolbar_d_GroupToolbarButtonSpec = GroupToolbarButtonSpec;\ntype PublicToolbar_d_GroupToolbarButtonInstanceApi = GroupToolbarButtonInstanceApi;\ndeclare namespace PublicToolbar_d {\n    export { PublicToolbar_d_ToolbarButtonSpec as ToolbarButtonSpec, PublicToolbar_d_ToolbarButtonInstanceApi as ToolbarButtonInstanceApi, PublicToolbar_d_ToolbarSplitButtonSpec as ToolbarSplitButtonSpec, PublicToolbar_d_ToolbarSplitButtonInstanceApi as ToolbarSplitButtonInstanceApi, PublicToolbar_d_ToolbarMenuButtonSpec as ToolbarMenuButtonSpec, PublicToolbar_d_ToolbarMenuButtonInstanceApi as ToolbarMenuButtonInstanceApi, PublicToolbar_d_ToolbarToggleButtonSpec as ToolbarToggleButtonSpec, PublicToolbar_d_ToolbarToggleButtonInstanceApi as ToolbarToggleButtonInstanceApi, PublicToolbar_d_GroupToolbarButtonSpec as GroupToolbarButtonSpec, PublicToolbar_d_GroupToolbarButtonInstanceApi as GroupToolbarButtonInstanceApi, };\n}\ninterface ViewButtonApi {\n    setIcon: (newIcon: string) => void;\n}\ninterface ViewToggleButtonApi extends ViewButtonApi {\n    isActive: () => boolean;\n    setActive: (state: boolean) => void;\n}\ninterface BaseButtonSpec<Api extends ViewButtonApi> {\n    text?: string;\n    icon?: string;\n    tooltip?: string;\n    buttonType?: 'primary' | 'secondary';\n    borderless?: boolean;\n    onAction: (api: Api) => void;\n}\ninterface ViewNormalButtonSpec extends BaseButtonSpec<ViewButtonApi> {\n    text: string;\n    type: 'button';\n}\ninterface ViewToggleButtonSpec extends BaseButtonSpec<ViewToggleButtonApi> {\n    type: 'togglebutton';\n    active?: boolean;\n    onAction: (api: ViewToggleButtonApi) => void;\n}\ninterface ViewButtonsGroupSpec {\n    type: 'group';\n    buttons: Array<ViewNormalButtonSpec | ViewToggleButtonSpec>;\n}\ntype ViewButtonSpec = ViewNormalButtonSpec | ViewToggleButtonSpec | ViewButtonsGroupSpec;\ninterface ViewInstanceApi {\n    getContainer: () => HTMLElement;\n}\ninterface ViewSpec {\n    buttons?: ViewButtonSpec[];\n    onShow: (api: ViewInstanceApi) => void;\n    onHide: (api: ViewInstanceApi) => void;\n}\ntype PublicView_d_ViewSpec = ViewSpec;\ntype PublicView_d_ViewInstanceApi = ViewInstanceApi;\ndeclare namespace PublicView_d {\n    export { PublicView_d_ViewSpec as ViewSpec, PublicView_d_ViewInstanceApi as ViewInstanceApi, };\n}\ninterface Registry$1 {\n    addButton: (name: string, spec: ToolbarButtonSpec) => void;\n    addGroupToolbarButton: (name: string, spec: GroupToolbarButtonSpec) => void;\n    addToggleButton: (name: string, spec: ToolbarToggleButtonSpec) => void;\n    addMenuButton: (name: string, spec: ToolbarMenuButtonSpec) => void;\n    addSplitButton: (name: string, spec: ToolbarSplitButtonSpec) => void;\n    addMenuItem: (name: string, spec: MenuItemSpec) => void;\n    addNestedMenuItem: (name: string, spec: NestedMenuItemSpec) => void;\n    addToggleMenuItem: (name: string, spec: ToggleMenuItemSpec) => void;\n    addContextMenu: (name: string, spec: ContextMenuApi) => void;\n    addContextToolbar: (name: string, spec: ContextToolbarSpec) => void;\n    addContextForm: (name: string, spec: ContextFormSpec) => void;\n    addIcon: (name: string, svgData: string) => void;\n    addAutocompleter: (name: string, spec: AutocompleterSpec) => void;\n    addSidebar: (name: string, spec: SidebarSpec) => void;\n    addView: (name: string, spec: ViewSpec) => void;\n    getAll: () => {\n        buttons: Record<string, ToolbarButtonSpec | GroupToolbarButtonSpec | ToolbarMenuButtonSpec | ToolbarSplitButtonSpec | ToolbarToggleButtonSpec>;\n        menuItems: Record<string, MenuItemSpec | NestedMenuItemSpec | ToggleMenuItemSpec>;\n        popups: Record<string, AutocompleterSpec>;\n        contextMenus: Record<string, ContextMenuApi>;\n        contextToolbars: Record<string, ContextToolbarSpec | ContextFormSpec>;\n        icons: Record<string, string>;\n        sidebars: Record<string, SidebarSpec>;\n        views: Record<string, ViewSpec>;\n    };\n}\ninterface AutocompleteLookupData {\n    readonly matchText: string;\n    readonly items: AutocompleterContents[];\n    readonly columns: ColumnTypes;\n    readonly onAction: (autoApi: AutocompleterInstanceApi, rng: Range, value: string, meta: Record<string, any>) => void;\n    readonly highlightOn: string[];\n}\ninterface AutocompleterEventArgs {\n    readonly lookupData: AutocompleteLookupData[];\n}\ninterface RangeLikeObject {\n    startContainer: Node;\n    startOffset: number;\n    endContainer: Node;\n    endOffset: number;\n}\ntype ApplyFormat = BlockFormat | InlineFormat | SelectorFormat;\ntype RemoveFormat = RemoveBlockFormat | RemoveInlineFormat | RemoveSelectorFormat;\ntype Format = ApplyFormat | RemoveFormat;\ntype Formats = Record<string, Format | Format[]>;\ntype FormatAttrOrStyleValue = string | ((vars?: FormatVars) => string | null);\ntype FormatVars = Record<string, string | null>;\ninterface BaseFormat<T> {\n    ceFalseOverride?: boolean;\n    classes?: string | string[];\n    collapsed?: boolean;\n    exact?: boolean;\n    expand?: boolean;\n    links?: boolean;\n    mixed?: boolean;\n    block_expand?: boolean;\n    onmatch?: (node: Element, fmt: T, itemName: string) => boolean;\n    remove?: 'none' | 'empty' | 'all';\n    remove_similar?: boolean;\n    split?: boolean;\n    deep?: boolean;\n    preserve_attributes?: string[];\n}\ninterface Block {\n    block: string;\n    list_block?: string;\n    wrapper?: boolean;\n}\ninterface Inline {\n    inline: string;\n}\ninterface Selector {\n    selector: string;\n    inherit?: boolean;\n}\ninterface CommonFormat<T> extends BaseFormat<T> {\n    attributes?: Record<string, FormatAttrOrStyleValue>;\n    styles?: Record<string, FormatAttrOrStyleValue>;\n    toggle?: boolean;\n    preview?: string | false;\n    onformat?: (elm: Element, fmt: T, vars?: FormatVars, node?: Node | RangeLikeObject | null) => void;\n    clear_child_styles?: boolean;\n    merge_siblings?: boolean;\n    merge_with_parents?: boolean;\n}\ninterface BlockFormat extends Block, CommonFormat<BlockFormat> {\n}\ninterface InlineFormat extends Inline, CommonFormat<InlineFormat> {\n}\ninterface SelectorFormat extends Selector, CommonFormat<SelectorFormat> {\n}\ninterface CommonRemoveFormat<T> extends BaseFormat<T> {\n    attributes?: string[] | Record<string, FormatAttrOrStyleValue>;\n    styles?: string[] | Record<string, FormatAttrOrStyleValue>;\n}\ninterface RemoveBlockFormat extends Block, CommonRemoveFormat<RemoveBlockFormat> {\n}\ninterface RemoveInlineFormat extends Inline, CommonRemoveFormat<RemoveInlineFormat> {\n}\ninterface RemoveSelectorFormat extends Selector, CommonRemoveFormat<RemoveSelectorFormat> {\n}\ninterface Filter<C extends Function> {\n    name: string;\n    callbacks: C[];\n}\ninterface ParserArgs {\n    getInner?: boolean | number;\n    forced_root_block?: boolean | string;\n    context?: string;\n    isRootContent?: boolean;\n    format?: string;\n    invalid?: boolean;\n    no_events?: boolean;\n    [key: string]: any;\n}\ntype ParserFilterCallback = (nodes: AstNode[], name: string, args: ParserArgs) => void;\ninterface ParserFilter extends Filter<ParserFilterCallback> {\n}\ninterface DomParserSettings {\n    allow_html_data_urls?: boolean;\n    allow_svg_data_urls?: boolean;\n    allow_conditional_comments?: boolean;\n    allow_html_in_named_anchor?: boolean;\n    allow_script_urls?: boolean;\n    allow_unsafe_link_target?: boolean;\n    blob_cache?: BlobCache;\n    convert_fonts_to_spans?: boolean;\n    convert_unsafe_embeds?: boolean;\n    document?: Document;\n    fix_list_elements?: boolean;\n    font_size_legacy_values?: string;\n    forced_root_block?: boolean | string;\n    forced_root_block_attrs?: Record<string, string>;\n    inline_styles?: boolean;\n    pad_empty_with_br?: boolean;\n    preserve_cdata?: boolean;\n    remove_trailing_brs?: boolean;\n    root_name?: string;\n    sandbox_iframes?: boolean;\n    sanitize?: boolean;\n    validate?: boolean;\n}\ninterface DomParser {\n    schema: Schema;\n    addAttributeFilter: (name: string, callback: ParserFilterCallback) => void;\n    getAttributeFilters: () => ParserFilter[];\n    removeAttributeFilter: (name: string, callback?: ParserFilterCallback) => void;\n    addNodeFilter: (name: string, callback: ParserFilterCallback) => void;\n    getNodeFilters: () => ParserFilter[];\n    removeNodeFilter: (name: string, callback?: ParserFilterCallback) => void;\n    parse: (html: string, args?: ParserArgs) => AstNode;\n}\ninterface StyleSheetLoaderSettings {\n    maxLoadTime?: number;\n    contentCssCors?: boolean;\n    referrerPolicy?: ReferrerPolicy;\n}\ninterface StyleSheetLoader {\n    load: (url: string) => Promise<void>;\n    loadRawCss: (key: string, css: string) => void;\n    loadAll: (urls: string[]) => Promise<string[]>;\n    unload: (url: string) => void;\n    unloadRawCss: (key: string) => void;\n    unloadAll: (urls: string[]) => void;\n    _setReferrerPolicy: (referrerPolicy: ReferrerPolicy) => void;\n    _setContentCssCors: (contentCssCors: boolean) => void;\n}\ntype Registry = Registry$1;\ninterface EditorUiApi {\n    show: () => void;\n    hide: () => void;\n    setEnabled: (state: boolean) => void;\n    isEnabled: () => boolean;\n}\ninterface EditorUi extends EditorUiApi {\n    registry: Registry;\n    styleSheetLoader: StyleSheetLoader;\n}\ntype Ui_d_Registry = Registry;\ntype Ui_d_EditorUiApi = EditorUiApi;\ntype Ui_d_EditorUi = EditorUi;\ndeclare namespace Ui_d {\n    export { Ui_d_Registry as Registry, PublicDialog_d as Dialog, PublicInlineContent_d as InlineContent, PublicMenu_d as Menu, PublicView_d as View, PublicSidebar_d as Sidebar, PublicToolbar_d as Toolbar, Ui_d_EditorUiApi as EditorUiApi, Ui_d_EditorUi as EditorUi, };\n}\ninterface WindowParams {\n    readonly inline?: 'cursor' | 'toolbar' | 'bottom';\n    readonly ariaAttrs?: boolean;\n    readonly persistent?: boolean;\n}\ntype InstanceApi<T extends DialogData> = UrlDialogInstanceApi | DialogInstanceApi<T>;\ninterface WindowManagerImpl {\n    open: <T extends DialogData>(config: DialogSpec<T>, params: WindowParams | undefined, closeWindow: (dialog: DialogInstanceApi<T>) => void) => DialogInstanceApi<T>;\n    openUrl: (config: UrlDialogSpec, closeWindow: (dialog: UrlDialogInstanceApi) => void) => UrlDialogInstanceApi;\n    alert: (message: string, callback: () => void) => void;\n    confirm: (message: string, callback: (state: boolean) => void) => void;\n    close: (dialog: InstanceApi<any>) => void;\n}\ninterface WindowManager {\n    open: <T extends DialogData>(config: DialogSpec<T>, params?: WindowParams) => DialogInstanceApi<T>;\n    openUrl: (config: UrlDialogSpec) => UrlDialogInstanceApi;\n    alert: (message: string, callback?: () => void, scope?: any) => void;\n    confirm: (message: string, callback?: (state: boolean) => void, scope?: any) => void;\n    close: () => void;\n}\ninterface ExecCommandEvent {\n    command: string;\n    ui: boolean;\n    value?: any;\n}\ninterface BeforeGetContentEvent extends GetContentArgs {\n    selection?: boolean;\n}\ninterface GetContentEvent extends BeforeGetContentEvent {\n    content: string;\n}\ninterface BeforeSetContentEvent extends SetContentArgs {\n    content: string;\n    selection?: boolean;\n}\ninterface SetContentEvent extends BeforeSetContentEvent {\n    content: string;\n}\ninterface SaveContentEvent extends GetContentEvent {\n    save: boolean;\n}\ninterface NewBlockEvent {\n    newBlock: Element;\n}\ninterface NodeChangeEvent {\n    element: Element;\n    parents: Node[];\n    selectionChange?: boolean;\n    initial?: boolean;\n}\ninterface FormatEvent {\n    format: string;\n    vars?: FormatVars;\n    node?: Node | RangeLikeObject | null;\n}\ninterface ObjectResizeEvent {\n    target: HTMLElement;\n    width: number;\n    height: number;\n    origin: string;\n}\ninterface ObjectSelectedEvent {\n    target: Node;\n    targetClone?: Node;\n}\ninterface ScrollIntoViewEvent {\n    elm: HTMLElement;\n    alignToTop: boolean | undefined;\n}\ninterface SetSelectionRangeEvent {\n    range: Range;\n    forward: boolean | undefined;\n}\ninterface ShowCaretEvent {\n    target: Node;\n    direction: number;\n    before: boolean;\n}\ninterface SwitchModeEvent {\n    mode: string;\n}\ninterface ChangeEvent {\n    level: UndoLevel;\n    lastLevel: UndoLevel | undefined;\n}\ninterface AddUndoEvent extends ChangeEvent {\n    originalEvent: Event | undefined;\n}\ninterface UndoRedoEvent {\n    level: UndoLevel;\n}\ninterface WindowEvent<T extends DialogData> {\n    dialog: InstanceApi<T>;\n}\ninterface ProgressStateEvent {\n    state: boolean;\n    time?: number;\n}\ninterface AfterProgressStateEvent {\n    state: boolean;\n}\ninterface PlaceholderToggleEvent {\n    state: boolean;\n}\ninterface LoadErrorEvent {\n    message: string;\n}\ninterface PreProcessEvent extends ParserArgs {\n    node: Element;\n}\ninterface PostProcessEvent extends ParserArgs {\n    content: string;\n}\ninterface PastePlainTextToggleEvent {\n    state: boolean;\n}\ninterface PastePreProcessEvent {\n    content: string;\n    readonly internal: boolean;\n}\ninterface PastePostProcessEvent {\n    node: HTMLElement;\n    readonly internal: boolean;\n}\ninterface EditableRootStateChangeEvent {\n    state: boolean;\n}\ninterface NewTableRowEvent {\n    node: HTMLTableRowElement;\n}\ninterface NewTableCellEvent {\n    node: HTMLTableCellElement;\n}\ninterface TableEventData {\n    readonly structure: boolean;\n    readonly style: boolean;\n}\ninterface TableModifiedEvent extends TableEventData {\n    readonly table: HTMLTableElement;\n}\ninterface BeforeOpenNotificationEvent {\n    notification: NotificationSpec;\n}\ninterface OpenNotificationEvent {\n    notification: NotificationApi;\n}\ninterface EditorEventMap extends Omit<NativeEventMap, 'blur' | 'focus'> {\n    'activate': {\n        relatedTarget: Editor | null;\n    };\n    'deactivate': {\n        relatedTarget: Editor;\n    };\n    'focus': {\n        blurredEditor: Editor | null;\n    };\n    'blur': {\n        focusedEditor: Editor | null;\n    };\n    'resize': UIEvent;\n    'scroll': UIEvent;\n    'input': InputEvent;\n    'beforeinput': InputEvent;\n    'detach': {};\n    'remove': {};\n    'init': {};\n    'ScrollIntoView': ScrollIntoViewEvent;\n    'AfterScrollIntoView': ScrollIntoViewEvent;\n    'ObjectResized': ObjectResizeEvent;\n    'ObjectResizeStart': ObjectResizeEvent;\n    'SwitchMode': SwitchModeEvent;\n    'ScrollWindow': Event;\n    'ResizeWindow': UIEvent;\n    'SkinLoaded': {};\n    'SkinLoadError': LoadErrorEvent;\n    'PluginLoadError': LoadErrorEvent;\n    'ModelLoadError': LoadErrorEvent;\n    'IconsLoadError': LoadErrorEvent;\n    'ThemeLoadError': LoadErrorEvent;\n    'LanguageLoadError': LoadErrorEvent;\n    'BeforeExecCommand': ExecCommandEvent;\n    'ExecCommand': ExecCommandEvent;\n    'NodeChange': NodeChangeEvent;\n    'FormatApply': FormatEvent;\n    'FormatRemove': FormatEvent;\n    'ShowCaret': ShowCaretEvent;\n    'SelectionChange': {};\n    'ObjectSelected': ObjectSelectedEvent;\n    'BeforeObjectSelected': ObjectSelectedEvent;\n    'GetSelectionRange': {\n        range: Range;\n    };\n    'SetSelectionRange': SetSelectionRangeEvent;\n    'AfterSetSelectionRange': SetSelectionRangeEvent;\n    'BeforeGetContent': BeforeGetContentEvent;\n    'GetContent': GetContentEvent;\n    'BeforeSetContent': BeforeSetContentEvent;\n    'SetContent': SetContentEvent;\n    'SaveContent': SaveContentEvent;\n    'RawSaveContent': SaveContentEvent;\n    'LoadContent': {\n        load: boolean;\n        element: HTMLElement;\n    };\n    'PreviewFormats': {};\n    'AfterPreviewFormats': {};\n    'ScriptsLoaded': {};\n    'PreInit': {};\n    'PostRender': {};\n    'NewBlock': NewBlockEvent;\n    'ClearUndos': {};\n    'TypingUndo': {};\n    'Redo': UndoRedoEvent;\n    'Undo': UndoRedoEvent;\n    'BeforeAddUndo': AddUndoEvent;\n    'AddUndo': AddUndoEvent;\n    'change': ChangeEvent;\n    'CloseWindow': WindowEvent<any>;\n    'OpenWindow': WindowEvent<any>;\n    'ProgressState': ProgressStateEvent;\n    'AfterProgressState': AfterProgressStateEvent;\n    'PlaceholderToggle': PlaceholderToggleEvent;\n    'tap': TouchEvent;\n    'longpress': TouchEvent;\n    'longpresscancel': {};\n    'PreProcess': PreProcessEvent;\n    'PostProcess': PostProcessEvent;\n    'AutocompleterStart': AutocompleterEventArgs;\n    'AutocompleterUpdate': AutocompleterEventArgs;\n    'AutocompleterEnd': {};\n    'PastePlainTextToggle': PastePlainTextToggleEvent;\n    'PastePreProcess': PastePreProcessEvent;\n    'PastePostProcess': PastePostProcessEvent;\n    'TableModified': TableModifiedEvent;\n    'NewRow': NewTableRowEvent;\n    'NewCell': NewTableCellEvent;\n    'SetAttrib': SetAttribEvent;\n    'hide': {};\n    'show': {};\n    'dirty': {};\n    'BeforeOpenNotification': BeforeOpenNotificationEvent;\n    'OpenNotification': OpenNotificationEvent;\n}\ninterface EditorManagerEventMap {\n    'AddEditor': {\n        editor: Editor;\n    };\n    'RemoveEditor': {\n        editor: Editor;\n    };\n    'BeforeUnload': {\n        returnValue: any;\n    };\n}\ntype EventTypes_d_ExecCommandEvent = ExecCommandEvent;\ntype EventTypes_d_BeforeGetContentEvent = BeforeGetContentEvent;\ntype EventTypes_d_GetContentEvent = GetContentEvent;\ntype EventTypes_d_BeforeSetContentEvent = BeforeSetContentEvent;\ntype EventTypes_d_SetContentEvent = SetContentEvent;\ntype EventTypes_d_SaveContentEvent = SaveContentEvent;\ntype EventTypes_d_NewBlockEvent = NewBlockEvent;\ntype EventTypes_d_NodeChangeEvent = NodeChangeEvent;\ntype EventTypes_d_FormatEvent = FormatEvent;\ntype EventTypes_d_ObjectResizeEvent = ObjectResizeEvent;\ntype EventTypes_d_ObjectSelectedEvent = ObjectSelectedEvent;\ntype EventTypes_d_ScrollIntoViewEvent = ScrollIntoViewEvent;\ntype EventTypes_d_SetSelectionRangeEvent = SetSelectionRangeEvent;\ntype EventTypes_d_ShowCaretEvent = ShowCaretEvent;\ntype EventTypes_d_SwitchModeEvent = SwitchModeEvent;\ntype EventTypes_d_ChangeEvent = ChangeEvent;\ntype EventTypes_d_AddUndoEvent = AddUndoEvent;\ntype EventTypes_d_UndoRedoEvent = UndoRedoEvent;\ntype EventTypes_d_WindowEvent<T extends DialogData> = WindowEvent<T>;\ntype EventTypes_d_ProgressStateEvent = ProgressStateEvent;\ntype EventTypes_d_AfterProgressStateEvent = AfterProgressStateEvent;\ntype EventTypes_d_PlaceholderToggleEvent = PlaceholderToggleEvent;\ntype EventTypes_d_LoadErrorEvent = LoadErrorEvent;\ntype EventTypes_d_PreProcessEvent = PreProcessEvent;\ntype EventTypes_d_PostProcessEvent = PostProcessEvent;\ntype EventTypes_d_PastePlainTextToggleEvent = PastePlainTextToggleEvent;\ntype EventTypes_d_PastePreProcessEvent = PastePreProcessEvent;\ntype EventTypes_d_PastePostProcessEvent = PastePostProcessEvent;\ntype EventTypes_d_EditableRootStateChangeEvent = EditableRootStateChangeEvent;\ntype EventTypes_d_NewTableRowEvent = NewTableRowEvent;\ntype EventTypes_d_NewTableCellEvent = NewTableCellEvent;\ntype EventTypes_d_TableEventData = TableEventData;\ntype EventTypes_d_TableModifiedEvent = TableModifiedEvent;\ntype EventTypes_d_BeforeOpenNotificationEvent = BeforeOpenNotificationEvent;\ntype EventTypes_d_OpenNotificationEvent = OpenNotificationEvent;\ntype EventTypes_d_EditorEventMap = EditorEventMap;\ntype EventTypes_d_EditorManagerEventMap = EditorManagerEventMap;\ndeclare namespace EventTypes_d {\n    export { EventTypes_d_ExecCommandEvent as ExecCommandEvent, EventTypes_d_BeforeGetContentEvent as BeforeGetContentEvent, EventTypes_d_GetContentEvent as GetContentEvent, EventTypes_d_BeforeSetContentEvent as BeforeSetContentEvent, EventTypes_d_SetContentEvent as SetContentEvent, EventTypes_d_SaveContentEvent as SaveContentEvent, EventTypes_d_NewBlockEvent as NewBlockEvent, EventTypes_d_NodeChangeEvent as NodeChangeEvent, EventTypes_d_FormatEvent as FormatEvent, EventTypes_d_ObjectResizeEvent as ObjectResizeEvent, EventTypes_d_ObjectSelectedEvent as ObjectSelectedEvent, EventTypes_d_ScrollIntoViewEvent as ScrollIntoViewEvent, EventTypes_d_SetSelectionRangeEvent as SetSelectionRangeEvent, EventTypes_d_ShowCaretEvent as ShowCaretEvent, EventTypes_d_SwitchModeEvent as SwitchModeEvent, EventTypes_d_ChangeEvent as ChangeEvent, EventTypes_d_AddUndoEvent as AddUndoEvent, EventTypes_d_UndoRedoEvent as UndoRedoEvent, EventTypes_d_WindowEvent as WindowEvent, EventTypes_d_ProgressStateEvent as ProgressStateEvent, EventTypes_d_AfterProgressStateEvent as AfterProgressStateEvent, EventTypes_d_PlaceholderToggleEvent as PlaceholderToggleEvent, EventTypes_d_LoadErrorEvent as LoadErrorEvent, EventTypes_d_PreProcessEvent as PreProcessEvent, EventTypes_d_PostProcessEvent as PostProcessEvent, EventTypes_d_PastePlainTextToggleEvent as PastePlainTextToggleEvent, EventTypes_d_PastePreProcessEvent as PastePreProcessEvent, EventTypes_d_PastePostProcessEvent as PastePostProcessEvent, EventTypes_d_EditableRootStateChangeEvent as EditableRootStateChangeEvent, EventTypes_d_NewTableRowEvent as NewTableRowEvent, EventTypes_d_NewTableCellEvent as NewTableCellEvent, EventTypes_d_TableEventData as TableEventData, EventTypes_d_TableModifiedEvent as TableModifiedEvent, EventTypes_d_BeforeOpenNotificationEvent as BeforeOpenNotificationEvent, EventTypes_d_OpenNotificationEvent as OpenNotificationEvent, EventTypes_d_EditorEventMap as EditorEventMap, EventTypes_d_EditorManagerEventMap as EditorManagerEventMap, };\n}\ntype Format_d_Formats = Formats;\ntype Format_d_Format = Format;\ntype Format_d_ApplyFormat = ApplyFormat;\ntype Format_d_BlockFormat = BlockFormat;\ntype Format_d_InlineFormat = InlineFormat;\ntype Format_d_SelectorFormat = SelectorFormat;\ntype Format_d_RemoveFormat = RemoveFormat;\ntype Format_d_RemoveBlockFormat = RemoveBlockFormat;\ntype Format_d_RemoveInlineFormat = RemoveInlineFormat;\ntype Format_d_RemoveSelectorFormat = RemoveSelectorFormat;\ndeclare namespace Format_d {\n    export { Format_d_Formats as Formats, Format_d_Format as Format, Format_d_ApplyFormat as ApplyFormat, Format_d_BlockFormat as BlockFormat, Format_d_InlineFormat as InlineFormat, Format_d_SelectorFormat as SelectorFormat, Format_d_RemoveFormat as RemoveFormat, Format_d_RemoveBlockFormat as RemoveBlockFormat, Format_d_RemoveInlineFormat as RemoveInlineFormat, Format_d_RemoveSelectorFormat as RemoveSelectorFormat, };\n}\ntype StyleFormat = BlockStyleFormat | InlineStyleFormat | SelectorStyleFormat;\ntype AllowedFormat = Separator | FormatReference | StyleFormat | NestedFormatting;\ninterface Separator {\n    title: string;\n}\ninterface FormatReference {\n    title: string;\n    format: string;\n    icon?: string;\n}\ninterface NestedFormatting {\n    title: string;\n    items: Array<FormatReference | StyleFormat>;\n}\ninterface CommonStyleFormat {\n    name?: string;\n    title: string;\n    icon?: string;\n}\ninterface BlockStyleFormat extends BlockFormat, CommonStyleFormat {\n}\ninterface InlineStyleFormat extends InlineFormat, CommonStyleFormat {\n}\ninterface SelectorStyleFormat extends SelectorFormat, CommonStyleFormat {\n}\ntype EntityEncoding = 'named' | 'numeric' | 'raw' | 'named,numeric' | 'named+numeric' | 'numeric,named' | 'numeric+named';\ninterface ContentLanguage {\n    readonly title: string;\n    readonly code: string;\n    readonly customCode?: string;\n}\ntype ThemeInitFunc = (editor: Editor, elm: HTMLElement) => {\n    editorContainer: HTMLElement;\n    iframeContainer: HTMLElement;\n    height?: number;\n    iframeHeight?: number;\n    api?: EditorUiApi;\n};\ntype SetupCallback = (editor: Editor) => void;\ntype FilePickerCallback = (callback: (value: string, meta?: Record<string, any>) => void, value: string, meta: Record<string, any>) => void;\ntype FilePickerValidationStatus = 'valid' | 'unknown' | 'invalid' | 'none';\ntype FilePickerValidationCallback = (info: {\n    type: string;\n    url: string;\n}, callback: (validation: {\n    status: FilePickerValidationStatus;\n    message: string;\n}) => void) => void;\ntype PastePreProcessFn = (editor: Editor, args: PastePreProcessEvent) => void;\ntype PastePostProcessFn = (editor: Editor, args: PastePostProcessEvent) => void;\ntype URLConverter = (url: string, name: string, elm?: string | Element) => string;\ntype URLConverterCallback = (url: string, node: Node | string | undefined, on_save: boolean, name: string) => string;\ninterface ToolbarGroup {\n    name?: string;\n    items: string[];\n}\ntype ToolbarMode = 'floating' | 'sliding' | 'scrolling' | 'wrap';\ntype ToolbarLocation = 'top' | 'bottom' | 'auto';\ntype ForceHexColor = 'always' | 'rgb_only' | 'off';\ninterface BaseEditorOptions {\n    a11y_advanced_options?: boolean;\n    add_form_submit_trigger?: boolean;\n    add_unload_trigger?: boolean;\n    allow_conditional_comments?: boolean;\n    allow_html_data_urls?: boolean;\n    allow_html_in_named_anchor?: boolean;\n    allow_script_urls?: boolean;\n    allow_svg_data_urls?: boolean;\n    allow_unsafe_link_target?: boolean;\n    anchor_bottom?: false | string;\n    anchor_top?: false | string;\n    auto_focus?: string | true;\n    automatic_uploads?: boolean;\n    base_url?: string;\n    block_formats?: string;\n    block_unsupported_drop?: boolean;\n    body_id?: string;\n    body_class?: string;\n    br_in_pre?: boolean;\n    br_newline_selector?: string;\n    browser_spellcheck?: boolean;\n    branding?: boolean;\n    cache_suffix?: string;\n    color_cols?: number;\n    color_cols_foreground?: number;\n    color_cols_background?: number;\n    color_map?: string[];\n    color_map_foreground?: string[];\n    color_map_background?: string[];\n    color_default_foreground?: string;\n    color_default_background?: string;\n    content_css?: boolean | string | string[];\n    content_css_cors?: boolean;\n    content_security_policy?: string;\n    content_style?: string;\n    content_langs?: ContentLanguage[];\n    contextmenu?: string | string[] | false;\n    contextmenu_never_use_native?: boolean;\n    convert_fonts_to_spans?: boolean;\n    convert_unsafe_embeds?: boolean;\n    convert_urls?: boolean;\n    custom_colors?: boolean;\n    custom_elements?: string;\n    custom_ui_selector?: string;\n    custom_undo_redo_levels?: number;\n    default_font_stack?: string[];\n    deprecation_warnings?: boolean;\n    directionality?: 'ltr' | 'rtl';\n    doctype?: string;\n    document_base_url?: string;\n    draggable_modal?: boolean;\n    editable_class?: string;\n    editable_root?: boolean;\n    element_format?: 'xhtml' | 'html';\n    elementpath?: boolean;\n    encoding?: string;\n    end_container_on_empty_block?: boolean | string;\n    entities?: string;\n    entity_encoding?: EntityEncoding;\n    extended_valid_elements?: string;\n    event_root?: string;\n    file_picker_callback?: FilePickerCallback;\n    file_picker_types?: string;\n    file_picker_validator_handler?: FilePickerValidationCallback;\n    fix_list_elements?: boolean;\n    fixed_toolbar_container?: string;\n    fixed_toolbar_container_target?: HTMLElement;\n    font_css?: string | string[];\n    font_family_formats?: string;\n    font_size_classes?: string;\n    font_size_legacy_values?: string;\n    font_size_style_values?: string;\n    font_size_formats?: string;\n    font_size_input_default_unit?: string;\n    force_hex_color?: ForceHexColor;\n    forced_root_block?: string;\n    forced_root_block_attrs?: Record<string, string>;\n    formats?: Formats;\n    format_noneditable_selector?: string;\n    height?: number | string;\n    help_accessibility?: boolean;\n    hidden_input?: boolean;\n    highlight_on_focus?: boolean;\n    icons?: string;\n    icons_url?: string;\n    id?: string;\n    iframe_aria_text?: string;\n    iframe_attrs?: Record<string, string>;\n    images_file_types?: string;\n    images_replace_blob_uris?: boolean;\n    images_reuse_filename?: boolean;\n    images_upload_base_path?: string;\n    images_upload_credentials?: boolean;\n    images_upload_handler?: UploadHandler;\n    images_upload_url?: string;\n    indent?: boolean;\n    indent_after?: string;\n    indent_before?: string;\n    indent_use_margin?: boolean;\n    indentation?: string;\n    init_instance_callback?: SetupCallback;\n    inline?: boolean;\n    inline_boundaries?: boolean;\n    inline_boundaries_selector?: string;\n    inline_styles?: boolean;\n    invalid_elements?: string;\n    invalid_styles?: string | Record<string, string>;\n    keep_styles?: boolean;\n    language?: string;\n    language_load?: boolean;\n    language_url?: string;\n    line_height_formats?: string;\n    max_height?: number;\n    max_width?: number;\n    menu?: Record<string, {\n        title: string;\n        items: string;\n    }>;\n    menubar?: boolean | string;\n    min_height?: number;\n    min_width?: number;\n    model?: string;\n    model_url?: string;\n    newdocument_content?: string;\n    newline_behavior?: 'block' | 'linebreak' | 'invert' | 'default';\n    no_newline_selector?: string;\n    noneditable_class?: string;\n    noneditable_regexp?: RegExp | RegExp[];\n    nowrap?: boolean;\n    object_resizing?: boolean | string;\n    pad_empty_with_br?: boolean;\n    paste_as_text?: boolean;\n    paste_block_drop?: boolean;\n    paste_data_images?: boolean;\n    paste_merge_formats?: boolean;\n    paste_postprocess?: PastePostProcessFn;\n    paste_preprocess?: PastePreProcessFn;\n    paste_remove_styles_if_webkit?: boolean;\n    paste_tab_spaces?: number;\n    paste_webkit_styles?: string;\n    placeholder?: string;\n    preserve_cdata?: boolean;\n    preview_styles?: false | string;\n    promotion?: boolean;\n    protect?: RegExp[];\n    readonly?: boolean;\n    referrer_policy?: ReferrerPolicy;\n    relative_urls?: boolean;\n    remove_script_host?: boolean;\n    remove_trailing_brs?: boolean;\n    removed_menuitems?: string;\n    resize?: boolean | 'both';\n    resize_img_proportional?: boolean;\n    root_name?: string;\n    sandbox_iframes?: boolean;\n    schema?: SchemaType;\n    selector?: string;\n    setup?: SetupCallback;\n    sidebar_show?: string;\n    skin?: boolean | string;\n    skin_url?: string;\n    smart_paste?: boolean;\n    statusbar?: boolean;\n    style_formats?: AllowedFormat[];\n    style_formats_autohide?: boolean;\n    style_formats_merge?: boolean;\n    submit_patch?: boolean;\n    suffix?: string;\n    table_tab_navigation?: boolean;\n    target?: HTMLElement;\n    text_patterns?: RawPattern[] | false;\n    text_patterns_lookup?: RawDynamicPatternsLookup;\n    theme?: string | ThemeInitFunc | false;\n    theme_url?: string;\n    toolbar?: boolean | string | string[] | Array<ToolbarGroup>;\n    toolbar1?: string;\n    toolbar2?: string;\n    toolbar3?: string;\n    toolbar4?: string;\n    toolbar5?: string;\n    toolbar6?: string;\n    toolbar7?: string;\n    toolbar8?: string;\n    toolbar9?: string;\n    toolbar_groups?: Record<string, GroupToolbarButtonSpec>;\n    toolbar_location?: ToolbarLocation;\n    toolbar_mode?: ToolbarMode;\n    toolbar_sticky?: boolean;\n    toolbar_sticky_offset?: number;\n    typeahead_urls?: boolean;\n    ui_mode?: 'combined' | 'split';\n    url_converter?: URLConverter;\n    url_converter_scope?: any;\n    urlconverter_callback?: URLConverterCallback;\n    valid_children?: string;\n    valid_classes?: string | Record<string, string>;\n    valid_elements?: string;\n    valid_styles?: string | Record<string, string>;\n    verify_html?: boolean;\n    visual?: boolean;\n    visual_anchor_class?: string;\n    visual_table_class?: string;\n    width?: number | string;\n    xss_sanitization?: boolean;\n    disable_nodechange?: boolean;\n    forced_plugins?: string | string[];\n    plugin_base_urls?: Record<string, string>;\n    service_message?: string;\n    [key: string]: any;\n}\ninterface RawEditorOptions extends BaseEditorOptions {\n    external_plugins?: Record<string, string>;\n    mobile?: RawEditorOptions;\n    plugins?: string | string[];\n}\ninterface NormalizedEditorOptions extends BaseEditorOptions {\n    external_plugins: Record<string, string>;\n    forced_plugins: string[];\n    plugins: string[];\n}\ninterface EditorOptions extends NormalizedEditorOptions {\n    a11y_advanced_options: boolean;\n    allow_unsafe_link_target: boolean;\n    anchor_bottom: string;\n    anchor_top: string;\n    automatic_uploads: boolean;\n    block_formats: string;\n    body_class: string;\n    body_id: string;\n    br_newline_selector: string;\n    color_map: string[];\n    color_cols: number;\n    color_cols_foreground: number;\n    color_cols_background: number;\n    color_default_background: string;\n    color_default_foreground: string;\n    content_css: string[];\n    contextmenu: string[];\n    convert_unsafe_embeds: boolean;\n    custom_colors: boolean;\n    default_font_stack: string[];\n    document_base_url: string;\n    init_content_sync: boolean;\n    draggable_modal: boolean;\n    editable_class: string;\n    editable_root: boolean;\n    font_css: string[];\n    font_family_formats: string;\n    font_size_classes: string;\n    font_size_formats: string;\n    font_size_input_default_unit: string;\n    font_size_legacy_values: string;\n    font_size_style_values: string;\n    forced_root_block: string;\n    forced_root_block_attrs: Record<string, string>;\n    force_hex_color: ForceHexColor;\n    format_noneditable_selector: string;\n    height: number | string;\n    highlight_on_focus: boolean;\n    iframe_attrs: Record<string, string>;\n    images_file_types: string;\n    images_upload_base_path: string;\n    images_upload_credentials: boolean;\n    images_upload_url: string;\n    indent_use_margin: boolean;\n    indentation: string;\n    inline: boolean;\n    inline_boundaries_selector: string;\n    language: string;\n    language_load: boolean;\n    language_url: string;\n    line_height_formats: string;\n    menu: Record<string, {\n        title: string;\n        items: string;\n    }>;\n    menubar: boolean | string;\n    model: string;\n    newdocument_content: string;\n    no_newline_selector: string;\n    noneditable_class: string;\n    noneditable_regexp: RegExp[];\n    object_resizing: string;\n    pad_empty_with_br: boolean;\n    paste_as_text: boolean;\n    preview_styles: string;\n    promotion: boolean;\n    readonly: boolean;\n    removed_menuitems: string;\n    sandbox_iframes: boolean;\n    toolbar: boolean | string | string[] | Array<ToolbarGroup>;\n    toolbar_groups: Record<string, GroupToolbarButtonSpec>;\n    toolbar_location: ToolbarLocation;\n    toolbar_mode: ToolbarMode;\n    toolbar_persist: boolean;\n    toolbar_sticky: boolean;\n    toolbar_sticky_offset: number;\n    text_patterns: Pattern[];\n    text_patterns_lookup: DynamicPatternsLookup;\n    visual: boolean;\n    visual_anchor_class: string;\n    visual_table_class: string;\n    width: number | string;\n    xss_sanitization: boolean;\n}\ntype StyleMap = Record<string, string | number>;\ninterface StylesSettings {\n    allow_script_urls?: boolean;\n    allow_svg_data_urls?: boolean;\n    url_converter?: URLConverter;\n    url_converter_scope?: any;\n    force_hex_color?: ForceHexColor;\n}\ninterface Styles {\n    parse: (css: string | undefined) => Record<string, string>;\n    serialize: (styles: StyleMap, elementName?: string) => string;\n}\ntype EventUtilsCallback<T> = (event: EventUtilsEvent<T>) => void | boolean;\ntype EventUtilsEvent<T> = NormalizedEvent<T> & {\n    metaKey: boolean;\n};\ninterface Callback$1<T> {\n    func: EventUtilsCallback<T>;\n    scope: any;\n}\ninterface CallbackList<T> extends Array<Callback$1<T>> {\n    fakeName: string | false;\n    capture: boolean;\n    nativeHandler: EventListener;\n}\ninterface EventUtilsConstructor {\n    readonly prototype: EventUtils;\n    new (): EventUtils;\n    Event: EventUtils;\n}\ndeclare class EventUtils {\n    static Event: EventUtils;\n    domLoaded: boolean;\n    events: Record<number, Record<string, CallbackList<any>>>;\n    private readonly expando;\n    private hasFocusIn;\n    private count;\n    constructor();\n    bind<K extends keyof HTMLElementEventMap>(target: any, name: K, callback: EventUtilsCallback<HTMLElementEventMap[K]>, scope?: any): EventUtilsCallback<HTMLElementEventMap[K]>;\n    bind<T = any>(target: any, names: string, callback: EventUtilsCallback<T>, scope?: any): EventUtilsCallback<T>;\n    unbind<K extends keyof HTMLElementEventMap>(target: any, name: K, callback?: EventUtilsCallback<HTMLElementEventMap[K]>): this;\n    unbind<T = any>(target: any, names: string, callback?: EventUtilsCallback<T>): this;\n    unbind(target: any): this;\n    fire(target: any, name: string, args?: {}): this;\n    dispatch(target: any, name: string, args?: {}): this;\n    clean(target: any): this;\n    destroy(): void;\n    cancel<T>(e: EventUtilsEvent<T>): boolean;\n    private executeHandlers;\n}\ninterface SetAttribEvent {\n    attrElm: HTMLElement;\n    attrName: string;\n    attrValue: string | boolean | number | null;\n}\ninterface DOMUtilsSettings {\n    schema: Schema;\n    url_converter: URLConverter;\n    url_converter_scope: any;\n    ownEvents: boolean;\n    keep_values: boolean;\n    update_styles: boolean;\n    root_element: HTMLElement | null;\n    collect: boolean;\n    onSetAttrib: (event: SetAttribEvent) => void;\n    contentCssCors: boolean;\n    referrerPolicy: ReferrerPolicy;\n    force_hex_color: ForceHexColor;\n}\ntype Target = Node | Window;\ntype RunArguments<T extends Node = Node> = string | T | Array<string | T> | null;\ntype BoundEvent = [\n    Target,\n    string,\n    EventUtilsCallback<any>,\n    any\n];\ntype Callback<K extends string> = EventUtilsCallback<MappedEvent<HTMLElementEventMap, K>>;\ntype RunResult<T, R> = T extends Array<any> ? R[] : false | R;\ninterface DOMUtils {\n    doc: Document;\n    settings: Partial<DOMUtilsSettings>;\n    win: Window;\n    files: Record<string, boolean>;\n    stdMode: boolean;\n    boxModel: boolean;\n    styleSheetLoader: StyleSheetLoader;\n    boundEvents: BoundEvent[];\n    styles: Styles;\n    schema: Schema;\n    events: EventUtils;\n    root: Node | null;\n    isBlock: {\n        (node: Node | null): node is HTMLElement;\n        (node: string): boolean;\n    };\n    clone: (node: Node, deep: boolean) => Node;\n    getRoot: () => HTMLElement;\n    getViewPort: (argWin?: Window) => GeomRect;\n    getRect: (elm: string | HTMLElement) => GeomRect;\n    getSize: (elm: string | HTMLElement) => {\n        w: number;\n        h: number;\n    };\n    getParent: {\n        <K extends keyof HTMLElementTagNameMap>(node: string | Node | null, selector: K, root?: Node): HTMLElementTagNameMap[K] | null;\n        <T extends Element>(node: string | Node | null, selector: string | ((node: Node) => node is T), root?: Node): T | null;\n        (node: string | Node | null, selector?: string | ((node: Node) => boolean | void), root?: Node): Node | null;\n    };\n    getParents: {\n        <K extends keyof HTMLElementTagNameMap>(elm: string | HTMLElementTagNameMap[K] | null, selector: K, root?: Node, collect?: boolean): Array<HTMLElementTagNameMap[K]>;\n        <T extends Element>(node: string | Node | null, selector: string | ((node: Node) => node is T), root?: Node, collect?: boolean): T[];\n        (elm: string | Node | null, selector?: string | ((node: Node) => boolean | void), root?: Node, collect?: boolean): Node[];\n    };\n    get: {\n        <T extends Node>(elm: T): T;\n        (elm: string): HTMLElement | null;\n    };\n    getNext: (node: Node | null, selector: string | ((node: Node) => boolean)) => Node | null;\n    getPrev: (node: Node | null, selector: string | ((node: Node) => boolean)) => Node | null;\n    select: {\n        <K extends keyof HTMLElementTagNameMap>(selector: K, scope?: string | Node): Array<HTMLElementTagNameMap[K]>;\n        <T extends HTMLElement = HTMLElement>(selector: string, scope?: string | Node): T[];\n    };\n    is: {\n        <T extends Element>(elm: Node | Node[] | null, selector: string): elm is T;\n        (elm: Node | Node[] | null, selector: string): boolean;\n    };\n    add: (parentElm: RunArguments, name: string | Element, attrs?: Record<string, string | boolean | number | null>, html?: string | Node | null, create?: boolean) => HTMLElement;\n    create: {\n        <K extends keyof HTMLElementTagNameMap>(name: K, attrs?: Record<string, string | boolean | number | null>, html?: string | Node | null): HTMLElementTagNameMap[K];\n        (name: string, attrs?: Record<string, string | boolean | number | null>, html?: string | Node | null): HTMLElement;\n    };\n    createHTML: (name: string, attrs?: Record<string, string | null>, html?: string) => string;\n    createFragment: (html?: string) => DocumentFragment;\n    remove: {\n        <T extends Node>(node: T | T[], keepChildren?: boolean): typeof node extends Array<any> ? T[] : T;\n        <T extends Node>(node: string, keepChildren?: boolean): T | false;\n    };\n    getStyle: {\n        (elm: Element, name: string, computed: true): string;\n        (elm: string | Element | null, name: string, computed?: boolean): string | undefined;\n    };\n    setStyle: (elm: string | Element | Element[], name: string, value: string | number | null) => void;\n    setStyles: (elm: string | Element | Element[], stylesArg: StyleMap) => void;\n    removeAllAttribs: (e: RunArguments<Element>) => void;\n    setAttrib: (elm: RunArguments<Element>, name: string, value: string | boolean | number | null) => void;\n    setAttribs: (elm: RunArguments<Element>, attrs: Record<string, string | boolean | number | null>) => void;\n    getAttrib: (elm: string | Element | null, name: string, defaultVal?: string) => string;\n    getAttribs: (elm: string | Element) => NamedNodeMap | Attr[];\n    getPos: (elm: string | Element, rootElm?: Node) => {\n        x: number;\n        y: number;\n    };\n    parseStyle: (cssText: string) => Record<string, string>;\n    serializeStyle: (stylesArg: StyleMap, name?: string) => string;\n    addStyle: (cssText: string) => void;\n    loadCSS: (url: string) => void;\n    hasClass: (elm: string | Element, cls: string) => boolean;\n    addClass: (elm: RunArguments<Element>, cls: string) => void;\n    removeClass: (elm: RunArguments<Element>, cls: string) => void;\n    toggleClass: (elm: RunArguments<Element>, cls: string, state?: boolean) => void;\n    show: (elm: string | Node | Node[]) => void;\n    hide: (elm: string | Node | Node[]) => void;\n    isHidden: (elm: string | Node) => boolean;\n    uniqueId: (prefix?: string) => string;\n    setHTML: (elm: RunArguments<Element>, html: string) => void;\n    getOuterHTML: (elm: string | Node) => string;\n    setOuterHTML: (elm: string | Node | Node[], html: string) => void;\n    decode: (text: string) => string;\n    encode: (text: string) => string;\n    insertAfter: {\n        <T extends Node>(node: T | T[], reference: string | Node): T;\n        <T extends Node>(node: RunArguments<T>, reference: string | Node): RunResult<typeof node, T>;\n    };\n    replace: {\n        <T extends Node>(newElm: Node, oldElm: T | T[], keepChildren?: boolean): T;\n        <T extends Node>(newElm: Node, oldElm: RunArguments<T>, keepChildren?: boolean): false | T;\n    };\n    rename: {\n        <K extends keyof HTMLElementTagNameMap>(elm: Element, name: K): HTMLElementTagNameMap[K];\n        (elm: Element, name: string): Element;\n    };\n    findCommonAncestor: (a: Node, b: Node) => Node | null;\n    run<R, T extends Node>(this: DOMUtils, elm: T | T[], func: (node: T) => R, scope?: any): typeof elm extends Array<any> ? R[] : R;\n    run<R, T extends Node>(this: DOMUtils, elm: RunArguments<T>, func: (node: T) => R, scope?: any): RunResult<typeof elm, R>;\n    isEmpty: (node: Node, elements?: Record<string, any>, options?: ({\n        includeZwsp?: boolean;\n    })) => boolean;\n    createRng: () => Range;\n    nodeIndex: (node: Node, normalized?: boolean) => number;\n    split: {\n        <T extends Node>(parentElm: Node, splitElm: Node, replacementElm: T): T | undefined;\n        <T extends Node>(parentElm: Node, splitElm: T): T | undefined;\n    };\n    bind: {\n        <K extends string>(target: Target, name: K, func: Callback<K>, scope?: any): Callback<K>;\n        <K extends string>(target: Target[], name: K, func: Callback<K>, scope?: any): Callback<K>[];\n    };\n    unbind: {\n        <K extends string>(target: Target, name?: K, func?: EventUtilsCallback<MappedEvent<HTMLElementEventMap, K>>): EventUtils;\n        <K extends string>(target: Target[], name?: K, func?: EventUtilsCallback<MappedEvent<HTMLElementEventMap, K>>): EventUtils[];\n    };\n    fire: (target: Node | Window, name: string, evt?: {}) => EventUtils;\n    dispatch: (target: Node | Window, name: string, evt?: {}) => EventUtils;\n    getContentEditable: (node: Node) => string | null;\n    getContentEditableParent: (node: Node) => string | null;\n    isEditable: (node: Node | null | undefined) => boolean;\n    destroy: () => void;\n    isChildOf: (node: Node, parent: Node) => boolean;\n    dumpRng: (r: Range) => string;\n}\ninterface ClientRect {\n    left: number;\n    top: number;\n    bottom: number;\n    right: number;\n    width: number;\n    height: number;\n}\ninterface BookmarkManager {\n    getBookmark: (type?: number, normalized?: boolean) => Bookmark;\n    moveToBookmark: (bookmark: Bookmark) => void;\n}\ninterface ControlSelection {\n    isResizable: (elm: Element) => boolean;\n    showResizeRect: (elm: HTMLElement) => void;\n    hideResizeRect: () => void;\n    updateResizeRect: (evt: EditorEvent<any>) => void;\n    destroy: () => void;\n}\ninterface WriterSettings {\n    element_format?: 'xhtml' | 'html';\n    entities?: string;\n    entity_encoding?: EntityEncoding;\n    indent?: boolean;\n    indent_after?: string;\n    indent_before?: string;\n}\ntype Attributes = Array<{\n    name: string;\n    value: string;\n}>;\ninterface Writer {\n    cdata: (text: string) => void;\n    comment: (text: string) => void;\n    doctype: (text: string) => void;\n    end: (name: string) => void;\n    getContent: () => string;\n    pi: (name: string, text?: string) => void;\n    reset: () => void;\n    start: (name: string, attrs?: Attributes | null, empty?: boolean) => void;\n    text: (text: string, raw?: boolean) => void;\n}\ninterface HtmlSerializerSettings extends WriterSettings {\n    inner?: boolean;\n    validate?: boolean;\n}\ninterface HtmlSerializer {\n    serialize: (node: AstNode) => string;\n}\ninterface DomSerializerSettings extends DomParserSettings, WriterSettings, SchemaSettings, HtmlSerializerSettings {\n    remove_trailing_brs?: boolean;\n    url_converter?: URLConverter;\n    url_converter_scope?: {};\n}\ninterface DomSerializerImpl {\n    schema: Schema;\n    addNodeFilter: (name: string, callback: ParserFilterCallback) => void;\n    addAttributeFilter: (name: string, callback: ParserFilterCallback) => void;\n    getNodeFilters: () => ParserFilter[];\n    getAttributeFilters: () => ParserFilter[];\n    removeNodeFilter: (name: string, callback?: ParserFilterCallback) => void;\n    removeAttributeFilter: (name: string, callback?: ParserFilterCallback) => void;\n    serialize: {\n        (node: Element, parserArgs: {\n            format: 'tree';\n        } & ParserArgs): AstNode;\n        (node: Element, parserArgs?: ParserArgs): string;\n    };\n    addRules: (rules: string) => void;\n    setRules: (rules: string) => void;\n    addTempAttr: (name: string) => void;\n    getTempAttrs: () => string[];\n}\ninterface DomSerializer extends DomSerializerImpl {\n}\ninterface EditorSelection {\n    bookmarkManager: BookmarkManager;\n    controlSelection: ControlSelection;\n    dom: DOMUtils;\n    win: Window;\n    serializer: DomSerializer;\n    editor: Editor;\n    collapse: (toStart?: boolean) => void;\n    setCursorLocation: {\n        (node: Node, offset: number): void;\n        (): void;\n    };\n    getContent: {\n        (args: {\n            format: 'tree';\n        } & Partial<GetSelectionContentArgs>): AstNode;\n        (args?: Partial<GetSelectionContentArgs>): string;\n    };\n    setContent: (content: string, args?: Partial<SetSelectionContentArgs>) => void;\n    getBookmark: (type?: number, normalized?: boolean) => Bookmark;\n    moveToBookmark: (bookmark: Bookmark) => void;\n    select: (node: Node, content?: boolean) => Node;\n    isCollapsed: () => boolean;\n    isEditable: () => boolean;\n    isForward: () => boolean;\n    setNode: (elm: Element) => Element;\n    getNode: () => HTMLElement;\n    getSel: () => Selection | null;\n    setRng: (rng: Range, forward?: boolean) => void;\n    getRng: () => Range;\n    getStart: (real?: boolean) => Element;\n    getEnd: (real?: boolean) => Element;\n    getSelectedBlocks: (startElm?: Element, endElm?: Element) => Element[];\n    normalize: () => Range;\n    selectorChanged: (selector: string, callback: (active: boolean, args: {\n        node: Node;\n        selector: String;\n        parents: Node[];\n    }) => void) => EditorSelection;\n    selectorChangedWithUnbind: (selector: string, callback: (active: boolean, args: {\n        node: Node;\n        selector: String;\n        parents: Node[];\n    }) => void) => {\n        unbind: () => void;\n    };\n    getScrollContainer: () => HTMLElement | undefined;\n    scrollIntoView: (elm?: HTMLElement, alignToTop?: boolean) => void;\n    placeCaretAt: (clientX: number, clientY: number) => void;\n    getBoundingClientRect: () => ClientRect | DOMRect;\n    destroy: () => void;\n    expand: (options?: {\n        type: 'word';\n    }) => void;\n}\ntype EditorCommandCallback<S> = (this: S, ui: boolean, value: any) => void;\ntype EditorCommandsCallback = (command: string, ui: boolean, value?: any) => void;\ninterface Commands {\n    state: Record<string, (command: string) => boolean>;\n    exec: Record<string, EditorCommandsCallback>;\n    value: Record<string, (command: string) => string>;\n}\ninterface ExecCommandArgs {\n    skip_focus?: boolean;\n}\ninterface EditorCommandsConstructor {\n    readonly prototype: EditorCommands;\n    new (editor: Editor): EditorCommands;\n}\ndeclare class EditorCommands {\n    private readonly editor;\n    private commands;\n    constructor(editor: Editor);\n    execCommand(command: string, ui?: boolean, value?: any, args?: ExecCommandArgs): boolean;\n    queryCommandState(command: string): boolean;\n    queryCommandValue(command: string): string;\n    addCommands<K extends keyof Commands>(commandList: Commands[K], type: K): void;\n    addCommands(commandList: Record<string, EditorCommandsCallback>): void;\n    addCommand<S>(command: string, callback: EditorCommandCallback<S>, scope: S): void;\n    addCommand(command: string, callback: EditorCommandCallback<Editor>): void;\n    queryCommandSupported(command: string): boolean;\n    addQueryStateHandler<S>(command: string, callback: (this: S) => boolean, scope: S): void;\n    addQueryStateHandler(command: string, callback: (this: Editor) => boolean): void;\n    addQueryValueHandler<S>(command: string, callback: (this: S) => string, scope: S): void;\n    addQueryValueHandler(command: string, callback: (this: Editor) => string): void;\n}\ninterface RawString {\n    raw: string;\n}\ntype Primitive = string | number | boolean | Record<string | number, any> | Function;\ntype TokenisedString = [\n    string,\n    ...Primitive[]\n];\ntype Untranslated = Primitive | TokenisedString | RawString | null | undefined;\ntype TranslatedString = string;\ninterface I18n {\n    getData: () => Record<string, Record<string, string>>;\n    setCode: (newCode: string) => void;\n    getCode: () => string;\n    add: (code: string, items: Record<string, string>) => void;\n    translate: (text: Untranslated) => TranslatedString;\n    isRtl: () => boolean;\n    hasCode: (code: string) => boolean;\n}\ninterface Observable<T extends {}> {\n    fire<K extends string, U extends MappedEvent<T, K>>(name: K, args?: U, bubble?: boolean): EditorEvent<U>;\n    dispatch<K extends string, U extends MappedEvent<T, K>>(name: K, args?: U, bubble?: boolean): EditorEvent<U>;\n    on<K extends string>(name: K, callback: (event: EditorEvent<MappedEvent<T, K>>) => void, prepend?: boolean): EventDispatcher<T>;\n    off<K extends string>(name?: K, callback?: (event: EditorEvent<MappedEvent<T, K>>) => void): EventDispatcher<T>;\n    once<K extends string>(name: K, callback: (event: EditorEvent<MappedEvent<T, K>>) => void): EventDispatcher<T>;\n    hasEventListeners(name: string): boolean;\n}\ninterface URISettings {\n    base_uri?: URI;\n}\ninterface URIConstructor {\n    readonly prototype: URI;\n    new (url: string, settings?: URISettings): URI;\n    getDocumentBaseUrl: (loc: {\n        protocol: string;\n        host?: string;\n        href?: string;\n        pathname?: string;\n    }) => string;\n    parseDataUri: (uri: string) => {\n        type: string;\n        data: string;\n    };\n}\ninterface SafeUriOptions {\n    readonly allow_html_data_urls?: boolean;\n    readonly allow_script_urls?: boolean;\n    readonly allow_svg_data_urls?: boolean;\n}\ndeclare class URI {\n    static parseDataUri(uri: string): {\n        type: string | undefined;\n        data: string;\n    };\n    static isDomSafe(uri: string, context?: string, options?: SafeUriOptions): boolean;\n    static getDocumentBaseUrl(loc: {\n        protocol: string;\n        host?: string;\n        href?: string;\n        pathname?: string;\n    }): string;\n    source: string;\n    protocol: string | undefined;\n    authority: string | undefined;\n    userInfo: string | undefined;\n    user: string | undefined;\n    password: string | undefined;\n    host: string | undefined;\n    port: string | undefined;\n    relative: string | undefined;\n    path: string;\n    directory: string;\n    file: string | undefined;\n    query: string | undefined;\n    anchor: string | undefined;\n    settings: URISettings;\n    constructor(url: string, settings?: URISettings);\n    setPath(path: string): void;\n    toRelative(uri: string): string;\n    toAbsolute(uri: string, noHost?: boolean): string;\n    isSameOrigin(uri: URI): boolean;\n    toRelPath(base: string, path: string): string;\n    toAbsPath(base: string, path: string): string;\n    getURI(noProtoHost?: boolean): string;\n}\ninterface EditorManager extends Observable<EditorManagerEventMap> {\n    defaultOptions: RawEditorOptions;\n    majorVersion: string;\n    minorVersion: string;\n    releaseDate: string;\n    activeEditor: Editor | null;\n    focusedEditor: Editor | null;\n    baseURI: URI;\n    baseURL: string;\n    documentBaseURL: string;\n    i18n: I18n;\n    suffix: string;\n    add(this: EditorManager, editor: Editor): Editor;\n    addI18n: (code: string, item: Record<string, string>) => void;\n    createEditor(this: EditorManager, id: string, options: RawEditorOptions): Editor;\n    execCommand(this: EditorManager, cmd: string, ui: boolean, value: any): boolean;\n    get(this: EditorManager): Editor[];\n    get(this: EditorManager, id: number | string): Editor | null;\n    init(this: EditorManager, options: RawEditorOptions): Promise<Editor[]>;\n    overrideDefaults(this: EditorManager, defaultOptions: Partial<RawEditorOptions>): void;\n    remove(this: EditorManager): void;\n    remove(this: EditorManager, selector: string): void;\n    remove(this: EditorManager, editor: Editor): Editor | null;\n    setActive(this: EditorManager, editor: Editor): void;\n    setup(this: EditorManager): void;\n    translate: (text: Untranslated) => TranslatedString;\n    triggerSave: () => void;\n    _setBaseUrl(this: EditorManager, baseUrl: string): void;\n}\ninterface EditorObservable extends Observable<EditorEventMap> {\n    bindPendingEventDelegates(this: Editor): void;\n    toggleNativeEvent(this: Editor, name: string, state: boolean): void;\n    unbindAllNativeEvents(this: Editor): void;\n}\ninterface ProcessorSuccess<T> {\n    valid: true;\n    value: T;\n}\ninterface ProcessorError {\n    valid: false;\n    message: string;\n}\ntype SimpleProcessor = (value: unknown) => boolean;\ntype Processor<T> = (value: unknown) => ProcessorSuccess<T> | ProcessorError;\ninterface BuiltInOptionTypeMap {\n    'string': string;\n    'number': number;\n    'boolean': boolean;\n    'array': any[];\n    'function': Function;\n    'object': any;\n    'string[]': string[];\n    'object[]': any[];\n    'regexp': RegExp;\n}\ntype BuiltInOptionType = keyof BuiltInOptionTypeMap;\ninterface BaseOptionSpec {\n    immutable?: boolean;\n    deprecated?: boolean;\n    docsUrl?: string;\n}\ninterface BuiltInOptionSpec<K extends BuiltInOptionType> extends BaseOptionSpec {\n    processor: K;\n    default?: BuiltInOptionTypeMap[K];\n}\ninterface SimpleOptionSpec<T> extends BaseOptionSpec {\n    processor: SimpleProcessor;\n    default?: T;\n}\ninterface OptionSpec<T, U> extends BaseOptionSpec {\n    processor: Processor<U>;\n    default?: T;\n}\ninterface Options {\n    register: {\n        <K extends BuiltInOptionType>(name: string, spec: BuiltInOptionSpec<K>): void;\n        <K extends keyof NormalizedEditorOptions>(name: K, spec: OptionSpec<NormalizedEditorOptions[K], EditorOptions[K]> | SimpleOptionSpec<NormalizedEditorOptions[K]>): void;\n        <T, U>(name: string, spec: OptionSpec<T, U>): void;\n        <T>(name: string, spec: SimpleOptionSpec<T>): void;\n    };\n    isRegistered: (name: string) => boolean;\n    get: {\n        <K extends keyof EditorOptions>(name: K): EditorOptions[K];\n        <T>(name: string): T | undefined;\n    };\n    set: <K extends string, T>(name: K, value: K extends keyof NormalizedEditorOptions ? NormalizedEditorOptions[K] : T) => boolean;\n    unset: (name: string) => boolean;\n    isSet: (name: string) => boolean;\n}\ninterface UploadResult$1 {\n    element: HTMLImageElement;\n    status: boolean;\n    blobInfo: BlobInfo;\n    uploadUri: string;\n    removed: boolean;\n}\ninterface EditorUpload {\n    blobCache: BlobCache;\n    addFilter: (filter: (img: HTMLImageElement) => boolean) => void;\n    uploadImages: () => Promise<UploadResult$1[]>;\n    uploadImagesAuto: () => Promise<UploadResult$1[]>;\n    scanForImages: () => Promise<BlobInfoImagePair[]>;\n    destroy: () => void;\n}\ntype FormatChangeCallback = (state: boolean, data: {\n    node: Node;\n    format: string;\n    parents: Element[];\n}) => void;\ninterface FormatRegistry {\n    get: {\n        (name: string): Format[] | undefined;\n        (): Record<string, Format[]>;\n    };\n    has: (name: string) => boolean;\n    register: (name: string | Formats, format?: Format[] | Format) => void;\n    unregister: (name: string) => Formats;\n}\ninterface Formatter extends FormatRegistry {\n    apply: (name: string, vars?: FormatVars, node?: Node | RangeLikeObject | null) => void;\n    remove: (name: string, vars?: FormatVars, node?: Node | Range, similar?: boolean) => void;\n    toggle: (name: string, vars?: FormatVars, node?: Node) => void;\n    match: (name: string, vars?: FormatVars, node?: Node, similar?: boolean) => boolean;\n    closest: (names: string[]) => string | null;\n    matchAll: (names: string[], vars?: FormatVars) => string[];\n    matchNode: (node: Node | null, name: string, vars?: FormatVars, similar?: boolean) => Format | undefined;\n    canApply: (name: string) => boolean;\n    formatChanged: (names: string, callback: FormatChangeCallback, similar?: boolean, vars?: FormatVars) => {\n        unbind: () => void;\n    };\n    getCssText: (format: string | ApplyFormat) => string;\n}\ninterface EditorMode {\n    isReadOnly: () => boolean;\n    set: (mode: string) => void;\n    get: () => string;\n    register: (mode: string, api: EditorModeApi) => void;\n}\ninterface EditorModeApi {\n    activate: () => void;\n    deactivate: () => void;\n    editorReadOnly: boolean;\n}\ninterface Model {\n    readonly table: {\n        readonly getSelectedCells: () => HTMLTableCellElement[];\n        readonly clearSelectedCells: (container: Node) => void;\n    };\n}\ntype ModelManager = AddOnManager<Model>;\ninterface Plugin {\n    getMetadata?: () => {\n        name: string;\n        url: string;\n    };\n    init?: (editor: Editor, url: string) => void;\n    [key: string]: any;\n}\ntype PluginManager = AddOnManager<void | Plugin>;\ninterface ShortcutsConstructor {\n    readonly prototype: Shortcuts;\n    new (editor: Editor): Shortcuts;\n}\ntype CommandFunc = string | [\n    string,\n    boolean,\n    any\n] | (() => void);\ndeclare class Shortcuts {\n    private readonly editor;\n    private readonly shortcuts;\n    private pendingPatterns;\n    constructor(editor: Editor);\n    add(pattern: string, desc: string | null, cmdFunc: CommandFunc, scope?: any): boolean;\n    remove(pattern: string): boolean;\n    private normalizeCommandFunc;\n    private createShortcut;\n    private hasModifier;\n    private isFunctionKey;\n    private matchShortcut;\n    private executeShortcutAction;\n}\ninterface RenderResult {\n    iframeContainer?: HTMLElement;\n    editorContainer: HTMLElement;\n    api?: Partial<EditorUiApi>;\n}\ninterface Theme {\n    ui?: any;\n    inline?: any;\n    execCommand?: (command: string, ui?: boolean, value?: any) => boolean;\n    destroy?: () => void;\n    init?: (editor: Editor, url: string) => void;\n    renderUI?: () => Promise<RenderResult> | RenderResult;\n    getNotificationManagerImpl?: () => NotificationManagerImpl;\n    getWindowManagerImpl?: () => WindowManagerImpl;\n}\ntype ThemeManager = AddOnManager<void | Theme>;\ninterface EditorConstructor {\n    readonly prototype: Editor;\n    new (id: string, options: RawEditorOptions, editorManager: EditorManager): Editor;\n}\ndeclare class Editor implements EditorObservable {\n    documentBaseUrl: string;\n    baseUri: URI;\n    id: string;\n    plugins: Record<string, Plugin>;\n    documentBaseURI: URI;\n    baseURI: URI;\n    contentCSS: string[];\n    contentStyles: string[];\n    ui: EditorUi;\n    mode: EditorMode;\n    options: Options;\n    editorUpload: EditorUpload;\n    shortcuts: Shortcuts;\n    loadedCSS: Record<string, any>;\n    editorCommands: EditorCommands;\n    suffix: string;\n    editorManager: EditorManager;\n    hidden: boolean;\n    inline: boolean;\n    hasVisual: boolean;\n    isNotDirty: boolean;\n    annotator: Annotator;\n    bodyElement: HTMLElement | undefined;\n    bookmark: any;\n    composing: boolean;\n    container: HTMLElement;\n    contentAreaContainer: HTMLElement;\n    contentDocument: Document;\n    contentWindow: Window;\n    delegates: Record<string, EventUtilsCallback<any>> | undefined;\n    destroyed: boolean;\n    dom: DOMUtils;\n    editorContainer: HTMLElement;\n    eventRoot: Element | undefined;\n    formatter: Formatter;\n    formElement: HTMLElement | undefined;\n    formEventDelegate: ((e: Event) => void) | undefined;\n    hasHiddenInput: boolean;\n    iframeElement: HTMLIFrameElement | null;\n    iframeHTML: string | undefined;\n    initialized: boolean;\n    notificationManager: NotificationManager;\n    orgDisplay: string;\n    orgVisibility: string | undefined;\n    parser: DomParser;\n    quirks: Quirks;\n    readonly: boolean;\n    removed: boolean;\n    schema: Schema;\n    selection: EditorSelection;\n    serializer: DomSerializer;\n    startContent: string;\n    targetElm: HTMLElement;\n    theme: Theme;\n    model: Model;\n    undoManager: UndoManager;\n    windowManager: WindowManager;\n    _beforeUnload: (() => void) | undefined;\n    _eventDispatcher: EventDispatcher<NativeEventMap> | undefined;\n    _nodeChangeDispatcher: NodeChange;\n    _pendingNativeEvents: string[];\n    _selectionOverrides: SelectionOverrides;\n    _skinLoaded: boolean;\n    _editableRoot: boolean;\n    bindPendingEventDelegates: EditorObservable['bindPendingEventDelegates'];\n    toggleNativeEvent: EditorObservable['toggleNativeEvent'];\n    unbindAllNativeEvents: EditorObservable['unbindAllNativeEvents'];\n    fire: EditorObservable['fire'];\n    dispatch: EditorObservable['dispatch'];\n    on: EditorObservable['on'];\n    off: EditorObservable['off'];\n    once: EditorObservable['once'];\n    hasEventListeners: EditorObservable['hasEventListeners'];\n    constructor(id: string, options: RawEditorOptions, editorManager: EditorManager);\n    render(): void;\n    focus(skipFocus?: boolean): void;\n    hasFocus(): boolean;\n    translate(text: Untranslated): TranslatedString;\n    getParam<K extends BuiltInOptionType>(name: string, defaultVal: BuiltInOptionTypeMap[K], type: K): BuiltInOptionTypeMap[K];\n    getParam<K extends keyof NormalizedEditorOptions>(name: K, defaultVal?: NormalizedEditorOptions[K], type?: BuiltInOptionType): NormalizedEditorOptions[K];\n    getParam<T>(name: string, defaultVal: T, type?: BuiltInOptionType): T;\n    hasPlugin(name: string, loaded?: boolean): boolean;\n    nodeChanged(args?: any): void;\n    addCommand<S>(name: string, callback: EditorCommandCallback<S>, scope: S): void;\n    addCommand(name: string, callback: EditorCommandCallback<Editor>): void;\n    addQueryStateHandler<S>(name: string, callback: (this: S) => boolean, scope?: S): void;\n    addQueryStateHandler(name: string, callback: (this: Editor) => boolean): void;\n    addQueryValueHandler<S>(name: string, callback: (this: S) => string, scope: S): void;\n    addQueryValueHandler(name: string, callback: (this: Editor) => string): void;\n    addShortcut(pattern: string, desc: string, cmdFunc: string | [\n        string,\n        boolean,\n        any\n    ] | (() => void), scope?: any): void;\n    execCommand(cmd: string, ui?: boolean, value?: any, args?: ExecCommandArgs): boolean;\n    queryCommandState(cmd: string): boolean;\n    queryCommandValue(cmd: string): string;\n    queryCommandSupported(cmd: string): boolean;\n    show(): void;\n    hide(): void;\n    isHidden(): boolean;\n    setProgressState(state: boolean, time?: number): void;\n    load(args?: Partial<SetContentArgs>): string;\n    save(args?: Partial<GetContentArgs>): string;\n    setContent(content: string, args?: Partial<SetContentArgs>): string;\n    setContent(content: AstNode, args?: Partial<SetContentArgs>): AstNode;\n    setContent(content: Content, args?: Partial<SetContentArgs>): Content;\n    getContent(args: {\n        format: 'tree';\n    } & Partial<GetContentArgs>): AstNode;\n    getContent(args?: Partial<GetContentArgs>): string;\n    insertContent(content: string, args?: any): void;\n    resetContent(initialContent?: string): void;\n    isDirty(): boolean;\n    setDirty(state: boolean): void;\n    getContainer(): HTMLElement;\n    getContentAreaContainer(): HTMLElement;\n    getElement(): HTMLElement;\n    getWin(): Window;\n    getDoc(): Document;\n    getBody(): HTMLElement;\n    convertURL(url: string, name: string, elm?: string | Element): string;\n    addVisual(elm?: HTMLElement): void;\n    setEditableRoot(state: boolean): void;\n    hasEditableRoot(): boolean;\n    remove(): void;\n    destroy(automatic?: boolean): void;\n    uploadImages(): Promise<UploadResult$1[]>;\n    _scanForImages(): Promise<BlobInfoImagePair[]>;\n}\ninterface UrlObject {\n    prefix: string;\n    resource: string;\n    suffix: string;\n}\ntype WaitState = 'added' | 'loaded';\ntype AddOnConstructor<T> = (editor: Editor, url: string) => T;\ninterface AddOnManager<T> {\n    items: AddOnConstructor<T>[];\n    urls: Record<string, string>;\n    lookup: Record<string, {\n        instance: AddOnConstructor<T>;\n    }>;\n    get: (name: string) => AddOnConstructor<T> | undefined;\n    requireLangPack: (name: string, languages?: string) => void;\n    add: (id: string, addOn: AddOnConstructor<T>) => AddOnConstructor<T>;\n    remove: (name: string) => void;\n    createUrl: (baseUrl: UrlObject, dep: string | UrlObject) => UrlObject;\n    load: (name: string, addOnUrl: string | UrlObject) => Promise<void>;\n    waitFor: (name: string, state?: WaitState) => Promise<void>;\n}\ninterface RangeUtils {\n    walk: (rng: Range, callback: (nodes: Node[]) => void) => void;\n    split: (rng: Range) => RangeLikeObject;\n    normalize: (rng: Range) => boolean;\n    expand: (rng: Range, options?: {\n        type: 'word';\n    }) => Range;\n}\ninterface ScriptLoaderSettings {\n    referrerPolicy?: ReferrerPolicy;\n}\ninterface ScriptLoaderConstructor {\n    readonly prototype: ScriptLoader;\n    new (): ScriptLoader;\n    ScriptLoader: ScriptLoader;\n}\ndeclare class ScriptLoader {\n    static ScriptLoader: ScriptLoader;\n    private settings;\n    private states;\n    private queue;\n    private scriptLoadedCallbacks;\n    private queueLoadedCallbacks;\n    private loading;\n    constructor(settings?: ScriptLoaderSettings);\n    _setReferrerPolicy(referrerPolicy: ReferrerPolicy): void;\n    loadScript(url: string): Promise<void>;\n    isDone(url: string): boolean;\n    markDone(url: string): void;\n    add(url: string): Promise<void>;\n    load(url: string): Promise<void>;\n    remove(url: string): void;\n    loadQueue(): Promise<void>;\n    loadScripts(scripts: string[]): Promise<void>;\n}\ntype TextProcessCallback = (node: Text, offset: number, text: string) => number;\ninterface Spot {\n    container: Text;\n    offset: number;\n}\ninterface TextSeeker {\n    backwards: (node: Node, offset: number, process: TextProcessCallback, root?: Node) => Spot | null;\n    forwards: (node: Node, offset: number, process: TextProcessCallback, root?: Node) => Spot | null;\n}\ninterface DomTreeWalkerConstructor {\n    readonly prototype: DomTreeWalker;\n    new (startNode: Node, rootNode: Node): DomTreeWalker;\n}\ndeclare class DomTreeWalker {\n    private readonly rootNode;\n    private node;\n    constructor(startNode: Node, rootNode: Node);\n    current(): Node | null | undefined;\n    next(shallow?: boolean): Node | null | undefined;\n    prev(shallow?: boolean): Node | null | undefined;\n    prev2(shallow?: boolean): Node | null | undefined;\n    private findSibling;\n    private findPreviousNode;\n}\ninterface Version {\n    major: number;\n    minor: number;\n}\ninterface Env {\n    transparentSrc: string;\n    documentMode: number;\n    cacheSuffix: any;\n    container: any;\n    canHaveCSP: boolean;\n    windowsPhone: boolean;\n    browser: {\n        current: string | undefined;\n        version: Version;\n        isEdge: () => boolean;\n        isChromium: () => boolean;\n        isIE: () => boolean;\n        isOpera: () => boolean;\n        isFirefox: () => boolean;\n        isSafari: () => boolean;\n    };\n    os: {\n        current: string | undefined;\n        version: Version;\n        isWindows: () => boolean;\n        isiOS: () => boolean;\n        isAndroid: () => boolean;\n        isMacOS: () => boolean;\n        isLinux: () => boolean;\n        isSolaris: () => boolean;\n        isFreeBSD: () => boolean;\n        isChromeOS: () => boolean;\n    };\n    deviceType: {\n        isiPad: () => boolean;\n        isiPhone: () => boolean;\n        isTablet: () => boolean;\n        isPhone: () => boolean;\n        isTouch: () => boolean;\n        isWebView: () => boolean;\n        isDesktop: () => boolean;\n    };\n}\ninterface FakeClipboardItem {\n    readonly items: Record<string, any>;\n    readonly types: ReadonlyArray<string>;\n    readonly getType: <D = any>(type: string) => D | undefined;\n}\ninterface FakeClipboard {\n    readonly FakeClipboardItem: (items: Record<string, any>) => FakeClipboardItem;\n    readonly write: (data: FakeClipboardItem[]) => void;\n    readonly read: () => FakeClipboardItem[] | undefined;\n    readonly clear: () => void;\n}\ninterface FocusManager {\n    isEditorUIElement: (elm: Element) => boolean;\n}\ninterface EntitiesMap {\n    [name: string]: string;\n}\ninterface Entities {\n    encodeRaw: (text: string, attr?: boolean) => string;\n    encodeAllRaw: (text: string) => string;\n    encodeNumeric: (text: string, attr?: boolean) => string;\n    encodeNamed: (text: string, attr?: boolean, entities?: EntitiesMap) => string;\n    getEncodeFunc: (name: string, entities?: string) => (text: string, attr?: boolean) => string;\n    decode: (text: string) => string;\n}\ninterface IconPack {\n    icons: Record<string, string>;\n}\ninterface IconManager {\n    add: (id: string, iconPack: IconPack) => void;\n    get: (id: string) => IconPack;\n    has: (id: string) => boolean;\n}\ninterface Resource {\n    load: <T = any>(id: string, url: string) => Promise<T>;\n    add: (id: string, data: any) => void;\n    has: (id: string) => boolean;\n    get: (id: string) => any;\n    unload: (id: string) => void;\n}\ntype TextPatterns_d_Pattern = Pattern;\ntype TextPatterns_d_RawPattern = RawPattern;\ntype TextPatterns_d_DynamicPatternsLookup = DynamicPatternsLookup;\ntype TextPatterns_d_RawDynamicPatternsLookup = RawDynamicPatternsLookup;\ntype TextPatterns_d_DynamicPatternContext = DynamicPatternContext;\ntype TextPatterns_d_BlockCmdPattern = BlockCmdPattern;\ntype TextPatterns_d_BlockPattern = BlockPattern;\ntype TextPatterns_d_BlockFormatPattern = BlockFormatPattern;\ntype TextPatterns_d_InlineCmdPattern = InlineCmdPattern;\ntype TextPatterns_d_InlinePattern = InlinePattern;\ntype TextPatterns_d_InlineFormatPattern = InlineFormatPattern;\ndeclare namespace TextPatterns_d {\n    export { TextPatterns_d_Pattern as Pattern, TextPatterns_d_RawPattern as RawPattern, TextPatterns_d_DynamicPatternsLookup as DynamicPatternsLookup, TextPatterns_d_RawDynamicPatternsLookup as RawDynamicPatternsLookup, TextPatterns_d_DynamicPatternContext as DynamicPatternContext, TextPatterns_d_BlockCmdPattern as BlockCmdPattern, TextPatterns_d_BlockPattern as BlockPattern, TextPatterns_d_BlockFormatPattern as BlockFormatPattern, TextPatterns_d_InlineCmdPattern as InlineCmdPattern, TextPatterns_d_InlinePattern as InlinePattern, TextPatterns_d_InlineFormatPattern as InlineFormatPattern, };\n}\ninterface Delay {\n    setEditorInterval: (editor: Editor, callback: () => void, time?: number) => number;\n    setEditorTimeout: (editor: Editor, callback: () => void, time?: number) => number;\n}\ntype UploadResult = UploadResult$2;\ninterface ImageUploader {\n    upload: (blobInfos: BlobInfo[], showNotification?: boolean) => Promise<UploadResult[]>;\n}\ntype ArrayCallback$1<T, R> = (this: any, x: T, i: number, xs: ArrayLike<T>) => R;\ntype ObjCallback$1<T, R> = (this: any, value: T, key: string, obj: Record<string, T>) => R;\ntype ArrayCallback<T, R> = ArrayCallback$1<T, R>;\ntype ObjCallback<T, R> = ObjCallback$1<T, R>;\ntype WalkCallback<T> = (this: any, o: T, i: string, n: keyof T | undefined) => boolean | void;\ninterface Tools {\n    is: (obj: any, type?: string) => boolean;\n    isArray: <T>(arr: any) => arr is Array<T>;\n    inArray: <T>(arr: ArrayLike<T>, value: T) => number;\n    grep: {\n        <T>(arr: ArrayLike<T> | null | undefined, pred?: ArrayCallback<T, boolean>): T[];\n        <T>(arr: Record<string, T> | null | undefined, pred?: ObjCallback<T, boolean>): T[];\n    };\n    trim: (str: string | null | undefined) => string;\n    toArray: <T>(obj: ArrayLike<T>) => T[];\n    hasOwn: (obj: any, name: string) => boolean;\n    makeMap: (items: ArrayLike<string> | string | undefined, delim?: string | RegExp, map?: Record<string, {}>) => Record<string, {}>;\n    each: {\n        <T>(arr: ArrayLike<T> | null | undefined, cb: ArrayCallback<T, void | boolean>, scope?: any): boolean;\n        <T>(obj: Record<string, T> | null | undefined, cb: ObjCallback<T, void | boolean>, scope?: any): boolean;\n    };\n    map: {\n        <T, R>(arr: ArrayLike<T> | null | undefined, cb: ArrayCallback<T, R>): R[];\n        <T, R>(obj: Record<string, T> | null | undefined, cb: ObjCallback<T, R>): R[];\n    };\n    extend: (obj: Object, ext: Object, ...objs: Object[]) => any;\n    walk: <T extends Record<string, any>>(obj: T, f: WalkCallback<T>, n?: keyof T, scope?: any) => void;\n    resolve: (path: string, o?: Object) => any;\n    explode: (s: string | string[], d?: string | RegExp) => string[];\n    _addCacheSuffix: (url: string) => string;\n}\ninterface KeyboardLikeEvent {\n    shiftKey: boolean;\n    ctrlKey: boolean;\n    altKey: boolean;\n    metaKey: boolean;\n}\ninterface VK {\n    BACKSPACE: number;\n    DELETE: number;\n    DOWN: number;\n    ENTER: number;\n    ESC: number;\n    LEFT: number;\n    RIGHT: number;\n    SPACEBAR: number;\n    TAB: number;\n    UP: number;\n    PAGE_UP: number;\n    PAGE_DOWN: number;\n    END: number;\n    HOME: number;\n    modifierPressed: (e: KeyboardLikeEvent) => boolean;\n    metaKeyPressed: (e: KeyboardLikeEvent) => boolean;\n}\ninterface DOMUtilsNamespace {\n    (doc: Document, settings: Partial<DOMUtilsSettings>): DOMUtils;\n    DOM: DOMUtils;\n    nodeIndex: (node: Node, normalized?: boolean) => number;\n}\ninterface RangeUtilsNamespace {\n    (dom: DOMUtils): RangeUtils;\n    compareRanges: (rng1: RangeLikeObject, rng2: RangeLikeObject) => boolean;\n    getCaretRangeFromPoint: (clientX: number, clientY: number, doc: Document) => Range;\n    getSelectedNode: (range: Range) => Node;\n    getNode: (container: Node, offset: number) => Node;\n}\ninterface AddOnManagerNamespace {\n    <T>(): AddOnManager<T>;\n    language: string | undefined;\n    languageLoad: boolean;\n    baseURL: string;\n    PluginManager: PluginManager;\n    ThemeManager: ThemeManager;\n    ModelManager: ModelManager;\n}\ninterface BookmarkManagerNamespace {\n    (selection: EditorSelection): BookmarkManager;\n    isBookmarkNode: (node: Node) => boolean;\n}\ninterface TinyMCE extends EditorManager {\n    geom: {\n        Rect: Rect;\n    };\n    util: {\n        Delay: Delay;\n        Tools: Tools;\n        VK: VK;\n        URI: URIConstructor;\n        EventDispatcher: EventDispatcherConstructor<any>;\n        Observable: Observable<any>;\n        I18n: I18n;\n        LocalStorage: Storage;\n        ImageUploader: ImageUploader;\n    };\n    dom: {\n        EventUtils: EventUtilsConstructor;\n        TreeWalker: DomTreeWalkerConstructor;\n        TextSeeker: (dom: DOMUtils, isBlockBoundary?: (node: Node) => boolean) => TextSeeker;\n        DOMUtils: DOMUtilsNamespace;\n        ScriptLoader: ScriptLoaderConstructor;\n        RangeUtils: RangeUtilsNamespace;\n        Serializer: (settings: DomSerializerSettings, editor?: Editor) => DomSerializer;\n        ControlSelection: (selection: EditorSelection, editor: Editor) => ControlSelection;\n        BookmarkManager: BookmarkManagerNamespace;\n        Selection: (dom: DOMUtils, win: Window, serializer: DomSerializer, editor: Editor) => EditorSelection;\n        StyleSheetLoader: (documentOrShadowRoot: Document | ShadowRoot, settings: StyleSheetLoaderSettings) => StyleSheetLoader;\n        Event: EventUtils;\n    };\n    html: {\n        Styles: (settings?: StylesSettings, schema?: Schema) => Styles;\n        Entities: Entities;\n        Node: AstNodeConstructor;\n        Schema: (settings?: SchemaSettings) => Schema;\n        DomParser: (settings?: DomParserSettings, schema?: Schema) => DomParser;\n        Writer: (settings?: WriterSettings) => Writer;\n        Serializer: (settings?: HtmlSerializerSettings, schema?: Schema) => HtmlSerializer;\n    };\n    AddOnManager: AddOnManagerNamespace;\n    Annotator: (editor: Editor) => Annotator;\n    Editor: EditorConstructor;\n    EditorCommands: EditorCommandsConstructor;\n    EditorManager: EditorManager;\n    EditorObservable: EditorObservable;\n    Env: Env;\n    FocusManager: FocusManager;\n    Formatter: (editor: Editor) => Formatter;\n    NotificationManager: (editor: Editor) => NotificationManager;\n    Shortcuts: ShortcutsConstructor;\n    UndoManager: (editor: Editor) => UndoManager;\n    WindowManager: (editor: Editor) => WindowManager;\n    DOM: DOMUtils;\n    ScriptLoader: ScriptLoader;\n    PluginManager: PluginManager;\n    ThemeManager: ThemeManager;\n    ModelManager: ModelManager;\n    IconManager: IconManager;\n    Resource: Resource;\n    FakeClipboard: FakeClipboard;\n    trim: Tools['trim'];\n    isArray: Tools['isArray'];\n    is: Tools['is'];\n    toArray: Tools['toArray'];\n    makeMap: Tools['makeMap'];\n    each: Tools['each'];\n    map: Tools['map'];\n    grep: Tools['grep'];\n    inArray: Tools['inArray'];\n    extend: Tools['extend'];\n    walk: Tools['walk'];\n    resolve: Tools['resolve'];\n    explode: Tools['explode'];\n    _addCacheSuffix: Tools['_addCacheSuffix'];\n}\ndeclare const tinymce: TinyMCE;\nexport { AddOnManager, Annotator, AstNode, Bookmark, BookmarkManager, ControlSelection, DOMUtils, Delay, DomParser, DomParserSettings, DomSerializer, DomSerializerSettings, DomTreeWalker, Editor, EditorCommands, EditorEvent, EditorManager, EditorModeApi, EditorObservable, EditorOptions, EditorSelection, Entities, Env, EventDispatcher, EventUtils, EventTypes_d as Events, FakeClipboard, FocusManager, Format_d as Formats, Formatter, GeomRect, HtmlSerializer, HtmlSerializerSettings, I18n, IconManager, Model, ModelManager, NotificationApi, NotificationManager, NotificationSpec, Observable, Plugin, PluginManager, RangeUtils, RawEditorOptions, Rect, Resource, Schema, SchemaSettings, ScriptLoader, Shortcuts, StyleSheetLoader, Styles, TextPatterns_d as TextPatterns, TextSeeker, Theme, ThemeManager, TinyMCE, Tools, URI, Ui_d as Ui, UndoManager, VK, WindowManager, Writer, WriterSettings, tinymce as default };\n"
  },
  {
    "path": "src/App.vue",
    "content": "<script setup lang=\"ts\">\nimport { ElConfigProvider } from 'element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\n</script>\n\n<template>\n  <!-- 通过ConfigProvider全局设置国际化 -->\n  <el-config-provider :locale=\"zhCn\">\n    <div id=\"app\">\n      <router-view />\n    </div>\n  </el-config-provider>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/apis/admin.ts",
    "content": "import type { LoginParam, LoginResult, UmsAdmin, UserInfoResult } from '@/types/admin'\nimport type { CommonPage, PageParam } from '@/types/common'\nimport type { UmsRole } from '@/types/role'\nimport http from '@/utils/http'\n\n/**\n * 后台管理员登录以后返回token\n */\nexport function adminLoginAPI(data: LoginParam) {\n  return http<LoginResult>({\n    method: 'POST',\n    url: '/admin/login',\n    data: data,\n  })\n}\n\n/**\n * 后台管理员退出登录\n */\nexport function adminLogoutAPI() {\n  return http({\n    method: 'POST',\n    url: '/admin/logout',\n  })\n}\n\n/**\n * 获取当前登录用户信息\n */\nexport function getAdminInfoAPI() {\n  return http<UserInfoResult>({\n    method: 'GET',\n    url: '/admin/info',\n  })\n}\n\n/**\n * 根据用户名或姓名分页获取用户列表\n */\nexport function getAdminListAPI(params: PageParam) {\n  return http<CommonPage<UmsAdmin>>({\n    url: '/admin/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 后台用户注册\n */\nexport function adminRegisterAPI(data: UmsAdmin) {\n  return http({\n    url: '/admin/register',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID修改指定用户信息\n */\nexport function adminUpdateByIdAPI(id: number, data: UmsAdmin) {\n  return http({\n    url: '/admin/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据用户ID修改账号启用状态\n */\nexport function adminUpdateStatusByIdAPI(id: number, params: { status: number }) {\n  return http({\n    url: '/admin/updateStatus/' + id,\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 根据ID删除用户\n */\nexport function adminDeleteByIdAPI(id: number) {\n  return http({\n    url: '/admin/delete/' + id,\n    method: 'post',\n  })\n}\n\n/**\n * 根据用户ID获取分配的角色\n */\nexport function getRoleByAdminIdAPI(id: number) {\n  return http<UmsRole[]>({\n    url: '/admin/role/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 给指定ID的用户分配角色\n */\nexport function adminRoleUpdateAPI(params: { roleIds: string; adminId: number }) {\n  return http({\n    url: '/admin/role/update',\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/brand.ts",
    "content": "import type { PmsBrand } from '@/types/brand'\nimport type { CommonPage, PageParam } from '@/types/common'\nimport http from '@/utils/http'\n\n/**\n * 根据品牌名称分页获取品牌列表\n */\nexport function getBrandListAPI(params: PageParam) {\n  return http<CommonPage<PmsBrand>>({\n    url: '/brand/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 添加品牌\n */\nexport function createBrandAPI(data: PmsBrand) {\n  return http({\n    url: '/brand/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 批量更新显示状态\n */\nexport function brandUpdateShowStatusAPI(params: { ids: string; showStatus: number }) {\n  return http({\n    url: '/brand/update/showStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量更新厂家制造商状态\n */\nexport function brandUpdateFactoryStatusAPI(params: { ids: string; factoryStatus: number }) {\n  return http({\n    url: '/brand/update/factoryStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 根据品牌ID删除品牌\n */\nexport function brandDeleteByIdAPI(id: number) {\n  return http({\n    url: '/brand/delete/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 根据ID获取品牌详情\n */\nexport function getBrandAPI(id: number) {\n  return http<PmsBrand>({\n    url: '/brand/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 根据品牌ID修改品牌信息\n */\nexport function updateBrandAPI(id: number, data: PmsBrand) {\n  return http({\n    url: '/brand/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/companyAddress.ts",
    "content": "import type { OmsCompanyAddress } from '@/types/companyAddress'\nimport http from '@/utils/http'\n\n/**\n * 获取所有收货地址\n */\nexport function getCompanyAddressListAPI() {\n  return http<OmsCompanyAddress[]>({\n    url: '/companyAddress/list',\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/coupon.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type {\n  CouponHistoryQueryParam,\n  CouponQueryParam,\n  SmsCoupon,\n  SmsCouponExt,\n} from '@/types/coupon'\nimport http from '@/utils/http'\n\n/**\n * 根据优惠券名称和类型分页获取优惠券列表\n */\nexport function getCouponListAPI(params: CouponQueryParam) {\n  return http<CommonPage<SmsCoupon>>({\n    url: '/coupon/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 添加优惠券\n */\nexport function couponCreateAPI(data: SmsCouponExt) {\n  return http({\n    url: '/coupon/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 获取单个优惠券的详细信息\n */\nexport function getCouponByIdAPI(id: number) {\n  return http<SmsCouponExt>({\n    url: '/coupon/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 根据ID修改优惠券\n */\nexport function couponUpdateByIdAPI(id: number, data: SmsCouponExt) {\n  return http({\n    url: '/coupon/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID删除优惠券\n */\nexport function couponDeleteByIdAPI(id: number) {\n  return http({\n    url: '/coupon/delete/' + id,\n    method: 'post',\n  })\n}\n\n/**\n * 根据优惠券id，使用状态，订单编号分页获取领取记录\n */\nexport function getCouponHistoryListAPI(params: CouponHistoryQueryParam) {\n  return http({\n    url: '/couponHistory/list',\n    method: 'get',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/flash.ts",
    "content": "import type { PageParam } from '@/types/common'\nimport type { SmsFlashPromotion } from '@/types/flash'\nimport http from '@/utils/http'\n\n/**\n * 根据活动名称分页查询活动\n */\nexport function getFlashListAPI(params: PageParam) {\n  return http({\n    url: '/flash/list',\n    method: 'get',\n    params: params,\n  })\n}\n/**\n * 修改活动上下线状态\n */\nexport function flashUpdateStatusByIdAPI(id: number, params: { status: number }) {\n  return http({\n    url: '/flash/update/status/' + id,\n    method: 'post',\n    params: params,\n  })\n}\n/**\n * 根据ID删除活动\n */\nexport function flashDeleteByIdAPI(id: number) {\n  return http({\n    url: '/flash/delete/' + id,\n    method: 'post',\n  })\n}\n/**\n * 添加活动\n */\nexport function flashCreateAPI(data: SmsFlashPromotion) {\n  return http({\n    url: '/flash/create',\n    method: 'post',\n    data: data,\n  })\n}\n/**\n * 根据ID修改活动\n */\nexport function flashUpdateByIdAPI(id: number, data: SmsFlashPromotion) {\n  return http({\n    url: '/flash/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/flashProductRelation.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { FlashProductQueryParam, SmsFlashPromotionProductRelation } from '@/types/flash'\nimport http from '@/utils/http'\n\n/**\n * 分页查询不同场次关联及商品信息\n */\nexport function getFlashProductRelationListAPI(params: FlashProductQueryParam) {\n  return http<CommonPage<SmsFlashPromotionProductRelation>>({\n    url: '/flashProductRelation/list',\n    method: 'get',\n    params: params,\n  })\n}\n/**\n * 批量选择商品添加关联\n */\nexport function flashProductRelationCreateAPI(data: SmsFlashPromotionProductRelation[]) {\n  return http({\n    url: '/flashProductRelation/create',\n    method: 'post',\n    data: data,\n  })\n}\n/**\n * 根据ID修改关联信息\n */\nexport function flashProductRelationDeleteByIdAPI(id: number) {\n  return http({\n    url: '/flashProductRelation/delete/' + id,\n    method: 'post',\n  })\n}\n/**\n * 根据ID修改关联信息\n */\nexport function flashProductRelationUpdateByIdAPI(\n  id: number,\n  data: SmsFlashPromotionProductRelation,\n) {\n  return http({\n    url: '/flashProductRelation/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/flashSession.ts",
    "content": "import type { SmsFlashPromotionSession } from '@/types/flash'\nimport http from '@/utils/http'\n\n/**\n * 获取全部可选场次及其数量\n */\nexport function getFlashSessionSelectListAPI(params: { flashPromotionId: number }) {\n  return http<SmsFlashPromotionSession[]>({\n    url: '/flashSession/selectList',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 获取全部场次\n */\nexport function getFlashSessionListAPI() {\n  return http<SmsFlashPromotionSession[]>({\n    url: '/flashSession/list',\n    method: 'get',\n  })\n}\n\n/**\n * 根据ID修改场次启用状态\n */\nexport function flashSessionUpdateStatusByIdAPI(id: number, params: { status: number }) {\n  return http({\n    url: '/flashSession/update/status/' + id,\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 根据ID删除场次\n * @param id\n * @returns\n */\nexport function flashSessionDeleteByIdAPI(id: number) {\n  return http({\n    url: '/flashSession/delete/' + id,\n    method: 'post',\n  })\n}\n\n/**\n * 添加场次\n */\nexport function flashSessionCreateAPI(data: SmsFlashPromotionSession) {\n  return http({\n    url: '/flashSession/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改场次\n */\nexport function flashSessionUpdateByIdAPI(id: number, data: SmsFlashPromotionSession) {\n  return http({\n    url: '/flashSession/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/homeAdvertise.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { HomeAdvertiseQueryParam, SmsHomeAdvertise } from '@/types/homeAdvertist'\nimport http from '@/utils/http'\n\n/**\n * 分页查询首页广告\n */\nexport function getHomeAdvertiseListAPI(params: HomeAdvertiseQueryParam) {\n  return http<CommonPage<SmsHomeAdvertise>>({\n    url: '/home/advertise/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 修改上下线状态\n */\nexport function homeAdvertiseUpdateStatusAPI(params: { id: number; status: number }) {\n  return http({\n    url: '/home/advertise/update/status/' + params.id,\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除广告\n */\nexport function deleteHomeAdvertiseAPI(params: { ids: string }) {\n  return http({\n    url: '/home/advertise/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 添加广告\n */\nexport function homeAdvertiseCreateAPI(data: SmsHomeAdvertise) {\n  return http({\n    url: '/home/advertise/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID获取广告详情\n */\nexport function getHomeAdvertiseByIdAPI(id: number) {\n  return http({\n    url: '/home/advertise/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 根据ID修改广告\n */\nexport function homeAdvertiseUpdateAPI(id: number, data: SmsHomeAdvertise) {\n  return http({\n    url: '/home/advertise/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/homeBrand.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { HomeBrandQueryParam, SmsHomeBrand } from '@/types/homeBrand'\nimport http from '@/utils/http'\n\n/**\n * 分页查询推荐品牌\n */\nexport function getHomeBrandListAPI(params: HomeBrandQueryParam) {\n  return http<CommonPage<SmsHomeBrand>>({\n    url: '/home/brand/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量修改推荐品牌状态\n */\nexport function homeBrandUpdateRecommendStatusAPI(params: {\n  /** 品牌推荐ID */\n  ids: string\n  /** 品牌推荐状态 */\n  recommendStatus: number\n}) {\n  return http({\n    url: '/home/brand/update/recommendStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除推荐品牌\n */\nexport function homeBrandDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/home/brand/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 添加首页推荐品牌\n */\nexport function homeBrandCreateAPI(data: SmsHomeBrand[]) {\n  return http({\n    url: '/home/brand/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改推荐品牌排序\n */\nexport function homeBrandUpdateSortAPI(params: { id: number; sort: number }) {\n  return http({\n    url: '/home/brand/update/sort/' + params.id,\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/homeSubject.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { HomeSubjectQueryParam, SmsHomeRecommendSubject } from '@/types/homeSubject'\nimport http from '@/utils/http'\n\n/**\n * 分页查询专题推荐\n */\nexport function getHomeRecommendSubjectListAPI(params: HomeSubjectQueryParam) {\n  return http<CommonPage<SmsHomeRecommendSubject>>({\n    url: '/home/recommendSubject/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量修改专题推荐状态\n */\nexport function homeRecommendSubjectUpdateRecommendStatusAPI(params: {\n  /** 推荐ID */\n  ids: string\n  /** 推荐状态 */\n  recommendStatus: number\n}) {\n  return http({\n    url: '/home/recommendSubject/update/recommendStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除专题推荐\n */\nexport function homeRecommendSubjectDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/home/recommendSubject/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量添加首页专题推荐\n */\nexport function homeRecommendSubjectCreateAPI(data: SmsHomeRecommendSubject[]) {\n  return http({\n    url: '/home/recommendSubject/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改专题推荐排序\n */\nexport function homeRecommendSubjectUpdateSortAPI(params: { id: number; sort: number }) {\n  return http({\n    url: '/home/recommendSubject/update/sort/' + params.id,\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/memberLevel.ts",
    "content": "import type { UmsMemberLevel } from '@/types/memberLevel'\nimport http from '@/utils/http'\n\n/**\n * 查询所有会员等级\n */\nexport function getMemberLevelListAPI(params: { defaultStatus: number }) {\n  return http<UmsMemberLevel[]>({\n    url: '/memberLevel/list',\n    method: 'get',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/menu.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { UmsMenu, UmsMenuNode } from '@/types/menu'\nimport http from '@/utils/http'\n\n/**\n *  树形结构返回所有菜单列表\n */\nexport function getMenuTreeListAPI() {\n  return http<UmsMenuNode[]>({\n    url: '/menu/treeList',\n    method: 'get',\n  })\n}\n\n/**\n * 根据上级菜单ID分页查询菜单\n */\nexport function getMenuListByParentIdAPI(parentId: number, params: PageParam) {\n  return http<CommonPage<UmsMenu>>({\n    url: '/menu/list/' + parentId,\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 根据ID删除后台菜单\n */\nexport function deleteMenuByIdAPI(id: number) {\n  return http({\n    url: '/menu/delete/' + id,\n    method: 'post',\n  })\n}\n\n/**\n * 添加后台菜单\n */\nexport function menuCreateAPI(data: UmsMenu) {\n  return http({\n    url: '/menu/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改后台菜单\n */\nexport function updateMenu(id: number, data: UmsMenu) {\n  return http({\n    url: '/menu/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID获取菜单详情\n */\nexport function getMenuByIdAPI(id: number) {\n  return http<UmsMenu>({\n    url: '/menu/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 根据ID修改菜单显示状态\n */\nexport function menuUpdateHiddenByIdAPI(id: number, params: { hidden: number }) {\n  return http({\n    url: '/menu/updateHidden/' + id,\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/newProduct.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { NewProductQueryParam, SmsHomeNewProduct } from '@/types/newProduct'\nimport http from '@/utils/http'\n\n/**\n * 分页查询首页新品\n */\nexport function getHomeNewProductListAPI(params: NewProductQueryParam) {\n  return http<CommonPage<SmsHomeNewProduct>>({\n    url: '/home/newProduct/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量修改首页新品状态\n */\nexport function homeNewProductUpdateRecommendStatusAPI(params: {\n  ids: string\n  recommendStatus: number\n}) {\n  return http({\n    url: '/home/newProduct/update/recommendStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除首页新品\n */\nexport function homeNewProductDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/home/newProduct/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量添加首页新品\n */\nexport function homeNewProductCreateAPI(data: SmsHomeNewProduct[]) {\n  return http({\n    url: '/home/newProduct/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID修改首页新品排序\n */\nexport function homeNewProductUpdateSortByIdAPI(params: { id: number; sort: number }) {\n  return http({\n    url: '/home/newProduct/update/sort/' + params.id,\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/order.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type {\n  OmsMoneyInfoParam,\n  OmsOrder,\n  OmsOrderDeliveryParam,\n  OmsOrderDetail,\n  OmsReceiverInfoParam,\n  OrderQueryParam,\n} from '@/types/order'\nimport http from '@/utils/http'\n\n/**\n * 分页查询订单列表\n */\nexport function getOrderListAPI(params: OrderQueryParam) {\n  return http<CommonPage<OmsOrder>>({\n    url: '/order/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量关闭订单\n */\nexport function orderUpdateCloseAPI(params: { ids: string; note: string }) {\n  return http({\n    url: '/order/update/close',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除订单\n */\nexport function orderDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/order/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量发货\n */\nexport function orderUpdateDeliveryAPI(data: OmsOrderDeliveryParam[]) {\n  return http({\n    url: '/order/update/delivery',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 获取订单详情：订单信息、商品信息、操作记录\n */\nexport function getOrderDetailByIdAPI(id: number) {\n  return http<OmsOrderDetail>({\n    url: '/order/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 修改收货人信息\n */\nexport function orderUpdateReceiverInfoAPI(data: OmsReceiverInfoParam) {\n  return http({\n    url: '/order/update/receiverInfo',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改订单费用信息\n */\nexport function orderUpdateMoneyInfoAPI(data: OmsMoneyInfoParam) {\n  return http({\n    url: '/order/update/moneyInfo',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 备注订单\n */\nexport function orderUpdateNoteAPI(params: { id: number; note: string; status: number }) {\n  return http({\n    url: '/order/update/note',\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/orderSetting.ts",
    "content": "import type { OmsOrderSetting } from '@/types/orderSetting'\nimport http from '@/utils/http'\n\n/**\n * 获取指定订单设置\n */\nexport function getOrderSettingByIdAPI(id: number) {\n  return http<OmsOrderSetting>({\n    url: '/orderSetting/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 修改指定订单设置\n */\nexport function orderSettingUpdateByIdAPI(id: number, data: OmsOrderSetting) {\n  return http({\n    url: '/orderSetting/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/oss.ts",
    "content": "import type { OssPolicyResult } from '@/types/oss'\nimport http from '@/utils/http'\n\n/**\n * Oss上传签名生成\n */\nexport function ossPolicyAPI() {\n  return http<OssPolicyResult>({\n    url: '/aliyun/oss/policy',\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/prefrenceArea.ts",
    "content": "import type { CmsPrefrenceArea } from '@/types/prefrenceArea'\nimport http from '@/utils/http'\n\n/**\n * 获取所有商品优选\n */\nexport function getPrefrenceAreaListAllAPI() {\n  return http<CmsPrefrenceArea[]>({\n    url: '/prefrenceArea/listAll',\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/product.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { PmsProduct, PmsProductParam, ProductQueryParam } from '@/types/product'\nimport http from '@/utils/http'\n\n/**\n * 查询商品\n */\nexport function getProductListAPI(params: ProductQueryParam) {\n  return http<CommonPage<PmsProduct>>({\n    url: '/product/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量修改删除状态\n */\nexport function productUpdateDeleteStatusAPI(params: { ids: string; deleteStatus: number }) {\n  return http({\n    url: '/product/update/deleteStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量设为新品\n */\nexport function productUpdateNewStatusAPI(params: { ids: string; newStatus: number }) {\n  return http({\n    url: '/product/update/newStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量推荐商品\n */\nexport function productUpdateRecommendStatusAPI(params: { ids: string; recommendStatus: number }) {\n  return http({\n    url: '/product/update/recommendStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量上下架商品\n */\nexport function productUpdatePublishStatusAPI(params: { ids: string; publishStatus: number }) {\n  return http({\n    url: '/product/update/publishStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 创建商品\n */\nexport function productCreateAPI(data: PmsProductParam) {\n  return http({\n    url: '/product/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID修改商品信息\n */\nexport function productUpdateByIdAPI(id: number, data: PmsProductParam) {\n  return http({\n    url: '/product/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据商品id获取商品编辑信息\n */\nexport function getPruductUpdateInfoAPI(id: number) {\n  return http<PmsProductParam>({\n    url: '/product/updateInfo/' + id,\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/productAttr.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { PmsProductAttribute, ProductAttrInfo } from '@/types/productAttr'\nimport http from '@/utils/http'\n\n/**\n * 根据商品分类的ID获取商品属性及属性分类ID\n */\nexport function getProductAttrInfoByCateIdAPI(cateId: number) {\n  return http<ProductAttrInfo[]>({\n    url: '/productAttribute/attrInfo/' + cateId,\n    method: 'get',\n  })\n}\n\n/**\n * 根据分类ID查询属性列表或参数列表\n */\nexport function getProductAttributeListAPI(cid: number, params: PageParam & { type: number }) {\n  return http<CommonPage<PmsProductAttribute>>({\n    url: '/productAttribute/list/' + cid,\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量删除商品属性\n */\nexport function productAttributeDeleteByIds(params: { ids: string }) {\n  return http({\n    url: '/productAttribute/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 添加商品属性信息\n */\nexport function productAttributeCreateAPI(data: PmsProductAttribute) {\n  return http({\n    url: '/productAttribute/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改商品属性信息\n */\nexport function productAttributeUpdateAPI(id: number, data: PmsProductAttribute) {\n  return http({\n    url: '/productAttribute/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID查询商品属性\n */\nexport function getProductAttributeByIdAPI(id: number) {\n  return http<PmsProductAttribute>({\n    url: '/productAttribute/' + id,\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/productAttrCate.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type {\n  PmsProductAttributeCategory,\n  PmsProductAttributeCategoryExt,\n} from '@/types/productAttr'\nimport http from '@/utils/http'\n\n/**\n * 获取所有商品属性分类及其下属性\n */\nexport function productAttributeCategoryListWithAttrAPI() {\n  return http<PmsProductAttributeCategoryExt[]>({\n    url: '/productAttribute/category/list/withAttr',\n    method: 'get',\n  })\n}\n\n/**\n * 分页获取所有商品属性分类\n */\nexport function getProductAttributeCategoryListAPI(params: PageParam) {\n  return http<CommonPage<PmsProductAttributeCategory>>({\n    url: '/productAttribute/category/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 添加商品属性分类\n */\nexport function productAttributeCategoryCreateAPI(name: string) {\n  return http({\n    url: '/productAttribute/category/create',\n    method: 'post',\n    params: { name: name },\n  })\n}\n\n/**\n * 删除单个商品属性分类\n */\nexport function productAttributeCategoryDeleteById(id: number) {\n  return http({\n    url: '/productAttribute/category/delete/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 修改商品属性分类\n */\nexport function productAttributeCategoryUpdateAPI(id: number, name: string) {\n  return http({\n    url: '/productAttribute/category/update/' + id,\n    method: 'post',\n    params: { name: name },\n  })\n}\n"
  },
  {
    "path": "src/apis/productCate.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { PmsProductCategory, PmsProductCategoryExt } from '@/types/productCate'\nimport http from '@/utils/http'\n\n/**\n * 查询所有一级分类及子分类\n */\nexport function getProductCategoryListWithChildrenAPI() {\n  return http<PmsProductCategoryExt[]>({\n    url: '/productCategory/list/withChildren',\n    method: 'get',\n  })\n}\n\n/**\n * 分页查询商品分类\n */\nexport function getProductCategoryListAPI(parentId: number, params: PageParam) {\n  return http<CommonPage<PmsProductCategory>>({\n    url: '/productCategory/list/' + parentId,\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 根据ID删除商品分类\n */\nexport function productCategoryDeleteByIdAPI(id: number) {\n  return http({\n    url: '/productCategory/delete/' + id,\n    method: 'post',\n  })\n}\n\n/**\n * 添加商品分类\n */\nexport function productCategoryCreateAPI(data: PmsProductCategory) {\n  return http({\n    url: '/productCategory/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改商品分类\n */\nexport function productCategoryUpdateByIdAPI(id: number, data: PmsProductCategory) {\n  return http({\n    url: '/productCategory/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID获取商品分类\n */\nexport function getProductCategoryByIdAPI(id: number) {\n  return http<PmsProductCategory>({\n    url: '/productCategory/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 批量修改显示状态\n */\nexport function productCategoryUpdateShowStatusAPI(params: { ids: string; showStatus: number }) {\n  return http({\n    url: '/productCategory/update/showStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量修改导航栏显示状态\n */\nexport function productCategoryUpdateNavStatusAPI(params: { ids: string; navStatus: number }) {\n  return http({\n    url: '/productCategory/update/navStatus',\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/recommendProduct.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { RecommendProductQueryParam, SmsHomeRecommendProduct } from '@/types/recommendProduct'\nimport http from '@/utils/http'\n\n/**\n * 分页查询首页新品\n */\nexport function getHomeRecommendProductListAPI(params: RecommendProductQueryParam) {\n  return http<CommonPage<SmsHomeRecommendProduct>>({\n    url: '/home/recommendProduct/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量修改首页新品状态\n */\nexport function homeRecommendProductUpdateRecommendStatusAPI(params: {\n  ids: string\n  recommendStatus: number\n}) {\n  return http({\n    url: '/home/recommendProduct/update/recommendStatus',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量删除首页新品\n */\nexport function homeRecommendProductDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/home/recommendProduct/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 批量添加首页新品\n */\nexport function homeRecommendProductCreateAPI(data: SmsHomeRecommendProduct[]) {\n  return http({\n    url: '/home/recommendProduct/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID修改首页新品排序\n */\nexport function homeRecommendProductUpdateSortByIdAPI(params: { id: number; sort: number }) {\n  return http({\n    url: '/home/recommendProduct/update/sort/' + params.id,\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/resource.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type { ResourceQueryParam, UmsResource } from '@/types/resource'\nimport http from '@/utils/http'\n\n/**\n * 查询所有后台资源\n */\nexport function fetchAllResourceList() {\n  return http<UmsResource[]>({\n    url: '/resource/listAll',\n    method: 'get',\n  })\n}\n\n/**\n * 分页模糊查询后台资源\n */\nexport function getResourceListAPI(params: ResourceQueryParam) {\n  return http<CommonPage<UmsResource>>({\n    url: '/resource/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 添加后台资源\n */\nexport function resourceCreateAPI(data: UmsResource) {\n  return http({\n    url: '/resource/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改后台资源\n */\nexport function resourceUpdateAPI(id: number, data: UmsResource) {\n  return http({\n    url: '/resource/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID删除后台资源\n */\nexport function resourceDeleteByIdAPI(id: number) {\n  return http({\n    url: '/resource/delete/' + id,\n    method: 'post',\n  })\n}\n"
  },
  {
    "path": "src/apis/resourceCategory.ts",
    "content": "import type { UmsResourceCategory } from '@/types/resource'\nimport http from '@/utils/http'\n\n/**\n * 查询所有后台资源分类\n */\nexport function resourceCategoryListAllAPI() {\n  return http<UmsResourceCategory[]>({\n    url: '/resourceCategory/listAll',\n    method: 'get',\n  })\n}\n\n/**\n * 添加后台资源分类\n */\nexport function resourceCategoryCreateAPI(data: UmsResourceCategory) {\n  return http({\n    url: '/resourceCategory/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改后台资源分类\n */\nexport function resourceCategoryUpdateAPI(id: number, data: UmsResourceCategory) {\n  return http({\n    url: '/resourceCategory/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID删除后台资源分类\n */\nexport function resourceCategoryDeleteByIdAPI(id: number) {\n  return http({\n    url: '/resourceCategory/delete/' + id,\n    method: 'post',\n  })\n}\n"
  },
  {
    "path": "src/apis/returnApply.ts",
    "content": "import type { CommonPage } from '@/types/common'\nimport type {\n  OmsOrderReturnApply,\n  OmsOrderReturnApplyResult,\n  OmsUpdateStatusParam,\n  ReturnApplyQueryParam,\n} from '@/types/returnApply'\nimport http from '@/utils/http'\n\n/**\n * 分页查询退货申请\n */\nexport function getReturnApplyListAPI(params: ReturnApplyQueryParam) {\n  return http<CommonPage<OmsOrderReturnApply>>({\n    url: '/returnApply/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量删除退货申请\n */\nexport function returnApplyDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/returnApply/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 修改退货申请状态\n */\nexport function returnApplyUpdateStatusAPI(id: number, data: OmsUpdateStatusParam) {\n  return http({\n    url: '/returnApply/update/status/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 获取退货申请详情\n */\nexport function getReturnApplyByIdAPI(id: number) {\n  return http<OmsOrderReturnApplyResult>({\n    url: '/returnApply/' + id,\n    method: 'get',\n  })\n}\n"
  },
  {
    "path": "src/apis/returnReason.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { OmsOrderReturnReason } from '@/types/returnReason'\nimport http from '@/utils/http'\n\n/**\n * 分页查询退货原因\n */\nexport function getReturnReasonListAPI(params: PageParam) {\n  return http<CommonPage<OmsOrderReturnReason>>({\n    url: '/returnReason/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 批量删除退货原因\n */\nexport function returnReasonDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/returnReason/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 修改退货原因启用状态\n */\nexport function returnReasonUpdateStatusAPI(params: { ids: string; status: number }) {\n  return http({\n    url: '/returnReason/update/status',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 添加退货原因\n */\nexport function returnReasonCreateAPI(data: OmsOrderReturnReason) {\n  return http({\n    url: '/returnReason/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 获取单个退货原因详情信息\n */\nexport function getReturnReasonByIdAPI(id: number) {\n  return http<OmsOrderReturnReason>({\n    url: '/returnReason/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 修改退货原因\n */\nexport function returnReasonUpdateAPI(id: number, data: OmsOrderReturnReason) {\n  return http({\n    url: '/returnReason/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/role.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { UmsMenu } from '@/types/menu'\nimport type { UmsRole } from '@/types/role'\nimport http from '@/utils/http'\n\n/**\n * 获取所有角色列表\n */\nexport function getRoleListAllAPI() {\n  return http<UmsRole[]>({\n    url: '/role/listAll',\n    method: 'get',\n  })\n}\n\n/**\n * 根据角色名称分页获取角色列表\n */\nexport function getRoleListAPI(params: PageParam) {\n  return http<CommonPage<UmsRole>>({\n    url: '/role/list',\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 添加角色\n */\nexport function roleCreateAPI(data: UmsRole) {\n  return http({\n    url: '/role/create',\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 根据ID修改角色\n */\nexport function roleUpdateByIdAPI(id: number, data: UmsRole) {\n  return http({\n    url: '/role/update/' + id,\n    method: 'post',\n    data: data,\n  })\n}\n\n/**\n * 修改角色状态启用状态\n */\nexport function roleUpdateStatusAPI(id: number, params: { status: number }) {\n  return http({\n    url: '/role/updateStatus/' + id,\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 根据ids批量删除角色\n */\nexport function roleDeleteByIdsAPI(params: { ids: string }) {\n  return http({\n    url: '/role/delete',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 根据角色ID获取菜单列表\n */\nexport function roleListMenuByRoleIdAPI(id: number) {\n  return http<UmsMenu[]>({\n    url: '/role/listMenu/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 给角色分配菜单\n */\nexport function roleAllocMenuAPI(params: {\n  /** 角色ID */\n  roleId: number\n  /** 菜单ID，多个以逗号分割 */\n  menuIds: string\n}) {\n  return http({\n    url: '/role/allocMenu',\n    method: 'post',\n    params: params,\n  })\n}\n\n/**\n * 获取角色相关资源\n */\nexport function roleListResourceById(id: number) {\n  return http({\n    url: '/role/listResource/' + id,\n    method: 'get',\n  })\n}\n\n/**\n * 给角色分配资源\n */\nexport function roleAllocResourceAPI(params: {\n  /** 角色ID */\n  roleId: number\n  /** 资源ID，多个以逗号分割 */\n  resourceIds: string\n}) {\n  return http({\n    url: '/role/allocResource',\n    method: 'post',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/apis/skuStock.ts",
    "content": "import type { PmsSkuStock } from '@/types/skuStock'\nimport http from '@/utils/http'\n\n/**\n * 根据商品ID及sku编码模糊搜索sku库存\n */\nexport function getSkuListByPidAPI(pid: number, params: { keyword?: string }) {\n  return http<PmsSkuStock[]>({\n    url: '/sku/' + pid,\n    method: 'get',\n    params: params,\n  })\n}\n\n/**\n * 根据商品ID批量更新sku库存信息\n */\nexport function skuUpdateByPidAPI(pid: number, data: PmsSkuStock[]) {\n  return http({\n    url: '/sku/update/' + pid,\n    method: 'post',\n    data: data,\n  })\n}\n"
  },
  {
    "path": "src/apis/subject.ts",
    "content": "import type { CommonPage, PageParam } from '@/types/common'\nimport type { CmsSubject } from '@/types/subject'\nimport http from '@/utils/http'\n\n/**\n * 获取全部商品专题\n */\nexport function getSubjectListAllAPI() {\n  return http<CmsSubject[]>({\n    url: '/subject/listAll',\n    method: 'get',\n  })\n}\n\n/**\n * 根据专题名称分页获取商品专题\n */\nexport function getSubjectListAPI(params: PageParam) {\n  return http<CommonPage<CmsSubject>>({\n    url: '/subject/list',\n    method: 'get',\n    params: params,\n  })\n}\n"
  },
  {
    "path": "src/components/Breadcrumb/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useRoute, type RouteLocationMatched } from 'vue-router'\nimport { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'\n\n// 定义组件名称\ndefineOptions({\n  name: 'Breadcrumb'\n})\n\n// 显式注册Element Plus组件\ndefineExpose({\n  ElBreadcrumb,\n  ElBreadcrumbItem\n})\n\n// 响应式数据\nconst levelList = ref<RouteLocationMatched[]>([])\nconst route = useRoute()\n\n// 计算属性，只返回有标题的面包屑项\nconst visibleLevelList = computed(() => {\n  return levelList.value.filter(item => item.meta?.title)\n})\n\n// 获取面包屑路径\nconst getBreadcrumb = () => {\n  let matched = route.matched.filter(item => item.name)\n  const first = matched[0]\n  if (first && first.name !== 'home') {\n    const homeRoute: RouteLocationMatched = { ...first, path: '/home', meta: { title: '首页' }, name: 'home' }\n    matched = [homeRoute].concat(matched)\n  }\n  levelList.value = matched\n}\n\n// 监听路由变化\nwatch(route, () => {\n  getBreadcrumb()\n}, { immediate: true })\n\n// 初始化\ngetBreadcrumb()\n</script>\n\n<template>\n  <el-breadcrumb class=\"app-breadcrumb\" separator=\"/\">\n    <transition-group name=\"breadcrumb\">\n      <el-breadcrumb-item v-for=\"(item, index) in visibleLevelList\" :key=\"item.path\">\n        <span v-if=\"item.redirect === 'noredirect' || index == visibleLevelList.length - 1\" class=\"no-redirect\">{{\n          item.meta.title\n          }}</span>\n        <router-link v-else :to=\"typeof item.redirect === 'string' ? item.redirect : item.path\">{{ item.meta.title\n          }}</router-link>\n      </el-breadcrumb-item>\n    </transition-group>\n  </el-breadcrumb>\n</template>\n\n<style lang=\"scss\" scoped>\n.app-breadcrumb.el-breadcrumb {\n  display: inline-block;\n  font-size: 14px;\n  line-height: 50px;\n  margin-left: 10px;\n\n  .no-redirect {\n    color: #97a8be;\n    cursor: text;\n  }\n}\n</style>\n"
  },
  {
    "path": "src/components/Hamburger/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport type { PropType } from 'vue';\n\n// 定义组件名称\ndefineOptions({\n  name: 'Hamburger'\n})\n\n// 定义props\ndefineProps({\n  isActive: {\n    type: Boolean,\n    default: false\n  },\n  toggleClick: {\n    type: Function as PropType<() => void>,\n    default: null\n  }\n})\n</script>\n\n<template>\n  <div>\n    <svg t=\"1492500959545\" @click=\"toggleClick\" class=\"hamburger\" :class=\"{ 'is-active': isActive }\" style=\"\"\n      viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1691\"\n      xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"64\" height=\"64\">\n      <path\n        d=\"M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z\"\n        p-id=\"1692\"></path>\n      <path\n        d=\"M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z\"\n        p-id=\"1693\"></path>\n      <path\n        d=\"M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z\"\n        p-id=\"1694\"></path>\n    </svg>\n  </div>\n</template>\n\n<style scoped>\n.hamburger {\n  display: inline-block;\n  cursor: pointer;\n  width: 20px;\n  height: 20px;\n  transform: rotate(90deg);\n  transition: .38s;\n  transform-origin: 50% 50%;\n}\n\n.hamburger.is-active {\n  transform: rotate(0deg);\n}\n</style>\n"
  },
  {
    "path": "src/components/ScrollBar/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { ref } from 'vue'\n\n// 定义组件名称\ndefineOptions({\n  name: 'ScrollBar'\n})\n\nconst delta = 15\n\n// 响应式数据\nconst top = ref(0)\nconst scrollContainer = ref<HTMLDivElement>()\nconst scrollWrapper = ref<HTMLDivElement>()\n\n// 处理滚动事件\nconst handleScroll = (e: WheelEvent) => {\n  const eventDelta = -e.deltaY * 3\n  const $container = scrollContainer.value\n  if (!$container) return\n  const $containerHeight = $container.offsetHeight\n  const $wrapper = scrollWrapper.value\n  if (!$wrapper) return\n  const $wrapperHeight = $wrapper.offsetHeight\n\n  if (eventDelta > 0) {\n    top.value = Math.min(0, top.value + eventDelta)\n  } else {\n    if ($containerHeight - delta < $wrapperHeight) {\n      if (top.value < -($wrapperHeight - $containerHeight + delta)) {\n        // 当已经到达边界时，无需重新赋值\n      } else {\n        top.value = Math.max(top.value + eventDelta, $containerHeight - $wrapperHeight - delta)\n      }\n    } else {\n      top.value = 0\n    }\n  }\n}\n</script>\n\n<template>\n  <div class=\"scroll-container\" ref=\"scrollContainer\" @wheel.prevent=\"handleScroll\">\n    <div class=\"scroll-wrapper\" ref=\"scrollWrapper\" :style=\"{ top: top + 'px' }\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<style rel=\"stylesheet/scss\" lang=\"scss\" scoped>\n@use '../../styles/variables.scss' as vars;\n\n.scroll-container {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  background-color: vars.$menuBg;\n\n  .scroll-wrapper {\n    position: absolute;\n    width: 100% !important;\n  }\n}\n</style>\n"
  },
  {
    "path": "src/components/SvgIcon/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\n// 定义组件名称\ndefineOptions({\n  name: 'svg-icon'\n})\n\n// 定义props\nconst props = defineProps({\n  iconClass: {\n    type: String,\n    required: true\n  },\n  className: {\n    type: String\n  }\n})\n\nconst iconName = computed(() => {\n  return `#icon-${props.iconClass}`\n})\n\nconst svgClass = computed(() => {\n  if (props.className) {\n    return 'svg-icon ' + props.className\n  } else {\n    return 'svg-icon'\n  }\n})\n</script>\n\n<template>\n  <svg :class=\"svgClass\" aria-hidden=\"true\">\n    <use :xlink:href=\"iconName\"></use>\n  </svg>\n</template>\n\n<style scoped>\n.svg-icon {\n  width: 1.2em;\n  height: 1.2em;\n  vertical-align: -0.18em;\n  fill: currentColor;\n  overflow: hidden;\n}\n</style>\n"
  },
  {
    "path": "src/components/Tinymce/index.vue",
    "content": "<template>\n  <div class=\"rich-editor\">\n    <editor v-model=\"contentValue\" :init=\"initOptions\" :disabled=\"disabled\" @onClick=\"onClick\" @onBlur=\"onBlur\"\n      @onFocus=\"onFocus\" tinymceScriptSrc=\"./tinymce6.8.6/tinymce.min.js\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport Editor from '@tinymce/tinymce-vue'\n\n// minio上传路径\nconst minioUploadUrl = import.meta.env.VITE_BASE_SERVER_URL + import.meta.env.VITE_MINIO_UPLOAD_URL\n\ninterface Props {\n  modelValue: string\n  disabled?: boolean\n  height?: number\n  toolbar?: string[]\n  plugins?: string[]\n  placeholder?: string\n}\n\ninterface BlobInfo {\n  blob: () => Blob\n  filename: () => string\n  id: () => string\n  name: () => string\n  base64: () => string\n}\n\ntype UploadProgressCallback = (percent: number) => void\n\ninterface Emits {\n  (e: 'update:modelValue', value: string): void\n  (e: 'click'): void\n  (e: 'blur'): void\n  (e: 'focus'): void\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  disabled: false,\n  height: 400,\n  toolbar: () => [\n    'blocks | undo redo remove| bold italic underline strikethrough removeformat | fontselect fontsizeselect formatselect | alignleft aligncenter alignright alignjustify',\n    'fontsize forecolor backcolor bullist numlist |link image table | code fullscreen'\n  ],\n  plugins: () => [\n    'link', 'image', 'table', 'lists', 'code', 'fullscreen'\n  ],\n  placeholder: ''\n})\n\nconst emit = defineEmits<Emits>()\n\nconst contentValue = ref(props.modelValue)\n\n// 监听外部值变化\nwatch(\n  () => props.modelValue,\n  (newValue) => {\n    if (newValue !== contentValue.value) {\n      contentValue.value = newValue\n    }\n  }\n)\n\n// 监听内部值变化\nwatch(contentValue, (newValue) => {\n  emit('update:modelValue', newValue)\n})\n\nconst initOptions = {\n  language: 'zh_CN',\n  language_url: './tinymce6.8.6/langs/zh_CN.js',\n  selector: '#mytextarea',\n  height: props.height,\n  menubar: false,\n  plugins: props.plugins,\n  toolbar: props.toolbar,\n  placeholder: props.placeholder,\n  branding: false, // 隐藏 tinyMCE 品牌标识\n  resize: true, // 允许调整大小\n  elementpath: false, // 隐藏底部元素路径\n  content_style: `\n    body {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n      font-size: 14px;\n      margin: 10px;\n      line-height: 1.6;\n    }\n  `,\n  images_upload_handler: (blobInfo: BlobInfo, progress: UploadProgressCallback) => new Promise((resolve, reject) => {\n    // 发起请求上传图片（目前仅支持minio上传）\n    const xhr = new XMLHttpRequest()\n    xhr.open('POST', minioUploadUrl)\n    // 上传进度回调\n    xhr.upload.onprogress = (e) => {\n      progress(e.loaded / e.total * 100)\n    }\n    // 上传完成回调\n    xhr.onload = () => {\n      if (xhr.status === 403) {\n        reject('HTTP Error: ' + xhr.status)\n        return\n      }\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject('HTTP Error: ' + xhr.status)\n        return\n      }\n      const json = JSON.parse(xhr.responseText)\n      console.log('images_upload:', json)\n      if (!json || json.code !== 200) {\n        reject('上传失败！')\n        return\n      }\n      resolve(json.data.url)\n    }\n    // 上传失败回调\n    xhr.onerror = () => {\n      reject('Image upload failed due to a XHR Transport error. Code: ' + xhr.status)\n    }\n    const formData = new FormData()\n    formData.append('file', blobInfo.blob(), blobInfo.filename())\n    xhr.send(formData)\n  })\n}\n\nconst onClick = () => {\n  emit('click')\n}\n\nconst onBlur = () => {\n  emit('blur')\n}\n\nconst onFocus = () => {\n  emit('focus')\n}\n</script>\n\n<style scoped>\n.rich-editor {\n  border: 1px solid #dcdfe6;\n  border-radius: 4px;\n}\n\n:deep(.tox-tinymce) {\n  border-radius: 4px;\n  border: none;\n}\n\n:deep(.tox-edit-area) {\n  min-height: 300px;\n}\n</style>\n"
  },
  {
    "path": "src/components/Upload/multiUpload.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport { ossPolicyAPI } from '@/apis/oss' // 假设这是API文件的正确路径\nimport { Plus, } from '@element-plus/icons-vue'\nimport { ElMessage, type UploadProps, type UploadUserFile } from 'element-plus'\n\n// 定义属性\nconst props = defineProps({\n  // 上传图片路径（Vue 3中v-model对应的属性值为modelValue）\n  modelValue: {\n    type: Array<string>,\n    default: []\n  },\n  //最大上传图片数量\n  maxCount: {\n    type: Number,\n    default: 5\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['update:modelValue'])\n\n// 定义OSS上传所需信息\nconst dataObj = ref({\n  policy: '',\n  signature: '',\n  key: '',\n  ossaccessKeyId: '',\n  dir: '',\n  host: '',\n})\n// 控制图片预览框的显示隐藏\nconst dialogVisible = ref(false)\n// 是否使用OSS上传\nconst useOss = import.meta.env.VITE_USE_OSS === 'true'\n// oss上传路径\nconst ossUploadUrl = import.meta.env.VITE_OSS_UPLOAD_URL\n// minio上传路径\nconst minioUploadUrl = import.meta.env.VITE_BASE_SERVER_URL + import.meta.env.VITE_MINIO_UPLOAD_URL\n// 上传文件列表\nconst fileList = ref<UploadUserFile[]>([])\n// 弹框中的图片路径\nconst dialogImageUrl = ref('')\n\n// 由于图片url是动态加载的，所以需要使用watch来监听\nwatch(() => props.modelValue, (newVal) => {\n  if (newVal) {\n    fileList.value = newVal.map(item => {\n      const fileName = item.substring(item.lastIndexOf(\"/\") + 1)\n      return {\n        name: fileName,\n        url: item\n      }\n    })\n  } else {\n    fileList.value = []\n  }\n}, { immediate: true })\n\n// 处理input事件\nconst emitInput = (val: string[]) => {\n  emit('update:modelValue', val)\n}\n\n// 处理图片删除\nconst handleRemove: UploadProps['onRemove'] = (file, fileList) => {\n  // 从fileList中过滤掉被删除的文件，只保留剩余的文件\n  const remainingFiles = fileList.filter(item => item.uid !== file.uid)\n  // 更新fileList\n  fileList = remainingFiles\n  // 将剩余文件的URL数组传递给父组件\n  const urls = remainingFiles.map(item => item.url || '')\n  emitInput(urls)\n}\n\n// 处理图片预览\nconst handlePreview: UploadProps['onPreview'] = (file) => {\n  dialogVisible.value = true\n  dialogImageUrl.value = file.url!\n}\n\n// 在图片上传前处理，用于获取OSS请求参数\nconst beforeUpload: UploadProps['beforeUpload'] = async () => {\n  if (!useOss) {\n    return true\n  }\n  try {\n    const res = await ossPolicyAPI()\n    dataObj.value.policy = res.data.policy\n    dataObj.value.signature = res.data.signature\n    dataObj.value.ossaccessKeyId = res.data.accessKeyId\n    dataObj.value.key = res.data.dir + '/${filename}'\n    dataObj.value.dir = res.data.dir\n    dataObj.value.host = res.data.host\n    return true\n  } catch (err) {\n    console.log(err)\n    return false\n  }\n}\n\n// 处理图片上传成功\nconst handleUploadSuccess: UploadProps['onSuccess'] = (res, file) => {\n  if (!useOss && res.code === 500) {\n    // MinIO文件上传失败处理\n    ElMessage({\n      message: '文件上传失败！',\n      type: 'error',\n      duration: 3 * 1000,\n    })\n    return\n  }\n  let url = ''\n  if (useOss) {\n    // OSS上传需要拼接路径\n    url = dataObj.value.host + '/' + dataObj.value.dir + '/' + file.name\n  } else {\n    url = res.data?.url\n  }\n  fileList.value.push({ name: file.name, url: url })\n  const urls = fileList.value.map(item => item.url || '')\n  emitInput(urls)\n}\n</script>\n\n<template>\n  <div>\n    <el-upload :action=\"useOss ? ossUploadUrl : minioUploadUrl\" list-type=\"picture-card\" :file-list=\"fileList\"\n      :limit=\"maxCount\" :before-upload=\"beforeUpload\" :on-remove=\"handleRemove\" :on-success=\"handleUploadSuccess\"\n      :on-preview=\"handlePreview\">\n      <el-icon>\n        <Plus />\n      </el-icon>\n    </el-upload>\n    <el-dialog v-model=\"dialogVisible\">\n      <img :src=\"dialogImageUrl\" alt=\"\">\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/components/Upload/singleUpload.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport { ossPolicyAPI } from '@/apis/oss' // 假设这是API文件的正确路径\nimport { ElMessage, type UploadProps, type UploadUserFile } from 'element-plus'\n\n// 定义属性\nconst props = defineProps({\n  // 上传图片路径（Vue 3中v-model对应的属性值为modelValue）\n  modelValue: {\n    type: String,\n    default: ''\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['update:modelValue'])\n\n// 定义OSS上传所需信息\nconst dataObj = ref({\n  policy: '',\n  signature: '',\n  key: '',\n  ossaccessKeyId: '',\n  dir: '',\n  host: '',\n})\n// 控制图片预览框的显示隐藏\nconst dialogVisible = ref(false)\n// 是否使用OSS上传\nconst useOss = import.meta.env.VITE_USE_OSS === 'true'\n// oss上传路径\nconst ossUploadUrl = import.meta.env.VITE_OSS_UPLOAD_URL\n// minio上传路径\nconst minioUploadUrl = import.meta.env.VITE_BASE_SERVER_URL + import.meta.env.VITE_MINIO_UPLOAD_URL\n// 上传文件列表\nconst fileList = ref<UploadUserFile[]>([])\n\n// 由于图片url是动态加载的，所以需要使用watch来监听\nwatch(() => props.modelValue, (newVal) => {\n  if (newVal) {\n    const fileName = newVal.substring(newVal.lastIndexOf(\"/\") + 1)\n    fileList.value = [{\n      name: fileName,\n      url: newVal\n    }]\n  } else {\n    fileList.value = []\n  }\n}, { immediate: true })\n\n// 处理input事件\nconst emitInput = (val: string) => {\n  emit('update:modelValue', val)\n}\n\n// 处理图片删除\nconst handleRemove: UploadProps['onRemove'] = () => {\n  emitInput('')\n}\n\n// 处理图片预览\nconst handlePreview: UploadProps['onPreview'] = () => {\n  dialogVisible.value = true\n}\n\n// 在图片上传前处理，用于获取OSS请求参数\nconst beforeUpload: UploadProps['beforeUpload'] = async () => {\n  if (!useOss) {\n    return true\n  }\n  try {\n    const res = await ossPolicyAPI()\n    dataObj.value.policy = res.data.policy\n    dataObj.value.signature = res.data.signature\n    dataObj.value.ossaccessKeyId = res.data.accessKeyId\n    dataObj.value.key = res.data.dir + '/${filename}'\n    dataObj.value.dir = res.data.dir\n    dataObj.value.host = res.data.host\n    return true\n  } catch (err) {\n    console.log(err)\n    return false\n  }\n}\n\n// 处理图片上传成功\nconst handleUploadSuccess: UploadProps['onSuccess'] = (res, file) => {\n  if (!useOss && res.code === 500) {\n    // MinIO文件上传失败处理\n    ElMessage({\n      message: '文件上传失败！',\n      type: 'error',\n      duration: 3 * 1000,\n    })\n    return\n  }\n  let url = ''\n  if (useOss) {\n    // OSS上传需要拼接路径\n    url = dataObj.value.host + '/' + dataObj.value.dir + '/' + file.name\n  } else {\n    url = res.data?.url\n  }\n  fileList.value.pop()\n  fileList.value.push({ name: file.name, url: url })\n  emitInput(url)\n}\n</script>\n\n<template>\n  <div>\n    <el-upload :action=\"useOss ? ossUploadUrl : minioUploadUrl\" list-type=\"picture\" :multiple=\"false\"\n      :show-file-list=\"props.modelValue ? true : false\" :file-list=\"fileList\" :before-upload=\"beforeUpload\"\n      :on-remove=\"handleRemove\" :on-success=\"handleUploadSuccess\" :on-preview=\"handlePreview\">\n      <el-button size=\"small\" type=\"primary\">点击上传</el-button>\n      <template #tip>\n        <div class=\"el-upload__tip\">只能上传jpg/png文件，且不超过10MB</div>\n      </template>\n    </el-upload>\n    <el-dialog v-model=\"dialogVisible\">\n      <img width=\"100%\" :src=\"fileList[0]?.url\" alt=\"\">\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/icons/index.ts",
    "content": "import SvgIcon from '@/components/SvgIcon/index.vue' // svg组件\nimport type { App } from 'vue'\n\n// 导出组件注册函数，在main.js中使用\nexport function setupSvgIcon(app: App) {\n  app.component('svg-icon', SvgIcon)\n}\n\n// 用import.meta.glob自动导入所有svg图标\nconst modules = import.meta.glob('./svg/*.svg')\n\n// 加载所有svg模块\nObject.keys(modules).forEach(key => {\n  const module = modules[key]\n  if (module) {\n    module()\n  }\n})\n"
  },
  {
    "path": "src/main.ts",
    "content": "import { createApp } from 'vue'\nimport App from './App.vue'\nimport { createPinia } from 'pinia'\nimport router from './router'\nimport '@/styles/index.scss' // 引入全局css样式\nimport 'normalize.css/normalize.css' // 重置css统一浏览器默认样式\nimport { setupSvgIcon } from './icons'\nimport 'virtual:svg-icons-register' // 引入SVG图标注册器（关键步骤）\nimport '@/router/guard' // 引入vue-router的前置和后置守卫函数\nimport piniaPluginPersistedstate from 'pinia-plugin-persistedstate'\n\nconst app = createApp(App)\nconst pinia = createPinia()\n// pinia启用持久化插件\npinia.use(piniaPluginPersistedstate)\n// 以插件形式注册pinia\napp.use(pinia)\n// 以插件形式注册vue-router\napp.use(router)\n// 以插件形式注册SvgIcon组件\nsetupSvgIcon(app)\napp.mount('#app')\n"
  },
  {
    "path": "src/router/guard.ts",
    "content": "import router from '@/router/index'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport { useUserStore } from '@/stores/user'\nimport usePermissionStore from '@/stores/permission'\n\n// 无需登陆的白名单路径\nconst whiteList = ['/login']\n// 配置路由前置守卫函数（每次路由跳转都会执行）\nrouter.beforeEach((to, from, next) => {\n  NProgress.start()\n  const userStore = useUserStore()\n  const permissionStore = usePermissionStore()\n  if (userStore.userInfo.token) {\n    if (to.path === '/login') {\n      // 登录状态下访问login直接跳转到首页\n      next({ path: '/' })\n      NProgress.done()\n    } else {\n      if (permissionStore.addRouters.length === 0) {\n        // 登录状态下无动态路由时根据menus生成动态路由\n        permissionStore.generateRoutes({\n          menus: userStore.userInfo.menus,\n          username: userStore.userInfo.username,\n        })\n        permissionStore.addRouters.forEach(route => {\n          router.addRoute(route)\n        })\n        next({ ...to, replace: true })\n      } else {\n        next()\n      }\n    }\n  } else {\n    if (whiteList.indexOf(to.path) !== -1) {\n      // 未登录状态下白名单路径放行\n      next()\n    } else {\n      // 未登录状态下非白名单路径跳转到登录页\n      next('/login')\n      NProgress.done()\n    }\n  }\n})\n\n// 配置路由后置函数守卫函数\nrouter.afterEach(() => {\n  NProgress.done()\n})\n"
  },
  {
    "path": "src/router/index.ts",
    "content": "import { createRouter, createWebHashHistory } from 'vue-router'\nimport Layout from '@/views/layout/Layout.vue'\nimport type { RouteRecordExt } from '@/types/router'\n\nexport const constantRouterMap: RouteRecordExt[] = [\n  { path: '/404', component: () => import('@/views/normal/404/index.vue'), hidden: true },\n  { path: '/login', component: () => import('@/views/normal/login/index.vue'), hidden: true },\n  {\n    path: '',\n    component: Layout,\n    redirect: '/home',\n    meta: { title: '首页', icon: 'home' },\n    children: [\n      {\n        path: 'home',\n        name: 'home',\n        component: () => import('@/views/home/index.vue'),\n        meta: { title: '首页', icon: 'dashboard' },\n      },\n      {\n        name: 'document',\n        path: 'https://www.macrozheng.com',\n        component: () => import('@/views/normal/link/index.vue'),\n        meta: { title: '学习教程', icon: 'document' },\n      },\n      {\n        name: 'video',\n        path: 'https://www.macrozheng.com/mall/foreword/mall_video.html',\n        component: () => import('@/views/normal/link/index.vue'),\n        meta: { title: '视频教程', icon: 'video' },\n      },\n      // {\n      //   path: 'test',\n      //   name: 'test',\n      //   component: () => import('@/views/test/index.vue'),\n      //   meta: { title: '组件测试', icon: 'product-cate' },\n      // },\n    ],\n  },\n]\n\nexport const asyncRouterMap: RouteRecordExt[] = [\n  {\n    path: '/pms',\n    component: Layout,\n    redirect: '/pms/product',\n    name: 'pms',\n    meta: { title: '商品', icon: 'product' },\n    children: [\n      {\n        path: 'product',\n        name: 'product',\n        component: () => import('@/views/pms/product/index.vue'),\n        meta: { title: '商品列表', icon: 'product-list' },\n      },\n      {\n        path: 'addProduct',\n        name: 'addProduct',\n        component: () => import('@/views/pms/product/add.vue'),\n        meta: { title: '添加商品', icon: 'product-add' },\n      },\n      {\n        path: 'updateProduct',\n        name: 'updateProduct',\n        component: () => import('@/views/pms/product/update.vue'),\n        meta: { title: '修改商品', icon: 'product-add' },\n        hidden: true,\n      },\n      {\n        path: 'productCate',\n        name: 'productCate',\n        component: () => import('@/views/pms/productCate/index.vue'),\n        meta: { title: '商品分类', icon: 'product-cate' },\n      },\n      {\n        path: 'addProductCate',\n        name: 'addProductCate',\n        component: () => import('@/views/pms/productCate/add.vue'),\n        meta: { title: '添加商品分类' },\n        hidden: true,\n      },\n      {\n        path: 'updateProductCate',\n        name: 'updateProductCate',\n        component: () => import('@/views/pms/productCate/update.vue'),\n        meta: { title: '修改商品分类' },\n        hidden: true,\n      },\n      {\n        path: 'productAttr',\n        name: 'productAttr',\n        component: () => import('@/views/pms/productAttr/index.vue'),\n        meta: { title: '商品类型', icon: 'product-attr' },\n      },\n      {\n        path: 'productAttrList',\n        name: 'productAttrList',\n        component: () => import('@/views/pms/productAttr/productAttrList.vue'),\n        meta: { title: '商品属性列表' },\n        hidden: true,\n      },\n      {\n        path: 'addProductAttr',\n        name: 'addProductAttr',\n        component: () => import('@/views/pms/productAttr/addProductAttr.vue'),\n        meta: { title: '添加商品属性' },\n        hidden: true,\n      },\n      {\n        path: 'updateProductAttr',\n        name: 'updateProductAttr',\n        component: () => import('@/views/pms/productAttr/updateProductAttr.vue'),\n        meta: { title: '修改商品属性' },\n        hidden: true,\n      },\n      {\n        path: 'brand',\n        name: 'brand',\n        component: () => import('@/views/pms/brand/index.vue'),\n        meta: { title: '品牌管理', icon: 'product-brand' },\n      },\n      {\n        path: 'addBrand',\n        name: 'addBrand',\n        component: () => import('@/views/pms/brand/add.vue'),\n        meta: { title: '添加品牌' },\n        hidden: true,\n      },\n      {\n        path: 'updateBrand',\n        name: 'updateBrand',\n        component: () => import('@/views/pms/brand/update.vue'),\n        meta: { title: '编辑品牌' },\n        hidden: true,\n      },\n    ],\n  },\n  {\n    path: '/oms',\n    component: Layout,\n    redirect: '/oms/order',\n    name: 'oms',\n    meta: { title: '订单', icon: 'order' },\n    children: [\n      {\n        path: 'order',\n        name: 'order',\n        component: () => import('@/views/oms/order/index.vue'),\n        meta: { title: '订单列表', icon: 'product-list' },\n      },\n      {\n        path: 'orderDetail',\n        name: 'orderDetail',\n        component: () => import('@/views/oms/order/orderDetail.vue'),\n        meta: { title: '订单详情' },\n        hidden: true,\n      },\n      {\n        path: 'deliverOrderList',\n        name: 'deliverOrderList',\n        component: () => import('@/views/oms/order/deliverOrderList.vue'),\n        meta: { title: '发货列表' },\n        hidden: true,\n      },\n      {\n        path: 'orderSetting',\n        name: 'orderSetting',\n        component: () => import('@/views/oms/order/setting.vue'),\n        meta: { title: '订单设置', icon: 'order-setting' },\n      },\n      {\n        path: 'returnApply',\n        name: 'returnApply',\n        component: () => import('@/views/oms/apply/index.vue'),\n        meta: { title: '退货申请处理', icon: 'order-return' },\n      },\n      {\n        path: 'returnReason',\n        name: 'returnReason',\n        component: () => import('@/views/oms/apply/reason.vue'),\n        meta: { title: '退货原因设置', icon: 'order-return-reason' },\n      },\n      {\n        path: 'returnApplyDetail',\n        name: 'returnApplyDetail',\n        component: () => import('@/views/oms/apply/applyDetail.vue'),\n        meta: { title: '退货申请详情' },\n        hidden: true,\n      },\n    ],\n  },\n  {\n    path: '/sms',\n    component: Layout,\n    redirect: '/sms/coupon',\n    name: 'sms',\n    meta: { title: '营销', icon: 'sms' },\n    children: [\n      {\n        path: 'flash',\n        name: 'flash',\n        component: () => import('@/views/sms/flash/index.vue'),\n        meta: { title: '秒杀活动列表', icon: 'sms-flash' },\n      },\n      {\n        path: 'flashSession',\n        name: 'flashSession',\n        component: () => import('@/views/sms/flash/sessionList.vue'),\n        meta: { title: '秒杀时间段列表' },\n        hidden: true,\n      },\n      {\n        path: 'selectSession',\n        name: 'selectSession',\n        component: () => import('@/views/sms/flash/selectSessionList.vue'),\n        meta: { title: '秒杀时间段选择' },\n        hidden: true,\n      },\n      {\n        path: 'flashProductRelation',\n        name: 'flashProductRelation',\n        component: () => import('@/views/sms/flash/productRelationList.vue'),\n        meta: { title: '秒杀商品列表' },\n        hidden: true,\n      },\n      {\n        path: 'coupon',\n        name: 'coupon',\n        component: () => import('@/views/sms/coupon/index.vue'),\n        meta: { title: '优惠券列表', icon: 'sms-coupon' },\n      },\n      {\n        path: 'addCoupon',\n        name: 'addCoupon',\n        component: () => import('@/views/sms/coupon/add.vue'),\n        meta: { title: '添加优惠券' },\n        hidden: true,\n      },\n      {\n        path: 'updateCoupon',\n        name: 'updateCoupon',\n        component: () => import('@/views/sms/coupon/update.vue'),\n        meta: { title: '修改优惠券' },\n        hidden: true,\n      },\n      {\n        path: 'couponHistory',\n        name: 'couponHistory',\n        component: () => import('@/views/sms/coupon/history.vue'),\n        meta: { title: '优惠券领取详情' },\n        hidden: true,\n      },\n      {\n        path: 'brand',\n        name: 'homeBrand',\n        component: () => import('@/views/sms/brand/index.vue'),\n        meta: { title: '品牌推荐', icon: 'product-brand' },\n      },\n      {\n        path: 'new',\n        name: 'homeNew',\n        component: () => import('@/views/sms/new/index.vue'),\n        meta: { title: '新品推荐', icon: 'sms-new' },\n      },\n      {\n        path: 'hot',\n        name: 'homeHot',\n        component: () => import('@/views/sms/hot/index.vue'),\n        meta: { title: '人气推荐', icon: 'sms-hot' },\n      },\n      {\n        path: 'subject',\n        name: 'homeSubject',\n        component: () => import('@/views/sms/subject/index.vue'),\n        meta: { title: '专题推荐', icon: 'sms-subject' },\n      },\n      {\n        path: 'advertise',\n        name: 'homeAdvertise',\n        component: () => import('@/views/sms/advertise/index.vue'),\n        meta: { title: '广告列表', icon: 'sms-ad' },\n      },\n      {\n        path: 'addAdvertise',\n        name: 'addHomeAdvertise',\n        component: () => import('@/views/sms/advertise/add.vue'),\n        meta: { title: '添加广告' },\n        hidden: true,\n      },\n      {\n        path: 'updateAdvertise',\n        name: 'updateHomeAdvertise',\n        component: () => import('@/views/sms/advertise/update.vue'),\n        meta: { title: '编辑广告' },\n        hidden: true,\n      },\n    ],\n  },\n  {\n    path: '/ums',\n    component: Layout,\n    redirect: '/ums/admin',\n    name: 'ums',\n    meta: { title: '权限', icon: 'ums' },\n    children: [\n      {\n        path: 'admin',\n        name: 'admin',\n        component: () => import('@/views/ums/admin/index.vue'),\n        meta: { title: '用户列表', icon: 'ums-admin' },\n      },\n      {\n        path: 'role',\n        name: 'role',\n        component: () => import('@/views/ums/role/index.vue'),\n        meta: { title: '角色列表', icon: 'ums-role' },\n      },\n      {\n        path: 'allocMenu',\n        name: 'allocMenu',\n        component: () => import('@/views/ums/role/allocMenu.vue'),\n        meta: { title: '分配菜单' },\n        hidden: true,\n      },\n      {\n        path: 'allocResource',\n        name: 'allocResource',\n        component: () => import('@/views/ums/role/allocResource.vue'),\n        meta: { title: '分配资源' },\n        hidden: true,\n      },\n      {\n        path: 'menu',\n        name: 'menu',\n        component: () => import('@/views/ums/menu/index.vue'),\n        meta: { title: '菜单列表', icon: 'ums-menu' },\n      },\n      {\n        path: 'addMenu',\n        name: 'addMenu',\n        component: () => import('@/views/ums/menu/add.vue'),\n        meta: { title: '添加菜单' },\n        hidden: true,\n      },\n      {\n        path: 'updateMenu',\n        name: 'updateMenu',\n        component: () => import('@/views/ums/menu/update.vue'),\n        meta: { title: '修改菜单' },\n        hidden: true,\n      },\n      {\n        path: 'resource',\n        name: 'resource',\n        component: () => import('@/views/ums/resource/index.vue'),\n        meta: { title: '资源列表', icon: 'ums-resource' },\n      },\n      {\n        path: 'resourceCategory',\n        name: 'resourceCategory',\n        component: () => import('@/views/ums/resource/categoryList.vue'),\n        meta: { title: '资源分类' },\n        hidden: true,\n      },\n    ],\n  },\n]\n\n// createWebHistory（History 模式）地址格式（需要服务器配置）：http://domain.com/admin/home\n// createWebHashHistory（Hash 模式）地址格式（会多带一个#号）：http://domain.com/admin/#/home\nconst router = createRouter({\n  history: createWebHashHistory(),\n  routes: constantRouterMap,\n})\n\nexport default router\n"
  },
  {
    "path": "src/stores/app.ts",
    "content": "import { reactive, ref } from 'vue'\nimport { defineStore } from 'pinia'\n\nexport const useAppStore = defineStore('app', () => {\n  // 侧边栏状态\n  const sidebar = reactive({\n    opened: true,\n    withoutAnimation: false,\n  })\n  // 设备状态\n  const device = ref('desktop')\n\n  // 切换侧边栏\n  function toggleSideBar() {\n    sidebar.opened = !sidebar.opened\n  }\n\n  // 关闭侧边栏\n  function closeSideBar(withoutAnimation: boolean) {\n    sidebar.opened = false\n    sidebar.withoutAnimation = withoutAnimation\n  }\n\n  // 切换设备：desktop or mobile\n  function toggleDevice(deviceType: string) {\n    device.value = deviceType\n  }\n\n  return {\n    sidebar,\n    device,\n    toggleSideBar,\n    closeSideBar,\n    toggleDevice,\n  }\n})\n"
  },
  {
    "path": "src/stores/counter.ts",
    "content": "import { ref, computed } from 'vue'\nimport { defineStore } from 'pinia'\n\nexport const useCounterStore = defineStore('counter', () => {\n  const count = ref(0)\n  const doubleCount = computed(() => count.value * 2)\n  function increment() {\n    count.value++\n  }\n\n  return { count, doubleCount, increment }\n})\n"
  },
  {
    "path": "src/stores/order.ts",
    "content": "import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { OmsOrder } from '@/types/order'\n\nexport const useOrderStore = defineStore('order', () => {\n  // 批量发货时临时存储的订单列表（用于页面间传递数据）\n  const deliverOrderList = ref<OmsOrder[]>([])\n\n  // 设置需要传递的订单列表\n  const setDeliverOrderList = (list: OmsOrder[]) => {\n    deliverOrderList.value = list\n  }\n\n  return {\n    deliverOrderList,\n    setDeliverOrderList,\n  }\n})\n"
  },
  {
    "path": "src/stores/permission.ts",
    "content": "import { defineStore } from 'pinia'\nimport { shallowRef } from 'vue'\nimport { asyncRouterMap, constantRouterMap } from '@/router/index'\nimport type { UmsMenu } from '@/types/menu'\nimport type { RouteRecordExt } from '@/types/router'\n\n//判断是否有权限访问该菜单\nfunction hasPermission(menus: UmsMenu[], route: RouteRecordExt) {\n  if (route.name) {\n    const currMenu = getMenu(route.name as string, menus)\n    if (currMenu != null) {\n      //设置菜单的标题、图标和可见性\n      if (currMenu.title != null && currMenu.title !== '') {\n        route.meta!.title = currMenu.title\n      }\n      if (currMenu.icon != null && currMenu.title !== '') {\n        route.meta!.icon = currMenu.icon\n      }\n      if (currMenu.hidden != null) {\n        route.hidden = currMenu.hidden !== 0\n      }\n      if (currMenu.sort != null) {\n        route.sort = currMenu.sort\n      }\n      return true\n    } else {\n      route.sort = 0\n      if (route.hidden !== undefined && route.hidden === true) {\n        route.sort = -1\n        return true\n      } else {\n        return false\n      }\n    }\n  } else {\n    return true\n  }\n}\n\n// 根据路由名称获取菜单\nfunction getMenu(name: string, menus: UmsMenu[]) {\n  return menus.find(menu => name === menu.name) || null\n}\n\n// 对菜单进行排序\nfunction sortRouters(accessedRouters: RouteRecordExt[]) {\n  accessedRouters.forEach(router => {\n    if (router.children && router.children.length > 0) {\n      router.children.sort((a, b) => compare(a, b))\n    }\n  })\n  accessedRouters.sort((a, b) => compare(a, b))\n}\n\n// 降序比较函数\nfunction compare(a: RouteRecordExt, b: RouteRecordExt) {\n  if (a.sort && b.sort) {\n    return b.sort - a.sort\n  } else {\n    return 0\n  }\n}\n\nexport const usePermissionStore = defineStore('permission', () => {\n  // 所有路由，静态路由+动态路由\n  const routers = shallowRef(constantRouterMap)\n  // 有权限访问的动态路由\n  const addRouters = shallowRef<RouteRecordExt[]>([])\n  // 是否为测试模式\n  const testMode = false\n\n  // 生成可访问的路由表\n  const generateRoutes = (data: { menus: UmsMenu[]; username: string }) => {\n    const { menus, username } = data\n    const accessedRouters = asyncRouterMap.filter(v => {\n      // 测试模式下admin帐号直接返回所有菜单\n      if (testMode && username === 'admin') return true\n      if (hasPermission(menus, v)) {\n        if (v.children && v.children.length > 0) {\n          v.children = v.children.filter(child => {\n            if (hasPermission(menus, child)) {\n              return child\n            }\n            return false\n          })\n          return v\n        } else {\n          return v\n        }\n      }\n      return false\n    })\n    //对菜单进行排序\n    sortRouters(accessedRouters)\n    addRouters.value = accessedRouters\n    routers.value = constantRouterMap.concat(accessedRouters)\n  }\n\n  return {\n    routers,\n    addRouters,\n    generateRoutes,\n  }\n})\n\n// 默认导出保持兼容性\nexport default usePermissionStore\n"
  },
  {
    "path": "src/stores/user.ts",
    "content": "import { defineStore } from 'pinia'\nimport { getAdminInfoAPI, adminLoginAPI, adminLogoutAPI } from '@/apis/admin'\nimport { ref } from 'vue'\nimport type { LoginParam, UserInfo } from '@/types/admin'\n\nexport const useUserStore = defineStore(\n  'user',\n  () => {\n    // 用户信息\n    const userInfo = ref<UserInfo>({\n      username: '',\n      password: '',\n      avatar: '',\n      roles: [],\n      token: '',\n      menus: [],\n    })\n\n    // 用户登录\n    const userLogin = async (loginParam: LoginParam) => {\n      const res = await adminLoginAPI(loginParam)\n      const tokenStr = res.data.tokenHead + res.data.token\n      userInfo.value.token = tokenStr\n      userInfo.value.username = loginParam.username\n      userInfo.value.password = loginParam.password\n      await getUserInfo()\n    }\n\n    // 获取用户信息\n    const getUserInfo = async () => {\n      const res = await getAdminInfoAPI()\n      if (res.data.roles && res.data.roles.length > 0) {\n        // 验证返回的roles是否是一个非空数组\n        userInfo.value.roles = res.data.roles\n      } else {\n        throw new Error('该用户暂未分配角色，请先分配角色！')\n      }\n      userInfo.value.menus = res.data.menus\n      userInfo.value.avatar = res.data.icon\n    }\n\n    // 用户登出\n    const userLogout = async () => {\n      await adminLogoutAPI()\n      userInfo.value.token = ''\n      userInfo.value.roles = []\n    }\n\n    // 前端登出\n    const fedLogout = () => {\n      userInfo.value.token = ''\n    }\n\n    return {\n      userInfo,\n      userLogin,\n      getUserInfo,\n      userLogout,\n      fedLogout,\n    }\n  },\n  {\n    // 持久化配置\n    persist: true,\n  },\n)\n"
  },
  {
    "path": "src/styles/element/index.scss",
    "content": "/* 覆盖element-plus默认的主题色 */\n@forward 'element-plus/theme-chalk/src/common/var.scss' with (\n  $colors: (\n    'primary': (\n      // 主色\n      'base': #409eff,\n    ),\n    'success': (\n      // 成功色\n      'base': #67c23a,\n    ),\n    'warning': (\n      // 警告色\n      'base': #e6a23c,\n    ),\n    'danger': (\n      // 危险色\n      'base': #f56c6c,\n    ),\n    'error': (\n      // 错误色\n      'base': #f56c6c,\n    ),\n  )\n);\n"
  },
  {
    "path": "src/styles/element-ui.scss",
    "content": " //to reset element-ui default css\n.el-upload {\n  input[type=\"file\"] {\n    display: none !important;\n  }\n}\n\n.el-upload__input {\n  display: none;\n}\n\n//暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461\n.el-dialog {\n  transform: none;\n  left: 0;\n  position: relative;\n  margin: 0 auto;\n}\n\n//element ui upload\n.upload-container {\n  .el-upload {\n    width: 100%;\n    .el-upload-dragger {\n      width: 100%;\n      height: 200px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/index.scss",
    "content": "@use './variables.scss';\n@use './mixin.scss';\n@use './transition.scss';\n@use './element-ui.scss';\n@use './sidebar.scss';\n\nbody {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  font-family:\n    Helvetica Neue,\n    Helvetica,\n    PingFang SC,\n    Hiragino Sans GB,\n    Microsoft YaHei,\n    Arial,\n    sans-serif;\n}\n\nhtml {\n  box-sizing: border-box;\n}\n\n*,\n*:before,\n*:after {\n  box-sizing: inherit;\n}\n\ndiv:focus {\n  outline: none;\n}\n\na:focus,\na:active {\n  outline: none;\n}\n\na,\na:focus,\na:hover {\n  cursor: pointer;\n  color: inherit;\n  text-decoration: none;\n}\n\n.clearfix {\n  &:after {\n    visibility: hidden;\n    display: block;\n    font-size: 0;\n    content: ' ';\n    clear: both;\n    height: 0;\n  }\n}\n\n// main-container全局样式\n.app-main {\n  min-height: 100%;\n}\n\n.app-container {\n  padding: 20px;\n}\n\n// 搜索栏样式\n.filter-container {\n}\n\n// 操作栏样式\n.operate-container {\n  margin-top: 20px;\n}\n\n.operate-container .btn-add {\n  float: right;\n}\n\n// 表格栏样式\n.table-container {\n  margin-top: 20px;\n}\n\n// 批量操作栏样式\n.batch-operate-container {\n  display: inline-flex;\n  width: 250px;\n  margin-top: 20px;\n}\n\n// 分页栏样式\n.pagination-container {\n  display: inline-block;\n  float: right;\n  margin-top: 20px;\n  margin-bottom: 20px;\n}\n\n// 添加、更新表单样式\n.form-container {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: 720px;\n  padding: 35px 35px 15px 35px;\n  margin: 20px auto;\n}\n\n// 主标题\n.font-extra-large {\n  font-size: 20px;\n  color: #303133;\n}\n\n// 标题\n.font-title-large {\n  font-size: 18px;\n  color: #303133;\n}\n\n// 小标题\n.font-title-medium {\n  font-size: 16px;\n  color: #303133;\n}\n\n// 正文\n.font-medium {\n  font-size: 16px;\n  color: #606266;\n}\n\n// 正文\n.font-small {\n  font-size: 14px;\n  color: #606266;\n}\n\n// 正文（小）\n.font-extra-small {\n  font-size: 13px;\n  color: #606266;\n}\n\n// 控制el-icon垂直居中\n.el-icon-middle {\n  vertical-align: middle;\n  margin-right: 4px;\n  margin-top: -2px;\n}\n\n.color-main {\n  color: #409eff;\n}\n\n.color-success {\n  color: #67c23a;\n}\n\n.color-warning {\n  color: #e6a23c;\n}\n\n.color-danger {\n  color: #f56c6c;\n}\n\n.color-info {\n  color: #909399;\n}\n"
  },
  {
    "path": "src/styles/mixin.scss",
    "content": "@mixin clearfix {\n  &:after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n}\n\n@mixin scrollBar {\n  &::-webkit-scrollbar-track-piece {\n    background: #d3dce6;\n  }\n  &::-webkit-scrollbar {\n    width: 6px;\n  }\n  &::-webkit-scrollbar-thumb {\n    background: #99a9bf;\n    border-radius: 20px;\n  }\n}\n\n@mixin relative {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n"
  },
  {
    "path": "src/styles/sidebar.scss",
    "content": "@use './variables.scss' as vars;\n\n#app {\n  // 主体区域\n  .main-container {\n    min-height: 100%;\n    transition: margin-left 0.28s;\n    margin-left: 180px;\n  }\n\n  // 侧边栏\n  .sidebar-container {\n    .horizontal-collapse-transition {\n      transition:\n        0s width ease-in-out,\n        0s padding-left ease-in-out,\n        0s padding-right ease-in-out;\n    }\n    transition: width 0.28s;\n    width: 180px !important;\n    height: 100%;\n    position: fixed;\n    font-size: 0px;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1001;\n    overflow: hidden;\n    a {\n      display: inline-block;\n      width: 100%;\n    }\n    .svg-icon {\n      margin-right: 16px;\n    }\n    .el-menu {\n      border: none;\n      width: 100% !important;\n    }\n  }\n\n  .hideSidebar {\n    .sidebar-container {\n      width: 36px !important;\n    }\n    .main-container {\n      margin-left: 36px;\n    }\n    .submenu-title-noDropdown {\n      padding-left: 10px !important;\n      position: relative;\n      .el-tooltip {\n        padding: 0 10px !important;\n      }\n    }\n    .el-sub-menu {\n      & > .el-sub-menu__title {\n        padding-left: 10px !important;\n        // 解决div el-sub-menu__title中svg图标不显示\n        display: block;\n        & > span {\n          height: 0;\n          width: 0;\n          overflow: hidden;\n          visibility: hidden;\n          display: inline-block;\n        }\n        .el-sub-menu__icon-arrow {\n          display: none;\n        }\n      }\n    }\n  }\n\n  .sidebar-container .nest-menu .el-sub-menu > .el-sub-menu__title,\n  .sidebar-container .el-sub-menu .el-menu-item {\n    min-width: 180px !important;\n    background-color: vars.$subMenuBg !important;\n    &:hover {\n      background-color: vars.$menuHover !important;\n    }\n  }\n  .el-menu--collapse .el-menu .el-sub-menu {\n    min-width: 180px !important;\n  }\n\n  //适配移动端\n  .mobile {\n    .main-container {\n      margin-left: 0px;\n    }\n    .sidebar-container {\n      top: 50px;\n      transition: transform 0.28s;\n      width: 180px !important;\n    }\n    &.hideSidebar {\n      .sidebar-container {\n        transition-duration: 0.3s;\n        transform: translate3d(-180px, 0, 0);\n      }\n    }\n  }\n\n  .withoutAnimation {\n    .main-container,\n    .sidebar-container {\n      transition: none;\n    }\n  }\n}\n"
  },
  {
    "path": "src/styles/transition.scss",
    "content": "//globl transition css\n\n/*fade*/\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.28s;\n}\n\n.fade-enter,\n.fade-leave-active {\n  opacity: 0;\n}\n\n/*fade*/\n.breadcrumb-enter-active,\n.breadcrumb-leave-active {\n  transition: all .5s;\n}\n\n.breadcrumb-enter,\n.breadcrumb-leave-active {\n  opacity: 0;\n  transform: translateX(20px);\n}\n\n.breadcrumb-move {\n  transition: all .5s;\n}\n\n.breadcrumb-leave-active {\n  position: absolute;\n}\n"
  },
  {
    "path": "src/styles/var.scss",
    "content": "/* 自定义css变量 */\n$customColor: #27ba9b;\n"
  },
  {
    "path": "src/styles/variables.scss",
    "content": "//sidebar\n$menuBg:#304156;\n$subMenuBg:#1f2d3d;\n$menuHover:#001528;\n"
  },
  {
    "path": "src/types/admin.d.ts",
    "content": "import type { UmsMenu } from './menu'\n\n/** 登录请求参数 */\nexport type LoginParam = {\n  /** 用户名 */\n  username: string\n  /** 密码 */\n  password: string\n}\n\n/** 登录返回结果 */\nexport type LoginResult = {\n  /** token的前缀 */\n  tokenHead: string\n  /** 登录的token */\n  token: string\n}\n\n/** 用户信息结果封装 */\nexport type UserInfoResult = {\n  /** 用户名 */\n  username: string\n  /** 头像 */\n  icon: string\n  /** 菜单 */\n  menus: UmsMenu[]\n  /** 角色 */\n  roles: []\n}\n\n/** 用户信息（store中存储的） */\nexport type UserInfo = Pick<UserInfoResult, 'username' | 'menus' | 'roles'> & {\n  /** 密码 */\n  password: string\n  /** 登录token */\n  token: string\n  /** 头像 */\n  avatar\n}\n\n/** 管理员信息 */\nexport type UmsAdmin = {\n  /** ID */\n  id?: number\n  /** 用户名 */\n  username: string\n  /** 密码 */\n  password: string\n  /** 头像 */\n  icon?: string\n  /** 邮箱 */\n  email?: string\n  /** 昵称 */\n  nickName?: string\n  /** 备注信息 */\n  note?: string\n  /** 创建时间 */\n  createTime?: string\n  /** 最后登录时间 */\n  loginTime?: string\n  /** 帐号启用状态：0->禁用；1->启用 */\n  status: number\n}\n"
  },
  {
    "path": "src/types/brand.d.ts",
    "content": "/** 品牌信息 */\nexport type PmsBrand = {\n  /** ID */\n  id?: number\n  /** 品牌名称 */\n  name: string\n  /** 首字母 */\n  firstLetter: string\n  /** 排序 */\n  sort: number\n  /** 是否为品牌制造商：0->不是；1->是 */\n  factoryStatus: number\n  /** 显示状态 */\n  showStatus: number\n  /** 产品数量 */\n  productCount?: number\n  /** 产品评论数量 */\n  productCommentCount?: number\n  /** 品牌logo */\n  logo: string\n  /** 专区大图 */\n  bigPic: string\n  /** 品牌故事 */\n  brandStory: string\n}\n"
  },
  {
    "path": "src/types/common.d.ts",
    "content": "/** 通用返回结果封装类 */\nexport type CommonResult<T> = {\n  /** 状态码 */\n  code: number\n  /** 提示信息 */\n  message: string\n  /** 封装数据 */\n  data: T\n}\n\n/** 通用分页结果封装类 */\nexport type CommonPage<T> = {\n  /** 当前页码 */\n  pageNum: number\n  /** 每页数量 */\n  pageSize: number\n  /** 总页数 */\n  totalPage: number\n  /** 总条数 */\n  total: number\n  /** 分页数据 */\n  list: T[]\n}\n\n/** 通用分页请求参数 */\nexport type PageParam = {\n  /** 当前页码，从1开始 */\n  pageNum: number\n  /** 每页数量，默认10 */\n  pageSize: number\n  /** 查询关键字 */\n  keyword?: string\n}\n\n/** el-cascader级联选择器数据结构 */\nexport type ElCascaderDataVo = {\n  /** 显示标签 */\n  label: string\n  /** 对应ID */\n  value: number\n  /** 下级数据 */\n  children?: ElCascaderDataVo[]\n}\n\n/** el-select选择器数据结构 */\nexport type ElSelectDataVo = {\n  /** 显示标签 */\n  label: string\n  /** 对应值 */\n  value: string | number\n}\n\n/** el-transfer穿梭框数据结构 */\nexport type ElTransferDataVo = {\n  /** 绑定key */\n  key?: number\n  /** 显示标签 */\n  label?: string\n  /** 是否可用 */\n  disabled?: boolean\n}\n"
  },
  {
    "path": "src/types/companyAddress.d.ts",
    "content": "/** 公司收发货地址 */\nexport type OmsCompanyAddress = {\n  /** ID */\n  id?: number\n  /** 地址名称 */\n  addressName: string\n  /** 默认发货地址：0->否；1->是 */\n  sendStatus: number\n  /** 是否默认收货地址：0->否；1->是 */\n  receiveStatus: number\n  /** 收发货人姓名 */\n  name: string\n  /** 收货人电话 */\n  phone: string\n  /** 省/直辖市 */\n  province: string\n  /** 市 */\n  city: string\n  /** 区 */\n  region: string\n  /** 详细地址 */\n  detailAddress: string\n}\n"
  },
  {
    "path": "src/types/coupon.d.ts",
    "content": "import type { PageParam } from './common'\n\n/** 优惠券信息 */\nexport type SmsCoupon = {\n  /** ID */\n  id?: number\n  /** 优惠券类型；0->全场赠券；1->会员赠券；2->购物赠券；3->注册赠券 */\n  type: number\n  /** 优惠券名称 */\n  name: string\n  /** 使用平台：0->全部；1->移动；2->PC */\n  platform: number\n  /** 数量 */\n  count?: number\n  /** 金额 */\n  amount: number\n  /** 每人限领张数 */\n  perLimit: number\n  /** 使用门槛；0表示无门槛 */\n  minPoint?: number\n  /** 开始时间 */\n  startTime?: string\n  /** 结束时间 */\n  endTime?: string\n  /** 使用类型：0->全场通用；1->指定分类；2->指定商品 */\n  useType: number\n  /** 备注 */\n  note?: string\n  /** 发行数量 */\n  publishCount?: number\n  /** 已使用数量 */\n  useCount?: number\n  /** 领取数量 */\n  receiveCount?: number\n  /** 可以领取的日期 */\n  enableTime?: string\n  /** 优惠码 */\n  code?: string\n  /** 可领取的会员类型：0->无限时 */\n  memberLevel?: number\n}\n\n/** 优惠券扩展 */\nexport type SmsCouponExt = SmsCoupon & {\n  /** 优惠券绑定的商品 */\n  productRelationList?: CouponSelectProductOptionVo[]\n  /** 优惠券绑定的商品分类 */\n  productCategoryRelationList?: CouponProductCateRelationVo[]\n}\n\n/** 优惠券和商品分类关系 */\nexport type CouponProductCateRelationVo = {\n  /** 商品分类ID */\n  productCategoryId?: number\n  /** 商品分类名称 */\n  productCategoryName?: string\n  /** 父级分类名称 */\n  parentCategoryName?: string\n}\n\n/** 优惠券指定商品选择对象 */\nexport type CouponSelectProductOptionVo = {\n  /** 商品ID */\n  productId?: number\n  /** 商品名称 */\n  productName: string\n  /** 商品SN码 */\n  productSn: string\n}\n\n/** 优惠券列表查询参数 */\nexport type CouponQueryParam = PageParam & {\n  /** 查询名称 */\n  name?: string\n  /** 优惠券类型 */\n  type?: number\n}\n\n/** 优惠券历史记录 */\nexport type SmsCouponHistory = {\n  /** ID */\n  id?: number\n  /** 优惠券ID */\n  couponId?: number\n  /** 会员ID */\n  memberId?: number\n  /** 优惠码 */\n  couponCode?: string\n  /** 领取人昵称 */\n  memberNickname?: string\n  /** 获取类型：0->后台赠送；1->主动获取 */\n  getType?: number\n  /** 创建时间 */\n  createTime?: string\n  /** 使用状态：0->未使用；1->已使用；2->已过期 */\n  useStatus?: number\n  /** 使用时间 */\n  useTime?: string\n  /** 订单ID */\n  orderId?: number\n  /** 订单号码 */\n  orderSn?: string\n}\n\n/** 优惠券历史列表查询参数 */\nexport type CouponHistoryQueryParam = PageParam & {\n  /** 使用状态：0->未使用；1->已使用；2->已过期 */\n  useStatus?: number\n  /** 订单号码 */\n  orderSn?: string\n  /** 优惠券ID */\n  couponId?: number\n}\n"
  },
  {
    "path": "src/types/flash.d.ts",
    "content": "import type { PageParam } from './common'\nimport type { PmsProduct } from './product'\n\n/** 秒杀活动信息 */\nexport type SmsFlashPromotion = {\n  /** ID */\n  id?: number\n  /** 秒杀时间段名称 */\n  title: string\n  /** 开始日期 */\n  startDate?: string\n  /** 结束日期 */\n  endDate?: string\n  /** 上下线状态 */\n  status: number\n  /** 创建时间 */\n  createTime?: string\n}\n\n/** 秒杀时间段信息 */\nexport type SmsFlashPromotionSession = {\n  /** 编号 */\n  id?: number\n  /** 场次名称 */\n  name: string\n  /** 每日开始时间 */\n  startTime?: string\n  /** 每日结束时间 */\n  endTime?: string\n  /** 启用状态：0->不启用；1->启用 */\n  status: number\n  /** 创建时间 */\n  createTime?: string\n  /** 商品数量 */\n  productCount?: number\n}\n\n/** 秒杀活动商品关系信息 */\nexport type SmsFlashPromotionProductRelation = {\n  /** 编号 */\n  id?: number\n  /** 秒杀活动ID */\n  flashPromotionId: number\n  /** 秒杀时间段ID */\n  flashPromotionSessionId: number\n  /** 商品ID */\n  productId: number\n  /** 限时购价格 */\n  flashPromotionPrice?: number\n  /** 限时购数量 */\n  flashPromotionCount?: number\n  /** 每人限购数量 */\n  flashPromotionLimit?: number\n  /** 排序 */\n  sort?: number\n  /** 关联商品 */\n  product?: PmsProduct\n}\n\n/** 秒杀商品列表查询参数 */\nexport type FlashProductQueryParam = PageParam & {\n  /** 秒杀活动ID */\n  flashPromotionId?: number\n  /** 秒杀场次ID */\n  flashPromotionSessionId?: number\n}\n"
  },
  {
    "path": "src/types/homeAdvertist.d.ts",
    "content": "import type { PageParam } from './common'\n\n/** 首页广告实体 */\nexport type SmsHomeAdvertise = {\n  /** ID */\n  id?: number\n  /** 广告名称 */\n  name?: string\n  /** 轮播位置：0->PC首页轮播；1->app首页轮播 */\n  type?: number\n  /** 图片 */\n  pic?: string\n  /** 开始时间 */\n  startTime?: string\n  /** 结束时间 */\n  endTime?: string\n  /** 上下线状态：0->下线；1->上线 */\n  status?: number\n  /** 点击数 */\n  clickCount?: number\n  /** 下单数 */\n  orderCount?: number\n  /** 链接地址 */\n  url?: string\n  /** 备注 */\n  note?: string\n  /** 排序 */\n  sort?: number\n}\n\n/** 首页广告列表查询参数 */\nexport type HomeAdvertiseQueryParam = PageParam & {\n  /** 广告名称 */\n  name?: string\n  /** 轮播位置：0->PC首页轮播；1->app首页轮播 */\n  type?: number\n  /** 结束时间 */\n  endTime?: string\n}\n"
  },
  {
    "path": "src/types/homeBrand.d.ts",
    "content": "/** 首页品牌 */\nexport type SmsHomeBrand = {\n  /** ID */\n  id?: number\n  /** 品牌ID */\n  brandId: number\n  /** 品牌名称 */\n  brandName: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n  /** 排序 */\n  sort?: number\n}\n\n/** 首页品牌列表查询参数 */\nexport type HomeBrandQueryParam = PageParam & {\n  /** 品牌名称 */\n  brandName?: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n}\n"
  },
  {
    "path": "src/types/homeSubject.d.ts",
    "content": "import type { PageParam } from './common'\n\n/**\n * 首页专题推荐\n */\nexport type SmsHomeRecommendSubject = {\n  /** ID */\n  id?: number\n  /** 专题ID */\n  subjectId: number\n  /** 专题名称 */\n  subjectName: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n  /** 排序 */\n  sort?: number\n}\n\n/** 首页专题列表查询参数 */\nexport type HomeSubjectQueryParam = PageParam & {\n  /** 品牌名称 */\n  subjectName?: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n}\n"
  },
  {
    "path": "src/types/memberLevel.d.ts",
    "content": "/** 会员等级信息 */\nexport type UmsMemberLevel = {\n  /** ID */\n  id?: number\n  /** 等级名称 */\n  name: string\n  /** 成长点数 */\n  growthPoint: number\n  /** 是否为默认等级：0->不是；1->是 */\n  defaultStatus: number\n  /** 免运费标准 */\n  freeFreightPoint: number\n  /** 每次评价获取的成长值 */\n  commentGrowthPoint: number\n  /** 是否有免邮特权 */\n  priviledgeFreeFreight: number\n  /** 是否有签到特权 */\n  priviledgeSignIn: number\n  /** 是否有评论获奖励特权 */\n  priviledgeComment: number\n  /** 是否有专享活动特权 */\n  priviledgePromotion: number\n  /** 是否有会员价格特权 */\n  priviledgeMemberPrice: number\n  /** 是否有生日特权 */\n  priviledgeBirthday: number\n  /** 备注 */\n  note: string\n}\n"
  },
  {
    "path": "src/types/menu.d.ts",
    "content": "/** 菜单 */\nexport type UmsMenu = {\n  /** 唯一ID */\n  id?: number\n  /** 父级ID */\n  parentId: number\n  /** 创建时间 */\n  createTime?: string\n  /** 菜单名称 */\n  title: string\n  /** 菜单级数 */\n  level?: number\n  /** 菜单排序 */\n  sort: number\n  /** 前端名称 */\n  name: string\n  /** 前端图标 */\n  icon: string\n  /** 前端隐藏 */\n  hidden: number\n}\n\n/** 后台菜单节点封装 */\nexport type UmsMenuNode = UmsMenu & {\n  /** 子级菜单 */\n  children: UmsMenu[]\n}\n"
  },
  {
    "path": "src/types/newProduct.d.ts",
    "content": "import type { PageParam } from './common'\n\n/** 首页新品推荐实体 */\nexport type SmsHomeNewProduct = {\n  /** ID */\n  id?: number\n  /** 商品ID */\n  productId: number\n  /** 商品名称 */\n  productName: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n  /** 排序 */\n  sort?: number\n}\n\n/** 首页新品推荐列表查询参数 */\nexport type NewProductQueryParam = PageParam & {\n  /** 商品名称 */\n  productName?: string\n  /** 推荐状态：0->未推荐；1->推荐中 */\n  recommendStatus?: number\n}\n"
  },
  {
    "path": "src/types/order.d.ts",
    "content": "import type { PageParam } from './common'\n\n/** 订单信息 */\nexport type OmsOrder = {\n  /** 订单id */\n  id: number\n  /** 会员id */\n  memberId?: number\n  /** 优惠券id */\n  couponId?: number\n  /** 订单编号 */\n  orderSn?: string\n  /** 提交时间 */\n  createTime: string\n  /** 用户帐号 */\n  memberUsername?: string\n  /** 订单总金额 */\n  totalAmount: number\n  /** 应付金额（实际支付金额） */\n  payAmount: number\n  /** 运费金额 */\n  freightAmount: number\n  /** 促销优化金额（促销价、满减、阶梯价） */\n  promotionAmount?: number\n  /** 积分抵扣金额 */\n  integrationAmount?: number\n  /** 优惠券抵扣金额 */\n  couponAmount?: number\n  /** 管理员后台调整订单使用的折扣金额 */\n  discountAmount: number\n  /** 支付方式：0->未支付；1->支付宝；2->微信 */\n  payType: number\n  /** 订单来源：0->PC订单；1->app订单 */\n  sourceType: number\n  /** 订单状态：0->待付款；1->待发货；2->已发货；3->已完成；4->已关闭；5->无效订单 */\n  status: number\n  /** 订单类型：0->正常订单；1->秒杀订单 */\n  orderType: number\n  /** 物流公司(配送方式) */\n  deliveryCompany?: string\n  /** 物流单号 */\n  deliverySn?: string\n  /** 自动确认时间（天） */\n  autoConfirmDay?: number\n  /** 可以获得的积分 */\n  integration?: number\n  /** 可以活动的成长值 */\n  growth?: number\n  /** 活动信息 */\n  promotionInfo: string\n  /** 发票类型：0->不开发票；1->电子发票；2->纸质发票 */\n  billType?: number\n  /** 发票抬头 */\n  billHeader?: string\n  /** 发票内容 */\n  billContent?: string\n  /** 收票人电话 */\n  billReceiverPhone?: string\n  /** 收票人邮箱 */\n  billReceiverEmail?: string\n  /** 收货人姓名 */\n  receiverName?: string\n  /** 收货人电话 */\n  receiverPhone?: string\n  /** 收货人邮编 */\n  receiverPostCode?: string\n  /** 省份/直辖市 */\n  receiverProvince: string\n  /** 城市 */\n  receiverCity?: string\n  /** 区 */\n  receiverRegion?: string\n  /** 详细地址 */\n  receiverDetailAddress?: string\n  /** 订单备注 */\n  note?: string\n  /** 确认收货状态：0->未确认；1->已确认 */\n  confirmStatus?: number\n  /** 删除状态：0->未删除；1->已删除 */\n  deleteStatus?: number\n  /** 下单时使用的积分 */\n  useIntegration?: number\n  /** 支付时间 */\n  paymentTime: string\n  /** 发货时间 */\n  deliveryTime: string\n  /** 确认收货时间 */\n  receiveTime: string\n  /** 评价时间 */\n  commentTime: string\n  /** 修改时间 */\n  modifyTime?: string\n}\n\n/** 订单商品项 */\nexport type OmsOrderItem = {\n  /** 商品项id */\n  id: number\n  /** 订单id */\n  orderId: number\n  /** 订单编号 */\n  orderSn: string\n  /** 商品id */\n  productId: number\n  /** 商品图片 */\n  productPic: string\n  /** 商品名称 */\n  productName: string\n  /** 商品品牌 */\n  productBrand: string\n  /** 商品货号 */\n  productSn: string\n  /** 销售价格 */\n  productPrice: number\n  /** 购买数量 */\n  productQuantity: number\n  /** 商品sku编号 */\n  productSkuId: number\n  /** 商品sku条码 */\n  productSkuCode: string\n  /** 商品分类id */\n  productCategoryId: number\n  /** 商品促销名称 */\n  promotionName: string\n  /** 商品促销分解金额 */\n  promotionAmount: number\n  /** 优惠券优惠分解金额 */\n  couponAmount: number\n  /** 积分优惠分解金额 */\n  integrationAmount: number\n  /** 该商品经过优惠后的分解金额 */\n  realAmount: number\n  /** 赠送积分 */\n  giftIntegration: number\n  /** 赠送成长值 */\n  giftGrowth: number\n  /** 商品销售属性 */\n  productAttr: string\n}\n\n/** 订单操作历史 */\nexport type OmsOrderOperateHistory = {\n  /** 历史记录id */\n  id: number\n  /** 订单id */\n  orderId: number\n  /** 操作人：用户；系统；后台管理员 */\n  operateMan: string\n  /** 操作时间 */\n  createTime: string\n  /** 订单状态：0->待付款；1->待发货；2->已发货；3->已完成；4->已关闭；5->无效订单 */\n  orderStatus: number\n  /** 备注 */\n  note: string\n}\n\n/** 订单列表查询参数 */\nexport type OrderQueryParam = PageParam & {\n  /** 订单编号 */\n  orderSn?: string\n  /** 收货人姓名/号码 */\n  receiverKeyword?: string\n  /** 订单状态：0->待付款；1->待发货；2->已发货；3->已完成；4->已关闭；5->无效订单 */\n  status?: number\n  /** 订单类型：0->正常订单；1->秒杀订单 */\n  orderType?: number\n  /** 订单来源：0->PC订单；1->app订单 */\n  sourceType?: number\n  /** 订单提交时间 */\n  createTime?: string\n}\n\n/** 订单发货参数 */\nexport type OmsOrderDeliveryParam = {\n  /** 订单id */\n  orderId: number\n  /** 物流公司 */\n  deliveryCompany?: string\n  /** 物流单号 */\n  deliverySn?: string\n}\n\n/** 订单详情信息 */\nexport type OmsOrderDetail = OmsOrder & {\n  /** 订单商品列表 */\n  orderItemList: OmsOrderItem[]\n  /** 订单操作记录列表 */\n  historyList: OmsOrderOperateHistory[]\n}\n\n/** 订单收货人信息参数 */\nexport type OmsReceiverInfoParam = {\n  /** 订单ID */\n  orderId: number\n  /** 收货人姓名 */\n  receiverName?: string\n  /** 收货人电话 */\n  receiverPhone?: string\n  /** 收货人邮编 */\n  receiverPostCode?: string\n  /** 详细地址 */\n  receiverDetailAddress?: string\n  /** 省份/直辖市 */\n  receiverProvince?: string\n  /** 城市 */\n  receiverCity?: string\n  /** 区 */\n  receiverRegion?: string\n  /** 订单状态：0->待付款；1->待发货；2->已发货；3->已完成；4->已关闭；5->无效订单 */\n  status: number\n}\n\n/** 订单费用信息参数 */\nexport type OmsMoneyInfoParam = {\n  /** 订单ID */\n  orderId: number\n  /** 运费金额 */\n  freightAmount: number\n  /** 管理员后台调整订单所使用的折扣金额 */\n  discountAmount: number\n  /** 订单状态：0->待付款；1->待发货；2->已发货；3->已完成；4->已关闭；5->无效订单 */\n  status: number\n}\n"
  },
  {
    "path": "src/types/orderSetting.d.ts",
    "content": "/** 订单设置信息 */\nexport type OmsOrderSetting = {\n  /** ID */\n  id: number\n  /** 秒杀订单超时关闭时间(分) */\n  flashOrderOvertime?: number\n  /** 正常订单超时时间(分) */\n  normalOrderOvertime?: number\n  /** 发货后自动确认收货时间（天） */\n  confirmOvertime?: number\n  /** 自动完成交易时间，不能申请售后（天） */\n  finishOvertime?: number\n  /** 订单完成后自动好评时间（天） */\n  commentOvertime?: number\n}\n"
  },
  {
    "path": "src/types/oss.d.ts",
    "content": "/**\n * OSS上传文件授权返回结果\n */\nexport type OssPolicyResult = {\n  /** 用户表单上传的策略,经过base64编码过的字符串 */\n  policy: string\n  /** 对policy签名后的字符串 */\n  signature: string\n  /** 访问身份验证中用到用户标识 */\n  accessKeyId: string\n  /** 上传文件夹路径前缀 */\n  dir: string\n  /** oss对外服务的访问域名 */\n  host: string\n}\n"
  },
  {
    "path": "src/types/prefrenceArea.d.ts",
    "content": "/** 优选区域信息 */\nexport type CmsPrefrenceArea = {\n  /** ID */\n  id?: number\n  /** 名称 */\n  name: string\n  /** 副标题 */\n  subTitle: string\n  /** 排序 */\n  sort: number\n  /** 显示状态：0->不显示；1->显示 */\n  showStatus: number\n  /** 展示图片 */\n  pic?: string\n}\n"
  },
  {
    "path": "src/types/product.d.ts",
    "content": "import type { PageParam } from './common'\nimport type { PmsProductAttributeValue } from './productAttr'\nimport type { PmsSkuStock } from './skuStock'\n\nexport type PmsProduct = {\n  /** ID */\n  id?: number\n  /** 品牌ID */\n  brandId?: number\n  /** 产品分类ID */\n  productCategoryId?: number\n  /** 运费模板ID */\n  feightTemplateId?: number\n  /** 属性分类ID */\n  productAttributeCategoryId?: number\n  /** 名称 */\n  name: string\n  /** 图片 */\n  pic?: string\n  /** 货号 */\n  productSn: string\n  /** 删除状态：0->未删除；1->已删除 */\n  deleteStatus?: number\n  /** 上架状态：0->下架；1->上架 */\n  publishStatus?: number\n  /** 新品状态:0->不是新品；1->新品 */\n  newStatus?: number\n  /** 推荐状态；0->不推荐；1->推荐 */\n  recommandStatus?: number\n  /** 审核状态：0->未审核；1->审核通过 */\n  verifyStatus?: number\n  /** 排序 */\n  sort?: number\n  /** 销量 */\n  sale?: number\n  /** 价格 */\n  price?: number\n  /** 促销价格 */\n  promotionPrice?: number\n  /** 赠送的成长值 */\n  giftGrowth?: number\n  /** 赠送的积分 */\n  giftPoint?: number\n  /** 限制使用的积分数 */\n  usePointLimit?: number\n  /** 副标题 */\n  subTitle?: string\n  /** 市场价 */\n  originalPrice?: number\n  /** 库存 */\n  stock?: number\n  /** 库存预警值 */\n  lowStock?: number\n  /** 单位 */\n  unit?: string\n  /** 商品重量，默认为克 */\n  weight?: number\n  /** 是否为预告商品：0->不是；1->是 */\n  previewStatus?: number\n  /** 以逗号分割的产品服务：1->无忧退货；2->快速退款；3->免费包邮 */\n  serviceIds?: string\n  /** 关键词 */\n  keywords?: string\n  /** 备注 */\n  note?: string\n  /** 画册图片，连产品图片限制为5张，以逗号分割 */\n  albumPics?: string\n  /** 详情标题 */\n  detailTitle?: string\n  /** 促销开始时间 */\n  promotionStartTime?: string\n  /** 促销结束时间 */\n  promotionEndTime?: string\n  /** 活动限购数量 */\n  promotionPerLimit?: number\n  /** 促销类型：0->没有促销使用原价;1->使用促销价；2->使用会员价；3->使用阶梯价格；4->使用满减价格；5->限时购 */\n  promotionType?: number\n  /** 品牌名称 */\n  brandName?: string\n  /** 商品分类名称 */\n  productCategoryName?: string\n  /** 商品描述 */\n  description?: string\n  /** 详情描述 */\n  detailDesc?: string\n  /** 产品详情网页内容 */\n  detailHtml?: string\n  /** 移动端网页详情 */\n  detailMobileHtml?: string\n}\n\n/** 商品列表查询参数 */\nexport type ProductQueryParam = PageParam & {\n  /** 上架状态 */\n  publishStatus?: number\n  /** 审核状态 */\n  verifyStatus?: number\n  /** 商品货号 */\n  productSn?: string\n  /** 商品分类编号 */\n  productCategoryId?: number\n  /** 商品品牌编号 */\n  brandId?: number\n}\n\n/** 创建和修改商品的请求参数 */\nexport type PmsProductParam = PmsProduct & {\n  /** 商品阶梯价格设置 */\n  productLadderList?: PmsProductLadder[]\n  /** 商品满减价格设置 */\n  productFullReductionList?: PmsProductFullReduction[]\n  /** 商品会员价格设置 */\n  memberPriceList?: PmsMemberPrice[]\n  /** 商品的sku库存信息 */\n  skuStockList?: PmsSkuStock[]\n  /** 商品参数及自定义规格属性 */\n  productAttributeValueList?: PmsProductAttributeValue[]\n  /** 专题和商品关系  */\n  subjectProductRelationList?: CmsSubjectProductRelation[]\n  /** 优选专区和商品的关系  */\n  prefrenceAreaProductRelationList?: CmsPrefrenceAreaProductRelation[]\n  /** 商品所选分类的父id */\n  cateParentId?: number\n  /** 秒杀商品数数量 */\n  flashPromotionCount: number\n  /** 秒杀活动ID */\n  flashPromotionId: number\n  /** 秒杀商品价格 */\n  flashPromotionPrice: number\n  /** 秒杀排序价格 */\n  flashPromotionSort: number\n}\n\n/** 商品阶梯价格 */\nexport type PmsProductLadder = {\n  /** ID */\n  id?: number\n  /** 商品ID */\n  productId?: number\n  /** 满足的商品数量 */\n  count: number\n  /** 折扣 */\n  discount?: number\n  /** 折后价格 */\n  price?: number\n}\n\n/** 商品满减价格设置 */\nexport type PmsProductFullReduction = {\n  /** ID */\n  id?: number\n  /** 商品ID */\n  productId?: number\n  /** 满足金额 */\n  fullPrice?: number\n  /** 减免金额 */\n  reducePrice?: number\n}\n\n/** 商品会员价格 */\nexport type PmsMemberPrice = {\n  /** ID */\n  id?: number\n  /** 商品ID */\n  productId?: number\n  /** 会员等级ID */\n  memberLevelId?: number\n  /** 会员价格 */\n  memberPrice?: number\n  /** 会员等级名称 */\n  memberLevelName?: string\n}\n\n/** 专题和商品关系 */\nexport type CmsSubjectProductRelation = {\n  /** ID */\n  id?: number\n  /** 专题ID */\n  subjectId?: number\n  /** 商品ID */\n  productId?: number\n}\n\n/** 优选专区和商品的关系 */\nexport type CmsPrefrenceAreaProductRelation = {\n  /** ID */\n  id?: number\n  /** 优选专区ID */\n  prefrenceAreaId?: number\n  /** 商品ID */\n  productId?: number\n}\n"
  },
  {
    "path": "src/types/productAttr.d.ts",
    "content": "/** 商品分类对应属性信息 */\nexport type ProductAttrInfo = {\n  /** 商品属性ID */\n  attributeId: number\n  /** 商品属性分类ID */\n  attributeCategoryId: number\n}\n\n/** 商品属性实体 */\nexport type PmsProductAttribute = {\n  /** ID */\n  id?: number\n  /** 商品属性分类ID */\n  productAttributeCategoryId?: number\n  /** 属性名称 */\n  name: string\n  /** 属性选择类型：0->唯一；1->单选；2->多选 */\n  selectType?: number\n  /** 属性录入方式：0->手工录入；1->从列表中选取 */\n  inputType?: number\n  /** 可选值列表，以逗号隔开 */\n  inputList?: string\n  /** 排序字段：最高的可以单独上传图片 */\n  sort?: number\n  /** 分类筛选样式：0->普通；1->颜色 */\n  filterType?: number\n  /** 检索类型；0->不需要进行检索；1->关键字检索；2->范围检索 */\n  searchType?: number\n  /** 相同属性产品是否关联；0->不关联；1->关联 */\n  relatedStatus?: number\n  /** 是否支持手动新增；0->不支持；1->支持 */\n  handAddStatus?: number\n  /** 属性的类型；0->规格；1->参数 */\n  type?: number\n}\n\n/** 商品属性分类实体 */\nexport type PmsProductAttributeCategory = {\n  /** 属性ID */\n  id?: number\n  /** 属性名称 */\n  name: string\n  /** 属性数量 */\n  attributeCount?: number\n  /** 参数数量 */\n  paramCount?: number\n}\n\n/** 商品属性分类实体扩展 */\nexport type PmsProductAttributeCategoryExt = PmsProductAttributeCategory & {\n  /** 商品属性分类列表 */\n  productAttributeList?: PmsProductAttribute[]\n}\n\n/** 商品属性值 */\nexport type PmsProductAttributeValue = {\n  /** ID */\n  id?: number\n  /** 商品ID */\n  productId?: number\n  /** 商品属性ID */\n  productAttributeId?: number\n  /** 手动添加规格或参数的值，参数单值，规格有多个时以逗号隔开 */\n  value?: string\n}\n\n/** 商品规格信息 */\nexport interface ProductAttrVo extends Pick<\n  PmsProductAttribute,\n  'id' | 'name' | 'handAddStatus' | 'inputList'\n> {\n  /** 选中的值 */\n  values?: string[]\n  /** 可选项 */\n  options?: string[]\n}\n\n/** 商品参数信息 */\nexport interface ProductParamVo extends Pick<\n  PmsProductAttribute,\n  'id' | 'name' | 'inputType' | 'inputList'\n> {\n  /** 参数值 */\n  value?: string\n}\n\n/** 商品属性图片 */\nexport type ProductAttrPicVo = {\n  /** 名称 */\n  name?: string\n  /** 图片地址 */\n  pic?: string\n}\n"
  },
  {
    "path": "src/types/productCate.d.ts",
    "content": "/** 商品分类信息 */\nexport type PmsProductCategory = {\n  /** ID */\n  id?: number\n  /** 上级分类的编号：0表示一级分类 */\n  parentId: number\n  /** 分类名称 */\n  name: string\n  /** 分类级别：0->1级；1->2级 */\n  level?: number\n  /** 商品数量 */\n  productCount?: number\n  /** 商品单位 */\n  productUnit?: string\n  /** 是否显示在导航栏：0->不显示；1->显示 */\n  navStatus: number\n  /** 显示状态：0->不显示；1->显示 */\n  showStatus: number\n  /** 排序 */\n  sort?: number\n  /** 图标 */\n  icon?: string\n  /** 关键字 */\n  keywords?: string\n  /** 描述 */\n  description?: string\n  /** 筛选属性ID列表，后续添加的 */\n  productAttributeIdList?: number[]\n}\n\n/** 商品分类信息扩展 */\nexport type PmsProductCategoryExt = PmsProductCategory & {\n  /** 子级分类 */\n  children?: PmsProductCategory[]\n}\n"
  },
  {
    "path": "src/types/recommendProduct.d.ts",
    "content": "import type { NewProductQueryParam, SmsHomeNewProduct } from './newProduct'\n\n/** 首页新品推荐实体 */\nexport type SmsHomeRecommendProduct = SmsHomeNewProduct\n\n/** 首页新品推荐列表查询参数 */\nexport type RecommendProductQueryParam = NewProductQueryParam\n"
  },
  {
    "path": "src/types/resource.d.ts",
    "content": "import type { PageParam } from './common'\n\n/** 资源信息 */\nexport type UmsResource = {\n  /** ID */\n  id?: number\n  /** 创建时间 */\n  createTime?: string\n  /** 资源名称 */\n  name: string\n  /** 资源URL */\n  url: string\n  /** 描述 */\n  description?: string\n  /** 资源分类ID */\n  categoryId: number\n  /** 是否被选中，前端使用 */\n  checked?: boolean\n}\n\n/** 资源分类信息 */\nexport type UmsResourceCategory = {\n  /** ID */\n  id?: number\n  /** 创建时间 */\n  createTime?: string\n  /** 分类名称 */\n  name: string\n  /** 排序 */\n  sort: number\n  /** 是否被选中，前端使用 */\n  checked?: boolean\n}\n\n/** 资源列表查询参数 */\nexport type ResourceQueryParam = PageParam & {\n  /** 资源名称关键字 */\n  nameKeyword?: string\n  /** 资源路径关键字 */\n  urlKeyword?: string\n  /** 资源分类ID */\n  categoryId?: number\n}\n"
  },
  {
    "path": "src/types/returnApply.d.ts",
    "content": "import type { PageParam } from './common'\nimport type { OmsCompanyAddress } from './companyAddress'\n\n/** 订单退货申请 */\nexport type OmsOrderReturnApply = {\n  /** 主键ID */\n  id: number\n  /** 订单id */\n  orderId: number\n  /** 收货地址表id */\n  companyAddressId: number\n  /** 退货商品id */\n  productId: number\n  /** 订单编号 */\n  orderSn: string\n  /** 申请时间 */\n  createTime: string\n  /** 会员用户名 */\n  memberUsername: string\n  /** 退款金额 */\n  returnAmount: number\n  /** 退货人姓名 */\n  returnName: string\n  /** 退货人电话 */\n  returnPhone: string\n  /** 申请状态：0->待处理；1->退货中；2->已完成；3->已拒绝 */\n  status: number\n  /** 处理时间 */\n  handleTime: string\n  /** 商品图片 */\n  productPic: string\n  /** 商品名称 */\n  productName: string\n  /** 商品品牌 */\n  productBrand: string\n  /** 商品销售属性：颜色：红色；尺码：xl; */\n  productAttr: string\n  /** 退货数量 */\n  productCount: number\n  /** 商品单价 */\n  productPrice: number\n  /** 商品实际支付单价 */\n  productRealPrice: number\n  /** 原因 */\n  reason: string\n  /** 描述 */\n  description: string\n  /** 凭证图片，以逗号隔开 */\n  proofPics: string\n  /** 处理备注 */\n  handleNote: string\n  /** 处理人员 */\n  handleMan: string\n  /** 收货人 */\n  receiveMan: string\n  /** 收货时间 */\n  receiveTime: string\n  /** 收货备注 */\n  receiveNote: string\n}\n\n/** 退货申请查询参数 */\nexport type ReturnApplyQueryParam = PageParam & {\n  /** 服务单号 */\n  id?: number\n  /** 收货人姓名/号码 */\n  receiverKeyword?: string\n  /** 申请状态：0->待处理；1->退货中；2->已完成；3->已拒绝 */\n  status?: number\n  /** 申请时间 */\n  createTime?: string\n  /** 处理人员 */\n  handleMan?: string\n  /** 处理时间 */\n  handleTime?: string\n}\n\n/** 订单退货申请结果封装 */\nexport type OmsOrderReturnApplyResult = OmsOrderReturnApply & {\n  /** 公司收货地址 */\n  companyAddress: OmsCompanyAddress\n}\n\n/** 退货申请状态更新参数 */\nexport type OmsUpdateStatusParam = {\n  /** 服务单号 */\n  id: number\n  /** 收货地址关联id */\n  companyAddressId: number\n  /** 确认退款金额 */\n  returnAmount: number\n  /** 处理备注 */\n  handleNote: string\n  /** 处理人 */\n  handleMan: string\n  /** 收货备注 */\n  receiveNote: string\n  /** 收货人 */\n  receiveMan: string\n  /** 申请状态：1->退货中；2->已完成；3->已拒绝 */\n  status: number\n}\n"
  },
  {
    "path": "src/types/returnReason.d.ts",
    "content": "/** 退货原因 */\nexport type OmsOrderReturnReason = {\n  /** ID */\n  id?: number\n  /** 退货类型 */\n  name: string\n  /** 排序 */\n  sort: number\n  /** 状态：0->不启用；1->启用 */\n  status: number\n  /** 添加时间 */\n  createTime?: string\n}\n"
  },
  {
    "path": "src/types/role.d.ts",
    "content": "/** 角色信息 */\nexport type UmsRole = {\n  /** ID */\n  id?: number\n  /** 名称 */\n  name: string\n  /** 描述 */\n  description?: string\n  /** 后台用户数量 */\n  adminCount?: number\n  /** 创建时间 */\n  createTime?: string\n  /** 启用状态：0->禁用；1->启用 */\n  status: number\n  /** 排序 */\n  sort?: number\n}\n"
  },
  {
    "path": "src/types/router.d.ts",
    "content": "import type { RouteRecordRaw } from 'vue-router'\n\n/** vue-router路由扩展 */\nexport type RouteRecordExt = RouteRecordRaw & {\n  /** 前端隐藏 */\n  hidden?: boolean\n  /** 前端排序 */\n  sort?: number\n  /** 下级子路由 */\n  children?: RouteRecordExt[]\n  /** 是否永远显示 */\n  alwaysShow?: boolean\n}\n"
  },
  {
    "path": "src/types/skuStock.d.ts",
    "content": "/** SKU库存信息 */\nexport type PmsSkuStock = {\n  /** ID */\n  id?: number\n  /** 产品ID */\n  productId?: number\n  /** sku编码 */\n  skuCode?: string\n  /** 价格 */\n  price?: number\n  /** 库存 */\n  stock?: number\n  /** 预警库存 */\n  lowStock?: number\n  /** 展示图片 */\n  pic?: string\n  /** 销量 */\n  sale?: number\n  /** 单品促销价格 */\n  promotionPrice?: number\n  /** 锁定库存 */\n  lockStock?: number\n  /** 商品销售属性，json格式 */\n  spData?: string\n}\n"
  },
  {
    "path": "src/types/subject.d.ts",
    "content": "/** 专题实体 */\nexport type CmsSubject = {\n  /** ID */\n  id?: number\n  /** 分类ID */\n  categoryId?: number\n  /** 标题 */\n  title?: string\n  /** 专题主图 */\n  pic?: string\n  /** 关联产品数量 */\n  productCount?: number\n  /** 推荐状态 */\n  recommendStatus?: number\n  /** 创建时间 */\n  createTime?: string\n  /** 收藏数 */\n  collectCount?: number\n  /** 阅读数 */\n  readCount?: number\n  /** 评论数 */\n  commentCount?: number\n  /** 画册图片用逗号分割 */\n  albumPics?: string\n  /** 描述 */\n  description?: string\n  /** 显示状态：0->不显示；1->显示 */\n  showStatus?: number\n  /** 转发数 */\n  forwardCount?: number\n  /** 专题分类名称 */\n  categoryName?: string\n  /** 内容 */\n  content?: string\n}\n"
  },
  {
    "path": "src/utils/constant.ts",
    "content": "/** 优惠券类型数组 */\nexport const couponTypes = [\n  {\n    label: '全场赠券',\n    value: 0,\n  },\n  {\n    label: '会员赠券',\n    value: 1,\n  },\n  {\n    label: '购物赠券',\n    value: 2,\n  },\n  {\n    label: '注册赠券',\n    value: 3,\n  },\n]\n\n/** 优惠券使用平台 */\nexport const couponPlatforms = [\n  {\n    label: '全平台',\n    value: 0,\n  },\n  {\n    label: '移动平台',\n    value: 1,\n  },\n  {\n    label: 'PC平台',\n    value: 2,\n  },\n]\n"
  },
  {
    "path": "src/utils/cookie.ts",
    "content": "import Cookies from 'js-cookie'\n\n// 设置cookie\nexport function setCookie(key: string, value: string, expires: number) {\n  return Cookies.set(key, value, { expires: expires })\n}\n\n// 获取cookie\nexport function getCookie(key: string) {\n  return Cookies.get(key)\n}\n"
  },
  {
    "path": "src/utils/datetime.ts",
    "content": "import { dayjs } from 'element-plus'\n\n// 日期时间格式化函数\nexport const formatDateTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD HH:mm:ss')\n}\n\n// 日期格式化函数\nexport const formatDate = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD')\n}\n\n// 时间格式化函数\nexport const formatTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('HH:mm:ss')\n}\n\n// 将以`-`分割的日期字符串转化为Date对象\nexport function str2Date(dateStr: string, separator?: string) {\n  if (!separator) {\n    separator = '-'\n  }\n  const dateArr = dateStr.split(separator)\n  if (!dateArr[0] || !dateArr[1] || !dateArr[2]) return undefined\n  const year = parseInt(dateArr[0])\n  let month\n  //处理月份为04这样的情况\n  if (dateArr[1].indexOf('0') == 0) {\n    month = parseInt(dateArr[1].substring(1))\n  } else {\n    month = parseInt(dateArr[1])\n  }\n  const day = parseInt(dateArr[2])\n  const date = new Date(year, month - 1, day)\n  return date\n}\n"
  },
  {
    "path": "src/utils/http.ts",
    "content": "import { useUserStore } from '@/stores/user'\nimport type { CommonResult } from '@/types/common'\nimport axios from 'axios'\nimport { ElMessage, ElMessageBox } from 'element-plus'\n\n// 创建axios实例\nconst http = axios.create({\n  baseURL: import.meta.env.VITE_BASE_SERVER_URL,\n  timeout: 5000,\n})\n\n// axios请求拦截器\nhttp.interceptors.request.use(\n  config => {\n    //从pinia获取token\n    const userStore = useUserStore()\n    const token = userStore.userInfo.token\n    if (token) {\n      config.headers.Authorization = token\n    }\n    return config\n  },\n  e => Promise.reject(e),\n)\n\n// axios响应拦截器\nhttp.interceptors.response.use(\n  response => {\n    const res: CommonResult<unknown> = response.data\n    if (res.code !== 200) {\n      // code为非200是抛错，这里统一处理提示信息\n      ElMessage({\n        message: res.message,\n        type: 'error',\n        duration: 3 * 1000,\n      })\n      // 401:未登录;\n      if (res.code === 401) {\n        ElMessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {\n          confirmButtonText: '重新登录',\n          cancelButtonText: '取消',\n          type: 'warning',\n        }).then(() => {\n          const userStore = useUserStore()\n          userStore.fedLogout()\n          // 为了重新实例化vue-router对象 避免bug\n          location.reload()\n        })\n      }\n      return Promise.reject('error')\n    } else {\n      // 返回响应JSON中的data属性，不包括message和code\n      return response.data\n    }\n  },\n  error => {\n    // 全局处理异常请求\n    console.log('error' + error)\n    ElMessage({\n      message: error.message,\n      type: 'error',\n      duration: 3 * 1000,\n    })\n    return Promise.reject(error)\n  },\n)\n\nexport default http\n"
  },
  {
    "path": "src/utils/validate.ts",
    "content": "export function isvalidUsername(str: string) {\n  return str.trim().length >= 3\n}\n\n/* 合法uri*/\nexport function validateURL(textval: string) {\n  const urlregex =\n    /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/\n  return urlregex.test(textval)\n}\n\n/* 小写字母*/\nexport function validateLowerCase(str: string) {\n  const reg = /^[a-z]+$/\n  return reg.test(str)\n}\n\n/* 大写字母*/\nexport function validateUpperCase(str: string) {\n  const reg = /^[A-Z]+$/\n  return reg.test(str)\n}\n\n/* 大小写字母*/\nexport function validatAlphabets(str: string) {\n  const reg = /^[A-Za-z]+$/\n  return reg.test(str)\n}\n"
  },
  {
    "path": "src/views/home/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue'\nimport { str2Date } from '@/utils/datetime'\nimport img_home_order from '@/assets/images/home_order.png'\nimport img_home_today_amount from '@/assets/images/home_today_amount.png'\nimport img_home_yesterday_amount from '@/assets/images/home_yesterday_amount.png'\nimport { use } from 'echarts/core'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { LineChart } from 'echarts/charts'\nimport VChart from 'vue-echarts'\nimport {\n  GridComponent,\n  TooltipComponent,\n  LegendComponent,\n  TitleComponent\n} from 'echarts/components'\n\n// 通过use()方法按需注入ECharts的模块\nuse([\n  CanvasRenderer, // 画布渲染器\n  LineChart, // 折线图的绘制功能\n  GridComponent, // 直角坐标系网格组件\n  TooltipComponent, // 鼠标悬停时显示数据详情\n  LegendComponent,  // 图例组件\n  TitleComponent // 显示图表标题\n])\n\n// 折线图数据类型\ntype LineChartDataItem = {\n  date: string, // 交易日期\n  orderCount: number, // 订单数量\n  orderAmount: number // 订单金额\n}\n\n// 默认图表数据\nconst defaultLineChartData: LineChartDataItem[] = [\n  { date: '2026-01-01', orderCount: 10, orderAmount: 1093 },\n  { date: '2026-01-02', orderCount: 20, orderAmount: 2230 },\n  { date: '2026-01-03', orderCount: 33, orderAmount: 3623 },\n  { date: '2026-01-04', orderCount: 50, orderAmount: 6423 },\n  { date: '2026-01-05', orderCount: 80, orderAmount: 8492 },\n  { date: '2026-01-06', orderCount: 60, orderAmount: 6293 },\n  { date: '2026-01-07', orderCount: 20, orderAmount: 2293 },\n  { date: '2026-01-08', orderCount: 60, orderAmount: 6293 },\n  { date: '2026-01-09', orderCount: 50, orderAmount: 5293 },\n  { date: '2026-01-10', orderCount: 30, orderAmount: 3293 },\n  { date: '2026-01-11', orderCount: 20, orderAmount: 2293 },\n  { date: '2026-01-12', orderCount: 80, orderAmount: 8293 },\n  { date: '2026-01-13', orderCount: 100, orderAmount: 10293 },\n  { date: '2026-01-14', orderCount: 10, orderAmount: 1293 },\n  { date: '2026-01-15', orderCount: 40, orderAmount: 4293 }\n]\n\n// 默认起始日期\nconst defaultStartDate = new Date(2026, 0, 1)\n\n// 日期选择器日期范围[start,end]\nconst datePickerRange = ref<Date[]>([])\n// 初始化日期选择器数据\nconst initDatePickerRange = () => {\n  const start = defaultStartDate\n  const end = new Date(start.getTime() + 1000 * 60 * 60 * 24 * 7)\n  datePickerRange.value = [start, end] as Date[]\n}\n// 图表数据\nconst lineChartData = ref<LineChartDataItem[]>([])\n// 图表数据加载状态\nconst loading = ref(false)\n// 获取图表数据\nconst getLineChartData = () => {\n  loading.value = true\n  setTimeout(() => {\n    const start = datePickerRange.value[0]\n    const end = datePickerRange.value[1]\n    // 获取在当前区间范围内的数据\n    lineChartData.value = defaultLineChartData.filter(item => {\n      const currDate = str2Date(item.date)\n      return currDate!.getTime() >= start!.getTime() && currDate!.getTime() <= end!.getTime()\n    })\n    loading.value = false\n  }, 1000)\n}\n\n// 组件挂载成功初始化数据\nonMounted(() => {\n  initDatePickerRange()\n  getLineChartData()\n})\n\n// 日期选择器选项\nconst shortcuts = [\n  {\n    text: '最近一周',\n    value: () => {\n      const start = defaultStartDate\n      const end = new Date(start.getTime() + 1000 * 60 * 60 * 24 * 7)\n      return [start, end]\n    }\n  },\n  {\n    text: '最近一月',\n    value: () => {\n      const start = defaultStartDate\n      const end = new Date(start.getTime() + 1000 * 60 * 60 * 24 * 30)\n      return [start, end]\n    }\n  }\n]\n// 处理日期范围变化\nconst handleDatePickerRangeChange = () => {\n  getLineChartData()\n}\n\n// X 轴：日期（2026-01-01 到 2026-01-15）\n// 左 Y 轴：订单数量（0-100）\n// 右 Y 轴：订单金额（0-10000+）\n// 蓝色曲线：订单数量趋势（带填充）\n// 绿色曲线：订单金额趋势（带填充）\n// 鼠标悬停：显示交叉线和详细数据\n// vue-charts中的选项\nconst chartOption = computed(() => {\n  const dates = lineChartData.value.map(item => item.date)\n  const orderCounts = lineChartData.value.map(item => item.orderCount)\n  const orderAmounts = lineChartData.value.map(item => item.orderAmount)\n  return {\n    tooltip: {\n      trigger: 'axis',\n      axisPointer: {\n        type: 'cross'\n      }\n    },\n    grid: {\n      left: '3%',\n      right: '4%',\n      bottom: '3%',\n      containLabel: true\n    },\n    xAxis: {\n      type: 'category',\n      boundaryGap: false,\n      data: dates,\n      axisLabel: {\n        formatter: '{value}',\n        rotate: 0\n      }\n    },\n    yAxis: [\n      {\n        type: 'value',\n        name: '订单数量',\n        position: 'left',\n        axisLabel: {\n          formatter: '{value}'\n        }\n      },\n      {\n        type: 'value',\n        name: '订单金额',\n        position: 'right',\n        axisLabel: {\n          formatter: '{value}'\n        }\n      }\n    ],\n    series: [\n      {\n        name: '订单数量',\n        type: 'line',\n        areaStyle: {},\n        data: orderCounts,\n        smooth: true,\n        itemStyle: {\n          color: '#409EFF'\n        }\n      },\n      {\n        name: '订单金额',\n        type: 'line',\n        yAxisIndex: 1,\n        areaStyle: {},\n        data: orderAmounts,\n        smooth: true,\n        itemStyle: {\n          color: '#67C23A'\n        }\n      }\n    ]\n  }\n})\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <div class=\"address-layout\">\n      <el-row :gutter=\"20\">\n        <el-col :span=\"6\">\n          <div class=\"out-border\">\n            <div class=\"layout-title\">Spring Boot项目学习</div>\n            <div class=\"color-main address-content\">\n              <a href=\"https://www.macrozheng.com\" target=\"_blank\">mall学习教程</a>\n            </div>\n          </div>\n        </el-col>\n        <el-col :span=\"6\">\n          <div class=\"out-border\">\n            <div class=\"layout-title\">Spring Cloud项目学习</div>\n            <div class=\"color-main address-content\">\n              <a href=\"https://cloud.macrozheng.com\" target=\"_blank\">mall-swarm学习教程</a>\n            </div>\n          </div>\n        </el-col>\n        <el-col :span=\"6\">\n          <div class=\"out-border\">\n            <div class=\"layout-title\">点Star支持项目</div>\n            <div class=\"color-main address-content\">\n              <a href=\"https://github.com/macrozheng/mall\" target=\"_blank\">mall项目</a>\n            </div>\n          </div>\n        </el-col>\n      </el-row>\n    </div>\n    <div class=\"total-layout\">\n      <el-row :gutter=\"20\">\n        <el-col :span=\"6\">\n          <div class=\"total-frame\">\n            <img :src=\"img_home_order\" class=\"total-icon\">\n            <div class=\"total-title\">今日订单总数</div>\n            <div class=\"total-value\">200</div>\n          </div>\n        </el-col>\n        <el-col :span=\"6\">\n          <div class=\"total-frame\">\n            <img :src=\"img_home_today_amount\" class=\"total-icon\">\n            <div class=\"total-title\">今日销售总额</div>\n            <div class=\"total-value\">￥5000.00</div>\n          </div>\n        </el-col>\n        <el-col :span=\"6\">\n          <div class=\"total-frame\">\n            <img :src=\"img_home_yesterday_amount\" class=\"total-icon\">\n            <div class=\"total-title\">昨日销售总额</div>\n            <div class=\"total-value\">￥5000.00</div>\n          </div>\n        </el-col>\n      </el-row>\n    </div>\n    <el-card class=\"mine-layout\">\n      <div style=\"text-align: center\">\n        <img width=\"140px\" height=\"140px\"\n          src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg\">\n      </div>\n      <div style=\"text-align: center\">扫码关注作者<span class=\"color-main\">公众号</span></div>\n      <div style=\"text-align: center;margin-top: 5px\">获取更多技术干货</div>\n    </el-card>\n    <div class=\"un-handle-layout\">\n      <div class=\"layout-title\">待处理事务</div>\n      <div class=\"un-handle-content\">\n        <el-row :gutter=\"20\">\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">待付款订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">已完成订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">待确认收货订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n        </el-row>\n        <el-row :gutter=\"20\">\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">待发货订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">新缺货登记</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">待处理退款申请</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n        </el-row>\n        <el-row :gutter=\"20\">\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">已发货订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">待处理退货订单</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n          <el-col :span=\"8\">\n            <div class=\"un-handle-item\">\n              <span class=\"font-medium\">广告位即将到期</span>\n              <span style=\"float: right\" class=\"color-danger\">(10)</span>\n            </div>\n          </el-col>\n        </el-row>\n      </div>\n    </div>\n    <div class=\"overview-layout\">\n      <el-row :gutter=\"20\">\n        <el-col :span=\"12\">\n          <div class=\"out-border\">\n            <div class=\"layout-title\">商品总览</div>\n            <div style=\"padding: 40px\">\n              <el-row>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">100</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">400</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">50</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">500</el-col>\n              </el-row>\n              <el-row class=\"font-medium\">\n                <el-col :span=\"6\" class=\"overview-item-title\">已下架</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">已上架</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">库存紧张</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">全部商品</el-col>\n              </el-row>\n            </div>\n          </div>\n        </el-col>\n        <el-col :span=\"12\">\n          <div class=\"out-border\">\n            <div class=\"layout-title\">用户总览</div>\n            <div style=\"padding: 40px\">\n              <el-row>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">100</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">200</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">1000</el-col>\n                <el-col :span=\"6\" class=\"color-danger overview-item-value\">5000</el-col>\n              </el-row>\n              <el-row class=\"font-medium\">\n                <el-col :span=\"6\" class=\"overview-item-title\">今日新增</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">昨日新增</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">本月新增</el-col>\n                <el-col :span=\"6\" class=\"overview-item-title\">会员总数</el-col>\n              </el-row>\n            </div>\n          </div>\n        </el-col>\n      </el-row>\n    </div>\n    <div class=\"statistics-layout\">\n      <div class=\"layout-title\">订单统计</div>\n      <el-row>\n        <el-col :span=\"4\">\n          <div style=\"padding: 20px\">\n            <div>\n              <div style=\"color: #909399;font-size: 14px\">本月订单总数</div>\n              <div style=\"color: #606266;font-size: 24px;padding: 10px 0\">10000</div>\n              <div>\n                <span class=\"color-success\" style=\"font-size: 14px\">+10%</span>\n                <span style=\"color: #C0C4CC;font-size: 14px\">同比上月</span>\n              </div>\n            </div>\n            <div style=\"margin-top: 20px;\">\n              <div style=\"color: #909399;font-size: 14px\">本周订单总数</div>\n              <div style=\"color: #606266;font-size: 24px;padding: 10px 0\">1000</div>\n              <div>\n                <span class=\"color-danger\" style=\"font-size: 14px\">-10%</span>\n                <span style=\"color: #C0C4CC;font-size: 14px\">同比上周</span>\n              </div>\n            </div>\n            <div style=\"margin-top: 20px;\">\n              <div style=\"color: #909399;font-size: 14px\">本月销售总额</div>\n              <div style=\"color: #606266;font-size: 24px;padding: 10px 0\">100000</div>\n              <div>\n                <span class=\"color-success\" style=\"font-size: 14px\">+10%</span>\n                <span style=\"color: #C0C4CC;font-size: 14px\">同比上月</span>\n              </div>\n            </div>\n            <div style=\"margin-top: 20px;\">\n              <div style=\"color: #909399;font-size: 14px\">本周销售总额</div>\n              <div style=\"color: #606266;font-size: 24px;padding: 10px 0\">50000</div>\n              <div>\n                <span class=\"color-danger\" style=\"font-size: 14px\">-10%</span>\n                <span style=\"color: #C0C4CC;font-size: 14px\">同比上周</span>\n              </div>\n            </div>\n          </div>\n        </el-col>\n        <el-col :span=\"20\">\n          <div style=\"padding: 10px;border-left:1px solid #DCDFE6\">\n            <el-date-picker style=\"float: right;z-index: 1\" size=\"small\" v-model=\"datePickerRange\" type=\"daterange\"\n              align=\"right\" unlink-panels range-separator=\"至\" start-placeholder=\"开始日期\" end-placeholder=\"结束日期\"\n              :shortcuts=\"shortcuts\" @change=\"handleDatePickerRangeChange\">\n            </el-date-picker>\n            <div style=\"height: 400px;\">\n              <v-chart v-if=\"!loading\" :option=\"chartOption\" autoresize />\n              <div v-else\n                style=\"display: flex; justify-content: center; align-items: center; height: 100%;width: 100%;\">\n                <el-skeleton :rows=\"5\" animated />\n              </div>\n            </div>\n          </div>\n        </el-col>\n      </el-row>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.app-container {\n  margin-top: 40px;\n  margin-left: 120px;\n  margin-right: 120px;\n}\n\n.total-layout {\n  margin-top: 20px;\n}\n\n.total-frame {\n  border: 1px solid #DCDFE6;\n  padding: 20px;\n  height: 100px;\n}\n\n.total-icon {\n  color: #409EFF;\n  width: 60px;\n  height: 60px;\n}\n\n.total-title {\n  position: relative;\n  font-size: 16px;\n  color: #909399;\n  left: 70px;\n  top: -50px;\n}\n\n.total-value {\n  position: relative;\n  font-size: 18px;\n  color: #606266;\n  left: 70px;\n  top: -40px;\n}\n\n.un-handle-layout {\n  margin-top: 20px;\n  border: 1px solid #DCDFE6;\n}\n\n.layout-title {\n  color: #606266;\n  padding: 15px 20px;\n  background: #F2F6FC;\n  font-weight: bold;\n}\n\n.un-handle-content {\n  padding: 20px 40px;\n}\n\n.un-handle-item {\n  border-bottom: 1px solid #EBEEF5;\n  padding: 10px;\n}\n\n.overview-layout {\n  margin-top: 20px;\n}\n\n.overview-item-value {\n  font-size: 24px;\n  text-align: center;\n}\n\n.overview-item-title {\n  margin-top: 10px;\n  text-align: center;\n}\n\n.out-border {\n  border: 1px solid #DCDFE6;\n}\n\n.statistics-layout {\n  margin-top: 20px;\n  border: 1px solid #DCDFE6;\n}\n\n.mine-layout {\n  position: absolute;\n  right: 140px;\n  top: 107px;\n  width: 250px;\n  height: 235px;\n}\n\n.address-content {\n  padding: 20px;\n  font-size: 18px\n}\n</style>\n"
  },
  {
    "path": "src/views/layout/Layout.vue",
    "content": "<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useAppStore } from '@/stores/app'\nimport Navbar from './components/Navbar.vue'\nimport Sidebar from './components/Sidebar/index.vue'\nimport AppMain from './components/AppMain.vue'\nimport useResizeHandler from './composables/useResizeHandler'\n\n// 使用 Pinia store\nconst appStore = useAppStore()\n\n// 获取响应式状态\nconst sidebar = computed(() => appStore.sidebar)\nconst device = computed(() => appStore.device)\n\n// 计算类名\nconst classObj = computed(() => ({\n  hideSidebar: !sidebar.value.opened,\n  withoutAnimation: sidebar.value.withoutAnimation,\n  mobile: device.value === 'mobile'\n}))\n\n// 使用 resize handler composable\nuseResizeHandler()\n</script>\n\n\n<template>\n  <div class=\"app-wrapper\" :class=\"classObj\">\n    <Sidebar class=\"sidebar-container\"></Sidebar>\n    <div class=\"main-container\">\n      <Navbar></Navbar>\n      <AppMain></AppMain>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"@/styles/mixin.scss\";\n\n.app-wrapper {\n  @include mixin.clearfix;\n  position: relative;\n  height: 100%;\n  width: 100%;\n}\n</style>\n"
  },
  {
    "path": "src/views/layout/components/AppMain.vue",
    "content": "<script lang=\"ts\" setup>\n// 定义组件名称\ndefineOptions({\n  name: 'AppMain'\n})\n</script>\n\n<template>\n  <section class=\"app-main\">\n    <router-view v-slot=\"{ Component }\">\n      <transition name=\"fade\" mode=\"out-in\">\n        <component :is=\"Component\" />\n      </transition>\n    </router-view>\n  </section>\n</template>\n"
  },
  {
    "path": "src/views/layout/components/Navbar.vue",
    "content": "<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport Breadcrumb from '@/components/Breadcrumb/index.vue'\nimport Hamburger from '@/components/Hamburger/index.vue'\nimport { useAppStore } from '@/stores/app'\nimport { useUserStore } from '@/stores/user'\nimport { ArrowDown } from '@element-plus/icons-vue'\n\n// 定义组件名称\ndefineOptions({\n  name: 'Navbar'\n})\n\nconst appStore = useAppStore()\nconst userStore = useUserStore()\n\nconst sidebar = computed(() => appStore.sidebar)\nconst avatar = computed(() => userStore.userInfo.avatar)\n\n// 处理开关侧边栏操作\nconst handleToggleSideBar = () => {\n  appStore.toggleSideBar()\n}\n\n// 处理用户登出\nconst handleLogout = async () => {\n  await userStore.userLogout()\n  // 为了重新实例化vue-router对象 避免bug\n  location.reload()\n}\n</script>\n\n<template>\n  <el-menu class=\"navbar\" mode=\"horizontal\">\n    <hamburger class=\"hamburger-container\" :toggle-click=\"handleToggleSideBar\" :is-active=\"sidebar.opened\"></hamburger>\n    <breadcrumb></breadcrumb>\n    <el-dropdown class=\"avatar-container\" trigger=\"click\">\n      <div class=\"avatar-wrapper\">\n        <img class=\"user-avatar\" :src=\"avatar\">\n        <el-icon class=\"el-icon-caret-bottom\">\n          <arrow-down />\n        </el-icon>\n      </div>\n      <template #dropdown>\n        <el-dropdown-menu class=\"user-dropdown\">\n          <router-link class=\"inlineBlock\" to=\"/\">\n            <el-dropdown-item>\n              首页\n            </el-dropdown-item>\n          </router-link>\n          <el-dropdown-item divided>\n            <span @click=\"handleLogout\" style=\"display:block;\">退出</span>\n          </el-dropdown-item>\n        </el-dropdown-menu>\n      </template>\n    </el-dropdown>\n  </el-menu>\n</template>\n\n<style lang=\"scss\" scoped>\n.navbar {\n  height: 50px;\n  line-height: 50px;\n  border-radius: 0px !important;\n\n  .hamburger-container {\n    line-height: 58px;\n    height: 50px;\n    float: left;\n    padding: 0 10px;\n  }\n\n  .screenfull {\n    position: absolute;\n    right: 90px;\n    top: 16px;\n    color: red;\n  }\n\n  .avatar-container {\n    height: 50px;\n    display: inline-block;\n    position: absolute;\n    right: 35px;\n\n    .avatar-wrapper {\n      cursor: pointer;\n      margin-top: 5px;\n      position: relative;\n\n      .user-avatar {\n        width: 40px;\n        height: 40px;\n        border-radius: 10px;\n      }\n\n      .el-icon-caret-bottom {\n        position: absolute;\n        right: -20px;\n        top: 25px;\n        font-size: 12px;\n      }\n    }\n  }\n}\n</style>\n"
  },
  {
    "path": "src/views/layout/components/Sidebar/SidebarItem.vue",
    "content": "<script lang=\"ts\" setup>\nimport type { RouteRecordExt } from '@/types/router'\nimport { computed, type PropType } from 'vue'\n\n// 定义组件名称\ndefineOptions({\n  name: 'SidebarItem'\n})\n\n// 定义props\nconst props = defineProps({\n  // 生成菜单的路由\n  routes: {\n    type: Array as PropType<RouteRecordExt[]>\n  },\n  // 控制只有一个子菜单的一级菜单样式\n  isNest: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 过滤出需要显示的路由\nconst filteredRoutes = computed(() => {\n  return props.routes!.filter(item => !item.hidden && item.children)\n})\n\n// 过滤出需要显示的子路由\nconst getFilteredChildren = (children: RouteRecordExt[]) => {\n  return children.filter(child => !child.hidden)\n}\n\n// 判断路由下方是否只有一个子路由\nconst hasOneShowingChildren = (children: RouteRecordExt[]) => {\n  const showingChildren = children.filter(item => {\n    return !item.hidden\n  })\n  if (showingChildren.length === 1) {\n    return true\n  }\n  return false\n}\n</script>\n\n<template>\n  <div class=\"menu-wrapper\">\n    <template v-for=\"item in filteredRoutes\">\n      <!-- 只有一个子菜单的一级菜单 -->\n      <router-link\n        v-if=\"item.children && hasOneShowingChildren(item.children) && !item.children[0]!.children && !item.alwaysShow\"\n        :to=\"item.path + '/' + item.children[0]!.path\" :key=\"item.children[0]!.name\">\n        <el-menu-item :index=\"item.path + '/' + item.children[0]!.path\"\n          :class=\"{ 'submenu-title-noDropdown': !isNest }\">\n          <svg-icon v-if=\"item.children[0]!.meta && item.children[0]!.meta.icon\"\n            :icon-class=\"item.children[0]!.meta.icon\">\n          </svg-icon>\n          <template #title>\n            <span v-if=\"item.children[0]!.meta && item.children[0]!.meta.title\">{{ item.children[0]!.meta.title\n              }}</span>\n          </template>\n        </el-menu-item>\n      </router-link>\n      <!-- 有多个子菜单的一级菜单 -->\n      <el-sub-menu v-else :index=\"item.name as string || item.path\" :key=\"item.name\">\n        <!-- 一级菜单 -->\n        <template #title>\n          <svg-icon v-if=\"item.meta && item.meta.icon\" :icon-class=\"item.meta.icon\"></svg-icon>\n          <span v-if=\"item.meta && item.meta.title\">{{ item.meta.title }}</span>\n        </template>\n        <!-- 子菜单 -->\n        <template v-for=\"child in getFilteredChildren(item.children!)\">\n          <sidebar-item :is-nest=\"true\" class=\"nest-menu\" v-if=\"child.children && child.children.length > 0\"\n            :routes=\"[child]\" :key=\"child.path\"></sidebar-item>\n          <!-- 具有外链功能的子菜单 -->\n          <a v-else-if=\"child.path.startsWith('http')\" v-bind:href=\"child.path\" target=\"_blank\" :key=\"child.name\">\n            <el-menu-item :index=\"item.path + '/' + child.path\">\n              <svg-icon v-if=\"child.meta && child.meta.icon\" :icon-class=\"child.meta.icon\"></svg-icon>\n              <template #title>\n                <span v-if=\"child.meta && child.meta.title\">{{ child.meta.title }}</span>\n              </template>\n            </el-menu-item>\n          </a>\n          <!-- 普通子菜单 -->\n          <router-link v-else :to=\"item.path + '/' + child.path\" :key=\"'route-' + (child.name as string)\">\n            <el-menu-item :index=\"item.path + '/' + child.path\">\n              <svg-icon v-if=\"child.meta && child.meta.icon\" :icon-class=\"child.meta.icon\"></svg-icon>\n              <template #title>\n                <span v-if=\"child.meta && child.meta.title\">{{ child.meta.title }}</span>\n              </template>\n            </el-menu-item>\n          </router-link>\n        </template>\n      </el-sub-menu>\n\n    </template>\n  </div>\n</template>\n"
  },
  {
    "path": "src/views/layout/components/Sidebar/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport SidebarItem from './SidebarItem.vue'\nimport ScrollBar from '@/components/ScrollBar/index.vue'\nimport { useAppStore } from '@/stores/app'\nimport usePermissionStore from '@/stores/permission'\n\n// 定义组件名称\ndefineOptions({\n  name: 'Sidebar'\n})\n\n// 使用 Pinia stores\nconst appStore = useAppStore()\nconst permissionStore = usePermissionStore()\n\nconst route = useRoute()\n// 所有路由\nconst routes = computed(() => permissionStore.routers)\n// 侧边栏打开状态\nconst isCollapse = computed(() => !appStore.sidebar.opened)\n</script>\n\n<template>\n  <scroll-bar>\n    <el-menu mode=\"vertical\" :show-timeout=\"200\" :default-active=\"route.path\" :collapse=\"isCollapse\"\n      background-color=\"#304156\" text-color=\"#bfcbd9\" active-text-color=\"#409EFF\">\n      <sidebar-item :routes=\"routes\"></sidebar-item>\n    </el-menu>\n  </scroll-bar>\n</template>\n"
  },
  {
    "path": "src/views/layout/composables/useResizeHandler.ts",
    "content": "import { onMounted, onBeforeMount, onBeforeUnmount, watch } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useAppStore } from '@/stores/app'\n\nconst { body } = document\nconst WIDTH = 1024\nconst RATIO = 3\n\nexport default function useResizeHandler() {\n  const route = useRoute()\n  const appStore = useAppStore()\n\n  // 监听路由变化\n  watch(\n    () => route,\n    () => {\n      if (appStore.device === 'mobile' && appStore.sidebar.opened) {\n        appStore.closeSideBar(false)\n      }\n    },\n  )\n\n  // 判断是否为移动端访问\n  const isMobile = () => {\n    const rect = body.getBoundingClientRect()\n    return rect.width - RATIO < WIDTH\n  }\n\n  const resizeHandler = () => {\n    if (!document.hidden) {\n      const mobile = isMobile()\n      appStore.toggleDevice(mobile ? 'mobile' : 'desktop')\n\n      if (mobile) {\n        appStore.closeSideBar(true)\n      }\n    }\n  }\n\n  // 在组件挂在之前调用\n  onBeforeMount(() => {\n    window.addEventListener('resize', resizeHandler)\n  })\n\n  // 在组件挂在之后调用\n  onMounted(() => {\n    const mobile = isMobile()\n    if (mobile) {\n      appStore.toggleDevice('mobile')\n      appStore.closeSideBar(true)\n    }\n  })\n\n  // 在组件卸载之前调用\n  onBeforeUnmount(() => {\n    window.removeEventListener('resize', resizeHandler)\n  })\n\n  return {\n    isMobile,\n    resizeHandler,\n  }\n}\n"
  },
  {
    "path": "src/views/normal/404/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport img_404 from '@/assets/images/gif_404.gif'\n\n// 定义组件名称\ndefineOptions({\n  name: 'wrongPage'\n})\n\n// 使用路由\nconst router = useRouter()\n\n// 方法定义\nconst handleGoMain = () => {\n  router.push({ path: '/' })\n}\n</script>\n<template>\n  <div>\n    <div class=\"app-container\">\n      <el-row>\n        <el-col :span=\"12\">\n          <img :src=\"img_404\" alt=\"404\" class=\"img-style\">\n        </el-col>\n        <el-col :span=\"12\">\n          <div style=\"margin-left: 100px;margin-top: 60px\">\n            <h1 class=\"color-main\">OOPS!</h1>\n            <h2 style=\"color: #606266\">很抱歉，页面它不小心迷路了！</h2>\n            <div style=\"color:#909399;font-size: 14px\">请检查您输入的网址是否正确，请点击以下按钮返回主页或者发送错误报告</div>\n            <el-button style=\"margin-top: 20px\" type=\"primary\" round @click=\"handleGoMain\">返回首页</el-button>\n          </div>\n        </el-col>\n      </el-row>\n    </div>\n  </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.app-container {\n  width: 80%;\n  margin: 120px auto;\n}\n\n.img-style {\n  width: auto;\n  height: auto;\n  max-width: 100%;\n  max-height: 100%;\n}\n</style>\n"
  },
  {
    "path": "src/views/normal/link/index.vue",
    "content": "<script setup lang=\"ts\">\n\n</script>\n\n<template>\n  <div>\n    仅作为外链菜单占位组件使用\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/normal/login/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { reactive, ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useUserStore } from '@/stores/user';\nimport { isvalidUsername } from '@/utils/validate';\nimport login_center_bg from '@/assets/images/login_center_bg.png'\nimport { type FormInstance, type FormRules } from 'element-plus';\n\n// 使用Vue Router和Pinia\nconst router = useRouter()\nconst userStore = useUserStore()\n\n// 表单引用\nconst loginFormRef = ref<FormInstance>()\n\n// 登陆表单数据\nconst loginForm = reactive({\n  username: '',\n  password: '',\n})\n\n// 表单参数校验规则\nconst loginRules = reactive<FormRules<typeof loginForm>>({\n  username: [{ required: true, trigger: 'blur', validator: validateUsername }],\n  password: [{ required: true, trigger: 'blur', validator: validatePass }]\n})\n\n// 登陆按钮进度条\nconst loading = ref(false)\n// 公众号对话框是否可见\nconst dialogVisible = ref(false)\n\n// 用户名验证函数\nfunction validateUsername(rule: unknown, value: string, callback: (error?: Error) => void) {\n  if (!isvalidUsername(value)) {\n    callback(new Error('请输入正确的用户名'))\n  } else {\n    callback()\n  }\n};\n\n// 密码验证函数\nfunction validatePass(rule: unknown, value: string, callback: (error?: Error) => void) {\n  if (value.length < 3) {\n    callback(new Error('密码不能小于3位'))\n  } else {\n    callback()\n  }\n};\n\n// 组件挂载完成后调用\nonMounted(() => {\n  loginForm.username = userStore.userInfo.username\n  loginForm.password = userStore.userInfo.password\n  if (loginForm.username === undefined || loginForm.username == null || loginForm.username === '') {\n    loginForm.username = 'admin';\n  }\n})\n\n// 处理登录按钮事件\nconst handleLogin = () => {\n  loginFormRef.value!.validate(async (valid) => {\n    if (valid) {\n      loading.value = true\n      try {\n        await userStore.userLogin({\n          username: loginForm.username.trim(),\n          password: loginForm.password\n        })\n        loading.value = false\n        router.push({ path: '/' })\n      }\n      catch (err) {\n        loading.value = false\n        console.log(err)\n      }\n    } else {\n      console.log('参数验证不合法！')\n    }\n  })\n}\n</script>\n\n<template>\n  <div>\n    <el-card class=\"login-form-layout\">\n      <el-form autoComplete=\"on\" :model=\"loginForm\" :rules=\"loginRules\" ref=\"loginFormRef\" label-position=\"left\">\n        <div style=\"text-align: center\">\n          <svg-icon icon-class=\"login-mall\" style=\"width: 56px;height: 56px;color: #409EFF\"></svg-icon>\n        </div>\n        <h2 class=\"login-title color-main\">mall-admin-web</h2>\n        <el-form-item prop=\"username\">\n          <el-input name=\"username\" type=\"text\" v-model=\"loginForm.username\" autoComplete=\"on\" placeholder=\"请输入用户名\">\n            <template #prefix>\n              <span>\n                <svg-icon icon-class=\"user\" class=\"color-main\"></svg-icon>\n              </span>\n            </template>\n          </el-input>\n        </el-form-item>\n        <el-form-item prop=\"password\">\n          <el-input name=\"password\" @keyup.enter=\"handleLogin\" v-model=\"loginForm.password\" autoComplete=\"on\"\n            show-password placeholder=\"请输入密码\">\n            <template #prefix>\n              <span>\n                <svg-icon icon-class=\"password\" class=\"color-main\"></svg-icon>\n              </span>\n            </template>\n          </el-input>\n        </el-form-item>\n        <el-form-item style=\"margin-bottom: 60px;text-align: center\">\n          <el-button style=\"width: 45%\" type=\"primary\" :loading=\"loading\" @click=\"handleLogin\">\n            登录\n          </el-button>\n          <el-button style=\"width: 45%\" type=\"primary\" @click=\"dialogVisible = true\">\n            获取体验账号\n          </el-button>\n        </el-form-item>\n      </el-form>\n    </el-card>\n    <img :src=\"login_center_bg\" class=\"login-center-layout\">\n    <el-dialog title=\"公众号二维码\" v-model=\"dialogVisible\" :show-close=\"false\" :center=\"true\" width=\"30%\">\n      <div style=\"text-align: center\">\n        <span class=\"font-title-large\"><span class=\"color-main font-extra-large\">关注公众号</span>回复<span\n            class=\"color-main font-extra-large\">体验</span>获取体验账号</span>\n        <br>\n        <img src=\"http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg\" width=\"160\"\n          height=\"160\" style=\"margin-top: 10px\">\n      </div>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button type=\"primary\" @click=\"dialogVisible = false\">确定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n.login-form-layout {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: 360px;\n  margin: 140px auto;\n  border-top: 10px solid #409EFF;\n}\n\n.login-title {\n  text-align: center;\n}\n\n.login-center-layout {\n  background: #409EFF;\n  width: auto;\n  height: auto;\n  max-width: 100%;\n  max-height: 100%;\n  margin-top: 200px;\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/apply/applyDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getReturnApplyByIdAPI, returnApplyUpdateStatusAPI } from '@/apis/returnApply'\nimport { getCompanyAddressListAPI } from '@/apis/companyAddress'\nimport { formatDateTime } from '@/utils/datetime'\nimport type { OmsOrderReturnApply, OmsUpdateStatusParam } from '@/types/returnApply'\nimport type { OmsCompanyAddress } from '@/types/companyAddress'\n\n// 默认状态修改参数\nconst defaultUpdateStatusParam = {\n  id: 0,\n  companyAddressId: 0,\n  handleMan: 'admin',\n  handleNote: '',\n  receiveMan: 'admin',\n  receiveNote: '',\n  returnAmount: 0,\n  status: 0\n}\n\n// 路由相关\nconst route = useRoute()\nconst router = useRouter()\n\n// 当前退货申请ID\nconst id = ref()\n// 当前退货申请\nconst orderReturnApply = ref({} as OmsOrderReturnApply)\n// 凭证图片\nconst proofPics = ref<string[]>([])\n// 退货商品列表\nconst productList = ref()\n// 公司收货地址列表\nconst companyAddressList = ref<OmsCompanyAddress[]>([])\n// 修改退货申请状态参数\nconst updateStatusParam = ref<OmsUpdateStatusParam>(Object.assign({}, defaultUpdateStatusParam))\n// 获取详情\nconst getDetail = async () => {\n  const res = await getReturnApplyByIdAPI(id.value)\n  orderReturnApply.value = res.data\n  productList.value = []\n  productList.value.push(orderReturnApply.value)\n  if (orderReturnApply.value.proofPics) {\n    proofPics.value = orderReturnApply.value.proofPics.split(\",\")\n  }\n  // 退货中和完成\n  if (orderReturnApply.value.status === 1 || orderReturnApply.value.status === 2) {\n    updateStatusParam.value.returnAmount = orderReturnApply.value.returnAmount\n    updateStatusParam.value.companyAddressId = orderReturnApply.value.companyAddressId\n  }\n}\n// 获取公司地址列表\nconst getCompanyAddressList = async () => {\n  const res = await getCompanyAddressListAPI()\n  companyAddressList.value = res.data\n  // 获取默认收货地址\n  const defaultAddress = companyAddressList.value.find(item => item.receiveStatus === 1)\n  if (defaultAddress) {\n    updateStatusParam.value.companyAddressId = defaultAddress.id!\n  }\n}\n\n// 组件挂载\nonMounted(() => {\n  id.value = route.query.id\n  getDetail()\n  getCompanyAddressList()\n})\n\n// 计算属性\nconst totalAmount = computed(() => {\n  if (orderReturnApply.value != null) {\n    return orderReturnApply.value.productRealPrice * orderReturnApply.value.productCount\n  } else {\n    return 0\n  }\n})\n\n// 当前收货地址\nconst currentAddress = computed(() => {\n  const idValue = updateStatusParam.value.companyAddressId\n  if (!companyAddressList.value) return undefined\n  return companyAddressList.value.find(item => item.id === idValue)\n})\n\n// 格式化状态\nconst formatStatus = (status: number) => {\n  if (status === 0) {\n    return \"待处理\"\n  } else if (status === 1) {\n    return \"退货中\"\n  } else if (status === 2) {\n    return \"已完成\"\n  } else {\n    return \"已拒绝\"\n  }\n}\n\n// 格式化地区\nconst formatRegion = (address: OmsCompanyAddress | undefined) => {\n  if (!address) return ''\n  let str = address.province\n  if (address.city) {\n    str += \"  \" + address.city\n  }\n  str += \"  \" + address.region\n  return str\n}\n\n// 查看订单详情\nconst handleViewOrder = () => {\n  router.push({ path: '/oms/orderDetail', query: { id: orderReturnApply.value.orderId } })\n}\n\n// 更新状态\nconst handleUpdateStatus = async (status: number) => {\n  updateStatusParam.value.status = status\n  await ElMessageBox.confirm('是否要进行此操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await returnApplyUpdateStatusAPI(id.value, updateStatusParam.value)\n  ElMessage({\n    type: 'success',\n    message: '操作成功!',\n    duration: 1000\n  })\n  router.back()\n}\n\n\n</script>\n\n<template>\n  <div class=\"detail-container\">\n    <el-card shadow=\"never\">\n      <span class=\"font-title-medium\">退货商品</span>\n      <el-table border class=\"standard-margin\" ref=\"productTable\" :data=\"productList\">\n        <el-table-column label=\"商品图片\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">\n            <img style=\"height:80px\" :src=\"scope.row.productPic\">\n          </template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">\n            <span class=\"font-small\">{{ scope.row.productName }}</span><br>\n            <span class=\"font-small\">品牌：{{ scope.row.productBrand }}</span>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"价格/货号\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <span class=\"font-small\">价格：￥{{ scope.row.productRealPrice }}</span><br>\n            <span class=\"font-small\">货号：NO.{{ scope.row.productId }}</span>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"属性\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productAttr }}</template>\n        </el-table-column>\n        <el-table-column label=\"数量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"小计\" width=\"100\" align=\"center\">\n          <template>￥{{ totalAmount }}</template>\n        </el-table-column>\n      </el-table>\n      <div style=\"float:right;margin-top:15px;margin-bottom:15px\">\n        <span class=\"font-title-medium\">合计：</span>\n        <span class=\"font-title-medium color-danger\">￥{{ totalAmount }}</span>\n      </div>\n    </el-card>\n    <el-card shadow=\"never\" class=\"standard-margin\">\n      <span class=\"font-title-medium\">服务单信息</span>\n      <div class=\"form-container-border\">\n        <el-row>\n          <el-col :span=\"6\" class=\"form-border form-left-bg font-small\">服务单号</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.id }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">申请状态</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ formatStatus(orderReturnApply.status) }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"form-border form-left-bg font-small\" style=\"height:50px;line-height:30px\">订单编号\n          </el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\" style=\"height:50px\">\n            {{ orderReturnApply.orderSn }}\n            <el-button type=\"text\" size=\"small\" @click=\"handleViewOrder\">查看</el-button>\n          </el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">申请时间</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ formatDateTime(orderReturnApply.createTime) }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">用户账号</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.memberUsername }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">联系人</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.returnName }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">联系电话</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.returnPhone }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">退货原因</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.reason }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">问题描述</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.description }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\" style=\"height:100px;line-height:80px\">凭证图片\n          </el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\" style=\"height:100px\">\n            <img v-for=\"item in proofPics\" style=\"width:80px;height:80px\" :src=\"item\" :key=\"item\">\n          </el-col>\n        </el-row>\n      </div>\n      <div class=\"form-container-border\">\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">订单金额</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">￥{{ totalAmount }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\" style=\"height:52px;line-height:32px\">确认退款金额\n          </el-col>\n          <el-col class=\"form-border font-small\" style=\"height:52px\" :span=\"18\">\n            ￥\n            <el-input size=\"small\" v-model=\"updateStatusParam.returnAmount\" :disabled=\"orderReturnApply.status !== 0\"\n              style=\"width:200px;margin-left: 10px\"></el-input>\n          </el-col>\n        </el-row>\n        <div v-show=\"orderReturnApply.status !== 3\">\n          <el-row>\n            <el-col class=\"form-border form-left-bg font-small\" :span=\"6\" style=\"height:52px;line-height:32px\">选择收货点\n            </el-col>\n            <el-col class=\"form-border font-small\" style=\"height:52px\" :span=\"18\">\n              <el-select size=\"small\" style=\"width:200px\" :disabled=\"orderReturnApply.status !== 0\"\n                v-model=\"updateStatusParam.companyAddressId\">\n                <el-option v-for=\"address in companyAddressList\" :key=\"address.id\" :value=\"address.id!\"\n                  :label=\"address.addressName\">\n                </el-option>\n              </el-select>\n            </el-col>\n          </el-row>\n          <el-row>\n            <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">收货人姓名</el-col>\n            <el-col class=\"form-border font-small\" :span=\"18\">{{ currentAddress?.name }}</el-col>\n          </el-row>\n          <el-row>\n            <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">所在区域</el-col>\n            <el-col class=\"form-border font-small\" :span=\"18\">{{ formatRegion(currentAddress)\n              }}</el-col>\n          </el-row>\n          <el-row>\n            <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">详细地址</el-col>\n            <el-col class=\"form-border font-small\" :span=\"18\">{{ currentAddress?.detailAddress }}</el-col>\n          </el-row>\n          <el-row>\n            <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">联系电话</el-col>\n            <el-col class=\"form-border font-small\" :span=\"18\">{{ currentAddress?.phone }}</el-col>\n          </el-row>\n        </div>\n      </div>\n      <div class=\"form-container-border\" v-show=\"orderReturnApply.status !== 0\">\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">处理人员</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.handleMan }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">处理时间</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ formatDateTime(orderReturnApply.handleTime) }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">处理备注</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.handleNote }}</el-col>\n        </el-row>\n      </div>\n      <div class=\"form-container-border\" v-show=\"orderReturnApply.status === 2\">\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">收货人员</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.receiveMan }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">收货时间</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ formatDateTime(orderReturnApply.receiveTime) }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\">收货备注</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">{{ orderReturnApply.receiveNote }}</el-col>\n        </el-row>\n      </div>\n      <div class=\"form-container-border\" v-show=\"orderReturnApply.status === 0\">\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\"\n            style=\"height:52px;line-height:32px\">处理备注</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">\n            <el-input size=\"small\" v-model=\"updateStatusParam.handleNote\"\n              style=\"width:200px;margin-left: 10px\"></el-input>\n          </el-col>\n        </el-row>\n      </div>\n      <div class=\"form-container-border\" v-show=\"orderReturnApply.status === 1\">\n        <el-row>\n          <el-col class=\"form-border form-left-bg font-small\" :span=\"6\"\n            style=\"height:52px;line-height:32px\">收货备注</el-col>\n          <el-col class=\"form-border font-small\" :span=\"18\">\n            <el-input size=\"small\" v-model=\"updateStatusParam.receiveNote\"\n              style=\"width:200px;margin-left: 10px\"></el-input>\n          </el-col>\n        </el-row>\n      </div>\n      <div style=\"margin-top:15px;text-align: center\" v-show=\"orderReturnApply.status === 0\">\n        <el-button type=\"primary\" size=\"small\" @click=\"handleUpdateStatus(1)\">确认退货</el-button>\n        <el-button type=\"danger\" size=\"small\" @click=\"handleUpdateStatus(3)\">拒绝退货</el-button>\n      </div>\n      <div style=\"margin-top:15px;text-align: center\" v-show=\"orderReturnApply.status === 1\">\n        <el-button type=\"primary\" size=\"small\" @click=\"handleUpdateStatus(2)\">确认收货</el-button>\n      </div>\n    </el-card>\n  </div>\n</template>\n\n<style scoped>\n.detail-container {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: 1080px;\n  padding: 35px 35px 15px 35px;\n  margin: 20px auto;\n}\n\n.standard-margin {\n  margin-top: 15px;\n}\n\n.form-border {\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n  padding: 10px;\n}\n\n.form-container-border {\n  border-left: 1px solid #DCDFE6;\n  border-top: 1px solid #DCDFE6;\n  margin-top: 15px;\n}\n\n.form-left-bg {\n  background: #F2F6FC;\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/apply/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { formatDateTime } from '@/utils/datetime'\nimport { getReturnApplyListAPI, returnApplyDeleteByIdsAPI } from '@/apis/returnApply'\nimport type { OmsOrderReturnApply, ReturnApplyQueryParam } from '@/types/returnApply'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 默认处理状态\nconst defaultStatusOptions = [\n  {\n    label: '待处理',\n    value: 0\n  },\n  {\n    label: '退货中',\n    value: 1\n  },\n  {\n    label: '已完成',\n    value: 2\n  },\n  {\n    label: '已拒绝',\n    value: 3\n  }\n]\n\n// 列表查询参数\nconst listQuery = ref<ReturnApplyQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 状态选项\nconst statusOptions = ref(Object.assign({}, defaultStatusOptions))\n// 列表数据\nconst list = ref<OmsOrderReturnApply[]>([])\n// 总数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(false)\n// 多选数据\nconst multipleSelection = ref<OmsOrderReturnApply[]>([])\n// 获取列表\nconst getList = async () => {\n  listLoading.value = true\n  const res = await getReturnApplyListAPI(listQuery.value)\n  listLoading.value = false\n  list.value = res.data.list\n  total.value = res.data.total\n}\n\n// 组件挂载后获取列表\nonMounted(() => {\n  getList()\n})\n\n// 操作类型\nconst operateType = ref()\n// 操作选项\nconst operateOptions = ref([\n  {\n    label: \"批量删除\",\n    value: 1\n  }\n])\n\n// 格式化状态\nconst formatStatus = (status: number) => {\n  return defaultStatusOptions.find(item => item.value === status)?.label\n}\n\n// 格式化退款金额\nconst formatReturnAmount = (row: OmsOrderReturnApply) => {\n  return row.productRealPrice * row.productCount\n}\n\n// 处理选择变化\nconst handleSelectionChange = (val: OmsOrderReturnApply[]) => {\n  multipleSelection.value = val\n}\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 查看详情\nconst handleViewDetail = (index: number, row: OmsOrderReturnApply) => {\n  router.push({ path: '/oms/returnApplyDetail', query: { id: row.id } })\n}\n\n// 批量操作\nconst handleBatchOperate = async () => {\n  if (!multipleSelection.value || multipleSelection.value.length < 1) {\n    ElMessage({\n      message: '请选择要操作的申请',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  if (operateType.value === 1) {\n    // 批量删除\n    await ElMessageBox.confirm('是否要进行删除操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await returnApplyDeleteByIdsAPI({ ids: multipleSelection.value.map(item => item.id).join(',') })\n    getList()\n    ElMessage({\n      type: 'success',\n      message: '删除成功!'\n    })\n  }\n}\n\n// 处理每页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input v-model=\"listQuery.id\" class=\"input-width\" placeholder=\"服务单号\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"处理状态：\">\n            <el-select v-model=\"listQuery.status\" placeholder=\"全部\" clearable class=\"input-width\">\n              <el-option v-for=\"item in statusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"申请时间：\">\n            <el-date-picker class=\"input-width\" v-model=\"listQuery.createTime\" value-format=\"yyyy-MM-dd\" type=\"date\"\n              placeholder=\"请选择时间\">\n            </el-date-picker>\n          </el-form-item>\n          <el-form-item label=\"操作人员：\">\n            <el-input v-model=\"listQuery.handleMan\" class=\"input-width\" placeholder=\"全部\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"处理时间：\">\n            <el-date-picker class=\"input-width\" v-model=\"listQuery.handleTime\" value-format=\"yyyy-MM-dd\" type=\"date\"\n              placeholder=\"请选择时间\">\n            </el-date-picker>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"returnApplyTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"服务单号\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"申请时间\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"用户账号\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.memberUsername }}</template>\n        </el-table-column>\n        <el-table-column label=\"退款金额\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">￥{{ formatReturnAmount(scope.row) }}</template>\n        </el-table-column>\n        <el-table-column label=\"申请状态\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ formatStatus(scope.row.status) }}</template>\n        </el-table-column>\n        <el-table-column label=\"处理时间\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.handleTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleViewDetail(scope.$index, scope.row)\">查看详情</el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operateOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.input-width {\n  width: 203px\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/apply/reason.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { getReturnReasonListAPI, returnReasonDeleteByIdsAPI, returnReasonUpdateStatusAPI, returnReasonCreateAPI, getReturnReasonByIdAPI, returnReasonUpdateAPI } from '@/apis/returnReason'\nimport { formatDateTime } from '@/utils/datetime'\nimport type { PageParam } from '@/types/common'\nimport type { OmsOrderReturnReason } from '@/types/returnReason'\n\n// 列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 列表数据\nconst list = ref<OmsOrderReturnReason[]>([])\n// 列表总条数\nconst total = ref(0)\n// 表格中被选中的行\nconst multipleSelection = ref<OmsOrderReturnReason[]>([])\n// 表格数据加载进度条\nconst listLoading = ref(true)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  const res = await getReturnReasonListAPI(listQuery.value)\n  listLoading.value = false\n  list.value = res.data.list\n  total.value = res.data.total\n}\n\n// 组件挂载后加载数据\nonMounted(() => {\n  getList()\n})\n\n// reason对象默认值\nconst defaultReturnReason: OmsOrderReturnReason = {\n  name: '',\n  sort: 0,\n  status: 1,\n}\n// 编辑框是否可见\nconst dialogVisible = ref(false)\n// 当前操作的reason对象\nconst returnReason = ref(Object.assign({}, defaultReturnReason))\n// 当前操作的reasonId,为null时表示新增\nconst operateReasonId = ref<number>()\n\n// 批量操作类型\nconst operateType = ref()\n// 所有批量操作\nconst operateOptions = ref([\n  {\n    label: \"删除\",\n    value: 1\n  }\n])\n\nconst handleAdd = () => {\n  dialogVisible.value = true\n  operateReasonId.value = undefined\n  returnReason.value = Object.assign({}, defaultReturnReason)\n}\n\nconst handleConfirm = async () => {\n  if (!operateReasonId.value) {\n    // 添加操作\n    await returnReasonCreateAPI(returnReason.value)\n    dialogVisible.value = false\n    operateReasonId.value = undefined\n    ElMessage({\n      message: '添加成功！',\n      type: 'success',\n      duration: 1000\n    })\n    getList()\n  } else {\n    // 编辑操作\n    await returnReasonUpdateAPI(operateReasonId.value, returnReason.value)\n    dialogVisible.value = false\n    operateReasonId.value = undefined\n    ElMessage({\n      message: '修改成功！',\n      type: 'success',\n      duration: 1000\n    })\n    getList()\n  }\n}\n\nconst handleUpdate = async (index: number, row: OmsOrderReturnReason) => {\n  dialogVisible.value = true\n  operateReasonId.value = row.id\n  const res = await getReturnReasonByIdAPI(row.id!)\n  returnReason.value = res.data\n}\n\nconst handleDelete = (index: number, row: OmsOrderReturnReason) => {\n  const ids = []\n  ids.push(row.id!)\n  deleteReasonMethod(ids)\n}\n\nconst handleSelectionChange = (val: OmsOrderReturnReason[]) => {\n  multipleSelection.value = val\n}\n\nconst handleStatusChange = async (index: number, row: OmsOrderReturnReason) => {\n  const ids = []\n  ids.push(row.id)\n  await returnReasonUpdateStatusAPI({ ids: ids.join(','), status: row.status })\n  ElMessage({\n    message: '状态修改成功',\n    type: 'success'\n  })\n}\n\nconst handleBatchOperate = () => {\n  if (!multipleSelection.value || multipleSelection.value.length < 1) {\n    ElMessage({\n      message: '请选择要操作的条目',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  if (operateType.value === 1) {\n    deleteReasonMethod(multipleSelection.value.map(item => item.id!))\n  }\n}\n\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\nconst deleteReasonMethod = async (ids: number[]) => {\n  await ElMessageBox.confirm('是否要进行该删除操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await returnReasonDeleteByIdsAPI({ ids: ids.join(',') })\n  ElMessage({\n    message: '删除成功！',\n    type: 'success',\n    duration: 1000\n  })\n  listQuery.value.pageNum = 1\n  getList()\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button @click=\"handleAdd\" class=\"btn-add\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"returnReasonTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"80\" align=\"center\">\n          <template v-slot=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"原因类型\" align=\"center\">\n          <template v-slot=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template v-slot=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否可用\" align=\"center\">\n          <template v-slot=\"scope\">\n            <el-switch v-model=\"scope.row.status\" @change=\"handleStatusChange(scope.$index, scope.row)\"\n              :active-value=\"1\" :inactive-value=\"0\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"添加时间\" width=\"180\" align=\"center\">\n          <template v-slot=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"160\" align=\"center\">\n          <template v-slot=\"scope\">\n            <el-button size=\"small\" @click=\"handleUpdate(scope.$index, scope.row)\">编辑</el-button>\n            <el-button size=\"small\" @click=\"handleDelete(scope.$index, scope.row)\">删除</el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operateOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"添加退货原因\" v-model=\"dialogVisible\" width=\"30%\">\n      <el-form :model=\"returnReason\" ref=\"reasonForm\" label-width=\"150px\">\n        <el-form-item label=\"原因类型：\">\n          <el-input v-model=\"returnReason.name\" class=\"input-width\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"returnReason.sort\" class=\"input-width\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"是否启用：\">\n          <el-switch v-model=\"returnReason.status\" :active-value=\"1\" :inactive-value=\"0\"></el-switch>\n        </el-form-item>\n      </el-form>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleConfirm\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n.input-width {\n  width: 80%\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/order/components/logisticsDialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\n// 定义组件的props\nconst props = defineProps({\n  modelValue: Boolean\n})\n\n// 定义组件的emits\nconst emit = defineEmits(['update:modelValue'])\n\n// 默认物流列表数据\nconst defaultLogisticsList = [\n  { name: '订单已提交，等待付款', time: '2017-04-01 12:00:00 ' },\n  { name: '订单付款成功', time: '2017-04-01 12:00:00 ' },\n  { name: '在北京市进行下级地点扫描，等待付款', time: '2017-04-01 12:00:00 ' },\n  { name: '在分拨中心广东深圳公司进行卸车扫描，等待付款', time: '2017-04-01 12:00:00 ' },\n  { name: '在广东深圳公司进行发出扫描', time: '2017-04-01 12:00:00 ' },\n  { name: '到达目的地网点广东深圳公司，快件将很快进行派送', time: '2017-04-01 12:00:00 ' },\n  { name: '订单已签收，期待再次为您服务', time: '2017-04-01 12:00:00 ' }\n]\n\n// 物流列表数据\nconst logisticsList = ref(Object.assign([], defaultLogisticsList))\n\n// 控制对话框显示的计算属性\nconst visible = computed({\n  get() {\n    return props.modelValue\n  },\n  set(visible) {\n    emit('update:modelValue', visible)\n  }\n})\n\n// 发出输入事件\nconst emitInput = (val: boolean) => {\n  emit('update:modelValue', val)\n}\n\n// 处理关闭对话框\nconst handleClose = () => {\n  emitInput(false)\n}\n</script>\n\n<template>\n  <el-dialog title=\"订单跟踪\" v-model=\"visible\" :before-close=\"handleClose\" width=\"40%\">\n    <el-steps direction=\"vertical\" :active=\"6\" finish-status=\"success\" space=\"50px\">\n      <el-step v-for=\"item in logisticsList\" :key=\"item.name\" :title=\"item.name\" :description=\"item.time\"></el-step>\n    </el-steps>\n  </el-dialog>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/oms/order/deliverOrderList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { orderUpdateDeliveryAPI } from '@/apis/order'\nimport type { OmsOrder, OmsOrderDeliveryParam } from '@/types/order'\nimport { useOrderStore } from '@/stores/order'\n\n// 获取路由对象\nconst router = useRouter()\n// 获取 订单store\nconst orderStore = useOrderStore()\n\n// 默认物流公司选项\nconst defaultLogisticsCompanies = [\"顺丰快递\", \"圆通快递\", \"中通快递\", \"韵达快递\"]\n\n// 发货订单列表数据\nconst list = ref<OmsOrder[]>([])\n// 物流公司选项\nconst companyOptions = ref<string[]>(defaultLogisticsCompanies)\n\n// 根据订单对象获取详细地址\nconst fortmatAddress = (order: OmsOrder) => {\n  return order.receiverProvince + order.receiverCity + order.receiverRegion + order.receiverDetailAddress\n}\n\n// 组件挂载后初始化数据\nonMounted(() => {\n  list.value = orderStore.deliverOrderList\n  // 清空store中的数据\n  orderStore.setDeliverOrderList([])\n})\n\n// 取消操作\nconst cancel = () => {\n  router.back()\n}\n\n// 确认发货操作\nconst confirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要进行发货操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    const deliveryParamList: OmsOrderDeliveryParam[] = list.value.map(item => ({\n      orderId: item.id,\n      deliverySn: item.orderSn,\n      deliveryCompany: item.deliveryCompany\n    }))\n    await orderUpdateDeliveryAPI(deliveryParamList)\n    router.back()\n    ElMessage({\n      type: 'success',\n      message: '发货成功!'\n    })\n  } catch (error) {\n    if (error !== 'cancel') {\n      ElMessage({\n        type: 'info',\n        message: '已取消发货'\n      })\n    }\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>发货列表</span>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"deliverOrderTable\" style=\"width: 100%;\" :data=\"list\" border>\n        <el-table-column label=\"订单编号\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.orderSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"收货人\" width=\"150\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.receiverName }}</template>\n        </el-table-column>\n        <el-table-column label=\"手机号码\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.receiverPhone }}</template>\n        </el-table-column>\n        <el-table-column label=\"邮政编码\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.receiverPostCode }}</template>\n        </el-table-column>\n        <el-table-column label=\"收货地址\" align=\"center\">\n          <template #default=\"scope\">{{ fortmatAddress(scope.row) }}</template>\n        </el-table-column>\n        <el-table-column label=\"配送方式\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-select placeholder=\"请选择物流公司\" v-model=\"scope.row.deliveryCompany\">\n              <el-option v-for=\"item in companyOptions\" :key=\"item\" :label=\"item\" :value=\"item\">\n              </el-option>\n            </el-select>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"物流单号\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-input v-model=\"scope.row.deliverySn\"></el-input>\n          </template>\n        </el-table-column>\n      </el-table>\n      <div style=\"margin-top: 15px;text-align: center\">\n        <el-button @click=\"cancel\">取消</el-button>\n        <el-button @click=\"confirm\" type=\"primary\">确定</el-button>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/oms/order/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getOrderListAPI, orderUpdateCloseAPI, orderDeleteByIdsAPI } from '@/apis/order'\nimport LogisticsDialog from '@/views/oms/order/components/logisticsDialog.vue'\nimport { formatDateTime } from '@/utils/datetime'\nimport type { OmsOrder, OrderQueryParam } from '@/types/order'\nimport { useOrderStore } from '@/stores/order'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 获取订单存储store\nconst orderStore = useOrderStore()\n\n// 订单列表查询参数\nconst listQuery = ref<OrderQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 订单列表数据\nconst list = ref<OmsOrder[]>([])\n// 表格数据加载进度条\nconst listLoading = ref(true)\n// 分页组件参数\nconst total = ref(0)\n// 获取订单列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getOrderListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取订单列表失败:', error)\n  }\n}\n\n// 组件挂载后初始化列表信息\nonMounted(() => {\n  getList()\n})\n\n// 表格中被选中的行\nconst multipleSelection = ref<OmsOrder[]>([])\n// 批量操作类型\nconst operateType = ref<number>()\n\n// 关闭订单对话框相关数据\nconst closeOrderData = ref({\n  dialogVisible: false,\n  content: '',\n  orderIds: [] as number[]\n})\n\n// 物流对话框可见性\nconst logisticsDialogVisible = ref(false)\n\n// 订单状态选项\nconst statusOptions = [\n  {\n    label: '待付款',\n    value: 0\n  },\n  {\n    label: '待发货',\n    value: 1\n  },\n  {\n    label: '已发货',\n    value: 2\n  },\n  {\n    label: '已完成',\n    value: 3\n  },\n  {\n    label: '已关闭',\n    value: 4\n  }\n]\n\n// 订单类型选项\nconst orderTypeOptions = [\n  {\n    label: '正常订单',\n    value: 0\n  },\n  {\n    label: '秒杀订单',\n    value: 1\n  }\n]\n\n// 订单来源选项\nconst sourceTypeOptions = [\n  {\n    label: 'PC订单',\n    value: 0\n  },\n  {\n    label: 'APP订单',\n    value: 1\n  }\n]\n\n// 批量操作选项\nconst operateOptions = [\n  {\n    label: \"批量发货\",\n    value: 1\n  },\n  {\n    label: \"关闭订单\",\n    value: 2\n  },\n  {\n    label: \"删除订单\",\n    value: 3\n  }\n]\n\n// 格式化支付方式\nconst formatPayType = (value: number) => {\n  if (value === 1) {\n    return '支付宝'\n  } else if (value === 2) {\n    return '微信'\n  } else {\n    return '未支付'\n  }\n}\n\n// 格式化订单来源\nconst formatSourceType = (value: number) => {\n  if (value === 1) {\n    return 'APP订单'\n  } else {\n    return 'PC订单'\n  }\n}\n\n// 格式化订单状态\nconst formatStatus = (value: number) => {\n  if (value === 1) {\n    return '待发货'\n  } else if (value === 2) {\n    return '已发货'\n  } else if (value === 3) {\n    return '已完成'\n  } else if (value === 4) {\n    return '已关闭'\n  } else if (value === 5) {\n    return '无效订单'\n  } else {\n    return '待付款'\n  }\n}\n\n// 处理重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\n// 处理搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理表格选中状态变化\nconst handleSelectionChange = (val: OmsOrder[]) => {\n  multipleSelection.value = val\n}\n\n// 处理查看订单\nconst handleViewOrder = (index: number, row: OmsOrder) => {\n  router.push({ path: '/oms/orderDetail', query: { id: row.id } })\n}\n\n// 处理关闭订单\nconst handleCloseOrder = (index: number, row: OmsOrder) => {\n  closeOrderData.value.dialogVisible = true\n  closeOrderData.value.orderIds = [row.id!]\n}\n\n// 处理订单发货\nconst handleDeliveryOrder = (index: number, row: OmsOrder) => {\n  orderStore.setDeliverOrderList([row])\n  router.push({ path: '/oms/deliverOrderList' })\n}\n\n// 处理查看物流\nconst handleViewLogistics = (index: number, row: OmsOrder) => {\n  logisticsDialogVisible.value = true\n  console.log(index, row)\n}\n\n// 处理删除订单\nconst handleDeleteOrder = async (index: number, row: OmsOrder) => {\n  const ids = [row.id!]\n  await deleteOrderFn(ids)\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (!multipleSelection.value || multipleSelection.value.length < 1) {\n    ElMessage({\n      message: '请选择要操作的订单',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  if (operateType.value === 1) {\n    // 批量发货\n    const listItems = multipleSelection.value.filter(item => item.status === 1)\n    if (!listItems || listItems.length < 1) {\n      ElMessage({\n        message: '选中订单中没有可以发货的订单',\n        type: 'warning',\n        duration: 1000\n      })\n      return\n    }\n    orderStore.setDeliverOrderList(listItems)\n    router.push({ path: '/oms/deliverOrderList' })\n  } else if (operateType.value === 2) {\n    // 关闭订单\n    closeOrderData.value.orderIds = multipleSelection.value.filter(item => item.status === 0)\n      .map(item => item.id)\n    closeOrderData.value.dialogVisible = true\n  } else if (operateType.value === 3) {\n    // 删除订单\n    const ids = multipleSelection.value.filter(item => item.status === 4)\n      .map(item => item.id)\n    await deleteOrderFn(ids)\n  }\n}\n\n// 处理每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理确认关闭订单\nconst handleCloseOrderConfirm = async () => {\n  if (!closeOrderData.value.content) {\n    ElMessage({\n      message: '操作备注不能为空',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  const orderIds = closeOrderData.value.orderIds.join(',')\n  await orderUpdateCloseAPI({ ids: orderIds, note: closeOrderData.value.content })\n  closeOrderData.value.orderIds = []\n  closeOrderData.value.dialogVisible = false\n  getList()\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\n// 删除订单函数\nconst deleteOrderFn = async (ids: number[]) => {\n  await ElMessageBox.confirm('是否要进行该删除操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await orderDeleteByIdsAPI({ ids: ids.join(',') })\n  ElMessage({\n    message: '删除成功！',\n    type: 'success',\n    duration: 1000\n  })\n  getList()\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input v-model=\"listQuery.orderSn\" class=\"input-width\" placeholder=\"订单编号\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"收货人：\">\n            <el-input v-model=\"listQuery.receiverKeyword\" class=\"input-width\" placeholder=\"收货人姓名/手机号码\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"提交时间：\">\n            <el-date-picker class=\"input-width\" v-model=\"listQuery.createTime\" value-format=\"yyyy-MM-dd\" type=\"date\"\n              placeholder=\"请选择时间\">\n            </el-date-picker>\n          </el-form-item>\n          <el-form-item label=\"订单状态：\">\n            <el-select v-model=\"listQuery.status\" class=\"input-width\" placeholder=\"全部\" clearable>\n              <el-option v-for=\"item in statusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"订单分类：\">\n            <el-select v-model=\"listQuery.orderType\" class=\"input-width\" placeholder=\"全部\" clearable>\n              <el-option v-for=\"item in orderTypeOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"订单来源：\">\n            <el-select v-model=\"listQuery.sourceType\" class=\"input-width\" placeholder=\"全部\" clearable>\n              <el-option v-for=\"item in sourceTypeOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"orderTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"80\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"订单编号\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.orderSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"提交时间\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"用户账号\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.memberUsername }}</template>\n        </el-table-column>\n        <el-table-column label=\"订单金额\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">￥{{ scope.row.totalAmount }}</template>\n        </el-table-column>\n        <el-table-column label=\"支付方式\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ formatPayType(scope.row.payType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"订单来源\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ formatSourceType(scope.row.sourceType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"订单状态\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ formatStatus(scope.row.status) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleViewOrder(scope.$index, scope.row)\">查看订单</el-button>\n            <el-button size=\"small\" @click=\"handleCloseOrder(scope.$index, scope.row)\"\n              v-show=\"scope.row.status === 0\">关闭订单</el-button>\n            <el-button size=\"small\" @click=\"handleDeliveryOrder(scope.$index, scope.row)\"\n              v-show=\"scope.row.status === 1\">订单发货</el-button>\n            <el-button size=\"small\" @click=\"handleViewLogistics(scope.$index, scope.row)\"\n              v-show=\"scope.row.status === 2 || scope.row.status === 3\">订单跟踪</el-button>\n            <el-button size=\"small\" type=\"danger\" @click=\"handleDeleteOrder(scope.$index, scope.row)\"\n              v-show=\"scope.row.status === 4\">删除订单</el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operateOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"关闭订单\" v-model=\"closeOrderData.dialogVisible\" width=\"30%\">\n      <span style=\"vertical-align: top\">操作备注：</span>\n      <el-input style=\"width: 80%\" type=\"textarea\" :rows=\"5\" placeholder=\"请输入内容\" v-model=\"closeOrderData.content\">\n      </el-input>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"closeOrderData.dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleCloseOrderConfirm\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <logistics-dialog v-model=\"logisticsDialogVisible\"></logistics-dialog>\n  </div>\n</template>\n\n<style scoped>\n.input-width {\n  width: 203px\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/order/orderDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox, type CascaderOption } from 'element-plus'\nimport { Warning } from '@element-plus/icons-vue'\nimport { getOrderDetailByIdAPI, orderUpdateReceiverInfoAPI, orderUpdateMoneyInfoAPI, orderUpdateCloseAPI, orderUpdateNoteAPI, orderDeleteByIdsAPI } from '@/apis/order'\nimport LogisticsDialog from '@/views/oms/order/components/logisticsDialog.vue'\nimport type { OmsOrder, OmsOrderDetail, OmsReceiverInfoParam } from '@/types/order'\nimport { formatDateTime } from '@/utils/datetime'\nimport { pcaTextArr } from 'element-china-area-data'\n\n// 获取路由对象\nconst router = useRouter()\nconst route = useRoute()\n\n// 订单ID\nconst id = ref<number>()\n// 订单详情数据\nconst order = ref<OmsOrderDetail>({} as OmsOrderDetail)\n\n// 组件挂载后获取订单详情\nonMounted(async () => {\n  id.value = Number(route.query.id)\n  const res = await getOrderDetailByIdAPI(id.value!)\n  order.value = res.data\n})\n\n// 修改收货人信息对话框可见性\nconst receiverDialogVisible = ref(false)\n// 收货人信息\nconst receiverInfo = ref<OmsReceiverInfoParam>({} as OmsReceiverInfoParam)\n// 当前选中的省市区三级联动\nconst selectedRegions = ref<string[]>([])\n\n// 修改费用信息对话框可见性\nconst moneyDialogVisible = ref(false)\n// 费用信息\nconst moneyInfo = ref({ orderId: 0, freightAmount: 0, discountAmount: 0, status: 0 })\n\n// 发送站内信对话框可见性\nconst messageDialogVisible = ref(false)\n// 站内信内容\nconst message = ref({ title: '', content: '' })\n\n// 关闭订单对话框可见性\nconst closeDialogVisible = ref(false)\n// 关闭订单信息\nconst closeInfo = ref({ note: '', id: 0 })\n\n// 备注订单对话框可见性\nconst markOrderDialogVisible = ref(false)\n// 备注订单信息\nconst markInfo = ref({ id: 0, note: '' })\n\n// 物流对话框可见性\nconst logisticsDialogVisible = ref(false)\n\n// 格式化空值\nconst formatNull = (value: string | undefined) => {\n  if (!value) {\n    return '暂无'\n  } else {\n    return value\n  }\n}\n\n// 格式化长文本\nconst formatLongText = (value: string | undefined) => {\n  if (!value) {\n    return '暂无'\n  } else if (value.length > 8) {\n    return value.substring(0, 8) + '...'\n  } else {\n    return value\n  }\n}\n\n// 格式化支付方式\nconst formatPayType = (value: number) => {\n  if (value === 1) {\n    return '支付宝'\n  } else if (value === 2) {\n    return '微信'\n  } else {\n    return '未支付'\n  }\n}\n\n// 格式化订单来源\nconst formatSourceType = (value: number) => {\n  if (value === 1) {\n    return 'APP订单'\n  } else {\n    return 'PC订单'\n  }\n}\n\n// 格式化订单类型\nconst formatOrderType = (value: number) => {\n  if (value === 1) {\n    return '秒杀订单'\n  } else {\n    return '正常订单'\n  }\n}\n\n// 格式化地址\nconst formatAddress = (order: OmsOrder) => {\n  let str = order.receiverProvince || ''\n  if (order.receiverCity != null) {\n    str += \"  \" + order.receiverCity\n  }\n  str += \"  \" + (order.receiverRegion || '')\n  str += \"  \" + (order.receiverDetailAddress || '')\n  return str\n}\n\n// 格式化订单状态\nconst formatStatus = (value: number) => {\n  if (value === 1) {\n    return '待发货'\n  } else if (value === 2) {\n    return '已发货'\n  } else if (value === 3) {\n    return '已完成'\n  } else if (value === 4) {\n    return '已关闭'\n  } else if (value === 5) {\n    return '无效订单'\n  } else {\n    return '待付款'\n  }\n}\n\n// 格式化支付状态\nconst formatPayStatus = (value: number) => {\n  if (value === 0) {\n    return '未支付'\n  } else if (value === 4) {\n    return '已退款'\n  } else {\n    return '已支付'\n  }\n}\n\n// 格式化发货状态\nconst formatDeliverStatus = (value: number) => {\n  if (value === 0 || value === 1) {\n    return '未发货'\n  } else {\n    return '已发货'\n  }\n}\n\n// 格式化商品属性\nconst formatProductAttr = (value: string) => {\n  if (value == null) {\n    return ''\n  } else {\n    const attr = JSON.parse(value)\n    let result = ''\n    for (let i = 0; i < attr.length; i++) {\n      result += attr[i].key\n      result += \":\"\n      result += attr[i].value\n      result += \";\"\n    }\n    return result\n  }\n}\n\n// 格式化步骤状态\nconst formatStepStatus = (value: number) => {\n  if (value === 1) {\n    //待发货\n    return 2\n  } else if (value === 2) {\n    //已发货\n    return 3\n  } else if (value === 3) {\n    //已完成\n    return 4\n  } else {\n    //待付款、已关闭、无限订单\n    return 1\n  }\n}\n\n// 选择地区\nconst onSelectRegionChange = () => {\n  receiverInfo.value.receiverProvince = selectedRegions.value[0]\n  receiverInfo.value.receiverCity = selectedRegions.value[1]\n  receiverInfo.value.receiverRegion = selectedRegions.value[2]\n}\n\n// 显示修改收货人信息对话框\nconst showUpdateReceiverDialog = () => {\n  receiverDialogVisible.value = true\n  receiverInfo.value = {\n    orderId: order.value.id,\n    receiverName: order.value.receiverName,\n    receiverPhone: order.value.receiverPhone,\n    receiverPostCode: order.value.receiverPostCode,\n    receiverDetailAddress: order.value.receiverDetailAddress,\n    receiverProvince: order.value.receiverProvince,\n    receiverCity: order.value.receiverCity,\n    receiverRegion: order.value.receiverRegion,\n    status: order.value.status\n  }\n  // 初始化地址选择器中数据\n  selectedRegions.value = []\n  selectedRegions.value[0] = receiverInfo.value.receiverProvince!\n  selectedRegions.value[1] = receiverInfo.value.receiverCity!\n  selectedRegions.value[2] = receiverInfo.value.receiverRegion!\n}\n\n// 处理更新收货人信息\nconst handleUpdateReceiverInfo = async () => {\n  await ElMessageBox.confirm('是否要修改收货信息?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await orderUpdateReceiverInfoAPI(receiverInfo.value)\n  receiverDialogVisible.value = false\n  ElMessage({\n    type: 'success',\n    message: '修改成功!'\n  })\n  const response = await getOrderDetailByIdAPI(id.value!)\n  order.value = response.data\n}\n\n// 显示修改费用信息对话框\nconst showUpdateMoneyDialog = () => {\n  moneyDialogVisible.value = true\n  moneyInfo.value.orderId = order.value.id\n  moneyInfo.value.freightAmount = order.value.freightAmount\n  moneyInfo.value.discountAmount = order.value.discountAmount\n  moneyInfo.value.status = order.value.status\n}\n\n// 处理更新费用信息\nconst handleUpdateMoneyInfo = async () => {\n  await ElMessageBox.confirm('是否要修改费用信息?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await orderUpdateMoneyInfoAPI(moneyInfo.value)\n  moneyDialogVisible.value = false\n  ElMessage({\n    type: 'success',\n    message: '修改成功!'\n  })\n  const response = await getOrderDetailByIdAPI(id.value!)\n  order.value = response.data\n}\n\n// 显示发送站内信对话框\nconst showMessageDialog = () => {\n  messageDialogVisible.value = true\n  message.value.title = ''\n  message.value.content = ''\n}\n\n// 处理发送站内信\nconst handleSendMessage = async () => {\n  await ElMessageBox.confirm('是否要发送站内信?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  console.log('站内信功能暂未实现，模拟发送。。。')\n  messageDialogVisible.value = false\n  ElMessage({\n    type: 'success',\n    message: '发送成功!'\n  })\n}\n\n// 显示关闭订单对话框\nconst showCloseOrderDialog = () => {\n  closeDialogVisible.value = true\n  closeInfo.value.note = ''\n  closeInfo.value.id = id.value!\n}\n\n// 处理关闭订单\nconst handleCloseOrder = async () => {\n  try {\n    await ElMessageBox.confirm('是否要关闭?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await orderUpdateCloseAPI({ ids: closeInfo.value.id.toString(), note: closeInfo.value.note })\n    closeDialogVisible.value = false\n    ElMessage({\n      type: 'success',\n      message: '订单关闭成功!'\n    })\n\n    const response = await getOrderDetailByIdAPI(id.value!)\n    order.value = response.data\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('关闭订单失败:', error)\n    }\n  }\n}\n\n// 显示备注订单对话框\nconst showMarkOrderDialog = () => {\n  markOrderDialogVisible.value = true\n  markInfo.value.id = id.value!\n  markInfo.value.note = ''\n}\n\n// 处理备注订单\nconst handleMarkOrder = async () => {\n  await ElMessageBox.confirm('是否要备注订单?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await orderUpdateNoteAPI({ id: markInfo.value.id, note: markInfo.value.note, status: order.value.status })\n  markOrderDialogVisible.value = false\n  ElMessage({\n    type: 'success',\n    message: '订单备注成功!'\n  })\n  const response = await getOrderDetailByIdAPI(id.value!)\n  order.value = response.data\n}\n\n// 处理删除订单\nconst handleDeleteOrder = async () => {\n  try {\n    await ElMessageBox.confirm('是否要进行该删除操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await orderDeleteByIdsAPI({ ids: id.value!.toString() })\n    ElMessage({\n      message: '删除成功！',\n      type: 'success',\n      duration: 1000\n    })\n    router.back()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除订单失败:', error)\n    }\n  }\n}\n\n// 显示物流对话框\nconst showLogisticsDialog = () => {\n  logisticsDialogVisible.value = true\n}\n\n</script>\n\n<template>\n  <div class=\"detail-container\">\n    <div>\n      <el-steps :active=\"formatStepStatus(order.status)\" finish-status=\"success\" align-center>\n        <el-step title=\"提交订单\" :description=\"order.createTime ? formatDateTime(order.createTime) : ''\"></el-step>\n        <el-step title=\"支付订单\" :description=\"order.paymentTime ? formatDateTime(order.paymentTime) : ''\"></el-step>\n        <el-step title=\"平台发货\" :description=\"order.deliveryTime ? formatDateTime(order.deliveryTime) : ''\"></el-step>\n        <el-step title=\"确认收货\" :description=\"order.receiveTime ? formatDateTime(order.receiveTime) : ''\"></el-step>\n        <el-step title=\"完成评价\" :description=\"order.commentTime ? formatDateTime(order.commentTime) : ''\"></el-step>\n      </el-steps>\n    </div>\n    <el-card shadow=\"never\" style=\"margin-top: 15px\">\n      <div class=\"operate-container\">\n        <el-icon class=\"color-danger el-icon-middle\" style=\"margin-left: 15px;\">\n          <Warning />\n        </el-icon>\n        <span class=\"color-danger\">当前订单状态：{{ formatStatus(order.status) }}</span>\n        <div class=\"operate-button-container\" v-show=\"order.status === 0\">\n          <el-button size=\"small\" @click=\"showUpdateReceiverDialog\">修改收货人信息</el-button>\n          <el-button size=\"small\" @click=\"showUpdateMoneyDialog\">修改费用信息</el-button>\n          <el-button size=\"small\" @click=\"showMessageDialog\">发送站内信</el-button>\n          <el-button size=\"small\" @click=\"showCloseOrderDialog\">关闭订单</el-button>\n          <el-button size=\"small\" @click=\"showMarkOrderDialog\">备注订单</el-button>\n        </div>\n        <div class=\"operate-button-container\" v-show=\"order.status === 1\">\n          <el-button size=\"small\" @click=\"showUpdateReceiverDialog\">修改收货人信息</el-button>\n          <el-button size=\"small\" @click=\"showMessageDialog\">发送站内信</el-button>\n          <el-button size=\"small\">取消订单</el-button>\n          <el-button size=\"small\" @click=\"showMarkOrderDialog\">备注订单</el-button>\n        </div>\n        <div class=\"operate-button-container\" v-show=\"order.status === 2 || order.status === 3\">\n          <el-button size=\"small\" @click=\"showLogisticsDialog\">订单跟踪</el-button>\n          <el-button size=\"small\" @click=\"showMessageDialog\">发送站内信</el-button>\n          <el-button size=\"small\" @click=\"showMarkOrderDialog\">备注订单</el-button>\n        </div>\n        <div class=\"operate-button-container\" v-show=\"order.status === 4\">\n          <el-button size=\"small\" @click=\"handleDeleteOrder\">删除订单</el-button>\n          <el-button size=\"small\" @click=\"showMarkOrderDialog\">备注订单</el-button>\n        </div>\n      </div>\n      <!-- 其余模板内容保持不变，由于篇幅限制，这里省略了大部分模板代码 -->\n      <!-- 请参考原始文件补充完整模板内容 -->\n      <div style=\"margin-top: 20px\">\n        <svg-icon icon-class=\"marker\" style=\"color: #606266\"></svg-icon>\n        <span class=\"font-small\">基本信息</span>\n      </div>\n      <div class=\"table-layout\">\n        <el-row>\n          <el-col :span=\"4\" class=\"table-cell-title\">订单编号</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">发货单流水号</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">用户账号</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">支付方式</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">订单来源</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">订单类型</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"4\" class=\"table-cell\">{{ order.orderSn }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">暂无</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ order.memberUsername }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ formatPayType(order.payType) }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ formatSourceType(order.sourceType) }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ formatOrderType(order.orderType) }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"4\" class=\"table-cell-title\">配送方式</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">物流单号</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">自动确认收货时间</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">订单可得优币</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">订单可得成长值</el-col>\n          <el-col :span=\"4\" class=\"table-cell-title\">活动信息</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"4\" class=\"table-cell\">{{ formatNull(order.deliveryCompany) }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ formatNull(order.deliverySn) }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ order.autoConfirmDay }}天</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ order.integration }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">{{ order.growth }}</el-col>\n          <el-col :span=\"4\" class=\"table-cell\">\n            <el-popover placement=\"top-start\" title=\"活动信息\" width=\"200\" trigger=\"hover\" :content=\"order.promotionInfo\">\n              <template v-slot:reference>\n                <span>{{ formatLongText(order.promotionInfo) }}</span>\n              </template>\n            </el-popover>\n          </el-col>\n        </el-row>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <svg-icon icon-class=\"marker\" style=\"color: #606266\"></svg-icon>\n        <span class=\"font-small\">收货人信息</span>\n      </div>\n      <div class=\"table-layout\">\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell-title\">收货人</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">手机号码</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">邮政编码</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">收货地址</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell\">{{ order.receiverName }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">{{ order.receiverPhone }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">{{ order.receiverPostCode }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">{{ formatAddress(order) }}</el-col>\n        </el-row>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <svg-icon icon-class=\"marker\" style=\"color: #606266\"></svg-icon>\n        <span class=\"font-small\">商品信息</span>\n      </div>\n      <el-table ref=\"orderItemTable\" :data=\"order.orderItemList\" style=\"width: 100%;margin-top: 20px\" border>\n        <el-table-column label=\"商品图片\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            <img :src=\"scope.row.productPic\" style=\"height: 80px\">\n          </template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template v-slot=\"scope\">\n            <p>{{ scope.row.productName }}</p>\n            <p>品牌：{{ scope.row.productBrand }}</p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"价格/货号\" width=\"160\" align=\"center\">\n          <template v-slot=\"scope\">\n            <p>价格：￥{{ scope.row.productPrice }}</p>\n            <p>货号：{{ scope.row.productSn }}</p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"属性\" width=\"160\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ formatProductAttr(scope.row.productAttr) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"数量\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ scope.row.productQuantity }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"小计\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            ￥{{ scope.row.productPrice * scope.row.productQuantity }}\n          </template>\n        </el-table-column>\n      </el-table>\n      <div style=\"float: right;margin: 20px\">\n        合计：<span class=\"color-danger\">￥{{ order.totalAmount }}</span>\n      </div>\n      <div style=\"margin-top: 60px\">\n        <svg-icon icon-class=\"marker\" style=\"color: #606266\"></svg-icon>\n        <span class=\"font-small\">费用信息</span>\n      </div>\n      <div class=\"table-layout\">\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell-title\">商品合计</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">运费</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">优惠券</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">积分抵扣</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell\">￥{{ order.totalAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">￥{{ order.freightAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.couponAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.integrationAmount }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell-title\">活动优惠</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">折扣金额</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">订单总金额</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">应付款金额</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.promotionAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.discountAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <span class=\"color-danger\">￥{{ order.totalAmount + order.freightAmount }}</span>\n          </el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <span class=\"color-danger\">￥{{ order.payAmount + order.freightAmount - order.discountAmount }}</span>\n          </el-col>\n        </el-row>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <svg-icon icon-class=\"marker\" style=\"color: #606266\"></svg-icon>\n        <span class=\"font-small\">操作信息</span>\n      </div>\n      <el-table style=\"margin-top: 20px;width: 100%\" ref=\"orderHistoryTable\" :data=\"order.historyList\" border>\n        <el-table-column label=\"操作者\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ scope.row.operateMan }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作时间\" width=\"160\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ formatDateTime(scope.row.createTime) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"订单状态\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ formatStatus(scope.row.orderStatus) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"付款状态\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ formatPayStatus(scope.row.orderStatus) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"发货状态\" width=\"120\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ formatDeliverStatus(scope.row.orderStatus) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"备注\" align=\"center\">\n          <template v-slot=\"scope\">\n            {{ scope.row.note }}\n          </template>\n        </el-table-column>\n      </el-table>\n    </el-card>\n    <el-dialog title=\"修改收货人信息\" v-model=\"receiverDialogVisible\" width=\"40%\">\n      <el-form :model=\"receiverInfo\" ref=\"receiverInfoForm\" label-width=\"150px\">\n        <el-form-item label=\"收货人姓名：\">\n          <el-input v-model=\"receiverInfo.receiverName\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"手机号码：\">\n          <el-input v-model=\"receiverInfo.receiverPhone\" style=\"width: 200px\">\n          </el-input>\n        </el-form-item>\n        <el-form-item label=\"邮政编码：\">\n          <el-input v-model=\"receiverInfo.receiverPostCode\" style=\"width: 200px\">\n          </el-input>\n        </el-form-item>\n        <el-form-item label=\"所在区域：\">\n          <el-cascader v-model=\"selectedRegions\" :options=\"(pcaTextArr as CascaderOption[])\"\n            @change=\"onSelectRegionChange\" placeholder=\"请选择省市区\"></el-cascader>\n        </el-form-item>\n        <el-form-item label=\"详细地址：\">\n          <el-input v-model=\"receiverInfo.receiverDetailAddress\" type=\"textarea\" :rows=\"3\">\n          </el-input>\n        </el-form-item>\n      </el-form>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"receiverDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateReceiverInfo\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"修改费用信息\" v-model=\"moneyDialogVisible\" width=\"40%\">\n      <div class=\"table-layout\">\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell-title\">商品合计</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">运费</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">优惠券</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">积分抵扣</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell\">￥{{ order.totalAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <el-input v-model.number=\"moneyInfo.freightAmount\" size=\"small\"><template\n                v-slot:prepend>￥</template></el-input>\n          </el-col>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.couponAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.integrationAmount }}</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell-title\">活动优惠</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">折扣金额</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">订单总金额</el-col>\n          <el-col :span=\"6\" class=\"table-cell-title\">应付款金额</el-col>\n        </el-row>\n        <el-row>\n          <el-col :span=\"6\" class=\"table-cell\">-￥{{ order.promotionAmount }}</el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <el-input v-model.number=\"moneyInfo.discountAmount\" size=\"small\"><template\n                v-slot:prepend>-￥</template></el-input>\n          </el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <span class=\"color-danger\">￥{{ order.totalAmount + moneyInfo.freightAmount }}</span>\n          </el-col>\n          <el-col :span=\"6\" class=\"table-cell\">\n            <span class=\"color-danger\">￥{{ order.payAmount + moneyInfo.freightAmount - moneyInfo.discountAmount\n            }}</span>\n          </el-col>\n        </el-row>\n      </div>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"moneyDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateMoneyInfo\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"发送站内信\" v-model=\"messageDialogVisible\" width=\"40%\">\n      <el-form :model=\"message\" ref=\"receiverInfoForm\" label-width=\"150px\">\n        <el-form-item label=\"标题：\">\n          <el-input v-model=\"message.title\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"内容：\">\n          <el-input v-model=\"message.content\" type=\"textarea\" :rows=\"3\">\n          </el-input>\n        </el-form-item>\n      </el-form>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"messageDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleSendMessage\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"关闭订单\" v-model:visible=\"closeDialogVisible\" width=\"40%\">\n      <el-form :model=\"closeInfo\" label-width=\"150px\">\n        <el-form-item label=\"操作备注：\">\n          <el-input v-model=\"closeInfo.note\" type=\"textarea\" :rows=\"3\">\n          </el-input>\n        </el-form-item>\n      </el-form>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"closeDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleCloseOrder\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"备注订单\" v-model=\"markOrderDialogVisible\" width=\"40%\">\n      <el-form :model=\"markInfo\" label-width=\"150px\">\n        <el-form-item label=\"操作备注：\">\n          <el-input v-model=\"markInfo.note\" type=\"textarea\" :rows=\"3\">\n          </el-input>\n        </el-form-item>\n      </el-form>\n      <template v-slot:footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"markOrderDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleMarkOrder\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <logistics-dialog v-model=\"logisticsDialogVisible\"></logistics-dialog>\n  </div>\n</template>\n\n<style scoped>\n.detail-container {\n  width: 80%;\n  padding: 20px 20px 20px 20px;\n  margin: 20px auto;\n}\n\n.operate-container {\n  background: #F2F6FC;\n  height: 80px;\n  margin: -20px -20px 0;\n  line-height: 80px;\n}\n\n.operate-button-container {\n  float: right;\n  margin-right: 20px\n}\n\n.table-layout {\n  margin-top: 20px;\n  border-left: 1px solid #DCDFE6;\n  border-top: 1px solid #DCDFE6;\n}\n\n.table-cell {\n  height: 60px;\n  line-height: 40px;\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n  padding: 10px;\n  font-size: 14px;\n  color: #606266;\n  text-align: center;\n  overflow: hidden;\n}\n\n.table-cell-title {\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n  padding: 10px;\n  background: #F2F6FC;\n  text-align: center;\n  font-size: 14px;\n  color: #303133;\n}\n</style>\n"
  },
  {
    "path": "src/views/oms/order/setting.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getOrderSettingByIdAPI, orderSettingUpdateByIdAPI } from '@/apis/orderSetting'\nimport type { FormInstance, FormRules } from 'element-plus'\nimport type { OmsOrderSetting } from '@/types/orderSetting'\n\n// 默认订单设置数据\nconst defaultOrderSetting = {\n  id: 1,\n  flashOrderOvertime: 0,\n  normalOrderOvertime: 0,\n  confirmOvertime: 0,\n  finishOvertime: 0,\n  commentOvertime: 0\n}\n// 订单设置数据\nconst orderSetting = ref<OmsOrderSetting>(Object.assign({}, defaultOrderSetting))\n// 获取详情\nconst getDetail = async () => {\n  const response = await getOrderSettingByIdAPI(orderSetting.value.id)\n  orderSetting.value = response.data\n}\n\n// 组件挂载后获取详情\nonMounted(() => {\n  getDetail()\n})\n\n// 订单设置表单引用\nconst orderSettingForm = ref<FormInstance>()\n// 时间验证规则\nconst checkTime = (rule: unknown, value: string, callback: (error?: Error) => void) => {\n  if (!value) {\n    return callback(new Error('时间不能为空'))\n  }\n  const intValue = parseInt(value)\n  if (!Number.isInteger(intValue)) {\n    return callback(new Error('请输入数字值'))\n  }\n  callback()\n}\n// 表单验证规则\nconst rules = ref<FormRules>({\n  flashOrderOvertime: { validator: checkTime, trigger: 'blur' },\n  normalOrderOvertime: { validator: checkTime, trigger: 'blur' },\n  confirmOvertime: { validator: checkTime, trigger: 'blur' },\n  finishOvertime: { validator: checkTime, trigger: 'blur' },\n  commentOvertime: { validator: checkTime, trigger: 'blur' }\n})\n\n// 确认提交表单\nconst confirm = async () => {\n  if (!orderSettingForm.value) return\n  const valid = await orderSettingForm.value.validate()\n  if (valid) {\n    await ElMessageBox.confirm('是否要提交修改?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await orderSettingUpdateByIdAPI(1, orderSetting.value)\n    ElMessage({\n      type: 'success',\n      message: '提交成功!',\n      duration: 1000\n    })\n  } else {\n    ElMessage({\n      message: '提交参数不合法',\n      type: 'warning'\n    })\n    return false\n  }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form :model=\"orderSetting\" ref=\"orderSettingForm\" :rules=\"rules\" label-width=\"150px\">\n      <el-form-item label=\"秒杀订单超过：\" prop=\"flashOrderOvertime\">\n        <el-input v-model=\"orderSetting.flashOrderOvertime\" class=\"input-width\">\n          <template #append>分</template>\n        </el-input>\n        <span class=\"note-margin\">未付款，订单自动关闭</span>\n      </el-form-item>\n      <el-form-item label=\"正常订单超过：\" prop=\"normalOrderOvertime\">\n        <el-input v-model=\"orderSetting.normalOrderOvertime\" class=\"input-width\">\n          <template #append>分</template>\n        </el-input>\n        <span class=\"note-margin\">未付款，订单自动关闭</span>\n      </el-form-item>\n      <el-form-item label=\"发货超过：\" prop=\"confirmOvertime\">\n        <el-input v-model=\"orderSetting.confirmOvertime\" class=\"input-width\">\n          <template #append>天</template>\n        </el-input>\n        <span class=\"note-margin\">未收货，订单自动完成</span>\n      </el-form-item>\n      <el-form-item label=\"订单完成超过：\" prop=\"finishOvertime\">\n        <el-input v-model=\"orderSetting.finishOvertime\" class=\"input-width\">\n          <template #append>天</template>\n        </el-input>\n        <span class=\"note-margin\">自动结束交易，不能申请售后</span>\n      </el-form-item>\n      <el-form-item label=\"订单完成超过：\" prop=\"commentOvertime\">\n        <el-input v-model=\"orderSetting.commentOvertime\" class=\"input-width\">\n          <template #append>天</template>\n        </el-input>\n        <span class=\"note-margin\">自动五星好评</span>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"confirm()\" type=\"primary\">提交</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped>\n.input-width {\n  width: 50%\n}\n\n.note-margin {\n  margin-left: 15px\n}\n</style>\n"
  },
  {
    "path": "src/views/pms/brand/add.vue",
    "content": "<script setup lang=\"ts\">\nimport BrandDetail from './components/BrandDetail.vue'\n</script>\n\n<template>\n  <brand-detail :is-edit='false'></brand-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/brand/components/BrandDetail.vue",
    "content": "<script lang=\"ts\" setup>\nimport { ref, reactive, onMounted, computed } from 'vue'\nimport { createBrandAPI, getBrandAPI, updateBrandAPI } from '@/apis/brand'\nimport SingleUpload from '@/components/Upload/singleUpload.vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'\nimport type { PmsBrand } from '@/types/brand'\n\n// 获取路由对象\nconst route = useRoute()\nconst router = useRouter()\n\n// 定义属性\nconst props = defineProps({\n  // 是否为编辑模式\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 定义品牌id\nconst brandId = computed(() => Number(route.query.id))\n\n// 默认品牌，添加时使用\nconst defaultBrand: PmsBrand = {\n  bigPic: '',\n  brandStory: '',\n  factoryStatus: 0,\n  firstLetter: '',\n  logo: '',\n  name: '',\n  showStatus: 0,\n  sort: 0\n}\n// 定义品牌对象\nconst brand = ref<PmsBrand>(Object.assign({}, defaultBrand))\n// 品牌表单组件引用\nconst brandFromRef = ref<FormInstance>()\n// 品牌表单校验规则\nconst rules = reactive<FormRules<typeof brand>>({\n  name: [\n    { required: true, message: '请输入品牌名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  logo: [\n    { required: true, message: '请输入品牌logo', trigger: 'blur' }\n  ],\n  sort: [\n    { type: 'number', message: '排序必须为数字' }\n  ],\n})\n\n// 组件挂载时加载数据\nonMounted(async () => {\n  if (props.isEdit) {\n    // 编辑模式调用接口获取品牌详情\n    const res = await getBrandAPI(brandId.value)\n    brand.value = res.data\n  } else {\n    // 添加模式使用默认品牌\n    brand.value = Object.assign({}, defaultBrand)\n  }\n})\n\n// 处理品牌表单提交\nconst handleBrandSubmit = () => {\n  brandFromRef.value!.validate(async (valid) => {\n    if (valid) {\n      await ElMessageBox.confirm('是否提交数据', '提示', {\n        confirmButtonText: '确定',\n        cancelButtonText: '取消',\n        type: 'warning'\n      })\n      if (props.isEdit) {\n        await updateBrandAPI(brandId.value, brand.value)\n        brandFromRef.value!.resetFields()\n        ElMessage({\n          message: '修改成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      } else {\n        await createBrandAPI(brand.value)\n        brandFromRef.value!.resetFields()\n        brand.value = Object.assign({}, defaultBrand)\n        ElMessage({\n          message: '提交成功',\n          type: 'success',\n          duration: 1000\n        })\n      }\n    } else {\n      ElMessage({\n        message: '验证失败',\n        type: 'error',\n        duration: 1000\n      })\n    }\n  })\n}\n\n// 处理品牌表单重置\nconst handleBrandReset = () => {\n  brandFromRef.value!.resetFields()\n  brand.value = Object.assign({}, defaultBrand)\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form :model=\"brand\" :rules=\"rules\" ref=\"brandFromRef\" label-width=\"150px\">\n      <el-form-item label=\"品牌名称：\" prop=\"name\">\n        <el-input v-model=\"brand.name\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"品牌首字母：\">\n        <el-input v-model=\"brand.firstLetter\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"品牌LOGO：\" prop=\"logo\">\n        <single-upload v-model=\"brand.logo\"></single-upload>\n      </el-form-item>\n      <el-form-item label=\"品牌专区大图：\">\n        <single-upload v-model=\"brand.bigPic\"></single-upload>\n      </el-form-item>\n      <el-form-item label=\"品牌故事：\">\n        <el-input placeholder=\"请输入内容\" type=\"textarea\" v-model=\"brand.brandStory\" :autosize=\"true\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"排序：\" prop=\"sort\">\n        <el-input v-model.number=\"brand.sort\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"是否显示：\">\n        <el-radio-group v-model=\"brand.showStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"品牌制造商：\">\n        <el-radio-group v-model=\"brand.factoryStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"handleBrandSubmit()\">提交</el-button>\n        <el-button v-if=\"!props.isEdit\" @click=\"handleBrandReset()\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/pms/brand/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox, type Action } from 'element-plus'\nimport { getBrandListAPI, brandUpdateShowStatusAPI, brandUpdateFactoryStatusAPI, brandDeleteByIdAPI } from '@/apis/brand'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport type { PmsBrand } from '@/types/brand'\nimport type { PageParam } from '@/types/common'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 品牌列表查询参数\nconst listQuery = ref<PageParam>({\n  keyword: '',\n  pageNum: 1,\n  pageSize: 10\n})\n// 品牌列表数据\nconst list = ref<PmsBrand[]>([])\n// 表格中被选中的行\nconst multipleSelection = ref<PmsBrand[]>([])\n// 表格数据加载进度条\nconst listLoading = ref(true)\n// 分页组件参数\nconst total = ref(0)\n// 获取品牌列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getBrandListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取品牌列表失败:', error)\n  }\n}\n\n// 组件挂载后初始化列表信息\nonMounted(() => {\n  getList()\n})\n\n// 处理品牌搜索\nconst handleSearchBrand = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理添加品牌\nconst handleAddBrand = () => {\n  router.push({ path: '/pms/addBrand' })\n}\n\n// 处理编辑品牌操作\nconst handleUpdateBrand = (index: number, row: PmsBrand) => {\n  router.push({ path: '/pms/updateBrand', query: { id: row.id } })\n}\n\n// 处理删除品牌操作\nconst handleDeleteBrand = async (index: number, row: PmsBrand) => {\n  ElMessageBox.confirm('是否要删除该品牌', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n    callback: async (action: Action) => {\n      if (action === 'confirm') {\n        await brandDeleteByIdAPI(row.id!)\n        ElMessage.success('删除成功')\n        getList()\n      }\n    },\n  })\n}\n\n// 处理表格选中状态变化\nconst handleSelectionChange = (val: PmsBrand[]) => {\n  multipleSelection.value = val\n}\n\n// 获取产品列表\nconst getProductList = (index: number, row: PmsBrand) => {\n  console.log(index, row)\n}\n\n// 获取产品评论列表\nconst getProductCommentList = (index: number, row: PmsBrand) => {\n  console.log(index, row)\n}\n\n// 处理厂商状态变化\nconst handleFactoryStatusChange = async (index: number, row: PmsBrand) => {\n\n  try {\n    await brandUpdateFactoryStatusAPI({\n      ids: row.id!.toString(),\n      factoryStatus: row.factoryStatus\n    })\n    ElMessage.success('修改成功')\n  } catch (error) {\n    // 如果更新失败，回滚状态\n    row.factoryStatus = row.factoryStatus === 0 ? 1 : 0\n    console.error('更新厂商状态失败:', error)\n  }\n}\n\n// 处理显示状态变化\nconst handleShowStatusChange = async (index: number, row: PmsBrand) => {\n  try {\n    await brandUpdateShowStatusAPI({\n      ids: row.id!.toString(),\n      showStatus: row.showStatus\n    })\n    ElMessage.success('修改成功')\n  } catch (error) {\n    // 如果更新失败，回滚状态\n    row.showStatus = row.showStatus === 0 ? 1 : 0\n    console.error('更新显示状态失败:', error)\n  }\n}\n\n// 处理每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 批量操作类型\nconst operates = ref([\n  {\n    label: \"显示品牌\",\n    value: \"showBrand\"\n  },\n  {\n    label: \"隐藏品牌\",\n    value: \"hideBrand\"\n  }\n])\n\n// 底部多选批量操作类型\nconst operateType = ref<string | null>()\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (!multipleSelection.value || multipleSelection.value.length < 1) {\n    ElMessage.warning('请选择一条记录')\n    return\n  }\n  let showStatus = 0\n  if (operateType.value === 'showBrand') {\n    showStatus = 1\n  } else if (operateType.value === 'hideBrand') {\n    showStatus = 0\n  } else {\n    ElMessage.warning('请选择批量操作类型')\n    return\n  }\n  const idsArr = multipleSelection.value.map(item => item.id)\n  try {\n    await brandUpdateShowStatusAPI({\n      ids: idsArr.join(','),\n      showStatus: showStatus\n    })\n    getList()\n    ElMessage.success('修改成功')\n  } catch (error) {\n    console.error('批量操作失败:', error)\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float: right\" @click=\"handleSearchBrand()\" type=\"primary\">\n          查询结果\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input style=\"width: 203px\" v-model=\"listQuery.keyword\" placeholder=\"品牌名称/关键字\"></el-input>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAddBrand()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"brandTable\" :data=\"list\" style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"品牌名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"品牌首字母\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.firstLetter }}</template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"品牌制造商\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleFactoryStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n              :inactive-value=\"0\" v-model=\"scope.row.factoryStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"是否显示\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleShowStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.showStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"相关\" width=\"220\" align=\"center\">\n          <template #default=\"scope\">\n            <span>商品：</span>\n            <el-button size=\"small\" type=\"primary\" link @click=\"getProductList(scope.$index, scope.row)\">100\n            </el-button>\n            <span>评价：</span>\n            <el-button size=\"small\" type=\"primary\" link @click=\"getProductCommentList(scope.$index, scope.row)\">1000\n            </el-button>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleUpdateBrand(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"danger\" @click=\"handleDeleteBrand(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style rel=\"stylesheet/scss\" lang=\"scss\" scoped></style>\n"
  },
  {
    "path": "src/views/pms/brand/update.vue",
    "content": "<script setup lang=\"ts\">\nimport BrandDetail from './components/BrandDetail.vue'\n</script>\n\n<template>\n  <brand-detail :is-edit='true'></brand-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/product/add.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductDetail from './components/ProductDetail.vue'\n</script>\n<template>\n  <product-detail :is-edit='false'></product-detail>\n</template>\n<style></style>\n"
  },
  {
    "path": "src/views/pms/product/components/ProductAttrDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, reactive, computed, onMounted, inject, type Ref, watch } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport { getProductAttributeCategoryListAPI as fetchProductAttrCateList } from '@/apis/productAttrCate'\nimport { getProductAttributeListAPI } from '@/apis/productAttr'\nimport SingleUpload from '@/components/Upload/singleUpload.vue'\nimport type { PmsProductParam } from '@/types/product'\nimport type { ElSelectDataVo } from '@/types/common'\nimport MultiUpload from '@/components/Upload/multiUpload.vue'\nimport type { ProductAttrPicVo, ProductAttrVo, ProductParamVo } from '@/types/productAttr'\nimport type { PmsSkuStock } from '@/types/skuStock'\nimport Tinymce from '@/components/Tinymce/index.vue'\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['prev-step', 'next-step'])\n\n// 获取跨层传递的数据\nconst compProductParam = inject('product-key') as Ref<PmsProductParam>\n\n// 模板引用\nconst productAttrForm = ref<FormInstance>()\n\n// 响应式数据\nconst state = reactive({\n  // 编辑模式时是否初始化成功\n  hasEditCreated: false,\n  // 商品属性分类下拉选项\n  productAttributeCategoryOptions: [] as ElSelectDataVo[],\n  // 选中的商品规格\n  selectProductAttr: [] as ProductAttrVo[],\n  // 选中的商品参数\n  selectProductParam: [] as ProductParamVo[],\n  // 选中的商品属性图片\n  selectProductAttrPics: [] as ProductAttrPicVo[],\n  // 可手动添加的商品属性\n  addProductAttrValue: '',\n  // 商品富文本详情激活类型\n  activeHtmlName: 'pc'\n})\n\n// 商品的ID\nconst productId = computed(() => {\n  return compProductParam.value.id\n})\n\n// 由于compProductParam数据为异步加载，需要监听其变化来初始化数据\nwatch(productId, (newVal, oldVal) => {\n  if (props.isEdit) {\n    handleEditCreated()\n  }\n  console.log(\"attr\", newVal, oldVal)\n})\n\n// 获取商品属性分类\nconst getProductAttrCateList = async () => {\n  const param = { pageNum: 1, pageSize: 100 }\n  const res = await fetchProductAttrCateList(param)\n  state.productAttributeCategoryOptions = res.data.list.map(item => ({\n    label: item.name,\n    value: item.id!\n  }))\n}\n\nonMounted(async () => {\n  await getProductAttrCateList()\n})\n\n// 是否有商品属性图片\nconst hasAttrPic = computed(() => {\n  if (state.selectProductAttrPics.length < 1) {\n    return false\n  }\n  return true\n})\n\n\n// 商品的主图和画册图片\nconst selectProductPics = computed({\n  get: function () {\n    const pics: string[] = []\n    if (!compProductParam.value.pic || compProductParam.value.pic === '') {\n      return pics\n    }\n    pics.push(compProductParam.value.pic)\n    if (!compProductParam.value.albumPics || compProductParam.value.albumPics === '') {\n      return pics\n    }\n    const albumPics = compProductParam.value.albumPics.split(',')\n    pics.push(...albumPics)\n    return pics\n  },\n  set: function (newValue) {\n    if (!newValue || newValue.length === 0) {\n      compProductParam.value.pic = undefined\n      compProductParam.value.albumPics = undefined\n    } else {\n      compProductParam.value.pic = newValue[0]\n      compProductParam.value.albumPics = ''\n      if (newValue.length > 1) {\n        for (let i = 1; i < newValue.length; i++) {\n          compProductParam.value.albumPics += newValue[i]\n          if (i !== newValue.length - 1) {\n            compProductParam.value.albumPics += ','\n          }\n        }\n      }\n    }\n  }\n})\n\n\n// 处理编辑模式初始化的数据\nconst handleEditCreated = () => {\n  if (compProductParam.value.productAttributeCategoryId) {\n    handleProductAttrChange(compProductParam.value.productAttributeCategoryId)\n  }\n  state.hasEditCreated = true\n}\n\n\n/**\n * 根据商品属性分类ID获取规格和参数\n * @param type 0:规格;1:参数\n * @param cid 商品属性分类ID\n */\nconst getProductAttrList = async (type: number, cid: number) => {\n  const param = { pageNum: 1, pageSize: 100, type: type }\n  const res = await getProductAttributeListAPI(cid, param)\n  const list = res.data.list\n  if (type === 0) {\n    state.selectProductAttr = []\n    for (let i = 0; i < list.length; i++) {\n      const item = list[i]!\n      let options: string[] | undefined = []\n      let values: string[] = []\n      if (props.isEdit) {\n        if (item.handAddStatus === 1) {\n          // 编辑状态下获取手动添加编辑属性\n          options = getEditAttrOptions(item.id!)\n        }\n        // 编辑状态下获取选中属性\n        values = getEditAttrValues(i)\n      }\n      state.selectProductAttr.push({\n        id: item.id,\n        name: item.name,\n        handAddStatus: item.handAddStatus,\n        inputList: item.inputList,\n        values: values,\n        options: options\n      })\n    }\n    if (props.isEdit) {\n      // 编辑模式下刷新商品属性图片\n      refreshProductAttrPics()\n    }\n  } else {\n    state.selectProductParam = []\n    for (let i = 0; i < list.length; i++) {\n      const item = list[i]!\n      let value = undefined\n      if (props.isEdit) {\n        // 编辑模式下获取参数属性\n        value = getEditParamValue(item.id!)\n      }\n      state.selectProductParam.push({\n        id: item.id,\n        name: item.name,\n        value: value,\n        inputType: item.inputType,\n        inputList: item.inputList\n      })\n    }\n  }\n}\n\n// 获取设置的可手动添加属性值\nconst getEditAttrOptions = (id: number) => {\n  const attrValueList = compProductParam.value.productAttributeValueList\n  return attrValueList?.find(item => item.productAttributeId === id)?.value?.split(',')\n}\n\n// 获取选中的规格值\nconst getEditAttrValues = (index: number) => {\n  const skuList = compProductParam.value.skuStockList!\n  const values = new Set<string>()\n  for (let i = 0; i < skuList.length; i++) {\n    const sku = skuList[i]\n    const spData = JSON.parse(sku!.spData!)\n    if (spData && spData.length > index) {\n      values.add(spData[index].value)\n    }\n  }\n  return Array.from(values)\n}\n\n// 获取属性的值\nconst getEditParamValue = (id: number) => {\n  return compProductParam.value.productAttributeValueList?.find(item => item.productAttributeId === id)?.value\n}\n\nconst handleProductAttrChange = (value: number) => {\n  getProductAttrList(0, value)\n  getProductAttrList(1, value)\n}\n\nconst getInputListArr = (inputList: string) => {\n  return inputList.split(',')\n}\n\nconst handleAddProductAttrValue = (idx: number) => {\n  const options = state.selectProductAttr[idx]!.options\n  if (state.addProductAttrValue == null || state.addProductAttrValue == '') {\n    ElMessage({\n      message: '属性值不能为空',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  if (options!.indexOf(state.addProductAttrValue) !== -1) {\n    ElMessage({\n      message: '属性值不能重复',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  options?.push(state.addProductAttrValue)\n  state.addProductAttrValue = ''\n}\n\nconst handleRemoveProductAttrValue = (idx: number, index: number) => {\n  state.selectProductAttr[idx]?.options?.splice(index, 1)\n}\n\nconst getProductSkuSp = (row: PmsSkuStock, index: number) => {\n  const spData = JSON.parse(row.spData!)\n  if (spData != null && index < spData.length) {\n    return spData[index].value\n  } else {\n    return null\n  }\n}\n\nconst handleRefreshProductSkuList = async () => {\n  try {\n    await ElMessageBox.confirm('刷新列表将导致sku信息重新生成，是否要刷新', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    refreshProductAttrPics()\n    refreshProductSkuList()\n  } catch {\n    // 用户取消操作\n  }\n}\n\nconst handleSyncProductSkuPrice = async () => {\n  try {\n    await ElMessageBox.confirm('将同步第一个sku的价格到所有sku,是否继续', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (compProductParam.value.skuStockList && compProductParam.value.skuStockList.length > 0) {\n      let tempSkuList: PmsSkuStock[] = []\n      tempSkuList = tempSkuList.concat(tempSkuList, compProductParam.value.skuStockList)\n      const price = compProductParam.value.skuStockList[0]!.price\n      for (let i = 0; i < tempSkuList.length; i++) {\n        tempSkuList[i]!.price = price\n      }\n      compProductParam.value.skuStockList = []\n      compProductParam.value.skuStockList = compProductParam.value.skuStockList.concat(compProductParam.value.skuStockList, tempSkuList)\n    }\n  } catch {\n    // 用户取消操作\n  }\n}\n\nconst handleSyncProductSkuStock = async () => {\n  try {\n    await ElMessageBox.confirm('将同步第一个sku的库存到所有sku,是否继续', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (compProductParam.value.skuStockList && compProductParam.value.skuStockList.length > 0) {\n      let tempSkuList: PmsSkuStock[] = []\n      tempSkuList = tempSkuList.concat(tempSkuList, compProductParam.value.skuStockList)\n      const stock = compProductParam.value.skuStockList[0]!.stock\n      const lowStock = compProductParam.value.skuStockList[0]!.lowStock\n      for (let i = 0; i < tempSkuList.length; i++) {\n        tempSkuList[i]!.stock = stock\n        tempSkuList[i]!.lowStock = lowStock\n      }\n      compProductParam.value.skuStockList = []\n      compProductParam.value.skuStockList = compProductParam.value.skuStockList.concat(compProductParam.value.skuStockList, tempSkuList)\n    }\n  } catch {\n    // 用户取消操作\n  }\n}\n\nconst refreshProductSkuList = () => {\n  compProductParam.value.skuStockList = []\n  const skuList = compProductParam.value.skuStockList\n  // 只有一个属性时\n  if (state.selectProductAttr.length === 1) {\n    const attr = state.selectProductAttr[0]!\n    for (let i = 0; i < attr.values!.length; i++) {\n      skuList.push({\n        spData: JSON.stringify([{ key: attr.name, value: attr.values![i] }])\n      })\n    }\n  } else if (state.selectProductAttr.length === 2) {\n    const attr0 = state.selectProductAttr[0]!\n    const attr1 = state.selectProductAttr[1]!\n    for (let i = 0; i < attr0.values!.length; i++) {\n      if (attr1.values!.length === 0) {\n        skuList.push({\n          spData: JSON.stringify([{ key: attr0.name, value: attr0.values![i] }])\n        })\n        continue\n      }\n      for (let j = 0; j < attr1.values!.length; j++) {\n        const spData = []\n        spData.push({ key: attr0.name, value: attr0.values![i] })\n        spData.push({ key: attr1.name, value: attr1.values![j] })\n        skuList.push({\n          spData: JSON.stringify(spData)\n        })\n      }\n    }\n  } else {\n    const attr0 = state.selectProductAttr[0]!\n    const attr1 = state.selectProductAttr[1]!\n    const attr2 = state.selectProductAttr[2]!\n    for (let i = 0; i < attr0.values!.length; i++) {\n      if (attr1.values!.length === 0) {\n        skuList.push({\n          spData: JSON.stringify([{ key: attr0.name, value: attr0.values![i] }])\n        })\n        continue\n      }\n      for (let j = 0; j < attr1.values!.length; j++) {\n        if (attr2.values!.length === 0) {\n          const spData = []\n          spData.push({ key: attr0.name, value: attr0.values![i] })\n          spData.push({ key: attr1.name, value: attr1.values![j] })\n          skuList.push({\n            spData: JSON.stringify(spData)\n          })\n          continue\n        }\n        for (let k = 0; k < attr2.values!.length; k++) {\n          const spData = []\n          spData.push({ key: attr0.name, value: attr0.values![i] })\n          spData.push({ key: attr1.name, value: attr1.values![j] })\n          spData.push({ key: attr2.name, value: attr2.values![k] })\n          skuList.push({\n            spData: JSON.stringify(spData)\n          })\n        }\n      }\n    }\n  }\n}\n\nconst refreshProductAttrPics = () => {\n  state.selectProductAttrPics = []\n  if (state.selectProductAttr && state.selectProductAttr.length >= 1) {\n    const values = state.selectProductAttr[0]!.values!\n    for (let i = 0; i < values.length; i++) {\n      let pic = undefined\n      if (props.isEdit) {\n        // 编辑状态下获取图片\n        pic = getProductSkuPic(values[i]!)\n      }\n      state.selectProductAttrPics.push({ name: values[i], pic: pic })\n    }\n  }\n}\n\n// 获取商品相关属性的图片\nconst getProductSkuPic = (name: string) => {\n  return compProductParam.value.skuStockList?.find(item => {\n    const spData = JSON.parse(item.spData!)\n    return name === spData[0].value\n  })?.pic\n}\n\n// 合并商品属性\nconst mergeProductAttrValue = () => {\n  compProductParam.value.productAttributeValueList = []\n  for (let i = 0; i < state.selectProductAttr.length; i++) {\n    const attr = state.selectProductAttr[i]!\n    if (attr.handAddStatus === 1 && attr.options != null && attr.options.length > 0) {\n      compProductParam.value.productAttributeValueList.push({\n        productAttributeId: attr.id,\n        value: getOptionStr(attr.options)\n      })\n    }\n  }\n  for (let i = 0; i < state.selectProductParam.length; i++) {\n    const param = state.selectProductParam[i]!\n    compProductParam.value.productAttributeValueList.push({\n      productAttributeId: param.id,\n      value: param.value\n    })\n  }\n}\n\n// 合并商品属性图片\nconst mergeProductAttrPics = () => {\n  for (let i = 0; i < state.selectProductAttrPics.length; i++) {\n    const skuStockList = compProductParam.value.skuStockList!\n    for (let j = 0; j < skuStockList.length; j++) {\n      const spData = JSON.parse(skuStockList[j]!.spData!)\n      if (spData[0].value === state.selectProductAttrPics[i]!.name) {\n        skuStockList[j]!.pic = state.selectProductAttrPics[i]!.pic\n      }\n    }\n  }\n}\n\nconst getOptionStr = (arr: string[]) => {\n  let str = ''\n  for (let i = 0; i < arr.length; i++) {\n    str += arr[i]\n    if (i != arr.length - 1) {\n      str += ','\n    }\n  }\n  return str\n}\n\nconst handleRemoveProductSku = (index: number) => {\n  const list = compProductParam.value.skuStockList!\n  if (list.length === 1) {\n    list.pop()\n  } else {\n    list.splice(index, 1)\n  }\n}\n\nconst getParamInputList = (inputList: string) => {\n  return inputList.split(',')\n}\n\nconst handlePrev = () => {\n  emit('prev-step')\n}\n\nconst handleNext = () => {\n  mergeProductAttrValue()\n  mergeProductAttrPics()\n  emit('next-step')\n}\n</script>\n\n<template>\n  <div style=\"margin-top: 50px\">\n    <el-form :model=\"compProductParam\" ref=\"productAttrForm\" label-width=\"120px\" class=\"form-inner-container\">\n      <el-form-item label=\"属性类型：\">\n        <el-select v-model=\"compProductParam.productAttributeCategoryId\" placeholder=\"请选择属性类型\"\n          @change=\"handleProductAttrChange\">\n          <el-option v-for=\"item in state.productAttributeCategoryOptions\" :key=\"item.value\" :label=\"item.label\"\n            :value=\"item.value\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"商品规格：\">\n        <el-card shadow=\"never\" class=\"cardBg\">\n          <div v-for=\"(productAttr, idx) in state.selectProductAttr\" :key=\"'productAttr' + idx\">\n            {{ productAttr.name }}：\n            <el-checkbox-group v-if=\"productAttr.handAddStatus === 0\" v-model=\"state.selectProductAttr[idx]!.values\">\n              <el-checkbox v-for=\"item in getInputListArr(productAttr.inputList!)\" :label=\"item\" :key=\"item\"\n                class=\"littleMarginLeft\"></el-checkbox>\n            </el-checkbox-group>\n            <div v-else>\n              <el-checkbox-group v-model=\"state.selectProductAttr[idx]!.values\">\n                <div v-for=\"(item, index) in state.selectProductAttr[idx]!.options\" style=\"display: inline-flex;\"\n                  class=\"littleMarginLeft\" :key=\"'optons' + index\">\n                  <el-checkbox :label=\"item\" :key=\"item\"></el-checkbox>\n                  <el-button type=\"primary\" link class=\"littleMarginLeft\"\n                    @click=\"handleRemoveProductAttrValue(idx, index)\">删除\n                  </el-button>\n                </div>\n              </el-checkbox-group>\n              <el-input v-model=\"state.addProductAttrValue\" style=\"width: 160px;margin-left: 10px\" clearable></el-input>\n              <el-button class=\"littleMarginLeft\" @click=\"handleAddProductAttrValue(idx)\">增加</el-button>\n            </div>\n          </div>\n        </el-card>\n        <el-table style=\"width: 100%;margin-top: 20px\" :data=\"compProductParam.skuStockList\" border>\n          <el-table-column v-for=\"(item, index) in state.selectProductAttr\" :label=\"item.name\" :key=\"item.id\"\n            align=\"center\">\n            <template #default=\"scope\">\n              {{ getProductSkuSp(scope.row, index) }}\n            </template>\n          </el-table-column>\n          <el-table-column label=\"销售价格\" width=\"100\" align=\"center\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.price\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"促销价格\" width=\"100\" align=\"center\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.promotionPrice\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"商品库存\" width=\"80\" align=\"center\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.stock\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"库存预警值\" width=\"80\" align=\"center\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.lowStock\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"SKU编号\" width=\"160\" align=\"center\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.skuCode\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"操作\" width=\"80\" align=\"center\">\n            <template #default=\"scope\">\n              <el-button type=\"primary\" link @click=\"handleRemoveProductSku(scope.$index)\">删除\n              </el-button>\n            </template>\n          </el-table-column>\n        </el-table>\n        <el-button type=\"primary\" style=\"margin-top: 20px\" @click=\"handleRefreshProductSkuList\">刷新列表\n        </el-button>\n        <el-button type=\"primary\" style=\"margin-top: 20px\" @click=\"handleSyncProductSkuPrice\">同步价格\n        </el-button>\n        <el-button type=\"primary\" style=\"margin-top: 20px\" @click=\"handleSyncProductSkuStock\">同步库存\n        </el-button>\n      </el-form-item>\n      <el-form-item label=\"属性图片：\" v-if=\"hasAttrPic\">\n        <el-card shadow=\"never\" class=\"cardBg\">\n          <div v-for=\"(item, index) in state.selectProductAttrPics\" :key=\"'productAttrPic' + index\">\n            <span>{{ item.name }}:</span>\n            <single-upload v-model=\"item.pic\"\n              style=\"width: 300px;display: inline-block;margin-left: 10px\"></single-upload>\n          </div>\n        </el-card>\n      </el-form-item>\n      <el-form-item label=\"商品参数：\">\n        <el-card shadow=\"never\" class=\"cardBg\">\n          <div v-for=\"(item, index) in state.selectProductParam\" :class=\"{ littleMarginTop: index !== 0 }\"\n            :key=\"'productParam' + index\">\n            <div class=\"paramInputLabel\">{{ item.name }}:</div>\n            <el-select v-if=\"item.inputType === 1\" class=\"paramInput\" v-model=\"state.selectProductParam[index]!.value\">\n              <el-option v-for=\"item2 in getParamInputList(item.inputList!)\" :key=\"item2\" :label=\"item2\" :value=\"item2\">\n              </el-option>\n            </el-select>\n            <el-input v-else class=\"paramInput\" v-model=\"state.selectProductParam[index]!.value\"></el-input>\n          </div>\n        </el-card>\n      </el-form-item>\n      <el-form-item label=\"商品相册：\">\n        <multi-upload v-model=\"selectProductPics\"></multi-upload>\n      </el-form-item>\n      <el-form-item label=\"商品详情：\">\n        <el-tabs v-model=\"state.activeHtmlName\" type=\"card\" style=\"width: 100%;\">\n          <el-tab-pane label=\"电脑端详情\" name=\"pc\">\n            <tinymce :height=\"720\" v-model=\"compProductParam.detailHtml!\" />\n          </el-tab-pane>\n          <el-tab-pane label=\"移动端详情\" name=\"mobile\">\n            <tinymce :height=\"720\" v-model=\"compProductParam.detailMobileHtml!\" />\n          </el-tab-pane>\n        </el-tabs>\n      </el-form-item>\n      <el-form-item>\n        <div style=\"width: 100%; text-align: center;\">\n          <el-button @click=\"handlePrev\">上一步，填写商品促销</el-button>\n          <el-button type=\"primary\" @click=\"handleNext\">下一步，选择商品关联</el-button>\n        </div>\n      </el-form-item>\n    </el-form>\n  </div>\n</template>\n\n<style scoped>\n.littleMarginLeft {\n  margin-left: 10px;\n}\n\n.littleMarginTop {\n  margin-top: 10px;\n}\n\n.paramInput {\n  width: 250px;\n}\n\n.paramInputLabel {\n  display: inline-block;\n  width: 100px;\n  text-align: right;\n  padding-right: 10px\n}\n\n.cardBg {\n  background: #F8F9FC;\n}\n</style>\n"
  },
  {
    "path": "src/views/pms/product/components/ProductDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, provide, } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport ProductInfoDetail from './ProductInfoDetail.vue'\nimport ProductSaleDetail from './ProductSaleDetail.vue'\nimport ProductAttrDetail from './ProductAttrDetail.vue'\nimport ProductRelationDetail from './ProductRelationDetail.vue'\nimport { productCreateAPI, getPruductUpdateInfoAPI, productUpdateByIdAPI } from '@/apis/product'\nimport type { PmsProductParam } from '@/types/product'\n\n// 获取路由对象\nconst route = useRoute()\nconst router = useRouter()\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认商品参数\nconst defaultProductParam: PmsProductParam = {\n  albumPics: '',\n  brandName: '',\n  deleteStatus: 0,\n  description: '',\n  detailDesc: '',\n  detailHtml: '',\n  detailMobileHtml: '',\n  detailTitle: '',\n  feightTemplateId: 0,\n  flashPromotionCount: 0,\n  flashPromotionId: 0,\n  flashPromotionPrice: 0,\n  flashPromotionSort: 0,\n  giftPoint: 0,\n  giftGrowth: 0,\n  keywords: '',\n  lowStock: 0,\n  name: '',\n  newStatus: 0,\n  note: '',\n  originalPrice: 0,\n  pic: '',\n  memberPriceList: [],\n  productFullReductionList: [{ fullPrice: 0, reducePrice: 0 }],\n  productLadderList: [{ count: 0, discount: 0, price: 0 }],\n  previewStatus: 0,\n  price: 0,\n  productAttributeValueList: [],\n  skuStockList: [],\n  subjectProductRelationList: [],\n  prefrenceAreaProductRelationList: [],\n  productCategoryName: '',\n  productSn: '',\n  promotionEndTime: '',\n  promotionPerLimit: 0,\n  promotionStartTime: '',\n  promotionType: 0,\n  publishStatus: 0,\n  recommandStatus: 0,\n  sale: 0,\n  serviceIds: '',\n  sort: 0,\n  stock: 0,\n  subTitle: '',\n  unit: '',\n  usePointLimit: 0,\n  verifyStatus: 0,\n  weight: 0\n}\n// el-steps的激活状态\nconst active = ref(0)\n// 商品信息/促销/属性/关联组件显示状态\nconst showStatus = ref([true, false, false, false])\n// 当前商品参数\nconst productParam = ref<PmsProductParam>(Object.assign({}, defaultProductParam))\n// 实现数据跨层传递\nprovide('product-key', productParam)\n\n// 组件挂载后执行\nonMounted(async () => {\n  if (props.isEdit) {\n    const res = await getPruductUpdateInfoAPI(Number(route.query.id))\n    productParam.value = res.data\n  }\n})\n\n// 隐藏所有商品编辑组件\nconst hideAll = () => {\n  // 将所有状态设置为false\n  showStatus.value.fill(false)\n}\n\n// 上一步\nconst prevStep = () => {\n  if (active.value > 0 && active.value < showStatus.value.length) {\n    active.value--\n    hideAll()\n    showStatus.value[active.value] = true\n  }\n}\n\n// 下一步\nconst nextStep = () => {\n  if (active.value < showStatus.value.length - 1) {\n    active.value++\n    hideAll()\n    showStatus.value[active.value] = true\n  }\n}\n\n// 结束步骤，提交数据\nconst finishCommit = async (isEdit: boolean) => {\n  await ElMessageBox.confirm('是否要提交该商品？', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  if (isEdit) {\n    await productUpdateByIdAPI(Number(route.query.id), productParam.value)\n    ElMessage({\n      type: 'success',\n      message: '提交成功',\n      duration: 1000\n    })\n    router.back()\n  } else {\n    await productCreateAPI(productParam.value)\n    ElMessage({\n      type: 'success',\n      message: '提交成功',\n      duration: 1000\n    })\n    location.reload()\n  }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-steps :active=\"active\" finish-status=\"success\" align-center>\n      <el-step title=\"填写商品信息\"></el-step>\n      <el-step title=\"填写商品促销\"></el-step>\n      <el-step title=\"填写商品属性\"></el-step>\n      <el-step title=\"选择商品关联\"></el-step>\n    </el-steps>\n    <product-info-detail v-show=\"showStatus[0]\" :is-edit=\"isEdit\" @next-step=\"nextStep\">\n    </product-info-detail>\n    <product-sale-detail v-show=\"showStatus[1]\" :is-edit=\"isEdit\" @next-step=\"nextStep\" @prev-step=\"prevStep\">\n    </product-sale-detail>\n    <product-attr-detail v-show=\"showStatus[2]\" v-model=\"productParam\" :is-edit=\"isEdit\" @next-step=\"nextStep\"\n      @prev-step=\"prevStep\">\n    </product-attr-detail>\n    <product-relation-detail v-show=\"showStatus[3]\" v-model=\"productParam\" :is-edit=\"isEdit\" @prev-step=\"prevStep\"\n      @finish-commit=\"finishCommit\">\n    </product-relation-detail>\n  </el-card>\n</template>\n\n<style>\n.form-container {\n  width: 960px;\n}\n\n.form-inner-container {\n  width: 800px;\n}\n</style>\n"
  },
  {
    "path": "src/views/pms/product/components/ProductInfoDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, watch, inject, type Ref } from 'vue'\nimport { ElMessage, type FormInstance } from 'element-plus'\nimport { getProductCategoryListWithChildrenAPI } from '@/apis/productCate'\nimport { getBrandListAPI } from '@/apis/brand'\nimport type { PmsProductParam } from '@/types/product'\nimport type { ElCascaderDataVo, ElSelectDataVo } from '@/types/common'\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['next-step'])\n\n// 获取跨层传递的数据\nconst compProductParam = inject('product-key') as Ref<PmsProductParam>\n\n// 级联选择器中当前选中的商品分类，结构为：[父分类ID,分类ID]\nconst selectProductCateValue = ref<number[]>([])\n// 级联选择器中的商品分类数据\nconst productCateOptions = ref<ElCascaderDataVo[]>([])\n// 获取商品分类列表数据\nconst getProductCateList = async () => {\n  const res = await getProductCategoryListWithChildrenAPI()\n  const list = res.data\n  productCateOptions.value = list.map(item => ({\n    label: item.name,\n    value: item.id!,\n    children: item.children?.map(it => ({ label: it.name, value: it.id! }))\n  }))\n}\n// 选择器中的品牌数据\nconst brandOptions = ref<ElSelectDataVo[]>([])\n// 获取品牌列表数据\nconst getBrandList = async () => {\n  const res = await getBrandListAPI({ pageNum: 1, pageSize: 100 })\n  brandOptions.value = res.data.list.map(item => ({ label: item.name, value: item.id! }))\n}\n\n// 初始化数据\nonMounted(async () => {\n  await getProductCateList()\n  await getBrandList()\n  if (props.isEdit) {\n    handleEditCreated()\n  }\n})\n\n// 编辑状态初始化标记位\nconst hasEditCreated = ref(false)\n\n// 表单引用\nconst productInfoForm = ref<FormInstance>()\n// 表单验证规则\nconst rules = {\n  name: [\n    { required: true, message: '请输入商品名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  subTitle: [{ required: true, message: '请输入商品副标题', trigger: 'blur' }],\n  productCategoryId: [{ required: true, message: '请选择商品分类', trigger: 'blur' }],\n  brandId: [{ required: true, message: '请选择商品品牌', trigger: 'blur' }],\n  description: [{ required: true, message: '请输入商品介绍', trigger: 'blur' }],\n  requiredProp: [{ required: true, message: '该项为必填项', trigger: 'blur' }]\n}\n\n// 监听选择分类变化\nwatch(selectProductCateValue, (newValue) => {\n  if (newValue && newValue.length === 2) {\n    compProductParam.value.productCategoryId = newValue[1]\n    compProductParam.value.productCategoryName = getCateNameById(compProductParam.value.productCategoryId!)\n  } else {\n    compProductParam.value.productCategoryId = undefined\n    compProductParam.value.productCategoryName = undefined\n  }\n})\n\n\n// 方法定义\nconst handleEditCreated = () => {\n  if (compProductParam.value.productCategoryId) {\n    selectProductCateValue.value.push(compProductParam.value.cateParentId!)\n    selectProductCateValue.value.push(compProductParam.value.productCategoryId)\n  }\n  hasEditCreated.value = true\n}\n\n// 根据分类ID获取分类名称\nconst getCateNameById = (id: number) => {\n  for (const item of productCateOptions.value) {\n    const child = item.children?.find(child => child.value === id)\n    if (child) {\n      return child.label\n    }\n  }\n  return undefined\n}\n\n// 下一步按钮出来事件\nconst handleNext = async () => {\n  if (productInfoForm.value) {\n    try {\n      const valid = await productInfoForm.value.validate()\n      if (valid) {\n        emit('next-step')\n      }\n    } catch {\n      ElMessage({\n        message: '验证失败',\n        type: 'error',\n        duration: 1000\n      })\n    }\n  }\n}\n\n// 处理品牌变化\nconst handleBrandChange = (val: number) => {\n  const findBrand = brandOptions.value.find(item => item.value === val)\n  compProductParam.value.brandName = findBrand?.label\n}\n</script>\n\n<template>\n  <div style=\"margin-top: 50px\">\n    <el-form :model=\"compProductParam\" :rules=\"rules\" ref=\"productInfoForm\" label-width=\"120px\"\n      class=\"form-inner-container\">\n      <el-form-item label=\"商品分类：\" prop=\"productCategoryId\">\n        <el-cascader v-model=\"selectProductCateValue\" :options=\"productCateOptions\">\n        </el-cascader>\n      </el-form-item>\n      <el-form-item label=\"商品名称：\" prop=\"name\">\n        <el-input v-model=\"compProductParam.name\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"副标题：\" prop=\"subTitle\">\n        <el-input v-model=\"compProductParam.subTitle\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品品牌：\" prop=\"brandId\">\n        <el-select v-model=\"compProductParam.brandId\" @change=\"handleBrandChange\" placeholder=\"请选择品牌\">\n          <el-option v-for=\"item in brandOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"商品介绍：\">\n        <el-input :autoSize=\"true\" v-model=\"compProductParam.description\" type=\"textarea\"\n          placeholder=\"请输入内容\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品货号：\">\n        <el-input v-model=\"compProductParam.productSn\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品售价：\">\n        <el-input v-model=\"compProductParam.price\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"市场价：\">\n        <el-input v-model=\"compProductParam.originalPrice\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品库存：\">\n        <el-input v-model=\"compProductParam.stock\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"计量单位：\">\n        <el-input v-model=\"compProductParam.unit\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品重量：\">\n        <el-input v-model=\"compProductParam.weight\" style=\"width: 300px\"></el-input>\n        <span style=\"margin-left: 20px\">克</span>\n      </el-form-item>\n      <el-form-item label=\"排序\">\n        <el-input v-model=\"compProductParam.sort\"></el-input>\n      </el-form-item>\n      <el-form-item>\n        <div style=\"width: 100%;text-align: center;\">\n          <el-button type=\"primary\" @click=\"handleNext()\">下一步，填写商品促销</el-button>\n        </div>\n      </el-form-item>\n    </el-form>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/product/components/ProductRelationDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, inject, type Ref, computed, ref } from 'vue'\nimport { type TransferDataItem } from 'element-plus'\nimport type { PmsProductParam } from '@/types/product'\nimport { getSubjectListAllAPI } from '@/apis/subject'\nimport { getPrefrenceAreaListAllAPI } from '@/apis/prefrenceArea'\nimport type { ElTransferDataVo } from '@/types/common'\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['prev-step', 'finish-commit'])\n\n// 获取跨层传递的数据\nconst compProductParam = inject('product-key') as Ref<PmsProductParam>\n\n// 所有专题列表\nconst subjectList = ref<ElTransferDataVo[]>([])\n// 所有优选专区列表\nconst prefrenceAreaList = ref<ElTransferDataVo[]>([])\n// 获取专题列表\nconst getSubjectList = async () => {\n  const res = await getSubjectListAllAPI()\n  subjectList.value = res.data.map(item => ({\n    label: item.title,\n    key: item.id\n  }))\n}\n// 获取优选区域列表\nconst getPrefrenceAreaList = async () => {\n  const res = await getPrefrenceAreaListAllAPI()\n  prefrenceAreaList.value = res.data.map(item => ({\n    label: item.name,\n    key: item.id\n  }))\n}\n\n// 初始化数据\nonMounted(() => {\n  getSubjectList()\n  getPrefrenceAreaList()\n})\n\n// 关联专题\nconst selectSubject = computed({\n  get: function () {\n    return compProductParam.value.subjectProductRelationList?.map(item => item.subjectId!)\n  },\n  set: function (newValue) {\n    compProductParam.value.subjectProductRelationList = []\n    newValue?.forEach(item => {\n      compProductParam.value.subjectProductRelationList!.push({ subjectId: item })\n    })\n  }\n})\n\n// 关联优选\nconst selectPrefrenceArea = computed({\n  get: function () {\n    return compProductParam.value.prefrenceAreaProductRelationList?.map(item => item.prefrenceAreaId!)\n  },\n  set: function (newValue) {\n    compProductParam.value.prefrenceAreaProductRelationList = []\n    newValue?.forEach(item => {\n      compProductParam.value.prefrenceAreaProductRelationList!.push({ prefrenceAreaId: item })\n    })\n  }\n})\n\n// 过滤方法\nconst filterMethod = (query: string, item: TransferDataItem) => {\n  return item.label.indexOf(query) > -1\n}\n\n// 上一步处理\nconst handlePrev = () => {\n  emit('prev-step')\n}\n\n// 完成提交处理\nconst handleFinishCommit = async () => {\n  emit('finish-commit', props.isEdit)\n}\n</script>\n\n<template>\n  <div style=\"margin-top: 50px\">\n    <el-form :model=\"compProductParam\" ref=\"productRelationForm\" label-width=\"120px\" class=\"form-inner-container\">\n      <el-form-item label=\"关联专题：\">\n        <el-transfer style=\"display: inline-block\" filterable :filter-method=\"filterMethod\" filter-placeholder=\"请输入专题名称\"\n          v-model=\"selectSubject\" :titles=\"['待选择', '已选择']\" :data=\"subjectList\">\n        </el-transfer>\n      </el-form-item>\n      <el-form-item label=\"关联优选：\">\n        <el-transfer style=\"display: inline-block\" filterable :filter-method=\"filterMethod\" filter-placeholder=\"请输入优选名称\"\n          v-model=\"selectPrefrenceArea\" :titles=\"['待选择', '已选择']\" :data=\"prefrenceAreaList\">\n        </el-transfer>\n      </el-form-item>\n      <el-form-item>\n        <div style=\"width: 100%;text-align: center\">\n          <el-button @click=\"handlePrev\">上一步，填写商品属性</el-button>\n          <el-button type=\"primary\" @click=\"handleFinishCommit\">完成，提交商品</el-button>\n        </div>\n      </el-form-item>\n    </el-form>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/product/components/ProductSaleDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed, onMounted, inject, type Ref } from 'vue'\nimport { ElButton, ElSwitch, ElCheckboxGroup, ElCheckbox, ElRadioGroup, ElRadioButton, ElInput, ElDatePicker, ElTable, ElTableColumn, ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport { getMemberLevelListAPI } from '@/apis/memberLevel'\nimport type { PmsProductParam } from '@/types/product'\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 定义事件\nconst emit = defineEmits(['prev-step', 'next-step'])\n\n// 获取跨层传递的数据\nconst compProductParam = inject('product-key') as Ref<PmsProductParam>\n\nconst getMemberLevelList = async () => {\n  const res = await getMemberLevelListAPI({ defaultStatus: 0 })\n  const memberPriceList = res.data.map(item => ({ memberLevelId: item.id, memberLevelName: item.name }))\n  compProductParam.value.memberPriceList = memberPriceList\n}\n\n// 组件挂载时调用\nonMounted(() => {\n  getMemberLevelList()\n})\n\n// 模板引用\nconst productSaleForm = ref<FormInstance>()\n\n// 日期禁用函数\nconst isDisabledDate = (time: Date) => {\n  return time.getTime() < Date.now()\n}\n\n// 被选中的服务保证，多个以逗号分割\nconst selectServiceList = computed({\n  get() {\n    if (!compProductParam.value.serviceIds) return []\n    return compProductParam.value.serviceIds.split(',').map(item => Number(item))\n  },\n  set(newValue: number[]) {\n    let serviceIds = ''\n    if (newValue && newValue.length > 0) {\n      for (let i = 0; i < newValue.length; i++) {\n        serviceIds += newValue[i] + ','\n      }\n      if (serviceIds.endsWith(',')) {\n        serviceIds = serviceIds.substring(0, serviceIds.length - 1)\n      }\n      compProductParam.value.serviceIds = serviceIds\n    } else {\n      compProductParam.value.serviceIds = ''\n    }\n  }\n})\n\n// 处理删除阶梯价格操作\nconst handleRemoveProductLadder = (index: number) => {\n  const productLadderList = compProductParam.value.productLadderList\n  if (!productLadderList) return\n  if (productLadderList.length === 1) {\n    productLadderList.pop()\n    productLadderList.push({\n      count: 0,\n      discount: 0,\n      price: 0\n    })\n  } else {\n    productLadderList.splice(index, 1)\n  }\n}\n\n// 处理添加阶梯价格操作\nconst handleAddProductLadder = () => {\n  const productLadderList = compProductParam.value.productLadderList\n  if (productLadderList && productLadderList.length < 3) {\n    productLadderList.push({\n      count: 0,\n      discount: 0,\n      price: 0\n    })\n  } else {\n    ElMessage({\n      message: '最多只能添加三条',\n      type: 'warning'\n    })\n  }\n}\n\n// 处理删除满减价格操作\nconst handleRemoveFullReduction = (index: number) => {\n  const fullReductionList = compProductParam.value.productFullReductionList\n  if (!fullReductionList) return\n  if (fullReductionList.length === 1) {\n    fullReductionList.pop()\n    fullReductionList.push({\n      fullPrice: 0,\n      reducePrice: 0\n    })\n  } else {\n    fullReductionList.splice(index, 1)\n  }\n}\n\n// 处理添加满减价格操作\nconst handleAddFullReduction = () => {\n  const fullReductionList = compProductParam.value.productFullReductionList\n  if (fullReductionList && fullReductionList.length < 3) {\n    fullReductionList.push({\n      fullPrice: 0,\n      reducePrice: 0\n    })\n  } else {\n    ElMessage({\n      message: '最多只能添加三条',\n      type: 'warning'\n    })\n  }\n}\n\n// 处理上一步\nconst handlePrev = () => {\n  emit('prev-step')\n}\n\n// 处理下一步\nconst handleNext = () => {\n  emit('next-step')\n}\n</script>\n\n<template>\n  <div style=\"margin-top: 50px\">\n    <el-form :model=\"compProductParam\" ref=\"productSaleForm\" label-width=\"120px\" class=\"form-inner-container\">\n      <el-form-item label=\"赠送积分：\">\n        <el-input v-model=\"compProductParam.giftPoint\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"赠送成长值：\">\n        <el-input v-model=\"compProductParam.giftGrowth\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"积分购买限制：\">\n        <el-input v-model=\"compProductParam.usePointLimit\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"预告商品：\">\n        <el-switch v-model=\"compProductParam.previewStatus\" :active-value=\"1\" :inactive-value=\"0\">\n        </el-switch>\n      </el-form-item>\n      <el-form-item label=\"商品上架：\">\n        <el-switch v-model=\"compProductParam.publishStatus\" :active-value=\"1\" :inactive-value=\"0\">\n        </el-switch>\n      </el-form-item>\n      <el-form-item label=\"商品推荐：\">\n        <span style=\"margin-right: 10px\">新品</span>\n        <el-switch v-model=\"compProductParam.newStatus\" :active-value=\"1\" :inactive-value=\"0\">\n        </el-switch>\n        <span style=\"margin-left: 10px;margin-right: 10px\">推荐</span>\n        <el-switch v-model=\"compProductParam.recommandStatus\" :active-value=\"1\" :inactive-value=\"0\">\n        </el-switch>\n      </el-form-item>\n      <el-form-item label=\"服务保证：\">\n        <el-checkbox-group v-model=\"selectServiceList\">\n          <el-checkbox :label=\"1\">无忧退货</el-checkbox>\n          <el-checkbox :label=\"2\">快速退款</el-checkbox>\n          <el-checkbox :label=\"3\">免费包邮</el-checkbox>\n        </el-checkbox-group>\n      </el-form-item>\n      <el-form-item label=\"详细页标题：\">\n        <el-input v-model=\"compProductParam.detailTitle\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"详细页描述：\">\n        <el-input v-model=\"compProductParam.detailDesc\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品关键字：\">\n        <el-input v-model=\"compProductParam.keywords\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品备注：\">\n        <el-input v-model=\"compProductParam.note\" type=\"textarea\" :autoSize=\"true\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"选择优惠方式：\">\n        <el-radio-group v-model=\"compProductParam.promotionType\">\n          <el-radio-button :label=\"0\">无优惠</el-radio-button>\n          <el-radio-button :label=\"1\">特惠促销</el-radio-button>\n          <el-radio-button :label=\"2\">会员价格</el-radio-button>\n          <el-radio-button :label=\"3\">阶梯价格</el-radio-button>\n          <el-radio-button :label=\"4\">满减价格</el-radio-button>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item v-show=\"compProductParam.promotionType === 1\">\n        <div>\n          <div>\n            开始时间：\n            <el-date-picker v-model=\"compProductParam.promotionStartTime\" type=\"datetime\"\n              :disabled-date=\"isDisabledDate\" placeholder=\"选择开始时间\">\n            </el-date-picker>\n          </div>\n          <div class=\"littleMargin\">\n            结束时间：\n            <el-date-picker v-model=\"compProductParam.promotionEndTime\" type=\"datetime\" :disabled-date=\"isDisabledDate\"\n              placeholder=\"选择结束时间\">\n            </el-date-picker>\n          </div>\n          <div class=\"littleMargin\">\n            促销价格：\n            <el-input style=\"width: 220px\" v-model=\"compProductParam.promotionPrice\" placeholder=\"输入促销价格\"></el-input>\n          </div>\n        </div>\n      </el-form-item>\n      <el-form-item v-show=\"compProductParam.promotionType === 2\">\n        <div>\n          <div v-for=\"(item, index) in compProductParam.memberPriceList\" :class=\"{ littleMargin: index !== 0 }\"\n            :key=\"item.id\">\n            {{ item.memberLevelName }}：\n            <el-input v-model=\"item.memberPrice\" style=\"width: 200px\"></el-input>\n          </div>\n        </div>\n      </el-form-item>\n      <el-form-item v-show=\"compProductParam.promotionType === 3\">\n        <el-table :data=\"compProductParam.productLadderList\" style=\"width: 80%\" border>\n          <el-table-column label=\"数量\" align=\"center\" width=\"120\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.count\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"折扣\" align=\"center\" width=\"120\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.discount\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column align=\"center\" label=\"操作\">\n            <template #default=\"scope\">\n              <el-button type=\"text\" @click=\"handleRemoveProductLadder(scope.$index)\">删除</el-button>\n              <el-button type=\"text\" @click=\"handleAddProductLadder()\">添加</el-button>\n            </template>\n          </el-table-column>\n        </el-table>\n      </el-form-item>\n      <el-form-item v-show=\"compProductParam.promotionType === 4\">\n        <el-table :data=\"compProductParam.productFullReductionList\" style=\"width: 80%\" border>\n          <el-table-column label=\"满\" align=\"center\" width=\"120\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.fullPrice\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column label=\"立减\" align=\"center\" width=\"120\">\n            <template #default=\"scope\">\n              <el-input v-model=\"scope.row.reducePrice\"></el-input>\n            </template>\n          </el-table-column>\n          <el-table-column align=\"center\" label=\"操作\">\n            <template #default=\"scope\">\n              <el-button type=\"text\" @click=\"handleRemoveFullReduction(scope.$index)\">删除</el-button>\n              <el-button type=\"text\" @click=\"handleAddFullReduction()\">添加</el-button>\n            </template>\n          </el-table-column>\n        </el-table>\n      </el-form-item>\n      <el-form-item>\n        <div style=\"width: 100%;text-align: center\">\n          <el-button @click=\"handlePrev\">上一步，填写商品信息</el-button>\n          <el-button type=\"primary\" @click=\"handleNext\">下一步，填写商品属性</el-button>\n        </div>\n      </el-form-item>\n    </el-form>\n  </div>\n</template>\n\n<style scoped>\n.littleMargin {\n  margin-top: 10px\n}\n</style>\n"
  },
  {
    "path": "src/views/pms/product/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, reactive, watch } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport {\n  getProductListAPI,\n  productUpdateDeleteStatusAPI,\n  productUpdateNewStatusAPI,\n  productUpdateRecommendStatusAPI,\n  productUpdatePublishStatusAPI\n} from '@/apis/product'\nimport { getSkuListByPidAPI, skuUpdateByPidAPI } from '@/apis/skuStock'\nimport { getProductAttributeListAPI } from '@/apis/productAttr'\nimport { getBrandListAPI } from '@/apis/brand'\nimport { getProductCategoryListWithChildrenAPI } from '@/apis/productCate'\nimport { Search, Tickets, Edit } from '@element-plus/icons-vue'\nimport type { PmsProduct, ProductQueryParam } from '@/types/product'\nimport type { ElCascaderDataVo, ElSelectDataVo } from '@/types/common'\nimport type { PmsSkuStock } from '@/types/skuStock'\nimport type { PmsProductAttribute } from '@/types/productAttr'\n\n// 获取路由\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<ProductQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 列表数据\nconst list = ref<PmsProduct[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(true)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getProductListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error(error)\n  }\n}\n// 筛选搜索中的品牌数据\nconst brandOptions = ref<ElSelectDataVo[]>([])\n// 获取品牌列表数据\nconst getBrandList = async () => {\n  const res = await getBrandListAPI({ pageNum: 1, pageSize: 100 })\n  brandOptions.value = res.data.list.map(item => ({ label: item.name, value: item.id!.toString() }))\n}\n// 筛选搜索中的商品分类数据\nconst productCateOptions = ref<ElCascaderDataVo[]>([])\n// 筛选搜索中当前选中的商品分类，结构为：[父分类ID,分类ID]\nconst selectProductCateValue = ref([])\n// 获取商品分类列表数据\nconst getProductCateList = async () => {\n  const res = await getProductCategoryListWithChildrenAPI()\n  const list = res.data\n  productCateOptions.value = list.map(item => ({\n    label: item.name,\n    value: item.id!,\n    children: item.children?.map(it => ({ label: it.name, value: it.id! }))\n  }))\n}\n// 筛选搜索中的上下架状态\nconst publishStatusOptions = ref([\n  {\n    value: 1,\n    label: '上架'\n  },\n  {\n    value: 0,\n    label: '下架'\n  }\n])\n// 筛选搜索中的审核状态\nconst verifyStatusOptions = ref([\n  {\n    value: 1,\n    label: '审核通过'\n  },\n  {\n    value: 0,\n    label: '未审核'\n  }\n])\n\n// 监听改变，通过修改列表查询中的productCategoryId数据\nwatch(selectProductCateValue, (newValue) => {\n  if (newValue != null && newValue.length == 2) {\n    listQuery.value.productCategoryId = newValue[1]\n  } else {\n    listQuery.value.productCategoryId = undefined\n  }\n}, { immediate: true })\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n  getBrandList()\n  getProductCateList()\n})\n\n// 批量操作类型\nconst operates = ref([\n  {\n    label: \"商品上架\",\n    value: \"publishOn\"\n  },\n  {\n    label: \"商品下架\",\n    value: \"publishOff\"\n  },\n  {\n    label: \"设为推荐\",\n    value: \"recommendOn\"\n  },\n  {\n    label: \"取消推荐\",\n    value: \"recommendOff\"\n  },\n  {\n    label: \"设为新品\",\n    value: \"newOn\"\n  },\n  {\n    label: \"取消新品\",\n    value: \"newOff\"\n  },\n  {\n    label: \"移入回收站\",\n    value: \"recycle\"\n  },\n  {\n    label: \"转移到分类\",\n    value: \"transferCategory\"\n  }\n])\n// 当前批量操作\nconst operateType = ref<string>()\n// 当前选中的条目\nconst multipleSelection = ref<PmsProduct[]>([])\n\n// SKU库存弹框数据\nconst editSkuInfo = reactive({\n  dialogVisible: false,\n  productId: 0,\n  productSn: '',\n  productAttributeCategoryId: 0,\n  stockList: [] as PmsSkuStock[],\n  productAttr: [] as PmsProductAttribute[],\n  keyword: undefined\n})\n\n// 从PmsSkuStock的spData中获取规格对应的值\nconst getProductSkuSp = (row: PmsSkuStock, index: number) => {\n  const spData = JSON.parse(row.spData!)\n  if (spData && index < spData.length) {\n    return spData[index].value\n  } else {\n    return ''\n  }\n}\n\nconst handleShowSkuEditDialog = async (index: number, row: PmsProduct) => {\n  editSkuInfo.dialogVisible = true\n  editSkuInfo.productId = row.id!\n  editSkuInfo.productSn = row.productSn\n  editSkuInfo.productAttributeCategoryId = row.productAttributeCategoryId!\n  editSkuInfo.keyword = undefined\n  const resp = await getSkuListByPidAPI(row.id!, { keyword: editSkuInfo.keyword })\n  editSkuInfo.stockList = resp.data\n  if (row.productAttributeCategoryId) {\n    const res2 = await getProductAttributeListAPI(row.productAttributeCategoryId, { pageNum: 1, pageSize: 10, type: 0 })\n    editSkuInfo.productAttr = res2.data.list\n  }\n}\n\nconst handleSearchEditSku = async () => {\n  const response = await getSkuListByPidAPI(editSkuInfo.productId, { keyword: editSkuInfo.keyword })\n  editSkuInfo.stockList = response.data\n}\n\nconst handleEditSkuConfirm = async () => {\n  if (!editSkuInfo.stockList || editSkuInfo.stockList.length <= 0) {\n    ElMessage({\n      message: '暂无sku信息',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  await ElMessageBox.confirm('是否要进行修改', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await skuUpdateByPidAPI(editSkuInfo.productId, editSkuInfo.stockList)\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n  editSkuInfo.dialogVisible = false\n}\n\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\nconst handleAddProduct = () => {\n  router.push({ path: '/pms/addProduct' })\n}\n\nconst handleBatchOperate = async () => {\n  if (!operateType.value) {\n    ElMessage({\n      message: '请选择操作类型',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  if (!multipleSelection.value || multipleSelection.value.length < 1) {\n    ElMessage({\n      message: '请选择要操作的商品',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  await ElMessageBox.confirm('是否要进行该批量操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  const ids = multipleSelection.value.map(item => item.id!)\n  switch (operateType.value) {\n    case operates.value[0]!.value:\n      updatePublishStatus(1, ids)\n      break\n    case operates.value[1]!.value:\n      updatePublishStatus(0, ids)\n      break\n    case operates.value[2]!.value:\n      updateRecommendStatus(1, ids)\n      break\n    case operates.value[3]!.value:\n      updateRecommendStatus(0, ids)\n      break\n    case operates.value[4]!.value:\n      updateNewStatus(1, ids)\n      break\n    case operates.value[5]!.value:\n      updateNewStatus(0, ids)\n      break\n    case operates.value[6]!.value:\n      updateDeleteStatus(1, ids)\n      break\n    case operates.value[7]!.value:\n      break\n    default:\n      break\n  }\n  getList()\n}\n\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\nconst handleSelectionChange = (val: PmsProduct[]) => {\n  multipleSelection.value = val\n}\n\nconst handlePublishStatusChange = async (index: number, row: PmsProduct) => {\n  await updatePublishStatus(row.publishStatus!, [row.id!])\n}\n\nconst handleNewStatusChange = async (index: number, row: PmsProduct) => {\n  await updateNewStatus(row.newStatus!, [row.id!])\n}\n\nconst handleRecommendStatusChange = async (index: number, row: PmsProduct) => {\n  await updateRecommendStatus(row.recommandStatus!, [row.id!])\n}\n\nconst handleResetSearch = () => {\n  selectProductCateValue.value = []\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\nconst handleDelete = async (index: number, row: PmsProduct) => {\n  updateDeleteStatus(1, [row.id!])\n}\n\nconst handleUpdateProduct = (index: number, row: PmsProduct) => {\n  router.push({ path: '/pms/updateProduct', query: { id: row.id } })\n}\n\nconst handleShowProduct = (index: number, row: PmsProduct) => {\n  console.log(\"handleShowProduct\", row)\n}\n\nconst handleShowVerifyDetail = (index: number, row: PmsProduct) => {\n  console.log(\"handleShowVerifyDetail\", row)\n}\n\nconst handleShowLog = (index: number, row: PmsProduct) => {\n  console.log(\"handleShowLog\", row)\n}\n\nconst updatePublishStatus = async (publishStatus: number, ids: number[]) => {\n  await productUpdatePublishStatusAPI({ ids: ids.join(','), publishStatus: publishStatus })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\nconst updateNewStatus = async (newStatus: number, ids: number[]) => {\n  await productUpdateNewStatusAPI({ ids: ids.join(','), newStatus: newStatus })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\nconst updateRecommendStatus = async (recommendStatus: number, ids: number[]) => {\n  await productUpdateRecommendStatusAPI({ ids: ids.join(','), recommendStatus: recommendStatus })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\nconst updateDeleteStatus = async (deleteStatus: number, ids: number[]) => {\n  await productUpdateDeleteStatusAPI({ ids: ids.join(','), deleteStatus: deleteStatus })\n  ElMessage({\n    message: '删除成功',\n    type: 'success',\n    duration: 1000\n  })\n  getList()\n}\n\n// 过滤器函数\nconst verifyStatusFilter = (value: number) => {\n  if (value === 1) {\n    return '审核通过'\n  } else {\n    return '未审核'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float: right\" @click=\"handleSearchList()\" type=\"primary\">\n          查询结果\n        </el-button>\n        <el-button style=\"float: right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 20px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input style=\"width: 203px\" v-model=\"listQuery.keyword\" placeholder=\"商品名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"商品货号：\">\n            <el-input style=\"width: 203px\" v-model=\"listQuery.productSn\" placeholder=\"商品货号\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"商品分类：\">\n            <el-cascader clearable v-model=\"selectProductCateValue\" :options=\"productCateOptions\">\n            </el-cascader>\n          </el-form-item>\n          <el-form-item label=\"商品品牌：\">\n            <el-select v-model=\"listQuery.brandId\" placeholder=\"请选择品牌\" clearable style=\"width: 203px;\">\n              <el-option v-for=\"item in brandOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"上架状态：\">\n            <el-select v-model=\"listQuery.publishStatus\" placeholder=\"全部\" clearable style=\"width: 203px;\">\n              <el-option v-for=\"item in publishStatusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"审核状态：\">\n            <el-select v-model=\"listQuery.verifyStatus\" placeholder=\"全部\" clearable style=\"width: 203px;\">\n              <el-option v-for=\"item in verifyStatusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAddProduct()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"productTable\" :data=\"list\" style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品图片\" width=\"120\" align=\"center\">\n          <template #default=\"scope\"><img style=\"height: 80px\" :src=\"scope.row.pic\"></template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">\n            <p>{{ scope.row.name }}</p>\n            <p>品牌：{{ scope.row.brandName }}</p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"价格/货号\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">\n            <p>价格：￥{{ scope.row.price }}</p>\n            <p>货号：{{ scope.row.productSn }}</p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"标签\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">\n            <p style=\"margin: 6px 0px;\">上架：\n              <el-switch @change=\"handlePublishStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n                :inactive-value=\"0\" v-model=\"scope.row.publishStatus\">\n              </el-switch>\n            </p>\n            <p style=\"margin: 6px 0px;\">新品：\n              <el-switch @change=\"handleNewStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n                v-model=\"scope.row.newStatus\">\n              </el-switch>\n            </p>\n            <p style=\"margin: 6px 0px;\">推荐：\n              <el-switch @change=\"handleRecommendStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n                :inactive-value=\"0\" v-model=\"scope.row.recommandStatus\">\n              </el-switch>\n            </p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"SKU库存\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button type=\"primary\" :icon=\"Edit\" size=\"large\"\n              @click=\"handleShowSkuEditDialog(scope.$index, scope.row)\" circle></el-button>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"销量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sale }}</template>\n        </el-table-column>\n        <el-table-column label=\"审核状态\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <p>{{ verifyStatusFilter(scope.row.verifyStatus) }}</p>\n            <p>\n              <el-button type=\"primary\" link @click=\"handleShowVerifyDetail(scope.$index, scope.row)\">审核详情\n              </el-button>\n            </p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">\n            <p>\n              <el-button size=\"small\" @click=\"handleShowProduct(scope.$index, scope.row)\">查看\n              </el-button>\n              <el-button size=\"small\" @click=\"handleUpdateProduct(scope.$index, scope.row)\">编辑\n              </el-button>\n            </p>\n            <p>\n              <el-button size=\"small\" @click=\"handleShowLog(scope.$index, scope.row)\">日志\n              </el-button>\n              <el-button size=\"small\" type=\"danger\" @click=\"handleDelete(scope.$index, scope.row)\">删除\n              </el-button>\n            </p>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"编辑货品信息\" v-model=\"editSkuInfo.dialogVisible\" width=\"40%\">\n      <span>商品货号：</span>\n      <span>{{ editSkuInfo.productSn }}</span>\n      <el-input placeholder=\"按sku编号搜索\" v-model=\"editSkuInfo.keyword\" style=\"width: 60%;margin-left: 20px\">\n        <template #append>\n          <el-button :icon=\"Search\" @click=\"handleSearchEditSku\"></el-button>\n        </template>\n      </el-input>\n      <el-table style=\"width: 100%;margin-top: 20px\" :data=\"editSkuInfo.stockList\" border>\n        <el-table-column label=\"SKU编号\" align=\"center\">\n          <template #default=\"scope\">\n            <el-input v-model=\"scope.row.skuCode\"></el-input>\n          </template>\n        </el-table-column>\n        <el-table-column v-for=\"(item, index) in editSkuInfo.productAttr\" :label=\"item.name\" :key=\"item.id\"\n          align=\"center\">\n          <template #default=\"scope\">\n            {{ getProductSkuSp(scope.row, index) }}\n          </template>\n        </el-table-column>\n        <el-table-column label=\"销售价格\" width=\"80\" align=\"center\">\n          <template #default=\"scope\">\n            <el-input v-model=\"scope.row.price\"></el-input>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"商品库存\" width=\"80\" align=\"center\">\n          <template #default=\"scope\">\n            <el-input v-model=\"scope.row.stock\"></el-input>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"库存预警值\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-input v-model=\"scope.row.lowStock\"></el-input>\n          </template>\n        </el-table-column>\n      </el-table>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"editSkuInfo.dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleEditSkuConfirm\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/pms/product/update.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductDetail from './components/ProductDetail.vue'\n</script>\n<template>\n  <product-detail :is-edit='true'></product-detail>\n</template>\n<style></style>\n"
  },
  {
    "path": "src/views/pms/productAttr/addProductAttr.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductAttrDetail from './components/ProductAttrDetail.vue'\n</script>\n\n<template>\n  <product-attr-detail :is-edit='false'></product-attr-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/productAttr/components/ProductAttrDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, computed } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'\nimport { getProductAttributeCategoryListAPI } from '@/apis/productAttrCate'\nimport { productAttributeCreateAPI, getProductAttributeByIdAPI, productAttributeUpdateAPI } from '@/apis/productAttr'\nimport type { PmsProductAttribute, PmsProductAttributeCategory } from '@/types/productAttr'\n\n// 获取路由对象\nconst route = useRoute()\nconst router = useRouter()\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认商品属性\nconst defaultProductAttr: PmsProductAttribute = {\n  filterType: 0,\n  handAddStatus: 0,\n  inputList: '',\n  inputType: 0,\n  name: '',\n  productAttributeCategoryId: 0,\n  relatedStatus: 0,\n  searchType: 0,\n  selectType: 0,\n  sort: 0,\n  type: 0\n}\n// 当前操作的商品属性\nconst productAttr = ref(Object.assign({}, defaultProductAttr))\n// 商属性分类列表\nconst productAttrCateList = ref<PmsProductAttributeCategory[]>([])\n// 属性值录入方式格式化\nconst inputListFormat = computed({\n  get() {\n    // 将逗号分隔的字符串转换为换行分隔，用于显示\n    return productAttr.value.inputList ? productAttr.value.inputList.replace(/,/g, '\\n') : ''\n  },\n  set(value) {\n    // 将换行分隔的字符串转换为逗号分隔，用于存储\n    productAttr.value.inputList = value ? value.replace(/\\n/g, ',') : ''\n  }\n})\n// 获取分类列表\nconst getCateList = async () => {\n  const listQuery = { pageNum: 1, pageSize: 100 }\n  const res = await getProductAttributeCategoryListAPI(listQuery)\n  productAttrCateList.value = res.data.list\n}\n\n// 组件挂载时加载数据\nonMounted(async () => {\n  if (props.isEdit) {\n    const res = await getProductAttributeByIdAPI(Number(route.query.id))\n    productAttr.value = res.data\n  } else {\n    resetProductAttr()\n  }\n  getCateList()\n})\n\n// 商属性表单组件引用\nconst productAttrFrom = ref<FormInstance>()\n// 商属性表单校验规则\nconst rules = reactive<FormRules<typeof productAttr>>({\n  name: [\n    { required: true, message: '请输入属性名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ]\n})\n\n// 重置商品属性属性\nconst resetProductAttr = () => {\n  productAttr.value = Object.assign({}, defaultProductAttr)\n  productAttr.value.productAttributeCategoryId = Number(route.query.cid)\n  productAttr.value.type = Number(route.query.type)\n}\n\n// 处理表单提交\nconst onSubmit = async () => {\n  if (!productAttrFrom.value) return\n  const valid = await productAttrFrom.value.validate().catch(() => false)\n  if (valid) {\n    await ElMessageBox.confirm('是否提交数据', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (props.isEdit) {\n      await productAttributeUpdateAPI(Number(route.query.id), productAttr.value)\n      ElMessage.success('修改成功')\n      router.back()\n    } else {\n      await productAttributeCreateAPI(productAttr.value)\n      ElMessage.success('提交成功')\n      resetForm()\n    }\n  } else {\n    ElMessage.error('验证失败')\n  }\n}\n\n// 重置表单\nconst resetForm = () => {\n  if (productAttrFrom.value) {\n    productAttrFrom.value.resetFields()\n    resetProductAttr()\n  }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form :model=\"productAttr\" :rules=\"rules\" ref=\"productAttrFrom\" label-width=\"150px\">\n      <el-form-item label=\"属性名称：\" prop=\"name\">\n        <el-input v-model=\"productAttr.name\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"商品类型：\">\n        <el-select v-model=\"productAttr.productAttributeCategoryId\" placeholder=\"请选择\">\n          <el-option v-for=\"item in productAttrCateList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id!\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"分类筛选样式:\">\n        <el-radio-group v-model=\"productAttr.filterType\">\n          <el-radio :label=\"0\">普通</el-radio>\n          <el-radio :label=\"1\">颜色</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"能否进行检索:\">\n        <el-radio-group v-model=\"productAttr.searchType\">\n          <el-radio :label=\"0\">不需要检索</el-radio>\n          <el-radio :label=\"1\">关键字检索</el-radio>\n          <el-radio :label=\"2\">范围检索</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"商品属性关联:\">\n        <el-radio-group v-model=\"productAttr.relatedStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"属性是否可选:\">\n        <el-radio-group v-model=\"productAttr.selectType\">\n          <el-radio :label=\"0\">唯一</el-radio>\n          <el-radio :label=\"1\">单选</el-radio>\n          <el-radio :label=\"2\">复选</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"属性值的录入方式:\">\n        <el-radio-group v-model=\"productAttr.inputType\">\n          <el-radio :label=\"0\">手工录入</el-radio>\n          <el-radio :label=\"1\">从下面列表中选择</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"属性值可选值列表:\">\n        <el-input :autosize=\"true\" type=\"textarea\" v-model=\"inputListFormat\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"是否支持手动新增:\">\n        <el-radio-group v-model=\"productAttr.handAddStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"排序属性：\">\n        <el-input v-model=\"productAttr.sort\"></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"onSubmit\">提交</el-button>\n        <el-button v-if=\"!isEdit\" @click=\"resetForm\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/productAttr/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getProductAttributeCategoryListAPI, productAttributeCategoryCreateAPI, productAttributeCategoryDeleteById, productAttributeCategoryUpdateAPI } from '@/apis/productAttrCate'\nimport { Tickets } from '@element-plus/icons-vue'\nimport type { FormInstance } from 'element-plus'\nimport type { PageParam } from '@/types/common'\nimport type { PmsProductAttributeCategory } from '@/types/productAttr'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 列表数据\nconst list = ref<PmsProductAttributeCategory[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(true)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getProductAttributeCategoryListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error(error)\n  }\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 当前操作的属性分类\nconst productAttrCate = ref<PmsProductAttributeCategory>({\n  name: ''\n})\n// 编辑框是否可见\nconst dialogVisible = ref(false)\n// 编辑框标题\nconst dialogTitle = ref('')\n// 编辑框中的表单引用\nconst productAttrCatForm = ref<FormInstance>()\n// 编辑框中的校验规则\nconst rules = ref({\n  name: [\n    { required: true, message: '请输入类型名称', trigger: 'blur' }\n  ]\n})\n\n// 添加产品属性分类\nconst addProductAttrCate = () => {\n  dialogVisible.value = true\n  dialogTitle.value = \"添加类型\"\n}\n\n// 处理每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理删除操作\nconst handleDelete = async (index: number, row: PmsProductAttributeCategory) => {\n  await ElMessageBox.confirm('是否要删除该品牌', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await productAttributeCategoryDeleteById(row.id!)\n  ElMessage.success('删除成功')\n  getList()\n}\n\n// 处理更新操作\nconst handleUpdate = (index: number, row: PmsProductAttributeCategory) => {\n  dialogVisible.value = true\n  dialogTitle.value = \"编辑类型\"\n  productAttrCate.value.name = row.name\n  productAttrCate.value.id = row.id\n}\n\n// 获取属性列表\nconst getAttrList = (index: number, row: PmsProductAttributeCategory) => {\n  router.push({ path: '/pms/productAttrList', query: { cid: row.id, cname: row.name, type: 0 } })\n}\n\n// 获取参数列表\nconst getParamList = (index: number, row: PmsProductAttributeCategory) => {\n  router.push({ path: '/pms/productAttrList', query: { cid: row.id, cname: row.name, type: 1 } })\n}\n\n// 确认对话框操作\nconst handleConfirm = async () => {\n  if (!productAttrCatForm.value) return\n  const valid = await productAttrCatForm.value.validate().catch(() => false)\n  if (valid) {\n    if (dialogTitle.value === \"添加类型\") {\n      await productAttributeCategoryCreateAPI(productAttrCate.value.name)\n      ElMessage.success('添加成功')\n      dialogVisible.value = false\n    } else {\n      await productAttributeCategoryUpdateAPI(productAttrCate.value.id!, productAttrCate.value.name)\n      ElMessage.success('修改成功')\n      dialogVisible.value = false\n    }\n    getList()\n  } else {\n    ElMessage.error('请先填写类型名称！')\n    return false\n  }\n}\n\n// 关闭对话框处理\nconst handleClose = () => {\n  dialogVisible.value = false\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"addProductAttrCate()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"productAttrCateTable\" style=\"width: 100%\" :data=\"list\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"类型名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"属性数量\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.attributeCount == null ? 0 : scope.row.attributeCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"参数数量\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.paramCount == null ? 0 : scope.row.paramCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"设置\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"getAttrList(scope.$index, scope.row)\">属性列表\n            </el-button>\n            <el-button size=\"small\" @click=\"getParamList(scope.$index, scope.row)\">参数列表\n            </el-button>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"danger\" @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog :title=\"dialogTitle\" v-model=\"dialogVisible\" :before-close=\"handleClose\" width=\"30%\">\n      <el-form ref=\"productAttrCatForm\" :model=\"productAttrCate\" :rules=\"rules\" label-width=\"120px\">\n        <el-form-item label=\"类型名称\" prop=\"name\">\n          <el-input v-model=\"productAttrCate.name\" autocomplete=\"off\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleConfirm\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style rel=\"stylesheet/scss\" lang=\"scss\" scoped></style>\n"
  },
  {
    "path": "src/views/pms/productAttr/productAttrList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getProductAttributeListAPI, productAttributeDeleteByIds } from '@/apis/productAttr'\nimport { Tickets } from '@element-plus/icons-vue'\nimport type { PmsProductAttribute } from '@/types/productAttr'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 属性分类ID\nconst cid = Number(router.currentRoute.value.query.cid)\n// 属性类型\nconst type = Number(router.currentRoute.value.query.type)\n// 列表查询数据\nconst listQuery = ref({\n  pageNum: 1,\n  pageSize: 5,\n  type: type\n})\nconst list = ref<PmsProductAttribute[]>([])\n// 列表数据\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(true)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getProductAttributeListAPI(cid, listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error(error)\n  }\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 当前批量操作类型\nconst operateType = ref<string>()\n// 批量操作选中条目\nconst multipleSelection = ref<PmsProductAttribute[]>([])\n// 批量操作类型集合\nconst operates = ref([\n  {\n    label: \"删除\",\n    value: \"deleteProductAttr\"\n  }\n])\n\n// 添加产品属性\nconst addProductAttr = () => {\n  router.push({ path: '/pms/addProductAttr', query: { cid: router.currentRoute.value.query.cid, type: router.currentRoute.value.query.type } })\n}\n\n// 处理表格选中状态变化\nconst handleSelectionChange = (val: PmsProductAttribute[]) => {\n  multipleSelection.value = val\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning('请选择一条记录')\n    return\n  }\n  if (operateType.value !== 'deleteProductAttr') {\n    ElMessage.warning('请选择批量操作类型')\n    return\n  }\n  await handleDeleteProductAttr(multipleSelection.value.map(item => item.id!))\n}\n\n// 处理每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理更新操作\nconst handleUpdate = (index: number, row: PmsProductAttribute) => {\n  router.push({ path: '/pms/updateProductAttr', query: { id: row.id } })\n}\n\n// 处理删除产品属性\nconst handleDeleteProductAttr = async (ids: number[]) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该属性', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await productAttributeDeleteByIds({ ids: ids.join(\",\") })\n    ElMessage.success('删除成功')\n    getList()\n  } catch (error) {\n    console.error(error)\n  }\n}\n\n// 处理删除操作\nconst handleDelete = async (index: number, row: PmsProductAttribute) => {\n  await handleDeleteProductAttr([row.id!])\n}\n\n// 属性值的录入方式\nconst inputTypeFilter = (value: number) => {\n  if (value === 1) {\n    return '从列表中选取'\n  } else {\n    return '手工录入'\n  }\n}\n\n// 属性是否可选\nconst selectTypeFilter = (value: number) => {\n  if (value === 1) {\n    return '单选'\n  } else if (value === 2) {\n    return '多选'\n  } else {\n    return '唯一'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"addProductAttr()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"productAttrTable\" :data=\"list\" style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"属性名称\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品类型\" width=\"140\" align=\"center\">\n          <template>{{ $route.query.cname }}</template>\n        </el-table-column>\n        <el-table-column label=\"属性是否可选\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ selectTypeFilter(scope.row.selectType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"属性值的录入方式\" width=\"150\" align=\"center\">\n          <template #default=\"scope\">{{ inputTypeFilter(scope.row.inputType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"可选值列表\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.inputList }}</template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"danger\" @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style rel=\"stylesheet/scss\" lang=\"scss\" scoped></style>\n"
  },
  {
    "path": "src/views/pms/productAttr/updateProductAttr.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductAttrDetail from './components/ProductAttrDetail.vue'\n</script>\n\n<template>\n  <product-attr-detail :is-edit='true'></product-attr-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/productCate/add.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductCateDetail from './components/ProductCateDetail.vue'\n</script>\n<template>\n  <product-cate-detail :is-edit='false'></product-cate-detail>\n</template>\n<style></style>\n"
  },
  {
    "path": "src/views/pms/productCate/components/ProductCateDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, computed } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'\nimport { getProductCategoryListAPI, productCategoryCreateAPI, productCategoryUpdateByIdAPI, getProductCategoryByIdAPI } from '@/apis/productCate'\nimport { productAttributeCategoryListWithAttrAPI } from '@/apis/productAttrCate'\nimport { getProductAttrInfoByCateIdAPI } from '@/apis/productAttr'\nimport SingleUpload from '@/components/Upload/singleUpload.vue'\nimport type { PmsProductCategory } from '@/types/productCate'\nimport type { ElCascaderDataVo } from '@/types/common'\n\n// 获取路由对象\nconst router = useRouter()\nconst route = useRoute()\n\n// 定义属性\nconst props = defineProps({\n  // 是否为编辑模式\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认商品分类\nconst defaultProductCate: PmsProductCategory = {\n  description: '',\n  icon: '',\n  keywords: '',\n  name: '',\n  navStatus: 0,\n  parentId: 0,\n  productUnit: '',\n  showStatus: 0,\n  sort: 0\n}\n// 定义分类id（编辑使用）\nconst cateId = computed(() => Number(route.query.id))\n// 当前操作的商品分类\nconst productCate = ref<PmsProductCategory>(Object.assign({}, defaultProductCate))\n// 可选上级分类\nconst selectProductCateList = ref<PmsProductCategory[]>([])\n// 商品属性ID及属性分类ID集合（筛选属性）\nconst filterProductAttrList = ref<{ key: number, value: number[] }[]>([{ key: 0, value: [] }])\n// 筛选属性级联选择器中的数据\nconst filterAttrs = ref<ElCascaderDataVo[]>([])\n// 获取可选上级分类列表\nconst getSelectProductCateList = async () => {\n  const res = await getProductCategoryListAPI(0, { pageSize: 100, pageNum: 1 })\n  selectProductCateList.value = res.data.list\n  const noTopProductCate = Object.assign({}, defaultProductCate)\n  noTopProductCate.id = 0\n  noTopProductCate.name = '无上级分类'\n  selectProductCateList.value.unshift(noTopProductCate)\n}\n// 获取商品属性分类列表\nconst getProductAttrCateList = async () => {\n  const res = await productAttributeCategoryListWithAttrAPI()\n  const list = res.data\n  filterAttrs.value = list.map(item => ({\n    label: item.name,\n    value: item.id!,\n    children: item.productAttributeList?.map(it => ({ label: it.name, value: it.id! }))\n  }))\n}\n\n// 组件挂载后执行\nonMounted(async () => {\n  if (props.isEdit) {\n    const res = await getProductCategoryByIdAPI(cateId.value)\n    productCate.value = res.data\n    const attrRes = await getProductAttrInfoByCateIdAPI(cateId.value)\n    filterProductAttrList.value = attrRes.data.map((item, index) => ({\n      key: Date.now() + index,\n      value: [item.attributeCategoryId, item.attributeId]\n    }))\n  } else {\n    productCate.value = Object.assign({}, defaultProductCate)\n  }\n  getSelectProductCateList()\n  getProductAttrCateList()\n})\n\n// 商品分类表单引用\nconst productCateFrom = ref<FormInstance>()\n// 商品分类表单校验规则\nconst rules = reactive<FormRules<PmsProductCategory>>({\n  name: [\n    { required: true, message: '请输入分类名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ]\n})\n\n// 获取选中的筛选商品属性ID\nconst getProductAttributeIdList = () => {\n  return filterProductAttrList.value.filter(item => item.value && item.value.length === 2)\n    .map(item => item.value[1]!)\n}\n\n// 提交表单\nconst onSubmit = async () => {\n  if (!productCateFrom.value) return\n  const valid = await productCateFrom.value.validate().catch(() => false)\n  if (valid) {\n    await ElMessageBox.confirm('是否提交数据', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (props.isEdit) {\n      productCate.value.productAttributeIdList = getProductAttributeIdList()\n      await productCategoryUpdateByIdAPI(cateId.value, productCate.value)\n      ElMessage({\n        message: '修改成功',\n        type: 'success',\n        duration: 1000\n      })\n      router.back()\n    } else {\n      productCate.value.productAttributeIdList = getProductAttributeIdList()\n      await productCategoryCreateAPI(productCate.value)\n      productCateFrom.value.resetFields()\n      resetForm()\n      ElMessage({\n        message: '提交成功',\n        type: 'success',\n        duration: 1000\n      })\n    }\n  } else {\n    ElMessage({\n      message: '验证失败',\n      type: 'error',\n      duration: 1000\n    })\n  }\n}\n\n// 重置表单\nconst resetForm = () => {\n  if (productCateFrom.value) {\n    productCateFrom.value.resetFields()\n    productCate.value = Object.assign({}, defaultProductCate)\n    getSelectProductCateList()\n    filterProductAttrList.value = [{ key: 0, value: [] }]\n  }\n}\n\n// 删除筛选属性\nconst removeFilterAttr = (filterProductAttr: { key: number, value: number[] }) => {\n  if (filterProductAttrList.value.length === 1) {\n    ElMessage({\n      message: '至少要留一个',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  const index = filterProductAttrList.value.indexOf(filterProductAttr)\n  if (index !== -1) {\n    filterProductAttrList.value.splice(index, 1)\n  }\n}\n\n// 添加筛选属性\nconst handleAddFilterAttr = () => {\n  if (filterProductAttrList.value.length === 3) {\n    ElMessage({\n      message: '最多添加三个',\n      type: 'warning',\n      duration: 1000\n    })\n    return\n  }\n  filterProductAttrList.value.push({\n    value: [],\n    key: Date.now()\n  })\n}\n\n// 过滤器\nconst filterLabelFilter = (index: number) => {\n  if (index === 0) {\n    return '筛选属性：'\n  } else {\n    return ''\n  }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form ref=\"productCateFrom\" :model=\"productCate\" :rules=\"rules\" label-width=\"150px\">\n      <el-form-item label=\"分类名称：\" prop=\"name\">\n        <el-input v-model=\"productCate.name\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"上级分类：\">\n        <el-select v-model=\"productCate.parentId\" placeholder=\"请选择分类\">\n          <el-option v-for=\"item in selectProductCateList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id!\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"数量单位：\">\n        <el-input v-model=\"productCate.productUnit\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"排序：\">\n        <el-input v-model=\"productCate.sort\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"是否显示：\">\n        <el-radio-group v-model=\"productCate.showStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"是否显示在导航栏：\">\n        <el-radio-group v-model=\"productCate.navStatus\">\n          <el-radio :label=\"1\">是</el-radio>\n          <el-radio :label=\"0\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"分类图标：\">\n        <single-upload v-model=\"productCate.icon\"></single-upload>\n      </el-form-item>\n      <el-form-item v-for=\"(filterProductAttr, index) in filterProductAttrList\" :label=\"filterLabelFilter(index)\"\n        :key=\"filterProductAttr.key\">\n        <el-cascader clearable v-model=\"filterProductAttr.value\" :options=\"filterAttrs\">\n        </el-cascader>\n        <el-button style=\"margin-left: 20px\" @click.prevent=\"removeFilterAttr(filterProductAttr)\">删除</el-button>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"handleAddFilterAttr()\">新增</el-button>\n      </el-form-item>\n      <el-form-item label=\"关键词：\">\n        <el-input v-model=\"productCate.keywords\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"分类描述：\">\n        <el-input type=\"textarea\" :autosize=\"true\" v-model=\"productCate.description\"></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"onSubmit()\">提交</el-button>\n        <el-button v-if=\"!props.isEdit\" @click=\"resetForm()\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/productCate/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, watch } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { getProductCategoryListAPI, productCategoryDeleteByIdAPI, productCategoryUpdateShowStatusAPI, productCategoryUpdateNavStatusAPI } from '@/apis/productCate'\nimport type { PmsProductCategory } from '@/types/productCate'\n\n// 获取路由\nconst router = useRouter()\nconst route = useRoute()\n\n// 当前列表页父分类ID\nconst parentId = ref(0)\n// 列表查询参数\nconst listQuery = ref({\n  pageNum: 1,\n  pageSize: 10\n})\n// 列表数据\nconst list = ref<PmsProductCategory[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(true)\n// 重置父级ID\nconst resetParentId = () => {\n  listQuery.value.pageNum = 1\n  if (route.query.parentId != null) {\n    parentId.value = Number(route.query.parentId)\n  } else {\n    parentId.value = 0\n  }\n}\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  const res = await getProductCategoryListAPI(parentId.value, listQuery.value)\n  listLoading.value = false\n  list.value = res.data.list\n  total.value = res.data.total\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  resetParentId()\n  getList()\n})\n\n// 监听查询参数变化\nwatch(() => route.query, () => {\n  resetParentId()\n  getList()\n})\n\n// 添加商品分类\nconst handleAddProductCate = () => {\n  router.push('/pms/addProductCate')\n}\n\n// 处理分页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理导航状态变化\nconst handleNavStatusChange = async (index: number, row: PmsProductCategory) => {\n  await productCategoryUpdateNavStatusAPI({ ids: [row.id!].join(','), navStatus: row.navStatus })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\n// 处理显示状态变化\nconst handleShowStatusChange = async (index: number, row: PmsProductCategory) => {\n  await productCategoryUpdateShowStatusAPI({ ids: [row.id!].join(','), showStatus: row.navStatus })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\n// 查看下级分类\nconst handleShowNextLevel = (index: number, row: PmsProductCategory) => {\n  router.push({ path: '/pms/productCate', query: { parentId: row.id } })\n}\n\n// 转移商品\nconst handleTransferProduct = (index: number, row: PmsProductCategory) => {\n  console.log('handleAddProductCate', row)\n}\n\n// 更新分类\nconst handleUpdate = (index: number, row: PmsProductCategory) => {\n  router.push({ path: '/pms/updateProductCate', query: { id: row.id } })\n}\n\n// 删除分类\nconst handleDelete = async (index: number, row: PmsProductCategory) => {\n  await ElMessageBox.confirm('是否要删除该品牌', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await productCategoryDeleteByIdAPI(row.id!)\n  ElMessage({\n    message: '删除成功',\n    type: 'success',\n    duration: 1000\n  })\n  getList()\n}\n\n// 分类级别过滤器\nconst levelFilter = (value: number) => {\n  if (value === 0) {\n    return '一级'\n  } else if (value === 1) {\n    return '二级'\n  }\n}\n\n// 禁用下级按钮\nconst disableNextLevel = (value: number) => {\n  if (value === 0) {\n    return false\n  } else {\n    return true\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAddProductCate()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"productCateTable\" style=\"width: 100%\" :data=\"list\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"分类名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"级别\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ levelFilter(scope.row.level) }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品数量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"数量单位\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productUnit }}</template>\n        </el-table-column>\n        <el-table-column label=\"导航栏\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleNavStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.navStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"是否显示\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleShowStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.showStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"设置\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" :disabled=\"disableNextLevel(scope.row.level)\"\n              @click=\"handleShowNextLevel(scope.$index, scope.row)\">查看下级\n            </el-button>\n            <el-button size=\"small\" @click=\"handleTransferProduct(scope.$index, scope.row)\">转移商品\n            </el-button>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"danger\" @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/pms/productCate/update.vue",
    "content": "<script lang=\"ts\" setup>\nimport ProductCateDetail from './components/ProductCateDetail.vue'\n</script>\n<template>\n  <product-cate-detail :is-edit='true'></product-cate-detail>\n</template>\n<style></style>\n"
  },
  {
    "path": "src/views/sms/advertise/add.vue",
    "content": "<script lang=\"ts\" setup>\nimport HomeAdvertiseDetail from './components/HomeAdvertiseDetail.vue'\n</script>\n<template>\n  <home-advertise-detail :isEdit=\"false\"></home-advertise-detail>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/sms/advertise/components/HomeAdvertiseDetail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, reactive, onMounted } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'\nimport SingleUpload from '@/components/Upload/singleUpload.vue'\nimport { homeAdvertiseCreateAPI, getHomeAdvertiseByIdAPI, homeAdvertiseUpdateAPI } from '@/apis/homeAdvertise'\nimport type { SmsHomeAdvertise } from '@/types/homeAdvertist'\n\n// 获取路由对象\nconst router = useRouter()\nconst route = useRoute()\n\n// 定义属性\nconst props = defineProps({\n  // 是否为编辑模式\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认轮播广告，添加时使用\nconst defaultHomeAdvertise: SmsHomeAdvertise = {\n  name: '',\n  type: 1,\n  status: 0,\n  sort: 0\n}\n// 定义轮播广告对象\nconst homeAdvertise = ref<SmsHomeAdvertise>(Object.assign({}, defaultHomeAdvertise))\n// 轮播广告位置\nconst typeOptions = ref([\n  {\n    label: 'PC首页轮播',\n    value: 0\n  },\n  {\n    label: 'APP首页轮播',\n    value: 1\n  }\n])\n// 轮播广告表单组件引用\nconst homeAdvertiseFrom = ref<FormInstance>()\n// 轮播广告表单校验规则\nconst rules = reactive<FormRules<SmsHomeAdvertise>>({\n  name: [\n    { required: true, message: '请输入广告名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  url: [\n    { required: true, message: '请输入广告链接', trigger: 'blur' }\n  ],\n  startTime: [\n    { required: true, message: '请选择开始时间', trigger: 'blur' }\n  ],\n  endTime: [\n    { required: true, message: '请选择到期时间', trigger: 'blur' }\n  ],\n  pic: [\n    { required: true, message: '请选择广告图片', trigger: 'blur' }\n  ]\n})\n\n// 页面加载时获取数据\nonMounted(async () => {\n  if (props.isEdit) {\n    const res = await getHomeAdvertiseByIdAPI(Number(route.query.id))\n    homeAdvertise.value = res.data\n  } else {\n    homeAdvertise.value = Object.assign({}, defaultHomeAdvertise)\n  }\n})\n\n// 提交表单\nconst onSubmit = async () => {\n  homeAdvertiseFrom.value!.validate(async (valid) => {\n    if (valid) {\n      await ElMessageBox.confirm('是否提交数据', '提示', {\n        confirmButtonText: '确定',\n        cancelButtonText: '取消',\n        type: 'warning'\n      })\n      if (props.isEdit) {\n        await homeAdvertiseUpdateAPI(Number(route.query.id), homeAdvertise.value)\n        homeAdvertiseFrom.value!.resetFields()\n        ElMessage({\n          message: '修改成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      } else {\n        await homeAdvertiseCreateAPI(homeAdvertise.value)\n        homeAdvertiseFrom.value!.resetFields()\n        homeAdvertise.value = Object.assign({}, defaultHomeAdvertise)\n        ElMessage({\n          message: '提交成功',\n          type: 'success',\n          duration: 1000\n        })\n      }\n    } else {\n      ElMessage({\n        message: '验证失败',\n        type: 'error',\n        duration: 1000\n      })\n    }\n  })\n}\n\n// 重置表单\nconst resetForm = () => {\n  if (homeAdvertiseFrom.value) {\n    homeAdvertiseFrom.value.resetFields()\n    homeAdvertise.value = Object.assign({}, defaultHomeAdvertise)\n  }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form ref=\"homeAdvertiseFrom\" :model=\"homeAdvertise\" :rules=\"rules\" label-width=\"150px\">\n      <el-form-item label=\"广告名称：\" prop=\"name\">\n        <el-input v-model=\"homeAdvertise.name\" class=\"input-width\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"广告位置：\">\n        <el-select v-model=\"homeAdvertise.type\">\n          <el-option v-for=\"type in typeOptions\" :key=\"type.value\" :label=\"type.label\" :value=\"type.value\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"开始时间：\" prop=\"startTime\">\n        <el-date-picker type=\"datetime\" placeholder=\"选择日期\" v-model=\"homeAdvertise.startTime\"></el-date-picker>\n      </el-form-item>\n      <el-form-item label=\"到期时间：\" prop=\"endTime\">\n        <el-date-picker type=\"datetime\" placeholder=\"选择日期\" v-model=\"homeAdvertise.endTime\"></el-date-picker>\n      </el-form-item>\n      <el-form-item label=\"上线/下线：\">\n        <el-radio-group v-model=\"homeAdvertise.status\">\n          <el-radio :label=\"0\">下线</el-radio>\n          <el-radio :label=\"1\">上线</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"广告图片：\">\n        <single-upload v-model=\"homeAdvertise.pic\"></single-upload>\n      </el-form-item>\n      <el-form-item label=\"排序：\">\n        <el-input v-model=\"homeAdvertise.sort\" class=\"input-width\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"广告链接：\" prop=\"url\">\n        <el-input v-model=\"homeAdvertise.url\" class=\"input-width\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"广告备注：\">\n        <el-input class=\"input-width\" type=\"textarea\" :rows=\"5\" placeholder=\"请输入内容\" v-model=\"homeAdvertise.note\">\n        </el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"onSubmit()\">提交</el-button>\n        <el-button v-if=\"!props.isEdit\" @click=\"resetForm()\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped>\n.input-width {\n  width: 70%;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/advertise/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getHomeAdvertiseListAPI, homeAdvertiseUpdateStatusAPI, deleteHomeAdvertiseAPI } from '@/apis/homeAdvertise'\nimport { formatDateTime } from '@/utils/datetime'\nimport type { HomeAdvertiseQueryParam, SmsHomeAdvertise } from '@/types/homeAdvertist'\n\n// 获取路由\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<HomeAdvertiseQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 轮播位置选项\nconst typeOptions = ref([\n  {\n    label: 'PC首页轮播',\n    value: 0\n  },\n  {\n    label: 'APP首页轮播',\n    value: 1\n  }\n])\n// 列表数据\nconst list = ref<SmsHomeAdvertise[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  const res = await getHomeAdvertiseListAPI(listQuery.value)\n  listLoading.value = false\n  list.value = res.data.list\n  total.value = res.data.total\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 选中的条目\nconst multipleSelection = ref<SmsHomeAdvertise[]>([])\n// 批量操作类型\nconst operates = ref([\n  {\n    label: \"删除\",\n    value: 0\n  }\n])\n// 档期批量操作类型\nconst operateType = ref()\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理表格选择变化\nconst handleSelectionChange = (val: SmsHomeAdvertise[]) => {\n  multipleSelection.value = val\n}\n\n// 处理分页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理状态更新\nconst handleUpdateStatus = async (index: number, row: SmsHomeAdvertise) => {\n  try {\n    await ElMessageBox.confirm('是否要修改上线/下线状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeAdvertiseUpdateStatusAPI({ id: row.id!, status: row.status! })\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    getList()\n  }\n}\n\n// 删除广告\nconst deleteHomeAdvertise = async (ids: number[]) => {\n  await ElMessageBox.confirm('是否要删除该广告?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await deleteHomeAdvertiseAPI({ ids: ids.join(',') })\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '删除成功!'\n  })\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: SmsHomeAdvertise) => {\n  await deleteHomeAdvertise([row.id!])\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  if (operateType.value === 0) {\n    //删除\n    await deleteHomeAdvertise(multipleSelection.value.map(item => item.id!))\n  } else {\n    ElMessage.warning({\n      message: '请选择批量操作类型',\n      duration: 1000\n    })\n  }\n}\n\n// 处理添加\nconst handleAdd = () => {\n  router.push({ path: '/sms/addAdvertise' })\n}\n\n// 处理更新\nconst handleUpdate = (index: number, row: SmsHomeAdvertise) => {\n  router.push({ path: '/sms/updateAdvertise', query: { id: row.id } })\n}\n\n// 格式化类型\nconst formatType = (type: number) => {\n  if (type === 1) {\n    return 'APP首页轮播'\n  } else {\n    return 'PC首页轮播'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 25px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"广告名称：\">\n            <el-input v-model=\"listQuery.name\" class=\"input-width\" placeholder=\"广告名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"广告位置：\">\n            <el-select v-model=\"listQuery.type\" placeholder=\"全部\" clearable class=\"input-width\">\n              <el-option v-for=\"item in typeOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"到期时间：\">\n            <el-date-picker class=\"input-width\" v-model=\"listQuery.endTime\" value-format=\"yyyy-MM-dd\" type=\"date\"\n              placeholder=\"请选择时间\">\n            </el-date-picker>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\">添加广告</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"homeAdvertiseTable\" :data=\"list\" style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"广告名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"广告位置\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ formatType(scope.row.type) }}</template>\n        </el-table-column>\n        <el-table-column label=\"广告图片\" width=\"180\" align=\"center\">\n          <template #default=\"scope\"><img style=\"height: 80px;width: 150px;\" :src=\"scope.row.pic\"></template>\n        </el-table-column>\n        <el-table-column label=\"时间\" width=\"240\" align=\"center\">\n          <template #default=\"scope\">\n            <p>开始时间：{{ formatDateTime(scope.row.startTime) }}</p>\n            <p>到期时间：{{ formatDateTime(scope.row.endTime) }}</p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"上线/下线\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleUpdateStatus(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.status\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"点击次数\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.clickCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"生成订单\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.orderCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.input-width {\n  width: 203px;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/advertise/update.vue",
    "content": "<script lang=\"ts\" setup>\nimport HomeAdvertiseDetail from './components/HomeAdvertiseDetail.vue'\n</script>\n<template>\n  <home-advertise-detail :isEdit=\"true\"></home-advertise-detail>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/sms/brand/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getHomeBrandListAPI, homeBrandUpdateRecommendStatusAPI, homeBrandDeleteByIdsAPI, homeBrandCreateAPI, homeBrandUpdateSortAPI } from '@/apis/homeBrand'\nimport { getBrandListAPI } from '@/apis/brand'\nimport type { HomeBrandQueryParam, SmsHomeBrand } from '@/types/homeBrand'\nimport type { PmsBrand } from '@/types/brand'\n\n// 列表查询参数\nconst listQuery = ref<HomeBrandQueryParam>({\n  pageNum: 1,\n  pageSize: 10,\n})\n// 首页品牌列表数据\nconst list = ref<SmsHomeBrand[]>([])\n// 总条数\nconst total = ref<number>(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getHomeBrandListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取列表失败:', error)\n  }\n}\n\n// 页面加载完成后获取数据\nonMounted(() => {\n  getList()\n})\n\n// 表格中被选中的行\nconst multipleSelection = ref<SmsHomeBrand[]>([])\n\nconst recommendOptions = ref([\n  {\n    label: '未推荐',\n    value: 0\n  },\n  {\n    label: '推荐中',\n    value: 1\n  }\n])\n\nconst operates = ref([\n  {\n    label: \"设为推荐\",\n    value: 0\n  },\n  {\n    label: \"取消推荐\",\n    value: 1\n  },\n  {\n    label: \"删除\",\n    value: 2\n  }\n])\nconst operateType = ref<number>()\n\n// 选择品牌对话框可见性\nconst selectDialogVisible = ref(false)\n// 选择品牌对话框中的数据\nconst dialogData = ref({\n  list: [] as PmsBrand[],\n  total: 0,\n  multipleSelection: [] as PmsBrand[],\n  listQuery: {\n    keyword: '',\n    showStatus: 1,\n    pageNum: 1,\n    pageSize: 5\n  }\n})\n// 获取选择品牌对话框列表\nconst getDialogList = async () => {\n  try {\n    const res = await getBrandListAPI(dialogData.value.listQuery)\n    dialogData.value.list = res.data.list\n    dialogData.value.total = res.data.total\n  } catch (error) {\n    console.error('获取对话框列表失败:', error)\n  }\n}\n\n// 设置排序对话框可见性\nconst sortDialogVisible = ref(false)\n// 设置排序对话框中的数据\nconst sortDialogData = ref({ sort: 0, id: 0 })\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = {\n    pageNum: 1,\n    pageSize: 10,\n  }\n}\n\n// 搜索列表\nconst handleSearchList = async () => {\n  listQuery.value.pageNum = 1\n  await getList()\n}\n\n// 处理表格选中变化\nconst handleSelectionChange = (val: SmsHomeBrand[]) => {\n  multipleSelection.value = val\n}\n\n// 每页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理推荐状态变化\nconst handleRecommendStatusStatusChange = async (index: number, row: SmsHomeBrand) => {\n  await updateRecommendStatusStatus([row.id!], row.recommendStatus!)\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: SmsHomeBrand) => {\n  await deleteBrand([row.id!])\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  const ids = multipleSelection.value.map(item => item.id!)\n  if (operateType.value === 0) {\n    // 设为推荐\n    await updateRecommendStatusStatus(ids, 1)\n  } else if (operateType.value === 1) {\n    // 取消推荐\n    await updateRecommendStatusStatus(ids, 0)\n  } else if (operateType.value === 2) {\n    // 删除\n    await deleteBrand(ids)\n  } else {\n    ElMessage.warning({\n      message: '请选择批量操作类型',\n      duration: 1000\n    })\n    return\n  }\n}\n\n// 处理选择品牌\nconst handleSelectBrand = () => {\n  selectDialogVisible.value = true\n  dialogData.value.listQuery.keyword = ''\n  getDialogList()\n}\n\n// 处理对话框搜索\nconst handleSelectSearch = () => {\n  getDialogList()\n}\n\n// 对话框每页大小变化\nconst handleDialogSizeChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = 1\n  dialogData.value.listQuery.pageSize = val\n  getDialogList()\n}\n\n// 对话框当前页变化\nconst handleDialogCurrentChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = val\n  getDialogList()\n}\n\n// 对话框选中变化\nconst handleDialogSelectionChange = (val: PmsBrand[]) => {\n  dialogData.value.multipleSelection = val\n}\n\n// 确认选择对话框\nconst handleSelectDialogConfirm = async () => {\n  if (dialogData.value.multipleSelection.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  try {\n    await ElMessageBox.confirm('使用要进行添加操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    const homeBrandList: SmsHomeBrand[] = dialogData.value.multipleSelection.map(item => ({\n      brandId: item.id!,\n      brandName: item.name\n    }))\n    await homeBrandCreateAPI(homeBrandList)\n    selectDialogVisible.value = false\n    dialogData.value.multipleSelection = []\n    await getList()\n    ElMessage.success({\n      type: 'success',\n      message: '添加成功!'\n    })\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('确认操作失败:', error)\n    }\n  }\n}\n\n// 编辑排序\nconst handleEditSort = (index: number, row: SmsHomeBrand) => {\n  sortDialogVisible.value = true\n  sortDialogData.value.sort = row.sort!\n  sortDialogData.value.id = row.id!\n}\n\n// 更新排序\nconst handleUpdateSort = async () => {\n  if (!sortDialogData.value.id) return\n  try {\n    await ElMessageBox.confirm('是否要修改排序?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeBrandUpdateSortAPI(sortDialogData.value)\n    sortDialogVisible.value = false\n    await getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('修改排序失败:', error)\n    }\n  }\n}\n\n// 更新推荐状态\nconst updateRecommendStatusStatus = async (ids: number[], status: number) => {\n  try {\n    await ElMessageBox.confirm('是否要修改推荐状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeBrandUpdateRecommendStatusAPI({\n      ids: ids.join(','),\n      recommendStatus: status\n    })\n    await getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch (error) {\n    console.error('修改失败:', error)\n    await getList()\n  }\n}\n\n// 删除品牌\nconst deleteBrand = async (ids: number[]) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该推荐?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeBrandDeleteByIdsAPI({ ids: ids.join(',') })\n    await getList()\n    ElMessage.success({\n      type: 'success',\n      message: '删除成功!'\n    })\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除操作失败:', error)\n    }\n  }\n}\n\n// 推荐状态过滤器\nconst formatRecommendStatus = (status: number) => {\n  if (status === 1) {\n    return '推荐中'\n  } else {\n    return '未推荐'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"品牌名称：\">\n            <el-input v-model=\"listQuery.brandName\" placeholder=\"品牌名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"推荐状态：\">\n            <el-select v-model=\"listQuery.recommendStatus\" placeholder=\"全部\" clearable style=\"width: 150px;\">\n              <el-option v-for=\"item in recommendOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleSelectBrand()\">选择品牌</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"homeBrandTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"品牌名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.brandName }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否推荐\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleRecommendStatusStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n              :inactive-value=\"0\" v-model=\"scope.row.recommendStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"状态\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatRecommendStatus(scope.row.recommendStatus) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleEditSort(scope.$index, scope.row)\">设置排序\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"选择品牌\" v-model=\"selectDialogVisible\" width=\"40%\">\n      <el-input v-model=\"dialogData.listQuery.keyword\" style=\"width: 250px;margin-bottom: 20px\" placeholder=\"品牌名称搜索\">\n        <template #append>\n          <el-button :icon=\"Search\" @click=\"handleSelectSearch()\"></el-button>\n        </template>\n      </el-input>\n      <el-table :data=\"dialogData.list\" @selection-change=\"handleDialogSelectionChange\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"品牌名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"相关\" width=\"220\" align=\"center\">\n          <template #default=\"scope\">\n            商品：<span class=\"color-main\">{{ scope.row.productCount }}</span>\n            评价：<span class=\"color-main\">{{ scope.row.productCommentCount }}</span>\n          </template>\n        </el-table-column>\n      </el-table>\n      <div class=\"pagination-container\">\n        <el-pagination background @size-change=\"handleDialogSizeChange\" @current-change=\"handleDialogCurrentChange\"\n          layout=\"prev, pager, next\" v-model:current-page=\"dialogData.listQuery.pageNum\"\n          :page-size=\"dialogData.listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"dialogData.total\">\n        </el-pagination>\n      </div>\n      <div style=\"clear: both;\"></div>\n      <template #footer>\n        <div>\n          <el-button size=\"small\" @click=\"selectDialogVisible = false\">取 消</el-button>\n          <el-button size=\"small\" type=\"primary\" @click=\"handleSelectDialogConfirm()\">确 定</el-button>\n        </div>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"设置排序\" v-model=\"sortDialogVisible\" width=\"40%\">\n      <el-form :model=\"sortDialogData\" label-width=\"150px\">\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"sortDialogData.sort\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span>\n          <el-button @click=\"sortDialogVisible = false\" size=\"small\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateSort\" size=\"small\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/sms/coupon/add.vue",
    "content": "<script lang=\"ts\" setup>\nimport CouponDetail from './components/CouponDetail.vue'\n</script>\n<template>\n  <coupon-detail :isEdit=\"false\"></coupon-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/sms/coupon/components/CouponDetail.vue",
    "content": "<script lang=\"ts\" setup>\nimport { ref, reactive, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox, type FormRules } from 'element-plus'\nimport { couponCreateAPI, getCouponByIdAPI, couponUpdateByIdAPI } from '@/apis/coupon'\nimport { getProductListAPI } from '@/apis/product'\nimport { getProductCategoryListWithChildrenAPI } from '@/apis/productCate'\nimport { useRoute, useRouter } from 'vue-router'\nimport type { CouponSelectProductOptionVo, SmsCouponExt } from '@/types/coupon'\nimport { couponPlatforms, couponTypes } from '@/utils/constant'\nimport type { ElCascaderDataVo } from '@/types/common'\n\n// 获取路由\nconst route = useRoute()\nconst router = useRouter()\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认优惠券，添加时使用\nconst defaultCoupon: SmsCouponExt = {\n  type: 0,\n  name: '',\n  platform: 0,\n  amount: 0,\n  perLimit: 1,\n  useType: 0,\n  productRelationList: [],\n  productCategoryRelationList: []\n}\n// 当前操作的优惠券对象\nconst coupon = ref(Object.assign({}, defaultCoupon))\n// 选择使用类型为指定分类时的商品分类信息\nconst productCateOptions = ref<ElCascaderDataVo[]>([])\n// 优惠券类型为指定分类时所选商品分类ID([父级,子级])\nconst selectProductCate = ref<number[]>([])\n// 获取分类列表\nconst getProductCateList = async () => {\n  try {\n    const res = await getProductCategoryListWithChildrenAPI()\n    const list = res.data\n    productCateOptions.value = list.map(item => ({\n      label: item.name,\n      value: item.id!,\n      children: item.children?.map(it => ({ label: it.name, value: it.id! }))\n    }))\n  } catch (error) {\n    console.error('获取商品分类列表失败:', error)\n  }\n}\n\n// 初始化数据\nonMounted(async () => {\n  if (props.isEdit) {\n    const response = await getCouponByIdAPI(Number(route.query.id))\n    coupon.value = response.data\n  }\n  await getProductCateList()\n})\n\n// 优惠券类型为指定商品时表格数据加载状态\nconst selectProductLoading = ref(false)\n// 优惠券类型为指定商品时表格中提供的商品列表选项\nconst selectProductOptions = ref<CouponSelectProductOptionVo[]>([])\n// 优惠券类型为指定商品时当前选中的关联商品ID\nconst selectProduct = ref<number>()\n\n\n// 表单引用\nconst couponFrom = ref()\n// 表单验证规则\nconst rules = reactive<FormRules>({\n  name: [\n    { required: true, message: '请输入优惠券名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  publishCount: [\n    { type: 'number', required: true, message: '只能输入正整数', trigger: 'blur' }\n  ],\n  amount: [\n    { type: 'number', required: true, message: '面值只能是数值，0.01-10000，限2位小数', trigger: 'blur' }\n  ],\n  minPoint: [\n    { type: 'number', required: true, message: '只能输入正整数', trigger: 'blur' }\n  ]\n})\n\n// 提交表单\nconst onSubmit = async () => {\n  if (!couponFrom.value) return\n  const isValid = await couponFrom.value.validate().catch(() => false)\n  if (isValid) {\n    await ElMessageBox.confirm('是否提交数据', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (props.isEdit) {\n      try {\n        await couponUpdateByIdAPI(Number(route.query.id), coupon.value)\n        couponFrom.value.resetFields()\n        ElMessage({\n          message: '修改成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      } catch (error) {\n        console.error('更新优惠券失败:', error)\n      }\n    } else {\n      try {\n        await couponCreateAPI(coupon.value)\n        couponFrom.value.resetFields()\n        ElMessage({\n          message: '提交成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      } catch (error) {\n        console.error('创建优惠券失败:', error)\n      }\n    }\n  } else {\n    ElMessage({\n      message: '验证失败',\n      type: 'error',\n      duration: 1000\n    })\n  }\n}\n\n// 重置表单\nconst resetForm = () => {\n  if (couponFrom.value) {\n    couponFrom.value.resetFields()\n  }\n  coupon.value = Object.assign({}, defaultCoupon)\n}\n\n// 搜索商品方法\nconst searchProductMethod = async (query: string) => {\n  if (query) {\n    selectProductLoading.value = true\n    try {\n      const res = await getProductListAPI({ pageNum: 1, pageSize: 10, keyword: query })\n      selectProductLoading.value = false\n      const productList = res.data.list\n      selectProductOptions.value = productList.map(item => ({\n        productId: item.id,\n        productName: item.name,\n        productSn: item.productSn\n      }))\n    } catch (error) {\n      selectProductLoading.value = false\n      console.error('搜索商品失败:', error)\n    }\n  } else {\n    selectProductOptions.value = []\n  }\n}\n\n// 添加商品关联\nconst handleAddProductRelation = () => {\n  if (!selectProduct.value) {\n    ElMessage({\n      message: '请先选择商品',\n      type: 'warning'\n    })\n    return\n  }\n  coupon.value.productRelationList!.push(getProductById(selectProduct.value)!)\n  selectProduct.value = undefined\n}\n\n// 删除商品关联\nconst handleDeleteProductRelation = (index: number) => {\n  coupon.value.productRelationList!.splice(index, 1)\n}\n\n// 添加商品分类关联\nconst handleAddProductCategoryRelation = () => {\n  if (selectProductCate.value.length <= 0) {\n    ElMessage({\n      message: '请先选择商品分类',\n      type: 'warning'\n    })\n    return\n  }\n  coupon.value.productCategoryRelationList!.push(getProductCateByIds(selectProductCate.value))\n  selectProductCate.value = []\n}\n\n// 删除商品分类关联\nconst handleDeleteProductCateRelation = (index: number) => {\n  coupon.value.productCategoryRelationList!.splice(index, 1)\n}\n\n// 根据ID获取关联商品\nconst getProductById = (id: number) => {\n  return selectProductOptions.value.find(item => item.productId === id)\n}\n\n// 根据IDs获取商品分类\nconst getProductCateByIds = (ids: number[]) => {\n  const findParentCate = productCateOptions.value.find(item => item.value === ids[0])\n  const findCate = findParentCate?.children?.find(item => item.value === ids[1])\n  return { productCategoryId: ids[1], productCategoryName: findCate?.label, parentCategoryName: findParentCate?.label }\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form :model=\"coupon\" :rules=\"rules\" ref=\"couponFrom\" label-width=\"150px\">\n      <el-form-item label=\"优惠券类型：\">\n        <el-select v-model=\"coupon.type\">\n          <el-option v-for=\"type in couponTypes\" :key=\"type.value\" :label=\"type.label\" :value=\"type.value\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"优惠券名称：\" prop=\"name\">\n        <el-input v-model=\"coupon.name\" class=\"input-width\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"适用平台：\">\n        <el-select v-model=\"coupon.platform\">\n          <el-option v-for=\"item in couponPlatforms\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"总发行量：\" prop=\"publishCount\">\n        <el-input v-model.number=\"coupon.publishCount\" placeholder=\"只能输入正整数\" class=\"input-width\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"面额：\" prop=\"amount\">\n        <el-input v-model.number=\"coupon.amount\" placeholder=\"面值只能是数值，限2位小数\" class=\"input-width\">\n          <template #append>元</template>\n        </el-input>\n      </el-form-item>\n      <el-form-item label=\"每人限领：\">\n        <el-input v-model=\"coupon.perLimit\" placeholder=\"只能输入正整数\" class=\"input-width\">\n          <template #append>张</template>\n        </el-input>\n      </el-form-item>\n      <el-form-item label=\"使用门槛：\" prop=\"minPoint\">\n        <el-input v-model.number=\"coupon.minPoint\" placeholder=\"只能输入正整数\" class=\"input-width\">\n          <template #prepend>满</template>\n          <template #append>元可用</template>\n        </el-input>\n      </el-form-item>\n      <el-form-item label=\"领取日期：\" prop=\"enableTime\">\n        <el-date-picker type=\"date\" placeholder=\"选择日期\" v-model=\"coupon.enableTime\" class=\"input-width\"></el-date-picker>\n      </el-form-item>\n      <el-form-item label=\"有效期：\">\n        <el-date-picker type=\"date\" placeholder=\"选择日期\" v-model=\"coupon.startTime\" style=\"width: 150px\"></el-date-picker>\n        <span style=\"margin-left: 20px;margin-right: 20px\">至</span>\n        <el-date-picker type=\"date\" placeholder=\"选择日期\" v-model=\"coupon.endTime\" style=\"width: 150px\"></el-date-picker>\n      </el-form-item>\n      <el-form-item label=\"可使用商品：\">\n        <el-radio-group v-model=\"coupon.useType\">\n          <el-radio-button :label=\"0\">全场通用</el-radio-button>\n          <el-radio-button :label=\"1\">指定分类</el-radio-button>\n          <el-radio-button :label=\"2\">指定商品</el-radio-button>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item v-show=\"coupon.useType === 1\">\n        <el-cascader clearable placeholder=\"请选择分类名称\" v-model=\"selectProductCate\" :options=\"productCateOptions\">\n        </el-cascader>\n        <el-button @click=\"handleAddProductCategoryRelation()\">添加</el-button>\n        <el-table ref=\"productCateRelationTable\" :data=\"coupon.productCategoryRelationList\"\n          style=\"width: 100%;margin-top: 20px\" border>\n          <el-table-column label=\"分类名称\" align=\"center\">\n            <template #default=\"scope\">{{ scope.row.parentCategoryName }}>{{ scope.row.productCategoryName }}</template>\n          </el-table-column>\n          <el-table-column label=\"操作\" align=\"center\" width=\"100\">\n            <template #default=\"scope\">\n              <el-button size=\"small\" type=\"primary\" link @click=\"handleDeleteProductCateRelation(scope.$index)\">删除\n              </el-button>\n            </template>\n          </el-table-column>\n        </el-table>\n      </el-form-item>\n      <el-form-item v-show=\"coupon.useType === 2\">\n        <el-select v-model=\"selectProduct\" filterable remote reserve-keyword placeholder=\"商品名称/商品货号\"\n          :remote-method=\"searchProductMethod\" :loading=\"selectProductLoading\" style=\"width: 300px;\">\n          <el-option v-for=\"item in selectProductOptions\" :key=\"item.productId\" :label=\"item.productName\"\n            :value=\"item.productId!\">\n            <template #default>\n              <span style=\"float: left\">{{ item.productName }}</span>\n              <span style=\"float: right; color: #8492a6; font-size: 13px\">NO.{{ item.productSn }}</span>\n            </template>\n          </el-option>\n        </el-select>\n        <el-button @click=\"handleAddProductRelation()\">添加</el-button>\n        <el-table ref=\"productRelationTable\" :data=\"coupon.productRelationList\" style=\"width: 100%;margin-top: 20px\"\n          border>\n          <el-table-column label=\"商品名称\" align=\"center\">\n            <template #default=\"scope\">{{ scope.row.productName }}</template>\n          </el-table-column>\n          <el-table-column label=\"货号\" align=\"center\" width=\"120\">\n            <template #default=\"scope\">NO.{{ scope.row.productSn }}</template>\n          </el-table-column>\n          <el-table-column label=\"操作\" align=\"center\" width=\"100\">\n            <template #default=\"scope\">\n              <el-button size=\"small\" type=\"primary\" link @click=\"handleDeleteProductRelation(scope.$index)\">删除\n              </el-button>\n            </template>\n          </el-table-column>\n        </el-table>\n      </el-form-item>\n      <el-form-item label=\"备注：\">\n        <el-input class=\"input-width\" type=\"textarea\" :rows=\"5\" placeholder=\"请输入内容\" v-model=\"coupon.note\">\n        </el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"onSubmit()\">提交</el-button>\n        <el-button v-if=\"!isEdit\" @click=\"resetForm()\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped>\n.input-width {\n  width: 60%;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/coupon/history.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { formatDate, formatDateTime } from '@/utils/datetime'\nimport { Search } from '@element-plus/icons-vue'\nimport { getCouponByIdAPI, getCouponHistoryListAPI } from '@/apis/coupon'\nimport type { CouponHistoryQueryParam, SmsCoupon, SmsCouponHistory } from '@/types/coupon'\nimport { couponTypes } from '@/utils/constant'\nimport { useRoute } from 'vue-router'\n\n// 获取路由\nconst route = useRoute()\n// 优惠券详情\nconst coupon = ref<SmsCoupon>({} as SmsCoupon)\n// 优惠券历史列表查询参数\nconst listQuery = ref<CouponHistoryQueryParam>({\n  pageNum: 1,\n  pageSize: 10,\n})\n// 优惠券历史列表数据\nconst list = ref<SmsCouponHistory[]>([])\n// 总记录数\nconst total = ref(0)\n// 表格数据加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getCouponHistoryListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取优惠券历史列表失败:', error)\n  }\n}\n\n// 使用状态选项\nconst useTypeOptions = ref([\n  { label: \"未使用\", value: 0 },\n  { label: \"已使用\", value: 1 },\n  { label: \"已过期\", value: 2 }\n])\n\n// 页面加载完成后获取数据\nonMounted(async () => {\n  // 获取优惠券详情\n  const couponRes = await getCouponByIdAPI(Number(route.query.id))\n  coupon.value = couponRes.data\n  // 设置优惠券ID用于查询历史记录\n  listQuery.value.couponId = Number(route.query.id)\n  getList()\n})\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value = {\n    pageNum: 1,\n    pageSize: 10,\n    couponId: Number(route.query.id)\n  }\n}\n\n// 搜索列表\nconst handleSearchList = async () => {\n  listQuery.value.pageNum = 1\n  await getList()\n}\n\n// 每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 优惠券类型过滤器\nconst formatType = (type: number) => {\n  const found = couponTypes.find(option => option.value === type)\n  return found ? found.label : ''\n}\n\n// 优惠券使用类型过滤器\nconst formatUseType = (useType: number) => {\n  if (useType === 0) {\n    return '全场通用'\n  } else if (useType === 1) {\n    return '指定分类'\n  } else {\n    return '指定商品'\n  }\n}\n\n// 优惠券过期状态过滤器\nconst formatStatus = (endTime: string | number | Date) => {\n  if (!endTime) return ''\n  const endTimeDate = new Date(endTime).getTime()\n  const now = new Date().getTime()\n  return endTimeDate > now ? '未过期' : '已过期'\n}\n\n// 获取类型过滤器\nconst formatGetType = (type: number) => {\n  if (type === 1) {\n    return '主动获取'\n  } else {\n    return '后台赠送'\n  }\n}\n\n// 优惠券历史使用类型过滤器\nconst formatCouponHistoryUseType = (useType: number) => {\n  if (useType === 0) {\n    return '未使用'\n  } else if (useType === 1) {\n    return '已使用'\n  } else {\n    return '已过期'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <div class=\"table-layout\">\n      <el-row>\n        <el-col :span=\"4\" class=\"table-cell-title\">名称</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">优惠券类型</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">可使用商品</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">使用门槛</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">面值</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">状态</el-col>\n      </el-row>\n      <el-row>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.name }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ formatType(coupon.type) }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ formatUseType(coupon.useType) }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">满{{ coupon.minPoint }}元可用</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.amount }}元</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ formatStatus(coupon.endTime!) }}</el-col>\n      </el-row>\n      <el-row>\n        <el-col :span=\"4\" class=\"table-cell-title\">有效期</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">总发行量</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">已领取</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">待领取</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">已使用</el-col>\n        <el-col :span=\"4\" class=\"table-cell-title\">未使用</el-col>\n      </el-row>\n      <el-row>\n        <el-col :span=\"4\" class=\"table-cell\" style=\"font-size: 13px\">\n          {{ formatDate(coupon.startTime!) }}至{{ formatDate(coupon.endTime!) }}\n        </el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.publishCount }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.receiveCount }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.publishCount! - coupon.receiveCount! }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.useCount }}</el-col>\n        <el-col :span=\"4\" class=\"table-cell\">{{ coupon.publishCount! - coupon.useCount! }}</el-col>\n      </el-row>\n    </div>\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"使用状态：\">\n            <el-select v-model=\"listQuery.useStatus\" placeholder=\"全部\" clearable style=\"width: 150px;\">\n              <el-option v-for=\"item in useTypeOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n          <el-form-item label=\"订单编号：\">\n            <el-input v-model=\"listQuery.orderSn\" class=\"input-width\" placeholder=\"订单编号\"></el-input>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"couponHistoryTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"优惠码\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.couponCode }}</template>\n        </el-table-column>\n        <el-table-column label=\"领取会员\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.memberNickname }}</template>\n        </el-table-column>\n        <el-table-column label=\"领取方式\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ formatGetType(scope.row.getType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"领取时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"当前状态\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ formatCouponHistoryUseType(scope.row.useStatus) }}</template>\n        </el-table-column>\n        <el-table-column label=\"使用时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.useTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"订单编号\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.orderSn === null ? 'N/A' : scope.row.orderSn }}</template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.app-container {\n  width: 80%;\n  margin: 20px auto;\n}\n\n.filter-container {\n  margin-top: 20px;\n}\n\n.table-layout {\n  margin-top: 20px;\n  border-left: 1px solid #DCDFE6;\n  border-top: 1px solid #DCDFE6;\n}\n\n.table-cell {\n  height: 60px;\n  line-height: 40px;\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n  padding: 10px;\n  font-size: 14px;\n  color: #606266;\n  text-align: center;\n  overflow: hidden;\n}\n\n.table-cell-title {\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n  padding: 10px;\n  background: #F2F6FC;\n  text-align: center;\n  font-size: 14px;\n  color: #303133;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/coupon/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getCouponListAPI, couponDeleteByIdAPI } from '@/apis/coupon'\nimport { formatDate } from '@/utils/datetime'\nimport type { CouponQueryParam, SmsCoupon } from '@/types/coupon'\nimport { couponPlatforms, couponTypes } from '@/utils/constant'\n\n// 获取路由\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<CouponQueryParam>({ pageNum: 1, pageSize: 10 })\n// 类型选项\nconst typeOptions = ref(couponTypes)\n// 列表数据\nconst list = ref<SmsCoupon[]>([])\n// 总数\nconst total = ref<number>(0)\n// 加载状态\nconst listLoading = ref<boolean>(false)\n// 多选数据\nconst multipleSelection = ref<SmsCoupon[]>([])\n\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getCouponListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取优惠券列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n})\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理多选变化\nconst handleSelectionChange = (val: SmsCoupon[]) => {\n  multipleSelection.value = val\n}\n\n// 处理页面大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 添加优惠券\nconst handleAdd = () => {\n  router.push({ path: '/sms/addCoupon' })\n}\n\n// 查看优惠券\nconst handleView = (index: number, row: SmsCoupon) => {\n  router.push({ path: '/sms/couponHistory', query: { id: row.id } })\n}\n\n// 更新优惠券\nconst handleUpdate = (index: number, row: SmsCoupon) => {\n  router.push({ path: '/sms/updateCoupon', query: { id: row.id } })\n}\n\n// 删除优惠券\nconst handleDelete = async (index: number, row: SmsCoupon) => {\n  try {\n    await ElMessageBox.confirm('是否进行删除操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await couponDeleteByIdAPI(row.id!)\n    ElMessage({\n      type: 'success',\n      message: '删除成功!'\n    })\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除优惠券失败:', error)\n    }\n  }\n}\n\n// 格式化类型\nconst formatType = (type: number) => {\n  const findItem = typeOptions.value.find(item => item.value === type)\n  return findItem?.label\n}\n\n// 格式化使用类型\nconst formatUseType = (useType: number) => {\n  if (useType === 0) {\n    return '全场通用'\n  } else if (useType === 1) {\n    return '指定分类'\n  } else {\n    return '指定商品'\n  }\n}\n\n// 格式化平台\nconst formatPlatform = (platform: number) => {\n  const findItem = couponPlatforms.find(item => item.value === platform)\n  return findItem?.label\n}\n\n// 格式化状态\nconst formatStatus = (endTime: string) => {\n  const now = new Date().getTime()\n  const endDate = new Date(endTime)\n  if (endDate.getTime() > now) {\n    return '未过期'\n  } else {\n    return '已过期'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"优惠券名称：\">\n            <el-input v-model=\"listQuery.name\" class=\"input-width\" placeholder=\"优惠券名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"优惠券类型：\">\n            <el-select v-model=\"listQuery.type\" placeholder=\"全部\" clearable class=\"input-width\">\n              <el-option v-for=\"item in typeOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"couponTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"优惠劵名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"优惠券类型\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ formatType(scope.row.type) }}</template>\n        </el-table-column>\n        <el-table-column label=\"可使用商品\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ formatUseType(scope.row.useType) }}</template>\n        </el-table-column>\n        <el-table-column label=\"使用门槛\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">满{{ scope.row.minPoint }}元可用</template>\n        </el-table-column>\n        <el-table-column label=\"面值\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.amount }}元</template>\n        </el-table-column>\n        <el-table-column label=\"适用平台\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ formatPlatform(scope.row.platform) }}</template>\n        </el-table-column>\n        <el-table-column label=\"有效期\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">{{ formatDate(scope.row.startTime) }}至{{ formatDate(scope.row.endTime)\n          }}</template>\n        </el-table-column>\n        <el-table-column label=\"状态\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ formatStatus(scope.row.endTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleView(scope.$index, scope.row)\">查看</el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">\n              编辑</el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除</el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.input-width {\n  width: 203px;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/coupon/update.vue",
    "content": "<script lang=\"ts\" setup>\nimport CouponDetail from './components/CouponDetail.vue'\n</script>\n<template>\n  <coupon-detail :isEdit=\"true\"></coupon-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/sms/flash/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getFlashListAPI, flashUpdateStatusByIdAPI, flashDeleteByIdAPI, flashCreateAPI, flashUpdateByIdAPI } from '@/apis/flash'\nimport { formatDate } from '@/utils/datetime'\nimport type { SmsFlashPromotion } from '@/types/flash'\nimport type { PageParam } from '@/types/common'\n\n// 获取路由\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10,\n  keyword: ''\n})\n// 列表数据\nconst list = ref<SmsFlashPromotion[]>([])\n// 总条数\nconst total = ref<number>(0)\n// 加载张图\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getFlashListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取秒杀活动列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n})\n\n// 默认秒杀活动对象\nconst defaultSmsFlashPromotion: SmsFlashPromotion = {\n  title: '',\n  status: 0\n}\n// 当前操作的秒杀活动对象\nconst flashPromotion = ref(Object.assign({}, defaultSmsFlashPromotion))\n// 编辑框是否可见\nconst dialogVisible = ref(false)\n// 是否为编辑状态\nconst isEdit = ref(false)\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 0, pageSize: 10 }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 每页大小改变\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页改变\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 添加活动\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  flashPromotion.value = Object.assign({}, defaultSmsFlashPromotion)\n}\n\n// 显示时间段列表\nconst handleShowSessionList = () => {\n  router.push({ path: '/sms/flashSession' })\n}\n\n// 状态改变\nconst handleStatusChange = async (index: number, row: SmsFlashPromotion) => {\n  try {\n    await ElMessageBox.confirm('是否要修改该状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashUpdateStatusByIdAPI(row.id!, { status: row.status })\n    ElMessage.success('修改成功!')\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('更新状态失败:', error)\n    }\n    ElMessage.info('取消修改')\n    getList()\n  }\n}\n\n// 删除活动\nconst handleDelete = async (index: number, row: SmsFlashPromotion) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该活动?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除活动失败:', error)\n    }\n  }\n}\n\n// 更新活动\nconst handleUpdate = (index: number, row: SmsFlashPromotion) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  flashPromotion.value = Object.assign({}, row)\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  await ElMessageBox.confirm('是否要确认?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  try {\n    if (isEdit.value) {\n      await flashUpdateByIdAPI(flashPromotion.value.id!, flashPromotion.value)\n      ElMessage.success('修改成功！')\n      dialogVisible.value = false\n      getList()\n    } else {\n      await flashCreateAPI(flashPromotion.value)\n      ElMessage.success('添加成功！')\n      dialogVisible.value = false\n      getList()\n    }\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('处理活动失败:', error)\n    }\n  }\n}\n\n// 选择时间段\nconst handleSelectSession = (index: number, row: SmsFlashPromotion) => {\n  router.push({ path: '/sms/selectSession', query: { flashPromotionId: row.id } })\n}\n\n// 格式化活动状态\nconst formatActiveStatus = (row: SmsFlashPromotion) => {\n  const nowDate = new Date()\n  const startDate = new Date(row.startDate!)\n  const endDate = new Date(row.endDate!)\n  if (nowDate.getTime() >= startDate.getTime() && nowDate.getTime() <= endDate.getTime()) {\n    return '活动进行中'\n  } else if (nowDate.getTime() > endDate.getTime()) {\n    return '活动已结束'\n  } else {\n    return '活动未开始'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"活动名称：\">\n            <el-input v-model=\"listQuery.keyword\" class=\"input-width\" placeholder=\"活动名称\" clearable></el-input>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\" style=\"margin-left: 20px\">添加活动</el-button>\n      <el-button class=\"btn-add\" @click=\"handleShowSessionList()\">秒杀时间段列表</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"flashTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"活动标题\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.title }}</template>\n        </el-table-column>\n        <el-table-column label=\"活动状态\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ formatActiveStatus(scope.row) }}</template>\n        </el-table-column>\n        <el-table-column label=\"开始时间\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ formatDate(scope.row.startDate) }}</template>\n        </el-table-column>\n        <el-table-column label=\"结束时间\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">{{ formatDate(scope.row.endDate) }}</template>\n        </el-table-column>\n        <el-table-column label=\"上线/下线\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.status\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleSelectSession(scope.$index, scope.row)\">设置商品\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">\n              编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"添加活动\" v-model=\"dialogVisible\" width=\"40%\">\n      <el-form :model=\"flashPromotion\" ref=\"SmsFlashPromotionForm\" label-width=\"150px\">\n        <el-form-item label=\"活动标题：\">\n          <el-input v-model=\"flashPromotion.title\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"开始时间：\">\n          <el-date-picker v-model=\"flashPromotion.startDate\" type=\"date\" placeholder=\"请选择时间\">\n          </el-date-picker>\n        </el-form-item>\n        <el-form-item label=\"结束时间：\">\n          <el-date-picker v-model=\"flashPromotion.endDate\" type=\"date\" placeholder=\"请选择时间\">\n          </el-date-picker>\n        </el-form-item>\n        <el-form-item label=\"上线/下线\">\n          <el-radio-group v-model=\"flashPromotion.status\">\n            <el-radio :label=\"1\">上线</el-radio>\n            <el-radio :label=\"0\">下线</el-radio>\n          </el-radio-group>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/sms/flash/productRelationList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getFlashProductRelationListAPI, flashProductRelationCreateAPI, flashProductRelationDeleteByIdAPI, flashProductRelationUpdateByIdAPI } from '@/apis/flashProductRelation'\nimport { getProductListAPI } from '@/apis/product'\nimport type { FlashProductQueryParam, SmsFlashPromotionProductRelation } from '@/types/flash'\nimport type { PmsProduct, ProductQueryParam } from '@/types/product'\n\n// 获取路由\nconst route = useRoute()\n\n// 秒杀商品关系列表数据\nconst listQuery = ref<FlashProductQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 秒杀商品列数据\nconst list = ref<SmsFlashPromotionProductRelation[]>([])\n// 总条数\nconst total = ref<number>(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getFlashProductRelationListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取秒杀商品列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  listQuery.value.flashPromotionId = Number(route.query.flashPromotionId)\n  listQuery.value.flashPromotionSessionId = Number(route.query.flashPromotionSessionId)\n  getList()\n})\n\n// 秒杀商品关系编辑框可见性\nconst editDialogVisible = ref(false)\n// 当前操作的秒杀商品关系\nconst flashProductRelation = ref<SmsFlashPromotionProductRelation>()\n\n// 对话框数据\nconst dialogData = ref<{\n  list: PmsProduct[]\n  total: number\n  multipleSelection: PmsProduct[]\n  listQuery: ProductQueryParam\n}>({\n  list: [],\n  total: 0,\n  multipleSelection: [],\n  listQuery: {\n    keyword: '',\n    pageNum: 1,\n    pageSize: 5\n  }\n})\n// 选择商品对话框可见性\nconst selectDialogVisible = ref(false)\n\n// 每页大小改变\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页改变\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 选择商品\nconst handleSelectProduct = () => {\n  selectDialogVisible.value = true\n  getDialogList()\n}\n\n// 更新秒杀商品\nconst handleUpdate = (index: number, row: SmsFlashPromotionProductRelation) => {\n  editDialogVisible.value = true\n  flashProductRelation.value = Object.assign({}, row)\n}\n\n// 删除秒杀商品\nconst handleDelete = async (index: number, row: SmsFlashPromotionProductRelation) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该商品?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashProductRelationDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除秒杀商品失败:', error)\n    }\n  }\n}\n\n// 选择搜索\nconst handleSelectSearch = () => {\n  getDialogList()\n}\n\n// 对话框每页大小改变\nconst handleDialogSizeChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = 1\n  dialogData.value.listQuery.pageSize = val\n  getDialogList()\n}\n\n// 对话框当前页改变\nconst handleDialogCurrentChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = val\n  getDialogList()\n}\n\n// 对话框选中项改变\nconst handleDialogSelectionChange = (val: PmsProduct[]) => {\n  dialogData.value.multipleSelection = val\n}\n\n// 选择对话框确认\nconst handleSelectDialogConfirm = async () => {\n  if (dialogData.value.multipleSelection.length < 1) {\n    ElMessage.warning('请选择一条记录')\n    return\n  }\n  const selectProducts = dialogData.value.multipleSelection.map(item => {\n    return {\n      productId: item.id!,\n      flashPromotionId: listQuery.value.flashPromotionId!,\n      flashPromotionSessionId: listQuery.value.flashPromotionSessionId!\n    }\n  })\n  try {\n    await ElMessageBox.confirm('使用要进行添加操作?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashProductRelationCreateAPI(selectProducts)\n    selectDialogVisible.value = false\n    dialogData.value.multipleSelection = []\n    getList()\n    ElMessage.success('添加成功!')\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('添加秒杀商品失败:', error)\n    }\n  }\n}\n\n// 编辑对话框确认\nconst handleEditDialogConfirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要确认?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashProductRelationUpdateByIdAPI(flashProductRelation.value!.id!, flashProductRelation.value!)\n    ElMessage.success('修改成功！')\n    editDialogVisible.value = false\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('更新秒杀商品失败:', error)\n    }\n  }\n}\n\n// 获取对话框商品列表数据\nconst getDialogList = async () => {\n  try {\n    const res = await getProductListAPI(dialogData.value.listQuery)\n    dialogData.value.list = res.data.list\n    dialogData.value.total = res.data.total\n  } catch (error) {\n    console.error('获取商品列表失败:', error)\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <i class=\"el-icon-tickets\"></i>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleSelectProduct()\" style=\"margin-left: 20px\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"productRelationTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.product.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"货号\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">NO.{{ scope.row.product.productSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品价格\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">￥{{ scope.row.product.price }}</template>\n        </el-table-column>\n        <el-table-column label=\"剩余数量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.product.stock }}</template>\n        </el-table-column>\n        <el-table-column label=\"秒杀价格\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <p v-if=\"scope.row.flashPromotionPrice !== null\">\n              ￥{{ scope.row.flashPromotionPrice }}\n            </p>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"秒杀数量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.flashPromotionCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"限购数量\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.flashPromotionLimit }}</template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog title=\"选择商品\" v-model=\"selectDialogVisible\" width=\"50%\">\n      <el-input v-model=\"dialogData.listQuery.keyword\" style=\"width: 250px;margin-bottom: 20px\" size=\"small\"\n        placeholder=\"商品名称搜索\">\n        <template #append>\n          <el-button icon=\"el-icon-search\" @click=\"handleSelectSearch()\"></el-button>\n        </template>\n      </el-input>\n      <el-table :data=\"dialogData.list\" @selection-change=\"handleDialogSelectionChange\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"货号\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">NO.{{ scope.row.productSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"价格\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">￥{{ scope.row.price }}</template>\n        </el-table-column>\n      </el-table>\n      <div class=\"pagination-container\">\n        <el-pagination background @size-change=\"handleDialogSizeChange\" @current-change=\"handleDialogCurrentChange\"\n          layout=\"prev, pager, next\" v-model:current-page=\"dialogData.listQuery.pageNum\"\n          :page-size=\"dialogData.listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"dialogData.total\">\n        </el-pagination>\n      </div>\n      <div style=\"clear: both;\"></div>\n      <template #footer>\n        <div>\n          <el-button size=\"small\" @click=\"selectDialogVisible = false\">取 消</el-button>\n          <el-button size=\"small\" type=\"primary\" @click=\"handleSelectDialogConfirm()\">确 定</el-button>\n        </div>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"编辑秒杀商品信息\" v-model=\"editDialogVisible\" width=\"40%\">\n      <el-form :model=\"flashProductRelation\" ref=\"flashProductRelationForm\" label-width=\"150px\"\n        v-if=\"flashProductRelation?.product\">\n        <el-form-item label=\"商品名称：\">\n          <span>{{ flashProductRelation.product.name }}</span>\n        </el-form-item>\n        <el-form-item label=\"货号：\">\n          <span>NO.{{ flashProductRelation.product.productSn }}</span>\n        </el-form-item>\n        <el-form-item label=\"商品价格：\">\n          <span>￥{{ flashProductRelation.product.price }}</span>\n        </el-form-item>\n        <el-form-item label=\"秒杀价格：\">\n          <el-input v-model=\"flashProductRelation.flashPromotionPrice\" class=\"input-width\">\n            <template #prepend>￥</template>\n          </el-input>\n        </el-form-item>\n        <el-form-item label=\"剩余数量：\">\n          <span>{{ flashProductRelation.product.stock }}</span>\n        </el-form-item>\n        <el-form-item label=\"秒杀数量：\">\n          <el-input v-model=\"flashProductRelation.flashPromotionCount\" class=\"input-width\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"限购数量：\">\n          <el-input v-model=\"flashProductRelation.flashPromotionLimit\" class=\"input-width\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"flashProductRelation.sort\" class=\"input-width\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"editDialogVisible = false\" size=\"small\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleEditDialogConfirm()\" size=\"small\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n.operate-container {\n  margin-top: 0;\n}\n\n.input-width {\n  width: 200px;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/flash/selectSessionList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { getFlashSessionSelectListAPI } from '@/apis/flashSession'\nimport type { SmsFlashPromotionSession } from '@/types/flash'\nimport { formatTime } from '@/utils/datetime'\n\n// 获取路由\nconst router = useRouter()\nconst route = useRoute()\n\n// 秒杀时间段列表\nconst list = ref<SmsFlashPromotionSession[]>([])\n// 加载状态\nconst listLoading = ref(false)\n\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getFlashSessionSelectListAPI({ flashPromotionId: Number(route.query.flashPromotionId) })\n    listLoading.value = false\n    list.value = res.data\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取秒杀时间段列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n})\n\n// 显示关联商品\nconst handleShowRelation = (index: number, row: SmsFlashPromotionSession) => {\n  router.push({\n    path: '/sms/flashProductRelation',\n    query: {\n      flashPromotionId: route.query.flashPromotionId,\n      flashPromotionSessionId: row.id\n    }\n  })\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card shadow=\"never\" class=\"operate-container\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"selectSessionTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"秒杀时间段名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"每日开始时间\" align=\"center\">\n          <template #default=\"scope\">{{ formatTime(scope.row.startTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"每日结束时间\" align=\"center\">\n          <template #default=\"scope\">{{ formatTime(scope.row.endTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品数量\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleShowRelation(scope.$index, scope.row)\">商品列表\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.operate-container {\n  margin-top: 0;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/flash/sessionList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { getFlashSessionListAPI, flashSessionUpdateStatusByIdAPI, flashSessionDeleteByIdAPI, flashSessionCreateAPI, flashSessionUpdateByIdAPI } from '@/apis/flashSession'\nimport type { SmsFlashPromotionSession } from '@/types/flash'\nimport { formatTime } from '@/utils/datetime'\n\n// 秒杀时间段列表数据\nconst list = ref<SmsFlashPromotionSession[]>([])\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getFlashSessionListAPI()\n    listLoading.value = false\n    list.value = res.data\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取秒杀时间段列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n})\n\n// 默认秒杀场次对象\nconst defaultFlashSession: SmsFlashPromotionSession = {\n  name: '',\n  status: 0\n}\n// 当前操作的秒杀场次\nconst flashSession = ref(Object.assign({}, defaultFlashSession))\n// 编辑框显示状态\nconst dialogVisible = ref(false)\n// 是否为编辑模式\nconst isEdit = ref(false)\n\n// 添加时间段\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  flashSession.value = Object.assign({}, defaultFlashSession)\n}\n\n// 状态改变\nconst handleStatusChange = async (index: number, row: SmsFlashPromotionSession) => {\n  try {\n    await ElMessageBox.confirm('是否要修改该状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashSessionUpdateStatusByIdAPI(row.id!, { status: row.status })\n    ElMessage.success('修改成功!')\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('更新状态失败:', error)\n    }\n    ElMessage.info('取消修改')\n    getList()\n  }\n}\n\n// 更新时间段\nconst handleUpdate = (index: number, row: SmsFlashPromotionSession) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  flashSession.value = Object.assign({}, row)\n  if (row.startTime) {\n    flashSession.value.startTime = row.startTime\n  }\n  if (row.endTime) {\n    flashSession.value.endTime = row.endTime\n  }\n}\n\n// 删除时间段\nconst handleDelete = async (index: number, row: SmsFlashPromotionSession) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该时间段?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await flashSessionDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除时间段失败:', error)\n    }\n  }\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要确认?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (isEdit.value) {\n      await flashSessionUpdateByIdAPI(flashSession.value.id!, flashSession.value)\n      ElMessage.success('修改成功！')\n      dialogVisible.value = false\n      getList()\n    } else {\n      await flashSessionCreateAPI(flashSession.value)\n      ElMessage.success('添加成功！')\n      dialogVisible.value = false\n      getList()\n    }\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('处理时间段失败:', error)\n    }\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card shadow=\"never\" class=\"operate-container\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"flashSessionTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"秒杀时间段名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"每日开始时间\" align=\"center\">\n          <template #default=\"scope\">{{ formatTime(scope.row.startTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"每日结束时间\" align=\"center\">\n          <template #default=\"scope\">{{ formatTime(scope.row.endTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"启用\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.status\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <el-dialog title=\"添加时间段\" v-model=\"dialogVisible\" width=\"40%\">\n      <el-form :model=\"flashSession\" ref=\"flashSessionForm\" label-width=\"150px\">\n        <el-form-item label=\"秒杀时间段名称：\">\n          <el-input v-model=\"flashSession.name\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"每日开始时间：\">\n          <el-time-picker v-model=\"flashSession.startTime\" placeholder=\"请选择时间\">\n          </el-time-picker>\n        </el-form-item>\n        <el-form-item label=\"每日结束时间：\">\n          <el-time-picker v-model=\"flashSession.endTime\" placeholder=\"请选择时间\">\n          </el-time-picker>\n        </el-form-item>\n        <el-form-item label=\"是否启用\">\n          <el-radio-group v-model=\"flashSession.status\">\n            <el-radio :label=\"1\">启用</el-radio>\n            <el-radio :label=\"0\">不启用</el-radio>\n          </el-radio-group>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n.operate-container {\n  margin-top: 0;\n}\n</style>\n"
  },
  {
    "path": "src/views/sms/hot/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getHomeRecommendProductListAPI, homeRecommendProductUpdateRecommendStatusAPI, homeRecommendProductDeleteByIdsAPI, homeRecommendProductCreateAPI, homeRecommendProductUpdateSortByIdAPI } from '@/apis/recommendProduct'\nimport { getProductListAPI } from '@/apis/product'\nimport type { RecommendProductQueryParam, SmsHomeRecommendProduct } from '@/types/recommendProduct'\nimport type { PmsProduct } from '@/types/product'\n\n// 列表查询参数\nconst listQuery = ref<RecommendProductQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 查询条件中的选中状态\nconst recommendOptions = ref([\n  {\n    label: '未推荐',\n    value: 0\n  },\n  {\n    label: '推荐中',\n    value: 1\n  }\n])\n// 新品列表数据\nconst list = ref<SmsHomeRecommendProduct[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true;\n  const res = await getHomeRecommendProductListAPI(listQuery.value)\n  listLoading.value = false;\n  list.value = res.data.list;\n  total.value = res.data.total;\n};\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 选择商品对话框中的数据\nconst dialogData = ref({\n  list: [] as PmsProduct[],\n  total: 0,\n  multipleSelection: [] as PmsProduct[],\n  listQuery: {\n    keyword: '',\n    pageNum: 1,\n    pageSize: 5\n  }\n})\n// 选择商品对话框可见性\nconst selectDialogVisible = ref(false)\n\n// 批量操作多选记录\nconst multipleSelection = ref<SmsHomeRecommendProduct[]>([])\n// 批量操作枚举\nconst operates = ref([\n  {\n    label: \"设为推荐\",\n    value: 0\n  },\n  {\n    label: \"取消推荐\",\n    value: 1\n  },\n  {\n    label: \"删除\",\n    value: 2\n  }\n])\n// 批量操作类型\nconst operateType = ref()\n\n// 设置排序对话框可见性\nconst sortDialogVisible = ref(false)\n// 设置排序对话框数据\nconst sortDialogData = ref({ sort: 0, id: 0 })\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n};\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理表格选择变化\nconst handleSelectionChange = (val: SmsHomeRecommendProduct[]) => {\n  multipleSelection.value = val\n}\n\n// 处理分页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理推荐状态变化\nconst handleRecommendStatusStatusChange = (index: number, row: SmsHomeRecommendProduct) => {\n  updateRecommendStatusStatus([row.id!], row.recommendStatus!)\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: SmsHomeRecommendProduct) => {\n  deleteNewProduct([row.id!])\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  const ids = multipleSelection.value.map(item => item.id!)\n  if (operateType.value === 0) {\n    //设为推荐\n    await updateRecommendStatusStatus(ids, 1)\n  } else if (operateType.value === 1) {\n    //取消推荐\n    await updateRecommendStatusStatus(ids, 0)\n  } else if (operateType.value === 2) {\n    //删除\n    await deleteNewProduct(ids)\n  } else {\n    ElMessage.warning({\n      message: '请选择批量操作类型',\n      duration: 1000\n    })\n  }\n}\n\n// 处理选择商品\nconst handleSelectProduct = () => {\n  selectDialogVisible.value = true;\n  getDialogList()\n}\n\n// 处理选择搜索\nconst handleSelectSearch = () => {\n  getDialogList();\n};\n\n// 处理对话框分页大小变化\nconst handleDialogSizeChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = 1\n  dialogData.value.listQuery.pageSize = val\n  getDialogList()\n};\n\n// 处理对话框当前页变化\nconst handleDialogCurrentChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = val\n  getDialogList()\n};\n\n// 处理对话框选择变化\nconst handleDialogSelectionChange = (val: PmsProduct[]) => {\n  dialogData.value.multipleSelection = val\n}\n\n// 处理选择对话框确认\nconst handleSelectDialogConfirm = async () => {\n  if (dialogData.value.multipleSelection.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  await ElMessageBox.confirm('使用要进行添加操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  const selectProducts = dialogData.value.multipleSelection.map(item => ({ productId: item.id!, productName: item.name }))\n  await homeRecommendProductCreateAPI(selectProducts)\n  selectDialogVisible.value = false\n  dialogData.value.multipleSelection = []\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '添加成功!'\n  })\n}\n\n// 处理编辑排序\nconst handleEditSort = (index: number, row: SmsHomeRecommendProduct) => {\n  sortDialogVisible.value = true\n  sortDialogData.value.sort = row.sort!\n  sortDialogData.value.id = row.id!\n};\n\n// 处理更新排序\nconst handleUpdateSort = async () => {\n  try {\n    await ElMessageBox.confirm('是否要修改排序?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeRecommendProductUpdateSortByIdAPI(sortDialogData.value);\n    sortDialogVisible.value = false\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    ElMessage.info('已取消操作')\n  }\n}\n\n// 更新推荐状态\nconst updateRecommendStatusStatus = async (ids: number[], status: number) => {\n  try {\n    await ElMessageBox.confirm('是否要修改推荐状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeRecommendProductUpdateRecommendStatusAPI({ ids: ids.join(','), recommendStatus: status })\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    getList()\n  }\n}\n\n// 删除商品\nconst deleteNewProduct = async (ids: number[]) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该推荐?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeRecommendProductDeleteByIdsAPI({ ids: ids.join(',') });\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '删除成功!'\n    })\n  } catch {\n    ElMessage.info('已取消操作')\n  }\n}\n\n// 获取对话框列表\nconst getDialogList = async () => {\n  const res = await getProductListAPI(dialogData.value.listQuery)\n  dialogData.value.list = res.data.list;\n  dialogData.value.total = res.data.total;\n};\n\n// 格式化推荐状态\nconst formatRecommendStatus = (status: number) => {\n  if (status === 1) {\n    return '推荐中';\n  } else {\n    return '未推荐';\n  }\n};\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"商品名称：\">\n            <el-input v-model=\"listQuery.productName\" class=\"input-width\" placeholder=\"商品名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"推荐状态：\">\n            <el-select v-model=\"listQuery.recommendStatus\" placeholder=\"全部\" clearable class=\"input-width\"\n              style=\"width: 140px;\">\n              <el-option v-for=\"item in recommendOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleSelectProduct()\">选择商品</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"newProductTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productName }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否推荐\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleRecommendStatusStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n              :inactive-value=\"0\" v-model=\"scope.row.recommendStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"状态\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatRecommendStatus(scope.row.recommendStatus) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleEditSort(scope.$index, scope.row)\">设置排序\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog v-model=\"selectDialogVisible\" title=\"选择商品\" width=\"50%\">\n      <el-input v-model=\"dialogData.listQuery.keyword\" style=\"width: 250px;margin-bottom: 20px\" placeholder=\"商品名称搜索\">\n        <template #append>\n          <el-button :icon=\"Search\" @click=\"handleSelectSearch()\"></el-button>\n        </template>\n      </el-input>\n      <el-table :data=\"dialogData.list\" @selection-change=\"handleDialogSelectionChange\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"货号\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">NO.{{ scope.row.productSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"价格\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">￥{{ scope.row.price }}</template>\n        </el-table-column>\n      </el-table>\n      <div class=\"pagination-container\">\n        <el-pagination background @size-change=\"handleDialogSizeChange\" @current-change=\"handleDialogCurrentChange\"\n          layout=\"prev, pager, next\" v-model:current-page=\"dialogData.listQuery.pageNum\"\n          :page-size=\"dialogData.listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"dialogData.total\">\n        </el-pagination>\n      </div>\n      <div style=\"clear: both;\"></div>\n      <template #footer>\n        <div>\n          <el-button @click=\"selectDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleSelectDialogConfirm()\">确 定</el-button>\n        </div>\n      </template>\n    </el-dialog>\n    <el-dialog v-model=\"sortDialogVisible\" title=\"设置排序\" width=\"40%\">\n      <el-form :model=\"sortDialogData\" label-width=\"150px\">\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"sortDialogData.sort\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span>\n          <el-button @click=\"sortDialogVisible = false\" size=\"small\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateSort\" size=\"small\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/sms/new/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getHomeNewProductListAPI, homeNewProductUpdateRecommendStatusAPI, homeNewProductDeleteByIdsAPI, homeNewProductCreateAPI, homeNewProductUpdateSortByIdAPI } from '@/apis/newProduct';\nimport { getProductListAPI } from '@/apis/product';\nimport type { NewProductQueryParam, SmsHomeNewProduct } from '@/types/newProduct';\nimport type { PmsProduct } from '@/types/product';\n\n// 列表查询参数\nconst listQuery = ref<NewProductQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 查询条件中的选中状态\nconst recommendOptions = ref([\n  {\n    label: '未推荐',\n    value: 0\n  },\n  {\n    label: '推荐中',\n    value: 1\n  }\n])\n// 新品列表数据\nconst list = ref<SmsHomeNewProduct[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true;\n  const res = await getHomeNewProductListAPI(listQuery.value)\n  listLoading.value = false;\n  list.value = res.data.list;\n  total.value = res.data.total;\n};\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 选择商品对话框中的数据\nconst dialogData = ref({\n  list: [] as PmsProduct[],\n  total: 0,\n  multipleSelection: [] as PmsProduct[],\n  listQuery: {\n    keyword: '',\n    pageNum: 1,\n    pageSize: 5\n  }\n})\n// 选择商品对话框可见性\nconst selectDialogVisible = ref(false)\n\n// 批量操作多选记录\nconst multipleSelection = ref<SmsHomeNewProduct[]>([])\n// 批量操作枚举\nconst operates = ref([\n  {\n    label: \"设为推荐\",\n    value: 0\n  },\n  {\n    label: \"取消推荐\",\n    value: 1\n  },\n  {\n    label: \"删除\",\n    value: 2\n  }\n])\n// 批量操作类型\nconst operateType = ref()\n\n// 设置排序对话框可见性\nconst sortDialogVisible = ref(false)\n// 设置排序对话框数据\nconst sortDialogData = ref({ sort: 0, id: 0 })\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n};\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理表格选择变化\nconst handleSelectionChange = (val: SmsHomeNewProduct[]) => {\n  multipleSelection.value = val\n}\n\n// 处理分页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理推荐状态变化\nconst handleRecommendStatusStatusChange = (index: number, row: SmsHomeNewProduct) => {\n  updateRecommendStatusStatus([row.id!], row.recommendStatus!)\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: SmsHomeNewProduct) => {\n  deleteNewProduct([row.id!])\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  const ids = multipleSelection.value.map(item => item.id!)\n  if (operateType.value === 0) {\n    //设为推荐\n    await updateRecommendStatusStatus(ids, 1)\n  } else if (operateType.value === 1) {\n    //取消推荐\n    await updateRecommendStatusStatus(ids, 0)\n  } else if (operateType.value === 2) {\n    //删除\n    await deleteNewProduct(ids)\n  } else {\n    ElMessage.warning({\n      message: '请选择批量操作类型',\n      duration: 1000\n    })\n  }\n}\n\n// 处理选择商品\nconst handleSelectProduct = () => {\n  selectDialogVisible.value = true;\n  getDialogList()\n}\n\n// 处理选择搜索\nconst handleSelectSearch = () => {\n  getDialogList();\n};\n\n// 处理对话框分页大小变化\nconst handleDialogSizeChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = 1\n  dialogData.value.listQuery.pageSize = val\n  getDialogList()\n};\n\n// 处理对话框当前页变化\nconst handleDialogCurrentChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = val\n  getDialogList()\n};\n\n// 处理对话框选择变化\nconst handleDialogSelectionChange = (val: PmsProduct[]) => {\n  dialogData.value.multipleSelection = val\n}\n\n// 处理选择对话框确认\nconst handleSelectDialogConfirm = async () => {\n  if (dialogData.value.multipleSelection.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  await ElMessageBox.confirm('使用要进行添加操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  const selectProducts = dialogData.value.multipleSelection.map(item => ({ productId: item.id!, productName: item.name }))\n  await homeNewProductCreateAPI(selectProducts)\n  selectDialogVisible.value = false\n  dialogData.value.multipleSelection = []\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '添加成功!'\n  })\n}\n\n// 处理编辑排序\nconst handleEditSort = (index: number, row: SmsHomeNewProduct) => {\n  sortDialogVisible.value = true\n  sortDialogData.value.sort = row.sort!\n  sortDialogData.value.id = row.id!\n};\n\n// 处理更新排序\nconst handleUpdateSort = async () => {\n  try {\n    await ElMessageBox.confirm('是否要修改排序?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeNewProductUpdateSortByIdAPI(sortDialogData.value);\n    sortDialogVisible.value = false\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    ElMessage.info('已取消操作')\n  }\n}\n\n// 更新推荐状态\nconst updateRecommendStatusStatus = async (ids: number[], status: number) => {\n  try {\n    await ElMessageBox.confirm('是否要修改推荐状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeNewProductUpdateRecommendStatusAPI({ ids: ids.join(','), recommendStatus: status })\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    getList()\n  }\n};\n\n// 删除商品\nconst deleteNewProduct = async (ids: number[]) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该推荐?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeNewProductDeleteByIdsAPI({ ids: ids.join(',') });\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '删除成功!'\n    })\n  } catch {\n    ElMessage.info('已取消操作')\n  }\n}\n\n// 获取对话框列表\nconst getDialogList = async () => {\n  const res = await getProductListAPI(dialogData.value.listQuery)\n  dialogData.value.list = res.data.list;\n  dialogData.value.total = res.data.total;\n};\n\n// 格式化推荐状态\nconst formatRecommendStatus = (status: number) => {\n  if (status === 1) {\n    return '推荐中';\n  } else {\n    return '未推荐';\n  }\n};\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"商品名称：\">\n            <el-input v-model=\"listQuery.productName\" class=\"input-width\" placeholder=\"商品名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"推荐状态：\">\n            <el-select v-model=\"listQuery.recommendStatus\" placeholder=\"全部\" clearable class=\"input-width\"\n              style=\"width: 140px;\">\n              <el-option v-for=\"item in recommendOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleSelectProduct()\">选择商品</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"newProductTable\" :data=\"list\" style=\"width: 100%;\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.productName }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否推荐\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleRecommendStatusStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n              :inactive-value=\"0\" v-model=\"scope.row.recommendStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"状态\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatRecommendStatus(scope.row.recommendStatus) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleEditSort(scope.$index, scope.row)\">设置排序\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog v-model=\"selectDialogVisible\" title=\"选择商品\" width=\"50%\">\n      <el-input v-model=\"dialogData.listQuery.keyword\" style=\"width: 250px;margin-bottom: 20px\" placeholder=\"商品名称搜索\">\n        <template #append>\n          <el-button :icon=\"Search\" @click=\"handleSelectSearch()\"></el-button>\n        </template>\n      </el-input>\n      <el-table :data=\"dialogData.list\" @selection-change=\"handleDialogSelectionChange\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"商品名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"货号\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">NO.{{ scope.row.productSn }}</template>\n        </el-table-column>\n        <el-table-column label=\"价格\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">￥{{ scope.row.price }}</template>\n        </el-table-column>\n      </el-table>\n      <div class=\"pagination-container\">\n        <el-pagination background @size-change=\"handleDialogSizeChange\" @current-change=\"handleDialogCurrentChange\"\n          layout=\"prev, pager, next\" v-model:current-page=\"dialogData.listQuery.pageNum\"\n          :page-size=\"dialogData.listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"dialogData.total\">\n        </el-pagination>\n      </div>\n      <div style=\"clear: both;\"></div>\n      <template #footer>\n        <div>\n          <el-button @click=\"selectDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleSelectDialogConfirm()\">确 定</el-button>\n        </div>\n      </template>\n    </el-dialog>\n    <el-dialog v-model=\"sortDialogVisible\" title=\"设置排序\" width=\"40%\">\n      <el-form :model=\"sortDialogData\" label-width=\"150px\">\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"sortDialogData.sort\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span>\n          <el-button @click=\"sortDialogVisible = false\" size=\"small\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateSort\" size=\"small\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/sms/subject/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getHomeRecommendSubjectListAPI, homeRecommendSubjectUpdateRecommendStatusAPI, homeRecommendSubjectDeleteByIdsAPI, homeRecommendSubjectCreateAPI, homeRecommendSubjectUpdateSortAPI } from '@/apis/homeSubject'\nimport { getSubjectListAPI } from '@/apis/subject'\nimport { formatDateTime } from '@/utils/datetime'\nimport type { HomeSubjectQueryParam, SmsHomeRecommendSubject } from '@/types/homeSubject'\nimport type { CmsSubject } from '@/types/subject'\n\n\n// 列表查询参数\nconst listQuery = ref<HomeSubjectQueryParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 查询推荐状态\nconst recommendOptions = ref([\n  {\n    label: '未推荐',\n    value: 0\n  },\n  {\n    label: '推荐中',\n    value: 1\n  }\n])\n// 列表数据\nconst list = ref<SmsHomeRecommendSubject[]>([])\n// 总条数\nconst total = ref(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  const res = await getHomeRecommendSubjectListAPI(listQuery.value)\n  listLoading.value = false\n  list.value = res.data.list\n  total.value = res.data.total\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  getList()\n})\n\n// 批量操作选中记录\nconst multipleSelection = ref<SmsHomeRecommendSubject[]>([])\n// 批量操作\nconst operates = ref([\n  {\n    label: \"设为推荐\",\n    value: 0\n  },\n  {\n    label: \"取消推荐\",\n    value: 1\n  },\n  {\n    label: \"删除\",\n    value: 2\n  }\n])\n// 当前操作类型\nconst operateType = ref()\n\n// 选择专题对话框可见性\nconst selectDialogVisible = ref(false)\n// 选择专题对话框数据\nconst dialogData = ref({\n  list: [] as CmsSubject[],\n  total: 0,\n  multipleSelection: [] as CmsSubject[],\n  listQuery: {\n    keyword: '',\n    pageNum: 1,\n    pageSize: 5\n  }\n})\n\n// 设置排序对话框可见性\nconst sortDialogVisible = ref(false)\n// 设置排序对话框数据\nconst sortDialogData = ref({ sort: 0, id: 0 })\n\n// 重置搜索\nconst handleResetSearch = () => {\n  listQuery.value = { pageNum: 1, pageSize: 10 }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 处理表格选择变化\nconst handleSelectionChange = (val: SmsHomeRecommendSubject[]) => {\n  multipleSelection.value = val\n}\n\n// 处理分页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理推荐状态变化\nconst handleRecommendStatusStatusChange = (index: number, row: SmsHomeRecommendSubject) => {\n  updateRecommendStatusStatus([row.id!], row.recommendStatus!)\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: SmsHomeRecommendSubject) => {\n  deleteSubject([row.id!])\n}\n\n// 处理批量操作\nconst handleBatchOperate = async () => {\n  if (multipleSelection.value.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  const ids: number[] = multipleSelection.value.map(item => item.id!)\n  if (operateType.value === 0) {\n    //设为推荐\n    await updateRecommendStatusStatus(ids, 1)\n  } else if (operateType.value === 1) {\n    //取消推荐\n    await updateRecommendStatusStatus(ids, 0)\n  } else if (operateType.value === 2) {\n    //删除\n    await deleteSubject(ids)\n  } else {\n    ElMessage.warning({\n      message: '请选择批量操作类型',\n      duration: 1000\n    })\n  }\n}\n\n// 处理选择专题\nconst handleSelectSubject = () => {\n  selectDialogVisible.value = true\n  dialogData.value.listQuery.keyword = ''\n  getDialogList()\n}\n\n// 处理选择搜索\nconst handleSelectSearch = () => {\n  getDialogList()\n}\n\n// 处理对话框分页大小变化\nconst handleDialogSizeChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = 1\n  dialogData.value.listQuery.pageSize = val\n  getDialogList()\n}\n\n// 处理对话框当前页变化\nconst handleDialogCurrentChange = (val: number) => {\n  dialogData.value.listQuery.pageNum = val\n  getDialogList()\n}\n\n// 处理对话框选择变化\nconst handleDialogSelectionChange = (val: CmsSubject[]) => {\n  dialogData.value.multipleSelection = val\n}\n\n// 处理选择对话框确认\nconst handleSelectDialogConfirm = async () => {\n  if (dialogData.value.multipleSelection.length < 1) {\n    ElMessage.warning({\n      message: '请选择一条记录',\n      duration: 1000\n    })\n    return\n  }\n  await ElMessageBox.confirm('使用要进行添加操作?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  const selectSubjects = dialogData.value.multipleSelection.map(item => ({\n    subjectId: item.id!,\n    subjectName: item.title!\n  }))\n  await homeRecommendSubjectCreateAPI(selectSubjects)\n  selectDialogVisible.value = false\n  dialogData.value.multipleSelection = []\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '添加成功!'\n  })\n}\n\n// 处理编辑排序\nconst handleEditSort = (index: number, row: SmsHomeRecommendSubject) => {\n  sortDialogVisible.value = true\n  sortDialogData.value.sort = row.sort!\n  sortDialogData.value.id = row.id!\n}\n\n// 处理更新排序\nconst handleUpdateSort = async () => {\n  await ElMessageBox.confirm('是否要修改排序?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await homeRecommendSubjectUpdateSortAPI(sortDialogData.value)\n  sortDialogVisible.value = false\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '修改成功!'\n  })\n}\n\n// 更新推荐状态\nconst updateRecommendStatusStatus = async (ids: number[], status: number) => {\n  try {\n    await ElMessageBox.confirm('是否要修改推荐状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await homeRecommendSubjectUpdateRecommendStatusAPI({ ids: ids.join(','), recommendStatus: status })\n    getList()\n    ElMessage.success({\n      type: 'success',\n      message: '修改成功!'\n    })\n  } catch {\n    getList()\n  }\n}\n\n// 删除专题\nconst deleteSubject = async (ids: number[]) => {\n  await ElMessageBox.confirm('是否要删除该推荐?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await homeRecommendSubjectDeleteByIdsAPI({ ids: ids.join(',') })\n  getList()\n  ElMessage.success({\n    type: 'success',\n    message: '删除成功!'\n  })\n}\n\n// 获取对话框列表\nconst getDialogList = async () => {\n  const res = await getSubjectListAPI(dialogData.value.listQuery)\n  dialogData.value.list = res.data.list\n  dialogData.value.total = res.data.total\n}\n\n// 格式化推荐状态\nconst formatRecommendStatus = (status: number) => {\n  if (status === 1) {\n    return '推荐中'\n  } else {\n    return '未推荐'\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"专题名称：\">\n            <el-input v-model=\"listQuery.subjectName\" class=\"input-width\" placeholder=\"专题名称\"></el-input>\n          </el-form-item>\n          <el-form-item label=\"推荐状态：\">\n            <el-select v-model=\"listQuery.recommendStatus\" placeholder=\"全部\" clearable class=\"input-width\"\n              style=\"width: 140px;\">\n              <el-option v-for=\"item in recommendOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleSelectSubject()\">选择专题</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"newSubjectTable\" :data=\"list\" style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n        v-loading=\"listLoading\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"编号\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"专题名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.subjectName }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否推荐\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleRecommendStatusStatusChange(scope.$index, scope.row)\" :active-value=\"1\"\n              :inactive-value=\"0\" v-model=\"scope.row.recommendStatus\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"状态\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatRecommendStatus(scope.row.recommendStatus) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleEditSort(scope.$index, scope.row)\">设置排序\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"batch-operate-container\">\n      <el-select v-model=\"operateType\" placeholder=\"批量操作\">\n        <el-option v-for=\"item in operates\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n        </el-option>\n      </el-select>\n      <el-button style=\"margin-left: 20px\" class=\"search-button\" @click=\"handleBatchOperate()\" type=\"primary\">\n        确定\n      </el-button>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog v-model=\"selectDialogVisible\" title=\"选择专题\" width=\"50%\">\n      <el-input v-model=\"dialogData.listQuery.keyword\" style=\"width: 250px;margin-bottom: 20px\" placeholder=\"专题名称搜索\">\n        <template #append>\n          <el-button :icon=\"Search\" @click=\"handleSelectSearch()\"></el-button>\n        </template>\n      </el-input>\n      <el-table :data=\"dialogData.list\" @selection-change=\"handleDialogSelectionChange\" border>\n        <el-table-column type=\"selection\" width=\"60\" align=\"center\"></el-table-column>\n        <el-table-column label=\"专题名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.title }}</template>\n        </el-table-column>\n        <el-table-column label=\"所属分类\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.categoryName }}</template>\n        </el-table-column>\n        <el-table-column label=\"添加时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n      </el-table>\n      <div class=\"pagination-container\">\n        <el-pagination background @size-change=\"handleDialogSizeChange\" @current-change=\"handleDialogCurrentChange\"\n          layout=\"prev, pager, next\" v-model:current-page=\"dialogData.listQuery.pageNum\"\n          :page-size=\"dialogData.listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"dialogData.total\">\n        </el-pagination>\n      </div>\n      <div style=\"clear: both\"></div>\n      <template #footer>\n        <div>\n          <el-button @click=\"selectDialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleSelectDialogConfirm()\">确 定</el-button>\n        </div>\n      </template>\n    </el-dialog>\n    <el-dialog v-model=\"sortDialogVisible\" title=\"设置排序\" width=\"40%\">\n      <el-form :model=\"sortDialogData\" label-width=\"150px\">\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"sortDialogData.sort\" style=\"width: 200px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span>\n          <el-button @click=\"sortDialogVisible = false\" size=\"small\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleUpdateSort\" size=\"small\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/test/axios/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { getAdminInfoAPI, adminLoginAPI } from '@/apis/admin';\nimport { ref } from 'vue'\n\ndefineOptions({\n  name: 'TestAxios'\n})\n\nconst loginData = ref()\nconst infoData = ref()\n\nconst onLogin = async () => {\n  const res = await adminLoginAPI({\n    username: 'test',\n    password: '123456'\n  })\n  loginData.value = res.data\n}\n\nconst getInfo = async () => {\n  const res = await getAdminInfoAPI()\n  infoData.value = res.data\n}\n\n</script>\n\n<template>\n  <button @click=\"onLogin\">登陆</button>\n  <div>\n    接口返回结果：{{ loginData }}\n  </div>\n  <button @click=\"getInfo\">获取用户信息</button>\n  <div>\n    接口返回结果：{{ infoData }}\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/test/element/index.vue",
    "content": "<script lang=\"ts\" setup>\n\ndefineOptions({\n  name: 'TestElement'\n})\n</script>\n\n<template>\n  <el-button type=\"primary\">i am button</el-button>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/test/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport TestPinia from '@/views/test/pinia/index.vue'\nimport TestElement from '@/views/test/element/index.vue'\nimport TestAxios from '@/views/test/axios/index.vue'\n</script>\n\n<template>\n  <div class=\"vertical-layout\">\n    <h1>组件测试页面</h1>\n    <!-- pinia组件测试 -->\n    <div>\n      <TestPinia></TestPinia>\n    </div>\n    <!-- element-plus组件测试 -->\n    <div>\n      <TestElement></TestElement>\n    </div>\n    <!-- axiso调用接测试 -->\n    <div>\n      <TestAxios></TestAxios>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.vertical-layout {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  padding: 20px;\n}\n</style>\n"
  },
  {
    "path": "src/views/test/pinia/index.vue",
    "content": "<script lang=\"ts\" setup>\n\ndefineOptions({\n  name: 'TestPinia'\n})\n\n// 1. 导入use方法\nimport { useCounterStore } from '@/stores/counter'\n// 2. 执行方法得到store store里有数据和方法\nconst counterStore = useCounterStore()\n</script>\n\n<template>\n  <button @click=\"counterStore.increment\">\n    {{ counterStore.count }}\n  </button>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/test/vrouter/category/index.vue",
    "content": "<script lang=\"ts\" setup>\n\ndefineOptions({\n  name: 'RouterCategory'\n})\n</script>\n\n<template>\n  <div>\n    我是Category页面\n  </div>\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/test/vrouter/home/index.vue",
    "content": "<script lang=\"ts\" setup>\ndefineOptions({\n  name: 'RouterHome'\n})\n</script>\n\n<template>\n  <div>\n    我是Home页面\n  </div>\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/test/vrouter/layout/components/LayoutFooter.vue",
    "content": "<script lang=\"ts\" setup>\n\ndefineOptions({\n  name: 'RouterLayoutFooter'\n})\n</script>\n\n<template>\n  <div>\n    我是RouterLayoutFooter部分\n  </div>\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/test/vrouter/layout/components/LayoutHeader.vue",
    "content": "<script lang=\"ts\" setup>\ndefineOptions({\n  name: 'RouterLayoutHeader'\n})\n</script>\n\n<template>\n  <nav>\n    <RouterLink to=\"/\">Go to Home</RouterLink>\n    <span />\n    <RouterLink to=\"/category\">Go to Category</RouterLink>\n  </nav>\n  <div>\n    我是RouterLayoutHeader部分\n  </div>\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/test/vrouter/layout/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport RouterLayoutHeader from './components/LayoutHeader.vue'\nimport RouterLayoutFooter from './components/LayoutFooter.vue'\n\ndefineOptions({\n  name: 'RouterLayout'\n})\n</script>\n\n<template>\n  <RouterLayoutHeader />\n  <RouterView />\n  <RouterLayoutFooter />\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/test/vrouter/login/index.vue",
    "content": "<script lang=\"ts\" setup>\n\ndefineOptions({\n  name: 'RouterLogin'\n})\n</script>\n\n<template>\n  <div>\n    我是Login页面\n  </div>\n</template>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "src/views/ums/admin/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { dayjs, ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getAdminListAPI, adminRegisterAPI, adminUpdateByIdAPI, adminUpdateStatusByIdAPI, adminDeleteByIdAPI, getRoleByAdminIdAPI, adminRoleUpdateAPI } from '@/apis/admin.ts'\nimport { getRoleListAllAPI } from '@/apis/role.ts'\nimport type { UmsAdmin } from '@/types/admin'\nimport type { PageParam } from '@/types/common'\nimport type { UmsRole } from '@/types/role'\n\n// 列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10,\n  keyword: ''\n})\n// 管理员列表数据\nconst list = ref<UmsAdmin[]>([])\n// 所有角色列表\nconst allRoleList = ref<UmsRole[]>([])\n// 表格加载状态\nconst listLoading = ref(true)\n// 分页总数\nconst total = ref(0)\n// 获取管理员列表\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getAdminListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取管理员列表失败:', error)\n  }\n}\n// 获取所有角色列表\nconst getAllRoleList = async () => {\n  try {\n    const response = await getRoleListAllAPI()\n    allRoleList.value = response.data\n  } catch (error) {\n    console.error('获取角色列表失败:', error)\n  }\n}\n\n// 组件挂载后初始化数据\nonMounted(() => {\n  getList()\n  getAllRoleList()\n})\n\n// 当前操作的管理员\nconst admin = ref<UmsAdmin>({\n  username: '',\n  password: '',\n  status: 1\n})\n// 管理员编辑对话框是否可见\nconst dialogVisible = ref(false)\n// 是否编辑状态\nconst isEdit = ref(false)\n\n// 分配角色对话框是否可见\nconst allocDialogVisible = ref(false)\n// 当前正在分配角色的管理员ID\nconst allocAdminId = ref<number>()\n// 当前管理员已分配的角色ID\nconst allocRoleIds = ref<number[]>([])\n\n// 根据管理员ID获取角色列表\nconst getRoleListByAdmin = async (adminId: number) => {\n  try {\n    const res = await getRoleByAdminIdAPI(adminId)\n    const allocRoleList = res.data\n    allocRoleIds.value = []\n    allocRoleList.forEach((item) => allocRoleIds.value.push(item.id!))\n  } catch (error) {\n    console.error('获取管理员角色列表失败:', error)\n  }\n}\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value.pageNum = 1\n  listQuery.value.keyword = ''\n}\n\n// 处理搜索\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 每页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理添加管理员\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  admin.value = {\n    username: '',\n    password: '',\n    status: 1\n  }\n}\n\n// 处理状态变化\nconst handleStatusChange = async (index: number, row: UmsAdmin) => {\n  try {\n    await ElMessageBox.confirm('是否要修改该状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await adminUpdateStatusByIdAPI(row.id!, { status: row.status })\n    ElMessage.success('修改成功!')\n  } catch (error) {\n    console.error('更新状态失败:', error)\n    // 如果取消或失败，重新获取列表以恢复状态\n    getList()\n  }\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: UmsAdmin) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该用户?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await adminDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    console.error('删除失败:', error)\n  }\n}\n\n// 处理更新\nconst handleUpdate = (index: number, row: UmsAdmin) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  // 深拷贝row对象，避免直接修改原始数据\n  admin.value = Object.assign({}, row)\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要确认?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (isEdit.value) {\n      await adminUpdateByIdAPI(admin.value.id!, admin.value)\n      ElMessage.success('修改成功！')\n    } else {\n      await adminRegisterAPI(admin.value)\n      ElMessage.success('添加成功！')\n    }\n    dialogVisible.value = false\n    getList()\n  } catch (error) {\n    console.error('操作失败:', error)\n  }\n}\n\n// 处理分配角色对话框确认\nconst handleAllocDialogConfirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要确认?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await adminRoleUpdateAPI({ adminId: allocAdminId.value!, roleIds: allocRoleIds.value.join(',') })\n    ElMessage.success('分配成功！')\n    allocDialogVisible.value = false\n  } catch (error) {\n    console.error('分配角色失败:', error)\n  }\n}\n\n// 处理选择角色\nconst handleSelectRole = (index: number, row: UmsAdmin) => {\n  allocAdminId.value = row.id!\n  allocDialogVisible.value = true\n  getRoleListByAdmin(allocAdminId.value)\n}\n\n// 日期格式化过滤器函数\nconst formatDateTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD HH:mm:ss')\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float: right\" @click=\"handleSearchList()\" type=\"primary\" size=\"default\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float: right; margin-right: 15px\" @click=\"handleResetSearch()\" size=\"default\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" size=\"default\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input v-model=\"listQuery.keyword\" class=\"input-width\" placeholder=\"帐号/姓名\" clearable></el-input>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"adminTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"帐号\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.username }}</template>\n        </el-table-column>\n        <el-table-column label=\"姓名\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.nickName }}</template>\n        </el-table-column>\n        <el-table-column label=\"邮箱\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.email }}</template>\n        </el-table-column>\n        <el-table-column label=\"添加时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"最后登录\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.loginTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否启用\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.status\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleSelectRole(scope.$index, scope.row)\">分配角色\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">\n              编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog v-model=\"dialogVisible\" :title=\"isEdit ? '编辑用户' : '添加用户'\" width=\"40%\">\n      <el-form :model=\"admin\" label-width=\"150px\" size=\"default\">\n        <el-form-item label=\"帐号：\">\n          <el-input v-model=\"admin.username\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"姓名：\">\n          <el-input v-model=\"admin.nickName\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"邮箱：\">\n          <el-input v-model=\"admin.email\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"密码：\" v-if=\"!isEdit\">\n          <el-input v-model=\"admin.password\" type=\"password\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"备注：\">\n          <el-input v-model=\"admin.note\" type=\"textarea\" :rows=\"5\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"是否启用：\">\n          <el-radio-group v-model=\"admin.status\">\n            <el-radio :label=\"1\">是</el-radio>\n            <el-radio :label=\"0\">否</el-radio>\n          </el-radio-group>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\" size=\"default\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\" size=\"default\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n    <el-dialog title=\"分配角色\" v-model=\"allocDialogVisible\" width=\"30%\">\n      <el-select v-model=\"allocRoleIds\" multiple placeholder=\"请选择\" size=\"default\" style=\"width: 80%\">\n        <el-option v-for=\"item in allRoleList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id!\">\n        </el-option>\n      </el-select>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"allocDialogVisible = false\" size=\"default\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleAllocDialogConfirm()\" size=\"default\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/menu/add.vue",
    "content": "<script setup lang=\"ts\">\nimport MenuDetail from './components/MenuDetail.vue'\n</script>\n\n<template>\n  <menu-detail :is-edit='false'></menu-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/menu/components/MenuDetail.vue",
    "content": "<script lang=\"ts\" setup>\nimport { ref, reactive, onMounted } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus'\nimport { getMenuListByParentIdAPI, menuCreateAPI, updateMenu, getMenuByIdAPI } from '@/apis/menu.ts'\nimport type { UmsMenu } from '@/types/menu'\n\n// 获取路由对象\nconst route = useRoute()\nconst router = useRouter()\n\n// 定义属性\nconst props = defineProps({\n  isEdit: {\n    type: Boolean,\n    default: false\n  }\n})\n\n// 默认菜单对象\nconst defaultMenu: UmsMenu = {\n  title: '',\n  parentId: 0,\n  name: '',\n  icon: '',\n  hidden: 0,\n  sort: 0\n}\n\n// 菜单数据\nconst menu = ref(Object.assign({}, defaultMenu))\n// 选择菜单列表\nconst selectMenuList = ref<UmsMenu[]>([])\n// 菜单表单组件引用\nconst menuFromRef = ref<FormInstance>()\n// 菜单表单校验规则\nconst rules = reactive<FormRules>({\n  title: [\n    { required: true, message: '请输入菜单名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  name: [\n    { required: true, message: '请输入前端名称', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ],\n  icon: [\n    { required: true, message: '请输入前端图标', trigger: 'blur' },\n    { min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur' }\n  ]\n})\n\n// 获取选择菜单列表\nconst getSelectMenuList = async () => {\n  const res = await getMenuListByParentIdAPI(0, { pageSize: 100, pageNum: 1 })\n  selectMenuList.value = res.data.list\n  const noParentMenu = { ...defaultMenu }\n  noParentMenu.id = 0\n  noParentMenu.title = '无上级菜单'\n  selectMenuList.value.unshift(noParentMenu)\n}\n\n// 组件挂载时加载数据\nonMounted(async () => {\n  if (props.isEdit) {\n    const res = await getMenuByIdAPI(Number(route.query.id))\n    menu.value = res.data\n  } else {\n    menu.value = Object.assign({}, defaultMenu)\n  }\n  getSelectMenuList()\n})\n\n// 处理菜单表单提交\nconst onSubmit = () => {\n  menuFromRef.value!.validate(async (valid) => {\n    if (valid) {\n      await ElMessageBox.confirm('是否提交数据', '提示', {\n        confirmButtonText: '确定',\n        cancelButtonText: '取消',\n        type: 'warning'\n      })\n      if (props.isEdit) {\n        await updateMenu(Number(route.query.id), menu.value)\n        menuFromRef.value!.resetFields()\n        ElMessage({\n          message: '修改成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      } else {\n        await menuCreateAPI(menu.value)\n        menuFromRef.value!.resetFields()\n        resetForm()\n        ElMessage({\n          message: '提交成功',\n          type: 'success',\n          duration: 1000\n        })\n        router.back()\n      }\n    } else {\n      ElMessage({\n        message: '验证失败',\n        type: 'error',\n        duration: 1000\n      })\n    }\n  })\n}\n\n// 处理菜单表单重置\nconst resetForm = () => {\n  menuFromRef.value!.resetFields()\n  menu.value = Object.assign({}, defaultMenu)\n  getSelectMenuList()\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-form :model=\"menu\" :rules=\"rules\" ref=\"menuFromRef\" label-width=\"150px\">\n      <el-form-item label=\"菜单名称：\" prop=\"title\">\n        <el-input v-model=\"menu.title\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"上级菜单：\">\n        <el-select v-model=\"menu.parentId\" placeholder=\"请选择菜单\">\n          <el-option v-for=\"item in selectMenuList\" :key=\"item.id\" :label=\"item.title\" :value=\"item.id!\">\n          </el-option>\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"前端名称：\" prop=\"name\">\n        <el-input v-model=\"menu.name\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"前端图标：\" prop=\"icon\">\n        <el-input v-model=\"menu.icon\" style=\"width: 80%\"></el-input>\n        <svg-icon style=\"margin-left: 8px\" :icon-class=\"menu.icon\"></svg-icon>\n      </el-form-item>\n      <el-form-item label=\"是否显示：\">\n        <el-radio-group v-model=\"menu.hidden\">\n          <el-radio :label=\"0\">是</el-radio>\n          <el-radio :label=\"1\">否</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item label=\"排序：\">\n        <el-input v-model=\"menu.sort\"></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"onSubmit()\">提交</el-button>\n        <el-button v-if=\"!props.isEdit\" @click=\"resetForm()\">重置</el-button>\n      </el-form-item>\n    </el-form>\n  </el-card>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/menu/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, watch } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { getMenuListByParentIdAPI, deleteMenuByIdAPI, menuUpdateHiddenByIdAPI } from '@/apis/menu.ts'\nimport type { UmsMenu } from '@/types/menu'\nimport type { PageParam } from '@/types/common'\n\n// 获取路由对象\nconst router = useRouter()\nconst route = useRoute()\n\n// 菜单列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10\n})\n// 菜单列表数据\nconst list = ref<UmsMenu[]>([])\n// 父级菜单ID\nconst parentId = ref(0)\n// 分页总数\nconst total = ref<number>()\n// 表格加载状态\nconst listLoading = ref(true)\n// 重置父ID\nconst resetParentId = () => {\n  listQuery.value.pageNum = 1\n  if (route.query.parentId) {\n    parentId.value = Number(route.query.parentId)\n  } else {\n    parentId.value = 0\n  }\n}\n// 获取菜单列表\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getMenuListByParentIdAPI(parentId.value, listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取菜单列表失败:', error)\n  }\n}\n\n// 组件挂载后执行\nonMounted(() => {\n  resetParentId()\n  getList()\n})\n\n// 处理添加菜单\nconst handleAddMenu = () => {\n  router.push('/ums/addMenu')\n}\n\n// 处理每页条数变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 处理当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理隐藏状态变化\nconst handleHiddenChange = async (index: number, row: UmsMenu) => {\n  await menuUpdateHiddenByIdAPI(row.id!, { hidden: row.hidden })\n  ElMessage({\n    message: '修改成功',\n    type: 'success',\n    duration: 1000\n  })\n}\n\n// 处理显示下级\nconst handleShowNextLevel = (index: number, row: UmsMenu) => {\n  router.push({ path: '/ums/menu', query: { parentId: row.id } })\n}\n\n// 处理更新\nconst handleUpdate = (index: number, row: UmsMenu) => {\n  router.push({ path: '/ums/updateMenu', query: { id: row.id } })\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: UmsMenu) => {\n  await ElMessageBox.confirm('是否要删除该菜单', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n  })\n  try {\n    await deleteMenuByIdAPI(row.id!)\n    ElMessage({\n      message: '删除成功',\n      type: 'success',\n      duration: 1000\n    })\n    getList()\n  } catch (error) {\n    console.error('删除菜单失败:', error)\n  }\n}\n\n// 监听路由变化\nwatch(() => route, () => {\n  resetParentId()\n  getList()\n}, { deep: true })\n\n// 级别过滤器\nconst levelFilter = (value: number) => {\n  if (value === 0) {\n    return '一级'\n  } else if (value === 1) {\n    return '二级'\n  }\n  return ''\n}\n\n// 禁用下级过滤器\nconst disableNextLevel = (value: number) => {\n  if (value === 0) {\n    return false\n  } else {\n    return true\n  }\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAddMenu()\">\n        添加\n      </el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"menuTable\" style=\"width: 100%\" :data=\"list\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"菜单名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.title }}</template>\n        </el-table-column>\n        <el-table-column label=\"菜单级数\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ levelFilter(scope.row.level) }}</template>\n        </el-table-column>\n        <el-table-column label=\"前端名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"前端图标\" width=\"100\" align=\"center\">\n          <template #default=\"scope\"><svg-icon :icon-class=\"scope.row.icon\"></svg-icon></template>\n        </el-table-column>\n        <el-table-column label=\"是否显示\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleHiddenChange(scope.$index, scope.row)\" :active-value=\"0\" :inactive-value=\"1\"\n              v-model=\"scope.row.hidden\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"排序\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"设置\" width=\"120\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button type=\"primary\" size=\"small\" link :disabled=\"disableNextLevel(scope.row.level)\"\n              @click=\"handleShowNextLevel(scope.$index, scope.row)\">查看下级\n            </el-button>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"200\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" :page-size=\"listQuery.pageSize\" :page-sizes=\"[10, 15, 20]\"\n        v-model:current-page=\"listQuery.pageNum\" :total=\"total\">\n      </el-pagination>\n    </div>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/menu/update.vue",
    "content": "<script setup lang=\"ts\">\nimport MenuDetail from './components/MenuDetail.vue'\n</script>\n\n<template>\n  <menu-detail :is-edit='true'></menu-detail>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/resource/categoryList.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { dayjs, ElMessage, ElMessageBox } from 'element-plus'\nimport { Tickets } from '@element-plus/icons-vue'\nimport { resourceCategoryListAllAPI, resourceCategoryCreateAPI, resourceCategoryUpdateAPI, resourceCategoryDeleteByIdAPI } from '@/apis/resourceCategory'\nimport type { UmsResourceCategory } from '@/types/resource'\n\n// 资源分类列表数据\nconst list = ref<UmsResourceCategory[]>([])\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await resourceCategoryListAllAPI()\n    listLoading.value = false\n    list.value = res.data\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取资源分类列表失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n})\n\n// 默认资源分类对象\nconst defaultResourceCategory: UmsResourceCategory = {\n  name: '',\n  sort: 0\n}\n// 当前操作的资源分类\nconst resourceCategory = ref(Object.assign({}, defaultResourceCategory))\n// 编辑框是否可见\nconst dialogVisible = ref(false)\n// 编辑状态\nconst isEdit = ref(false)\n\n// 添加资源分类\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  resourceCategory.value = Object.assign({}, defaultResourceCategory)\n}\n\n// 更新资源分类\nconst handleUpdate = (index: number, row: UmsResourceCategory) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  resourceCategory.value = Object.assign({}, row)\n}\n\n// 删除资源分类\nconst handleDelete = async (index: number, row: UmsResourceCategory) => {\n  await ElMessageBox.confirm('是否要删除该分类?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n  })\n  try {\n    await resourceCategoryDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    console.error('删除资源分类失败:', error)\n  }\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  await ElMessageBox.confirm('是否要确认?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n  })\n  if (isEdit.value) {\n    try {\n      await resourceCategoryUpdateAPI(resourceCategory.value.id!, resourceCategory.value)\n      ElMessage.success('修改成功！')\n      dialogVisible.value = false\n      getList()\n    } catch (error) {\n      console.error('更新资源分类失败:', error)\n    }\n  } else {\n    try {\n      await resourceCategoryCreateAPI(resourceCategory.value)\n      ElMessage.success('添加成功！')\n      dialogVisible.value = false\n      getList()\n    } catch (error) {\n      console.error('创建资源分类失败:', error)\n    }\n  }\n\n}\n\n// 日期格式化过滤器函数\nconst formatDateTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD HH:mm:ss')\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card shadow=\"never\" class=\"operate-container\">\n      <el-icon class=\"el-icon-middle\">\n        <tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"resourceCategoryTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"创建时间\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"排序\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.sort }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"180\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <el-dialog title=\"添加分类\" v-model=\"dialogVisible\" width=\"40%\">\n      <el-form :model=\"resourceCategory\" ref=\"resourceCategoryForm\" label-width=\"150px\" size=\"small\">\n        <el-form-item label=\"名称：\">\n          <el-input v-model=\"resourceCategory.name\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"排序：\">\n          <el-input v-model=\"resourceCategory.sort\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/ums/resource/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { dayjs, ElMessage, ElMessageBox } from 'element-plus'\nimport { getResourceListAPI, resourceCreateAPI, resourceUpdateAPI, resourceDeleteByIdAPI } from '@/apis/resource'\nimport { resourceCategoryListAllAPI } from '@/apis/resourceCategory'\nimport type { ResourceQueryParam, UmsResource } from '@/types/resource'\n\n// 获取路由信息\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<ResourceQueryParam>({\n  pageNum: 1,\n  pageSize: 10,\n})\n// 资源列表数据\nconst list = ref<UmsResource[]>([])\n// 分页总数\nconst total = ref<number>(0)\n// 加载状态\nconst listLoading = ref(false)\n// 获取列表数据\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const res = await getResourceListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = res.data.list\n    total.value = res.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取资源列表失败:', error)\n  }\n}\n\n// 分类筛选选项\nconst categoryOptions = ref<{ label: string; value: number }[]>([])\n// 默认选择分类ID\nconst defaultCategoryId = ref<number>()\n// 获取分类列表\nconst getCateList = async () => {\n  try {\n    const res = await resourceCategoryListAllAPI()\n    const cateList = res.data\n    cateList.forEach(item => {\n      categoryOptions.value.push({ label: item.name, value: item.id! })\n    })\n    if (cateList && cateList.length > 0) {\n      defaultCategoryId.value = cateList[0]!.id\n    }\n  } catch (error) {\n    console.error('获取资源分类失败:', error)\n  }\n}\n\n// 组件挂载时获取数据\nonMounted(() => {\n  getList()\n  getCateList()\n})\n\n// 默认资源对象\nconst defaultResource: UmsResource = {\n  name: '',\n  url: '',\n  description: '',\n  categoryId: 0\n}\n// 当前操作资源\nconst resource = ref(Object.assign({}, defaultResource))\n// 编辑弹框是否可见\nconst dialogVisible = ref(false)\n// 是否为编辑状态\nconst isEdit = ref(false)\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value = {\n    pageNum: 1,\n    pageSize: 10,\n  }\n}\n\n// 搜索列表\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 每页大小改变\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页改变\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 添加资源\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  resource.value = Object.assign({}, defaultResource)\n  if (defaultCategoryId.value) {\n    resource.value.categoryId = defaultCategoryId.value\n  }\n}\n\n// 删除资源\nconst handleDelete = async (index: number, row: UmsResource) => {\n  await ElMessageBox.confirm('是否要删除该资源?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n  })\n  try {\n    await resourceDeleteByIdAPI(row.id!)\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    console.error('删除资源失败:', error)\n  }\n}\n\n// 更新资源\nconst handleUpdate = (index: number, row: UmsResource) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  resource.value = Object.assign({}, row)\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  await ElMessageBox.confirm('是否要确认?', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning',\n  })\n  try {\n    if (isEdit.value) {\n      await resourceUpdateAPI(resource.value.id!, resource.value)\n      ElMessage.success('修改成功！')\n      dialogVisible.value = false\n      getList()\n    } else {\n      await resourceCreateAPI(resource.value)\n      ElMessage.success('添加成功！')\n      dialogVisible.value = false\n      getList()\n    }\n  } catch (error) {\n    console.error('操作失败:', error)\n  }\n}\n\n// 显示资源分类\nconst handleShowCategory = () => {\n  router.push({ path: '/ums/resourceCategory' })\n}\n\n// 日期格式化过滤器函数\nconst formatDateTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD HH:mm:ss')\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float:right\" type=\"primary\" @click=\"handleSearchList()\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float:right;margin-right: 15px\" @click=\"handleResetSearch()\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" label-width=\"140px\">\n          <el-form-item label=\"资源名称：\">\n            <el-input v-model=\"listQuery.nameKeyword\" class=\"input-width\" placeholder=\"资源名称\" clearable></el-input>\n          </el-form-item>\n          <el-form-item label=\"资源路径：\">\n            <el-input v-model=\"listQuery.urlKeyword\" class=\"input-width\" placeholder=\"资源路径\" clearable></el-input>\n          </el-form-item>\n          <el-form-item label=\"资源分类：\">\n            <el-select v-model=\"listQuery.categoryId\" placeholder=\"全部\" clearable class=\"input-width\"\n              style=\"width: 150px;\">\n              <el-option v-for=\"item in categoryOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n              </el-option>\n            </el-select>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <i class=\"el-icon-tickets\"></i>\n      <el-icon class=\"el-icon-middle\">\n        <tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button class=\"btn-add\" @click=\"handleAdd()\" style=\"margin-left: 20px\">添加</el-button>\n      <el-button class=\"btn-add\" @click=\"handleShowCategory()\">资源分类</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"resourceTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"资源名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"资源路径\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.url }}</template>\n        </el-table-column>\n        <el-table-column label=\"描述\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.description }}</template>\n        </el-table-column>\n        <el-table-column label=\"添加时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">\n              编辑\n            </el-button>\n            <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n            </el-button>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[10, 15, 20]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog :title=\"isEdit ? '编辑资源' : '添加资源'\" v-model=\"dialogVisible\" width=\"40%\">\n      <el-form :model=\"resource\" ref=\"resourceForm\" label-width=\"150px\">\n        <el-form-item label=\"资源名称：\">\n          <el-input v-model=\"resource.name\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"资源路径：\">\n          <el-input v-model=\"resource.url\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"资源分类：\">\n          <el-select v-model=\"resource.categoryId\" placeholder=\"全部\" clearable style=\"width: 250px\">\n            <el-option v-for=\"item in categoryOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n            </el-option>\n          </el-select>\n        </el-form-item>\n        <el-form-item label=\"描述：\">\n          <el-input v-model=\"resource.description\" type=\"textarea\" :rows=\"5\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "src/views/ums/role/allocMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { ElMessage, ElMessageBox, ElTree } from 'element-plus'\nimport { getMenuTreeListAPI } from '@/apis/menu.ts' // 修改路径为apis\nimport { roleListMenuByRoleIdAPI, roleAllocMenuAPI } from '@/apis/role' // 修改路径为apis\nimport type { TreeNodeData } from 'element-plus/es/components/tree/src/tree.type'\nimport type { UmsMenuNode } from '@/types/menu'\n\n// 获取路由参数\nconst router = useRouter()\nconst route = useRoute()\n\n// 当前角色ID\nconst roleId = ref<number>()\n// 所有菜单树形结构列表\nconst menuTreeList = ref<UmsMenuNode[]>([])\n// 创建对树组件的引用\nconst treeRef = ref<InstanceType<typeof ElTree>>()\n// 定义树组件属性\nconst defaultProps = {\n  children: 'children',\n  label: 'title'\n}\n// 获取菜单树列表\nconst treeList = async () => {\n  const res = await getMenuTreeListAPI()\n  menuTreeList.value = res.data\n}\n// 获取角色对应的菜单\nconst getRoleMenu = async () => {\n  const res = await roleListMenuByRoleIdAPI(roleId.value!)\n  const menuList = res.data\n  const checkedMenuIds = menuList.filter(item => item.parentId !== 0).map(item => item.id!)\n  treeRef.value!.setCheckedKeys(checkedMenuIds)\n}\n\n// 页面创建时执行\nonMounted(() => {\n  roleId.value = Number(route.query.roleId)\n  treeList()\n  getRoleMenu()\n})\n\n// 保存菜单分配\nconst handleSave = async () => {\n  const checkedNodes = treeRef.value!.getCheckedNodes() as TreeNodeData[]\n  const checkedMenuIds = new Set<number>()\n  checkedNodes.forEach(item => {\n    checkedMenuIds.add(item.id)\n    if (item.parentId !== 0) {\n      checkedMenuIds.add(item.parentId)\n    }\n  })\n  await ElMessageBox.confirm('是否分配菜单？', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  await roleAllocMenuAPI({ roleId: roleId.value!, menuIds: Array.from(checkedMenuIds).join(',') })\n  ElMessage({\n    message: '分配成功',\n    type: 'success',\n    duration: 1000\n  })\n  router.back()\n}\n\n// 清空选中项\nconst handleClear = () => {\n  treeRef.value!.setCheckedKeys([])\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <el-tree ref=\"treeRef\" :data=\"menuTreeList\" show-checkbox default-expand-all node-key=\"id\" :props=\"defaultProps\"\n      highlight-current>\n    </el-tree>\n    <div style=\"margin-top: 20px\" align=\"center\">\n      <el-button type=\"primary\" @click=\"handleSave()\">保存</el-button>\n      <el-button @click=\"handleClear()\">清空</el-button>\n    </div>\n  </el-card>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "src/views/ums/role/allocResource.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { fetchAllResourceList } from '@/apis/resource.ts'\nimport { resourceCategoryListAllAPI } from '@/apis/resourceCategory.ts'\nimport { roleAllocResourceAPI, roleListResourceById } from '@/apis/role'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { UmsResource, UmsResourceCategory } from '@/types/resource'\n\n// 获取路由\nconst router = useRouter()\nconst route = useRoute()\n\n// 当前操作的角色ID\nconst roleId = ref<number>()\n// 所有资源列表\nconst allResource = ref<UmsResource[]>([])\n// 所有资源分类列表\nconst allResourceCate = ref<UmsResourceCategory[]>([])\n// 获取所有资源分类列表\nconst getAllResourceCateList = async () => {\n  const res = await resourceCategoryListAllAPI()\n  allResourceCate.value = res.data\n  allResourceCate.value.forEach(item => item.checked = false)\n}\n// 获取所有资源列表\nconst getAllResourceList = async () => {\n  const res = await fetchAllResourceList()\n  allResource.value = res.data\n  allResource.value.forEach(item => item.checked = false)\n}\n\n// 根据角色获取已分配资源并设置选中状态\nconst getResourceByRole = async () => {\n  const res = await roleListResourceById(roleId.value!)\n  const allocResource = res.data\n  allResource.value.forEach(item => {\n    item.checked = getResourceChecked(item.id!, allocResource)\n  })\n  allResourceCate.value.forEach(item => {\n    item.checked = isAllChecked(item.id!)\n  })\n}\n\n// 页面挂载时执行\nonMounted(async () => {\n  roleId.value = Number(route.query.roleId)\n  await getAllResourceCateList()\n  await getAllResourceList()\n  await getResourceByRole()\n})\n\n// 根据分类ID获取资源\nconst getResourceByCate = (categoryId: number) => {\n  return allResource.value.filter(item => item.categoryId === categoryId)\n}\n\n// 检查资源是否被选中\nconst getResourceChecked = (resourceId: number, allocResource: UmsResource[]) => {\n  const index = allocResource.findIndex(item => item.id === resourceId)\n  return index > -1\n}\n\n// 检查分类是否半选状态\nconst isIndeterminate = (categoryId: number) => {\n  const cateResources = getResourceByCate(categoryId)\n  return !(cateResources.every(item => item.checked === true) || cateResources.every(item => item.checked === false))\n}\n\n// 检查分类是否全选\nconst isAllChecked = (categoryId: number) => {\n  const cateResources = getResourceByCate(categoryId)\n  return cateResources.every(item => item.checked === true)\n}\n\n// 保存资源分配\nconst handleSave = async () => {\n  await ElMessageBox.confirm('是否分配资源？', '提示', {\n    confirmButtonText: '确定',\n    cancelButtonText: '取消',\n    type: 'warning'\n  })\n  const checkedResourceIds = new Set<number>()\n  if (allResource.value && allResource.value.length > 0) {\n    allResource.value.forEach(item => {\n      if (item.checked) {\n        checkedResourceIds.add(item.id!)\n      }\n    })\n  }\n  await roleAllocResourceAPI({ roleId: roleId.value!, resourceIds: Array.from(checkedResourceIds).join(',') })\n  ElMessage({\n    message: '分配成功',\n    type: 'success',\n    duration: 1000\n  })\n  router.back()\n}\n\n// 清空选中项\nconst handleClear = () => {\n  allResourceCate.value.forEach(item => {\n    item.checked = false\n  })\n  allResource.value.forEach(item => {\n    item.checked = false\n  })\n}\n\n// 处理全选改变事件\nconst handleCheckAllChange = (cate: UmsResourceCategory) => {\n  const cateResources = getResourceByCate(cate.id!)\n  cateResources.forEach(item => item.checked = cate.checked)\n}\n\n// 处理单个资源选中事件\nconst handleCheckChange = (resource: UmsResource) => {\n  allResourceCate.value.forEach(item => {\n    if (item.id === resource.categoryId) {\n      item.checked = isAllChecked(resource.categoryId)\n    }\n  })\n}\n</script>\n\n<template>\n  <el-card class=\"form-container\" shadow=\"never\">\n    <div v-for=\"(cate, index) in allResourceCate\" :class=\"index === 0 ? 'top-line' : null\" :key=\"'cate' + cate.id\">\n      <el-row class=\"table-layout\" style=\"background: #F2F6FC;\">\n        <el-checkbox v-model=\"cate.checked\" :indeterminate=\"isIndeterminate(cate.id!)\"\n          @change=\"handleCheckAllChange(cate)\">\n          {{ cate.name }}\n        </el-checkbox>\n      </el-row>\n      <el-row class=\"table-layout\">\n        <el-col :span=\"8\" v-for=\"resource in getResourceByCate(cate.id!)\" :key=\"resource.id\" style=\"padding: 4px 0\">\n          <el-checkbox v-model=\"resource.checked\" @change=\"handleCheckChange(resource)\">\n            {{ resource.name }}\n          </el-checkbox>\n        </el-col>\n      </el-row>\n    </div>\n    <div style=\"margin-top: 20px\" align=\"center\">\n      <el-button type=\"primary\" @click=\"handleSave()\">保存</el-button>\n      <el-button @click=\"handleClear()\">清空</el-button>\n    </div>\n  </el-card>\n</template>\n\n<style scoped>\n.table-layout {\n  padding: 20px;\n  border-left: 1px solid #DCDFE6;\n  border-right: 1px solid #DCDFE6;\n  border-bottom: 1px solid #DCDFE6;\n}\n\n.top-line {\n  border-top: 1px solid #DCDFE6;\n}\n</style>\n"
  },
  {
    "path": "src/views/ums/role/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { dayjs, ElMessage, ElMessageBox } from 'element-plus'\nimport { Search, Tickets } from '@element-plus/icons-vue'\nimport { getRoleListAPI, roleCreateAPI, roleUpdateByIdAPI, roleUpdateStatusAPI, roleDeleteByIdsAPI } from '@/apis/role'\nimport type { UmsRole } from '@/types/role'\nimport type { PageParam } from '@/types/common'\n\n// 获取路由对象\nconst router = useRouter()\n\n// 列表查询参数\nconst listQuery = ref<PageParam>({\n  pageNum: 1,\n  pageSize: 10,\n  keyword: ''\n})\n// 角色列表数据\nconst list = ref<UmsRole[]>([])\n// 表格加载状态\nconst listLoading = ref(false)\n// 分页总数\nconst total = ref(0)\n// 获取角色列表\nconst getList = async () => {\n  listLoading.value = true\n  try {\n    const response = await getRoleListAPI(listQuery.value)\n    listLoading.value = false\n    list.value = response.data.list\n    total.value = response.data.total\n  } catch (error) {\n    listLoading.value = false\n    console.error('获取角色列表失败:', error)\n  }\n}\n\n// 组件挂载后初始化数据\nonMounted(() => {\n  getList()\n})\n\n// 当前操作的角色对象\nconst role = ref<UmsRole>({\n  name: '',\n  adminCount: 0,\n  status: 1\n})\n// 编辑对话框是否可见\nconst dialogVisible = ref(false)\n// 是否编辑状态\nconst isEdit = ref(false)\n\n// 重置搜索条件\nconst handleResetSearch = () => {\n  listQuery.value.pageNum = 1\n  listQuery.value.keyword = ''\n}\n\n// 处理搜索\nconst handleSearchList = () => {\n  listQuery.value.pageNum = 1\n  getList()\n}\n\n// 每页大小变化\nconst handleSizeChange = (val: number) => {\n  listQuery.value.pageNum = 1\n  listQuery.value.pageSize = val\n  getList()\n}\n\n// 当前页变化\nconst handleCurrentChange = (val: number) => {\n  listQuery.value.pageNum = val\n  getList()\n}\n\n// 处理添加角色\nconst handleAdd = () => {\n  dialogVisible.value = true\n  isEdit.value = false\n  role.value = {\n    name: '',\n    adminCount: 0,\n    status: 1\n  }\n}\n\n// 处理状态变化\nconst handleStatusChange = async (index: number, row: UmsRole) => {\n  try {\n    await ElMessageBox.confirm('是否要修改该状态?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    await roleUpdateStatusAPI(row.id!, { status: row.status })\n    ElMessage.success('修改成功!')\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('更新状态失败:', error)\n      // 如果取消或失败，重新获取列表以恢复状态\n      getList()\n    }\n  }\n}\n\n// 处理删除\nconst handleDelete = async (index: number, row: UmsRole) => {\n  try {\n    await ElMessageBox.confirm('是否要删除该角色?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    const ids = []\n    ids.push(row.id)\n    await roleDeleteByIdsAPI({ ids: ids.toString() })\n    ElMessage.success('删除成功!')\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除失败:', error)\n    }\n  }\n}\n\n// 处理更新\nconst handleUpdate = (index: number, row: UmsRole) => {\n  dialogVisible.value = true\n  isEdit.value = true\n  // 深拷贝row对象，避免直接修改原始数据\n  role.value = { ...row }\n}\n\n// 处理对话框确认\nconst handleDialogConfirm = async () => {\n  try {\n    await ElMessageBox.confirm('是否要确认?', '提示', {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消',\n      type: 'warning'\n    })\n    if (isEdit.value) {\n      await roleUpdateByIdAPI(role.value.id!, role.value)\n      ElMessage.success('修改成功！')\n    } else {\n      await roleCreateAPI(role.value)\n      ElMessage.success('添加成功！')\n    }\n    dialogVisible.value = false\n    getList()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('操作失败:', error)\n    }\n  }\n}\n\n// 处理选择菜单\nconst handleSelectMenu = (index: number, row: UmsRole) => {\n  router.push({ path: '/ums/allocMenu', query: { roleId: row.id } })\n}\n\n// 处理选择资源\nconst handleSelectResource = (index: number, row: UmsRole) => {\n  router.push({ path: '/ums/allocResource', query: { roleId: row.id } })\n}\n\n// 日期格式化函数\nconst formatDateTime = (time: string) => {\n  if (!time) {\n    return 'N/A'\n  }\n  return dayjs(time).format('YYYY-MM-DD HH:mm:ss')\n}\n</script>\n\n<template>\n  <div class=\"app-container\">\n    <el-card class=\"filter-container\" shadow=\"never\">\n      <div>\n        <el-icon class=\"el-icon-middle\">\n          <Search />\n        </el-icon>\n        <span>筛选搜索</span>\n        <el-button style=\"float: right\" @click=\"handleSearchList()\" type=\"primary\" size=\"default\">\n          查询搜索\n        </el-button>\n        <el-button style=\"float: right; margin-right: 15px\" @click=\"handleResetSearch()\" size=\"default\">\n          重置\n        </el-button>\n      </div>\n      <div style=\"margin-top: 15px\">\n        <el-form :inline=\"true\" :model=\"listQuery\" size=\"default\" label-width=\"140px\">\n          <el-form-item label=\"输入搜索：\">\n            <el-input v-model=\"listQuery.keyword\" class=\"input-width\" placeholder=\"角色名称\" clearable></el-input>\n          </el-form-item>\n        </el-form>\n      </div>\n    </el-card>\n    <el-card class=\"operate-container\" shadow=\"never\">\n      <el-icon class=\"el-icon-middle\">\n        <Tickets />\n      </el-icon>\n      <span>数据列表</span>\n      <el-button size=\"default\" class=\"btn-add\" @click=\"handleAdd()\" style=\"margin-left: 20px\">添加</el-button>\n    </el-card>\n    <div class=\"table-container\">\n      <el-table ref=\"roleTable\" :data=\"list\" style=\"width: 100%;\" v-loading=\"listLoading\" border>\n        <el-table-column label=\"编号\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.id }}</template>\n        </el-table-column>\n        <el-table-column label=\"角色名称\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.name }}</template>\n        </el-table-column>\n        <el-table-column label=\"描述\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.description }}</template>\n        </el-table-column>\n        <el-table-column label=\"用户数\" width=\"100\" align=\"center\">\n          <template #default=\"scope\">{{ scope.row.adminCount }}</template>\n        </el-table-column>\n        <el-table-column label=\"添加时间\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">{{ formatDateTime(scope.row.createTime) }}</template>\n        </el-table-column>\n        <el-table-column label=\"是否启用\" width=\"140\" align=\"center\">\n          <template #default=\"scope\">\n            <el-switch @change=\"handleStatusChange(scope.$index, scope.row)\" :active-value=\"1\" :inactive-value=\"0\"\n              v-model=\"scope.row.status\">\n            </el-switch>\n          </template>\n        </el-table-column>\n        <el-table-column label=\"操作\" width=\"160\" align=\"center\">\n          <template #default=\"scope\">\n            <el-row>\n              <el-col :span=\"12\">\n                <el-button size=\"small\" type=\"primary\" link @click=\"handleSelectMenu(scope.$index, scope.row)\">分配菜单\n                </el-button>\n              </el-col>\n              <el-col :span=\"12\">\n                <el-button size=\"small\" type=\"primary\" link @click=\"handleSelectResource(scope.$index, scope.row)\">分配资源\n                </el-button>\n              </el-col>\n            </el-row>\n            <el-row>\n              <el-col :span=\"12\">\n                <el-button size=\"small\" type=\"primary\" link @click=\"handleUpdate(scope.$index, scope.row)\">\n                  编辑\n                </el-button>\n              </el-col>\n              <el-col :span=\"12\">\n                <el-button size=\"small\" type=\"primary\" link @click=\"handleDelete(scope.$index, scope.row)\">删除\n                </el-button>\n              </el-col>\n            </el-row>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n    <div class=\"pagination-container\">\n      <el-pagination background @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\"\n        layout=\"total, sizes,prev, pager, next,jumper\" v-model:current-page=\"listQuery.pageNum\"\n        :page-size=\"listQuery.pageSize\" :page-sizes=\"[5, 10, 15]\" :total=\"total\">\n      </el-pagination>\n    </div>\n    <el-dialog v-model=\"dialogVisible\" :title=\"isEdit ? '编辑角色' : '添加角色'\" width=\"40%\">\n      <el-form :model=\"role\" label-width=\"150px\" size=\"default\">\n        <el-form-item label=\"角色名称：\">\n          <el-input v-model=\"role.name\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"描述：\">\n          <el-input v-model=\"role.description\" type=\"textarea\" :rows=\"5\" style=\"width: 250px\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"是否启用：\">\n          <el-radio-group v-model=\"role.status\">\n            <el-radio :label=\"1\">是</el-radio>\n            <el-radio :label=\"0\">否</el-radio>\n          </el-radio-group>\n        </el-form-item>\n      </el-form>\n      <template #footer>\n        <span class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\" size=\"default\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"handleDialogConfirm()\" size=\"default\">确 定</el-button>\n        </span>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style></style>\n"
  },
  {
    "path": "tsconfig.app.json",
    "content": "{\n  \"extends\": \"@vue/tsconfig/tsconfig.dom.json\",\n  \"include\": [\"env.d.ts\", \"src/**/*\", \"src/**/*.vue\"],\n  \"exclude\": [\"src/**/__tests__/*\"],\n  \"compilerOptions\": {\n    \"tsBuildInfoFile\": \"./node_modules/.tmp/tsconfig.app.tsbuildinfo\",\n    \"types\": [\"element-plus/global\"],\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"files\": [],\n  \"references\": [\n    {\n      \"path\": \"./tsconfig.node.json\"\n    },\n    {\n      \"path\": \"./tsconfig.app.json\"\n    }\n  ]\n}\n"
  },
  {
    "path": "tsconfig.node.json",
    "content": "{\n  \"extends\": \"@tsconfig/node24/tsconfig.json\",\n  \"include\": [\n    \"vite.config.*\",\n    \"vitest.config.*\",\n    \"cypress.config.*\",\n    \"nightwatch.conf.*\",\n    \"playwright.config.*\",\n    \"eslint.config.*\"\n  ],\n  \"compilerOptions\": {\n    \"noEmit\": true,\n    \"tsBuildInfoFile\": \"./node_modules/.tmp/tsconfig.node.tsbuildinfo\",\n\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"types\": [\"node\"]\n  }\n}\n"
  },
  {
    "path": "vite.config.ts",
    "content": "import { fileURLToPath, URL } from 'node:url'\nimport path from 'node:path'\nimport { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueDevTools from 'vite-plugin-vue-devtools'\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'\nimport ElementPlus from 'unplugin-element-plus/vite'\nimport { createSvgIconsPlugin } from 'vite-plugin-svg-icons'\n\n// https://vite.dev/config/\nexport default defineConfig({\n  base: './',\n  plugins: [\n    vue(),\n    vueDevTools(),\n    // 配置element-plus组件自动导入\n    AutoImport({\n      resolvers: [ElementPlusResolver()],\n    }),\n    Components({\n      // 配置element-plus采用sass样式配色系统\n      resolvers: [ElementPlusResolver({ importStyle: 'sass' })],\n    }),\n    // 覆盖element-plus默认主题色\n    ElementPlus({\n      useSource: true,\n    }),\n    // 创建SVG图标创建插件\n    createSvgIconsPlugin({\n      // 指定存放SVG图标的目录\n      iconDirs: [path.resolve(process.cwd(), 'src/icons/svg')],\n      // 定义图标 ID 的生成规则\n      symbolId: 'icon-[dir]-[name]',\n    }),\n  ],\n  resolve: {\n    alias: {\n      '@': fileURLToPath(new URL('./src', import.meta.url)),\n    },\n  },\n  css: {\n    preprocessorOptions: {\n      scss: {\n        // 指定覆盖主题色的scss文件\n        additionalData: `\n          @use \"@/styles/element/index.scss\" as *;\n          @use \"@/styles/var.scss\" as *;\n        `,\n        // 屏蔽在使用el-col时出现的控制台警告信息\n        silenceDeprecations: ['legacy-js-api', 'if-function'],\n      },\n    },\n  },\n})\n"
  }
]