[
  {
    "path": ".eslintignore",
    "content": "**/node_modules\n\nminiprogram/templates/wxParse/"
  },
  {
    "path": ".eslintrc.cjs",
    "content": "module.exports = {\n  \"env\": {\n    \"browser\": true,\n    \"es6\": true,\n    \"node\": true\n  },\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:@typescript-eslint/recommended\",\n    // \"prettier\" put last\n    \"prettier\",\n  ],\n  \"globals\": {\n    \"Atomics\": \"readonly\",\n    \"SharedArrayBuffer\": \"readonly\",\n    \"wx\": \"writable\",\n    \"App\": \"readonly\",\n    \"Page\": \"readonly\",\n    \"Component\": \"readonly\",\n    \"getApp\": \"readonly\",\n    \"getCurrentPages\": \"readonly\"\n  },\n  \"parser\": \"@typescript-eslint/parser\",\n  \"parserOptions\": {\n    \"ecmaVersion\": 2018,\n    \"sourceType\": \"module\"\n  },\n  \"plugins\": [\n    \"@typescript-eslint\"\n  ],\n  \"rules\": {\n    \"@typescript-eslint/no-unused-vars\": [\"error\", { \"args\": \"none\" }],\n    \"comma-dangle\": [\"error\", \"only-multiline\"]\n  },\n  \"overrides\": [\n    {\n      \"files\": [\"*.wxs\"],\n      \"globals\": {\n        \"getDate\": \"readonly\",\n        \"getRegExp\": \"readonly\"\n      },\n      \"env\": {\n        \"es6\": false\n      },\n      \"parserOptions\": {\n        \"ecmaVersion\": 5,\n        \"sourceType\": \"script\"\n      },\n      \"rules\": {\n        \"quote-props\": [\"error\", \"as-needed\", { \"numbers\": true }],\n        \"no-useless-escape\": \"off\"\n      }\n    },\n    {\n      \"files\": [\"./cloudfunctions/**/*.js\"],\n      \"rules\": {\n        \"@typescript-eslint/no-var-requires\": \"off\"\n      }\n    },\n    {\n      \"files\": [\"*.js\"],\n      \"rules\": {\n        \"@typescript-eslint/explicit-module-boundary-types\": \"off\",\n        \"@typescript-eslint/explicit-function-return-type\": \"off\"\n      }\n    },\n    {\n      files: ['./scripts/**/*.cjs'],\n      rules: {\n        '@typescript-eslint/no-var-requires': 'off',\n      },\n    },\n    {\n      files: ['**/*.spec.{js,mjs}'],\n      env: { jest: true },\n    },\n  ]\n};\n"
  },
  {
    "path": ".github/workflows/upload.yml",
    "content": "# 构建并上传到小程序后台\n\nname: Upload to weixin\n\n# Controls when the workflow will run\non:\n  # Triggers the workflow on push but only for the main branch\n  push:\n    branches:\n      - main\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - uses: actions/setup-node@v3\n        with:\n          node-version: 16\n\n      - name: Create file \"private.key\"\n        env:\n          WX_PRIVATE_KEY: ${{ secrets.WX_PRIVATE_KEY }}\n        run: |\n          echo \"$WX_PRIVATE_KEY\" > private.key\n\n      - name: Install dependencies\n        run: |\n          corepack enable pnpm\n          pnpm install\n\n      - name: Upload to weixin\n        run: |\n          node scripts/release.cjs\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n\n# 微信开发工具项目配置\n# /project.config.json\n# project.config.json\n\n# MarkEditor 配置文件\n.Archive\n.sync/*\n.me_configs.data\n.z_sync_configs.data\nsync_changes.log\nsync_hook.script\n**/.Archive\n.md_configs.data\n\n# Mac file\n.DS_Store\n\n**/miniprogram_npm\nproject.private.config.json\nprivate.key\nprivate.*.key\n\nbackup\n"
  },
  {
    "path": ".prettierignore",
    "content": "coverage\n"
  },
  {
    "path": ".prettierrc.json",
    "content": "{\n  \"$schema\": \"http://json.schemastore.org/prettierrc\",\n  \"semi\": true,\n  \"singleQuote\": true\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"files.exclude\": {\n    \"**/*.js\": {\n      \"when\": \"$(basename).ts\"\n    }\n  }\n}\n"
  },
  {
    "path": ".yarnrc",
    "content": "registry \"https://registry.npmmirror.com\"\n"
  },
  {
    "path": "@types/douban/accounts.d.ts",
    "content": "declare namespace Douban {\n  interface AccountInfo {\n    name: string;\n    weixin_binded: boolean;\n    phone: string;\n    avatar: Record<'medium'|'median'|'large'|'raw'|'small'|'icon', string>;\n    id: string;\n    uid: string;\n  }\n}\n"
  },
  {
    "path": "@types/douban/frodo.d.ts",
    "content": "declare namespace Douban {\n  interface SubjectCollection {\n    subject_type: DouBan.SubjectType;\n    updated_at: string;\n    total: number;\n    header_fg_image: string;\n    header_bg_image: string;\n    title: string;\n    icon_text: string;\n    id: string;\n    description: string;\n    done_count: number;\n  }\n\n  /** 榜单合集 */\n  interface SubjectCollectionItemsResult {\n    count: number;\n    subject_collection: SubjectCollection;\n    subject_collection_items: DouBan.MovieItem[];\n    total: number;\n    start: number;\n  }\n\n  /** 影院热映 */\n  interface SubjectCollectionShowingItemsResult {\n    count: number\n    subject_collection_items: Array<{\n      rating: {\n        max: number\n        value: number\n      }\n      cover: {\n        url: string\n      }\n      year: string\n      id: string\n      title: string\n      type: 'movie'\n      info: string\n      url: string\n      release_date: string\n      original_title: string\n      uri: string\n    }>\n    total: number\n    start: number\n  }\n\n  /** 即将上映 */\n  interface SubjectCollectionSoonItemsResult {\n    subject_collection_items: Array<{\n      rating: {\n        max: number\n        value: number\n      }\n      cover: {\n        url: string\n      }\n      year: string\n      id: string\n      title: string\n      type: 'movie'|'tv'\n      most_recent_release_date: string\n      info: string\n      url: string\n      release_date: string\n      original_title: string\n      uri: string\n    }>\n  }\n\n  interface UserInterestsResult {\n    count: number;\n    start: number;\n    total: number;\n    interests: Array<{\n      rating: DouBan.Rating;\n      tags: string[];\n      create_time: string;\n      status: DouBan.InterestStatus;\n      id: string;\n      is_private: boolean;\n      subject: DouBan.Movie;\n    }>\n  }\n}\n"
  },
  {
    "path": "@types/douban/index.d.ts",
    "content": "declare namespace Douban {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  interface APIResponseLegacy<T = any> {\n    status: 'success'|'failed';\n    message: string;\n    description: string;\n    payload: T;\n  }\n\n  interface LoginSuccessResult {\n    access_token: string;\n    douban_user_id: string;\n    account_info: Douban.AccountInfo;\n    douban_user_name: string;\n    expires_in: number;\n    refresh_token: string;\n  }\n}\n"
  },
  {
    "path": "@types/douban.d.ts",
    "content": "declare namespace DouBan {\n  /** 搜索结果 */\n  interface SearchResult {\n    count: number;\n    items: Array<SearchMovieItem|SearchDoulistItem|SearchBookItem>;\n    total: number;\n    start: number;\n  }\n\n  /** 搜索结果单项 */\n  interface SearchItem {\n    type_name: string;\n    layout: string;\n    target: unknown;\n    /**\n     * - \"tv\": 电视剧\n     * - \"movie\": 电影\n     * - \"doulist_cards\": 豆列\n     * - \"music\": 音乐\n     * - \"game\": 游戏\n     * - \"book\": 书籍\n     */\n    target_type: string;\n  }\n \n  /** 搜索结果-影视单项 */\n  interface SearchMovieItem extends SearchItem {\n    layout: 'subject';\n    target: Movie;\n    target_type: 'tv' | 'movie';\n  }\n\n  /** 搜索结果-豆列单项 */\n  interface SearchDoulistItem extends SearchItem {\n    layout: 'doulist_cards';\n    target: {\n      doulists: Array<Doulists>\n    };\n    target_type: 'doulist_cards';\n  }\n\n  /** 搜索结果-书籍单项 */\n  interface SearchBookItem extends SearchItem {\n    layout: 'subject';\n    target: Book;\n    target_type: 'book';\n  }\n\n  interface Subject {\n    rating: Rating;\n    controversy_reason: string;\n    title: string;\n    abstract: string;\n    uri: string;\n    cover_url: string;\n    card_subtitle: string;\n    id: string;\n    null_rating_reason: string;\n  }\n\n  type SubjectType = 'movie'|'tv'|'book'|'music';\n\n  interface Movie extends Subject {\n    has_linewatch: boolean;\n    year: string;\n  }\n\n  interface Book extends Subject {\n    has_ebook: boolean;\n  }\n\n  /** 豆列 */\n  interface Doulists {\n    cover_url: string;\n    id: string;\n    image_label: string;\n    title: string;\n  }\n\n  interface Rating {\n    count: number;\n    max: number;\n    star_count: number;\n    value: number;\n  }\n\n  interface Actor {\n    abstract: string;\n    author: string | null;\n    avatar: { large: string; normal: string };\n    cover_url: string;\n    id: string;\n    name: string;\n    roles: string[];\n    sharing_url: string;\n    title: string;\n    type: 'celebrity';\n    uri: string;\n    url: string;\n  }\n\n  interface Trailer {\n    sharing_url: string;\n    video_url: string;\n    title: string;\n    uri: string;\n    cover_url: string;\n    term_num: number;\n    n_comments: number;\n    create_time: string;\n    subject_title: string;\n    file_size: number;\n    runtime: string;\n    type: string;\n    id: string;\n    desc: string;\n  }\n\n  /** 影视列表单元 */\n  interface MovieItem {\n    rating: Rating;\n    cover: { url: string; width: number; height: number; };\n    year: string;\n    card_subtitle: string;\n    id: string;\n    title: string;\n    type: SubjectType;\n    has_linewatch: boolean;\n    most_recent_release_date: string;\n    info: string;\n    url: string;\n    release_date: string;\n    original_title: string;\n    uri: string;\n  }\n\n  interface MovieDetail {\n    id: string;\n    actors: Actor[];\n    aka: string[];\n    body_bg_color: string;\n    card_subtitle: string;\n    comment_count: number;\n    directors: Actor[];\n    has_linewatch: boolean;\n    interest?: Interest;\n    linewatches: Array<{\n      free: boolean;\n      source: {\n        literal: string;\n        name: string;\n        pic: string;\n      };\n      source_uri: string;\n      url: string;\n    }>;\n    title: string;\n    trailers: Trailer[];\n    type: SubjectType;\n  }\n\n  interface User {\n    loc: Loc;\n    kind: string;\n    followed: boolean;\n    name: string;\n    avatar_side_icon: string;\n    url: string;\n    gender: string;\n    reg_time: string;\n    uri: string;\n    remark: string;\n    in_blacklist: boolean;\n    uid: string;\n    type: string;\n    id: string;\n    avatar: string;\n  }\n\n  interface Loc {\n    uid: string;\n    id: string;\n    name: string;\n  }\n\n  interface Interest {\n    comment: string;\n    rating?: Rating;\n    sharing_url: string;\n    tags: string[];\n    is_private: boolean;\n    is_voted: boolean;\n    uri: string;\n    platforms: string[];\n    vote_count: number;\n    create_time: string;\n    status: InterestStatus;\n    user: User;\n    recommend_reason: string;\n    user_done_desc: string;\n    id: string;\n    wechat_timeline_share: 'screenshot';\n    subject: Movie;\n  }\n\n  interface InterestResult {\n    count: number;\n    start: number;\n    total: number;\n    wechat_timeline_share: 'screenshot';\n    interests: Interest[]\n  }\n\n  type InterestStatus = 'mark'|'doing'|'done';\n\n  interface Image {\n    large: ImageMeta;\n    raw: string|null;\n    small: ImageMeta;\n    normal: ImageMeta;\n    is_animated: boolean;\n  }\n\n  interface ImageMeta {\n    url: string;\n    width: number;\n    size: number;\n    height: number;\n  }\n\n  interface Photo {\n    id: string;\n    image: Image;\n  }\n\n  interface PhotosResult {\n    count: number;\n    photos: Photo[];\n    total: number;\n    start: number;\n  }\n\n  interface Trailer {\n    reaction_type: number;\n    sharing_url: string;\n    video_url: string;\n    title: string;\n    create_time: string;\n    uri: string;\n    cover_url: string;\n    term_num: number;\n    n_comments: number;\n    reactions_count: number;\n    is_collected: boolean;\n    subject_title: string;\n    collections_count: number;\n    file_size: number;\n    reshares_count: number;\n    runtime: string;\n    type: string;\n    id: string;\n    desc: string;\n  }\n\n  interface TrailersResult {\n    trailers: Trailer[];\n  }\n\n  interface ListParams {\n    start?: number;\n    count?: number;\n  }\n\n  interface ListResult {\n    count: number;\n    start: number;\n    total: number;\n  }\n}\n"
  },
  {
    "path": "@types/index.d.ts",
    "content": "import 'miniprogram-api-typings'\n\ndeclare namespace IMarkr {\n}\n\ninterface RequestController extends WechatMiniprogram.RequestTask {\n  task: WechatMiniprogram.RequestTask;\n}\n\ninterface RequestOption<T> extends Omit<WechatMiniprogram.RequestOption<T>, 'success' | 'fail' | 'complete'> {\n  baseURL?: string;\n  controller?: RequestController;\n  notAuthorization?: boolean\n}\n\ninterface RequestSuccessResult<T> extends WechatMiniprogram.RequestSuccessCallbackResult<T> {\n  ok: boolean;\n}\n"
  },
  {
    "path": "@types/miniprogram.d.ts",
    "content": "// <reference path=\"./lib.wx.component.d.ts\" />\n\ndeclare namespace WechatMiniprogram {\n  interface FormEvent<Detail extends IAnyObject = IAnyObject> extends CustomEvent {\n    detail: {\n      value: Detail\n      formId: string\n    }\n  }\n\n  namespace Component {\n    interface A {\n      a: string\n    }\n  }\n}\n"
  },
  {
    "path": "@types/mobx-miniprogram-bindings.d.ts",
    "content": "declare module 'mobx-miniprogram-bindings' {\n  export const storeBindingsBehavior: WechatMiniprogram.Behavior.BehaviorIdentifier\n}"
  },
  {
    "path": "@types/wxCloud.d.ts",
    "content": "interface CloudFunctionBaseEvent {\n  userInfo: { appId: string; openId: string };\n}\n\ntype CloudFunctionEvent<T extends Record<string, any> = {}> = CloudFunctionBaseEvent & T;\ninterface CloudFunctionContext {\n  callbackWaitsForEmptyEventLoop: boolean;\n  memory_limit_in_mb: number;\n  time_limit_in_ms: number;\n  request_id: string;\n  environment: string;\n  environ: string;\n  function_version: string;\n  function_name: string;\n  namespace: string;\n  tencentcloud_region: string;\n  tencentcloud_appid: string;\n  tencentcloud_uin: string;\n}\n\ninterface CloudFunction<Event extends Record<string, any> = {}, Result = void> {\n  (event: CloudFunctionEvent<Event>, context: CloudFunctionContext): Result;\n}\n\ninterface CallCloudOptions {\n  /** 是否显示加载提示框 */\n  loading?: boolean;\n  /** 是否显示错误提示框 */\n  showError?: boolean;\n}\n\ninterface CallCloud {\n  (name: 'login', data: Record<string, any>, options: CallCloudOptions): Promise<any>;\n\n  (name: 'doouban', data: Record<string, any>, options: CallCloudOptions): Promise<any>;\n}\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of conduct\n\n### 使用2个空格进行缩进\n\n```javascript\n  function hello (name) {\n    console.log('Hi, ' + name);\n  }\n```\n\n### 云存储集合名采用 `_` 连接多个单词\n\n**Bad:**\n\n```javascript\ndb.createCollection('cardLikeRecord')\ndb.createCollection('card-like-record')\ndb.createCollection('cardlikerecord')\n```\n\n**Good:**\n\n```javascript\ndb.createCollection('card_like_record')\n```\n\n### 云存储属性名\n\n- 多个单词使用下划线 `_` 连接\n\n- 索引使用小程序提供的 `_id`\n\n- 用户的 openID 统一使用 `openid`\n\n- 记录统一增加 `create_at` 和 `update_at` 两个属性\n\n**Bad:**\n\n```json\n{\n  \"id\": 12,\n  \"openID\": \"useropenid\"\n}\n```\n\n**Good:**\n\n```json\n{\n  \"_id\": \"randomstring\",\n  \"openid\": \"useropenid\",\n  \"create_at\": \"db.serverDate()\",\n  \"update_at\": \"db.seerverDate()\"\n}\n```\n\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://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, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"{}\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n   Copyright 2017 Honye\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "README.md",
    "content": "# Mark\n\n[![Honye](https://img.shields.io/badge/Honye-红叶-red.svg)](https://honye.github.io/)  [![license](https://img.shields.io/github/license/hongye567/weapp-mark.svg)](https://github.com/Honye/weapp-mark/blob/master/LICENSE)\n\n<p align=\"center\">\n    <img src=\"./docs/screenshots/IMG_5435.JPG\" height=\"258px\" >\n</p>\n\n\n纯属娱乐学习项目，偶尔记录下开发中遇到的问题和想法，不定期更新，如果你有什么建议也请告诉我（[issues](https://github.com/Honye/weapp-mark/issues)）。项目中自己有封装一些组件，可在项目结构查看。\n\n~~影视数据全部由[豆瓣](https://developers.douban.com/) API 提供。~~ 目前豆瓣搜索接口已经没有免费的可以使用了，本人提供的接口部署在 Vercel，未备案不可添加到微信后台，项目同时提供了 mock 数据可使用。小程序个人开发功能限制太多，无法完全上线。如若喜欢可以克隆项目自己运行看看。\n\n## 💥 扫码体验\n\n<img src=\"./docs/screenshots/IMG_5437.JPG\" alt=\"小程序码\" title=\"小程序码\" width=\"300\">\n\n## 🔱 分支 Branches\n\n1. [main](https://github.com/Honye/weapp-mark/tree/main) - 采用[微信小程序云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)，无需后台也能开发一款完整的小程序。\n2. [master](https://github.com/Honye/weapp-mark/tree/master) - 后台服务由 [LeanCloud 云服务](https://leancloud.cn/)支撑。\n3. [cdn-ui](https://github.com/Honye/weapp-mark/tree/cdn-ui) - 没有后台服务支撑，全部采用 HTTP 请求的个人博客的静态 JSON 文件。\n\n[在线思维导图](https://www.processon.com/view/5a5c45d7e4b0abe85d562bda)\n\n**注意事项：**\n\n使用自定义组件 [Component](https://mp.weixin.qq.com/debug/wxadoc/dev/framework/custom-component/)，小程序基础版本库要在 1.6.3 以上；\n\n使用 [wxParse](https://github.com/icindy/wxParse)，小程序基础版本库要在 1.6.6 及以上。\n\n小程序[简易双向绑定](https://developers.weixin.qq.com/miniprogram/dev/framework/view/two-way-bindings.html)，小程序基础版本库 2.9.3 及以上\n\n## 🎨 功能 Features\n\n- 云函数实现微信登录\n- 云函数定时任务实现每日卡片\n- 云函数聚合查询实现卡片收藏\n- Grid 多列表格布局\n- Grid 布局实现瀑布流\n- 云函数爬取 GitHub Trending\n- 关于页背景音频播放\n- 分别使用 template 和 Component 实现公用组件\n- CSS3 属性动画\n\n## 🐢 规范 Code of conduct\n\n时间久了自己都忘记了以前给自己定的规范是啥，导致代码很不统一，给自己备份个项目规范🥱\n\n[CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)\n\n## 🛠 运行 Run\n\n克隆本项目，使用微信 Web 开发工具打开项目根目录\n\n#### 安装依赖\n\n```bash\nyarn # or npm install\n```\n\n菜单栏 **工具 --> 构建 npm**\n\n#### 云开发环境\n\n开通云开发环境后将项目 `/cloudfunctions/` 同步至云（参考 [云开发环境初始化](./docs/云开发环境初始化.md)），修改 `app.js`\n\n```javascript\nwx.cloud.init({\n  traceUser: true,\n  env: 'dev-oucwt' // 此处替换为你自己的云环境 ID\n});\n```\n\n*注意：真机预览开发环境时需打开调试*\n\n#### Mock API\n\n参考官方文档 [API Mock/规则导入导出](https://developers.weixin.qq.com/miniprogram/dev/devtools/api-mock.html)，导入 [mock/mock.config.json](./mock/mock.config.json)。**开发工具提供的 Mock 能力暂不支持手机预览**\n\n**注意：** 如果你没有 AppID 可能看不到数据，手机无法预览。开发工具需要关闭安全域名的校验，**工具栏 --> 详情 --> 项目设置 --> 勾选不校验安全域名...以及 HTTPS 证书**。\n\n## 🪶 笔记 Notes\n\n[Vercel 托管 Next 实现 GitHub Trending API](https://github.com/Honye/notes/blob/vuepress/React/vercel-github-trending.md)\n\n[小程序使用 IconFont](https://github.com/Honye/notes/blob/vuepress/WeChat/miniprogram-iconfont.md)\n\n[云开发关联表（集合）案例](https://github.com/Hongye567/weapp-mark/wiki/小程序关联表学习)\n\n[写项目时的想法](https://github.com/Hongye567/weapp-mark/wiki/thought)\n\n[边写边记](https://github.com/Hongye567/weapp-mark/wiki/小程序笔记)\n\n[小程序使用外部字体](https://github.com/Honye/notes/blob/vuepress/WeChat/use-other-font.md)\n\n[小程序自定义评分组件 - tempalte 实现（精度 0.1）](https://github.com/Hongye567/weapp-mark/wiki/小程序自定义评分组件-template（精度0.1）)\n\n[小程序自定义评分组件 - Component 实现（精度0.1）](https://github.com/Hongye567/weapp-mark/wiki/小程序自定义评分组件-Component（精度0.1）)\n\n## 📐 结构 Structure\n\n```\n├── apis\n├── assets\n├── components  组件化 Component\n│    ├── cover-page 可下拉关闭的半屏组件\n│    ├── pre-image 图片预加载\n│    ├── rating 评分\n│    └── tabs\n├── cloudfunctions\n├── pages\n│    └── common  模板 template\n│        ├── actionsheet 操作菜单\n│        ├── cell 列表单元\n│        ├── dropmenu 下拉菜单\n│        ├── loading 加载/加载更多\n│        ├── rating  评分\n│        ├── share 底部分享菜单\n│        ├── wxParse  富文本、HTML 和 MD 解析，小程序基础版本库 1.6.6 及以上\n│        └── component.js  wux 针对 template 的组件化，写得挺好，借鉴一下\n├── style\n│    ├── weui.wxss\n│    ├── animate.wxss CSS 动画\n│    └── font-awesome.min.wxss Font Awesome 字体图标\n├── utils\n│    └── wxCloud.js 云函数二次封装\n├── app.js\n├── app.json\n└── app.wxss\n```\n\n## 痛点\n\n- 小程序不支持全局组件，需每个页面都引入组件。如自定义全局提示框\n\n## 🔗 参考 Reference\n\n1. 微信官方UI样式 [weui-wxss](https://github.com/Tencent/weui-wxss/)\n2. 富文本、HTML 和 Markdown 解析 [wxParse](https://github.com/icindy/wxParse)\n3. 针对 template 的自定义组件 [wux](https://github.com/skyvow/wux)\n4. [LeanCloud 云服务](https://leancloud.cn/)提供后台支撑\n5. [云服务开发环境（官方）](https://cloud.tencent.com/document/product/619/11447)\n6. [小程序解决方案（官方）](https://cloud.tencent.com/solution/la)\n"
  },
  {
    "path": "cloudbaserc.json",
    "content": "{\n  \"version\": \"2.0\",\n  \"region\": \"sh\",\n  \"envId\": \"release-5g2g137xcedfade7\",\n  \"functionRoot\": \"./cloudfunctions\",\n  \"functions\": [\n    {\n      \"name\": \"app\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"douban\",\n      \"runtime\": \"Nodejs16.13\",\n      \"triggers\": [\n        {\n          \"name\": \"CronDouban\",\n          \"type\": \"timer\",\n          \"config\": \"0 10 0 * * * *\"\n        }\n      ]\n    },\n    {\n      \"name\": \"favCard\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"fetch\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"getCard\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"getCards\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"getCategories\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"getFavCards\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"initdb\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"login\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"nowPlaying\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"showingSoon\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"site\",\n      \"runtime\": \"Nodejs16.13\",\n      \"permissions\": {\n        \"openapi\": [\n          \"openapi.search.submitPages\"\n        ]\n      }\n    },\n    {\n      \"name\": \"subscribeMessage\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"subscription\",\n      \"runtime\": \"Nodejs16.13\",\n      \"triggers\": [\n        {\n          \"name\": \"trending\",\n          \"type\": \"timer\",\n          \"config\": \"*/10 * * * * * *\"\n        }\n      ],\n      \"permissions\": {\n        \"openapi\": [\n          \"subscribeMessage.send\"\n        ]\n      }\n    },\n    {\n      \"name\": \"wallpaper\",\n      \"runtime\": \"Nodejs16.13\"\n    },\n    {\n      \"name\": \"wxacode\",\n      \"runtime\": \"Nodejs16.13\",\n      \"permissions\": {\n        \"openapi\": [\n          \"wxacode.getUnlimited\",\n          \"wxacode.get\"\n        ]\n      }\n    }\n  ]\n}"
  },
  {
    "path": "cloudfunctions/app/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/app/index.js",
    "content": "const cloud = require('wx-server-sdk');\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\nconst db = cloud.database();\n\nexports.main = async (event, context) => {\n  \n  try {\n    const { data = [] } = await db.collection('app')\n      .orderBy('created_at', 'desc')\n      .limit(1)\n      .get();\n    return data[0];\n  } catch (e) {\n    // 集合不存在\n    if (e.errCode === -502005) {\n      return { version: '0.0.0' };\n    }\n    throw e;\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/app/package.json",
    "content": "{\n  \"name\": \"app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.3.3\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/douban/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  },\n  \"triggers\": [\n    {\n      \"name\": \"CronDouban\",\n      \"type\": \"timer\",\n      \"config\": \"0 10 0 * * * *\"\n    }\n  ]\n}"
  },
  {
    "path": "cloudfunctions/douban/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\nconst fetch = require('node-fetch');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\nconst { request } = require('./request.js');\nconst db = cloud.database();\n\n/**\n * 云函数入口函数\n * @param {object} event\n * @param {'cron'|'api.proxy'|'login'|'logout'|'fetch'} [event.action]\n * @param {object} [event.payload]\n */ \nexports.main = async (event, context) => {\n  /** 默认视为定时任务 */\n  const { action = 'cron' } = event;\n  switch (action) {\n    case 'cron':\n      /** 每日定时存储每日卡片信息 */\n      await storeTodayItem();\n      break;\n    case 'api.proxy':\n      // case 代理接口请求，伪装请求\n      return apiProxy(event.payload);\n    case 'login':\n      return login(event.payload);\n    case 'logout':\n      return logout();\n    case 'fetch': {\n      const { url, ...payload } = event.payload;\n      return fetch(url, payload).then((resp) => resp.json());\n    }\n    default:\n  }\n\n  const wxContext = cloud.getWXContext()\n\n  return {\n    event,\n    openid: wxContext.OPENID,\n    appid: wxContext.APPID,\n    unionid: wxContext.UNIONID,\n  }\n}\n\n/**\n * 将今日豆瓣日历卡片存入集合\n * \n * - 用于定时任务\n */\nconst storeTodayItem = async () => {\n  // 云函数默认时区为 UTC+0\n  const res = await request({\n    headers: {\n      'User-Agent': 'api-client/0.1.3 com.douban.frodo/8.0.0'\n    },\n    path: '/calendar/today',\n    data: {\n      date: new Intl.DateTimeFormat('zh-CN').format().replace(/\\//g, '-'),\n      alt: 'json',\n      _sig: 'tuOyn+2uZDBFGAFBLklc2GkuQk4=',\n      _ts: 1610703479,\n      apiKey: '0ab215a8b1977939201640fa14c66bab'\n    }\n  });\n  return db.collection('cards').add({\n    data: {\n      createTime: db.serverDate(),\n      image: res.comment.poster,\n      likeCount: 0,\n      movieId: res.subject.id,\n      quote: res.comment.content,\n      shareCount: 0,\n      source: `《${res.subject.title}》`\n    }\n  });\n}\n\n/**\n * 存储登录用户信息及 token\n * @param {object} params\n * @param {string} params.uid\n * @param {string} params.user_name\n * @param {string} params.access_token\n * @param {string} params.refresh_token\n * @param {number} params.expires_in token 有效时间，秒为单位\n */\nconst login = async (params) => {\n  const wxContext = cloud.getWXContext();\n  const userCollection = db.collection('users');\n  const { data: users = [] } = await userCollection\n    .where({\n      openid: wxContext.OPENID\n    })\n    .limit(1)\n    .get();\n  const user = users[0];\n  if (user) {\n    const { expires_in: expiresIn, ...douban } = params;\n    const updateData = {\n      douban: {\n        ...douban,\n        expires_at: db.serverDate({\n          offset: (expiresIn - 60) * 1000\n        })\n      },\n      update_at: db.serverDate()\n    };\n    const { _id, ...profile } = user;\n    return await userCollection.doc(_id)\n      .set({\n        data: { ...profile, ...updateData },\n      });\n  }\n  throw new Error(`user openid=${wxContext.OPENID} not found`);\n}\n\nconst logout = async () => {\n  const wxContext = cloud.getWXContext();\n  const usersCollection = db.collection('users');\n  const user = await usersCollection\n    .where({ openid: wxContext.OPENID })\n    .limit(1)\n    .get()\n    .then(({ data }) => data[0]);\n  \n  if (user) {\n    return usersCollection.doc(user._id)\n      .update({\n        data: { douban: null },\n        update_at: db.serverDate(),\n      });\n  }\n\n  throw new Error(`user openid=${wxContext.OPENID} not found`);\n};\n\n/**\n * \n * @param {WechatMiniprogram.RequestOption} params\n */\nconst apiProxy = (params) => {\n  const headers = Object.assign({},\n    {\n      Referer: 'https://servicewechat.com/wx2f9b06c1de1ccfca/81/page-frame.html',\n      'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.2(0x18000236) NetType/WIFI Language/en'\n    },\n    params.header\n  );\n  return request({\n    url: params.url,\n    method: params.method,\n    data: params.data,\n    headers\n  });\n}\n\n/**\n * @typedef {'movie_showing'|'movie_soon'} RankType\n */\n\n/**\n * 各个排行榜\n * @param {object} params\n * @param {RankType} params.type\n * @param {object} params.params\n */\nconst getRankList = async (params) => {\n  const collectionName = params.type;\n  /** @type {Record<RankType, string>} */\n  const names = {\n    movie_showing: '正在热映',\n    movie_soon: '即将上映'\n  };\n  /**\n   * @type {{\n   * _id: string;\n   * update_time: Date;\n   * }}\n   */\n  let stored;\n  try {\n    const ranks = await db.collection(collectionName)\n    .where({ key: collectionName })\n    .limit(1)\n    .get();\n    stored = ranks[0];\n  } catch (e) {\n    if (e.errCode === -502005) {\n      await db.createCollection(collectionName);\n    }\n  }\n  if (stored && stored.update_time.getTime() + 2 * 60 * 60 * 1000 > Date.now()) {\n    // 每两小时一更新\n    return stored.data;\n  }\n\n  const res = await apiProxy(params.params);\n  if (stored) {\n    // case 更新\n    db.collection(collectionName)\n      .doc(stored._id)\n      .update({\n        data: {\n          update_time: db.serverDate(),\n          data: res\n        }\n      });\n  } else {\n    // case 存储\n    db.collection(collectionName)\n      .add({\n        data: {\n          key: collectionName,\n          title: names[collectionName],\n          create_time: db.serverDate(),\n          update_time: db.serverDate(),\n          data: res\n        }\n      });\n  }\n  return res;\n}\n"
  },
  {
    "path": "cloudfunctions/douban/package.json",
    "content": "{\n  \"name\": \"douban\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"node-fetch\": \"^2.6.1\",\n    \"wx-server-sdk\": \"~2.3.3\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/douban/request.d.ts",
    "content": "export const request: (params: {\n  headers?: Record<string, string>\n  url?: string\n  path?: string\n  method?: 'GET'\n  data?: Record<string, unknown>\n}) => Promise<unknown>\n"
  },
  {
    "path": "cloudfunctions/douban/request.js",
    "content": "const cloud = require('wx-server-sdk');\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\nconst fetch = require('node-fetch');\nconst qs = require('querystring');\nconst API_BASE = 'https://frodo.douban.com/api/v2';\nconst API_KEY = '054022eaeae0b00e0fc068c0c0a2102a';\n\n/**\n * \n * @param {object} params\n * @param {object} [params.headers]\n * @param {string} [params.url]\n * @param {string} [params.path]\n * @param {'GET'} [params.method]\n * @param {object} [params.data]\n */\nconst request = async (params = {}) => {\n  params.url = params.url || `${API_BASE}${params.path}`;\n  delete params.path;\n  params.data = {\n    apikey: API_KEY,\n    ...(params.data || {})\n  };\n  if ((params.method || 'GET') === 'GET' && params.data) {\n    params.url += '?' + qs.stringify(params.data);\n    delete params.data;\n  }\n  return fetch(\n    params.url,\n    {\n      headers: params.headers,\n      method: params.method || 'GET',\n      body: params.data\n    }\n  )\n    .then((resp) => resp.json());\n}\n\nmodule.exports = {\n  request\n}\n"
  },
  {
    "path": "cloudfunctions/favArticle/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init(\n  // {\n  //   env: 'dv-963c46'\n  // }\n)\n\nconst db = cloud.database()\n\n/** 与用户关联 */\nconst relateUser = (event, context) => {\n    const { userInfo: { openId }, id: articleID } = event\n    return new Promise((resolve, reject) => {\n        db.collection('userRelations').where({\n            _openid: openId,\n        }).get().then(({ data }) => {\n            if (data.length) {\n                let { favoriteArticles } = data[0]\n                const has = favoriteArticles && favoriteArticles.includes(articleID)\n                if (typeof favoriteArticles === 'undefined') {\n                    favoriteArticles = [articleID]\n                } else if (has) {\n                    favoriteArticles = favoriteArticles.filter(item => item !== articleID)\n                } else {\n                    favoriteArticles = Array.from(new Set([articleID, ...favoriteArticles]))\n                }\n                db.collection('userRelations').doc(data[0]._id).update({\n                    data: { favoriteArticles }\n                }).then(res => {\n                    resolve({ message: has ? '取消喜欢' : '喜欢成功' })\n                })\n            } else {\n                db.collection('userRelations').add({\n                    data: {\n                        _openid: openId,\n                        favoriteArticles: [articleID],\n                    }\n                }).then(res => {\n                    resolve({ message: '喜欢成功' })\n                })\n            }\n        }).catch(err => {\n            reject(err)\n        })\n    })\n}\n\n/** 与文章关联 */\nconst relateArticle = (event, context) => {\n    const { userInfo: { openId }, id: articleID } = event\n    return new Promise((resolve, reject) => {\n        db.collection('articleRelations').where({\n            id: articleID,\n        }).get().then(({ data }) => {\n            if (data.length) {\n                let { users } = data[0]\n                const has = users && users.includes(openId)\n                if (typeof users === 'undefined') {\n                    users = [openId]\n                } else if (has) {\n                    users = users.filter(item => item !== openId)\n                } else {\n                    users = Array.from(new Set([openId, ...users]))\n                }\n                db.collection('articleRelations').doc(data[0]._id).update({\n                    data: { users }\n                }).then( res => {\n                    resolve({ message: has ? '取消喜欢' : '喜欢成功' })\n                }).catch( err => {\n                    reject(err)\n                })\n            } else {\n                db.collection('articleRelations').add({\n                    data: {\n                        id: articleID,\n                        users: [openId],\n                    }\n                }).then( res => {\n                    resolve({ message: '喜欢成功' })\n                }).catch( err => {\n                    reject(err)\n                })\n            }\n        }).catch( err => {\n            reject(err)\n        })\n    })\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n    return Promise.all([\n        relateUser(event, context),\n        relateArticle(event, context)\n    ]).then( values => values[0] || values)\n}"
  },
  {
    "path": "cloudfunctions/favArticle/package.json",
    "content": "{\n  \"name\": \"favArticle\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/favCard/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\nconst db = cloud.database();\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const { id: cardID } = event;\n  const { OPENID } = cloud.getWXContext();\n  const collectionName = 'card_like';\n  let record;\n  try {\n    const records = await db.collection(collectionName)\n      .where({\n        openid: OPENID,\n        card_id: cardID\n      })\n      .limit(1)\n      .get();\n    record = records.data[0];\n  } catch (e) {\n    if (e.errCode === -502005) {\n      /** 集合不存在，新创建集合 */\n      await db.createCollection(collectionName);\n    }\n  }\n\n  if (record) {\n    return await db.collection(collectionName)\n      .doc(record._id)\n      .update({\n        data: {\n          update_at: db.serverDate(),\n          state: Number(!record.state)\n        }\n      });\n  }\n\n  /** 不存在集合时肯定是做喜欢操作 */\n  return await db.collection(collectionName)\n    .add({\n      data: {\n        openid: OPENID,\n        create_at: db.serverDate(),\n        update_at: db.serverDate(),\n        card_id: cardID,\n        state: 1\n      }\n    });\n}\n"
  },
  {
    "path": "cloudfunctions/favCard/package.json",
    "content": "{\n  \"name\": \"favCard\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/fetch/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/fetch/index.js",
    "content": "const cloud = require('wx-server-sdk')\nconst fetch = require('node-fetch')\n\ncloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })\n\nexports.main = async (event, context) => {\n  const { url, ...options } = event\n  return fetch(url, options)\n    .then((resp) => {\n      const data = resp.json()\n      if (resp.ok) {\n        return data\n      }\n      return Promise.reject(data)\n    })\n}"
  },
  {
    "path": "cloudfunctions/fetch/package.json",
    "content": "{\n  \"name\": \"fetch\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"node-fetch\": \"~2.6.12\",\n    \"wx-server-sdk\": \"~2.6.3\"\n  }\n}"
  },
  {
    "path": "cloudfunctions/getArticleDetails/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init(\n  // {\n  //   env: 'dv-963c46'\n  // }\n)\n\nconst db = cloud.database()\n\n/** 获取是否喜欢 */\nconst getFavStatus = (event, context) => {\n    const { userInfo: { openId }, id: articleID } = event\n    return db.collection('userRelations').where({\n        _openid: openId,\n    }).get().then(({ data }) => {\n        let result = false\n        if (data.length) {\n            result = data[0].favoriteArticles && data[0].favoriteArticles.includes(articleID)\n        }\n        return {\n            data: result,\n            message: 'success',\n        }\n    }).catch( err => {\n        return Promise.reject({\n            data: false,\n            message: err.errMsg || JSON.stringify(err),\n        })\n    })\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n    return getFavStatus(event, context)\n}"
  },
  {
    "path": "cloudfunctions/getArticleDetails/package.json",
    "content": "{\n  \"name\": \"getArticleDetails\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/getCard/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/getCard/index.js",
    "content": "const cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV,\n});\n\nconst db = cloud.database();\nconst _ = db.command;\nconst $ = _.aggregate;\n\nexports.main = async (event, context) => {\n  const wxContext = cloud.getWXContext();\n  const openid = wxContext.OPENID;\n  const _id = event._id;\n\n  const promiseCard = db.collection('cards').doc(_id).get().then(({ data }) => data);\n  const promiseLiked =\n    db.collection('card_like')\n      .where({ card_id: _id, state: 1 })\n      .count()\n      .then(({ total }) => total);\n  const promiseState =\n    db.collection('card_like')\n      .where({ card_id: _id, openid })\n      .limit(1)\n      .get()\n      .then(({ data }) => data[0] && data[0].state);\n\n  const [card, liked, state] = await Promise.all([promiseCard, promiseLiked, promiseState]);\n\n  return {\n    ...card,\n    like_count: liked,\n    like_state: state,\n  };\n}\n"
  },
  {
    "path": "cloudfunctions/getCard/package.json",
    "content": "{\n  \"name\": \"getCard\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.6.1\"\n  }\n}"
  },
  {
    "path": "cloudfunctions/getCards/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\nconst db = cloud.database();\nconst _ = db.command;\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const $ = db.command.aggregate;\n  const { OPENID } = cloud.getWXContext();\n  const res = await db.collection('cards').aggregate()\n    .sort({\n      createTime: -1\n    })\n    .limit(6)\n    .lookup({\n      from: 'card_like',\n      let: {\n        card_id: '$_id'\n      },\n      pipeline: $.pipeline()\n        .match(_.expr($.and([\n          $.eq(['$card_id', '$$card_id']),\n          $.eq(['$state', 1])\n        ])))\n        .done(),\n      as: 'like_list'\n    })\n    .addFields({\n      like_count: $.size('$like_list')\n    })\n    .addFields({\n      like_state: $.let({\n        vars: {\n          filtered: $.filter({\n            input: '$like_list',\n            as: 'item',\n            cond: $.and($.eq(['$$item.openid', OPENID]), $.eq(['$$item.state', 1]))\n          })\n        },\n        in: $.reduce({\n          input: '$$filtered',\n          initialValue: 0,\n          in: '$$this.state'\n        })\n      })\n    })\n    .end();\n  return res;\n}\n"
  },
  {
    "path": "cloudfunctions/getCards/package.json",
    "content": "{\n  \"name\": \"getCards\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/getCategories/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })\n\nconst db = cloud.database()\nconst _ = db.command\n\nconst getCategories = async (event, context) => {\n  let ret = []\n  let message = 'success'\n\n  const pidData = await db.collection('categories')\n    .aggregate()\n    .group({\n      _id: '$pid',\n    })\n    .sort({\n      _id: 1\n    })\n    .end()\n  \n  const pids = pidData.list || []\n  for (let i = 0, len = pids.length; i < len; ++i) {\n    const pCateData = await db.collection('categories')\n      .where({\n        id: pids[i]._id,\n      })\n      .get()\n    if (pCateData.data && pCateData.data.length) {\n      const pCate = pCateData.data[0]\n      const children = await db.collection('categories')\n        .where({\n          pid: pCate.id,\n          id: _.neq(pCate.id),\n        })\n        .get()\n        .then(({ data = [] }) => data)\n      pCate.children = children\n      ret.push(pCate)\n    } else {\n      console.log(`未找到 id 为 \\`${pids[i]._id}\\` 的分类`)\n    }\n  }\n  return {\n    data: ret,\n    message,\n  }\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  return getCategories(event, context)\n}"
  },
  {
    "path": "cloudfunctions/getCategories/package.json",
    "content": "{\n  \"name\": \"getCategories\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}"
  },
  {
    "path": "cloudfunctions/getFavArticles/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init(\n  // {\n  //   env: 'dv-963c46'\n  // }\n)\n\nconst db = cloud.database()\nconst _= db.command\n\n/** 获取喜欢的影单 */\nconst getFavArticles = (event, context) => {\n    const { userInfo: { openId } } = event\n    return db.collection('userRelations').where({\n        _openid: openId,\n    }).get().then(({ data }) => {\n        if (data.length) {\n            return db.collection('articles').where({\n                id: _.in(data[0].favoriteArticles ? data[0].favoriteArticles.map(item => Number(item)) : []),\n            }).field({\n                id: true,\n                image: true,\n                likeCount: true,\n                title: true,\n            }).get().then(({ data }) => {\n                return {\n                    data,\n                    message: 'success',\n                }\n            }).catch( err => {\n                console.error('*** 错误 ***', err)\n                return Promise.reject({\n                    data: [],\n                    message: err.errMsg || JSON.stringify(err)\n                })\n            })\n        } else {\n            return {\n                data: [],\n                message: 'success',\n            }\n        }\n    }).catch( err => {\n        console.error('*** 错误 ***', err)\n        return Promise.reject({\n            data: [],\n            message: err.errMsg || JSON.stringify(err)\n        })\n    })\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n    return getFavArticles(event, context)\n}"
  },
  {
    "path": "cloudfunctions/getFavArticles/package.json",
    "content": "{\n  \"name\": \"getFavArticles\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/getFavCards/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init({\n    env: cloud.DYNAMIC_CURRENT_ENV,\n})\n\nconst db = cloud.database()\nconst _ = db.command\nconst $ = _.aggregate\n\n/** 获取用户喜欢的卡片 */\nconst getFavCards = async (event, context) => {\n    // const { userInfo: { openId } } = event\n    const { OPENID: openId } = cloud.getWXContext();\n    const records = await db.collection('card_like')\n        .aggregate()\n        .match({\n            openid: openId,\n            state: 1,\n        })\n        .lookup({\n            from: 'cards',\n            localField: 'card_id',\n            foreignField: '_id',\n            as: 'card_detail',\n        })\n        // 过滤掉卡片已不存在（删除）的数据\n        .match({\n            card_detail: _.elemMatch({\n                _id: _.exists(true),\n            }),\n        })\n        // 只返回卡片信息\n        .replaceRoot({\n            newRoot: $.arrayElemAt(['$card_detail', 0]),\n        })\n        .end();\n    return records;\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n    return getFavCards(event, context)\n}"
  },
  {
    "path": "cloudfunctions/getFavCards/package.json",
    "content": "{\n  \"name\": \"getFavCards\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/github/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/github/fetch.js",
    "content": "/**\n * [GitHub REST API](https://docs.github.com/en/rest) 封装\n * \n * 使用原生 fetch api\n * \n */\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\nconst fetch = require('node-fetch');\nconst qs = require('querystring');\nconst db = cloud.database();\nconst baseURL = 'https://api.github.com';\n\n/**\n * \n * @param {object} params\n * @param {string} [params.url]\n * @param {string} params.path\n * @param {'GET'|'POST'} [params.method]\n * @param {Record<string, any>} params.data\n */\nconst request = async (params = {}) => {\n  let token;\n  try {\n    token = await getToken();\n  } catch (e) {\n    console.warn(e);\n  }\n\n  params.url = params.url || `${baseURL}${params.path}`;\n  delete params.path;\n  if ((params.method || 'GET') === 'GET') {\n    params.url += '?' + qs.stringify(params.data);\n    delete params.data;\n  }\n  return fetch(params.url, {\n    headers: {\n      Accept: 'application/vnd.github.v3+json',\n      Authorization: `token ${token}`,\n    },\n    method: params.method || 'GET',\n    body: params.data\n  });\n};\n\n/**\n * \n * @returns {Promise<void|string>}\n */\nconst getToken = async () => {\n  const users = db.collection('users');\n  const context =  cloud.getWXContext();\n  const openId = context.OPENID;\n  const { data: [user] } = await users.where({\n    openid: openId\n  })\n    .limit(1)\n    .get();\n  if (!user) {\n    return;\n  }\n  return user.githubToken;\n};\n\nmodule.exports = {\n  request\n};"
  },
  {
    "path": "cloudfunctions/github/index.js",
    "content": "/**\n * GitHub 相关云函数入口\n */\n\n/**\n * @typedef {object} ResponseType 云函数调用成功响应\n * @property {number} code 0：成功；-1：失败\n * @property {any} data 请求结果\n * @property {string} message 请求信息\n */\n\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\nconst { request } = require('./fetch');\nconst db = cloud.database();\n\n/**\n * 云函数入口函数\n * @param {object} event\n * @param {string} event.action\n * @param {object} event.data\n */\nexports.main = async (event, context) => {\n  const { action } = event;\n  switch (action) {\n    case 'setAccessToken':\n      return setAccessToken(event.data);\n    case 'getStarredList':\n      return getStarredList(event.data);\n    case 'removeAccessToken':\n      return removeAccessToken(event.data);\n    case 'homePage':\n      return getHomePage(event.data);\n    default:\n  }\n}\n\nconst queryUser = async () => {\n  const users = db.collection('users');\n  const context = cloud.getWXContext();\n  const openId = context.OPENID;\n  const { data: [user] } = await users.where({ openid: openId })\n    .limit(1)\n    .get();\n  return user;\n};\n\n/**\n * 设置 GitHub AccessToken\n * \n * [new token](https://github.com/settings/tokens/new)\n * \n * @param {object} params\n * @param {string} params.token\n */\nconst setAccessToken = async (params) => {\n  const users = db.collection('users');\n  const context = cloud.getWXContext();\n  const openId = context.OPENID;\n  const updateTime = new Date();\n  const { data: [user] } = await users.where({\n    openid: openId\n  })\n    .limit(1)\n    .get();\n  \n  if (!user) {\n    /** @type {ResponseType} */\n    const ret = {\n      code: -1,\n      message: 'user not found',\n    };\n    return ret;\n  }\n\n  await users.doc(user._id)\n    .update({\n      data: {\n        update_at: updateTime,\n        githubToken: params.token\n      }\n    });\n  \n  /** @type {ResponseType} */\n  const ret = {\n    code: 0,\n    message: 'set github token success'\n  };\n  return ret;\n};\n\nconst removeAccessToken = async () => {\n  const user = await queryUser();\n  /** @type {ResponseType} */\n  const ret = {\n    code: 0,\n    message: 'remove github token success'\n  };\n  if (!user) {\n    ret.code = -1;\n    ret.message = 'user not found';\n    return ret;\n  }\n  const users = db.collection('users');\n  await users.doc(user._id)\n    .update({\n      data: {\n        update_at: db.serverDate(),\n        githubToken: null\n      }\n    });\n  return ret;\n};\n\n/**\n * 获取用户 Star repositories\n * \n * [List repositories starred by the authenticated user](https://docs.github.com/en/rest/reference/activity#list-repositories-starred-by-the-authenticated-user)\n * \n * @param {object} params\n * @param {'created'|'updated'} params.sort\n * @param {'asc'|'desc'} params.direction\n * @param {number} params.per_page max 100\n * @param {number} params.page\n */\nconst getStarredList = async (params) => {\n  const resp = await request({\n    path: '/user/starred',\n    data: params\n  })\n    .then(resp => resp.json());\n  return {\n    code: 0,\n    data: resp\n  };\n};\n\n/**\n * GitHub user home page info\n * \n * @param {object} params\n * @param {string} params.user\n */\nconst getHomePage = async (params) => {\n  return request({\n    url: `https://www.imarkr.com/api/github/${params.user}`\n  }).then((resp) => resp.json());\n};\n"
  },
  {
    "path": "cloudfunctions/github/package.json",
    "content": "{\n  \"name\": \"github\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"node-fetch\": \"^2.6.1\",\n    \"wx-server-sdk\": \"~2.3.2\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/initdb/index.js",
    "content": "const cloud = require('wx-server-sdk')\n\ncloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })\n\nconst db = cloud.database()\n\n/**\n * 初始化表 banners\n */\nconst initBanners = async () => {\n    console.log('*** start initBanners ***')\n    const collection = 'banners'\n    await db.createCollection(collection)\n        .catch((e) => {\n            // 集合已存在\n        })\n    const banners = [{\n            image: 'http://static.zhidao.manmankan.com/kimages/201609/26_1474884213331602.jpg',\n            type: 'image',\n        },\n        {\n            image: 'http://www.stdaily.com/zhuanti01/2017sc/2017-09/29/581248/images/188f4c63b10547bebf39131bb25c1162.png',\n            type: '',\n        },\n        {\n            image: 'https://pbs.twimg.com/media/Cr9fC-dUMAABqEC.jpg',\n        },\n    ]\n    let docLength = 0\n    await db.collection(collection)\n        .get()\n        .then(({ data }) => {\n            docLength = data.length\n        })\n    for (let i = 0, length = banners.length; i < length; ++i) {\n        await db.collection(collection).add({\n            data: {\n                id: docLength + i + 1,\n                createTime: db.serverDate(),\n                ...banners[i]\n            }\n        }).then(res => {\n            console.log('*** add banner successed ***', res)\n        }).catch(err => {\n            console.error('*** add banner failed ***', err)\n        })\n    }\n    console.log('*** initBanners finished ***')\n}\n\n/**\n * 初始化表 articles\n */\nconst initArticles = async () => {\n    console.log('*** start init articles ***')\n    const articles = [\n        {\n            id: 1125,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-12-21_5a3b66c4e3c92.jpg\",\n            title: \"那些温情电影都告诉了我们什么？！\",\n            likeCount: 104\n        },\n        {\n            id: 1118,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-12-17_5a362f082c25f.jpg\",\n            title: \"我想知道流星能飞多久\",\n            likeCount: 99\n        },\n        {\n            id: 1119,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-12-18_5a376fc20e33e.jpg\",\n            title: \"《月升王国》谁说大人的世界没有童话？\",\n            likeCount: 33\n        },\n        {\n            id: 1102,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-12-03_5a236db32a980.jpg\",\n            title: \"每一个童年都值得被爱：《西葫芦的生活》\",\n            likeCount: 69\n        },\n        {\n            id: 1074,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-11-04_59fd63d65798d.jpg\",\n            title: \"《蝴蝶梦》：她低到了尘埃里，终将摆脱前任的阴影\",\n            likeCount: 25\n        },\n        {\n            id: 1062,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-10-27_59f2d62abb85d.jpg\",\n            title: \"《生吃》才不是史上最恐怖的影片，但成长确实是一个思之极恐的过程\",\n            likeCount: 107\n        },\n        {\n            id: 1059,\n            image: \"http://7xqnv7.com2.z0.glb.qiniucdn.com/2017-10-27_59f2af5ae403b.jpg\",\n            title: \"谁的人生不迷茫？今敏惊悚悬疑电影《未麻的部屋》观影感悟\",\n            likeCount: 55\n        },\n    ]\n    for (let i = 0, length = articles.length; i < length; ++i) {\n        await db.collection('articles').add({\n            data: {\n                createTime: db.serverDate(),\n                ...articles[i]\n            }\n        }).then(res => {\n            console.log('*** add article successed ***', res)\n        }).catch(err => {\n            console.error('*** add article failed ***', err)\n        })\n    }\n    console.log('*** init articles finished ***')\n}\n\n/**\n * 初始化表 cards\n */\nconst initCards = async () => {\n    console.log('*** start init cards ***')\n    const collection = 'cards'\n    await db.createCollection(collection)\n        .catch(() => {\n            // 集合已存在\n        })\n    const cards = [\n        {\n            id: 11,\n            \"image\": \"https://img3.doubanio.com/view/photo/raw/public/p579724050.jpg\",\n            quote: \"人心其实很脆弱，所以我们要经常哄哄它，经常把手放在心脏旁，对自己说：平安无事，平安无事，平安无事……\",\n            source: \"《三傻大闹宝莱坞》\",\n            likeCount: 84,\n            shareCount: 12,\n            movieId: 3793023\n        },\n        {\n            id: 10,\n            image: \"https://img1.doubanio.com/view/photo/raw/public/p2245932509.jpg\",\n            quote: \"当恋爱了，就算最枯燥的工作也能忍受。\",\n            source: \"《海街日记》\",\n            likeCount: 51,\n            shareCount: 10,\n            movieId: 25895901\n        },\n        {\n            id: 9,\n            image: \"https://img1.doubanio.com/view/photo/l/public/p456514379.jpg\",\n            quote: \"为了你在乎的东西值得冒险。\",\n            source: \"《南极大冒险》\",\n            likeCount: 52,\n            shareCount: 11,\n            movieId: 1477448\n        },\n        {\n            id: 8,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p1716666870.jpg\",\n            quote: \"我一直以为最糟糕的情况是你离开我，其实最令我难过的，是你不快乐。\",\n            source: \"《精灵旅社》\",\n            likeCount: 121,\n            shareCount: 19,\n            movieId: 3269068\n        },\n        {\n            id: 7,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p1106861692.jpg\",\n            quote: \"贬低他人，并不会令自己变得多伟大。\",\n            source: \"《贱女孩》\",\n            likeCount: 64,\n            shareCount: 11,\n            movieId: 1309084\n        },\n        {\n            id: 6,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p2374369280.jpg\",\n            quote: \"尽管已提前知晓人生，以及它的走向，我无所畏惧，并且会珍惜每一分钟。\",\n            source: \"《降临》\",\n            likeCount: 63,\n            shareCount: 10,\n            movieId: 21324900\n        },\n        {\n            id: 5,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p1694419516.jpg\",\n            quote: \"不要让别人告诉你，你不能做什么。只要有梦想，就要去追求。那些做不到的人总要告诉你，你也不行。想要什么就得去努力，去追求。\",\n            source: \"《当幸福来敲门》\",\n            likeCount: 74,\n            shareCount: 15,\n            movieId: 1849031\n        },\n        {\n            id: 4,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p1140053562.jpg\",\n            quote: \"真正的失败者不是那些没有赢的人，而是那些害怕失败而不敢尝试的人。\",\n            source: \"《阳光小美女》\",\n            likeCount: 98,\n            shareCount: 18,\n            movieId: 1777612\n        },\n        {\n            id: 3,\n            image: \"https://img3.doubanio.com/view/photo/l/public/p800791080.jpg\",\n            quote: \"探戈走错了可以重来，人生则不可...\",\n            source: \"《闻香识女人》\",\n            likeCount: 81,\n            shareCount: 11,\n            movieId: 1298624\n        }\n    ]\n    for (let i = 0, length = cards.length; i < length; ++i) {\n        await db.collection(collection).add({\n            data: {\n                createTime: db.serverDate(),\n                ...cards[i]\n            }\n        }).then(res => {\n            console.log('*** add card successed ***', res)\n        }).catch(err => {\n            console.error('*** add card failed ***', err)\n        })\n    }\n    console.log('*** init cards finished ***')\n}\n\nexports.main = async(event, context) => {\n    console.log('*** 开始初始化 ***')\n    await initBanners()\n    // await initArticles()\n    await initCards()\n    console.log('*** 初始化结束 ***')\n}"
  },
  {
    "path": "cloudfunctions/initdb/package.json",
    "content": "{\n  \"name\": \"douban\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/login/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/login/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\nconst db = cloud.database();\n\nconst login = async (event, context) => {\n  const wxUserInfo = event.wxUserInfo && event.wxUserInfo.data;\n  if (typeof wxUserInfo === 'object') {\n    // 😞用户表里字段和微信返回的字段大小写不一致，避免存多字段，替换字段\n    wxUserInfo.openid = wxUserInfo.openId || wxUserInfo.openid;\n    delete wxUserInfo.openId;\n    wxUserInfo.unionid = wxUserInfo.unionId || wxUserInfo.unionid;\n    delete wxUserInfo.unionId;\n  }\n\n  try {\n    await db.createCollection('users');\n  } catch (err) {\n    // \"users\" collection already exist\n    // do nothing\n  }\n  const usersCollection = db.collection('users');\n  const wxContext = cloud.getWXContext();\n  const { data: users } = await usersCollection\n    .where({\n      openid: wxContext.OPENID\n    })\n    .limit(1)\n    .get();\n  \n  if (users && users.length) {\n    // case 老用户登录，更新用户信息\n    const user = users[0];\n    const serverDate = db.serverDate();\n    const updateData = {\n      latest_login: serverDate,\n      update_at: serverDate\n    };\n    if (typeof wxUserInfo === 'object') {\n      // 每次登录都更新最新信息\n      updateData.rawData = wxUserInfo;\n      for (const key in wxUserInfo) {\n        if (\n          Object.prototype.hasOwnProperty.call(wxUserInfo, key)\n          && !isInvalid(wxUserInfo[key])\n        ) {\n          updateData[key] = wxUserInfo[key];\n        }\n      }\n    }\n    await usersCollection.doc(user._id)\n      .update({\n        data: updateData\n      });\n    const updatedUser = { ...user, ...updateData };\n    if (updatedUser.douban) {\n      const { expires_at: expiresAt } = updatedUser.douban;\n      if (!expiresAt || new Date(expiresAt).getTime() < Date.now()) {\n        // 豆瓣登录已失效，清除 access_token\n        updatedUser.douban.access_token = '';\n      }\n    }\n    return {\n      data: updatedUser,\n      message: 'cloud.login:ok'\n    };\n  }\n\n  // case 新用户登录\n  const serverDate = db.serverDate();\n  const user = {\n    openid: wxContext.OPENID,\n    appid: wxContext.APPID,\n    unionid: wxContext.UNIONID,\n    create_at: serverDate,\n    update_at: serverDate,\n    latest_login: serverDate\n  };\n  if (typeof wxUserInfo === 'object') {\n    // 每次登录都更新最新信息\n    user.rawData = wxUserInfo;\n    for (const key in wxUserInfo) {\n      if (\n        Object.prototype.hasOwnProperty.call(wxUserInfo, key)\n        && !isInvalid(wxUserInfo[key])\n      ) {\n        user[key] = wxUserInfo[key];\n      }\n    }\n  }\n  const { _id } = await usersCollection.add({\n    data: user\n  });\n  return {\n    data: {\n      _id,\n      ...user\n    },\n    message: 'cloud.login:ok'\n  };\n};\n\nconst isInvalid = (data) => {\n  return data === undefined\n    || data === null\n    || data === ''\n    || (typeof data === 'number' && isNaN(data));\n}\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  return await login(event, context);\n}"
  },
  {
    "path": "cloudfunctions/login/package.json",
    "content": "{\n  \"name\": \"login\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/nowPlaying/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/nowPlaying/fetch.js",
    "content": "const cheerio = require('cheerio');\nconst fetch = require('node-fetch');\n\nconst fetchTrendingList = async () => {\n  const data = await fetch('https://github.com/trending');\n  const $ = cheerio.load(await data.text());\n  const allTitles = $('.Box .Box-row')\n    .get()\n    .map(repo => {\n      const $repo = $(repo);\n      const title = $repo.find('.h3').text().trim();\n      const [owner, name] = title.split('/').map(v => v.trim());\n      return `${owner}/${name}`;\n    });\n  console.log(allTitles);\n};\n\nconst fetchNowPlaying = async () => {\n  const data = await fetch('https://movie.douban.com/cinema/nowplaying/wuhan/');\n  const $ = cheerio.load(await data.text());\n  const movies = $('ul.lists .list-item')\n    .get()\n    .map(movie => {\n      const $movie = $(movie);\n      const id = $movie.attr('id');\n      const title = $movie.attr('data-title');\n      const realTime = $movie.attr('data-release');\n      const duration = $movie.attr('data-duration');\n      const rating = $movie.attr('data-score');\n      const img = $movie.find('.poster img')\n        .attr('src');\n      return {\n        id,\n        title,\n        realTime,\n        durations: [duration],\n        rating,\n        img\n      };\n    });\n  console.log('movies===', movies);\n  return movies;\n};\n\nmodule.exports = {\n  fetchTrendingList,\n  fetchNowPlaying\n};"
  },
  {
    "path": "cloudfunctions/nowPlaying/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\nconst { fetchNowPlaying } = require('./fetch');\n\ncloud.init()\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const list = await fetchNowPlaying();\n  return list;\n}"
  },
  {
    "path": "cloudfunctions/nowPlaying/package.json",
    "content": "{\n  \"name\": \"nowPlaying\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"cheerio\": \"^1.0.0-rc.3\",\n    \"node-fetch\": \"^2.6.1\",\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/showingSoon/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/showingSoon/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\nconst cheerio = require('cheerio');\nconst fetch = require('node-fetch');\n\ncloud.init();\n\nconst fetchShowingSoon = async () => {\n  const data = await fetch('https://movie.douban.com/cinema/later/shanghai/');\n  const $ = cheerio.load(await data.text());\n  const movies = $('#showing-soon .item')\n    .get()\n    .map(movie => {\n      const $movie = $(movie);\n      const title = $movie.find('.intro h3').text().trim();\n      const realTime = $movie.find('.intro li.dt:nth-child(1)').text().trim();\n      const genres = $movie.find('.intro li.dt:nth-child(2)').text().trim();\n      const img = $movie.find('a.thumb img')\n        .attr('src');\n      return {\n        title,\n        realTime,\n        genres,\n        img\n      };\n    });\n  console.log('movies===', movies);\n  return movies;\n};\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const list = await fetchShowingSoon();\n  return list;\n}"
  },
  {
    "path": "cloudfunctions/showingSoon/package.json",
    "content": "{\n  \"name\": \"showingSoon\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"cheerio\": \"^1.0.0-rc.3\",\n    \"node-fetch\": \"^2.6.0\",\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}"
  },
  {
    "path": "cloudfunctions/site/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n      \"openapi.search.submitPages\"\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/site/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })\n\n/**\n * \n * @param {object} event\n * @param {'submitPages'} event.action\n * @param {object} [event.payload = {}]\n * @param {Array<{ path: string; query: string; }>} [event.payload.pages]\n */\nexports.main = async (event, context) => {\n  const { action, payload = {} } = event;\n\n  switch (action) {\n    case 'submitPages':\n      return await cloud.openapi.search.submitPages(payload);\n    default:\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/site/package.json",
    "content": "{\n  \"name\": \"site\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.4.0\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/subscribeMessage/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk')\n\ncloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })\n\n// 云函数入口函数\nexports.main = async () => {\n  const wxContext = cloud.getWXContext()\n  console.log('openid==>', wxContext.OPENID)\n\n  try {\n    const result = await cloud.openapi.subscribeMessage.send({\n      touser: wxContext.OPENID,\n      templateId: 'sJz8Heo9GSqMwhnJFlpEHbm-rmIhUlhOkEOoSvY6BwE',\n      data: {\n        thing1: {\n          value: '《Dr.STONE》',\n        },\n        time2: {\n          value: '2019-12-16 10:00:00'\n        },\n        name3: {\n          value: 'Honye'\n        },\n      }\n    })\n    return result\n  } catch (err) {\n    console.error(err)\n    return err\n  }\n}"
  },
  {
    "path": "cloudfunctions/subscribeMessage/package.json",
    "content": "{\n  \"name\": \"subscribeMessage\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/subscription/config.json",
    "content": "{\n  \"triggers\": [\n    {\n      \"name\": \"trending\",\n      \"type\": \"timer\",\n      \"config\": \"*/10 * * * * * *\"\n    }\n  ],\n  \"permissions\": {\n    \"openapi\": [\n      \"subscribeMessage.send\"\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/subscription/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\nconst db = cloud.database();\n\nconst send = async (openid, data) => {\n  return await cloud.openapi.subscribeMessage.send({\n    touser: openid,\n    templateId: 'sJz8Heo9GSqMwhnJFlpEHbm-rmIhUlhOkEOoSvY6BwE',\n    data: {\n      thing1: {\n        value: '《Dr.STONE》',\n      },\n      time2: {\n        value: '2019-12-16 10:00:00'\n      },\n      name3: {\n        value: 'Honye'\n      },\n    }\n  })\n};\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const usersCollection = db.collection('users');\n  const { data: users } = await usersCollection\n    .limit(1)\n    .get();\n  for (const user of users) {\n    await send(user.openid);\n  }\n\n  return {\n    data: null,\n    message: 'cloud.subscription:ok'\n  }\n}"
  },
  {
    "path": "cloudfunctions/subscription/package.json",
    "content": "{\n  \"name\": \"subscription\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/trending/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/trending/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\nconst fetch = require('node-fetch');\nconst cheerio = require('cheerio');\nconst qs = require('querystring');\n\n/**\n * 已迁移至 Vercel\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst usedInVercel = async () => {\n  const data = await fetch('https://github.com/trending');\n  const $ = cheerio.load(await data.text());\n  const list = $('.Box .Box-row')\n    .get()\n    .map(repo => {\n      const $repo = $(repo);\n      const title = $repo.find('.h3').text().trim();\n      const [owner, name] = title.split('/').map(v => v.trim());\n      const description = $(($repo.children())[2]).text().trim();\n      const language = $repo.find('[itemprop=\"programmingLanguage\"]').text().trim();\n      const starCount = $repo.find('[aria-label=\"star\"].octicon.octicon-star').parent().text().trim();\n      return {\n        owner: {\n          login: owner,\n          avatar_url: `https://github.com/${owner}.png`\n        },\n        name,\n        description,\n        language,\n        stargazers_count: starCount\n      };\n    });\n  return list;\n};\n\nconst fetchTrendingList = async (params) => {\n  let url = 'https://www.imarkr.com/api/trending';\n  if (params) {\n    const query = qs.stringify(params);\n    if (query) {\n      url += `?${query}`;\n    }\n  }\n  const data = await fetch(url).then((resp) => resp.json());\n  return data;\n}\n\n/**\n * 云函数入口函数\n * \n * @param {object} event\n * @param {string} [event.language]\n * @param {'daily'|'weekly'|'monthly'} [event.since]\n * @param {string} [event.spoken_language_code]\n */\nexports.main = async (event, context) => {\n  return fetchTrendingList(event);\n}"
  },
  {
    "path": "cloudfunctions/trending/package.json",
    "content": "{\n  \"name\": \"trending\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"cheerio\": \"^1.0.0-rc.5\",\n    \"node-fetch\": \"^2.6.1\",\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}\n"
  },
  {
    "path": "cloudfunctions/wallpaper/index.js",
    "content": "const fetch = require('node-fetch')\n\nconst fetchCategories = async () => {\n  const res = await fetch('http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAllCategories')\n    .then((resp) => {\n      const data = resp.json()\n      if (resp.ok) return data\n      return Promise.reject(data)\n    })\n  await Promise.allSettled(\n    Object.values(res.data).map((c) =>\n      fetchListByCategory({ cid: c.id, count: 1 })\n        .then((w) => c.cover = w.data[0]?.url)\n    )\n  )\n  return res\n}\n\nconst fetchListByCategory = async (data) => {\n  const base = 'http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAppsByCategory'\n  const params = new URLSearchParams(data)\n  const url = `${base}&${params}`\n  return fetch(url)\n    .then((resp) => {\n      const data = resp.json()\n      if (resp.ok) return data\n      return Promise.reject(data)\n    })\n}\n\nexports.main = async (event, context) => {\n  const { action, payload } = event\n  return { fetchCategories, fetchListByCategory }[action]?.(payload)\n}\n"
  },
  {
    "path": "cloudfunctions/wallpaper/package.json",
    "content": "{\n  \"name\": \"wallpaper\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"node-fetch\": \"~2.6.12\",\n    \"wx-server-sdk\": \"~2.6.3\"\n  }\n}"
  },
  {
    "path": "cloudfunctions/wxacode/config.json",
    "content": "{\n  \"permissions\": {\n    \"openapi\": [\n      \"wxacode.getUnlimited\",\n      \"wxacode.get\"\n    ]\n  }\n}"
  },
  {
    "path": "cloudfunctions/wxacode/index.js",
    "content": "// 云函数入口文件\nconst cloud = require('wx-server-sdk');\n\ncloud.init({\n  env: cloud.DYNAMIC_CURRENT_ENV\n});\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  const { contentType, buffer } = await cloud.openapi.wxacode.get({\n    path: 'pages/tabs/discovery/discovery'\n  });\n  const base64 = buffer.toString('base64');\n  return `data:${contentType};base64,${base64}`;\n}"
  },
  {
    "path": "cloudfunctions/wxacode/package.json",
    "content": "{\n  \"name\": \"wxacode\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"wx-server-sdk\": \"~2.2.0\"\n  }\n}\n"
  },
  {
    "path": "docs/云开发环境初始化.md",
    "content": "# 云开发环境初始化\n\n## 创建环境\n\n登录腾讯云[云开发控制台](https://console.cloud.tencent.com/tcb/platform/env)\n\n在环境管理创建一个环境，如果已有环境可跳过这一步\n\n可以在网页端的控制台创建环境也可在微信开发者工具的云开发面板创建环境\n\n![CloudBase Env](./screenshots/cloudbase_env.png)\n\n## 部署云函数\n\n可以使用微信开发者工具部署，也可以使用 CloudBase CLI 部署\n\n微信开发者工具只能逐个部署，但稳\n\nCloudBase CLI 可以批量部署，但可能会出现异常\n\n### 使用微信开发者工具部署\n\n右键项目根目录下 `/cloudfunctions/` 目录选择当前环境\n\n![](./screenshots/function_env.png)\n\n选择 `/cloudfunctions/` 目录下的一级目录创建并部署云函数\n\n![](./screenshots/function_deploy.png)\n\n### 使用 CloudBase CLI 部署\n\n将项目根目录下的 `/cloudbaserc.json` 中的 `envId` 和 `region` 改为自己的环境 id 和地域\n\n| 地域 | 全称 | 缩写 |\n| :--- | :--- | :--- |\n| 上海 | `ap-shanghai` | `sh` |\n| 广州 | `ap-guangzhou` | `gz` |\n| 北京 | `ap-beijing` | `bj` |\n\n```json\n{\n  \"envId\": \"release-5g2g137xcedfade7\",\n  \"region\": \"sh\"\n}\n```\n\n全局安装 CloudBase CLI。可选择你喜欢的任意包管理工具，这里使用 pnpm 作为示例\n\n```shell\npnpm add -g @cloudbase/cli\ntcb -v\n```\n\n执行如下命令通过网页授权登录\n\n```shell\ntcb login\n```\n\n部署云函数\n\n```shell\ntcb fn deploy\n```\n\n云函数部署成功后微信开发者工具会显示为绿色\n\n![云函数部署成功示意图](./screenshots/function_deployed.png)\n\n## 初始化集合数据\n\n终端进入 `/cloudfunctions/initdb/` 安装依赖\n\n```shell\npnpm i\n```\n\n在微信开发者工具右键目录 `/cloudfunctions/initdb/` 开启云函数本地调试，手动调用一次云函数 `initdb` 即可"
  },
  {
    "path": "jest.config.js",
    "content": "/*\n * For a detailed explanation regarding each configuration property and type check, visit:\n * https://jestjs.io/docs/configuration\n */\n\nexport default {\n  // All imported modules in your tests should be mocked automatically\n  // automock: false,\n\n  // Stop running tests after `n` failures\n  // bail: 0,\n\n  // The directory where Jest should store its cached dependency information\n  // cacheDirectory: \"/private/var/folders/kr/f89s8xwj7vj75cn5rhpj3hq00000gn/T/jest_dx\",\n\n  // Automatically clear mock calls, instances, contexts and results before every test\n  clearMocks: true,\n\n  // Indicates whether the coverage information should be collected while executing the test\n  collectCoverage: true,\n\n  // An array of glob patterns indicating a set of files for which coverage information should be collected\n  // collectCoverageFrom: undefined,\n\n  // The directory where Jest should output its coverage files\n  coverageDirectory: \"coverage\",\n\n  // An array of regexp pattern strings used to skip coverage collection\n  // coveragePathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // Indicates which provider should be used to instrument code for coverage\n  // coverageProvider: \"babel\",\n\n  // A list of reporter names that Jest uses when writing coverage reports\n  // coverageReporters: [\n  //   \"json\",\n  //   \"text\",\n  //   \"lcov\",\n  //   \"clover\"\n  // ],\n\n  // An object that configures minimum threshold enforcement for coverage results\n  // coverageThreshold: undefined,\n\n  // A path to a custom dependency extractor\n  // dependencyExtractor: undefined,\n\n  // Make calling deprecated APIs throw helpful error messages\n  // errorOnDeprecated: false,\n\n  // The default configuration for fake timers\n  // fakeTimers: {\n  //   \"enableGlobally\": false\n  // },\n\n  // Force coverage collection from ignored files using an array of glob patterns\n  // forceCoverageMatch: [],\n\n  // A path to a module which exports an async function that is triggered once before all test suites\n  // globalSetup: undefined,\n\n  // A path to a module which exports an async function that is triggered once after all test suites\n  // globalTeardown: undefined,\n\n  // A set of global variables that need to be available in all test environments\n  // globals: {},\n\n  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.\n  // maxWorkers: \"50%\",\n\n  // An array of directory names to be searched recursively up from the requiring module's location\n  // moduleDirectories: [\n  //   \"node_modules\"\n  // ],\n\n  // An array of file extensions your modules use\n  // moduleFileExtensions: [\n  //   \"js\",\n  //   \"mjs\",\n  //   \"cjs\",\n  //   \"jsx\",\n  //   \"ts\",\n  //   \"tsx\",\n  //   \"json\",\n  //   \"node\"\n  // ],\n\n  // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module\n  // moduleNameMapper: {},\n\n  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader\n  // modulePathIgnorePatterns: [],\n\n  // Activates notifications for test results\n  // notify: false,\n\n  // An enum that specifies notification mode. Requires { notify: true }\n  // notifyMode: \"failure-change\",\n\n  // A preset that is used as a base for Jest's configuration\n  // preset: undefined,\n\n  // Run tests from one or more projects\n  // projects: undefined,\n\n  // Use this configuration option to add custom reporters to Jest\n  // reporters: undefined,\n\n  // Automatically reset mock state before every test\n  // resetMocks: false,\n\n  // Reset the module registry before running each individual test\n  // resetModules: false,\n\n  // A path to a custom resolver\n  // resolver: undefined,\n\n  // Automatically restore mock state and implementation before every test\n  // restoreMocks: false,\n\n  // The root directory that Jest should scan for tests and modules within\n  // rootDir: undefined,\n\n  // A list of paths to directories that Jest should use to search for files in\n  // roots: [\n  //   \"<rootDir>\"\n  // ],\n\n  // Allows you to use a custom runner instead of Jest's default test runner\n  // runner: \"jest-runner\",\n\n  // The paths to modules that run some code to configure or set up the testing environment before each test\n  // setupFiles: [],\n\n  // A list of paths to modules that run some code to configure or set up the testing framework before each test\n  // setupFilesAfterEnv: [],\n\n  // The number of seconds after which a test is considered as slow and reported as such in the results.\n  // slowTestThreshold: 5,\n\n  // A list of paths to snapshot serializer modules Jest should use for snapshot testing\n  // snapshotSerializers: [],\n\n  // The test environment that will be used for testing\n  // testEnvironment: \"jest-environment-node\",\n\n  // Options that will be passed to the testEnvironment\n  // testEnvironmentOptions: {},\n\n  // Adds a location field to test results\n  // testLocationInResults: false,\n\n  // The glob patterns Jest uses to detect test files\n  testMatch: [\n    // \"**/__tests__/**/*.[jt]s?(x)\",\n    // \"**/?(*.)+(spec|test).[tj]s?(x)\"\n    \"**/*.spec.js\"\n  ],\n\n  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped\n  // testPathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // The regexp pattern or array of patterns that Jest uses to detect test files\n  // testRegex: [],\n\n  // This option allows the use of a custom results processor\n  // testResultsProcessor: undefined,\n\n  // This option allows use of a custom test runner\n  // testRunner: \"jest-circus/runner\",\n\n  // A map from regular expressions to paths to transformers\n  transform: {},\n\n  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation\n  // transformIgnorePatterns: [\n  //   \"/node_modules/\",\n  //   \"\\\\.pnp\\\\.[^\\\\/]+$\"\n  // ],\n\n  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them\n  // unmockedModulePathPatterns: undefined,\n\n  // Indicates whether each individual test should be reported during the run\n  // verbose: undefined,\n\n  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode\n  // watchPathIgnorePatterns: [],\n\n  // Whether to use watchman for file crawling\n  // watchman: true,\n};\n"
  },
  {
    "path": "miniprogram/apis/cloud/index.js",
    "content": "const db = wx.cloud.database();\n\nexport const getBanners = () => {\n  return db.collection('banners')\n    .orderBy('id', 'desc')\n    .limit(4)\n    .get()\n    .then(({ data }) => data);\n};\n"
  },
  {
    "path": "miniprogram/apis/douban/accounts.js",
    "content": "import { request as baseRequest } from '../../utils/request';\nimport wxCloud from '../../utils/wxCloud';\n\n/** 豆瓣小程序 AppID */\nconst AppID = 'wx2f9b06c1de1ccfca';\n\n/**\n * @template T\n * @param {RequestOption<Douban.APIResponseLegacy<T>>} config \n */\nconst request = async (config) => {\n  const { header, ...rest } = config;\n  const _config = {\n    baseURL: 'https://accounts.douban.com/j/wxa',\n    header: {\n      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n      ...header,\n    },\n    ...rest,\n  };\n\n  /** @type {RequestSuccessResult<Douban.APIResponseLegacy<T>>} */\n  const resp = await baseRequest(_config);\n  if (resp.ok && resp.data.status === 'success') {\n    return resp.data;\n  }\n\n  return Promise.reject(resp.data);\n};\n\n/**\n * 登录\n * @param {object} params\n * @param {string} params.name 用户名\n * @param {string} params.password 密码\n * @param {string} [params.appid]\n * @param {string} [params.phone]\n * @param {string} [params.captcha_id]\n * @param {string} [params.captcha_solution]\n * @param {string} [params.ticket]\n * @param {string} [params.randstr]\n * @returns \n */\nexport const login = async (params) => {\n  /** @type {Douban.APIResponseLegacy<Douban.LoginSuccessResult>} */\n  const res = await request({\n    url: '/login/basic',\n    method: 'POST',\n    data: { appid: AppID, ...params },\n  });\n  wxCloud('douban', {\n    action: 'login',\n    payload: {\n      access_token: res.payload.access_token,\n      refresh_token: res.payload.refresh_token,\n      expires_in: res.payload.expires_in,\n      ...res.payload.account_info,\n    }\n  });\n\n  return res;\n}\n\n/**\n * 获取手机验证码\n * @param {object} params\n * @param {string} [params.area_code] 区域号，如：\"+86\"\n * @param {number} params.number 手机号\n */\nexport const getCaptcha = async (params) => {\n  params = {\n    appid: AppID,\n    area_code: '+86',\n    ...params,\n  }\n  const res = await request({\n    url: '/login/request_phone_code',\n    method: 'POST',\n    data: params,\n  });\n\n  return res;\n}\n\n\n/**\n * 验证验证码\n * @param {object} params\n * @param {string} params.number\n * @param {string} params.code\n * @returns\n */\n export const verifyCaptcha = async (params) => {\n  params = {\n    area_code: '+86',\n    appid: AppID,\n    ...params,\n  };\n  /** @type {Douban.APIResponseLegacy<Douban.LoginSuccessResult>} */\n  const res = await request({\n    url: '/login/verify_phone_code',\n    method: 'POST',\n    data: params,\n  });\n\n  return res.payload;\n};\n"
  },
  {
    "path": "miniprogram/apis/douban/request.js",
    "content": "import wxCloud from '../../utils/wxCloud';\n\nexport class RequestController {\n  /** @type {WechatMiniprogram.RequestTask} */\n  task;\n\n  constructor() {\n    return new Proxy(this, {\n      get(target, prop) {\n        if (Object.prototype.hasOwnProperty.call(target, prop)) {\n          return Reflect.get(target, prop);\n        } else {\n          return target.task[prop];\n        }\n      }\n    });\n  }\n}\n\n/**\n * @template T\n * @param {RequestOption<T>} config\n * @returns {Promise<RequestSuccessResult<T>}\n * @example\n *\n * ```\n * const controller = new RequestController();\n * request({\n *   ...config,\n *   controller\n * });\n * // 中断请求任务\n * controller.abort();\n * ```\n */\nexport const request = ({ baseURL, controller, ...config }) => {\n  return new Promise((resolve, reject) => {\n    const requestTask = wx.request(\n      /** @type {WechatMiniprogram.RequestOption<T>} */\n      ({\n        ...config,\n        url: `${baseURL}${config.url}`,\n        success: (res) => {\n          res.ok = res.statusCode >= 200 && res.statusCode < 300;\n          resolve(res);\n        },\n        fail: (err) => reject(err),\n      })\n    );\n    if (controller) {\n      controller.task = requestTask;\n    }\n  });\n};\n\n/**\n * @template T\n * @param {*} options \n * @returns {Promise<T>}\n */\nexport const cloudFetch = (options) => {\n  return wxCloud('douban', {\n    action: 'fetch',\n    payload: options,\n  });\n};"
  },
  {
    "path": "miniprogram/apis/douban.js",
    "content": "/**\n * @file 豆瓣 API\n */\nimport { request as baseRequest } from '../utils/request';\nimport { store } from '../store/index';\n\n/**\n * @type {{ params: RequestOption<any>, resolve: (data: any) => void, reject: (err: any) => void }[]}\n */\nconst queue = [];\n\nexport let isLoginIng = false;\n/**\n * @param {boolean} value\n */\nexport const setLoginIng = (value) => {\n  isLoginIng = value;\n};\n\nconst BASE_URL = 'https://mmovie.imarkr.com/douban/api';\n\n/**\n * @template T\n * @param {RequestOption<T>} params\n * @returns {Promise<T>}\n */\nconst request = (params) => {\n  const accessToken = store.douban.accessToken;\n  const { header, notAuthorization, ...rest } = {\n    baseURL: BASE_URL,\n    ...params,\n  };\n\n  return new Promise((resolve, reject) => {\n    baseRequest({\n      header: {\n        ...(!notAuthorization && accessToken && { Authorization: `Bearer ${accessToken}` }),\n        ...header,\n      },\n      ...rest,\n    })\n      .then((resp) => {\n        if (resp.ok) {\n          resolve(resp.data);\n        } else if (resp.statusCode === 400 && [103, 106].includes(resp.data.code)) {\n          queue.push({ params, resolve, reject });\n          if (!isLoginIng) {\n            isLoginIng = true;\n            wx.navigateTo({\n              url: '/packages/douban/pages/login-phone/login-phone'\n            });\n          }\n        } else {\n          reject(resp.data);\n        }\n      });\n  });\n};\n\n/** 登录成功后重放登录失效接口 */\nexport const replayRequest = () => {\n  while (queue.length) {\n    const { params, resolve, reject } = queue.shift();\n    request(params).then(resolve, reject);\n  }\n};\n\n/**\n * 搜索\n * @param {object} params\n * @param {string} params.q 关键字\n * @param {number} params.start 起始位置\n * @param {number} params.count 查询数量\n * @returns {Promise<DouBan.SearchResult>}\n */\nexport const search = (params) => {\n  return request({\n    url: '/search/weixin',\n    data: params\n  });\n};\n\n/**\n *  影视详情\n * @param {object} params\n * @param {string} params.id\n * @param {'movie'|'tv'} [params.type]\n * @returns {Promise<DouBan.MovieDetail>}\n */\nexport const getDetail = (params) => {\n  const { id, type = 'movie' } = params;\n  return request({\n    url: `/${type}/${id}`\n  });\n};\n\n/**\n * 影人列表\n * @param {object} params\n * @param {string} params.id\n * @param {'movie'|'tv'} [params.type]\n * @returns {Promise<{\n *   actors: DouBan.Actor[];\n *   directors: DouBan.Actor[];\n *   total: number;\n * }>}\n */\nexport const getCelebrities = (params) => {\n  const { id, type = 'movie' } = params;\n  return request({\n    url: `/${type}/${id}/celebrities`\n  });\n};\n\n/**\n * 短评列表\n * @param {object} params\n * @param {string} params.id\n * @param {number} params.start\n * @param {number} params.count\n * @param {'done'} [params.status]\n * @param {'movie'|'tv'} [params.type = 'movie']\n * @returns {Promise<DouBan.InterestResult>}\n */\nexport const getInterests = (params) => {\n  const { id, type = 'movie', ...data } = params;\n  return request({\n    url: `/${type}/${id}/interests`,\n    data\n  });\n};\n\n/**\n * 剧照\n * @param {object} params\n * @param {string} params.id\n * @param {number} params.start\n * @param {number} params.count\n * @param {'movie'|'tv'} [params.type = 'movie']\n * @returns {Promise<DouBan.PhotosResult>}\n */\nexport const getPhotos = (params) => {\n  const { id, type = 'movie', ...data } = params;\n  return request({\n    url: `/${type}/${id}/photos`,\n    data\n  });\n};\n\n/**\n * 预告片列表\n * @param {object} params\n * @param {string} params.id\n * @returns {Promise<DouBan.TrailersResult>}\n */\nexport const getTrailers = (params) => {\n  return request({\n    url: `/movie/${params.id}/trailers`\n  });\n};\n\n/**\n * 豆瓣热门\n * @param {object} params\n * @param {number} [params.start]\n * @param {number} [params.count]\n * @returns {Promise<{\n *   count: number;\n *   subject_collection_items: DouBan.MovieItem[];\n *   total: number;\n *   start: number;\n * }>}\n */\nexport const getHotMovies = (params) => {\n  return request({\n    url: '/subject_collection/movie_hot_gaia/items',\n    data: params,\n    notAuthorization: true\n  });\n}\n\n/**\n * 榜单合集\n * @param {object} params\n * @param {string} params.type\n * @param {number} [params.start]\n * @param {number} [params.count]\n * @returns {Promise<Douban.SubjectCollectionItemsResult>}\n */\nexport const getCollectionList = (params) => {\n  const { type, ...data } = params;\n  return request({\n    url: `/subject_collection/${type}/items`,\n    data\n  });\n}\n\n/**\n * 影院热映\n * @param {object} params\n * @param {number} [params.start]\n * @param {number} [params.count]\n * @returns {Promise<Douban.SubjectCollectionShowingItemsResult>}\n */\nexport const getShowingMovies = (params) => {\n  return request({\n    url: '/subject_collection/movie_showing/items',\n    data: params\n  });\n}\n\n/**\n * 即将上映\n * @param {object} params\n * @param {number} [params.start]\n * @param {number} [params.count]\n * @returns {Promise<Douban.SubjectCollectionSoonItemsResult>}\n */\nexport const getSoonMovies = (params) => {\n  return request({\n    url: '/subject_collection/movie_soon/items',\n    data: params\n  });\n}\n\n/**\n * 获取用户的书影音\n * @param {string} userID\n * @param {object} params\n * @param {'movie'} params.type\n * @param {'doing'} params.status\n * @param {number} [params.start]\n * @param {number} [params.count]\n * @returns {Promise<Douban.UserInterestsResult>}\n */\nexport const getUserInterests = (userID, params) => {\n  return request({\n    url: `/user/${userID}/interests`,\n    data: params\n  });\n}\n\n/**\n * 标记影视为想看\n * @param {object} params\n * @param {string} params.movieID\n * @param {DouBan.SubjectType} [params.type = 'movie']\n * @param {number} [params.rating]\n * @param {0|1} [params.sync_douban]\n * @returns {Promise<DouBan.Interest>}\n */\nexport const markMovie = (params) => {\n  const { movieID, type = 'movie', ...rest } = params;\n  const data = Object.assign({}, { raing: 0, sync_douban: 0 }, rest);\n  return request({\n    url: `/${type}/${movieID}/mark`,\n    data\n  });\n}\n\n/**\n * 删除影视标记\n * @param {object} params\n * @param {string} params.movieID\n * @param {DouBan.SubjectType} [params.type = 'movie']\n * @returns {Promise<{\n *   comment: string;\n *   status: DouBan.InterestStatus;\n *   id: string;\n * }>}\n */\nexport const unmarkMovie = (params) => {\n  return request({\n    url: `/${params.type || 'movie'}/${params.movieID}/unmark`,\n  });\n}\n\n/**\n * 标记影视为已看\n * @param {object} params\n * @param {string} params.movieID\n * @param {'movie'|'tv'} [params.type = 'movie']\n * @param {number} [params.rating]\n * @param {string} [params.comment]\n * @param {0|1} [params.sync_douban]\n * @returns {Promise<DouBan.Interest>}\n */\nexport const doneMovie = (params) => {\n  const { movieID, type = 'movie', ...rest } = params;\n  const data = Object.assign({},\n    {\n      rating: 0,\n      sync_douban: 0\n    },\n    rest\n  );\n  return request({\n    url: `/${type}/${movieID}/done`,\n    data\n  });\n}\n\n/**\n * 标记影视为已看\n * @param {object} params\n * @param {string} params.movieID\n * @param {DouBan.SubjectType} [params.type = 'movie']\n * @param {number} [params.rating]\n * @param {string} [params.comment]\n * @param {0|1} [params.sync_douban]\n * @returns {Promise<DouBan.Interest>}\n */\n export const doingMovie = (params) => {\n  const { movieID, type = 'movie', ...rest } = params;\n  const data = Object.assign({},\n    {\n      rating: 0,\n      sync_douban: 0\n    },\n    rest\n  );\n  return request({\n    url: `/${type}/${movieID}/doing`,\n    data\n  });\n}\n"
  },
  {
    "path": "miniprogram/apis/github.js",
    "content": "/**\n * [GitHub API v3](https://docs.github.com/en/rest)\n */\nimport { store } from '../store/index';\n\n/**\n * \n * @param {WechatMiniprogram.RequestOption} options \n * @returns {Promise<WechatMiniprogram.RequestSuccessCallbackResult['data']>} result\n */\nconst request = (options) => {\n  const { header, method, url, data, ...restOpt } = options;\n  const token = store.user.info?.githubToken;\n\n  if (Object.prototype.toString.call(data) === '[object Object]') {\n    Object.keys(data).forEach((key) => {\n      const v = data[key];\n      if (!v && v !== 0 && v !== false) {\n        delete data[key];\n      }\n    });\n  }\n\n  return new Promise((resolve, reject) => {\n    wx.request({\n      header: {\n        Accept: 'application/vnd.github.v3+json',\n        Authorization: token ? `token ${token}` : undefined,\n        ...header\n      },\n      method: method || 'GET',\n      url: `https://api.github.com${url}`,\n      success: ({ statusCode, data }) => {\n        if (statusCode >= 200 && statusCode < 300) {\n          resolve(data);\n        } else {\n          reject({\n            ...data,\n            message: data.message || '服务器开小差了'\n          });\n        }\n      },\n      fail: (err) => {\n        reject(err);\n      },\n      data,\n      ...restOpt\n    })\n  });\n};\n\n/**\n * [Get a repository](https://docs.github.com/en/rest/reference/repos#get-a-repository)\n * \n * @param {Object} params\n * @param {string} params.owner\n * @param {string} params.repo\n */\nexport const getRepoInfo = (params) => {\n  return request({\n    method: 'GET',\n    url: `/repos/${params.owner}/${params.repo}`\n  });\n};\n\n/**\n * [Get repository README](https://docs.github.com/en/rest/reference/repos#get-a-repository-readme)\n * \n * @param {object} params \n * @param {'raw'|'html'} [params.media] [Custom media types for repository contents](https://docs.github.com/en/rest/reference/repos#custom-media-types-for-repository-contents)\n * @param {string} params.owner\n * @param {string} params.repo\n * @param {string} [params.ref]\n */\nexport const getRepoReadme = (params) => {\n  const { owner, repo, ...query } = params;\n  return request({\n    header: {\n      Accept: params.media ? `application/vnd.github.v3.${params.media}` : `application/vnd.github.v3+json`\n    },\n    method: 'GET',\n    url: `/repos/${owner}/${repo}/readme`,\n    data: query\n  });\n};\n\n/**\n * \n * @param {object} params \n * @param {string} params.username\n * @param {number} params.per_page\n * @param {number} params.page \n */\nexport const getEvents = (params) => {\n  const { username, ...reset } = params;\n  return request({\n    method: 'GET',\n    url: `/users/${username}/received_events`,\n    data: reset\n  });\n};\n\n/**\n * [List notifications for the authenticated user](https://docs.github.com/en/rest/reference/activity#list-notifications-for-the-authenticated-user)\n * \n * @param {object} params \n * @param {boolean} [params.all]\n * @param {boolean} [params.participating]\n * @param {string} [params.since] a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ\n * @param {string} [params.before]\n * @param {number} [params.per_page]\n * @param {number} [params.page]\n */\nexport const getNotifications = (params) => {\n  return request({\n    method: 'GET',\n    url: '/notifications',\n    data: params\n  });\n};\n\n/**\n * https://docs.github.com/en/rest/reference/search#constructing-a-search-query\n * \n * @typedef {object} Query\n * @property {string} q\n * @property {string} sort\n * @property {number} per_page\n * @property {number} page\n */\n\n/**\n * [Search repositories](https://docs.github.com/en/rest/reference/search#search-repositories)\n * \n * @param {Query} params\n * @returns {Promise<{\n * total_count: number;\n * incomplete_results: boolean;\n * items: Array<{\n *   id: number;\n *   name: string;\n *   full_name: string;\n * }>;\n * owner: User;\n * private: boolean;\n * created_at: string;\n * updated_at: string;\n * pushed_at: string;\n * homepage: string;\n * stargazers_count: number;\n * watchers_count: number;\n * language: string;\n * forks_count: number;\n * default_branch: string;\n * archived: boolean;\n * disabled: boolean;\n * }>}\n */\nexport const searchRepositories = (params) => {\n  return request({\n    header: {\n      Accept: 'application/vnd.github.v3.text-match+json'\n    },\n    method: 'GET',\n    url: '/search/repositories',\n    data: params\n  });\n};\n\n/**\n * [Search users](https://docs.github.com/en/rest/reference/search#search-users)\n * \n * @param {Query} params \n */\nexport const searchUser = (params) => {\n  return request({\n    header: {\n      Accept: 'application/vnd.github.v3.text-match+json'\n    },\n    method: 'GET',\n    url: '/search/users',\n    data: params\n  });\n};\n\n/**\n * 获取用户 Star repositories\n * \n * [List repositories starred by the authenticated user](https://docs.github.com/en/rest/reference/activity#list-repositories-starred-by-the-authenticated-user)\n * \n * @param {object} params\n * @param {'created'|'updated'} params.sort\n * @param {'asc'|'desc'} params.direction\n * @param {number} params.per_page max 100\n * @param {number} params.page\n */\nexport const getStarredList = (params) => {\n  return request({\n    url: '/user/starred',\n    method: 'GET',\n    data: params\n  });\n};\n\n/**\n * 获取已授权的用户信息\n * \n * [Get the authenticated user](https://docs.github.com/en/rest/reference/users#get-the-authenticated-user)\n */\nexport const getSelfInfo = () => {\n  return request({\n    url: '/user',\n    method: 'GET'\n  });\n}\n\n/**\n * @typedef {{\n * login: string;\n * id: number;\n * avatar_url: string;\n * }} User\n */"
  },
  {
    "path": "miniprogram/apis/leancloud/index.js",
    "content": "import * as AV from '../../libs/av-live-query-core-min';\n\n/**\n * @returns {Promise<any[]>}\n */\nexport const getBanners = async () => {\n  const query = new AV.Query('Banner');\n  const data = await query.find();\n  return data.map((item) => {\n    const { attributes, ...cols } = item;\n    return { ...cols, ... attributes };\n  });\n};\n"
  },
  {
    "path": "miniprogram/apis/server/index.js",
    "content": "import { request } from '../../utils/request'\n\n/**\n * @param {RequestOption} config\n */\nconst fetch = async (config) => {\n  config.baseURL = 'https://sanphantom.com/go'\n  const resp = await request(config)\n  if (resp.ok) {\n    return resp\n  }\n  return Promise.reject(resp.data)\n}\n\nexport const apiGetBanners = () => {\n  return fetch({ url: '/banners' })\n}\n\nexport const apiGetHotMovies = (data) => {\n  return fetch({ url: '/douban/hot/items', data })\n}\n\nexport const apiGetShowingMovies = (data) => {\n  return fetch({ url: '/douban/showing/items', data })\n}\n\nexport const apiGetSoonMovies = (data) => {\n  return fetch({ url: '/douban/soon/items', data })\n}\n\nexport const apiGetDetail = (params) => {\n  const { id, type = 'movie' } = params\n  return fetch({ url: `/douban/${type}/${id}` })\n}\n\nexport const apiGetCelebrities = (params) => {\n  const { id, type = 'movie' } = params\n  return fetch({ url: `/douban/${type}/${id}/celebrities` })\n}\n\nexport const apiSearch = (data) => {\n  return fetch({ url: '/douban/search', data })\n}\n\nexport const apiGetPhotos = (params) => {\n  const { id, type = 'movie', ...data } = params\n  return fetch({ url: `/douban/${type}/${id}/photos`, data })\n}\n\nexport const apiGetInterests = (params) => {\n  const { id, type = 'movie', ...data } = params\n  return fetch({ url: `/douban/${type}/${id}/interests`, data })\n}\n\nexport const apiGetUserInterests = (userID, data) => {\n  return fetch({ url: `/douban/user/${userID}/interests`, data })\n}\n\nexport const apiGetCaptcha = (data) => {\n  return fetch({\n    url: '/douban/login/request_phone_code',\n    method: 'POST',\n    data\n  })\n}\n\nexport const apiVerifyCaptcha = (data) => {\n  return fetch({\n    url: '/douban/login/verify_phone_code',\n    method: 'POST',\n    data\n  })\n}\n"
  },
  {
    "path": "miniprogram/apis/vercel.js",
    "content": "import { request } from '../utils/request'\nimport { decrypt } from '../utils/crypro';\n\n/**\n * @param {RequestOption} config\n */\nconst fetch = async (config) => {\n  config.baseURL = 'https://mmovie.imarkr.com'\n  const resp = await request(config)\n  if (resp.ok) {\n    return resp.data\n  }\n  return Promise.reject(resp.data)\n}\n\nexport const apiAppInfo = async () => {\n  const { data } = await fetch({ url: '/wx/app' });\n  return JSON.parse(decrypt(data));\n};\n\n/**\n * 验证登录验证码（登录）\n * @param {object} data\n * @param {string} data.number 手机号\n * @param {string} data.code 验证码\n * @param {string} data.openid\n * @param {string} data.unionid\n * @param {string} [data.captcha_id]\n * @param {string} [data.captcha_solution]\n */\nexport const apiVerifyCaptcha = (data) => {\n  return fetch({\n    url: '/douban/verify_phone_code',\n    method: 'POST',\n    data\n  });\n};\n\nexport const apiSyncDouban = (data) => {\n  return fetch({\n    url: '/douban/sync',\n    method: 'POST',\n    data\n  });\n};\n\n/**\n * @param {object} data\n * @param {string} data.code\n */\nexport const apiWxLogin = (data) => {\n  return fetch({ url: '/wx/login', data })\n};\n\nexport const apiGetBanners = () => {\n  return fetch({ url: '/banners' })\n}\n\nexport const apiGetCards = () => {\n  return fetch({ url: '/m/cards', method: 'POST' });\n};\n\nexport const apiSubmitPages = (data) => {\n  return fetch({\n    url: '/wx/submitpages',\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json'\n    },\n    data\n  })\n}\n"
  },
  {
    "path": "miniprogram/app.js",
    "content": "import { store } from './store/index';\nimport { compareVersions, isEmpty } from './utils/util';\nimport { apiAppInfo, apiWxLogin } from './apis/vercel';\n\nwx.cloud.init({\n  traceUser: true,\n  env: 'dev-oucwt'\n});\n\nApp({\n\n  globalData: {\n    userInfo: null,\n    setting: {},\n    config: null\n  },\n\n  onLaunch () {\n    this.getSetting();\n    this.getDefaultConfig();\n    this.login();\n  },\n\n  /** 通过云函数直接登录 */\n  async login () {\n    const { code } = await new Promise((resolve, reject) => {\n      wx.login({ success: resolve, fail: reject });\n    });\n    const data = await apiWxLogin({ code });\n    this.globalData.userInfo = data;\n    store['user/updateUserInfo'](data);\n    if (data.access_token) {\n      const { access_token, refresh_token, ...user } = data;\n      store['douban/update']({\n        accessToken: access_token,\n        refreshToken: refresh_token,\n        user\n      });\n    }\n    if (data.douban) {\n      const { access_token, refresh_token, ...user } = data.douban;\n      store['douban/update']({\n        accessToken: access_token,\n        refreshToken: refresh_token,\n        user\n      });\n    }\n  },\n\n  /**\n   * 获取用户信息\n   * 支持 callback 和 Promise\n   * @param {function} cb (object:userInfo) => void\n   */\n  getUserInfo (cb) {\n    return new Promise((resolve, reject) => {\n      if (this.globalData.userInfo) {\n        typeof cb === 'function' && cb(this.globalData.userInfo);\n        resolve(this.globalData.userInfo);\n      } else {\n        wx.login({\n          success: () => {\n            wx.getUserInfo({\n              success: res => {\n                this.globalData.userInfo = res.userInfo\n                typeof cb === 'function' && cb(this.globalData.userInfo)\n                resolve(this.globalData.userInfo)\n              }\n            });\n          }\n        });\n      }\n    });\n  },\n\n  /** 从服务器获取默认配置 */\n  async getDefaultConfig () {\n    const appInfo = await apiAppInfo();\n    store['app/update']({\n      hasPublished: compareVersions(store.app.version, appInfo.version) <= 0,\n      ...appInfo\n    });\n  },\n\n  /** 退出登录 */\n  logout (callback) {\n    this.globalData.userInfo = null;\n    callback && callback(this.globalData);\n  },\n\n  /** 获取本地设置 */\n  getSetting (callback) {\n    const { setting } = this.globalData;\n    if (setting && (!isEmpty(setting))) {\n      typeof callback == \"function\" && callback(setting);\n    } else {\n      wx.getStorage({\n        key: 'setting',\n        success: res => {\n          this.globalData.setting = res.data;\n          typeof callback == \"function\" && callback(res.data);\n        }\n      });\n    }\n  }\n})\n"
  },
  {
    "path": "miniprogram/app.json",
    "content": "{\n  \"pages\": [\n    \"pages/splash/splash\",\n    \"pages/tabs/discovery/discovery\",\n    \"pages/tabs/index/index\",\n    \"pages/tabs/movies/movies\",\n    \"pages/setting/setting\",\n    \"pages/marked/marked\",\n    \"pages/search/search\",\n    \"pages/about/about\",\n    \"pages/first/first\",\n    \"pages/webview/index\",\n    \"pages/test/test\",\n    \"packages/wallpaper/pages/categories/categories\"\n  ],\n  \"window\": {\n    \"backgroundTextStyle\": \"dark\",\n    \"navigationBarBackgroundColor\": \"#fff\",\n    \"navigationBarTitleText\": \"iMark\",\n    \"navigationBarTextStyle\": \"black\",\n    \"backgroundColor\": \"#f7f7f7\"\n  },\n  \"tabBar\": {\n    \"custom\": true,\n    \"color\": \"#496069\",\n    \"selectedColor\": \"#000\",\n    \"backgroundColor\": \"#fff\",\n    \"borderStyle\": \"black\",\n    \"list\": [\n      {\n        \"pagePath\": \"pages/tabs/discovery/discovery\",\n        \"text\": \"发现\",\n        \"iconPath\": \"assets/images/tabbar/tabbar_discovery.png\",\n        \"selectedIconPath\": \"assets/images/tabbar/tabbar_discovery_selected.png\"\n      },\n      {\n        \"pagePath\": \"pages/tabs/movies/movies\",\n        \"text\": \"清单\",\n        \"iconPath\": \"assets/images/tabbar/tabbar_list.png\",\n        \"selectedIconPath\": \"assets/images/tabbar/tabbar_list_selected.png\"\n      },\n      {\n        \"pagePath\": \"pages/tabs/index/index\",\n        \"text\": \"我的\",\n        \"iconPath\": \"assets/images/tabbar/tabbar_mine.png\",\n        \"selectedIconPath\": \"assets/images/tabbar/tabbar_mine_selected.png\"\n      }\n    ]\n  },\n  \"subPackages\": [\n    {\n      \"root\": \"packages/article/\",\n      \"pages\": [\n        \"pages/categories/categories\",\n        \"pages/details/detail\",\n        \"pages/movie-list-detail/movie-list-detail\"\n      ]\n    },\n    {\n      \"root\": \"packages/movie/\",\n      \"pages\": [\n        \"pages/cards/card\",\n        \"pages/details/details\",\n        \"pages/intheaters/in_theaters\",\n        \"pages/trailers/trailers\",\n        \"pages/photos/photos\",\n        \"pages/mark/mark\"\n      ]\n    },\n    {\n      \"root\": \"packages/user/\",\n      \"pages\": [\n        \"pages/favMovieList/index\",\n        \"pages/evaluate/evaluate\",\n        \"pages/favCards/index\",\n        \"pages/userinfo/userinfo\",\n        \"pages/achievement/achievement\"\n      ]\n    },\n    {\n      \"root\": \"packages/github/\",\n      \"pages\": [\n        \"pages/home/home\",\n        \"pages/notifications/notifications\",\n        \"pages/starred/starred\",\n        \"pages/trending/trending\",\n        \"pages/languages/languages\",\n        \"pages/repository/repository\",\n        \"pages/search/search\"\n      ]\n    },\n    {\n      \"root\": \"packages/douban/\",\n      \"pages\": [\n        \"pages/login-phone/login-phone\",\n        \"pages/collection/collection\"\n      ]\n    },\n    {\n      \"root\": \"packages/example/\",\n      \"pages\": [\n        \"pages/index/index\",\n        \"pages/cover-page/cover-page\",\n        \"pages/tab-bar/tab-bar\",\n        \"pages/waterfall/waterfall\",\n        \"pages/icons/icons\"\n      ]\n    },\n    {\n      \"root\": \"packages/admin/\",\n      \"pages\": [\n        \"pages/index/index\",\n        \"pages/app/app\",\n        \"pages/douban/douban\"\n      ]\n    },\n    {\n      \"root\": \"packages/tools\",\n      \"pages\": [\n        \"pages/index/index\",\n        \"pages/encode/encode\",\n        \"pages/random/random\"\n      ]\n    }\n  ],\n  \"preloadRule\": {\n    \"pages/tabs/discovery/discovery\": {\n      \"network\": \"all\",\n      \"packages\": [\"packages/article/\", \"packages/movie/\"]\n    },\n    \"pages/tabs/index/index\": {\n      \"network\": \"all\",\n      \"packages\": [\"packages/github/\"]\n    },\n    \"packages/article/pages/categories/categories\": {\n      \"network\": \"all\",\n      \"packages\": [\"packages/douban/\"]\n    }\n  },\n  \"usingComponents\": {},\n  \"requiredBackgroundModes\": [\"audio\"],\n  \"sitemapLocation\": \"sitemap.json\"\n}"
  },
  {
    "path": "miniprogram/app.wxss",
    "content": "/**app.wxss**/\n@import './style/weui.wxss';\n@import '/style/animate.wxss';\n@import './style/font-awesome.min.wxss';\n@import './style/iconfont.wxss';\n@import \"/templates/wxParse/wxParse.wxss\";\n@import '/style/common.wxss';"
  },
  {
    "path": "miniprogram/components/Tabs/Tabs.js",
    "content": "// Tabs\nComponent({\n    options: {\n        addGlobalClass: true,\n    },\n    /**\n     * 组件的属性列表\n     */\n    properties: {\n        tabs: {\n            type: Array,\n            value: [],\n        },\n    },\n\n    /**\n     * 组件的初始数据\n     */\n    data: {\n        currentIndex: 0,\n    },\n\n    /**\n     * 组件的方法列表\n     */\n    methods: {\n        _handleTabTap(e) {\n            const { index } = e.currentTarget.dataset\n            const { currentIndex } = this.data\n            if (index !== currentIndex) {\n                this.setData({\n                    currentIndex: index,\n                })\n                this.triggerEvent('change', { value: index })\n            }\n            this.triggerEvent('itemtap', { value: index })\n        },\n    }\n})\n"
  },
  {
    "path": "miniprogram/components/Tabs/Tabs.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/Tabs/Tabs.wxml",
    "content": "<!-- Tabs -->\n<view class=\"tabs\">\n    <view class=\"tabs-item {{currentIndex === index && 'is-active'}}\" wx:for=\"{{tabs}}\" wx:key=\"index\"\n        data-index=\"{{index}}\" bind:tap=\"_handleTabTap\"\n    >\n        <view class=\"tabs-item__content\">{{item}}</view>\n    </view>\n</view>\n"
  },
  {
    "path": "miniprogram/components/Tabs/Tabs.wxss",
    "content": "/* Tabs */\n.tabs {\n    /* position: fixed; */\n    z-index: 99;\n    top: 0;\n    left: 0;\n    right: 0;\n    display: flex;\n    white-space: nowrap;\n    padding: 16rpx 0;\n    background: #fff;\n}\n\n.tabs .tabs-item {\n    display: inline-block;\n    flex: 1;\n    text-align: center;\n}\n\n.tabs-item .tabs-item__content {\n    display: inline-block;\n    font-size: 36rpx;\n    line-height: 1;\n    color: #999;\n    font-weight: 400;\n    position: relative;\n    z-index: 1;\n    transition: all .3s;\n}\n\n.tabs-item.is-active .tabs-item__content {\n    color: #333;\n    font-size: 42rpx;\n}\n\n.tabs-item.is-active .tabs-item__content::before {\n    content: '';\n    display: block;\n    position: absolute;\n    z-index: -1;\n    height: 8rpx;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    background: #FFE200;\n}"
  },
  {
    "path": "miniprogram/components/article/article.js",
    "content": "// components/article/article.js\nComponent({\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n    aid: {\n      type: String,\n      value: ''\n    },\n    image: {\n      type: String,\n      value: ''\n    },\n    title: {\n      type: String,\n      value: ''\n    },\n    likeCount: {\n      type: Number,\n      value: 0\n    },\n    checked: {\n      type: Boolean,\n      value: false\n    }\n  },\n\n  /**\n   * 组件的初始数据\n   */\n  data: {\n\n  },\n\n  /**\n   * 组件的方法列表\n   */\n  methods: {\n    onFavChange(e){\n      this.triggerEvent('change', {\n        checked: e.detail.checked,\n      })\n    }\n  }\n})\n"
  },
  {
    "path": "miniprogram/components/article/article.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {\n    \"comp-btnFav\": \"/components/btn-fav/FavButton\"\n  }\n}"
  },
  {
    "path": "miniprogram/components/article/article.wxml",
    "content": "<!--components/article/article.wxml-->\n<view class='item-bgimg' style='background-image:url({{image}})'>\n  <view class='gradient'>\n    <text class='item-title'>{{title}}</text>\n  </view>\n  <view class='item-count'>\n    <comp-btnFav width='1.2em' height='1.2em' checked='{{checked}}' iconChecked='/assets/images/like_checked.png' iconNormal='/assets/images/like_unchecked.png' bindchange='onFavChange' />\n    <text>{{likeCount}}</text>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/components/article/article.wxss",
    "content": "/* components/article/article.wxss */\n.item-bgimg {\n  margin: 10rpx;\n  height: 360rpx;\n  border-radius: 10rpx;\n  background-repeat: no-repeat;\n  background-size: 100% 100%;\n  display: flex;\n  align-items: flex-end;\n  position: relative;\n  overflow: hidden;\n}\n.item-bgimg .gradient {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  z-index: 1;\n  display: flex;\n  align-items: flex-end;\n  background: -webkit-gradient(linear, left 0, left 165%, color-stop(0,transparent), color-stop(1,#000000));  \n  background: -moz-linear-gradient(top, transparent, #000000 165%);  \n}\n.item-bgimg .item-title {\n  color: #fff;\n  padding: 15rpx;\n  font-weight: bold;\n}\n.item-bgimg .item-count {\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  top: 0;\n  right: 20rpx;\n  padding: .5em .3em .3em;\n  background-color: rgba(0,0,0,.5);\n  border-radius: 0 0 10rpx 10rpx;\n  z-index: 2;\n}\n.item-bgimg .item-count>image {\n  width: 1.2em;\n  height: 1.2em;\n}\n.item-bgimg .item-count>text {\n  color: #fff;\n  font-size: .8em;\n}"
  },
  {
    "path": "miniprogram/components/btn-fav/FavButton.js",
    "content": "// @ts-check\nComponent({\n  properties: {\n    height: {\n      type: String,\n      value: '2em'\n    },\n    width: {\n      type: String,\n      value: '2em'\n    },\n    checked: {\n      type: Boolean,\n      value: false\n    },\n    iconNormal: {\n      type: String,\n      value: '/assets/images/icon-unlike.png'\n    },\n    iconChecked: {\n      type: String,\n      value: '/assets/images/icon-liked.png'\n    },\n  },\n\n  data: {},\n\n  methods: {\n    _onToggle (e) {\n      const { checked } = this.data;\n      this.triggerEvent('change', { checked })\n    }\n  }\n})\n"
  },
  {
    "path": "miniprogram/components/btn-fav/FavButton.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/btn-fav/FavButton.wxml",
    "content": "<view class='wrapper' bind:tap='_onToggle' style='height:{{height}};width:{{width}}'>\n  <image class='icon-like' \n    hidden='{{checked}}'\n    src='{{checked?iconChecked:iconNormal}}'\n    mode='widthFix'\n  />\n  <image class='icon-like' \n    hidden='{{!checked}}'\n    src='{{checked?iconChecked:iconNormal}}'\n    mode='widthFix'\n  />\n</view>\n"
  },
  {
    "path": "miniprogram/components/btn-fav/FavButton.wxss",
    "content": "/* components/btn-fav/FavButton.wxss */\n\n.wrapper {\n  display: flex;\n  width: 2em;\n  height: 2em;\n}\n\n.icon-like {\n  width: 100%;\n  height: 100%;\n  animation: zoomIn .5s ease-in;\n}\n\n@keyframes zoomIn {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  5% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n    transform: scale3d(1.1, 1.1, 1);\n  }\n\n  12.5% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 1);\n    transform: scale3d(0.9, 0.9, 1);\n  }\n\n  25% {\n    -webkit-transform: scale3d(1.05, 1.05, 1);\n    transform: scale3d(1.05, 1.05, 1);\n  }\n\n  32.5% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n"
  },
  {
    "path": "miniprogram/components/cover-page/cover-page.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    visible: {\n      type: Boolean,\n      value: false\n    },\n    title: {\n      type: String,\n      value: ''\n    },\n    distance: {\n      type: Number,\n      value: 60\n    }\n  },\n\n  methods: {\n    /**\n     * @param {object} params\n     * @param {boolean} params.visible\n     */\n    setVisible ({ visible }) {\n      this.setData({ visible });\n    },\n  \n    show () {\n      this.setVisible({ visible: true });\n    },\n  \n    hide () {\n      this.setVisible({ visible: false });\n    },\n\n    prevent () {\n      // avoid warning\n    }\n  }\n\n});\n"
  },
  {
    "path": "miniprogram/components/cover-page/cover-page.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/cover-page/cover-page.wxml",
    "content": "<wxs module=\"wxs\" src=\"./cover-page.wxs\" />\n<view id=\"coverPage\" class=\"action-sheet-backdrop\" catch:tap=\"hide\" catch:touchmove=\"prevent\">\n  <view class=\"action-sheet-wrapper\" catch:tap=\"prevent\"\n    data-distance=\"{{distance}}\"\n    catch:touchmove=\"{{wxs.handleModalTouchMove}}\"\n    bind:touchend=\"{{wxs.handleModalTouchEnd}}\"\n    visible=\"{{visible}}\"\n    change:visible=\"{{wxs.observeVisible}}\"\n  >\n    <view class=\"action-sheet__title\" wx:if=\"{{title}}\">{{title}}</view>\n    <view class=\"cover-page__content\">\n      <scroll-view class=\"cover-page__scroll\" scroll-y>\n        <slot />\n      </scroll-view>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/components/cover-page/cover-page.wxs",
    "content": "function handleModalTouchMove (event, ownerInstance) {\n  var state = ownerInstance.getState();\n  var currentY = event.changedTouches[0].pageY;\n  if (state.startY === undefined) {\n    // 开始滑动的地方。scroll-view 滚动时并不会触发此函数，也就不会有 startY\n    state.startY = currentY;\n  }\n  var diff = currentY - state.startY;\n  event.instance.setStyle({\n    transition: 'none',\n    transform: 'translate3d(0, ' + (diff < 0 ? 0 : diff) + 'px, 0)'\n  });\n}\n\nfunction handleModalTouchEnd (event, ownerInstance) {\n  var state = ownerInstance.getState();\n  var currentY = event.changedTouches[0].pageY;\n  var diff = currentY - state.startY;\n  var compModal = ownerInstance.selectComponent('#coverPage');\n  var dataset = event.currentTarget.dataset;\n  if (diff > dataset.distance) {\n    compModal.removeClass('is-show');\n    ownerInstance.callMethod('setVisible', { visible: false });\n  } else {\n    ownerInstance.callMethod('setVisible', { visible: true });\n  }\n  // 还原 startY，便于下次记录\n  state.startY = undefined;\n}\n\nfunction observeVisible (newValue, oldValue, ownerInstance, instance) {\n  var compModal = ownerInstance.selectComponent('#coverPage');\n  if (newValue) {\n    instance.setStyle({\n      transform: 'translate3d(0, 0, 0)'\n    });\n    compModal.addClass('is-show');\n  } else {\n    instance.setStyle({});\n    compModal.removeClass('is-show');\n  }\n}\n\nmodule.exports = {\n  handleModalTouchMove: handleModalTouchMove,\n  handleModalTouchEnd: handleModalTouchEnd,\n  observeVisible: observeVisible\n}\n"
  },
  {
    "path": "miniprogram/components/cover-page/cover-page.wxss",
    "content": ".action-sheet-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0,0,0,.4);\n  pointer-events: none;\n  opacity: 0;\n  transition: opacity .3s;\n}\n.action-sheet-wrapper {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  max-height: 100vh;\n  border-radius: 40rpx 40rpx 0 0;\n  overflow: hidden;\n  transform: translate3d(0, 100%, 0);\n  transition: transform .3s;\n  display: flex;\n  flex-direction: column;\n  background-color: #fff;\n}\n.action-sheet__title {\n  background-color: #fff;\n  color: #333;\n  font-size: 28rpx;\n  padding: 26rpx 0;\n  text-align: center;\n}\n.action-sheet-backdrop.is-show {\n  pointer-events: auto;\n  opacity: 1;\n}\n.action-sheet-backdrop.is-show .action-sheet-wrapper {\n  transform: translate3d(0, 0, 0);\n}\n.cover-page__content {\n  flex: 1;\n}\n.cover-page__scroll {\n  max-height: 80vh;\n}\n"
  },
  {
    "path": "miniprogram/components/index-list/components/content/content.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    data: {\n      type: Object,\n      value: null\n    }\n  }\n});\n\n"
  },
  {
    "path": "miniprogram/components/index-list/components/content/content.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/index-list/components/content/content.wxml",
    "content": "<view>{{data.name}}</view>"
  },
  {
    "path": "miniprogram/components/index-list/components/content/content.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/components/index-list/index-list.js",
    "content": "const throttle = function(func, wait, options) {\n  let context; let args; let result\n  let timeout = null\n  // 上次执行时间点\n  let previous = 0\n  if (!options) options = {}\n  // 延迟执行函数\n  const later = function() {\n    // 若设定了开始边界不执行选项，上次执行时间始终为0\n    previous = options.leading === false ? 0 : Date.now()\n    timeout = null\n    result = func.apply(context, args)\n    if (!timeout) context = args = null\n  }\n  return function() {\n    const now = Date.now()\n    // 首次执行时，如果设定了开始边界不执行选项，将上次执行时间设定为当前时间。\n    if (!previous && options.leading === false) previous = now\n    // 延迟执行时间间隔\n    const remaining = wait - (now - previous)\n    context = this\n    args = arguments\n    // 延迟时间间隔remaining小于等于0，表示上次执行至此所间隔时间已经超过一个时间窗口\n    // remaining大于时间窗口wait，表示客户端系统时间被调整过\n    if (remaining <= 0 || remaining > wait) {\n      clearTimeout(timeout)\n      timeout = null\n      previous = now\n      result = func.apply(context, args)\n      if (!timeout) context = args = null\n    // 如果延迟执行不存在，且没有设定结尾边界不执行选项\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining)\n    }\n    return result\n  }\n}\n\nComponent({\n  options: {\n      addGlobalClass: true,\n      pureDataPattern: /^_/ // 指定所有 _ 开头的数据字段为纯数据字段\n  },\n  properties: {\n      list: {\n          type: Array,\n          value: [],\n          observer: function(newVal) {\n              if (newVal.length === 0) return\n              const data = this.data\n              const alphabet = data.list.map(item => ({\n                alpha: item.alpha,\n                anchor: item.anchor\n              }))\n              this.setData({\n                  alphabet,\n                  current: alphabet[0].anchor\n              }, () => {\n                  this.computedSize()\n              })\n          }\n\n      },\n      vibrated: {\n          type: Boolean,\n          value: true\n      }\n      \n  },\n  data: {\n      windowHeight: 612,\n      current: 'A',\n      intoView: '',\n      touching: false,\n      alphabet: [],\n      _tops: [],\n      _anchorItemH: 0,\n      _anchorItemW: 0,\n      _anchorTop: 0,\n      _listUpperBound: 0\n  },\n  lifetimes: {\n      attached() {\n          this.__scrollTo = throttle(this._scrollTo, 100, {})\n          this.__onScroll = throttle(this._onScroll, 100, {})\n          const {windowHeight} = wx.getSystemInfoSync()\n          this.setData({windowHeight})\n      }\n  },\n  methods: {\n      choose (e) {\n          const item = e.currentTarget.dataset.item;\n          this.triggerEvent('choose', { item });\n      },\n\n      scrollTo(e) {\n          this.__scrollTo(e)\n      },\n\n      _scrollTo(e) {\n          const data = this.data\n          const clientY = e.changedTouches[0].clientY\n          const index = Math.floor((clientY - data._anchorTop) / data._anchorItemH)\n          const current = data.alphabet[index]?.anchor\n\n          if (current && current !== data.current) {\n              this.setData({current, intoView: current, touching: true})\n              // 振动效果\n              if (data.vibrated) wx.vibrateShort()\n          }\n      },\n\n      computedSize() {\n          const data = this.data\n           // 计算列表每个区块的高度等信息\n          const query = this.createSelectorQuery()\n          query.selectAll('.index_list_item').boundingClientRect(rects => {\n              const result = rects\n              data._tops = result.map(item => item.top)\n          }).exec()\n          // 计算右侧字母栏小区块的高度等信息\n          query.select('.anchor-list').boundingClientRect(rect => {\n              data._anchorItemH = rect.height / data.alphabet.length\n              data._anchorItemW = rect.width\n              data._anchorTop = rect.top\n          }).exec()\n          // 计算滚动区域的上边界\n          query.select('.page-select-index').boundingClientRect(rect => {\n              data._listUpperBound = rect.top\n          })\n      },\n\n      // throttle 的延迟\n      removeTouching() {\n          setTimeout(() => {\n              this.setData({touching: false})\n          }, 150)\n      },\n\n      onScroll(e) {\n          this.__onScroll(e)\n      },\n\n      _onScroll(e) {\n          const data = this.data\n          const {_tops, alphabet} = data\n          const scrollTop = e.detail.scrollTop\n          let current = ''\n          if (scrollTop < _tops[0]) {\n              current = alphabet[0].anchor\n          } else {\n              for (let i = 0, len = _tops.length; i < len - 1; i++) {\n                  if (scrollTop >= _tops[i] && scrollTop < _tops[i + 1]) {\n                      current = alphabet[i].anchor\n                  }\n              }\n          }\n         \n          if (!current) current = alphabet[alphabet.length - 1].anchor\n          this.setData({current})\n      }\n  }\n})\n"
  },
  {
    "path": "miniprogram/components/index-list/index-list.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {},\n  \"componentGenerics\": {\n    \"content\": {\n      \"default\": \"./components/content/content\"\n    }\n  }\n}"
  },
  {
    "path": "miniprogram/components/index-list/index-list.wxml",
    "content": "<scroll-view \n  class=\"page page-select-index\" \n  style=\"height: {{windowHeight}}px;\" \n  enable-back-to-top \n  scroll-into-view=\"{{intoView}}\" \n  scroll-y \n  bindscroll=\"onScroll\"\n>\n  <view>\n    <slot></slot>\n  </view>\n  <view class=\"index_list_item\" wx:for=\"{{list}}\" wx:for-index=\"groupIndex\"\n    wx:key=\"alpha\"\n    id=\"{{item.anchor}}\"\n  >\n    <view class=\"index-group__title font-size-26 tips-color\">{{item.alpha}}</view>\n    <view class=\"index-group__content\">\n      <view class=\"index-group__list\">\n        <block wx:for=\"{{item.subItems}}\" wx:for-item=\"subItem\" wx:for-index=\"contentIndex\"\n          wx:key=\"name\"\n        >\n          <view \n            class=\"index-group__item thin-border-bottom\" \n            hover-class=\"bg-highlight\" \n            data-item=\"{{subItem}}\"\n            bindtap=\"choose\">\n            <content data=\"{{subItem}}\" indexes=\"{{[groupIndex, contentIndex]}}\" />\n          </view>\n        </block>\n      </view>\n    </view>\n  </view>\n</scroll-view>\n<view \n  class=\"anchor-bar__wrp wx-flex\" \n  catchtouchstart='scrollTo' \n  catchtouchmove='scrollTo' \n  catchtouchend='removeTouching'\n>\n  <view class=\"anchor-bar wx-flex__item\">\n    <view class=\"anchor-list\">\n      <block wx:for=\"{{alphabet}}\" wx:key=\"anchor\">\n        <view class=\"anchor-item {{current == item.anchor ? ( touching ? 'selected tapped' : 'selected' ): ''}}\">\n          <view class=\"anchor-item__inner\">{{item.alpha}}</view>\n          <view class=\"anchor-item__pop\">{{item.alpha}}</view>\n        </view>\n      </block>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/components/index-list/index-list.wxss",
    "content": ".wx-flex{\n\tdisplay: flex;\n\talign-items: center;\n}\n.wx-flex__item{\n\tflex: 1;\n}\n\n.thin-border-bottom{\n\tposition: relative;\n}\n.thin-border-bottom:after{\n\tcontent: \"\";\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tright: 0;\n\theight: 1px;\n\tborder-bottom: 1px solid #EAEAEA;\n\tcolor: #e5e5e5;\n\t-webkit-transform-origin: 0 0;\n\ttransform-origin: 0 100%;\n\ttransform: scaleY(0.5);\n}\n\n.index-group__title{\n\tpadding: 12rpx 24rpx;\n\tbackground-color: #ddd;\n}\n.index-group__content{\n\tfont-size: 0;\n}\n\n.index-group__item{\n\tpadding: 30rpx 24rpx;\n\tfont-size: 30rpx;\n}\n.index-group__item.thin-border-bottom:after{\n\tleft: 24rpx;\n}\n.index-group__item:last-child::after {\n\tcontent: none;\n}\n\n.anchor-bar__wrp{\n\tposition: fixed;\n\ttop: 0;\n\tbottom: 0;\n\tright: 0;\n\twidth: 60rpx;\n\tz-index: 999;\n}\n.anchor-item{\n\tfont-size: 0;\n\ttext-align: center;\n\tposition: relative;\n}\n.anchor-item__inner{\n\tline-height: 28rpx;\n\theight: 28rpx;\n\twidth: 28rpx;\n\tborder-radius: 50%;\n\tdisplay: inline-block;\n\tfont-size: 20rpx;\n\tmargin: 2rpx 0;\n\tfont-weight: 500;\n}\n.tapped .anchor-item__pop{\n\tdisplay: block;\n}\n.anchor-item__pop{\n\tposition: absolute;\n\tfont-size: 64rpx;\n\twidth: 100rpx;\n\theight: 100rpx;\n\tline-height: 100rpx;\n\tcolor: #fff;\n\tbackground-color: #C9C9C9;\n\tborder-radius: 50%;\n\tright: 80rpx;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\tdisplay: none;\n}\n.anchor-item__pop:after{\n\tcontent: \"\";\n\tdisplay: block;\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\tleft: 80rpx;\n\tborder: 40rpx solid;\n\tborder-color: transparent transparent transparent #C9C9C9;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n}\n.anchor-item.selected .anchor-item__inner{\n\tcolor: #fff;\n\tbackground-color: #1aad19;\n}"
  },
  {
    "path": "miniprogram/components/load-more/load-more.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    loading: Boolean\n  },\n\n  attached() {\n    this.observe()\n  },\n\n  detached() {\n    this.observer && this.observer.disconnect()\n  },\n\n  methods: {\n    observe() {\n      this.observer = this.createIntersectionObserver({\n        thresholds: [0],\n        initialRatio: 1\n      })\n      this.observer\n        .relativeToViewport({\n          bottom: 60\n        })\n        .observe('.load-more', (res) => {\n          if (res.intersectionRatio > 0 && !this.loading) {\n            this.triggerEvent('loadmore')\n          }\n        })\n    }\n  }\n})"
  },
  {
    "path": "miniprogram/components/load-more/load-more.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/load-more/load-more.wxml",
    "content": "<view class='load-more'>\n  <view wx:if='{{loading}}' class='weui-loading' />\n  <view>{{loading ? 'Loading...' : 'Load more'}}</view>\n</view>"
  },
  {
    "path": "miniprogram/components/load-more/load-more.wxss",
    "content": ".load-more {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}"
  },
  {
    "path": "miniprogram/components/painter/lib/downloader.js",
    "content": "/**\n * LRU 文件存储，使用该 downloader 可以让下载的文件存储在本地，下次进入小程序后可以直接使用\n * 详细设计文档可查看 https://juejin.im/post/5b42d3ede51d4519277b6ce3\n */\nconst util = require('./util');\n\nconst SAVED_FILES_KEY = 'savedFiles';\nconst KEY_TOTAL_SIZE = 'totalSize';\nconst KEY_PATH = 'path';\nconst KEY_TIME = 'time';\nconst KEY_SIZE = 'size';\n\n// 可存储总共为 6M，目前小程序可允许的最大本地存储为 10M\nlet MAX_SPACE_IN_B = 6 * 1024 * 1024;\nlet savedFiles = {};\n\nexport default class Dowloader {\n  constructor() {\n    // app 如果设置了最大存储空间，则使用 app 中的\n    if (getApp().PAINTER_MAX_LRU_SPACE) {\n      MAX_SPACE_IN_B = getApp().PAINTER_MAX_LRU_SPACE;\n    }\n    wx.getStorage({\n      key: SAVED_FILES_KEY,\n      success: function (res) {\n        if (res.data) {\n          savedFiles = res.data;\n        }\n      },\n    });\n  }\n\n  /**\n   * 下载文件，会用 lru 方式来缓存文件到本地\n   * @param {String} url 文件的 url\n   */\n  download(url) {\n    return new Promise((resolve, reject) => {\n      if (!(url && util.isValidUrl(url))) {\n        resolve(url);\n        return;\n      }\n      const file = getFile(url);\n\n      if (file) {\n        // 检查文件是否正常，不正常需要重新下载\n        wx.getSavedFileInfo({\n          filePath: file[KEY_PATH],\n          success: (res) => {\n            resolve(file[KEY_PATH]);\n          },\n          fail: (error) => {\n            console.error(`the file is broken, redownload it, ${JSON.stringify(error)}`);\n            downloadFile(url).then((path) => {\n              resolve(path);\n            }, () => {\n              reject();\n            });\n          },\n        });\n      } else {\n        downloadFile(url).then((path) => {\n          resolve(path);\n        }, () => {\n          reject();\n        });\n      }\n    });\n  }\n}\n\nfunction downloadFile(url) {\n  return new Promise((resolve, reject) => {\n    wx.downloadFile({\n      url: url,\n      success: function (res) {\n        if (res.statusCode !== 200) {\n          console.error(`downloadFile ${url} failed res.statusCode is not 200`);\n          reject();\n          return;\n        }\n        const { tempFilePath } = res;\n        wx.getFileInfo({\n          filePath: tempFilePath,\n          success: (tmpRes) => {\n            const newFileSize = tmpRes.size;\n            doLru(newFileSize).then(() => {\n              saveFile(url, newFileSize, tempFilePath).then((filePath) => {\n                resolve(filePath);\n              });\n            }, () => {\n              resolve(tempFilePath);\n            });\n          },\n          fail: (error) => {\n          // 文件大小信息获取失败，则此文件也不要进行存储\n            console.error(`getFileInfo ${res.tempFilePath} failed, ${JSON.stringify(error)}`);\n            resolve(res.tempFilePath);\n          },\n        });\n      },\n      fail: function (error) {\n        console.error(`downloadFile failed, ${JSON.stringify(error)} `);\n        reject();\n      },\n    });\n  });\n}\n\nfunction saveFile(key, newFileSize, tempFilePath) {\n  return new Promise((resolve, reject) => {\n    wx.saveFile({\n      tempFilePath: tempFilePath,\n      success: (fileRes) => {\n        const totalSize = savedFiles[KEY_TOTAL_SIZE] ? savedFiles[KEY_TOTAL_SIZE] : 0;\n        savedFiles[key] = {};\n        savedFiles[key][KEY_PATH] = fileRes.savedFilePath;\n        savedFiles[key][KEY_TIME] = new Date().getTime();\n        savedFiles[key][KEY_SIZE] = newFileSize;\n        savedFiles['totalSize'] = newFileSize + totalSize;\n        wx.setStorage({\n          key: SAVED_FILES_KEY,\n          data: savedFiles,\n        });\n        resolve(fileRes.savedFilePath);\n      },\n      fail: (error) => {\n        console.error(`saveFile ${key} failed, then we delete all files, ${JSON.stringify(error)}`);\n        // 由于 saveFile 成功后，res.tempFilePath 处的文件会被移除，所以在存储未成功时，我们还是继续使用临时文件\n        resolve(tempFilePath);\n        // 如果出现错误，就直接情况本地的所有文件，因为你不知道是不是因为哪次lru的某个文件未删除成功\n        reset();\n      },\n    });\n  });\n}\n\n/**\n * 清空所有下载相关内容\n */\nfunction reset() {\n  wx.removeStorage({\n    key: SAVED_FILES_KEY,\n    success: () => {\n      wx.getSavedFileList({\n        success: (listRes) => {\n          removeFiles(listRes.fileList);\n        },\n        fail: (getError) => {\n          console.error(`getSavedFileList failed, ${JSON.stringify(getError)}`);\n        },\n      });\n    },\n  });\n}\n\nfunction doLru(size) {\n  return new Promise((resolve, reject) => {\n    let totalSize = savedFiles[KEY_TOTAL_SIZE] ? savedFiles[KEY_TOTAL_SIZE] : 0;\n\n    if (size + totalSize <= MAX_SPACE_IN_B) {\n      resolve();\n      return;\n    }\n    // 如果加上新文件后大小超过最大限制，则进行 lru\n    const pathsShouldDelete = [];\n    // 按照最后一次的访问时间，从小到大排序\n    const allFiles = JSON.parse(JSON.stringify(savedFiles));\n    delete allFiles[KEY_TOTAL_SIZE];\n    const sortedKeys = Object.keys(allFiles).sort((a, b) => {\n      return allFiles[a][KEY_TIME] - allFiles[b][KEY_TIME];\n    });\n\n    for (const sortedKey of sortedKeys) {\n      totalSize -= savedFiles[sortedKey].size;\n      pathsShouldDelete.push(savedFiles[sortedKey][KEY_PATH]);\n      delete savedFiles[sortedKey];\n      if (totalSize + size < MAX_SPACE_IN_B) {\n        break;\n      }\n    }\n\n    savedFiles['totalSize'] = totalSize;\n\n    wx.setStorage({\n      key: SAVED_FILES_KEY,\n      data: savedFiles,\n      success: () => {\n      // 保证 storage 中不会存在不存在的文件数据\n        if (pathsShouldDelete.length > 0) {\n          removeFiles(pathsShouldDelete);\n        }\n        resolve();\n      },\n      fail: (error) => {\n        console.error(`doLru setStorage failed, ${JSON.stringify(error)}`);\n        reject();\n      },\n    });\n  });\n}\n\nfunction removeFiles(pathsShouldDelete) {\n  for (const pathDel of pathsShouldDelete) {\n    let delPath = pathDel;\n    if (typeof pathDel === 'object') {\n      delPath = pathDel.filePath;\n    }\n    wx.removeSavedFile({\n      filePath: delPath,\n      fail: (error) => {\n        console.error(`removeSavedFile ${pathDel} failed, ${JSON.stringify(error)}`);\n      },\n    });\n  }\n}\n\nfunction getFile(key) {\n  if (!savedFiles[key]) {\n    return;\n  }\n  savedFiles[key]['time'] = new Date().getTime();\n  wx.setStorage({\n    key: SAVED_FILES_KEY,\n    data: savedFiles,\n  });\n  return savedFiles[key];\n}\n"
  },
  {
    "path": "miniprogram/components/painter/lib/gradient.js",
    "content": "/* eslint-disable */\n// 当ctx传入当前文件，const grd = ctx.createCircularGradient() 和 \n// const grd = this.ctx.createLinearGradient() 无效，因此只能分开处理\n// 先分析，在外部创建grd，再传入使用就可以\n\n!(function () {\n\n  var api = {\n    isGradient: function(bg) {\n      if (bg && (bg.startsWith('linear') || bg.startsWith('radial'))) {\n        return true;\n      } \n      return false;\n    },\n\n    doGradient: function(bg, width, height, ctx) {\n      if (bg.startsWith('linear')) {\n        linearEffect(width, height, bg, ctx);\n      } else if (bg.startsWith('radial')) {\n        radialEffect(width, height, bg, ctx);\n      }\n    },\n  }\n\n  function analizeGrad(string) {\n    const colorPercents = string.substring(0, string.length - 1).split(\"%,\");\n    const colors = [];\n    const percents = [];\n    for (let colorPercent of colorPercents) {\n      colors.push(colorPercent.substring(0, colorPercent.lastIndexOf(\" \")).trim());\n      percents.push(colorPercent.substring(colorPercent.lastIndexOf(\" \"), colorPercent.length) / 100);\n    }\n    return {colors: colors, percents: percents};\n  }\n\n  function radialEffect(width, height, bg, ctx) {\n    const colorPer = analizeGrad(bg.match(/radial-gradient\\((.+)\\)/)[1]);\n    const grd = ctx.createCircularGradient(0, 0, width < height ? height / 2 : width / 2);\n    for (let i = 0; i < colorPer.colors.length; i++) {\n      grd.addColorStop(colorPer.percents[i], colorPer.colors[i]);\n    }\n    ctx.fillStyle = grd;\n    //ctx.fillRect(-(width / 2), -(height / 2), width, height);\n  }\n\n  function analizeLinear(bg, width, height) {\n    const direction = bg.match(/([-]?\\d{1,3})deg/);\n    const dir = direction && direction[1] ? parseFloat(direction[1]) : 0;\n    let coordinate;\n    switch (dir) {\n      case 0: coordinate = [0, -height / 2, 0, height / 2]; break;\n      case 90: coordinate = [width / 2, 0, -width / 2, 0]; break;\n      case -90: coordinate = [-width / 2, 0, width / 2, 0]; break;\n      case 180: coordinate = [0, height / 2, 0, -height / 2]; break;\n      case -180: coordinate = [0, -height / 2, 0, height / 2]; break;\n      default:\n        let x1 = 0;\n        let y1 = 0;\n        let x2 = 0;\n        let y2 = 0;\n        if (direction[1] > 0 && direction[1] < 90) {\n          x1 = (width / 2) - ((width / 2) * Math.tan((90 - direction[1]) * Math.PI * 2 / 360) - height / 2) * Math.sin(2 * (90 - direction[1]) * Math.PI * 2 / 360) / 2;\n          y2 = Math.tan((90 - direction[1]) * Math.PI * 2 / 360) * x1;\n          x2 = -x1;\n          y1 = -y2;\n        } else if (direction[1] > -180 && direction[1] < -90) {\n          x1 = -(width / 2) + ((width / 2) * Math.tan((90 - direction[1]) * Math.PI * 2 / 360) - height / 2) * Math.sin(2 * (90 - direction[1]) * Math.PI * 2 / 360) / 2;\n          y2 = Math.tan((90 - direction[1]) * Math.PI * 2 / 360) * x1;\n          x2 = -x1;\n          y1 = -y2;\n        } else if (direction[1] > 90 && direction[1] < 180) {\n          x1 = (width / 2) + (-(width / 2) * Math.tan((90 - direction[1]) * Math.PI * 2 / 360) - height / 2) * Math.sin(2 * (90 - direction[1]) * Math.PI * 2 / 360) / 2;\n          y2 = Math.tan((90 - direction[1]) * Math.PI * 2 / 360) * x1;\n          x2 = -x1;\n          y1 = -y2;\n        } else {\n          x1 = -(width / 2) - (-(width / 2) * Math.tan((90 - direction[1]) * Math.PI * 2 / 360) - height / 2) * Math.sin(2 * (90 - direction[1]) * Math.PI * 2 / 360) / 2;\n          y2 = Math.tan((90 - direction[1]) * Math.PI * 2 / 360) * x1;\n          x2 = -x1;\n          y1 = -y2;\n        }\n        coordinate = [x1, y1, x2, y2];\n      break;\n    }\n    return coordinate;\n  }\n\n  function linearEffect(width, height, bg, ctx) {\n    const param = analizeLinear(bg, width, height);\n    const grd = ctx.createLinearGradient(param[0], param[1], param[2], param[3]);\n    const content = bg.match(/linear-gradient\\((.+)\\)/)[1];\n    const colorPer = analizeGrad(content.substring(content.indexOf(',') + 1));\n    for (let i = 0; i < colorPer.colors.length; i++) {\n      grd.addColorStop(colorPer.percents[i], colorPer.colors[i]);\n    }\n    ctx.fillStyle = grd\n    //ctx.fillRect(-(width / 2), -(height / 2), width, height);\n  }\n\n  module.exports = { api }\n\n})();\n"
  },
  {
    "path": "miniprogram/components/painter/lib/pen.js",
    "content": "const QR = require('./qrcode.js');\nconst GD = require('./gradient.js');\n\nexport default class Painter {\n\n  constructor(ctx, data) {\n    this.ctx = ctx;\n    this.data = data;\n    /**\n     * 记录元素信息\n     * @type {{\n     *  [indexOrId: string]: {\n     *    width: number\n     *    height: number\n     *    left: number\n     *    top: number\n     *  }\n     * }}\n     */\n    this.elements = {};\n    this.globalWidth = {};\n    this.globalHeight = {};\n  }\n\n  paint(callback) {\n    this.style = {\n      width: this.data.width.toPx(),\n      height: this.data.height.toPx(),\n    };\n    this._background();\n    const views = this.data.views || [];\n    views.forEach((view) => this._drawAbsolute(view))\n    this.ctx.draw(false, () => {\n      callback();\n    });\n  }\n\n  _background() {\n    this.ctx.save();\n    const {\n      width,\n      height,\n    } = this.style;\n    const bg = this.data.background;\n    this.ctx.translate(width / 2, height / 2);\n\n    this._doClip(this.data.borderRadius, width, height);\n    if (!bg) {\n      // 如果未设置背景，则默认使用白色\n      this.ctx.fillStyle = '#fff';\n      this.ctx.fillRect(-(width / 2), -(height / 2), width, height);\n    } else if (bg.startsWith('#') || bg.startsWith('rgba') || bg.toLowerCase() === 'transparent') {\n      // 背景填充颜色\n      this.ctx.fillStyle = bg;\n      this.ctx.fillRect(-(width / 2), -(height / 2), width, height);\n    } else if (GD.api.isGradient(bg)) {\n      GD.api.doGradient(bg, width, height, this.ctx);\n      this.ctx.fillRect(-(width / 2), -(height / 2), width, height);\n    } else {\n      // 背景填充图片\n      this.ctx.drawImage(bg, -(width / 2), -(height / 2), width, height);\n    }\n    this.ctx.restore();\n  }\n\n  _drawAbsolute(view) {\n    if (!view) {\n      return\n    }\n    // 证明 css 为数组形式，需要合并\n    if (view.css && view.css.length) {\n      /* eslint-disable no-param-reassign */\n      view.css = Object.assign(...view.css);\n    }\n    switch (view.type) {\n      case 'image':\n        this._drawAbsImage(view);\n        break;\n      case 'text':\n        this._fillAbsText(view);\n        break;\n      case 'rect':\n        this._drawAbsRect(view);\n        break;\n      case 'qrcode':\n        this._drawQRCode(view);\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * 根据 borderRadius 进行裁减\n   */\n  _doClip(borderRadius, width, height) {\n    if (borderRadius && width && height) {\n      // radius 改为4个值，分别对应4个角\n      let radius = borderRadius.trim().split(' ');\n      switch (radius.length) {\n        case 1:\n          radius.length = 4;\n          radius.fill(radius[0], 1, 4);\n          break;\n        default:\n          radius[2] = radius[2] || radius[0];\n          radius[3] = radius[3] || radius[1];\n      }\n      // 转换 px 单位，只保留数字\n      radius = radius.map((v) => Math.min(v.toPx(), width / 2, height / 2));\n\n      // 防止在某些机型上周边有黑框现象，此处如果直接设置 fillStyle 为透明，在 Android 机型上会导致被裁减的图片也变为透明， iOS 和 IDE 上不会\n      // globalAlpha 在 1.9.90 起支持，低版本下无效，但把 fillStyle 设为了 white，相对默认的 black 要好点\n      this.ctx.globalAlpha = 0;\n      this.ctx.fillStyle = 'white';\n      this.ctx.beginPath();\n      this.ctx.arc(-width / 2 + radius[0], -height / 2 + radius[0], radius[0], 1 * Math.PI, 1.5 * Math.PI);\n      this.ctx.lineTo(width / 2 - radius[1], -height / 2);\n      this.ctx.arc(width / 2 - radius[1], -height / 2 + radius[1], radius[1], 1.5 * Math.PI, 2 * Math.PI);\n      this.ctx.lineTo(width / 2, height / 2 - radius[2]);\n      this.ctx.arc(width / 2 - radius[2], height / 2 - radius[2], radius[2], 0, 0.5 * Math.PI);\n      this.ctx.lineTo(-width / 2 + radius[3], height / 2);\n      this.ctx.arc(-width / 2 + radius[3], height / 2 - radius[3], radius[3], 0.5 * Math.PI, 1 * Math.PI);\n      this.ctx.closePath();\n      this.ctx.fill();\n      // 在 ios 的 6.6.6 版本上 clip 有 bug，禁掉此类型上的 clip，也就意味着，在此版本微信的 ios 设备下无法使用 border 属性\n      if (!(getApp().systemInfo &&\n          getApp().systemInfo.version <= '6.6.6' &&\n          getApp().systemInfo.platform === 'ios')) {\n        this.ctx.clip();\n      }\n      this.ctx.globalAlpha = 1;\n    }\n  }\n\n  /**\n   * 画边框\n   */\n  _doBorder(view, width, height) {\n    if (!view.css) {\n      return;\n    }\n    const {\n      borderRadius,\n      borderWidth,\n      borderColor,\n    } = view.css;\n    if (!borderWidth) {\n      return;\n    }\n    this.ctx.save();\n    this._preProcess({ view, notClip: true });\n    let r;\n    if (borderRadius) {\n      r = Math.min(borderRadius.toPx(), width / 2, height / 2);\n    } else {\n      r = 0;\n    }\n    const lineWidth = borderWidth.toPx();\n    this.ctx.lineWidth = lineWidth;\n    this.ctx.strokeStyle = (borderColor || 'black');\n    this.ctx.beginPath();\n    this.ctx.arc(-width / 2 + r, -height / 2 + r, r + lineWidth / 2, 1 * Math.PI, 1.5 * Math.PI);\n    this.ctx.lineTo(width / 2 - r, -height / 2 - lineWidth / 2);\n    this.ctx.arc(width / 2 - r, -height / 2 + r, r + lineWidth / 2, 1.5 * Math.PI, 2 * Math.PI);\n    this.ctx.lineTo(width / 2 + lineWidth / 2, height / 2 - r);\n    this.ctx.arc(width / 2 - r, height / 2 - r, r + lineWidth / 2, 0, 0.5 * Math.PI);\n    this.ctx.lineTo(-width / 2 + r, height / 2 + lineWidth / 2);\n    this.ctx.arc(-width / 2 + r, height / 2 - r, r + lineWidth / 2, 0.5 * Math.PI, 1 * Math.PI);\n    this.ctx.closePath();\n    this.ctx.stroke();\n    this.ctx.restore();\n  }\n\n  /**\n   * \n   * @param {Object} params\n   * @param {Object} params.view\n   * @param {boolean} [params.notClip]\n   */\n  _preProcess ({ view, notClip }) {\n    let width = 0;\n    let height;\n    let extra;\n    switch (view.type) {\n      case 'text': {\n        const textArray = view.text.split('\\n');\n        // 处理多个连续的'\\n'\n        for (let i = 0; i < textArray.length; ++i) {\n          if (textArray[i] === '') {\n            textArray[i] = ' ';\n          }\n        }\n        const fontWeight = view.css.fontWeight === 'bold' ? 'bold' : 'normal';\n        view.css.fontSize = view.css.fontSize ? view.css.fontSize : '20rpx';\n        this.ctx.font = `normal ${fontWeight} ${view.css.fontSize.toPx()}px ${view.css.fontFamily ? view.css.fontFamily : 'sans-serif'}`;\n        // this.ctx.setFontSize(view.css.fontSize.toPx());\n        // 计算行数\n        let lines = 0;\n        const linesArray = [];\n        for (let i = 0; i < textArray.length; ++i) {\n          const textLength = this.ctx.measureText(textArray[i]).width;\n          const partWidth = view.css.width ? view.css.width.toPx() : textLength;\n          const calLines = Math.ceil(textLength / partWidth);\n          width = partWidth > width ? partWidth : width;\n          lines += calLines;\n          linesArray[i] = calLines;\n        }\n        lines = view.css.maxLines < lines ? view.css.maxLines : lines;\n        const lineHeight = view.css.lineHeight ? view.css.lineHeight.toPx() : view.css.fontSize.toPx();\n        height = lineHeight * lines;\n        extra = {\n          lines: lines,\n          lineHeight: lineHeight,\n          textArray: textArray,\n          linesArray: linesArray,\n        };\n        break;\n      }\n      case 'image': {\n        // image的长宽设置成auto的逻辑处理\n        const ratio = getApp().systemInfo.pixelRatio ? getApp().systemInfo.pixelRatio : 2;\n        // 有css却未设置width或height，则默认为auto\n        if (view.css) {\n          if (!view.css.width) {\n            view.css.width = 'auto';\n          }\n          if (!view.css.height) {\n            view.css.height = 'auto';\n          }\n        }\n        if (!view.css || (view.css.width === 'auto' && view.css.height === 'auto')) {\n          width = Math.round(view.sWidth / ratio);\n          height = Math.round(view.sHeight / ratio);\n        } else if (view.css.width === 'auto') {\n          height = view.css.height.toPx();\n          width = view.sWidth / view.sHeight * height;\n        } else if (view.css.height === 'auto') {\n          width = view.css.width.toPx();\n          height = view.sHeight / view.sWidth * width;\n        } else {\n          width = view.css.width.toPx();\n          height = view.css.height.toPx();\n        }\n        break;\n      }\n      default:\n        if (!(view.css.width && view.css.height)) {\n          console.error('You should set width and height');\n          return;\n        }\n        width = view.css.width.toPx();\n        height = view.css.height.toPx();\n        break;\n    }\n    let x;\n    if (view.css && view.css.right) {\n      if (typeof view.css.right === 'string') {\n        x = this.style.width - view.css.right.toPx(true);\n      } else {\n        // 可以用数组方式，把文字长度计算进去\n        // [right, 文字id, 乘数（默认 1）]\n        const rights = view.css.right;\n        // x = relativeElX + relativeWidth * percent + gap - elWidth\n        x = this.style.width - rights[0].toPx(true) - this.globalWidth[rights[1]] * (rights[2] || 1);\n      }\n    } else if (view.css && view.css.left) {\n      if (typeof view.css.left === 'string') {\n        x = view.css.left.toPx(true);\n      } else {\n        const lefts = view.css.left;\n        // x = relativeElX + relativeWidth * percent + gap\n        // x = lefts[0].toPx(true) + this.globalWidth[lefts[1]] * (lefts[2] || 1);\n        const relativeEl = this.elements[lefts[1]];\n        x = relativeEl.left + relativeEl.width * (lefts[2] === undefined ? 1 : lefts[2]) + lefts[0].toPx(true);\n      }\n    } else {\n      x = 0;\n    }\n    //const y = view.css && view.css.bottom ? this.style.height - height - view.css.bottom.toPx(true) : (view.css && view.css.top ? view.css.top.toPx(true) : 0);\n    let y;\n    if (view.css && view.css.bottom) {\n      y = this.style.height - height - view.css.bottom.toPx(true);\n    } else {\n      if (view.css && view.css.top) {\n        if (typeof view.css.top === 'string') {\n          y = view.css.top.toPx(true);\n        } else {\n          const tops = view.css.top;\n          // y = relativeElY + relativeElHeight * percent + gap\n          // y = tops[0].toPx(true) + this.globalHeight[tops[1]] * (tops[2] || 1);\n          const relativeEl = this.elements[tops[1]];\n          y = relativeEl.top + tops[0].toPx(true) + relativeEl.height * (tops[2] === undefined ? 1 : tops[2]);\n        }\n      } else {\n        y = 0\n      }\n    }\n\n    const angle = view.css && view.css.rotate ? this._getAngle(view.css.rotate) : 0;\n    // 当设置了 right 时，默认 align 用 right，反之用 left\n    const align = view.css && view.css.align ? view.css.align : (view.css && view.css.right ? 'right' : 'left');\n    switch (align) {\n      case 'center':\n        this.ctx.translate(x, y + height / 2);\n        break;\n      case 'right':\n        this.ctx.translate(x - width / 2, y + height / 2);\n        break;\n      default:\n        this.ctx.translate(x + width / 2, y + height / 2);\n        break;\n    }\n    this.ctx.rotate(angle);\n    if (!notClip && view.css && view.css.borderRadius && view.type !== 'rect') {\n      this._doClip(view.css.borderRadius, width, height);\n    }\n    this._doShadow(view);\n    const elInfo = {\n      x,\n      y,\n      width,\n      height,\n      left: x,\n      top: y,\n      extra\n    };\n    if (view.id) {\n      this.elements[view.id] = elInfo;\n      this.globalWidth[view.id] = width;\n      this.globalHeight[view.id] = height;\n    }\n    return elInfo;\n  }\n\n  // 画文字的背景图片\n  _doBackground(view) {\n    this.ctx.save();\n    const {\n      width: rawWidth,\n      height: rawHeight,\n    } = this._preProcess({ view, notClip: true });\n\n    const {\n      background,\n      padding,\n    } = view.css;\n    let pd = [0, 0, 0, 0];\n    if (padding) {\n      const pdg = padding.split(/\\s+/);\n      if (pdg.length === 1) {\n        const x = pdg[0].toPx();\n        pd = [x, x, x, x];\n      }\n      if (pdg.length === 2) {\n        const x = pdg[0].toPx();\n        const y = pdg[1].toPx();\n        pd = [x, y, x, y];\n      }\n      if (pdg.length === 3) {\n        const x = pdg[0].toPx();\n        const y = pdg[1].toPx();\n        const z = pdg[2].toPx();\n        pd = [x, y, z, y];\n      }\n      if (pdg.length === 4) {\n        const x = pdg[0].toPx();\n        const y = pdg[1].toPx();\n        const z = pdg[2].toPx();\n        const a = pdg[3].toPx();\n        pd = [x, y, z, a];\n      }\n    }\n    const width = rawWidth + pd[1] + pd[3];\n    const height = rawHeight + pd[0] + pd[2];\n    this._doClip(view.css.borderRadius, width, height)\n    if (GD.api.isGradient(background)) {\n      GD.api.doGradient(background, width, height, this.ctx);\n    } else {\n      this.ctx.fillStyle = background;\n    }\n    this.ctx.fillRect(-(width / 2), -(height / 2), width, height);\n\n    this.ctx.restore();\n  }\n\n  _drawQRCode(view) {\n    this.ctx.save();\n    const {\n      width,\n      height,\n    } = this._preProcess({ view });\n    QR.api.draw(view.content, this.ctx, -width / 2, -height / 2, width, height, view.css.background, view.css.color);\n    this.ctx.restore();\n    this._doBorder(view, width, height);\n  }\n\n  _drawAbsImage(view) {\n    if (!view.url) {\n      return;\n    }\n    this.ctx.save();\n    const {\n      width,\n      height,\n    } = this._preProcess({ view });\n    // 获得缩放到图片大小级别的裁减框\n    let rWidth = view.sWidth;\n    let rHeight = view.sHeight;\n    let startX = 0;\n    let startY = 0;\n    // 绘画区域比例\n    const cp = width / height;\n    // 原图比例\n    const op = view.sWidth / view.sHeight;\n    if (cp >= op) {\n      rHeight = rWidth / cp;\n      startY = Math.round((view.sHeight - rHeight) / 2);\n    } else {\n      rWidth = rHeight * cp;\n      startX = Math.round((view.sWidth - rWidth) / 2);\n    }\n    if (view.css && view.css.mode === 'scaleToFill') {\n      this.ctx.drawImage(view.url, -(width / 2), -(height / 2), width, height);\n    } else {\n      this.ctx.drawImage(view.url, startX, startY, rWidth, rHeight, -(width / 2), -(height / 2), width, height);\n    }\n    this.ctx.restore();\n    this._doBorder(view, width, height);\n  }\n\n  _fillAbsText(view) {\n    if (!view.text) {\n      return;\n    }\n    if (view.css.background) {\n      // 生成背景\n      this._doBackground(view);\n    }\n    this.ctx.save();\n    const {\n      width,\n      height,\n      extra,\n    } = this._preProcess({\n      view,\n      notClip: view.css.background && view.css.borderRadius\n    });\n\n    this.ctx.fillStyle = (view.css.color || 'black');\n    const {\n      lines,\n      lineHeight,\n      textArray,\n      linesArray,\n    } = extra;\n    // 如果设置了id，则保留 text 的长度\n    if (view.id) {\n      let textWidth = 0;\n      for (let i = 0; i < textArray.length; ++i) {\n        textWidth = this.ctx.measureText(textArray[i]).width > textWidth ? this.ctx.measureText(textArray[i]).width : textWidth;\n      }\n      this.globalWidth[view.id] = width ? (textWidth < width ? textWidth : width) : textWidth;\n    }\n    let lineIndex = 0;\n    for (let j = 0; j < textArray.length; ++j) {\n      const preLineLength = Math.round(textArray[j].length / linesArray[j]);\n      let start = 0;\n      let alreadyCount = 0;\n      for (let i = 0; i < linesArray[j]; ++i) {\n        // 绘制行数大于最大行数，则直接跳出循环\n        if (lineIndex >= lines) {\n          break;\n        }\n        alreadyCount = preLineLength;\n        let text = textArray[j].substr(start, alreadyCount);\n        let measuredWith = this.ctx.measureText(text).width;\n        // 如果测量大小小于width一个字符的大小，则进行补齐，如果测量大小超出 width，则进行减除\n        // 如果已经到文本末尾，也不要进行该循环\n        while ((start + alreadyCount <= textArray[j].length) && (width - measuredWith > view.css.fontSize.toPx() || measuredWith > width)) {\n          if (measuredWith < width) {\n            text = textArray[j].substr(start, ++alreadyCount);\n          } else {\n            if (text.length <= 1) {\n              // 如果只有一个字符时，直接跳出循环\n              break;\n            }\n            text = textArray[j].substr(start, --alreadyCount);\n          }\n          measuredWith = this.ctx.measureText(text).width;\n        }\n        start += text.length;\n        // 如果是最后一行了，发现还有未绘制完的内容，则加...\n        if (lineIndex === lines - 1 && (j < textArray.length - 1 || start < textArray[j].length)) {\n          while (this.ctx.measureText(`${text}...`).width > width) {\n            if (text.length <= 1) {\n              // 如果只有一个字符时，直接跳出循环\n              break;\n            }\n            text = text.substring(0, text.length - 1);\n          }\n          text += '...';\n          measuredWith = this.ctx.measureText(text).width;\n        }\n        this.ctx.setTextAlign(view.css.textAlign ? view.css.textAlign : 'left');\n        let x;\n        switch (view.css.textAlign) {\n          case 'center':\n            x = 0;\n            break;\n          case 'right':\n            x = (width / 2);\n            break;\n          default:\n            x = -(width / 2);\n            break;\n        }\n        const y = -(height / 2) + (lineIndex === 0 ? view.css.fontSize.toPx() : (view.css.fontSize.toPx() + lineIndex * lineHeight));\n        lineIndex++;\n        if (view.css.textStyle === 'stroke') {\n          this.ctx.strokeText(text, x, y, measuredWith);\n        } else {\n          this.ctx.fillText(text, x, y, measuredWith);\n        }\n        const fontSize = view.css.fontSize.toPx();\n        if (view.css.textDecoration) {\n          this.ctx.beginPath();\n          if (/\\bunderline\\b/.test(view.css.textDecoration)) {\n            this.ctx.moveTo(x, y);\n            this.ctx.lineTo(x + measuredWith, y);\n          }\n          if (/\\boverline\\b/.test(view.css.textDecoration)) {\n            this.ctx.moveTo(x, y - fontSize);\n            this.ctx.lineTo(x + measuredWith, y - fontSize);\n          }\n          if (/\\bline-through\\b/.test(view.css.textDecoration)) {\n            this.ctx.moveTo(x, y - fontSize / 3);\n            this.ctx.lineTo(x + measuredWith, y - fontSize / 3);\n          }\n          this.ctx.closePath();\n          this.ctx.strokeStyle = view.css.color;\n          this.ctx.stroke();\n        }\n      }\n    }\n    this.ctx.restore();\n    this._doBorder(view, width, height);\n  }\n\n  _drawAbsRect(view) {\n    this.ctx.save();\n    const {\n      width,\n      height,\n    } = this._preProcess({ view });\n    if (GD.api.isGradient(view.css.color)) {\n      GD.api.doGradient(view.css.color, width, height, this.ctx);\n    } else {\n      this.ctx.fillStyle = view.css.color;\n    }\n    const borderRadius = view.css.borderRadius\n    const r = borderRadius ? Math.min(borderRadius.toPx(), width / 2, height / 2) : 0;\n    this.ctx.beginPath();\n    this.ctx.arc(-width / 2 + r, -height / 2 + r, r, 1 * Math.PI, 1.5 * Math.PI); //左上角圆弧\n    this.ctx.lineTo(width / 2 - r, -height / 2);\n    this.ctx.arc(width / 2 - r, -height / 2 + r, r, 1.5 * Math.PI, 2 * Math.PI); // 右上角圆弧\n    this.ctx.lineTo(width / 2, height / 2 - r);\n    this.ctx.arc(width / 2 - r, height / 2 - r, r, 0, 0.5 * Math.PI); // 右下角圆弧\n    this.ctx.lineTo(-width / 2 + r, height / 2);\n    this.ctx.arc(-width / 2 + r, height / 2 - r, r, 0.5 * Math.PI, 1 * Math.PI); // 左下角圆弧\n    this.ctx.closePath();\n    this.ctx.fill();\n    this.ctx.restore();\n    this._doBorder(view, width, height);\n  }\n\n  // shadow 支持 (x, y, blur, color), 不支持 spread\n  // shadow:0px 0px 10px rgba(0,0,0,0.1);\n  _doShadow(view) {\n    if (!view.css || !view.css.shadow) {\n      return;\n    }\n    const box = view.css.shadow.replace(/,\\s+/g, ',').split(' ');\n    if (box.length > 4) {\n      console.error('shadow don\\'t spread option');\n      return;\n    }\n    this.ctx.shadowOffsetX = parseInt(box[0], 10);\n    this.ctx.shadowOffsetY = parseInt(box[1], 10);\n    this.ctx.shadowBlur = parseInt(box[2], 10);\n    this.ctx.shadowColor = box[3];\n  }\n\n  _getAngle(angle) {\n    return Number(angle) * Math.PI / 180;\n  }\n}"
  },
  {
    "path": "miniprogram/components/painter/lib/qrcode.js",
    "content": "/* eslint-disable */\n!(function () {\n\n  // alignment pattern\n  var adelta = [\n    0, 11, 15, 19, 23, 27, 31,\n    16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24,\n    26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28\n  ];\n\n  // version block\n  var vpat = [\n    0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d,\n    0x928, 0xb78, 0x45d, 0xa17, 0x532, 0x9a6, 0x683, 0x8c9,\n    0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75,\n    0x250, 0x9d5, 0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64,\n    0x541, 0xc69\n  ];\n\n  // final format bits with mask: level << 3 | mask\n  var fmtword = [\n    0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976,    //L\n    0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0,    //M\n    0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed,    //Q\n    0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b    //H\n  ];\n\n  // 4 per version: number of blocks 1,2; data width; ecc width\n  var eccblocks = [\n    1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17,\n    1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28,\n    1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22,\n    1, 0, 80, 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16,\n    1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22,\n    2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28,\n    2, 0, 78, 20, 4, 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26,\n    2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26,\n    2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24,\n    2, 2, 68, 18, 4, 1, 43, 26, 6, 2, 19, 24, 6, 2, 15, 28,\n    4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24,\n    2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28,\n    4, 0, 107, 26, 8, 1, 37, 22, 8, 4, 20, 24, 12, 4, 11, 22,\n    3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24,\n    5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24,\n    5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 19, 24, 3, 13, 15, 30,\n    1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28,\n    5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28,\n    3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 21, 26, 9, 16, 13, 26,\n    3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28,\n    4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30,\n    2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 24, 30, 34, 0, 13, 24,\n    4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30,\n    6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30,\n    8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 24, 30, 22, 13, 15, 30,\n    10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30,\n    8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30,\n    3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 24, 30, 11, 31, 15, 30,\n    7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30,\n    5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30,\n    13, 3, 115, 30, 2, 29, 46, 28, 42, 1, 24, 30, 23, 28, 15, 30,\n    17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30,\n    17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30,\n    13, 6, 115, 30, 14, 23, 46, 28, 44, 7, 24, 30, 59, 1, 16, 30,\n    12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30,\n    6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30,\n    17, 4, 122, 30, 29, 14, 46, 28, 49, 10, 24, 30, 24, 46, 15, 30,\n    4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30,\n    20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30,\n    19, 6, 118, 30, 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30\n  ];\n\n  // Galois field log table\n  var glog = [\n    0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b,\n    0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71,\n    0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45,\n    0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6,\n    0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88,\n    0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40,\n    0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d,\n    0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57,\n    0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18,\n    0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e,\n    0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61,\n    0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2,\n    0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6,\n    0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a,\n    0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7,\n    0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf\n  ];\n\n  // Galios field exponent table\n  var gexp = [\n    0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26,\n    0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0,\n    0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23,\n    0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1,\n    0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0,\n    0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2,\n    0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce,\n    0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc,\n    0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54,\n    0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73,\n    0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff,\n    0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41,\n    0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6,\n    0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09,\n    0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,\n    0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00\n  ];\n\n  // Working buffers:\n  // data input and ecc append, image working buffer, fixed part of image, run lengths for badness\n  var strinbuf = [], eccbuf = [], qrframe = [], framask = [], rlens = [];\n  // Control values - width is based on version, last 4 are from table.\n  var version, width, neccblk1, neccblk2, datablkw, eccblkwid;\n  var ecclevel = 2;\n  // set bit to indicate cell in qrframe is immutable.  symmetric around diagonal\n  function setmask(x, y) {\n    var bt;\n    if (x > y) {\n      bt = x;\n      x = y;\n      y = bt;\n    }\n    // y*y = 1+3+5...\n    bt = y;\n    bt *= y;\n    bt += y;\n    bt >>= 1;\n    bt += x;\n    framask[bt] = 1;\n  }\n\n  // enter alignment pattern - black to qrframe, white to mask (later black frame merged to mask)\n  function putalign(x, y) {\n    var j;\n\n    qrframe[x + width * y] = 1;\n    for (j = -2; j < 2; j++) {\n      qrframe[(x + j) + width * (y - 2)] = 1;\n      qrframe[(x - 2) + width * (y + j + 1)] = 1;\n      qrframe[(x + 2) + width * (y + j)] = 1;\n      qrframe[(x + j + 1) + width * (y + 2)] = 1;\n    }\n    for (j = 0; j < 2; j++) {\n      setmask(x - 1, y + j);\n      setmask(x + 1, y - j);\n      setmask(x - j, y - 1);\n      setmask(x + j, y + 1);\n    }\n  }\n\n  //========================================================================\n  // Reed Solomon error correction\n  // exponentiation mod N\n  function modnn(x) {\n    while (x >= 255) {\n      x -= 255;\n      x = (x >> 8) + (x & 255);\n    }\n    return x;\n  }\n\n  var genpoly = [];\n\n  // Calculate and append ECC data to data block.  Block is in strinbuf, indexes to buffers given.\n  function appendrs(data, dlen, ecbuf, eclen) {\n    var i, j, fb;\n\n    for (i = 0; i < eclen; i++)\n      strinbuf[ecbuf + i] = 0;\n    for (i = 0; i < dlen; i++) {\n      fb = glog[strinbuf[data + i] ^ strinbuf[ecbuf]];\n      if (fb != 255)     /* fb term is non-zero */\n        for (j = 1; j < eclen; j++)\n          strinbuf[ecbuf + j - 1] = strinbuf[ecbuf + j] ^ gexp[modnn(fb + genpoly[eclen - j])];\n      else\n        for (j = ecbuf; j < ecbuf + eclen; j++)\n          strinbuf[j] = strinbuf[j + 1];\n      strinbuf[ecbuf + eclen - 1] = fb == 255 ? 0 : gexp[modnn(fb + genpoly[0])];\n    }\n  }\n\n  //========================================================================\n  // Frame data insert following the path rules\n\n  // check mask - since symmetrical use half.\n  function ismasked(x, y) {\n    var bt;\n    if (x > y) {\n      bt = x;\n      x = y;\n      y = bt;\n    }\n    bt = y;\n    bt += y * y;\n    bt >>= 1;\n    bt += x;\n    return framask[bt];\n  }\n\n  //========================================================================\n  //  Apply the selected mask out of the 8.\n  function applymask(m) {\n    var x, y, r3x, r3y;\n\n    switch (m) {\n      case 0:\n        for (y = 0; y < width; y++)\n          for (x = 0; x < width; x++)\n            if (!((x + y) & 1) && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n        break;\n      case 1:\n        for (y = 0; y < width; y++)\n          for (x = 0; x < width; x++)\n            if (!(y & 1) && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n        break;\n      case 2:\n        for (y = 0; y < width; y++)\n          for (r3x = 0, x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3)\n              r3x = 0;\n            if (!r3x && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        break;\n      case 3:\n        for (r3y = 0, y = 0; y < width; y++ , r3y++) {\n          if (r3y == 3)\n            r3y = 0;\n          for (r3x = r3y, x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3)\n              r3x = 0;\n            if (!r3x && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        }\n        break;\n      case 4:\n        for (y = 0; y < width; y++)\n          for (r3x = 0, r3y = ((y >> 1) & 1), x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3) {\n              r3x = 0;\n              r3y = !r3y;\n            }\n            if (!r3y && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        break;\n      case 5:\n        for (r3y = 0, y = 0; y < width; y++ , r3y++) {\n          if (r3y == 3)\n            r3y = 0;\n          for (r3x = 0, x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3)\n              r3x = 0;\n            if (!((x & y & 1) + !(!r3x | !r3y)) && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        }\n        break;\n      case 6:\n        for (r3y = 0, y = 0; y < width; y++ , r3y++) {\n          if (r3y == 3)\n            r3y = 0;\n          for (r3x = 0, x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3)\n              r3x = 0;\n            if (!(((x & y & 1) + (r3x && (r3x == r3y))) & 1) && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        }\n        break;\n      case 7:\n        for (r3y = 0, y = 0; y < width; y++ , r3y++) {\n          if (r3y == 3)\n            r3y = 0;\n          for (r3x = 0, x = 0; x < width; x++ , r3x++) {\n            if (r3x == 3)\n              r3x = 0;\n            if (!(((r3x && (r3x == r3y)) + ((x + y) & 1)) & 1) && !ismasked(x, y))\n              qrframe[x + y * width] ^= 1;\n          }\n        }\n        break;\n    }\n    return;\n  }\n\n  // Badness coefficients.\n  var N1 = 3, N2 = 3, N3 = 40, N4 = 10;\n\n  // Using the table of the length of each run, calculate the amount of bad image \n  // - long runs or those that look like finders; called twice, once each for X and Y\n  function badruns(length) {\n    var i;\n    var runsbad = 0;\n    for (i = 0; i <= length; i++)\n      if (rlens[i] >= 5)\n        runsbad += N1 + rlens[i] - 5;\n    // BwBBBwB as in finder\n    for (i = 3; i < length - 1; i += 2)\n      if (rlens[i - 2] == rlens[i + 2]\n        && rlens[i + 2] == rlens[i - 1]\n        && rlens[i - 1] == rlens[i + 1]\n        && rlens[i - 1] * 3 == rlens[i]\n        // white around the black pattern? Not part of spec\n        && (rlens[i - 3] == 0 // beginning\n          || i + 3 > length  // end\n          || rlens[i - 3] * 3 >= rlens[i] * 4 || rlens[i + 3] * 3 >= rlens[i] * 4)\n      )\n        runsbad += N3;\n    return runsbad;\n  }\n\n  // Calculate how bad the masked image is - blocks, imbalance, runs, or finders.\n  function badcheck() {\n    var x, y, h, b, b1;\n    var thisbad = 0;\n    var bw = 0;\n\n    // blocks of same color.\n    for (y = 0; y < width - 1; y++)\n      for (x = 0; x < width - 1; x++)\n        if ((qrframe[x + width * y] && qrframe[(x + 1) + width * y]\n          && qrframe[x + width * (y + 1)] && qrframe[(x + 1) + width * (y + 1)]) // all black\n          || !(qrframe[x + width * y] || qrframe[(x + 1) + width * y]\n            || qrframe[x + width * (y + 1)] || qrframe[(x + 1) + width * (y + 1)])) // all white\n          thisbad += N2;\n\n    // X runs\n    for (y = 0; y < width; y++) {\n      rlens[0] = 0;\n      for (h = b = x = 0; x < width; x++) {\n        if ((b1 = qrframe[x + width * y]) == b)\n          rlens[h]++;\n        else\n          rlens[++h] = 1;\n        b = b1;\n        bw += b ? 1 : -1;\n      }\n      thisbad += badruns(h);\n    }\n\n    // black/white imbalance\n    if (bw < 0)\n      bw = -bw;\n\n    var big = bw;\n    var count = 0;\n    big += big << 2;\n    big <<= 1;\n    while (big > width * width)\n      big -= width * width, count++;\n    thisbad += count * N4;\n\n    // Y runs\n    for (x = 0; x < width; x++) {\n      rlens[0] = 0;\n      for (h = b = y = 0; y < width; y++) {\n        if ((b1 = qrframe[x + width * y]) == b)\n          rlens[h]++;\n        else\n          rlens[++h] = 1;\n        b = b1;\n      }\n      thisbad += badruns(h);\n    }\n    return thisbad;\n  }\n\n  function genframe(instring) {\n    var x, y, k, t, v, i, j, m;\n\n    // find the smallest version that fits the string\n    t = instring.length;\n    version = 0;\n    do {\n      version++;\n      k = (ecclevel - 1) * 4 + (version - 1) * 16;\n      neccblk1 = eccblocks[k++];\n      neccblk2 = eccblocks[k++];\n      datablkw = eccblocks[k++];\n      eccblkwid = eccblocks[k];\n      k = datablkw * (neccblk1 + neccblk2) + neccblk2 - 3 + (version <= 9);\n      if (t <= k)\n        break;\n    } while (version < 40);\n\n    // FIXME - insure that it fits insted of being truncated\n    width = 17 + 4 * version;\n\n    // allocate, clear and setup data structures\n    v = datablkw + (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2;\n    for (t = 0; t < v; t++)\n      eccbuf[t] = 0;\n    strinbuf = instring.slice(0);\n\n    for (t = 0; t < width * width; t++)\n      qrframe[t] = 0;\n\n    for (t = 0; t < (width * (width + 1) + 1) / 2; t++)\n      framask[t] = 0;\n\n    // insert finders - black to frame, white to mask\n    for (t = 0; t < 3; t++) {\n      k = 0;\n      y = 0;\n      if (t == 1)\n        k = (width - 7);\n      if (t == 2)\n        y = (width - 7);\n      qrframe[(y + 3) + width * (k + 3)] = 1;\n      for (x = 0; x < 6; x++) {\n        qrframe[(y + x) + width * k] = 1;\n        qrframe[y + width * (k + x + 1)] = 1;\n        qrframe[(y + 6) + width * (k + x)] = 1;\n        qrframe[(y + x + 1) + width * (k + 6)] = 1;\n      }\n      for (x = 1; x < 5; x++) {\n        setmask(y + x, k + 1);\n        setmask(y + 1, k + x + 1);\n        setmask(y + 5, k + x);\n        setmask(y + x + 1, k + 5);\n      }\n      for (x = 2; x < 4; x++) {\n        qrframe[(y + x) + width * (k + 2)] = 1;\n        qrframe[(y + 2) + width * (k + x + 1)] = 1;\n        qrframe[(y + 4) + width * (k + x)] = 1;\n        qrframe[(y + x + 1) + width * (k + 4)] = 1;\n      }\n    }\n\n    // alignment blocks\n    if (version > 1) {\n      t = adelta[version];\n      y = width - 7;\n      for (; ;) {\n        x = width - 7;\n        while (x > t - 3) {\n          putalign(x, y);\n          if (x < t)\n            break;\n          x -= t;\n        }\n        if (y <= t + 9)\n          break;\n        y -= t;\n        putalign(6, y);\n        putalign(y, 6);\n      }\n    }\n\n    // single black\n    qrframe[8 + width * (width - 8)] = 1;\n\n    // timing gap - mask only\n    for (y = 0; y < 7; y++) {\n      setmask(7, y);\n      setmask(width - 8, y);\n      setmask(7, y + width - 7);\n    }\n    for (x = 0; x < 8; x++) {\n      setmask(x, 7);\n      setmask(x + width - 8, 7);\n      setmask(x, width - 8);\n    }\n\n    // reserve mask-format area\n    for (x = 0; x < 9; x++)\n      setmask(x, 8);\n    for (x = 0; x < 8; x++) {\n      setmask(x + width - 8, 8);\n      setmask(8, x);\n    }\n    for (y = 0; y < 7; y++)\n      setmask(8, y + width - 7);\n\n    // timing row/col\n    for (x = 0; x < width - 14; x++)\n      if (x & 1) {\n        setmask(8 + x, 6);\n        setmask(6, 8 + x);\n      }\n      else {\n        qrframe[(8 + x) + width * 6] = 1;\n        qrframe[6 + width * (8 + x)] = 1;\n      }\n\n    // version block\n    if (version > 6) {\n      t = vpat[version - 7];\n      k = 17;\n      for (x = 0; x < 6; x++)\n        for (y = 0; y < 3; y++ , k--)\n          if (1 & (k > 11 ? version >> (k - 12) : t >> k)) {\n            qrframe[(5 - x) + width * (2 - y + width - 11)] = 1;\n            qrframe[(2 - y + width - 11) + width * (5 - x)] = 1;\n          }\n          else {\n            setmask(5 - x, 2 - y + width - 11);\n            setmask(2 - y + width - 11, 5 - x);\n          }\n    }\n\n    // sync mask bits - only set above for white spaces, so add in black bits\n    for (y = 0; y < width; y++)\n      for (x = 0; x <= y; x++)\n        if (qrframe[x + width * y])\n          setmask(x, y);\n\n    // convert string to bitstream\n    // 8 bit data to QR-coded 8 bit data (numeric or alphanum, or kanji not supported)\n    v = strinbuf.length;\n\n    // string to array\n    for (i = 0; i < v; i++)\n      eccbuf[i] = strinbuf.charCodeAt(i);\n    strinbuf = eccbuf.slice(0);\n\n    // calculate max string length\n    x = datablkw * (neccblk1 + neccblk2) + neccblk2;\n    if (v >= x - 2) {\n      v = x - 2;\n      if (version > 9)\n        v--;\n    }\n\n    // shift and repack to insert length prefix\n    i = v;\n    if (version > 9) {\n      strinbuf[i + 2] = 0;\n      strinbuf[i + 3] = 0;\n      while (i--) {\n        t = strinbuf[i];\n        strinbuf[i + 3] |= 255 & (t << 4);\n        strinbuf[i + 2] = t >> 4;\n      }\n      strinbuf[2] |= 255 & (v << 4);\n      strinbuf[1] = v >> 4;\n      strinbuf[0] = 0x40 | (v >> 12);\n    }\n    else {\n      strinbuf[i + 1] = 0;\n      strinbuf[i + 2] = 0;\n      while (i--) {\n        t = strinbuf[i];\n        strinbuf[i + 2] |= 255 & (t << 4);\n        strinbuf[i + 1] = t >> 4;\n      }\n      strinbuf[1] |= 255 & (v << 4);\n      strinbuf[0] = 0x40 | (v >> 4);\n    }\n    // fill to end with pad pattern\n    i = v + 3 - (version < 10);\n    while (i < x) {\n      strinbuf[i++] = 0xec;\n      // buffer has room    if (i == x)      break;\n      strinbuf[i++] = 0x11;\n    }\n\n    // calculate and append ECC\n\n    // calculate generator polynomial\n    genpoly[0] = 1;\n    for (i = 0; i < eccblkwid; i++) {\n      genpoly[i + 1] = 1;\n      for (j = i; j > 0; j--)\n        genpoly[j] = genpoly[j]\n          ? genpoly[j - 1] ^ gexp[modnn(glog[genpoly[j]] + i)] : genpoly[j - 1];\n      genpoly[0] = gexp[modnn(glog[genpoly[0]] + i)];\n    }\n    for (i = 0; i <= eccblkwid; i++)\n      genpoly[i] = glog[genpoly[i]]; // use logs for genpoly[] to save calc step\n\n    // append ecc to data buffer\n    k = x;\n    y = 0;\n    for (i = 0; i < neccblk1; i++) {\n      appendrs(y, datablkw, k, eccblkwid);\n      y += datablkw;\n      k += eccblkwid;\n    }\n    for (i = 0; i < neccblk2; i++) {\n      appendrs(y, datablkw + 1, k, eccblkwid);\n      y += datablkw + 1;\n      k += eccblkwid;\n    }\n    // interleave blocks\n    y = 0;\n    for (i = 0; i < datablkw; i++) {\n      for (j = 0; j < neccblk1; j++)\n        eccbuf[y++] = strinbuf[i + j * datablkw];\n      for (j = 0; j < neccblk2; j++)\n        eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))];\n    }\n    for (j = 0; j < neccblk2; j++)\n      eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))];\n    for (i = 0; i < eccblkwid; i++)\n      for (j = 0; j < neccblk1 + neccblk2; j++)\n        eccbuf[y++] = strinbuf[x + i + j * eccblkwid];\n    strinbuf = eccbuf;\n\n    // pack bits into frame avoiding masked area.\n    x = y = width - 1;\n    k = v = 1;         // up, minus\n    /* inteleaved data and ecc codes */\n    m = (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2;\n    for (i = 0; i < m; i++) {\n      t = strinbuf[i];\n      for (j = 0; j < 8; j++ , t <<= 1) {\n        if (0x80 & t)\n          qrframe[x + width * y] = 1;\n        do {        // find next fill position\n          if (v)\n            x--;\n          else {\n            x++;\n            if (k) {\n              if (y != 0)\n                y--;\n              else {\n                x -= 2;\n                k = !k;\n                if (x == 6) {\n                  x--;\n                  y = 9;\n                }\n              }\n            }\n            else {\n              if (y != width - 1)\n                y++;\n              else {\n                x -= 2;\n                k = !k;\n                if (x == 6) {\n                  x--;\n                  y -= 8;\n                }\n              }\n            }\n          }\n          v = !v;\n        } while (ismasked(x, y));\n      }\n    }\n\n    // save pre-mask copy of frame\n    strinbuf = qrframe.slice(0);\n    t = 0;           // best\n    y = 30000;         // demerit\n    // for instead of while since in original arduino code\n    // if an early mask was \"good enough\" it wouldn't try for a better one\n    // since they get more complex and take longer.\n    for (k = 0; k < 8; k++) {\n      applymask(k);      // returns black-white imbalance\n      x = badcheck();\n      if (x < y) { // current mask better than previous best?\n        y = x;\n        t = k;\n      }\n      if (t == 7)\n        break;       // don't increment i to a void redoing mask\n      qrframe = strinbuf.slice(0); // reset for next pass\n    }\n    if (t != k)         // redo best mask - none good enough, last wasn't t\n      applymask(t);\n\n    // add in final mask/ecclevel bytes\n    y = fmtword[t + ((ecclevel - 1) << 3)];\n    // low byte\n    for (k = 0; k < 8; k++ , y >>= 1)\n      if (y & 1) {\n        qrframe[(width - 1 - k) + width * 8] = 1;\n        if (k < 6)\n          qrframe[8 + width * k] = 1;\n        else\n          qrframe[8 + width * (k + 1)] = 1;\n      }\n    // high byte\n    for (k = 0; k < 7; k++ , y >>= 1)\n      if (y & 1) {\n        qrframe[8 + width * (width - 7 + k)] = 1;\n        if (k)\n          qrframe[(6 - k) + width * 8] = 1;\n        else\n          qrframe[7 + width * 8] = 1;\n      }\n    return qrframe;\n  }\n\n\n\n\n  var _canvas = null;\n\n  var api = {\n\n    get ecclevel() {\n      return ecclevel;\n    },\n\n    set ecclevel(val) {\n      ecclevel = val;\n    },\n\n    get size() {\n      return _size;\n    },\n\n    set size(val) {\n      _size = val\n    },\n\n    get canvas() {\n      return _canvas;\n    },\n\n    set canvas(el) {\n      _canvas = el;\n    },\n\n    getFrame: function (string) {\n      return genframe(string);\n    },\n    //这里的utf16to8(str)是对Text中的字符串进行转码，让其支持中文\n    utf16to8: function (str) {\n      var out, i, len, c;\n\n      out = \"\";\n      len = str.length;\n      for (i = 0; i < len; i++) {\n        c = str.charCodeAt(i);\n        if ((c >= 0x0001) && (c <= 0x007F)) {\n          out += str.charAt(i);\n        } else if (c > 0x07FF) {\n          out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));\n          out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));\n          out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\n        } else {\n          out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));\n          out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\n        }\n      }\n      return out;\n    },\n    /**\n     * 新增$this参数，传入组件的this,兼容在组件中生成\n     * @param bg 目前只能设置颜色值\n     */ \n    draw: function (str, ctx, startX, startY, cavW, cavH, bg, color, $this, ecc) {\n      var that = this;\n      ecclevel = ecc || ecclevel;\n      if (!ctx) {\n        console.warn('No canvas provided to draw QR code in!')\n        return;\n      }\n      var size = Math.min(cavW, cavH);\n      str = that.utf16to8(str);//增加中文显示\n\n      var frame = that.getFrame(str);\n      var px = size / width;\n      if (bg) {\n        ctx.setFillStyle(bg)\n        ctx.fillRect(startX, startY, cavW, cavW);\n      }\n      ctx.setFillStyle(color || 'black');\n      for (var i = 0; i < width; i++) {\n        for (var j = 0; j < width; j++) {\n          if (frame[j * width + i]) {\n            ctx.fillRect(startX + px * i, startY + px * j, px, px);\n          }\n        }\n      }\n    }\n  }\n  module.exports = { api }\n  // exports.draw = api;\n\n})();"
  },
  {
    "path": "miniprogram/components/painter/lib/util.js",
    "content": "\nfunction isValidUrl(url) {\n  return /(ht|f)tp(s?):\\/\\/([^ \\\\/]*\\.)+[^ \\\\/]*(:[0-9]+)?\\/?/.test(url);\n}\n\n/**\n * 深度对比两个对象是否一致\n * from: https://github.com/epoberezkin/fast-deep-equal\n * @param  {Object} a 对象a\n * @param  {Object} b 对象b\n * @return {Boolean}   是否相同\n */\n/* eslint-disable */\nfunction equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = Array.isArray(a)\n      , arrB = Array.isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = Object.keys(a);\n    length = keys.length;\n\n    if (length !== Object.keys(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  return a!==a && b!==b;\n}\n\nmodule.exports = {\n  isValidUrl,\n  equal\n};\n\n"
  },
  {
    "path": "miniprogram/components/painter/painter.js",
    "content": "import Pen from './lib/pen';\nimport Downloader from './lib/downloader';\n\nconst util = require('./lib/util');\n\nconst downloader = new Downloader();\n\n// 最大尝试的绘制次数\nconst MAX_PAINT_COUNT = 5;\nComponent({\n  canvasWidthInPx: 0,\n  canvasHeightInPx: 0,\n  paintCount: 0,\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n    customStyle: {\n      type: String,\n    },\n    palette: {\n      type: Object,\n      observer: function (newVal, oldVal) {\n        if (this.isNeedRefresh(newVal, oldVal)) {\n          this.paintCount = 0;\n          this.startPaint();\n        }\n      },\n    },\n    widthPixels: {\n      type: Number,\n      value: 0\n    },\n    // 启用脏检查，默认 false\n    dirty: {\n      type: Boolean,\n      value: false,\n    },\n  },\n\n  data: {\n    picURL: '',\n    showCanvas: true,\n    painterStyle: '',\n  },\n\n  methods: {\n    /**\n     * 判断一个 object 是否为 空\n     * @param {object} object\n     */\n    isEmpty(object) {\n      for (const i in object) {\n        return false;\n      }\n      return true;\n    },\n\n    isNeedRefresh(newVal, oldVal) {\n      if (!newVal || this.isEmpty(newVal) || (this.data.dirty && util.equal(newVal, oldVal))) {\n        return false;\n      }\n      return true;\n    },\n\n    startPaint() {\n      if (this.isEmpty(this.properties.palette)) {\n        return;\n      }\n\n      if (!(getApp().systemInfo && getApp().systemInfo.screenWidth)) {\n        try {\n          getApp().systemInfo = wx.getSystemInfoSync();\n        } catch (e) {\n          const error = `Painter get system info failed, ${JSON.stringify(e)}`;\n          this.triggerEvent('imgErr', {\n            error: error\n          });\n          console.error(error);\n          return;\n        }\n      }\n      let screenK = getApp().systemInfo.screenWidth / 750;\n      setStringPrototype(screenK, 1);\n      \n      this.downloadImages().then((palette) => {\n        const {\n          width,\n          height\n        } = palette;\n        \n        if (!width || !height) {\n          console.error(`You should set width and height correctly for painter, width: ${width}, height: ${height}`);\n          return;\n        }\n        this.canvasWidthInPx = width.toPx();\n        if (this.properties.widthPixels) {\n          // 如果重新设置过像素宽度，则重新设置比例\n          setStringPrototype(screenK, this.properties.widthPixels / this.canvasWidthInPx)\n          this.canvasWidthInPx = this.properties.widthPixels\n        }\n  \n        this.canvasHeightInPx = height.toPx();\n        this.setData({\n          painterStyle: `width:${this.canvasWidthInPx}px;height:${this.canvasHeightInPx}px;`,\n        });\n        const ctx = wx.createCanvasContext('k-canvas', this);\n        const pen = new Pen(ctx, palette);\n        pen.paint(() => {\n          this.saveImgToLocal();\n        });\n      });\n    },\n\n    downloadImages() {\n      return new Promise((resolve, reject) => {\n        let preCount = 0;\n        let completeCount = 0;\n        const paletteCopy = JSON.parse(JSON.stringify(this.properties.palette));\n        if (paletteCopy.background) {\n          preCount++;\n          downloader.download(paletteCopy.background).then((path) => {\n            paletteCopy.background = path;\n            completeCount++;\n            if (preCount === completeCount) {\n              resolve(paletteCopy);\n            }\n          }, () => {\n            completeCount++;\n            if (preCount === completeCount) {\n              resolve(paletteCopy);\n            }\n          });\n        }\n        if (paletteCopy.views) {\n          for (const view of paletteCopy.views) {\n            if (view && view.type === 'image' && view.url) {\n              preCount++;\n              /* eslint-disable no-loop-func */\n              downloader.download(view.url).then((path) => {\n                view.url = path;\n                wx.getImageInfo({\n                  src: view.url,\n                  success: (res) => {\n                    // 获得一下图片信息，供后续裁减使用\n                    view.sWidth = res.width;\n                    view.sHeight = res.height;\n                  },\n                  fail: (error) => {\n                    // 如果图片坏了，则直接置空，防止坑爹的 canvas 画崩溃了\n                    view.url = \"\";\n                    console.error(`getImageInfo ${view.url} failed, ${JSON.stringify(error)}`);\n                  },\n                  complete: () => {\n                    completeCount++;\n                    if (preCount === completeCount) {\n                      resolve(paletteCopy);\n                    }\n                  },\n                });\n              }, () => {\n                completeCount++;\n                if (preCount === completeCount) {\n                  resolve(paletteCopy);\n                }\n              });\n            }\n          }\n        }\n        if (preCount === 0) {\n          resolve(paletteCopy);\n        }\n      });\n    },\n\n    saveImgToLocal() {\n      setTimeout(() => {\n        wx.canvasToTempFilePath({\n          canvasId: 'k-canvas',\n          success: (res) => {\n            this.getImageInfo(res.tempFilePath);\n          },\n          fail: (error) => {\n            console.error(`canvasToTempFilePath failed, ${JSON.stringify(error)}`);\n            this.triggerEvent('imgErr', {\n              error: error\n            });\n          },\n        }, this);\n      }, 300);\n    },\n\n    getImageInfo(filePath) {\n      wx.getImageInfo({\n        src: filePath,\n        success: (infoRes) => {\n          if (this.paintCount > MAX_PAINT_COUNT) {\n            const error = `The result is always fault, even we tried ${MAX_PAINT_COUNT} times`;\n            console.error(error);\n            this.triggerEvent('imgErr', {\n              error: error\n            });\n            return;\n          }\n          // 比例相符时才证明绘制成功，否则进行强制重绘制\n          if (Math.abs((infoRes.width * this.canvasHeightInPx - this.canvasWidthInPx * infoRes.height) / (infoRes.height * this.canvasHeightInPx)) < 0.01) {\n            this.triggerEvent('imgOK', {\n              path: filePath\n            });\n          } else {\n            this.startPaint();\n          }\n          this.paintCount++;\n        },\n        fail: (error) => {\n          console.error(`getImageInfo failed, ${JSON.stringify(error)}`);\n          this.triggerEvent('imgErr', {\n            error: error\n          });\n        },\n      });\n    },\n  },\n});\n\n\nfunction setStringPrototype(screenK, scale) {\n  /* eslint-disable no-extend-native */\n  /**\n   * 是否支持负数\n   * @param {Boolean} minus 是否支持负数\n   */\n  String.prototype.toPx = function toPx(minus) {\n    let reg;\n    if (minus) {\n      reg = /^-?[0-9]+([.]{1}[0-9]+){0,1}(rpx|px)$/g;\n    } else {\n      reg = /^[0-9]+([.]{1}[0-9]+){0,1}(rpx|px)$/g;\n    }\n    const results = reg.exec(this);\n    if (!this || !results) {\n      console.error(`The size: ${this} is illegal`);\n      return 0;\n    }\n    const unit = results[2];\n    const value = parseFloat(this);\n\n    let res = 0;\n    if (unit === 'rpx') {\n      res = Math.round(value * screenK * (scale || 1));\n    } else if (unit === 'px') {\n      res = Math.round(value * (scale || 1));\n    }\n    return res;\n  };\n}"
  },
  {
    "path": "miniprogram/components/painter/painter.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/painter/painter.wxml",
    "content": "<canvas canvas-id=\"k-canvas\" style=\"{{painterStyle}}{{customStyle}}\" />"
  },
  {
    "path": "miniprogram/components/pre-image/PreImage.js",
    "content": "// components/pre-image/PreImage.js\nComponent({\n  externalClasses: 'extra-class',\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n    src: {\n      type: String,\n      value: ''\n    },\n    mode: {\n      type: String,\n      value: 'scaleToFill'\n    },\n    lazyLoad: {\n      type: Boolean,\n      value: false\n    },\n    placeImg: {\n      type: String,\n      value: '/assets/images/img-loding.jpg'\n    },\n    width: {\n      type: String,\n      value: '100%'\n    },\n    height: {\n      type: String,\n      value: '0'\n    }\n  },\n\n  /**\n   * 组件的初始数据\n   */\n  data: {\n    loaded: false\n  },\n\n  /**\n   * 组件的方法列表\n   */\n  methods: {\n    _onImageLoad: function(e) {\n      const width = e.detail.width,\n           height = e.detail.height;\n      this.setData({\n        loaded: true\n      })\n      this.triggerEvent('load', e.detail);\n    },\n    _onImgeErr: function(e) {\n      let msgs = e.detail.errMsg.split('(');\n      this.setData({\n        error: \"(\" + msgs[msgs.length-1]\n      })\n      this.triggerEvent('error', e.detail);\n    }\n  }\n})\n"
  },
  {
    "path": "miniprogram/components/pre-image/PreImage.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/pre-image/PreImage.wxml",
    "content": "<!--components/pre-image/PreImage.wxml-->\n<view style='width:{{width}};height:{{height}};'>\n  <image wx:if='{{!loaded && !error}}'\n    class='comp-preImg'\n    src='{{placeImg}}'\n    mode='{{mode}}' lazy-load='{{lazyLoad}}'\n  >\n    <image class='comp-preImg-pre' \n      src='{{src}}'\n      bindload='_onImageLoad'\n      binderror='_onImgeErr'\n    />\n  </image>\n  <image wx:if='{{loaded && !error}}'\n    class='comp-preImg fade-in'\n    src='{{src}}'\n    mode='{{mode}}' lazy-load='{{lazyLoad}}'\n  />\n  <view class='errors' wx:if='{{error}}'>\n    <text>{{error && error}}</text>\n  </view>\n</view>\n\n\n"
  },
  {
    "path": "miniprogram/components/pre-image/PreImage.wxss",
    "content": "/* components/pre-image/PreImage.wxss */\n.comp-preImg {\n  background-color: #eee;\n  width: 100%;\n  height: 100%;\n}\n.comp-preImg-pre {\n  width: 0;\n  height: 0;\n}\n.fade-in {\n  animation: fadeIn 1s both;\n}\n.errors {\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, .5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: #F7AF41;\n}\n@keyframes fadeIn {\n  0% {\n    opacity: 0\n  }\n  100% {\n    opacity: 1\n  }\n}"
  },
  {
    "path": "miniprogram/components/rating/rating.js",
    "content": "// 组件-评分\n\nComponent({\n  behaviors: ['wx://form-field'],\n\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    value: {\n      type: Number,\n      value: 10\n    },\n    max: {\n      type: Number,\n      value: 5\n    },\n    disabled: {\n      type: Boolean,\n      value: false\n    }\n  },\n\n  methods: {\n    _handleTap (e) {\n      if (this.data.disabled) return;\n      const { max } = this.data;\n      const { num } = e.currentTarget.dataset;\n      const value = max / 5 * num;\n      this.setData({ value });\n      this.triggerEvent('change', { value }, e);\n    }\n  }\n\n})"
  },
  {
    "path": "miniprogram/components/rating/rating.json",
    "content": "{\n  \"component\": true\n}"
  },
  {
    "path": "miniprogram/components/rating/rating.wxml",
    "content": "<!--components/rating/rating.wxml 评分组件-->\n\n<view class='com-rating'>\n  <view class='rating-icon' wx:for='{{[1,2,3,4,5]}}' wx:key='*this'\n    bindtap='_handleTap' data-num='{{item}}'>\n    <view class='rating-on' style='width:{{value >= (max/5)*item ? 1 : value < (max/5)*(item-1) ? 0 : (value*10)%(max/5*10)/(max/5*10)}}em'>\n      <text class=\"iconfont icon-star\"></text>\n    </view>\n    <view class='rating-off' style='width:1em;'>\n      <text class=\"iconfont icon-star\"></text>\n    </view>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/components/rating/rating.wxss",
    "content": "/* components/rating/rating.wxss */\n\n.com-rating {\n  display: inline-block;\n  letter-spacing: .3em;\n  position: relative;\n}\n.com-rating .rating-icon,\n.com-rating .rating-on,\n.com-rating .rating-off {\n  display: inline-block;\n}\n.com-rating .rating-icon:not(:last-child) {\n  margin-right: .2em;\n}\n.com-rating .rating-on {\n  color: #FFE200;\n  position: absolute;\n  overflow: hidden;\n  padding: 0;\n  margin: 0;\n}\n.com-rating .rating-off {\n  color: #DBDBDB;\n  padding: 0;\n  margin: 0;\n}\n"
  },
  {
    "path": "miniprogram/components/tab-bar/index.js",
    "content": "Component({\n  properties: {\n    selected: {\n      type: Number,\n      value: 0\n    },\n    placeholder: {\n      type: Boolean,\n      value: false\n    },\n    list: {\n      type: Array,\n      value: [\n        {\n          \"pagePath\": \"/pages/tabs/discovery/discovery\",\n          \"text\": \"发现\",\n          \"iconPath\": \"/assets/images/tabbar/tabbar_discovery.png\",\n          \"selectedIconPath\": \"/assets/images/tabbar/tabbar_discovery_selected.png\"\n        },\n        {\n          \"pagePath\": \"/pages/tabs/movies/movies\",\n          \"text\": \"清单\",\n          \"iconPath\": \"/assets/images/tabbar/tabbar_list.png\",\n          \"selectedIconPath\": \"/assets/images/tabbar/tabbar_list_selected.png\"\n        },\n        {\n          \"pagePath\": \"/pages/tabs/index/index\",\n          \"text\": \"我的\",\n          \"iconPath\": \"/assets/images/tabbar/tabbar_mine.png\",\n          \"selectedIconPath\": \"/assets/images/tabbar/tabbar_mine_selected.png\"\n        }\n      ]\n    }\n  },\n\n  data: {},\n\n  methods: {\n    handleSwitchTab (e) {\n      /** @type {{ index: number }} */\n      const { index } = e.currentTarget.dataset;\n      const { list } = this.data;\n      this.setData({ selected: index });\n      this.triggerEvent('change', { index, list });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/components/tab-bar/index.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/components/tab-bar/index.wxml",
    "content": "<view class=\"tab-bar-container\">\n  <view class=\"tab-bar-placeholder\" wx:if=\"{{placeholder}}\"></view>\n  <view class=\"tab-bar\">\n    <view class=\"tab-bar-item\" wx:for=\"{{list}}\" wx:key=\"index\"\n      data-index=\"{{index}}\"\n      bindtap=\"handleSwitchTab\"\n    >\n      <view class=\"tab-bar__icon-container\">\n        <view class=\"tab-bar__icon-wrapper {{selected === index && 'selected'}}\">\n          <image class=\"tab-bar-item__icon\" src=\"{{item.iconPath}}\" />\n          <image class=\"tab-bar-item__icon\" src=\"{{item.selectedIconPath}}\" />\n        </view>\n      </view>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/components/tab-bar/index.wxss",
    "content": ".tab-bar-placeholder,\n.tab-bar {\n  display: flex;\n  height: 100rpx;\n  border-radius: 60rpx 60rpx 0 0;\n  padding-bottom: env(safe-area-inset-bottom);\n  padding-bottom: constant(safe-area-inset-bottom);\n}\n.tab-bar {\n  position: fixed;\n  z-index: 9999;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: #fff;\n  box-shadow: 0 0 40rpx 0 rgba(0, 0, 0, 0.1);\n}\n@supports (padding-bottom: env(safe-area-inset-bottom)) {\n  .tab-bar-placeholder,\n  .tab-bar {\n    padding-bottom: env(safe-area-inset-bottom);\n  }\n}\n@supports (padding-bottom: constant(safe-area-inset-bottom)) {\n  .tab-bar-placeholder,\n  .tab-bar {\n    padding-bottom: constant(safe-area-inset-bottom);\n  }\n}\n\n.tab-bar-item {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n.tab-bar-item__icon {\n  display: block;\n  width: 60rpx;\n  height: 60rpx;\n}\n.tab-bar-item__icon:nth-child(2) {\n  transform: rotate(180deg);\n}\n\n.tab-bar__icon-container {\n  width: 120rpx;\n  height: 60rpx;\n  overflow: hidden;\n  display: flex;\n  justify-content: center;\n}\n.tab-bar__icon-wrapper {\n  height: 120rpx;\n  transform-origin: 50% 50%;\n  transition: .3s ease-out;\n  transition-property: none;\n}\n.tab-bar__icon-wrapper.selected {\n  transition-property: transform;\n  transform: rotate(180deg);\n}"
  },
  {
    "path": "miniprogram/components/towxml/audio-player/Audio.js",
    "content": "const fillIn = val => `${val < 10 ? '0' : ''}${val}`,\n    formatTime = _time => {\n        let time = Math.round(_time);\n        let second = Math.round(time % 60),\n            minute = Math.floor(time / 60 % 60),\n            hour = Math.floor(time / 60 / 60);\n        return `${fillIn(hour)}:${fillIn(minute)}:${fillIn(second)}`;\n    };\n\nclass Audio{\n    constructor(obj){\n        const _ts = this,\n            option = _ts.option = obj.attr;\n\n        _ts.loop = option.loop === 'true',\n        _ts.autoplay = option.autoplay === 'true';\n        _ts.create();\n        _ts.index = 0;\n\n        \n    }\n    create(){\n        const _ts = this,\n            option = _ts.option;\n        let audio = _ts.audio = wx.createInnerAudioContext();\n        audio.src = option.src;\n\n        // 说明可以播放了\n        audio.onCanplay(function(){\n            if(_ts.autoplay && !_ts.index){\n                _ts.play();\n            };\n            if(!_ts.autoplay && !_ts.index){\n                _ts.eventCanplay();\n            };\n        });\n\n        // 更新时间\n        audio.onTimeUpdate(function(){\n            //_ts.status = 'update';\n            _ts.duration = audio.duration;\n            _ts.currentTime = audio.currentTime;\n\n            // 定义播放结束\n            if(_ts.duration - _ts.currentTime < 0.5){\n                _ts.index++;\n                if(_ts.loop){\n                    audio.stop();\n                }else{\n                    _ts.stop();\n                };\n                audio.seek(0);\n            };\n            _ts.eventTimeUpdate(formatTime(_ts.duration),formatTime(_ts.currentTime));\n        });\n\n        // \n        audio.onSeeked(function(){\n            if(_ts.loop){\n                _ts.play();\n            };\n        });\n\n\n\n    }\n    // 播放\n    play(){\n        const _ts = this;\n        _ts.status = 'play';\n        _ts.audio.play();\n        _ts.eventPlay();\n    }\n    // 暂停\n    pause(){\n        const _ts = this;\n        _ts.status = 'pause';\n        _ts.audio.pause();\n        _ts.eventPause();\n    }\n    // 停止\n    stop(){\n        const _ts = this;\n        _ts.status = 'stop';\n        _ts.audio.stop();\n        _ts.eventStop();\n    }\n    // 销毁\n    destroy(){\n        const _ts = this;\n        _ts.stop();\n        _ts.audio.destroy();\n    }\n    eventCanplay(){}\n    eventTimeUpdate(){}\n    eventEnded(){}\n    eventError(){}\n    eventPause(){}\n    eventPlay(){}\n    eventSeeked(){}\n    eventSeeking(){}\n    eventStop(){}\n    eventWaiting(){}\n};\nmodule.exports = Audio;\n"
  },
  {
    "path": "miniprogram/components/towxml/audio-player/audio-player.js",
    "content": "const Audio = require('./Audio');\nComponent({\n\toptions: {\n\t\tstyleIsolation: 'shared'\n\t},\n\tproperties: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t\tvalue: {}\n\t\t}\n\t},\n\tlifetimes:{\n\t\t// 页面生命周期\n\t\tattached:function(){\n\t\t\tconst _ts = this,\n\t\t\t\taudio = _ts.audio = new Audio(this.data.data);\n\n\t\t\taudio.eventPlay = function(){\n\t\t\t\t_ts.setData({tips:{state:'h2w__audio--play',text:'Playing'}});\n\t\t\t};\n\t\t\taudio.eventCanplay = function(){\n\t\t\t\t_ts.setData({tips:{state:'h2w__audio--readyed',text:'Readyed'}});\n\t\t\t};\n\t\t\taudio.eventTimeUpdate = function(duration,currentTime){\n\t\t\t\t_ts.setData({time:{currentTime:currentTime,duration:duration,schedule:Math.round(_ts.audio.currentTime) / Math.round(_ts.audio.duration) * 100 + '%'}});\n\t\t\t};\n\t\t\taudio.eventPause = function(){\n\t\t\t\t_ts.setData({tips:{state:'h2w__audio--pause',text:'Pause'}});\n\t\t\t};\n\t\t\taudio.eventStop = function(){\n\t\t\t\t_ts.setData({tips:{state:'h2w__audio--end',text:'End'}});\n\t\t\t};\n\n\n\n\n\n\t\t\t// // 更新播放状态\n\t\t\t// _ts.audio.onTimeUpdate = function(duration,currentTime){\n\t\t\t// \t_ts.setData({\n\t\t\t// \t\tplayerData:{\n\t\t\t// \t\t\tstate:'h2w__audio--play',\n\t\t\t// \t\t\ttips:'Playing',\n\t\t\t// \t\t\tcurrentTime:currentTime,\n\t\t\t// \t\t\tduration:duration,\n\t\t\t// \t\t\tschedule:_ts.audio.currentTime / _ts.audio.duration * 100 + '%'\n\t\t\t// \t\t}\n\t\t\t// \t});\n\t\t\t// };\n\n\t\t\t// _ts.audio.onPause = function(){\n\t\t\t// \t_ts.setData({playerData:{state:'h2w__audio--pause',tips:'Pause'}});\n\t\t\t// };\n\n\t\t\t// _ts.audio.onCanplay = function(){\n\t\t\t// \t_ts.setData({playerData:{state:'h2w__audio--readyed',tips:'Readyed'}});\n\t\t\t// };\n\n\t\t\t// _ts.audio.onError = function(){\n\t\t\t// \t_ts.setData({playerData:{state:'h2w__audio--error',tips:'Error'}});\n\t\t\t// };\n\n\t\t\t// _ts.audio.onEnded = ()=>{\n\t\t\t// \t_ts.setData({playerData:{state:'h2w__audio--end',tips:'End'}});\n\t\t\t// };\n\n\t\t},\n\t\tmoved:function(){\n\t\t\t_ts.audio.destroy();\n\t\t},\n\t\tdetached:()=>{\n\n\t\t},\n\t},\n\tdata: {\n\t\ttips:{\n\t\t\tstate:'',\n\t\t\ttext:'--'\n\t\t},\n\t\ttime: {\n\t\t\tcurrentTime:'00:00:00',\n\t\t\tduration:'00:00:00',\n\t\t\tschedule:'0%'\n\t\t}\n\t},\n\tmethods: {\n\t\tplayAndPause: function () {\n\t\t\tconst _ts = this,\n\t\t\t\taudio = _ts.audio;\n\n\t\t\t// console.log(audio);\n\n\t\t\taudio.isTouch = true;\n\t\t\tif(audio.status === 'update' || audio.status === 'play'){\n\t\t\t\t// console.log('pause');\n\t\t\t\taudio.pause();\n\t\t\t}else{\n\t\t\t\t// console.log('play');\n\t\t\t\taudio.play();\n\t\t\t};\n\t\t}\n\t}\n})"
  },
  {
    "path": "miniprogram/components/towxml/audio-player/audio-player.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {\n  }\n}"
  },
  {
    "path": "miniprogram/components/towxml/audio-player/audio-player.wxml",
    "content": "<view class=\"h2w__audio {{tips.state || 'h2w__audio--loading'}}\" bind:tap=\"playAndPause\">\n    <view class=\"h2w__audioIcon\"></view>\n    <view class=\"h2w__audioCover\">\n        <image class=\"h2w__audioLoading\" src=\"loading.svg\"></image>\n        <image class=\"h2w__audioCoverImg\" src=\"{{data.attr.poster}}\"></image>\n    </view>\n    <view class=\"h2w__audioInfo\">\n        <view class=\"h2w__audioTips\">{{tips.text || 'Error'}}</view>\n        <view class=\"h2w__audioSchedule\" style=\"width:{{time.schedule}};\"></view>\n        <view class=\"h2w__audioTitle\">{{data.attr.name}}</view>\n        <view class=\"h2w__audioAuthor\">{{data.attr.author}}</view>\n        <view class=\"h2w__audioTime\">{{time.currentTime || '00:00:00'}} / {{time.duration || '00:00:00'}}</view>\n    </view>\n</view>"
  },
  {
    "path": "miniprogram/components/towxml/audio-player/audio-player.wxss",
    "content": "/*音频播放器样式*/\n.h2w__audio {\n    height: 136rpx;\n    margin:16rpx 0;\n    background: #f1f1f1;\n    position: relative;\n}\n\n.h2w__audio--error .h2w__audioIcon,\n.h2w__audio--loading .h2w__audioIcon {\n    display:none;\n}\n\n.h2w__audio--readyed .h2w__audioLoading,\n.h2w__audio--end .h2w__audioLoading,\n.h2w__audio--play .h2w__audioIcon,\n.h2w__audio--pause .h2w__audioLoading,\n.h2w__audio--play .h2w__audioLoading {\n    display: none;\n}\n\n.h2w__audio--play .h2w__audioCover image {\n    opacity: 1;\n}\n\n.h2w__audio--readyed .h2w__audioTips,\n.h2w__audio--end .h2w__audioTips,\n.h2w__audio--stop .h2w__audioTips,\n.h2w__audio--pause .h2w__audioTips,\n.h2w__audio--play .h2w__audioTips {\n    opacity:0.4;\n}\n\n.h2w__audio--error {\n    background:red;\n}\n\n/* .h2w__audio--end .h2w__audio__icon {width:20rpx; height:20rpx; background:white; border:0; left:24rpx; top:24rpx; border-radius:2rpx;} */\n.h2w__audioCover {\n    width: 136rpx;\n    height: 136rpx;\n    background: black;\n    float: left;\n    position: relative;\n}\n\n.h2w__audioCover image {\n    width: 100%;\n    height: 100%;\n    opacity: 0.6;\n    margin:0;\n    transition: all 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);\n}\n\n.h2w__audioCover .h2w__audioLoading {\n    width:80rpx;\n    height:80rpx;\n    position:absolute;\n    left:50%;\n    top:50%;\n    margin:-40rpx 0 0 -40rpx;\n    z-index:1;\n    opacity:1;\n}\n\n.h2w__audioInfo {\n    padding-left: 20rpx;\n    padding-top: 16rpx;\n    position: absolute;\n    left: 136rpx;\n    right: 0;\n}\n\n.h2w__audioSchedule {\n    position: absolute;\n    left: 0;\n    top: 0;\n    background: rgba(0, 255, 0, 0.1);\n    height: 136rpx;\n    width: 0;\n}\n\n.h2w__audioTips {\n    position:absolute;\n    right:0;\n    top:0;\n    height: 32rpx;\n    line-height: 32rpx;\n    padding:10rpx 20rpx;\n    font-size:20rpx;\n}\n\n.h2w__audio--error .h2w__audioTips {\n    color:red;\n}\n\n.h2w__audioTitle {\n    display: block;\n    font-size: 24rpx;\n    height: 40rpx;\n    line-height: 40rpx;\n    font-weight: bold;\n}\n\n.h2w__audioAuthor {\n    display: block;\n    font-size: 20rpx;\n    height: 32rpx;\n    line-height: 32rpx;\n}\n\n.h2w__audioTime {\n    display: block;\n    font-size: 20rpx;\n    height: 32rpx;\n    line-height: 32rpx;\n}\n\n.h2w__audioIcon {\n    width: 0;\n    height: 0;\n    position: absolute;\n    left: 60rpx;\n    top: 48rpx;\n    border-width: 20rpx 0 20rpx 20rpx;\n    border-style: solid;\n    border-color: transparent transparent transparent #fff;\n    z-index: 1;\n}\n\n/* 深色主题 */\n.h2w-dark  .h2w__audio {\n    background: #1f1f1f;\n}\n\n.h2w-dark .h2w__audio--error {\n    background:rgba(255,0,0,0.1);\n}\n\n.h2w-dark .h2w__audioCover {\n    background: black;\n}\n\n.h2w-dark .h2w__audioSchedule {\n    background: rgba(0, 255, 0, 0.2);\n}\n\n.h2w-dark .h2w__audioIcon {\n    border-color: transparent transparent transparent #fff;\n}\n\n\n\n/* 浅色主题 */\n.h2w-light .h2w__audio {\n    background: #f1f1f1;\n}\n\n.h2w-light .h2w__audio--error {\n    background:rgba(255,0,0,0.1);\n}\n\n.h2w-light .h2w__audioCover {\n    background: black;\n}\n\n.h2w-light .h2w__audioSchedule {\n    background: rgba(0, 255, 0, 0.1);\n}\n\n.h2w-light .h2w__audioIcon {\n    border-color: transparent transparent transparent #fff;\n}\n\n\n"
  },
  {
    "path": "miniprogram/components/towxml/config.js",
    "content": "module.exports = {\n    // LaTex公式、yuml解析服务架设参见 https://github.com/sbfkcel/markdown-server\n\n    // 数学公式解析API\n    // latex:{\n    //     api:'http://towxml.vvadd.com/?tex'\n    // },\n\n    // yuml图解析APPI\n    // yuml:{\n    //     api:'http://towxml.vvadd.com/?yuml'\n    // },\n\n    // markdown解析配置，保留需要的选项即可\n    markdown:[\n        'sub',                      // 下标支持\n        'sup',                      // 上标支持\n        'ins',                      // 文本删除线支持\n        'mark',                     // 文本高亮支持\n        'emoji',                    // emoji表情支持\n        'todo'                      // todo支持\n    ],\n\n    // 代码高亮配置，保留需要的选项即可（尽量越少越好，不要随意调整顺序。部分高亮有顺序依赖）\n    highlight:[\n        'c-like',\n        'c',\n        'bash',\n        'css',\n        'dart',\n        'go',\n        'java',\n        'javascript',\n        'json',\n        'less',\n        'scss',\n        'shell',\n        'xml',\n        'htmlbars',\n        'nginx',\n        'php',\n        'python',\n        'python-repl',\n        'typescript',\n        \n        // 'csharp',\n        // 'http',\n        // 'swift',\n        // 'yaml',\n        // 'markdown',\n        // 'powershell',\n        // 'ruby',\n        // 'makefile',\n        // 'lua',\n        // 'stylus',\n        // 'basic',\n        // '1c',\n        // 'abnf',\n        // 'accesslog',\n        // 'actionscript',\n        // 'ada',\n        // 'angelscript',\n        // 'apache',\n        // 'applescript',\n        // 'arcade',\n        // 'cpp',\n        // 'arduino',\n        // 'armasm',\n        // 'asciidoc',\n        // 'aspectj',\n        // 'autohotkey',\n        // 'autoit',\n        // 'avrasm',\n        // 'awk',\n        // 'axapta',\n        // 'bnf',\n        // 'brainfuck',\n        // 'cal',\n        // 'capnproto',\n        // 'ceylon',\n        // 'clean',\n        // 'clojure-repl',\n        // 'clojure',\n        // 'cmake',\n        // 'coffeescript',\n        // 'coq',\n        // 'cos',\n        // 'crmsh',\n        // 'crystal',\n        // 'csp',\n        // 'd',\n        // 'delphi',\n        // 'diff',\n        // 'django',\n        // 'dns',\n        // 'dockerfile',\n        // 'dos',\n        // 'dsconfig',\n        // 'dts',\n        // 'dust',\n        // 'ebnf',\n        // 'elixir',\n        // 'elm',\n        // 'erb',\n        // 'erlang-repl',\n        // 'erlang',\n        // 'excel',\n        // 'fix',\n        // 'flix',\n        // 'fortran',\n        // 'fsharp',\n        // 'gams',\n        // 'gauss',\n        // 'gcode',\n        // 'gherkin',\n        // 'glsl',\n        // 'gml',\n        // 'golo',\n        // 'gradle',\n        // 'groovy',\n        // 'haml',\n        // 'handlebars',\n        // 'haskell',\n        // 'haxe',\n        // 'hsp',\n        // 'hy',\n        // 'inform7',\n        // 'ini',\n        // 'irpf90',\n        // 'isbl',\n        // 'jboss-cli',\n        // 'julia-repl',\n        // 'julia',\n        // 'kotlin',\n        // 'lasso',\n        // 'latex',\n        // 'ldif',\n        // 'leaf',\n        // 'lisp',\n        // 'livecodeserver',\n        // 'livescript',\n        // 'llvm',\n        // 'lsl',\n        // 'mathematica',\n        // 'matlab',\n        // 'maxima',\n        // 'mel',\n        // 'mercury',\n        // 'mipsasm',\n        // 'mizar',\n        // 'mojolicious',\n        // 'monkey',\n        // 'moonscript',\n        // 'n1ql',\n        // 'nim',\n        // 'nix',\n        // 'nsis',\n        // 'objectivec',\n        // 'ocaml',\n        // 'openscad',\n        // 'oxygene',\n        // 'parser3',\n        // 'perl',\n        // 'pf',\n        // 'pgsql',\n        // 'php-template',\n        // 'plaintext',\n        // 'pony',\n        // 'processing',\n        // 'profile',\n        // 'prolog',\n        // 'properties',\n        // 'protobuf',\n        // 'puppet',\n        // 'purebasic',\n        // 'q',\n        // 'qml',\n        // 'r',\n        // 'reasonml',\n        // 'rib',\n        // 'roboconf',\n        // 'routeros',\n        // 'rsl',\n        // 'ruleslanguage',\n        // 'rust',\n        // 'sas',\n        // 'scala',\n        // 'scheme',\n        // 'scilab',\n        // 'smali',\n        // 'smalltalk',\n        // 'sml',\n        // 'sqf',\n        // 'sql',\n        // 'stan',\n        // 'stata',\n        // 'step21',\n        // 'subunit',\n        // 'taggerscript',\n        // 'tap',\n        // 'tcl',\n        // 'thrift',\n        // 'tp',\n        // 'twig',\n        // 'vala',\n        // 'vbnet',\n        // 'vbscript-html',\n        // 'vbscript',\n        // 'verilog',\n        // 'vhdl',\n        // 'vim',\n        // 'x86asm',\n        // 'xl',\n        // 'xquery',\n        // 'zephir'\n    ],\n\n    // wxml原生标签，该系列标签将不会被转换\n    wxml:[\n        'view',\n        'video',\n        'text',\n        'image',\n        'navigator',\n        'swiper',\n        'swiper-item',\n        'block',\n        'form',\n        'input',\n        'textarea',\n        'button',\n        'checkbox-group',\n        'checkbox',\n        'radio-group',\n        'radio',\n\n        // 可以解析的标签（html或markdown中会很少使用）\n        // 'canvas',\n        // 'map',\n        // 'slider',\n        // 'scroll-view',\n        // 'movable-area',\n        // 'movable-view',\n        // 'progress',\n        // 'label',\n        // 'switch',\n        // 'picker',\n        // 'picker-view',\n        // 'switch',\n        // 'contact-button'\n    ],\n\n    // 自定义组件\n    components:[\n        'audio-player',             // 音频组件，建议保留，由于小程序原生audio存在诸多问题，towxml解决了原生音频播放器的相关问题\n        // 'echarts',                  // echarts图表支持\n        // 'latex',                    // 数学公式支持\n        'table',                    // 表格支持\n        // 'todogroup',                // todo支持\n        // 'yuml',                     // yuml图表支持\n        'img'                       // 图片解析组件\n    ],\n\n    // 保留原本的元素属性（建议不要变动）\n    attrs:[\n        'class',\n        'data',\n        'id',\n        'style'\n    ],\n\n    // 事件绑定方式（catch或bind），catch 会阻止事件向上冒泡。更多请参考：https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html\n    bindType:'catch',\n\n    // 需要激活的事件\n    events:[\n        // 'touchstart',\n        // 'touchmove',\n        // 'touchcancel',\n        // 'touchend',\n        'tap',                      // 用于元素的点击事件\n        'change',                   // 用于todoList的change事件\n    ],\n\n    // 图片倍数\n    dpr:1,\n\n    // 代码块显示行号\n    showLineNumber: false\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/decode.js",
    "content": "const config = require('./config');\n\nComponent({\n\toptions: {\n\t\tstyleIsolation: 'apply-shared'\n\t},\n\tproperties: {\n\t\tnodes: {\n\t\t\ttype: Object,\n\t\t\tvalue: {}\n\t\t}\n\t},\n\tlifetimes: {\n\t\tattached: function () {\n\t\t\tconst _ts = this;\n\n\t\t\tconfig.events.forEach(item => {\n\t\t\t\t_ts['_' + item] = function (...arg) {\n\t\t\t\t\tif (global._events && typeof global._events[item] === 'function') {\n\t\t\t\t\t\tglobal._events[item](...arg);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t}\n})"
  },
  {
    "path": "miniprogram/components/towxml/decode.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {\n    \"decode\": \"./decode\",\n    \"audio-player\": \"./audio-player/audio-player\",\n    \"table\": \"./table/table\",\n    \"img\": \"./img/img\"\n  }\n}"
  },
  {
    "path": "miniprogram/components/towxml/decode.wxml",
    "content": "<block wx:for=\"{{nodes.child}}\" wx:for-index=\"i\" wx:for-item=\"item\" wx:key=\"i\"><block wx:if=\"{{item.tag===undefined}}\">{{item.text}}</block><view wx:if=\"{{item.tag==='view'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></view><video wx:if=\"{{item.tag==='video'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" poster=\"{{item.attr.poster}}\" src=\"{{item.attr.src}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></video><text wx:if=\"{{item.tag==='text'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></text><image wx:if=\"{{item.tag==='image'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" src=\"{{item.attr.src}}\" mode=\"{{item.attr.mode ? item.attr.mode : 'widthFix'}}\" lazy-load=\"{{item.attr['lazy-load']}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></image><navigator wx:if=\"{{item.tag==='navigator'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" url=\"{{item.attr.href}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></navigator><swiper wx:if=\"{{item.tag==='swiper'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></swiper><swiper-item wx:if=\"{{item.tag==='swiper-item'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></swiper-item><block wx:if=\"{{item.tag==='block'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></block><form wx:if=\"{{item.tag==='form'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></form><input wx:if=\"{{item.tag==='input'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></input><textarea wx:if=\"{{item.tag==='textarea'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></textarea><button wx:if=\"{{item.tag==='button'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></button><checkbox-group wx:if=\"{{item.tag==='checkbox-group'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" catch:change=\"_change\" bindchange=\"{{item.attr.bindchange}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></checkbox-group><checkbox wx:if=\"{{item.tag==='checkbox'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" checked=\"{{item.attr.checked}}\" value=\"{{item.attr.value}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></checkbox><radio-group wx:if=\"{{item.tag==='radio-group'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></radio-group><radio wx:if=\"{{item.tag==='radio'}}\" data-data=\"{{item}}\" class=\"{{item.attr.class}}\" data=\"{{item.attr.data}}\" id=\"{{item.attr.id}}\" style=\"{{item.attr.style}}\" catch:tap=\"_tap\" checked=\"{{item.attr.checked}}\"><decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/></radio><block wx:if=\"{{item.tag==='audio-player'}}\"><audio-player data=\"{{item}}\" data-data=\"{{item}}\" catch:tap=\"_tap\"/></block><block wx:if=\"{{item.tag==='table'}}\"><table data=\"{{item}}\" data-data=\"{{item}}\" catch:tap=\"_tap\"/></block><block wx:if=\"{{item.tag==='img'}}\"><img data=\"{{item}}\" data-data=\"{{item}}\" catch:tap=\"_tap\"/></block></block>"
  },
  {
    "path": "miniprogram/components/towxml/decode.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/components/towxml/img/img.js",
    "content": "const config = require('../config');\nComponent({\n\toptions: {\n\t\tstyleIsolation: 'shared'\n\t},\n\tproperties: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t\tvalue: {}\n\t\t}\n\t},\n\tdata: {\n\t\tattr:{\n\t\t\tsrc:'',\n\t\t\tclass:'',\n\t\t\tstyle:''\n\t\t},\n\t\tsize:{\n\t\t\tw:0,\n\t\t\th:0\n\t\t},\n\t\tstyleObj:{}\n\t},\n\tlifetimes:{\n\t\tattached:function(){\n\t\t\tconst _ts = this;\n\t\t\tlet dataAttr = this.data.data.attr;\n\n\t\t\t// 将图片大小处理到对象中\n\t\t\tif(dataAttr.width){\n\t\t\t\t_ts.data.size.w = +dataAttr.width / config.dpr;\n\t\t\t};\n\n\t\t\tif(dataAttr.height){\n\t\t\t\t_ts.data.size.h = +dataAttr.height / config.dpr;\n\t\t\t};\n\n\t\t\t// 将样式合并到样式对象中\n\t\t\tif(dataAttr.style){\n\t\t\t\tlet re = /;\\s{0,}/ig;\n\t\t\t\tdataAttr.style = dataAttr.style.replace(re,';');\n\t\t\t\tdataAttr.style.split(';').forEach(item => {\n\t\t\t\t\tlet itemArr = item.split(':');\n\t\t\t\t\tif(/^(width|height)$/i.test(itemArr[0])){\n\t\t\t\t\t\tlet num = parseInt(itemArr[1]) || 0,\n\t\t\t\t\t\t\tkey = '';\n\t\t\t\t\t\t// itemArr[1] = num / config.dpr + itemArr[1].replace(num,'');\n\t\t\t\t\t\tswitch (itemArr[0].toLocaleLowerCase()) {\n\t\t\t\t\t\t\tcase 'width':\n\t\t\t\t\t\t\t\tkey = 'w';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'height':\n\t\t\t\t\t\t\t\tkey = 'h';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t};\n\t\t\t\t\t\t_ts.data.size[key] = num / config.dpr;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t_ts.data.styleObj[itemArr[0]] = itemArr[1];\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t// 设置公式图片\n\t\t\t_ts.setData({\n\t\t\t\tattr:{\n\t\t\t\t\tsrc:dataAttr.src,\n\t\t\t\t\tclass:dataAttr.class,\n\t\t\t\t\tstyle:_ts.setStyle(_ts.data.styleObj)\n\t\t\t\t},\n\t\t\t\tsize:_ts.data.size\n\t\t\t});\n\t\t}\n\t},\n\tmethods: {\n\t\t// 设置图片样式\n\t\tsetStyle:function(o){\n\t\t\tlet str = ``;\n\t\t\tfor(let key in o){\n\t\t\t\tstr += `${key}:${o[key]};`;\n\t\t\t};\n\t\t\treturn str;\n\t\t},\n\n\t\t// 图片加载完成设置图片大小\n\t\tload:function(e){\n\t\t\tconst _ts = this;\n\n\t\t\tif(!_ts.data.size.w || !_ts.data.size.h){\n\t\t\t\t_ts.setData({\n\t\t\t\t\tsize:{\n\t\t\t\t\t\tw:e.detail.width / config.dpr,\n\t\t\t\t\t\th:e.detail.height / config.dpr\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\t}\n})"
  },
  {
    "path": "miniprogram/components/towxml/img/img.json",
    "content": "{\n  \"component\": true\n}"
  },
  {
    "path": "miniprogram/components/towxml/img/img.wxml",
    "content": "<image class=\"{{attr.class}}\" lazy-load=\"true\" mode=\"{{attr.mode || 'widthFix'}}\" src=\"{{attr.src}}\" style=\"{{attr.style}} width:{{size.w}}px;height:{{size.h}}px;\" bindload=\"load\"></image>"
  },
  {
    "path": "miniprogram/components/towxml/img/img.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/components/towxml/index.js",
    "content": "const md = require('./parse/markdown/index'),\n    parse = require('./parse/index')\n\nmodule.exports = (str,type,option)=>{\n    option = option || {};\n    let result;\n    switch (type) {\n        case 'markdown':\n            result = parse(md(str),option);\n        break;\n        case 'html':\n            result = parse(str,option);\n        break;\n        default:\n            throw new Error('Invalid type, only markdown and html are supported');\n        break;\n    };\n    return result;\n};\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/highlight.js",
    "content": "\"use strict\";function deepFreeze(e){Object.freeze(e);var n=\"function\"==typeof e;return Object.getOwnPropertyNames(e).forEach(function(t){!e.hasOwnProperty(t)||null===e[t]||\"object\"!=typeof e[t]&&\"function\"!=typeof e[t]||n&&(\"caller\"===t||\"callee\"===t||\"arguments\"===t)||Object.isFrozen(e[t])||deepFreeze(e[t])}),e}function escapeHTML(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function inherit(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function tag(e){return e.nodeName.toLowerCase()}function nodeStream(e){var n=[];return function e(t,r){for(var a=t.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(n.push({event:\"start\",offset:r,node:a}),r=e(a,r),tag(a).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:r,node:a}));return r}(e,0),n}function mergeStreams(e,n,t){var r=0,a=\"\",i=[];function s(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:\"start\"===n[0].event?e:n:e.length?e:n}function o(e){a+=\"<\"+tag(e)+[].map.call(e.attributes,function(e){return\" \"+e.nodeName+'=\"'+escapeHTML(e.value).replace(/\"/g,\"&quot;\")+'\"'}).join(\"\")+\">\"}function l(e){a+=\"</\"+tag(e)+\">\"}function c(e){(\"start\"===e.event?o:l)(e.node)}for(;e.length||n.length;){var u=s();if(a+=escapeHTML(t.substring(r,u[0].offset)),r=u[0].offset,u===e){i.reverse().forEach(l);do{c(u.splice(0,1)[0]),u=s()}while(u===e&&u.length&&u[0].offset===r);i.reverse().forEach(o)}else\"start\"===u[0].event?i.push(u[0].node):i.pop(),c(u.splice(0,1)[0])}return a+escapeHTML(t.substr(r))}var utils=Object.freeze({__proto__:null,escapeHTML:escapeHTML,inherit:inherit,nodeStream:nodeStream,mergeStreams:mergeStreams});const SPAN_CLOSE=\"</span>\",emitsWrappingTags=e=>!!e.kind;class HTMLRenderer{constructor(e,n){this.buffer=\"\",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=escapeHTML(e)}openNode(e){if(!emitsWrappingTags(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){emitsWrappingTags(e)&&(this.buffer+=SPAN_CLOSE)}span(e){this.buffer+=`<span class=\"${e}\">`}value(){return this.buffer}}class TokenTree{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){let n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return\"string\"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){e.children&&(e.children.every(e=>\"string\"==typeof e)?(e.text=e.children.join(\"\"),delete e.children):e.children.forEach(e=>{\"string\"!=typeof e&&TokenTree._collapse(e)}))}}class TokenTreeEmitter extends TokenTree{constructor(e){super(),this.options=e}addKeyword(e,n){\"\"!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){\"\"!==e&&this.add(e)}addSublanguage(e,n){let t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new HTMLRenderer(this,this.options).value()}finalize(){}}function escape(e){return new RegExp(e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")}function source(e){return e&&e.source||e}function countMatchGroups(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}function startsWith(e,n){var t=e&&e.exec(n);return t&&0===t.index}function join(e,n){for(var t=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./,r=0,a=\"\",i=0;i<e.length;i++){var s=r+=1,o=source(e[i]);for(i>0&&(a+=n),a+=\"(\";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),\"\\\\\"==l[0][0]&&l[1]?a+=\"\\\\\"+String(Number(l[1])+s):(a+=l[0],\"(\"==l[0]&&r++)}a+=\")\"}return a}const IDENT_RE=\"[a-zA-Z]\\\\w*\",UNDERSCORE_IDENT_RE=\"[a-zA-Z_]\\\\w*\",NUMBER_RE=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",C_NUMBER_RE=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",BINARY_NUMBER_RE=\"\\\\b(0b[01]+)\",RE_STARTERS_RE=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",BACKSLASH_ESCAPE={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},APOS_STRING_MODE={className:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[BACKSLASH_ESCAPE]},QUOTE_STRING_MODE={className:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[BACKSLASH_ESCAPE]},PHRASAL_WORDS_MODE={begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},COMMENT=function(e,n,t){var r=inherit({className:\"comment\",begin:e,end:n,contains:[]},t||{});return r.contains.push(PHRASAL_WORDS_MODE),r.contains.push({className:\"doctag\",begin:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",relevance:0}),r},C_LINE_COMMENT_MODE=COMMENT(\"//\",\"$\"),C_BLOCK_COMMENT_MODE=COMMENT(\"/\\\\*\",\"\\\\*/\"),HASH_COMMENT_MODE=COMMENT(\"#\",\"$\"),NUMBER_MODE={className:\"number\",begin:NUMBER_RE,relevance:0},C_NUMBER_MODE={className:\"number\",begin:C_NUMBER_RE,relevance:0},BINARY_NUMBER_MODE={className:\"number\",begin:\"\\\\b(0b[01]+)\",relevance:0},CSS_NUMBER_MODE={className:\"number\",begin:NUMBER_RE+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},REGEXP_MODE={begin:/(?=\\/[^\\/\\n]*\\/)/,contains:[{className:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[BACKSLASH_ESCAPE,{begin:/\\[/,end:/\\]/,relevance:0,contains:[BACKSLASH_ESCAPE]}]}]},TITLE_MODE={className:\"title\",begin:IDENT_RE,relevance:0},UNDERSCORE_TITLE_MODE={className:\"title\",begin:\"[a-zA-Z_]\\\\w*\",relevance:0},METHOD_GUARD={begin:\"\\\\.\\\\s*[a-zA-Z_]\\\\w*\",relevance:0};var MODES=Object.freeze({__proto__:null,IDENT_RE:IDENT_RE,UNDERSCORE_IDENT_RE:\"[a-zA-Z_]\\\\w*\",NUMBER_RE:NUMBER_RE,C_NUMBER_RE:C_NUMBER_RE,BINARY_NUMBER_RE:\"\\\\b(0b[01]+)\",RE_STARTERS_RE:RE_STARTERS_RE,BACKSLASH_ESCAPE:BACKSLASH_ESCAPE,APOS_STRING_MODE:APOS_STRING_MODE,QUOTE_STRING_MODE:QUOTE_STRING_MODE,PHRASAL_WORDS_MODE:PHRASAL_WORDS_MODE,COMMENT:COMMENT,C_LINE_COMMENT_MODE:C_LINE_COMMENT_MODE,C_BLOCK_COMMENT_MODE:C_BLOCK_COMMENT_MODE,HASH_COMMENT_MODE:HASH_COMMENT_MODE,NUMBER_MODE:NUMBER_MODE,C_NUMBER_MODE:C_NUMBER_MODE,BINARY_NUMBER_MODE:BINARY_NUMBER_MODE,CSS_NUMBER_MODE:CSS_NUMBER_MODE,REGEXP_MODE:REGEXP_MODE,TITLE_MODE:TITLE_MODE,UNDERSCORE_TITLE_MODE:UNDERSCORE_TITLE_MODE,METHOD_GUARD:METHOD_GUARD}),COMMON_KEYWORDS=\"of and for in not or if then\".split(\" \");function compileLanguage(e){function n(n,t){return new RegExp(source(n),\"m\"+(e.case_insensitive?\"i\":\"\")+(t?\"g\":\"\"))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=countMatchGroups(e)+1}compile(){0===this.regexes.length&&(this.exec=(()=>null));let e=this.regexes.map(e=>e[1]);this.matcherRe=n(join(e,\"|\"),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;let n=this.matcherRe.exec(e);if(!n)return null;let t=n.findIndex((e,n)=>n>0&&void 0!=e),r=this.matchIndexes[t];return Object.assign(n,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];let n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),\"begin\"===n.type&&this.count++}exec(e){let n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function a(e){let n=e.input[e.index-1],t=e.input[e.index+e[0].length];if(\".\"===n||\".\"===t)return{ignoreMatch:!0}}if(e.contains&&e.contains.includes(\"self\"))throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");!function t(i,s){i.compiled||(i.compiled=!0,i.__onBegin=null,i.keywords=i.keywords||i.beginKeywords,i.keywords&&(i.keywords=compileKeywords(i.keywords,e.case_insensitive)),i.lexemesRe=n(i.lexemes||/\\w+/,!0),s&&(i.beginKeywords&&(i.begin=\"\\\\b(\"+i.beginKeywords.split(\" \").join(\"|\")+\")(?=\\\\b|\\\\s)\",i.__onBegin=a),i.begin||(i.begin=/\\B|\\b/),i.beginRe=n(i.begin),i.endSameAsBegin&&(i.end=i.begin),i.end||i.endsWithParent||(i.end=/\\B|\\b/),i.end&&(i.endRe=n(i.end)),i.terminator_end=source(i.end)||\"\",i.endsWithParent&&s.terminator_end&&(i.terminator_end+=(i.end?\"|\":\"\")+s.terminator_end)),i.illegal&&(i.illegalRe=n(i.illegal)),null==i.relevance&&(i.relevance=1),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map(function(e){return expand_or_clone_mode(\"self\"===e?i:e)})),i.contains.forEach(function(e){t(e,i)}),i.starts&&t(i.starts,s),i.matcher=function(e){let n=new r;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:\"begin\"})),e.terminator_end&&n.addRule(e.terminator_end,{type:\"end\"}),e.illegal&&n.addRule(e.illegal,{type:\"illegal\"}),n}(i))}(e)}function dependencyOnParent(e){return!!e&&(e.endsWithParent||dependencyOnParent(e.starts))}function expand_or_clone_mode(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(n){return inherit(e,{variants:null},n)})),e.cached_variants?e.cached_variants:dependencyOnParent(e)?inherit(e,{starts:e.starts?inherit(e.starts):null}):Object.isFrozen(e)?inherit(e):e}function compileKeywords(e,n){var t={};return\"string\"==typeof e?r(\"keyword\",e):Object.keys(e).forEach(function(n){r(n,e[n])}),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(\" \").forEach(function(n){var r=n.split(\"|\");t[r[0]]=[e,scoreForKeyword(r[0],r[1])]})}}function scoreForKeyword(e,n){return n?Number(n):commonKeyword(e)?0:1}function commonKeyword(e){return COMMON_KEYWORDS.includes(e.toLowerCase())}var version=\"10.0.0-beta.0\";const escape$1=escapeHTML,inherit$1=inherit,{nodeStream:nodeStream$1,mergeStreams:mergeStreams$1}=utils,HLJS=function(e){var n=[],t={},r={},a=[],i=!0,s=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,o=\"Could not find the language '{}', did you forget to load/include a language module?\",l={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0,__emitter:TokenTreeEmitter};function c(e){return l.noHighlightRe.test(e)}function u(e,n,t,r){var a={code:n,language:e};R(\"before:highlight\",a);var i=a.result?a.result:d(a.language,a.code,t,r);return i.code=a.code,R(\"after:highlight\",i),i}function d(e,n,r,a){var s=n;function c(e,n){var t=R.case_insensitive?n[0].toLowerCase():n[0];return e.keywords.hasOwnProperty(t)&&e.keywords[t]}function u(){null!=b.subLanguage?function(){if(\"\"!==S){var e=\"string\"==typeof b.subLanguage;if(!e||t[b.subLanguage]){var n=e?d(b.subLanguage,S,!0,v[b.subLanguage]):g(S,b.subLanguage.length?b.subLanguage:void 0);b.relevance>0&&(T+=n.relevance),e&&(v[b.subLanguage]=n.top),N.addSublanguage(n.emitter,n.language)}else N.addText(S)}}():function(){var e,n,t,r;if(b.keywords){for(n=0,b.lexemesRe.lastIndex=0,t=b.lexemesRe.exec(S),r=\"\";t;){r+=S.substring(n,t.index);var a=null;(e=c(b,t))?(N.addText(r),r=\"\",T+=e[1],a=e[0],N.addKeyword(t[0],a)):r+=t[0],n=b.lexemesRe.lastIndex,t=b.lexemesRe.exec(S)}r+=S.substr(n),N.addText(r)}else N.addText(S)}(),S=\"\"}function h(e){e.className&&N.openNode(e.className),b=Object.create(e,{parent:{value:b}})}function f(e){var n=e[0],t=e.rule;if(t.__onBegin){if((t.__onBegin(e)||{}).ignoreMatch)return function(e){return 0===b.matcher.regexIndex?(S+=e[0],1):(w=!0,0)}(n)}return t&&t.endSameAsBegin&&(t.endRe=escape(n)),t.skip?S+=n:(t.excludeBegin&&(S+=n),u(),t.returnBegin||t.excludeBegin||(S=n)),h(t),t.returnBegin?0:n.length}function E(e){var n=e[0],t=s.substr(e.index),r=function e(n,t){if(startsWith(n.endRe,t)){for(;n.endsParent&&n.parent;)n=n.parent;return n}if(n.endsWithParent)return e(n.parent,t)}(b,t);if(r){var a=b;a.skip?S+=n:(a.returnEnd||a.excludeEnd||(S+=n),u(),a.excludeEnd&&(S=n));do{b.className&&N.closeNode(),b.skip||b.subLanguage||(T+=b.relevance),b=b.parent}while(b!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.endRe=r.endRe),h(r.starts)),a.returnEnd?0:n.length}}var _={};function m(n,t){var a,o=t&&t[0];if(S+=n,null==o)return u(),0;if(\"begin\"==_.type&&\"end\"==t.type&&_.index==t.index&&\"\"===o){if(S+=s.slice(t.index,t.index+1),!i)throw(a=new Error(\"0 width match regex\")).languageName=e,a.badRule=_.rule,a;return 1}if(_=t,\"begin\"===t.type)return f(t);if(\"illegal\"===t.type&&!r)throw(a=new Error('Illegal lexeme \"'+o+'\" for mode \"'+(b.className||\"<unnamed>\")+'\"')).mode=b,a;if(\"end\"===t.type){var l=E(t);if(void 0!=l)return l}return S+=o,o.length}var R=p(e);if(!R)throw console.error(o.replace(\"{}\",e)),new Error('Unknown language: \"'+e+'\"');compileLanguage(R);var M,b=a||R,v={},N=new l.__emitter(l);!function(){for(var e=[],n=b;n!==R;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>N.openNode(e))}();var O,x,S=\"\",T=0,D=0;try{var w=!1;for(b.matcher.considerAll();w?w=!1:(b.matcher.lastIndex=D,b.matcher.considerAll()),O=b.matcher.exec(s);){x=m(s.substring(D,O.index),O),D=O.index+x}return m(s.substr(D)),N.closeAllNodes(),N.finalize(),M=N.toHTML(),{relevance:T,value:M,language:e,illegal:!1,emitter:N,top:b}}catch(n){if(n.message&&n.message.includes(\"Illegal\"))return{illegal:!0,illegalBy:{msg:n.message,context:s.slice(D-100,D+100),mode:n.mode},sofar:M,relevance:0,value:escape$1(s),emitter:N};if(i)return{relevance:0,value:escape$1(s),emitter:N,language:e,top:b,errorRaised:n};throw n}}function g(e,n){n=n||l.languages||Object.keys(t);var r={relevance:0,emitter:new l.__emitter(l),value:escape$1(e)},a=r;return n.filter(p).filter(m).forEach(function(n){var t=d(n,e,!1);t.language=n,t.relevance>a.relevance&&(a=t),t.relevance>r.relevance&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function h(e){return l.tabReplace||l.useBR?e.replace(s,function(e,n){return l.useBR&&\"\\n\"===e?\"<br>\":l.tabReplace?n.replace(/\\t/g,l.tabReplace):\"\"}):e}function f(e){var n,t,a,i,s,d=function(e){var n,t=e.className+\" \";if(t+=e.parentNode?e.parentNode.className:\"\",n=l.languageDetectRe.exec(t)){var r=p(n[1]);return r||(console.warn(o.replace(\"{}\",n[1])),console.warn(\"Falling back to no-highlight mode for this block.\",e)),r?n[1]:\"no-highlight\"}return t.split(/\\s+/).find(e=>c(e)||p(e))}(e);c(d)||(R(\"before:highlightBlock\",{block:e,language:d}),l.useBR?(n=document.createElement(\"div\")).innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\"):n=e,s=n.textContent,a=d?u(d,s,!0):g(s),(t=nodeStream$1(n)).length&&((i=document.createElement(\"div\")).innerHTML=a.value,a.value=mergeStreams$1(t,nodeStream$1(i),s)),a.value=h(a.value),R(\"after:highlightBlock\",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var a=n?r[n]:t,i=[e.trim()];return e.match(/\\bhljs\\b/)||i.push(\"hljs\"),e.includes(a)||i.push(a),i.join(\" \").trim()}(e.className,d,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function E(){if(!E.called){E.called=!0;var e=document.querySelectorAll(\"pre code\");n.forEach.call(e,f)}}var _={disableAutodetect:!0};function p(e){return e=(e||\"\").toLowerCase(),t[e]||t[r[e]]}function m(e){var n=p(e);return n&&!n.disableAutodetect}function R(e,n){var t=e;a.forEach(function(e){e[t]&&e[t](n)})}Object.assign(e,{highlight:u,highlightAuto:g,fixMarkup:h,highlightBlock:f,configure:function(e){l=inherit$1(l,e)},initHighlighting:E,initHighlightingOnLoad:function(){window.addEventListener(\"DOMContentLoaded\",E,!1)},registerLanguage:function(n,a){var s;try{s=a(e)}catch(e){if(console.error(\"Language definition for '{}' could not be registered.\".replace(\"{}\",n)),!i)throw e;console.error(e),s=_}s.name||(s.name=n),t[n]=s,s.rawDefinition=a.bind(null,e),s.aliases&&s.aliases.forEach(function(e){r[e]=n})},listLanguages:function(){return Object.keys(t)},getLanguage:p,requireLanguage:function(e){var n=p(e);if(n)return n;throw new Error(\"The '{}' language is required, but not loaded.\".replace(\"{}\",e))},autoDetection:m,inherit:inherit$1,addPlugin:function(e,n){a.push(e)}}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString=version;for(const e in MODES)\"object\"==typeof MODES[e]&&deepFreeze(MODES[e]);return Object.assign(e,MODES),e};var highlight=HLJS({});module.exports=highlight;"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/index.js",
    "content": "import config from '../../config';\nimport hljs from './highlight';\n\nconst languages ={\n  'c-like': require('./languages/c-like'),\n  c: require('./languages/c'),\n  bash: require('./languages/bash'),\n  css: require('./languages/css'),\n  dart: require('./languages/dart'),\n  go: require('./languages/go'),\n  java: require('./languages/go'),\n  javascript: require('./languages/javascript'),\n  json: require('./languages/json'),\n  less: require('./languages/less'),\n  scss: require('./languages/scss'),\n  shell: require('./languages/shell'),\n  xml: require('./languages/xml'),\n  htmlbars: require('./languages/htmlbars'),\n  'nginx': require('./languages/nginx'),\n  'php': require('./languages/php'),\n  'python': require('./languages/python'),\n  'python-repl': require('./languages/python-repl'),\n  'typescript': require('./languages/typescript'),\n};\n\nfor (const lang of config.highlight) {\n  hljs.registerLanguage(lang, languages[lang].default);\n}\n\nmodule.exports = hljs;\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/bash.js",
    "content": "/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common\n*/\n\nexport default function(hljs) {\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/, end:/\\}/,\n    contains: [\n      { begin: /:-/, contains: [VAR] } // default values\n    ]\n  };\n  Object.assign(VAR,{\n    className: 'variable',\n    variants: [\n      {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/, end: /\\)/,\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    className: '',\n    begin: /\\\\\"/\n\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      { begin: /\\d+#[0-9a-f]+/, className: \"number\" },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SHEBANG = {\n    className: 'meta',\n    begin: /^#![^\\n]+sh\\s*$/,\n    relevance: 10\n  };\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n    relevance: 0\n  };\n\n  return {\n    name: 'Bash',\n    aliases: ['sh', 'zsh'],\n    lexemes: /\\b-?[a-z\\._]+\\b/,\n    keywords: {\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp',\n      _:\n        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n    },\n    contains: [\n      SHEBANG,\n      FUNCTION,\n      ARITHMETIC,\n      hljs.HASH_COMMENT_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      VAR\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/c-like.js",
    "content": "/*\nLanguage: C-like foundation grammar for C/C++ grammars\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Zaven Muradyan <megalivoithos@gmail.com>, Roel Deckers <admin@codingcat.nl>, Sam Wu <samsam2310@gmail.com>, Jordi Petit <jordi.petit@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, Google Inc. (David Benjamin) <davidben@google.com>\nCategory: common, system\n*/\n\n/* In the future the intention is to split out the C/C++ grammars distinctly\nsince they are separate languages.  They will likely share a common foundation\nthough, and this file sets the groundwork for that - so that we get the breaking\nchange in v10 and don't have to change the requirements again later.\n\nSee: https://github.com/highlightjs/highlight.js/issues/2146\n*/\n\nexport default function(hljs) {\n  function optional(s) {\n    return '(?:' + s + ')?';\n  }\n  var DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)'\n  var NAMESPACE_RE = '[a-zA-Z_]\\\\w*::'\n  var TEMPLATE_ARGUMENT_RE = '<.*?>';\n  var FUNCTION_TYPE_RE = '(' +\n    DECLTYPE_AUTO_RE + '|' +\n    optional(NAMESPACE_RE) +'[a-zA-Z_]\\\\w*' + optional(TEMPLATE_ARGUMENT_RE) +\n  ')';\n  var CPP_PRIMITIVE_TYPES = {\n    className: 'keyword',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  var CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)'\n  var STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"', end: '\"',\n        illegal: '\\\\n',\n        contains: [hljs.BACKSLASH_ESCAPE]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\", end: '\\'',\n        illegal: '.'\n      },\n      { begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\((?:.|\\n)*?\\)\\1\"/ }\n    ]\n  };\n\n  var NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  var PREPROCESSOR =       {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/, end: /$/,\n    keywords: {\n      'meta-keyword':\n        'if else elif endif define undef warning error line ' +\n        'pragma _Pragma ifdef ifndef include'\n    },\n    contains: [\n      {\n        begin: /\\\\\\n/, relevance: 0\n      },\n      hljs.inherit(STRINGS, {className: 'meta-string'}),\n      {\n        className: 'meta-string',\n        begin: /<.*?>/, end: /$/,\n        illegal: '\\\\n',\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  var TITLE_MODE = {\n    className: 'title',\n    begin: optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  var FUNCTION_TITLE = optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  var CPP_KEYWORDS = {\n    keyword: 'int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof ' +\n      'dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace ' +\n      'unsigned long volatile static protected bool template mutable if public friend ' +\n      'do goto auto void enum else break extern using asm case typeid wchar_t ' +\n      'short reinterpret_cast|10 default double register explicit signed typename try this ' +\n      'switch continue inline delete alignas alignof constexpr consteval constinit decltype ' +\n      'concept co_await co_return co_yield requires ' +\n      'noexcept static_assert thread_local restrict final override ' +\n      'atomic_bool atomic_char atomic_schar ' +\n      'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' +\n      'atomic_ullong new throw return ' +\n      'and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq',\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' +\n      'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' +\n      'unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos ' +\n      'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' +\n      'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' +\n      'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' +\n      'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' +\n      'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' +\n      'vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary',\n    literal: 'true false nullptr NULL'\n  };\n\n  var EXPRESSION_CONTAINS = [\n    CPP_PRIMITIVE_TYPES,\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  var EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {begin: /=/, end: /;/},\n      {begin: /\\(/, end: /\\)/},\n      {beginKeywords: 'new throw return else', end: /;/}\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/, end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat(['self']),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  var FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true, end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>]/,\n    contains: [\n\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n      },\n      {\n        begin: FUNCTION_TITLE, returnBegin: true,\n        contains: [TITLE_MODE],\n        relevance: 0\n      },\n      {\n        className: 'params',\n        begin: /\\(/, end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/, end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp', 'hh', 'hxx', 'cxx'],\n    keywords: CPP_KEYWORDS,\n    // the base c-like language will NEVER be auto-detected, rather the\n    // derivitives: c, c++, arduino turn auto-detect back on for themselves\n    disableAutodetect: true,\n    illegal: '</',\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      EXPRESSION_CONTAINS,\n      [\n      PREPROCESSOR,\n      {\n        begin: '\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<', end: '>',\n        keywords: CPP_KEYWORDS,\n        contains: ['self', CPP_PRIMITIVE_TYPES]\n      },\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: CPP_KEYWORDS\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class struct', end: /[{;:]/,\n        contains: [\n          {begin: /</, end: />/, contains: ['self']}, // skip generic stuff\n          hljs.TITLE_MODE\n        ]\n      }\n    ]),\n    exports: {\n      preprocessor: PREPROCESSOR,\n      strings: STRINGS,\n      keywords: CPP_KEYWORDS\n    }\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/c.js",
    "content": "/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\nRequires: c-like.js\n*/\n\nexport default function(hljs) {\n\n  var lang = hljs.getLanguage('c-like').rawDefinition();\n  // Until C is actually different than C++ there is no reason to auto-detect C\n  // as it's own language since it would just fail auto-detect testing or\n  // simply match with C++.\n  //\n  // See further comments in c-like.js.\n\n  // lang.disableAutodetect = false;\n  lang.name = 'C';\n  lang.aliases = ['c', 'h'];\n  return lang;\n\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/css.js",
    "content": "/*\nLanguage: CSS\nCategory: common, css\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\nexport default function(hljs) {\n  var FUNCTION_LIKE = {\n    begin: /[\\w-]+\\(/, returnBegin: true,\n    contains: [\n      {\n        className: 'built_in',\n        begin: /[\\w-]+/\n      },\n      {\n        begin: /\\(/, end: /\\)/,\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.CSS_NUMBER_MODE,\n        ]\n      }\n    ]\n  }\n  var ATTRIBUTE = {\n    className: 'attribute',\n    begin: /\\S/, end: ':', excludeEnd: true,\n    starts: {\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        FUNCTION_LIKE,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'number', begin: '#[0-9A-Fa-f]+'\n        },\n        {\n          className: 'meta', begin: '!important'\n        }\n      ]\n    }\n  }\n  var AT_IDENTIFIER = '@[a-z-]+' // @font-face\n  var AT_MODIFIERS = \"and or not only\"\n  var MEDIA_TYPES = \"all print screen speech\"\n  var AT_PROPERTY_RE = /@\\-?\\w[\\w]*(\\-\\w+)*/ // @-webkit-keyframes\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var RULE = {\n    begin: /(?:[A-Z\\_\\.\\-]+|--[a-zA-Z0-9_-]+)\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n    contains: [\n      ATTRIBUTE\n    ]\n  };\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=\\/|'\\$]/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'selector-id', begin: /#[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'selector-class', begin: /\\.[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'selector-attr',\n        begin: /\\[/, end: /\\]/,\n        illegal: '$',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE,\n        ]\n      },\n      {\n        className: 'selector-pseudo',\n        begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        lexemes: AT_IDENTIFIER,\n        keywords: '@page @font-face'\n      },\n      {\n        begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n                                 // because it doesn’t let it to be parsed as\n                                 // a rule set but instead drops parser into\n                                 // the default mode which is how it should be.\n        illegal: /:/, // break on Less variables @var: ...\n        returnBegin: true,\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/, endsWithParent: true, excludeEnd: true,\n            relevance: 0,\n            keywords: AT_MODIFIERS,\n            contains: [\n              {\n                begin: /[a-z-]+:/,\n                className:\"attribute\"\n              },\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag', begin: IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: '{', end: '}',\n        illegal: /\\S/,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          RULE,\n        ]\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/dart.js",
    "content": "/*\nLanguage: Dart\nRequires: markdown.js\nAuthor: Maxim Dikun <dikmax@gmail.com>\nDescription: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/\nWebsite: https://dart.dev\nCategory: scripting\n*/\n\nexport default function(hljs) {\n  var SUBST = {\n    className: 'subst',\n    variants: [{\n      begin: '\\\\$[A-Za-z0-9_]+'\n    }],\n  };\n\n  var BRACED_SUBST = {\n    className: 'subst',\n    variants: [{\n      begin: '\\\\${',\n      end: '}'\n    }, ],\n    keywords: 'true false null this is new super',\n  };\n\n  var STRING = {\n    className: 'string',\n    variants: [{\n        begin: 'r\\'\\'\\'',\n        end: '\\'\\'\\''\n      },\n      {\n        begin: 'r\"\"\"',\n        end: '\"\"\"'\n      },\n      {\n        begin: 'r\\'',\n        end: '\\'',\n        illegal: '\\\\n'\n      },\n      {\n        begin: 'r\"',\n        end: '\"',\n        illegal: '\\\\n'\n      },\n      {\n        begin: '\\'\\'\\'',\n        end: '\\'\\'\\'',\n        contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n      },\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: '\\\\n',\n        contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n      }\n    ]\n  };\n  BRACED_SUBST.contains = [\n    hljs.C_NUMBER_MODE, STRING\n  ];\n\n  var KEYWORDS = {\n    keyword: 'abstract as assert async await break case catch class const continue covariant default deferred do ' +\n      'dynamic else enum export extends extension external factory false final finally for Function get hide if ' +\n      'implements import in inferface is library mixin new null on operator part rethrow return set show static ' +\n      'super switch sync this throw true try typedef var void while with yield',\n    built_in:\n      // dart:core\n      'Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' +\n      'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print ' +\n      // dart:html\n      'Element ElementList document querySelector querySelectorAll window'\n  };\n\n  return {\n    name: 'Dart',\n    keywords: KEYWORDS,\n    contains: [\n      STRING,\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/', {\n          subLanguage: 'markdown',\n          relevance:0\n        }\n      ),\n      hljs.COMMENT(\n        '///+\\\\s*',\n        '$', {\n          contains: [{\n            subLanguage: 'markdown',\n            begin: '.',\n            end: '$',\n            relevance:0\n          }]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'class interface',\n        end: '{',\n        excludeEnd: true,\n        contains: [{\n            beginKeywords: 'extends implements'\n          },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '@[A-Za-z]+'\n      },\n      {\n        begin: '=>' // No markup, just a relevance booster\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/go.js",
    "content": "/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nexport default function(hljs) {\n  var GO_KEYWORDS = {\n    keyword:\n      'break default func interface select case map struct chan else goto package switch ' +\n      'const fallthrough if range type continue for import return var go defer ' +\n      'bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 ' +\n      'uint16 uint32 uint64 int uint uintptr rune',\n    literal:\n       'true false iota nil',\n    built_in:\n      'append cap close complex copy imag len make new panic print println real recover delete'\n  };\n  return {\n    name: 'Go',\n    aliases: ['golang'],\n    keywords: GO_KEYWORDS,\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        variants: [\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {begin: '`', end: '`'},\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          {begin: hljs.C_NUMBER_RE + '[i]', relevance: 1},\n          hljs.C_NUMBER_MODE\n        ]\n      },\n      {\n        begin: /:=/ // relevance booster\n      },\n      {\n        className: 'function',\n        beginKeywords: 'func', end: '\\\\s*(\\\\{|$)', excludeEnd: true,\n        contains: [\n          hljs.TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            keywords: GO_KEYWORDS,\n            illegal: /[\"']/\n          }\n        ]\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/htmlbars.js",
    "content": "/*\nLanguage: HTMLBars\nRequires: xml.js\nAuthor: Michael Johnston <lastobelus@gmail.com>\nDescription: Matcher for HTMLBars\nWebsite: https://github.com/tildeio/htmlbars\nCategory: template\n*/\n\nexport default function(hljs) {\n  var BUILT_INS = 'action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view';\n\n  var ATTR_ASSIGNMENT = {\n    illegal: /\\}\\}/,\n    begin: /[a-zA-Z0-9_]+=/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr', begin: /[a-zA-Z0-9_]+/\n      }\n    ]\n  };\n\n  var SUB_EXPR = {\n    illegal: /\\}\\}/,\n    begin: /\\)/, end: /\\)/,\n    contains: [\n      {\n        begin: /[a-zA-Z\\.\\-]+/,\n        keywords: {built_in: BUILT_INS},\n        starts: {\n          endsWithParent: true, relevance: 0,\n          contains: [\n            hljs.QUOTE_STRING_MODE,\n          ]\n        }\n      }\n    ]\n  };\n\n  var TAG_INNARDS = {\n    endsWithParent: true, relevance: 0,\n    keywords: {keyword: 'as', built_in: BUILT_INS},\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      ATTR_ASSIGNMENT,\n      hljs.NUMBER_MODE\n    ]\n  };\n\n  return {\n    name: 'HTMLBars',\n    case_insensitive: true,\n    subLanguage: 'xml',\n    contains: [\n      hljs.COMMENT('{{!(--)?', '(--)?}}'),\n      {\n        className: 'template-tag',\n        begin: /\\{\\{[#\\/]/, end: /\\}\\}/,\n        contains: [\n          {\n            className: 'name',\n            begin: /[a-zA-Z\\.\\-]+/,\n            keywords: {'builtin-name': BUILT_INS},\n            starts: TAG_INNARDS\n          }\n        ]\n      },\n      {\n        className: 'template-variable',\n        begin: /\\{\\{[a-zA-Z][a-zA-Z\\-]+/, end: /\\}\\}/,\n        keywords: {keyword: 'as', built_in: BUILT_INS},\n        contains: [\n          hljs.QUOTE_STRING_MODE\n        ]\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/index.js",
    "content": "export * as cLike from './c-like';\nexport * as c from './c';\nexport * as bash from './bash';\nexport * as css from './css';\nexport * as dart from './dart';\nexport * as go from './go';\nexport * as java from './go';\nexport * as javascript from './javascript';\nexport * as json from './json';\nexport * as less from './less';\nexport * as scss from './scss';\nexport * as shell from './shell';\nexport * as xml from './xml';\nexport * as htmlbars from './htmlbars';\nexport * as nginx from './nginx';\nexport * as php from './php';\nexport * as python from './python';\nexport * as pythonRepl from './python-repl';\nexport * as typescript from './typescript';\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/java.js",
    "content": "/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\nexport default function(hljs) {\n  var JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\\\s*,\\\\s*' + JAVA_IDENT_RE + ')*>)?';\n  var KEYWORDS =\n    'false synchronized int abstract float private char boolean var static null if const ' +\n    'for true while long strictfp finally protected import native final void ' +\n    'enum else break transient catch instanceof byte super volatile case assert short ' +\n    'package default double public try this switch continue throws protected public private ' +\n    'module requires exports do';\n\n  var ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains:[\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\"self\"] // allow nested () inside our annotation\n      },\n    ]\n  }\n  // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html\n  var JAVA_NUMBER_RE = '\\\\b' +\n    '(' +\n      '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...\n      '|' +\n      '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...\n      '|' +\n      '(' +\n        '([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?' +\n        '|' +\n        '\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)' +\n      ')' +\n      '([eE][-+]?\\\\d+)?' + // octal, decimal, float\n    ')' +\n    '[lLfF]?';\n  var JAVA_NUMBER_MODE = {\n    className: 'number',\n    begin: JAVA_NUMBER_RE,\n    relevance: 0\n  };\n\n  return {\n    name: 'Java',\n    aliases: ['jsp'],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance : 0,\n          contains : [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/, relevance: 0\n            },\n            {\n              className : 'doctag',\n              begin : '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,\n        keywords: 'class interface',\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends implements'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: '(' + GENERIC_IDENT_RE + '\\\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true, end: /[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true,\n            relevance: 0,\n            contains: [hljs.UNDERSCORE_TITLE_MODE]\n          },\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              hljs.C_NUMBER_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      JAVA_NUMBER_MODE,\n      ANNOTATION\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/javascript.js",
    "content": "/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\nexport default function(hljs) {\n  var FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  var XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/\n  };\n  var IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n  var KEYWORDS = {\n    keyword:\n      'in of if for while finally var new function do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const export super debugger as async await static ' +\n      // ECMAScript 6 modules import\n      'import from as'\n    ,\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n      'Promise'\n  };\n  var NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0[bB][01]+)n?' },\n      { begin: '\\\\b(0[oO][0-7]+)n?' },\n      { begin: hljs.C_NUMBER_RE + 'n?' }\n    ],\n    relevance: 0\n  };\n  var SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{', end: '\\\\}',\n    keywords: KEYWORDS,\n    contains: []  // defined later\n  };\n  var HTML_TEMPLATE = {\n    begin: 'html`', end: '',\n    starts: {\n      end: '`', returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml',\n    }\n  };\n  var CSS_TEMPLATE = {\n    begin: 'css`', end: '',\n    starts: {\n      end: '`', returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css',\n    }\n  };\n  var TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`', end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  SUBST.contains = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    TEMPLATE_STRING,\n    NUMBER,\n    hljs.REGEXP_MODE\n  ];\n  var PARAMS_CONTAINS = SUBST.contains.concat([\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.C_LINE_COMMENT_MODE\n  ]);\n  var PARAMS = {\n    className: 'params',\n    begin: /\\(/, end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    contains: PARAMS_CONTAINS\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      {\n        className: 'meta',\n        begin: /^#!/, end: /$/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      TEMPLATE_STRING,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance : 0,\n          contains : [\n            {\n              className : 'doctag',\n              begin : '@[A-Za-z]+',\n              contains : [\n                {\n                  className: 'type',\n                  begin: '\\\\{',\n                  end: '\\\\}',\n                  relevance: 0\n                },\n                {\n                  className: 'variable',\n                  begin: IDENT_RE + '(?=\\\\s*(-)|$)',\n                  endsParent: true,\n                  relevance: 0\n                },\n                // eat spaces (not newlines) so we can find\n                // types or variables\n                {\n                  begin: /(?=[^\\n])\\s/,\n                  relevance: 0\n                },\n              ]\n            }\n          ]\n        }\n      ),\n      hljs.C_BLOCK_COMMENT_MODE,\n      NUMBER,\n      { // object attr container\n        begin: /[{,\\n]\\s*/, relevance: 0,\n        contains: [\n          {\n            begin: IDENT_RE + '\\\\s*:', returnBegin: true,\n            relevance: 0,\n            contains: [{className: 'attr', begin: IDENT_RE, relevance: 0}]\n          }\n        ]\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            begin: '(\\\\(.*?\\\\)|' + IDENT_RE + ')\\\\s*=>', returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: IDENT_RE\n                  },\n                  {\n                    begin: /\\(\\s*\\)/,\n                  },\n                  {\n                    begin: /\\(/, end: /\\)/,\n                    excludeBegin: true, excludeEnd: true,\n                    keywords: KEYWORDS,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/, relevance: 0,\n          },\n          {\n            className: '',\n            begin: /\\s/,\n            end: /\\s*/,\n            skip: true,\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { begin: XML_TAG.begin, end: XML_TAG.end }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin, end: XML_TAG.end, skip: true,\n                contains: ['self']\n              }\n            ]\n          },\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE}),\n          PARAMS\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n\n      hljs.METHOD_GUARD,\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        beginKeywords: 'constructor', end: /\\{/, excludeEnd: true\n      },\n      {\n        begin:'(get|set)\\\\s*(?=' + IDENT_RE+ '\\\\()',\n        end: /{/,\n        keywords: \"get set\",\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE}),\n          { begin: /\\(\\)/ }, // eat to avoid empty params\n          PARAMS\n        ]\n\n      }\n    ],\n    illegal: /#(?!!)/\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/json.js",
    "content": "/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols\n*/\n\nexport default function(hljs) {\n  var LITERALS = {literal: 'true false null'};\n  var ALLOWED_COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE\n  ]\n  var TYPES = [\n    hljs.QUOTE_STRING_MODE,\n    hljs.C_NUMBER_MODE\n  ];\n  var VALUE_CONTAINER = {\n    end: ',', endsWithParent: true, excludeEnd: true,\n    contains: TYPES,\n    keywords: LITERALS\n  };\n  var OBJECT = {\n    begin: '{', end: '}',\n    contains: [\n      {\n        className: 'attr',\n        begin: /\"/, end: /\"/,\n        contains: [hljs.BACKSLASH_ESCAPE],\n        illegal: '\\\\n',\n      },\n      hljs.inherit(VALUE_CONTAINER, {begin: /:/})\n    ].concat(ALLOWED_COMMENTS),\n    illegal: '\\\\S'\n  };\n  var ARRAY = {\n    begin: '\\\\[', end: '\\\\]',\n    contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents\n    illegal: '\\\\S'\n  };\n  TYPES.push(OBJECT, ARRAY);\n  ALLOWED_COMMENTS.forEach(function(rule) {\n    TYPES.push(rule)\n  })\n  return {\n    name: 'JSON',\n    contains: TYPES,\n    keywords: LITERALS,\n    illegal: '\\\\S'\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/less.js",
    "content": "/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css\n*/\n\nexport default function(hljs) {\n  var IDENT_RE        = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n  var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';\n\n  /* Generic Modes */\n\n  var RULES = [], VALUE = []; // forward def. for recursive modes\n\n  var STRING_MODE = function(c) { return {\n    // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n    className: 'string', begin: '~?' + c + '.*?' + c\n  };};\n\n  var IDENT_MODE = function(name, begin, relevance) { return {\n    className: name, begin: begin, relevance: relevance\n  };};\n\n  var PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(', end: '\\\\)', contains: VALUE, relevance: 0\n  };\n\n  // generic Less highlighter (used almost everywhere except selectors):\n  VALUE.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING_MODE(\"'\"),\n    STRING_MODE('\"'),\n    hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n    {\n      begin: '(url|data-uri)\\\\(',\n      starts: {className: 'string', end: '[\\\\)\\\\n]', excludeEnd: true}\n    },\n    IDENT_MODE('number', '#[0-9A-Fa-f]+\\\\b'),\n    PARENS_MODE,\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n    IDENT_MODE('variable', '@{'  + IDENT_RE + '}'),\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n    { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n      className: 'attribute', begin: IDENT_RE + '\\\\s*:', end: ':', returnBegin: true, excludeEnd: true\n    },\n    {\n      className: 'meta',\n      begin: '!important'\n    }\n  );\n\n  var VALUE_WITH_RULESETS = VALUE.concat({\n    begin: '{', end: '}', contains: RULES\n  });\n\n  var MIXIN_GUARD_MODE = {\n    beginKeywords: 'when', endsWithParent: true,\n    contains: [{beginKeywords: 'and not'}].concat(VALUE) // using this form to override VALUE’s 'function' match\n  };\n\n  /* Rule-Level Modes */\n\n  var RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:', returnBegin: true, end: '[;}]',\n    relevance: 0,\n    contains: [\n      {\n        className: 'attribute',\n        begin: INTERP_IDENT_RE, end: ':', excludeEnd: true,\n        starts: {\n          endsWithParent: true, illegal: '[<=$]',\n          relevance: 0,\n          contains: VALUE\n        }\n      }\n    ]\n  };\n\n  var AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {end: '[;{}]', returnEnd: true, contains: VALUE, relevance: 0}\n  };\n\n  // variable definitions and calls\n  var VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [\n      // using more strict pattern for higher relevance to increase chances of Less detection.\n      // this is *the only* Less specific statement used in most of the sources, so...\n      // (we’ll still often loose to the css-parser unless there's '//' comment,\n      // simply because 1 variable just can't beat 99 properties :)\n      {begin: '@' + IDENT_RE + '\\\\s*:', relevance: 15},\n      {begin: '@' + IDENT_RE}\n    ],\n    starts: {end: '[;}]', returnEnd: true, contains: VALUE_WITH_RULESETS}\n  };\n\n  var SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [{\n      begin: '[\\\\.#:&\\\\[>]', end: '[;{}]'  // mixin calls end with ';'\n      }, {\n      begin: INTERP_IDENT_RE, end: '{'\n    }],\n    returnBegin: true,\n    returnEnd:   true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      MIXIN_GUARD_MODE,\n      IDENT_MODE('keyword',  'all\\\\b'),\n      IDENT_MODE('variable', '@{'  + IDENT_RE + '}'),     // otherwise it’s identified as tag\n      IDENT_MODE('selector-tag',  INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes \"tags\"\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n      IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-tag',  '&', 0),\n      {className: 'selector-attr', begin: '\\\\[', end: '\\\\]'},\n      {className: 'selector-pseudo', begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},\n      {begin: '\\\\(', end: '\\\\)', contains: VALUE_WITH_RULESETS}, // argument list of parametric mixins\n      {begin: '!important'} // eat !important after mixin call or it will be colored as tag\n    ]\n  };\n\n  RULES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    AT_RULE_MODE,\n    VAR_RULE_MODE,\n    RULE_MODE,\n    SELECTOR_MODE\n  );\n\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/nginx.js",
    "content": "/*\nLanguage: Nginx config\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\nCategory: common, config\nWebsite: https://www.nginx.com\n*/\n\nexport default function(hljs) {\n  var VAR = {\n    className: 'variable',\n    variants: [\n      {begin: /\\$\\d+/},\n      {begin: /\\$\\{/, end: /}/},\n      {begin: '[\\\\$\\\\@]' + hljs.UNDERSCORE_IDENT_RE}\n    ]\n  };\n  var DEFAULT = {\n    endsWithParent: true,\n    lexemes: '[a-z/_]+',\n    keywords: {\n      literal:\n        'on off yes no true false none blocked debug info notice warn error crit ' +\n        'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'\n    },\n    relevance: 0,\n    illegal: '=>',\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'string',\n        contains: [hljs.BACKSLASH_ESCAPE, VAR],\n        variants: [\n          {begin: /\"/, end: /\"/},\n          {begin: /'/, end: /'/}\n        ]\n      },\n      // this swallows entire URLs to avoid detecting numbers within\n      {\n        begin: '([a-z]+):/', end: '\\\\s', endsWithParent: true, excludeEnd: true,\n        contains: [VAR]\n      },\n      {\n        className: 'regexp',\n        contains: [hljs.BACKSLASH_ESCAPE, VAR],\n        variants: [\n          {begin: \"\\\\s\\\\^\", end: \"\\\\s|{|;\", returnEnd: true},\n          // regexp locations (~, ~*)\n          {begin: \"~\\\\*?\\\\s+\", end: \"\\\\s|{|;\", returnEnd: true},\n          // *.example.com\n          {begin: \"\\\\*(\\\\.[a-z\\\\-]+)+\"},\n          // sub.example.*\n          {begin: \"([a-z\\\\-]+\\\\.)+\\\\*\"}\n        ]\n      },\n      // IP\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b'\n      },\n      // units\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b',\n        relevance: 0\n      },\n      VAR\n    ]\n  };\n\n  return {\n    name: 'Nginx config',\n    aliases: ['nginxconf'],\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s+{', returnBegin: true,\n        end: '{',\n        contains: [\n          {\n            className: 'section',\n            begin: hljs.UNDERSCORE_IDENT_RE\n          }\n        ],\n        relevance: 0\n      },\n      {\n        begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s', end: ';|{', returnBegin: true,\n        contains: [\n          {\n            className: 'attribute',\n            begin: hljs.UNDERSCORE_IDENT_RE,\n            starts: DEFAULT\n          }\n        ],\n        relevance: 0\n      }\n    ],\n    illegal: '[^\\\\s\\\\}]'\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/php.js",
    "content": "/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nexport default function(hljs) {\n  var VARIABLE = {\n    begin: '\\\\$+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*'\n  };\n  var PREPROCESSOR = {\n    className: 'meta',\n    variants: [\n      { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n      { begin: /<\\?[=]?/ },\n      { begin: /\\?>/ } // end php tag\n    ]\n  };\n  var STRING = {\n    className: 'string',\n    contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],\n    variants: [\n      {\n        begin: 'b\"', end: '\"'\n      },\n      {\n        begin: 'b\\'', end: '\\''\n      },\n      hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})\n    ]\n  };\n  var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};\n  var KEYWORDS = {\n    keyword:\n    // Magic constants:\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\n    '__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ ' +\n    // Function that look like language construct or language construct that look like function:\n    // List of keywords that may not require parenthesis\n    'die echo exit include include_once print require require_once ' +\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n    // Other keywords:\n    // <https://www.php.net/manual/en/reserved.php>\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\n    'array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield',\n    literal: 'false null true',\n    built_in:\n    // Standard PHP library:\n    // <https://www.php.net/manual/en/book.spl.php>\n    'Error|0 ' + // error is too common a name esp since PHP is case in-sensitive\n    'AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ' +\n    // Reserved interfaces:\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\n    'ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference ' +\n    // Reserved classes:\n    // <https://www.php.net/manual/en/reserved.classes.php>\n    'Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass'\n  };\n  return {\n    aliases: ['php', 'php3', 'php4', 'php5', 'php6', 'php7'],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.COMMENT('//', '$', {contains: [PREPROCESSOR]}),\n      hljs.COMMENT(\n        '/\\\\*',\n        '\\\\*/',\n        {\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.COMMENT(\n        '__halt_compiler.+?;',\n        false,\n        {\n          endsWithParent: true,\n          keywords: '__halt_compiler',\n          lexemes: hljs.UNDERSCORE_IDENT_RE\n        }\n      ),\n      {\n        className: 'string',\n        begin: /<<<['\"]?\\w+['\"]?$/, end: /^\\w+;?$/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            variants: [\n              {begin: /\\$\\w+/},\n              {begin: /\\{\\$/, end: /\\}/}\n            ]\n          }\n        ]\n      },\n      PREPROCESSOR,\n      {\n        className: 'keyword', begin: /\\$this\\b/\n      },\n      VARIABLE,\n      {\n        // swallow composed identifiers to avoid parsing them as keywords\n        begin: /(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/\n      },\n      {\n        className: 'function',\n        beginKeywords: 'fn function', end: /[;{]/, excludeEnd: true,\n        illegal: '[$%\\\\[]',\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'params',\n            begin: '\\\\(', end: '\\\\)',\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              VARIABLE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          }\n        ]\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class interface', end: '{', excludeEnd: true,\n        illegal: /[:\\(\\$\"]/,\n        contains: [\n          {beginKeywords: 'extends implements'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace', end: ';',\n        illegal: /[\\.']/,\n        contains: [hljs.UNDERSCORE_TITLE_MODE]\n      },\n      {\n        beginKeywords: 'use', end: ';',\n        contains: [hljs.UNDERSCORE_TITLE_MODE]\n      },\n      {\n        begin: '=>' // No markup, just a relevance booster\n      },\n      STRING,\n      NUMBER\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/python-repl.js",
    "content": "/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nexport default function(hljs) {\n  return {\n    aliases: ['pycon'],\n    contains: [\n      {\n        className: 'meta',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$', subLanguage: 'python'\n          }\n        },\n        variants: [\n          { begin: /^>>>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      },\n    ]\n  }\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/python.js",
    "content": "/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nexport default function(hljs) {\n  var KEYWORDS = {\n    keyword:\n      'and elif is global as in if from raise for except finally print import pass return ' +\n      'exec else break not with class assert yield try while continue del or def lambda ' +\n      'async await nonlocal|10',\n    built_in:\n      'Ellipsis NotImplemented',\n    literal: 'False None True'\n  };\n  var PROMPT = {\n    className: 'meta',  begin: /^(>>>|\\.\\.\\.) /\n  };\n  var SUBST = {\n    className: 'subst',\n    begin: /\\{/, end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n  var LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n  var STRING = {\n    className: 'string',\n    contains: [hljs.BACKSLASH_ESCAPE],\n    variants: [\n      {\n        begin: /(u|b)?r?'''/, end: /'''/,\n        contains: [hljs.BACKSLASH_ESCAPE, PROMPT],\n        relevance: 10\n      },\n      {\n        begin: /(u|b)?r?\"\"\"/, end: /\"\"\"/,\n        contains: [hljs.BACKSLASH_ESCAPE, PROMPT],\n        relevance: 10\n      },\n      {\n        begin: /(fr|rf|f)'''/, end: /'''/,\n        contains: [hljs.BACKSLASH_ESCAPE, PROMPT, LITERAL_BRACKET, SUBST]\n      },\n      {\n        begin: /(fr|rf|f)\"\"\"/, end: /\"\"\"/,\n        contains: [hljs.BACKSLASH_ESCAPE, PROMPT, LITERAL_BRACKET, SUBST]\n      },\n      {\n        begin: /(u|r|ur)'/, end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /(u|r|ur)\"/, end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /(b|br)'/, end: /'/\n      },\n      {\n        begin: /(b|br)\"/, end: /\"/\n      },\n      {\n        begin: /(fr|rf|f)'/, end: /'/,\n        contains: [hljs.BACKSLASH_ESCAPE, LITERAL_BRACKET, SUBST]\n      },\n      {\n        begin: /(fr|rf|f)\"/, end: /\"/,\n        contains: [hljs.BACKSLASH_ESCAPE, LITERAL_BRACKET, SUBST]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n  var NUMBER = {\n    className: 'number', relevance: 0,\n    variants: [\n      {begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'},\n      {begin: '\\\\b(0o[0-7]+)[lLjJ]?'},\n      {begin: hljs.C_NUMBER_RE + '[lLjJ]?'}\n    ]\n  };\n  var PARAMS = {\n    className: 'params',\n    begin: /\\(/, end: /\\)/,\n    contains: ['self', PROMPT, NUMBER, STRING, hljs.HASH_COMMENT_MODE]\n  };\n  SUBST.contains = [STRING, NUMBER, PROMPT];\n  return {\n    name: 'Python',\n    aliases: ['py', 'gyp', 'ipython'],\n    keywords: KEYWORDS,\n    illegal: /(<\\/|->|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      // eat \"if\" prior to string so that it won't accidentally be\n      // labeled as an f-string as in:\n      { beginKeywords: \"if\", relevance: 0 },\n      STRING,\n      hljs.HASH_COMMENT_MODE,\n      {\n        variants: [\n          {className: 'function', beginKeywords: 'def'},\n          {className: 'class', beginKeywords: 'class'}\n        ],\n        end: /:/,\n        illegal: /[${=;\\n,]/,\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          PARAMS,\n          {\n            begin: /->/, endsWithParent: true,\n            keywords: 'None'\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/, end: /$/\n      },\n      {\n        begin: /\\b(print|exec)\\(/ // don’t highlight keywords-turned-functions in Python 3\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/scss.js",
    "content": "/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css\n*/\nexport default function(hljs) {\n  var AT_IDENTIFIER = '@[a-z-]+' // @font-face\n  var AT_MODIFIERS = \"and or not only\"\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n  };\n  var HEXCOLOR = {\n    className: 'number', begin: '#[0-9A-Fa-f]+'\n  };\n  var DEF_INTERNALS = {\n    className: 'attribute',\n    begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n    excludeEnd: true,\n    illegal: '[^\\\\s]',\n    starts: {\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        HEXCOLOR,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'meta', begin: '!important'\n        }\n      ]\n    }\n  };\n  return {\n    name: 'SCSS',\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'selector-id', begin: '\\\\#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-class', begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-attr', begin: '\\\\[', end: '\\\\]',\n        illegal: '$'\n      },\n      {\n        className: 'selector-tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n        begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n        relevance: 0\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n      },\n      VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n        illegal: '[^\\\\s]'\n      },\n      {\n        begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n      },\n      {\n        begin: ':', end: ';',\n        contains: [\n          VARIABLE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            className: 'meta', begin: '!important'\n          }\n        ]\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        lexemes: AT_IDENTIFIER,\n        keywords: '@page @font-face'\n      },\n      {\n        begin: '@', end: '[{;]',\n        returnBegin: true,\n        keywords: AT_MODIFIERS,\n        contains: [\n          {\n            begin: AT_IDENTIFIER,\n            className: \"keyword\"\n          },\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          // {\n          //   begin: '\\\\s[A-Za-z0-9_.-]+',\n          //   relevance: 0\n          // }\n        ]\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/shell.js",
    "content": "/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\n*/\n\nexport default function(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: ['console'],\n    contains: [\n      {\n        className: 'meta',\n        begin: '^\\\\s{0,3}[/\\\\w\\\\d\\\\[\\\\]()@-]*[>%$#]',\n        starts: {\n          end: '$', subLanguage: 'bash'\n        }\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/typescript.js",
    "content": "/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\nexport default function(hljs) {\n  var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n  var KEYWORDS = {\n    keyword:\n      'in if for while finally var new function do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const class public private protected get set super ' +\n      'static implements enum export import declare type namespace abstract ' +\n      'as from extends async await',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document any number boolean string void Promise'\n  };\n\n  var DECORATOR = {\n    className: 'meta',\n    begin: '@' + JS_IDENT_RE,\n  };\n\n  var ARGS =\n  {\n    begin: '\\\\(',\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      'self',\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.NUMBER_MODE\n    ]\n  };\n\n  var PARAMS = {\n    className: 'params',\n    begin: /\\(/, end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      DECORATOR,\n      ARGS\n    ]\n  };\n  var NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0[bB][01]+)n?' },\n      { begin: '\\\\b(0[oO][0-7]+)n?' },\n      { begin: hljs.C_NUMBER_RE + 'n?' }\n    ],\n    relevance: 0\n  };\n  var SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{', end: '\\\\}',\n    keywords: KEYWORDS,\n    contains: []  // defined later\n  };\n  var HTML_TEMPLATE = {\n    begin: 'html`', end: '',\n    starts: {\n      end: '`', returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml',\n    }\n  };\n  var CSS_TEMPLATE = {\n    begin: 'css`', end: '',\n    starts: {\n      end: '`', returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css',\n    }\n  };\n  var TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`', end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  SUBST.contains = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    TEMPLATE_STRING,\n    NUMBER,\n    hljs.REGEXP_MODE\n  ];\n\n\n\n  return {\n    name: 'TypeScript',\n    aliases: ['ts'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'meta',\n        begin: /^\\s*['\"]use strict['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      TEMPLATE_STRING,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      NUMBER,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            begin: '(\\\\(.*?\\\\)|' + hljs.IDENT_RE + ')\\\\s*=>', returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.IDENT_RE\n                  },\n                  {\n                    begin: /\\(\\s*\\)/,\n                  },\n                  {\n                    begin: /\\(/, end: /\\)/,\n                    excludeBegin: true, excludeEnd: true,\n                    keywords: KEYWORDS,\n                    contains: [\n                      'self',\n                      hljs.C_LINE_COMMENT_MODE,\n                      hljs.C_BLOCK_COMMENT_MODE\n                    ]\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /[\\{;]/, excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE }),\n          PARAMS\n        ],\n        illegal: /%/,\n        relevance: 0 // () => {} is more typical in TypeScript\n      },\n      {\n        beginKeywords: 'constructor', end: /[\\{;]/, excludeEnd: true,\n        contains: [\n          'self',\n          PARAMS\n        ]\n      },\n      { // prevent references like module.id from being higlighted as module definitions\n        begin: /module\\./,\n        keywords: { built_in: 'module' },\n        relevance: 0\n      },\n      {\n        beginKeywords: 'module', end: /\\{/, excludeEnd: true\n      },\n      {\n        beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n        keywords: 'interface extends'\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      },\n      DECORATOR,\n      ARGS\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/languages/xml.js",
    "content": "/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common\n*/\n\nexport default function(hljs) {\n  var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n  var XML_ENTITIES = {\n    className: 'symbol',\n    begin: '&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;'\n  };\n  var XML_META_KEYWORDS = {\n\t  begin: '\\\\s',\n\t  contains:[\n\t    {\n\t      className: 'meta-keyword',\n\t      begin: '#?[a-z_][a-z1-9_-]+',\n\t      illegal: '\\\\n',\n      }\n\t  ]\n  };\n  var XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {begin: '\\\\(', end: '\\\\)'});\n  var APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {className: 'meta-string'});\n  var QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'});\n  var TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {begin: /\"/, end: /\"/, contains: [XML_ENTITIES]},\n              {begin: /'/, end: /'/, contains: [XML_ENTITIES]},\n              {begin: /[^\\s\"'=<>`]+/}\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist', 'wsf', 'svg'],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: '<![a-z]', end: '>',\n        relevance: 10,\n        contains: [\n\t\t\t\t  XML_META_KEYWORDS,\n\t\t\t\t  QUOTE_META_STRING_MODE,\n\t\t\t\t  APOS_META_STRING_MODE,\n\t\t\t\t\tXML_META_PAR_KEYWORDS,\n\t\t\t\t\t{\n\t\t\t\t\t  begin: '\\\\[', end: '\\\\]',\n\t\t\t\t\t  contains:[\n\t\t\t\t\t\t  {\n\t\t\t\t\t      className: 'meta',\n\t\t\t\t\t      begin: '<![a-z]', end: '>',\n\t\t\t\t\t      contains: [\n\t\t\t\t\t        XML_META_KEYWORDS,\n\t\t\t\t\t        XML_META_PAR_KEYWORDS,\n\t\t\t\t\t        QUOTE_META_STRING_MODE,\n\t\t\t\t\t        APOS_META_STRING_MODE\n\t\t\t\t\t\t    ]\n\t\t\t        }\n\t\t\t\t\t  ]\n\t\t\t\t  }\n\t\t\t\t]\n      },\n      hljs.COMMENT(\n        '<!--',\n        '-->',\n        {\n          relevance: 10\n        }\n      ),\n      {\n        begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n        relevance: 10\n      },\n      XML_ENTITIES,\n      {\n        className: 'meta',\n        begin: /<\\?xml/, end: /\\?>/, relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: '<style(?=\\\\s|>)', end: '>',\n        keywords: {name: 'style'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '</style>', returnEnd: true,\n          subLanguage: ['css', 'xml']\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: '<script(?=\\\\s|>)', end: '>',\n        keywords: {name: 'script'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '\\<\\/script\\>', returnEnd: true,\n          subLanguage: ['javascript', 'handlebars', 'xml']\n        }\n      },\n      {\n        className: 'tag',\n        begin: '</?', end: '/?>',\n        contains: [\n          {\n            className: 'name', begin: /[^\\/><\\s]+/, relevance: 0\n          },\n          TAG_INTERNALS\n        ]\n      }\n    ]\n  };\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/style/github.wxss",
    "content": "/*\n\ngithub.com style (c) Vasily Polovnyov <vast@whiteants.net>\n\n*/\n\n.h2w-light .hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  color: #333;\n  background: #f8f8f8;\n}\n\n.h2w-light .hljs-comment,\n.h2w-light .hljs-quote {\n  color: #998;\n  font-style: italic;\n}\n\n.h2w-light .hljs-keyword,\n.h2w-light .hljs-selector-tag,\n.h2w-light .hljs-subst {\n  color: #333;\n  font-weight: bold;\n}\n\n.h2w-light .hljs-number,\n.h2w-light .hljs-literal,\n.h2w-light .hljs-variable,\n.h2w-light .hljs-template-variable,\n.h2w-light .hljs-tag .hljs-attr {\n  color: #008080;\n}\n\n.h2w-light .hljs-string,\n.h2w-light .hljs-doctag {\n  color: #d14;\n}\n\n.h2w-light .hljs-title,\n.h2w-light .hljs-section,\n.h2w-light .hljs-selector-id {\n  color: #900;\n  font-weight: bold;\n}\n\n.h2w-light .hljs-subst {\n  font-weight: normal;\n}\n\n.h2w-light .hljs-type,\n.h2w-light .hljs-class .hljs-title {\n  color: #458;\n  font-weight: bold;\n}\n\n.h2w-light .hljs-tag,\n.h2w-light .hljs-name,\n.h2w-light .hljs-attribute {\n  color: #000080;\n  font-weight: normal;\n}\n\n.h2w-light .hljs-regexp,\n.h2w-light .hljs-link {\n  color: #009926;\n}\n\n.h2w-light .hljs-symbol,\n.h2w-light .hljs-bullet {\n  color: #990073;\n}\n\n.h2w-light .hljs-built_in,\n.h2w-light .hljs-builtin-name {\n  color: #0086b3;\n}\n\n.h2w-light .hljs-meta {\n  color: #999;\n  font-weight: bold;\n}\n\n.h2w-light .hljs-deletion {\n  background: #fdd;\n}\n\n.h2w-light .hljs-addition {\n  background: #dfd;\n}\n\n.h2w-light .hljs-emphasis {\n  font-style: italic;\n}\n\n.h2w-light .hljs-strong {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/highlight/style/monokai.wxss",
    "content": "/*\nMonokai style - ported by Luigi Maselli - http://grigio.org\n*/\n\n.h2w-dark .hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #272822; color: #ddd;\n}\n\n.h2w-dark .hljs-tag,\n.h2w-dark .hljs-keyword,\n.h2w-dark .hljs-selector-tag,\n.h2w-dark .hljs-literal,\n.h2w-dark .hljs-strong,\n.h2w-dark .hljs-name {\n  color: #f92672;\n}\n\n.h2w-dark .hljs-code {\n  color: #66d9ef;\n}\n\n.h2w-dark .hljs-class .hljs-title {\n  color: white;\n}\n\n.h2w-dark .hljs-attribute,\n.h2w-dark .hljs-symbol,\n.h2w-dark .hljs-regexp,\n.h2w-dark .hljs-link {\n  color: #bf79db;\n}\n\n.h2w-dark .hljs-string,\n.h2w-dark .hljs-bullet,\n.h2w-dark .hljs-subst,\n.h2w-dark .hljs-title,\n.h2w-dark .hljs-section,\n.h2w-dark .hljs-emphasis,\n.h2w-dark .hljs-type,\n.h2w-dark .hljs-built_in,\n.h2w-dark .hljs-builtin-name,\n.h2w-dark .hljs-selector-attr,\n.h2w-dark .hljs-selector-pseudo,\n.h2w-dark .hljs-addition,\n.h2w-dark .hljs-variable,\n.h2w-dark .hljs-template-tag,\n.h2w-dark .hljs-template-variable {\n  color: #a6e22e;\n}\n\n.h2w-dark .hljs-comment,\n.h2w-dark .hljs-quote,\n.h2w-dark .hljs-deletion,\n.h2w-dark .hljs-meta {\n  color: #75715e;\n}\n\n.h2w-dark .hljs-keyword,\n.h2w-dark .hljs-selector-tag,\n.h2w-dark .hljs-literal,\n.h2w-dark .hljs-doctag,\n.h2w-dark .hljs-title,\n.h2w-dark .hljs-section,\n.h2w-dark .hljs-type,\n.h2w-dark .hljs-selector-id {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/index.js",
    "content": "const parse2 = require('./parse2/index'),\n    // parse5 = require('./parse5/index').parse,\n    config = require('../config'),\n\n    // html与wxml转换关系\n    correspondTag = (()=>{\n        let result = {\n                a:'navigator',\n                todogroup:'checkbox-group',\n                audio:'audio-player'\n            };\n        \n        // 该系列的标签都转换为text\n        // ['span','b','strong','i','em','code','sub','sup','g-emoji','mark','ins','u'].forEach(item => {\n        //     result[item] = 'text';\n        // });\n\n        // 该系列小程序原生tag，不需转换\n        [...config.wxml,...config.components].forEach(item => {\n            result[item] = item;\n        });\n        return result;\n    })(),\n\n    // 元素与html对应的wxml标签名\n    getWxmlTag = tagStr => !tagStr ? undefined : correspondTag[tagStr] || 'view',\n\n    // 精简数据，并初始化相关事件等\n    initObj = (obj,option)=>{\n        const result = {\n                theme:option.theme || 'light',\n                _e:{}\n            },\n            events = global._events = {},\n            base = option.base;\n\n        // 主题保存到全局\n        global._theme = result.theme;\n\n        // 事件添加到全局中，各个组件在触发事件时会从全局调用\n        if(option.events){\n            for(let key in option.events){\n                events[key] = option.events[key];\n            };\n        };\n\n        // 遍历原始数据，处理成能解析的数据\n        let eachFn;\n        (eachFn = (arr,obj,_e) => {\n            obj.child = obj.child || [];\n            _e.child = _e.child || [];\n\n            arr.forEach(item => {\n                if(item.type === 'comment'){\n                    return;\n                };\n                let o = {},\n                    e = {};\n                o.type = e.type = item.type;\n                o._e = e;\n                if(item.type === 'text'){\n                    o.text = e.text = item.data;\n                }else{\n                    o.tag = getWxmlTag(item.name);      // 转换之后的标签\n                    // o.tag = o.tag === 'text' ? 'view' : o.tag;\n                    e.tag = item.name;                  // 原始\n                    o.attr = item.attribs;\n                    e.attr = JSON.parse(JSON.stringify(item.attribs));\n\n                    o.attr.class = o.attr.class ? `h2w__${item.name} ${o.attr.class}` : `h2w__${item.name}`;\n\n                    // 处理资源相对路径\n                    if(base && o.attr.src){\n                        let src = o.attr.src;\n                        switch (src.indexOf('//')) {\n                            case 0:\n                                o.attr.src = `https:${src}`;\n                            break;\n                            case -1:\n                                o.attr.src = `${base}${src}`;\n                            break;\n                        };\n                    };\n\n                    if(item.children){\n                        eachFn(item.children,o,e);\n                    };\n                };\n                _e.child.push(e);\n                obj.child.push(o);\n            });\n        })(obj,result,result._e);\n        return result;\n    };\n\nmodule.exports = (str,option) => {\n    str = (()=>{\n        let re = /<body[^>]*>([\\s\\S]*)<\\/body>/i;\n        if(re.test(str)){\n            let result = re.exec(str);\n            return result[1] || str;\n        }else{\n            return str;\n        };\n    })();\n    return initObj(parse2(str,{decodeEntities:true}),option);\n};"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/index.js",
    "content": "let hljs;\nhljs = require('../highlight/index');\n\nconst config = require('../../config'),\n    mdOption = (()=>{\n        let result = {\n            html: true,\n            xhtmlOut: true,\n            typographer: true,\n            breaks: true,\n        };\n\n        if(config.highlight.length && hljs){\n            result.highlight = (code,lang,callback)=>{\n                let lineLen = code.split(/\\r|\\n/ig).length,\n                    result = hljs.highlightAuto(code).value;\n\n                    result = result.replace(/\\r|\\n/g,'<br/>').replace(/ /g,'&nbsp;').replace(/\\t/g,'&nbsp;&nbsp;&nbsp;&nbsp;');\n\n                if(config.showLineNumber){\n                    let lineStr = (()=>{\n                        let str = `<ul class=\"h2w__lineNum\">`;\n                        for(let i=0;i<lineLen-1;i++){\n                            str += `<li class=\"h2w__lineNumLine\">${i+1}</li>`\n                        };\n\n                        str += `</ul>`;\n                        return str;\n                    })();\n                    return lineStr + result;\n                };\n                return result;\n            }\n        };\n        return result;\n    })(),\n    md = require('./markdown')(mdOption);\n\n// 应用Markdown解析扩展，包括自定义组件（['sub','sup','ins','mark','emoji','todo','latex','yuml','echarts']）\n[...config.markdown,...config.components].forEach(item => {\n    if(!/^audio-player|table|todogroup|img$/.test(item)){\n        md.use(require(`./plugins/${item}`));\n    };\n});\n\n// 定义emoji渲染规则\nmd.renderer.rules.emoji = (token,index)=>{\n    let item = token[index];\n    return `<g-emoji class=\"h2w__emoji h2w__emoji--${item.markup}\">${item.content}</g-emoji>`;\n};\n\n// 导出模块\nmodule.exports = str => {\n    return md.render(str);\n};"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/markdown.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var r;r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,r.markdownit=e()}}(function(){var e;return function e(r,t,n){function s(i,a){if(!t[i]){if(!r[i]){var c=\"function\"==typeof require&&require;if(!a&&c)return c(i,!0);if(o)return o(i,!0);var l=new Error(\"Cannot find module '\"+i+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var u=t[i]={exports:{}};r[i][0].call(u.exports,function(e){var t=r[i][1][e];return s(t?t:e)},u,u.exports,e,r,t,n)}return t[i].exports}for(var o=\"function\"==typeof require&&require,i=0;i<n.length;i++)s(n[i]);return s}({1:[function(e,r,t){\"use strict\";r.exports=e(\"entities/maps/entities.json\")},{\"entities/maps/entities.json\":52}],2:[function(e,r,t){\"use strict\";r.exports=[\"address\",\"article\",\"aside\",\"base\",\"basefont\",\"blockquote\",\"body\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hr\",\"html\",\"iframe\",\"legend\",\"li\",\"link\",\"main\",\"menu\",\"menuitem\",\"meta\",\"nav\",\"noframes\",\"ol\",\"optgroup\",\"option\",\"p\",\"param\",\"pre\",\"section\",\"source\",\"title\",\"summary\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\"]},{}],3:[function(e,r,t){\"use strict\";var n=\"<[A-Za-z][A-Za-z0-9\\\\-]*(?:\\\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\\\s*=\\\\s*(?:[^\\\"'=<>`\\\\x00-\\\\x20]+|'[^']*'|\\\"[^\\\"]*\\\"))?)*\\\\s*\\\\/?>\",s=\"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\",o=new RegExp(\"^(?:\"+n+\"|\"+s+\"|<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->|<[?].*?[?]>|<![A-Z]+\\\\s+[^>]*>|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>)\"),i=new RegExp(\"^(?:\"+n+\"|\"+s+\")\");r.exports.HTML_TAG_RE=o,r.exports.HTML_OPEN_CLOSE_TAG_RE=i},{}],4:[function(e,r,t){\"use strict\";function n(e){return Object.prototype.toString.call(e)}function s(e){return\"[object String]\"===n(e)}function o(e,r){return y.call(e,r)}function i(e){return Array.prototype.slice.call(arguments,1).forEach(function(r){if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be object\");Object.keys(r).forEach(function(t){e[t]=r[t]})}}),e}function a(e,r,t){return[].concat(e.slice(0,r),t,e.slice(r+1))}function c(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function l(e){if(e>65535){e-=65536;var r=55296+(e>>10),t=56320+(1023&e);return String.fromCharCode(r,t)}return String.fromCharCode(e)}function u(e,r){var t=0;return o(w,r)?w[r]:35===r.charCodeAt(0)&&A.test(r)&&(t=\"x\"===r[1].toLowerCase()?parseInt(r.slice(2),16):parseInt(r.slice(1),10),c(t))?l(t):e}function p(e){return e.indexOf(\"\\\\\")<0?e:e.replace(x,\"$1\")}function h(e){return e.indexOf(\"\\\\\")<0&&e.indexOf(\"&\")<0?e:e.replace(C,function(e,r,t){return r?r:u(e,t)})}function f(e){return q[e]}function d(e){return D.test(e)?e.replace(/[&<>\"]/g,f):e}function m(e){return e.replace(/[.?*+^$[\\]\\\\(){}|-]/g,\"\\\\$&\")}function _(e){switch(e){case 9:case 32:return!0}return!1}function g(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function b(e){return E.test(e)}function k(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function v(e){return e.trim().replace(/\\s+/g,\" \").toUpperCase()}var y=Object.prototype.hasOwnProperty,x=/\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g,C=new RegExp(x.source+\"|\"+/&([a-z#][a-z0-9]{1,31});/gi.source,\"gi\"),A=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,w=e(\"./entities\"),D=/[&<>\"]/,q={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\"},E=e(\"uc.micro/categories/P/regex\");t.lib={},t.lib.mdurl=e(\"mdurl\"),t.lib.ucmicro=e(\"uc.micro\"),t.assign=i,t.isString=s,t.has=o,t.unescapeMd=p,t.unescapeAll=h,t.isValidEntityCode=c,t.fromCodePoint=l,t.escapeHtml=d,t.arrayReplaceAt=a,t.isSpace=_,t.isWhiteSpace=g,t.isMdAsciiPunct=k,t.isPunctChar=b,t.escapeRE=m,t.normalizeReference=v},{\"./entities\":1,mdurl:58,\"uc.micro\":65,\"uc.micro/categories/P/regex\":63}],5:[function(e,r,t){\"use strict\";t.parseLinkLabel=e(\"./parse_link_label\"),t.parseLinkDestination=e(\"./parse_link_destination\"),t.parseLinkTitle=e(\"./parse_link_title\")},{\"./parse_link_destination\":6,\"./parse_link_label\":7,\"./parse_link_title\":8}],6:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").isSpace,s=e(\"../common/utils\").unescapeAll;r.exports=function(e,r,t){var o,i,a=r,c={ok:!1,pos:0,lines:0,str:\"\"};if(60===e.charCodeAt(r)){for(r++;r<t;){if(10===(o=e.charCodeAt(r))||n(o))return c;if(62===o)return c.pos=r+1,c.str=s(e.slice(a+1,r)),c.ok=!0,c;92===o&&r+1<t?r+=2:r++}return c}for(i=0;r<t&&32!==(o=e.charCodeAt(r))&&!(o<32||127===o);)if(92===o&&r+1<t)r+=2;else{if(40===o&&++i>1)break;if(41===o&&--i<0)break;r++}return a===r?c:(c.str=s(e.slice(a,r)),c.lines=0,c.pos=r,c.ok=!0,c)}},{\"../common/utils\":4}],7:[function(e,r,t){\"use strict\";r.exports=function(e,r,t){var n,s,o,i,a=-1,c=e.posMax,l=e.pos;for(e.pos=r+1,n=1;e.pos<c;){if(93===(o=e.src.charCodeAt(e.pos))&&0===--n){s=!0;break}if(i=e.pos,e.md.inline.skipToken(e),91===o)if(i===e.pos-1)n++;else if(t)return e.pos=l,-1}return s&&(a=e.pos),e.pos=l,a}},{}],8:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").unescapeAll;r.exports=function(e,r,t){var s,o,i=0,a=r,c={ok:!1,pos:0,lines:0,str:\"\"};if(r>=t)return c;if(34!==(o=e.charCodeAt(r))&&39!==o&&40!==o)return c;for(r++,40===o&&(o=41);r<t;){if((s=e.charCodeAt(r))===o)return c.pos=r+1,c.lines=i,c.str=n(e.slice(a+1,r)),c.ok=!0,c;10===s?i++:92===s&&r+1<t&&(r++,10===e.charCodeAt(r)&&i++),r++}return c}},{\"../common/utils\":4}],9:[function(e,r,t){\"use strict\";function n(e){var r=e.trim().toLowerCase();return!g.test(r)||!!b.test(r)}function s(e){var r=d.parse(e,!0);if(r.hostname&&(!r.protocol||k.indexOf(r.protocol)>=0))try{r.hostname=m.toASCII(r.hostname)}catch(e){}return d.encode(d.format(r))}function o(e){var r=d.parse(e,!0);if(r.hostname&&(!r.protocol||k.indexOf(r.protocol)>=0))try{r.hostname=m.toUnicode(r.hostname)}catch(e){}return d.decode(d.format(r))}function i(e,r){if(!(this instanceof i))return new i(e,r);r||a.isString(e)||(r=e||{},e=\"default\"),this.inline=new h,this.block=new p,this.core=new u,this.renderer=new l,this.linkify=new f,this.validateLink=n,this.normalizeLink=s,this.normalizeLinkText=o,this.utils=a,this.helpers=a.assign({},c),this.options={},this.configure(e),r&&this.set(r)}var a=e(\"./common/utils\"),c=e(\"./helpers\"),l=e(\"./renderer\"),u=e(\"./parser_core\"),p=e(\"./parser_block\"),h=e(\"./parser_inline\"),f=e(\"linkify-it\"),d=e(\"mdurl\"),m=e(\"punycode\"),_={default:e(\"./presets/default\"),zero:e(\"./presets/zero\"),commonmark:e(\"./presets/commonmark\")},g=/^(vbscript|javascript|file|data):/,b=/^data:image\\/(gif|png|jpeg|webp);/,k=[\"http:\",\"https:\",\"mailto:\"];i.prototype.set=function(e){return a.assign(this.options,e),this},i.prototype.configure=function(e){var r,t=this;if(a.isString(e)&&(r=e,!(e=_[r])))throw new Error('Wrong `markdown-it` preset \"'+r+'\", check name');if(!e)throw new Error(\"Wrong `markdown-it` preset, can't be empty\");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(r){e.components[r].rules&&t[r].ruler.enableOnly(e.components[r].rules),e.components[r].rules2&&t[r].ruler2.enableOnly(e.components[r].rules2)}),this},i.prototype.enable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),[\"core\",\"block\",\"inline\"].forEach(function(r){t=t.concat(this[r].ruler.enable(e,!0))},this),t=t.concat(this.inline.ruler2.enable(e,!0));var n=e.filter(function(e){return t.indexOf(e)<0});if(n.length&&!r)throw new Error(\"MarkdownIt. Failed to enable unknown rule(s): \"+n);return this},i.prototype.disable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),[\"core\",\"block\",\"inline\"].forEach(function(r){t=t.concat(this[r].ruler.disable(e,!0))},this),t=t.concat(this.inline.ruler2.disable(e,!0));var n=e.filter(function(e){return t.indexOf(e)<0});if(n.length&&!r)throw new Error(\"MarkdownIt. Failed to disable unknown rule(s): \"+n);return this},i.prototype.use=function(e){var r=[this].concat(Array.prototype.slice.call(arguments,1));if(e&&e.apply){return e.apply(e,r),this}},i.prototype.parse=function(e,r){if(\"string\"!=typeof e)throw new Error(\"Input data should be a String\");var t=new this.core.State(e,this,r);return this.core.process(t),t.tokens},i.prototype.render=function(e,r){return r=r||{},this.renderer.render(this.parse(e,r),this.options,r)},i.prototype.parseInline=function(e,r){var t=new this.core.State(e,this,r);return t.inlineMode=!0,this.core.process(t),t.tokens},i.prototype.renderInline=function(e,r){return r=r||{},this.renderer.render(this.parseInline(e,r),this.options,r)},r.exports=i},{\"./common/utils\":4,\"./helpers\":5,\"./parser_block\":10,\"./parser_core\":11,\"./parser_inline\":12,\"./presets/commonmark\":13,\"./presets/default\":14,\"./presets/zero\":15,\"./renderer\":16,\"linkify-it\":53,mdurl:58,punycode:60}],10:[function(e,r,t){\"use strict\";function n(){this.ruler=new s;for(var e=0;e<o.length;e++)this.ruler.push(o[e][0],o[e][1],{alt:(o[e][2]||[]).slice()})}var s=e(\"./ruler\"),o=[[\"table\",e(\"./rules_block/table\"),[\"paragraph\",\"reference\"]],[\"code\",e(\"./rules_block/code\")],[\"fence\",e(\"./rules_block/fence\"),[\"paragraph\",\"reference\",\"blockquote\",\"list\"]],[\"blockquote\",e(\"./rules_block/blockquote\"),[\"paragraph\",\"reference\",\"list\"]],[\"hr\",e(\"./rules_block/hr\"),[\"paragraph\",\"reference\",\"blockquote\",\"list\"]],[\"list\",e(\"./rules_block/list\"),[\"paragraph\",\"reference\",\"blockquote\"]],[\"reference\",e(\"./rules_block/reference\")],[\"heading\",e(\"./rules_block/heading\"),[\"paragraph\",\"reference\",\"blockquote\"]],[\"lheading\",e(\"./rules_block/lheading\")],[\"html_block\",e(\"./rules_block/html_block\"),[\"paragraph\",\"reference\",\"blockquote\"]],[\"paragraph\",e(\"./rules_block/paragraph\")]];n.prototype.tokenize=function(e,r,t){for(var n,s=this.ruler.getRules(\"\"),o=s.length,i=r,a=!1,c=e.md.options.maxNesting;i<t&&(e.line=i=e.skipEmptyLines(i),!(i>=t))&&!(e.sCount[i]<e.blkIndent);){if(e.level>=c){e.line=t;break}for(n=0;n<o&&!s[n](e,i,t,!1);n++);e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<t&&e.isEmpty(i)&&(a=!0,i++,e.line=i)}},n.prototype.parse=function(e,r,t,n){var s;e&&(s=new this.State(e,r,t,n),this.tokenize(s,s.line,s.lineMax))},n.prototype.State=e(\"./rules_block/state_block\"),r.exports=n},{\"./ruler\":17,\"./rules_block/blockquote\":18,\"./rules_block/code\":19,\"./rules_block/fence\":20,\"./rules_block/heading\":21,\"./rules_block/hr\":22,\"./rules_block/html_block\":23,\"./rules_block/lheading\":24,\"./rules_block/list\":25,\"./rules_block/paragraph\":26,\"./rules_block/reference\":27,\"./rules_block/state_block\":28,\"./rules_block/table\":29}],11:[function(e,r,t){\"use strict\";function n(){this.ruler=new s;for(var e=0;e<o.length;e++)this.ruler.push(o[e][0],o[e][1])}var s=e(\"./ruler\"),o=[[\"normalize\",e(\"./rules_core/normalize\")],[\"block\",e(\"./rules_core/block\")],[\"inline\",e(\"./rules_core/inline\")],[\"linkify\",e(\"./rules_core/linkify\")],[\"replacements\",e(\"./rules_core/replacements\")],[\"smartquotes\",e(\"./rules_core/smartquotes\")]];n.prototype.process=function(e){var r,t,n;for(n=this.ruler.getRules(\"\"),r=0,t=n.length;r<t;r++)n[r](e)},n.prototype.State=e(\"./rules_core/state_core\"),r.exports=n},{\"./ruler\":17,\"./rules_core/block\":30,\"./rules_core/inline\":31,\"./rules_core/linkify\":32,\"./rules_core/normalize\":33,\"./rules_core/replacements\":34,\"./rules_core/smartquotes\":35,\"./rules_core/state_core\":36}],12:[function(e,r,t){\"use strict\";function n(){var e;for(this.ruler=new s,e=0;e<o.length;e++)this.ruler.push(o[e][0],o[e][1]);for(this.ruler2=new s,e=0;e<i.length;e++)this.ruler2.push(i[e][0],i[e][1])}var s=e(\"./ruler\"),o=[[\"text\",e(\"./rules_inline/text\")],[\"newline\",e(\"./rules_inline/newline\")],[\"escape\",e(\"./rules_inline/escape\")],[\"backticks\",e(\"./rules_inline/backticks\")],[\"strikethrough\",e(\"./rules_inline/strikethrough\").tokenize],[\"emphasis\",e(\"./rules_inline/emphasis\").tokenize],[\"link\",e(\"./rules_inline/link\")],[\"image\",e(\"./rules_inline/image\")],[\"autolink\",e(\"./rules_inline/autolink\")],[\"html_inline\",e(\"./rules_inline/html_inline\")],[\"entity\",e(\"./rules_inline/entity\")]],i=[[\"balance_pairs\",e(\"./rules_inline/balance_pairs\")],[\"strikethrough\",e(\"./rules_inline/strikethrough\").postProcess],[\"emphasis\",e(\"./rules_inline/emphasis\").postProcess],[\"text_collapse\",e(\"./rules_inline/text_collapse\")]];n.prototype.skipToken=function(e){var r,t,n=e.pos,s=this.ruler.getRules(\"\"),o=s.length,i=e.md.options.maxNesting,a=e.cache;if(void 0!==a[n])return void(e.pos=a[n]);if(e.level<i)for(t=0;t<o&&(e.level++,r=s[t](e,!0),e.level--,!r);t++);else e.pos=e.posMax;r||e.pos++,a[n]=e.pos},n.prototype.tokenize=function(e){for(var r,t,n=this.ruler.getRules(\"\"),s=n.length,o=e.posMax,i=e.md.options.maxNesting;e.pos<o;){if(e.level<i)for(t=0;t<s&&!(r=n[t](e,!1));t++);if(r){if(e.pos>=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},n.prototype.parse=function(e,r,t,n){var s,o,i,a=new this.State(e,r,t,n);for(this.tokenize(a),o=this.ruler2.getRules(\"\"),i=o.length,s=0;s<i;s++)o[s](a)},n.prototype.State=e(\"./rules_inline/state_inline\"),r.exports=n},{\"./ruler\":17,\"./rules_inline/autolink\":37,\"./rules_inline/backticks\":38,\"./rules_inline/balance_pairs\":39,\"./rules_inline/emphasis\":40,\"./rules_inline/entity\":41,\"./rules_inline/escape\":42,\"./rules_inline/html_inline\":43,\"./rules_inline/image\":44,\"./rules_inline/link\":45,\"./rules_inline/newline\":46,\"./rules_inline/state_inline\":47,\"./rules_inline/strikethrough\":48,\"./rules_inline/text\":49,\"./rules_inline/text_collapse\":50}],13:[function(e,r,t){\"use strict\";r.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\"language-\",linkify:!1,typographer:!1,quotes:\"\\u201c\\u201d\\u2018\\u2019\",highlight:null,maxNesting:20},components:{core:{rules:[\"normalize\",\"block\",\"inline\"]},block:{rules:[\"blockquote\",\"code\",\"fence\",\"heading\",\"hr\",\"html_block\",\"lheading\",\"list\",\"reference\",\"paragraph\"]},inline:{rules:[\"autolink\",\"backticks\",\"emphasis\",\"entity\",\"escape\",\"html_inline\",\"image\",\"link\",\"newline\",\"text\"],rules2:[\"balance_pairs\",\"emphasis\",\"text_collapse\"]}}}},{}],14:[function(e,r,t){\"use strict\";r.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkify:!1,typographer:!1,quotes:\"\\u201c\\u201d\\u2018\\u2019\",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}},{}],15:[function(e,r,t){\"use strict\";r.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkify:!1,typographer:!1,quotes:\"\\u201c\\u201d\\u2018\\u2019\",highlight:null,maxNesting:20},components:{core:{rules:[\"normalize\",\"block\",\"inline\"]},block:{rules:[\"paragraph\"]},inline:{rules:[\"text\"],rules2:[\"balance_pairs\",\"text_collapse\"]}}}},{}],16:[function(e,r,t){\"use strict\";function n(){this.rules=s({},a)}var s=e(\"./common/utils\").assign,o=e(\"./common/utils\").unescapeAll,i=e(\"./common/utils\").escapeHtml,a={};a.code_inline=function(e,r,t,n,s){var o=e[r];return\"<code\"+s.renderAttrs(o)+\">\"+i(e[r].content)+\"</code>\"},a.code_block=function(e,r,t,n,s){var o=e[r];return\"<pre\"+s.renderAttrs(o)+\"><code>\"+i(e[r].content)+\"</code></pre>\\n\"},a.fence=function(e,r,t,n,s){var a,c,l,u,p=e[r],h=p.info?o(p.info).trim():\"\",f=\"\";return h&&(f=h.split(/\\s+/g)[0]),a=t.highlight?t.highlight(p.content,f)||i(p.content):i(p.content),0===a.indexOf(\"<pre\")?a+\"\\n\":h?(c=p.attrIndex(\"class\"),l=p.attrs?p.attrs.slice():[],c<0?l.push([\"class\",t.langPrefix+f]):l[c][1]+=\" \"+t.langPrefix+f,u={attrs:l},\"<pre><code\"+s.renderAttrs(u)+\">\"+a+\"</code></pre>\\n\"):\"<pre><code\"+s.renderAttrs(p)+\">\"+a+\"</code></pre>\\n\"},a.image=function(e,r,t,n,s){var o=e[r];return o.attrs[o.attrIndex(\"alt\")][1]=s.renderInlineAsText(o.children,t,n),s.renderToken(e,r,t)},a.hardbreak=function(e,r,t){return t.xhtmlOut?\"<br />\\n\":\"<br>\\n\"},a.softbreak=function(e,r,t){return t.breaks?t.xhtmlOut?\"<br />\\n\":\"<br>\\n\":\"\\n\"},a.text=function(e,r){return i(e[r].content)},a.html_block=function(e,r){return e[r].content},a.html_inline=function(e,r){return e[r].content},n.prototype.renderAttrs=function(e){var r,t,n;if(!e.attrs)return\"\";for(n=\"\",r=0,t=e.attrs.length;r<t;r++)n+=\" \"+i(e.attrs[r][0])+'=\"'+i(e.attrs[r][1])+'\"';return n},n.prototype.renderToken=function(e,r,t){var n,s=\"\",o=!1,i=e[r];return i.hidden?\"\":(i.block&&i.nesting!==-1&&r&&e[r-1].hidden&&(s+=\"\\n\"),s+=(i.nesting===-1?\"</\":\"<\")+i.tag,s+=this.renderAttrs(i),0===i.nesting&&t.xhtmlOut&&(s+=\" /\"),i.block&&(o=!0,1===i.nesting&&r+1<e.length&&(n=e[r+1],\"inline\"===n.type||n.hidden?o=!1:n.nesting===-1&&n.tag===i.tag&&(o=!1))),s+=o?\">\\n\":\">\")},n.prototype.renderInline=function(e,r,t){for(var n,s=\"\",o=this.rules,i=0,a=e.length;i<a;i++)n=e[i].type,s+=void 0!==o[n]?o[n](e,i,r,t,this):this.renderToken(e,i,r);return s},n.prototype.renderInlineAsText=function(e,r,t){for(var n=\"\",s=0,o=e.length;s<o;s++)\"text\"===e[s].type?n+=e[s].content:\"image\"===e[s].type&&(n+=this.renderInlineAsText(e[s].children,r,t));return n},n.prototype.render=function(e,r,t){var n,s,o,i=\"\",a=this.rules;for(n=0,s=e.length;n<s;n++)o=e[n].type,i+=\"inline\"===o?this.renderInline(e[n].children,r,t):void 0!==a[o]?a[e[n].type](e,n,r,t,this):this.renderToken(e,n,r,t);return i},r.exports=n},{\"./common/utils\":4}],17:[function(e,r,t){\"use strict\";function n(){this.__rules__=[],this.__cache__=null}n.prototype.__find__=function(e){for(var r=0;r<this.__rules__.length;r++)if(this.__rules__[r].name===e)return r;return-1},n.prototype.__compile__=function(){var e=this,r=[\"\"];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){r.indexOf(e)<0&&r.push(e)})}),e.__cache__={},r.forEach(function(r){e.__cache__[r]=[],e.__rules__.forEach(function(t){t.enabled&&(r&&t.alt.indexOf(r)<0||e.__cache__[r].push(t.fn))})})},n.prototype.at=function(e,r,t){var n=this.__find__(e),s=t||{};if(n===-1)throw new Error(\"Parser rule not found: \"+e);this.__rules__[n].fn=r,this.__rules__[n].alt=s.alt||[],this.__cache__=null},n.prototype.before=function(e,r,t,n){var s=this.__find__(e),o=n||{};if(s===-1)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(s,0,{name:r,enabled:!0,fn:t,alt:o.alt||[]}),this.__cache__=null},n.prototype.after=function(e,r,t,n){var s=this.__find__(e),o=n||{};if(s===-1)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(s+1,0,{name:r,enabled:!0,fn:t,alt:o.alt||[]}),this.__cache__=null},n.prototype.push=function(e,r,t){var n=t||{};this.__rules__.push({name:e,enabled:!0,fn:r,alt:n.alt||[]}),this.__cache__=null},n.prototype.enable=function(e,r){Array.isArray(e)||(e=[e]);var t=[];return e.forEach(function(e){var n=this.__find__(e);if(n<0){if(r)return;throw new Error(\"Rules manager: invalid rule name \"+e)}this.__rules__[n].enabled=!0,t.push(e)},this),this.__cache__=null,t},n.prototype.enableOnly=function(e,r){Array.isArray(e)||(e=[e]),this.__rules__.forEach(function(e){e.enabled=!1}),this.enable(e,r)},n.prototype.disable=function(e,r){Array.isArray(e)||(e=[e]);var t=[];return e.forEach(function(e){var n=this.__find__(e);if(n<0){if(r)return;throw new Error(\"Rules manager: invalid rule name \"+e)}this.__rules__[n].enabled=!1,t.push(e)},this),this.__cache__=null,t},n.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},r.exports=n},{}],18:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,s){var o,i,a,c,l,u,p,h,f,d,m,_,g,b,k,v,y,x,C,A,w=e.lineMax,D=e.bMarks[r]+e.tShift[r],q=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(62!==e.src.charCodeAt(D++))return!1;if(s)return!0;for(c=d=e.sCount[r]+D-(e.bMarks[r]+e.tShift[r]),32===e.src.charCodeAt(D)?(D++,c++,d++,o=!1,y=!0):9===e.src.charCodeAt(D)?(y=!0,(e.bsCount[r]+d)%4==3?(D++,c++,d++,o=!1):o=!0):y=!1,m=[e.bMarks[r]],e.bMarks[r]=D;D<q&&(i=e.src.charCodeAt(D),n(i));)9===i?d+=4-(d+e.bsCount[r]+(o?1:0))%4:d++,D++;for(_=[e.bsCount[r]],e.bsCount[r]=e.sCount[r]+1+(y?1:0),p=D>=q,k=[e.sCount[r]],e.sCount[r]=d-c,v=[e.tShift[r]],e.tShift[r]=D-e.bMarks[r],C=e.md.block.ruler.getRules(\"blockquote\"),b=e.parentType,e.parentType=\"blockquote\",f=r+1;f<t&&(l=e.sCount[f]<e.blkIndent,D=e.bMarks[f]+e.tShift[f],q=e.eMarks[f],!(D>=q));f++)if(62!==e.src.charCodeAt(D++)||l){if(p)break;for(x=!1,a=0,u=C.length;a<u;a++)if(C[a](e,f,t,!0)){x=!0;break}if(x){e.lineMax=f,0!==e.blkIndent&&(m.push(e.bMarks[f]),_.push(e.bsCount[f]),v.push(e.tShift[f]),k.push(e.sCount[f]),e.sCount[f]-=e.blkIndent);break}if(l)break;m.push(e.bMarks[f]),_.push(e.bsCount[f]),v.push(e.tShift[f]),k.push(e.sCount[f]),e.sCount[f]=-1}else{for(c=d=e.sCount[f]+D-(e.bMarks[f]+e.tShift[f]),32===e.src.charCodeAt(D)?(D++,c++,d++,o=!1,y=!0):9===e.src.charCodeAt(D)?(y=!0,(e.bsCount[f]+d)%4==3?(D++,c++,d++,o=!1):o=!0):y=!1,m.push(e.bMarks[f]),e.bMarks[f]=D;D<q&&(i=e.src.charCodeAt(D),n(i));)9===i?d+=4-(d+e.bsCount[f]+(o?1:0))%4:d++,D++;p=D>=q,_.push(e.bsCount[f]),e.bsCount[f]=e.sCount[f]+1+(y?1:0),k.push(e.sCount[f]),e.sCount[f]=d-c,v.push(e.tShift[f]),e.tShift[f]=D-e.bMarks[f]}for(g=e.blkIndent,e.blkIndent=0,A=e.push(\"blockquote_open\",\"blockquote\",1),A.markup=\">\",A.map=h=[r,0],e.md.block.tokenize(e,r,f),A=e.push(\"blockquote_close\",\"blockquote\",-1),A.markup=\">\",e.lineMax=w,e.parentType=b,h[1]=e.line,a=0;a<v.length;a++)e.bMarks[a+r]=m[a],e.tShift[a+r]=v[a],e.sCount[a+r]=k[a],e.bsCount[a+r]=_[a];return e.blkIndent=g,!0}},{\"../common/utils\":4}],19:[function(e,r,t){\"use strict\";r.exports=function(e,r,t){var n,s,o;if(e.sCount[r]-e.blkIndent<4)return!1;for(s=n=r+1;n<t;)if(e.isEmpty(n))n++;else{if(!(e.sCount[n]-e.blkIndent>=4))break;n++,s=n}return e.line=s,o=e.push(\"code_block\",\"code\",0),o.content=e.getLines(r,s,4+e.blkIndent,!0),o.map=[r,e.line],!0}},{}],20:[function(e,r,t){\"use strict\";r.exports=function(e,r,t,n){var s,o,i,a,c,l,u,p=!1,h=e.bMarks[r]+e.tShift[r],f=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(h+3>f)return!1;if(126!==(s=e.src.charCodeAt(h))&&96!==s)return!1;if(c=h,h=e.skipChars(h,s),(o=h-c)<3)return!1;if(u=e.src.slice(c,h),i=e.src.slice(h,f),i.indexOf(String.fromCharCode(s))>=0)return!1;if(n)return!0;for(a=r;!(++a>=t)&&(h=c=e.bMarks[a]+e.tShift[a],f=e.eMarks[a],!(h<f&&e.sCount[a]<e.blkIndent));)if(e.src.charCodeAt(h)===s&&!(e.sCount[a]-e.blkIndent>=4||(h=e.skipChars(h,s))-c<o||(h=e.skipSpaces(h))<f)){p=!0;break}return o=e.sCount[r],e.line=a+(p?1:0),l=e.push(\"fence\",\"code\",0),l.info=i,l.content=e.getLines(r+1,a,o,!0),l.markup=u,l.map=[r,e.line],!0}},{}],21:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,s){var o,i,a,c,l=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(35!==(o=e.src.charCodeAt(l))||l>=u)return!1;for(i=1,o=e.src.charCodeAt(++l);35===o&&l<u&&i<=6;)i++,o=e.src.charCodeAt(++l);return!(i>6||l<u&&!n(o))&&(!!s||(u=e.skipSpacesBack(u,l),a=e.skipCharsBack(u,35,l),a>l&&n(e.src.charCodeAt(a-1))&&(u=a),e.line=r+1,c=e.push(\"heading_open\",\"h\"+String(i),1),c.markup=\"########\".slice(0,i),c.map=[r,e.line],c=e.push(\"inline\",\"\",0),c.content=e.src.slice(l,u).trim(),c.map=[r,e.line],c.children=[],c=e.push(\"heading_close\",\"h\"+String(i),-1),c.markup=\"########\".slice(0,i),!0))}},{\"../common/utils\":4}],22:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,s){var o,i,a,c,l=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(42!==(o=e.src.charCodeAt(l++))&&45!==o&&95!==o)return!1;for(i=1;l<u;){if((a=e.src.charCodeAt(l++))!==o&&!n(a))return!1;a===o&&i++}return!(i<3)&&(!!s||(e.line=r+1,c=e.push(\"hr\",\"hr\",0),c.map=[r,e.line],c.markup=Array(i+1).join(String.fromCharCode(o)),!0))}},{\"../common/utils\":4}],23:[function(e,r,t){\"use strict\";var n=e(\"../common/html_blocks\"),s=e(\"../common/html_re\").HTML_OPEN_CLOSE_TAG_RE,o=[[/^<(script|pre|style)(?=(\\s|>|$))/i,/<\\/(script|pre|style)>/i,!0],[/^<!--/,/-->/,!0],[/^<\\?/,/\\?>/,!0],[/^<![A-Z]/,/>/,!0],[/^<!\\[CDATA\\[/,/\\]\\]>/,!0],[new RegExp(\"^</?(\"+n.join(\"|\")+\")(?=(\\\\s|/?>|$))\",\"i\"),/^$/,!0],[new RegExp(s.source+\"\\\\s*$\"),/^$/,!1]];r.exports=function(e,r,t,n){var s,i,a,c,l=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(l))return!1;for(c=e.src.slice(l,u),s=0;s<o.length&&!o[s][0].test(c);s++);if(s===o.length)return!1;if(n)return o[s][2];if(i=r+1,!o[s][1].test(c))for(;i<t&&!(e.sCount[i]<e.blkIndent);i++)if(l=e.bMarks[i]+e.tShift[i],u=e.eMarks[i],c=e.src.slice(l,u),o[s][1].test(c)){0!==c.length&&i++;break}return e.line=i,a=e.push(\"html_block\",\"\",0),a.map=[r,i],a.content=e.getLines(r,i,e.blkIndent,!0),!0}},{\"../common/html_blocks\":2,\"../common/html_re\":3}],24:[function(e,r,t){\"use strict\";r.exports=function(e,r,t){var n,s,o,i,a,c,l,u,p,h,f=r+1,d=e.md.block.ruler.getRules(\"paragraph\");if(e.sCount[r]-e.blkIndent>=4)return!1;for(h=e.parentType,e.parentType=\"paragraph\";f<t&&!e.isEmpty(f);f++)if(!(e.sCount[f]-e.blkIndent>3)){if(e.sCount[f]>=e.blkIndent&&(c=e.bMarks[f]+e.tShift[f],l=e.eMarks[f],c<l&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l))){u=61===p?1:2;break}if(!(e.sCount[f]<0)){for(s=!1,o=0,i=d.length;o<i;o++)if(d[o](e,f,t,!0)){s=!0;break}if(s)break}}return!!u&&(n=e.getLines(r,f,e.blkIndent,!1).trim(),e.line=f+1,a=e.push(\"heading_open\",\"h\"+String(u),1),a.markup=String.fromCharCode(p),a.map=[r,e.line],a=e.push(\"inline\",\"\",0),a.content=n,a.map=[r,e.line-1],a.children=[],a=e.push(\"heading_close\",\"h\"+String(u),-1),a.markup=String.fromCharCode(p),e.parentType=h,!0)}},{}],25:[function(e,r,t){\"use strict\";function n(e,r){var t,n,s,o;return n=e.bMarks[r]+e.tShift[r],s=e.eMarks[r],t=e.src.charCodeAt(n++),42!==t&&45!==t&&43!==t?-1:n<s&&(o=e.src.charCodeAt(n),!i(o))?-1:n}function s(e,r){var t,n=e.bMarks[r]+e.tShift[r],s=n,o=e.eMarks[r];if(s+1>=o)return-1;if((t=e.src.charCodeAt(s++))<48||t>57)return-1;for(;;){if(s>=o)return-1;t=e.src.charCodeAt(s++);{if(!(t>=48&&t<=57)){if(41===t||46===t)break;return-1}if(s-n>=10)return-1}}return s<o&&(t=e.src.charCodeAt(s),!i(t))?-1:s}function o(e,r){var t,n,s=e.level+2;for(t=r+2,n=e.tokens.length-2;t<n;t++)e.tokens[t].level===s&&\"paragraph_open\"===e.tokens[t].type&&(e.tokens[t+2].hidden=!0,e.tokens[t].hidden=!0,t+=2)}var i=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,a){var c,l,u,p,h,f,d,m,_,g,b,k,v,y,x,C,A,w,D,q,E,S,F,L,z,T,I,R,M=!1,B=!0;if(e.sCount[r]-e.blkIndent>=4)return!1;if(a&&\"paragraph\"===e.parentType&&e.tShift[r]>=e.blkIndent&&(M=!0),(F=s(e,r))>=0){if(d=!0,z=e.bMarks[r]+e.tShift[r],v=Number(e.src.substr(z,F-z-1)),M&&1!==v)return!1}else{if(!((F=n(e,r))>=0))return!1;d=!1}if(M&&e.skipSpaces(F)>=e.eMarks[r])return!1;if(k=e.src.charCodeAt(F-1),a)return!0;for(b=e.tokens.length,d?(R=e.push(\"ordered_list_open\",\"ol\",1),1!==v&&(R.attrs=[[\"start\",v]])):R=e.push(\"bullet_list_open\",\"ul\",1),R.map=g=[r,0],R.markup=String.fromCharCode(k),x=r,L=!1,I=e.md.block.ruler.getRules(\"list\"),D=e.parentType,e.parentType=\"list\";x<t;){for(S=F,y=e.eMarks[x],f=C=e.sCount[x]+F-(e.bMarks[r]+e.tShift[r]);S<y&&(c=e.src.charCodeAt(S),i(c));)9===c?C+=4-(C+e.bsCount[x])%4:C++,S++;if(l=S,h=l>=y?1:C-f,h>4&&(h=1),p=f+h,R=e.push(\"list_item_open\",\"li\",1),R.markup=String.fromCharCode(k),R.map=m=[r,0],A=e.blkIndent,E=e.tight,q=e.tShift[r],w=e.sCount[r],e.blkIndent=p,e.tight=!0,e.tShift[r]=l-e.bMarks[r],e.sCount[r]=C,l>=y&&e.isEmpty(r+1)?e.line=Math.min(e.line+2,t):e.md.block.tokenize(e,r,t,!0),e.tight&&!L||(B=!1),L=e.line-r>1&&e.isEmpty(e.line-1),e.blkIndent=A,e.tShift[r]=q,e.sCount[r]=w,e.tight=E,R=e.push(\"list_item_close\",\"li\",-1),R.markup=String.fromCharCode(k),x=r=e.line,m[1]=x,l=e.bMarks[r],x>=t)break;if(e.sCount[x]<e.blkIndent)break;for(T=!1,u=0,_=I.length;u<_;u++)if(I[u](e,x,t,!0)){T=!0;break}if(T)break;if(d){if((F=s(e,x))<0)break}else if((F=n(e,x))<0)break;if(k!==e.src.charCodeAt(F-1))break}return R=d?e.push(\"ordered_list_close\",\"ol\",-1):e.push(\"bullet_list_close\",\"ul\",-1),R.markup=String.fromCharCode(k),g[1]=x,e.line=x,e.parentType=D,B&&o(e,b),!0}},{\"../common/utils\":4}],26:[function(e,r,t){\"use strict\";r.exports=function(e,r){var t,n,s,o,i,a,c=r+1,l=e.md.block.ruler.getRules(\"paragraph\"),u=e.lineMax;for(a=e.parentType,e.parentType=\"paragraph\";c<u&&!e.isEmpty(c);c++)if(!(e.sCount[c]-e.blkIndent>3||e.sCount[c]<0)){for(n=!1,s=0,o=l.length;s<o;s++)if(l[s](e,c,u,!0)){n=!0;break}if(n)break}return t=e.getLines(r,c,e.blkIndent,!1).trim(),e.line=c,i=e.push(\"paragraph_open\",\"p\",1),i.map=[r,e.line],i=e.push(\"inline\",\"\",0),i.content=t,i.map=[r,e.line],i.children=[],i=e.push(\"paragraph_close\",\"p\",-1),e.parentType=a,!0}},{}],27:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").normalizeReference,s=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,o){var i,a,c,l,u,p,h,f,d,m,_,g,b,k,v,y,x=0,C=e.bMarks[r]+e.tShift[r],A=e.eMarks[r],w=r+1;if(e.sCount[r]-e.blkIndent>=4)return!1;if(91!==e.src.charCodeAt(C))return!1;for(;++C<A;)if(93===e.src.charCodeAt(C)&&92!==e.src.charCodeAt(C-1)){if(C+1===A)return!1;if(58!==e.src.charCodeAt(C+1))return!1;break}for(l=e.lineMax,v=e.md.block.ruler.getRules(\"reference\"),m=e.parentType,e.parentType=\"reference\";w<l&&!e.isEmpty(w);w++)if(!(e.sCount[w]-e.blkIndent>3||e.sCount[w]<0)){for(k=!1,p=0,h=v.length;p<h;p++)if(v[p](e,w,l,!0)){k=!0;break}if(k)break}for(b=e.getLines(r,w,e.blkIndent,!1).trim(),A=b.length,C=1;C<A;C++){if(91===(i=b.charCodeAt(C)))return!1;if(93===i){d=C;break}10===i?x++:92===i&&++C<A&&10===b.charCodeAt(C)&&x++}if(d<0||58!==b.charCodeAt(d+1))return!1;for(C=d+2;C<A;C++)if(10===(i=b.charCodeAt(C)))x++;else if(!s(i))break;if(_=e.md.helpers.parseLinkDestination(b,C,A),!_.ok)return!1;if(u=e.md.normalizeLink(_.str),!e.md.validateLink(u))return!1;for(C=_.pos,x+=_.lines,a=C,c=x,g=C;C<A;C++)if(10===(i=b.charCodeAt(C)))x++;else if(!s(i))break;for(_=e.md.helpers.parseLinkTitle(b,C,A),C<A&&g!==C&&_.ok?(y=_.str,C=_.pos,x+=_.lines):(y=\"\",C=a,x=c);C<A&&(i=b.charCodeAt(C),s(i));)C++;if(C<A&&10!==b.charCodeAt(C)&&y)for(y=\"\",C=a,x=c;C<A&&(i=b.charCodeAt(C),s(i));)C++;return!(C<A&&10!==b.charCodeAt(C))&&(!!(f=n(b.slice(1,d)))&&(!!o||(void 0===e.env.references&&(e.env.references={}),void 0===e.env.references[f]&&(e.env.references[f]={title:y,href:u}),e.parentType=m,e.line=r+x+1,!0)))}},{\"../common/utils\":4}],28:[function(e,r,t){\"use strict\";function n(e,r,t,n){var s,i,a,c,l,u,p,h;for(this.src=e,this.md=r,this.env=t,this.tokens=n,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.parentType=\"root\",this.level=0,this.result=\"\",i=this.src,h=!1,a=c=u=p=0,l=i.length;c<l;c++){if(s=i.charCodeAt(c),!h){if(o(s)){u++,9===s?p+=4-p%4:p++;continue}h=!0}10!==s&&c!==l-1||(10!==s&&c++,this.bMarks.push(a),this.eMarks.push(c),this.tShift.push(u),this.sCount.push(p),this.bsCount.push(0),h=!1,u=0,p=0,a=c+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.sCount.push(0),this.bsCount.push(0),this.lineMax=this.bMarks.length-1}var s=e(\"../token\"),o=e(\"../common/utils\").isSpace;n.prototype.push=function(e,r,t){var n=new s(e,r,t);return n.block=!0,t<0&&this.level--,n.level=this.level,t>0&&this.level++,this.tokens.push(n),n},n.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},n.prototype.skipEmptyLines=function(e){for(var r=this.lineMax;e<r&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},n.prototype.skipSpaces=function(e){for(var r,t=this.src.length;e<t&&(r=this.src.charCodeAt(e),o(r));e++);return e},n.prototype.skipSpacesBack=function(e,r){if(e<=r)return e;for(;e>r;)if(!o(this.src.charCodeAt(--e)))return e+1;return e},n.prototype.skipChars=function(e,r){for(var t=this.src.length;e<t&&this.src.charCodeAt(e)===r;e++);return e},n.prototype.skipCharsBack=function(e,r,t){if(e<=t)return e;for(;e>t;)if(r!==this.src.charCodeAt(--e))return e+1;return e},n.prototype.getLines=function(e,r,t,n){var s,i,a,c,l,u,p,h=e;if(e>=r)return\"\";for(u=new Array(r-e),s=0;h<r;h++,s++){for(i=0,p=c=this.bMarks[h],\nl=h+1<r||n?this.eMarks[h]+1:this.eMarks[h];c<l&&i<t;){if(a=this.src.charCodeAt(c),o(a))9===a?i+=4-(i+this.bsCount[h])%4:i++;else{if(!(c-p<this.tShift[h]))break;i++}c++}u[s]=i>t?new Array(i-t+1).join(\" \")+this.src.slice(c,l):this.src.slice(c,l)}return u.join(\"\")},n.prototype.Token=s,r.exports=n},{\"../common/utils\":4,\"../token\":51}],29:[function(e,r,t){\"use strict\";function n(e,r){var t=e.bMarks[r]+e.blkIndent,n=e.eMarks[r];return e.src.substr(t,n-t)}function s(e){var r,t=[],n=0,s=e.length,o=0,i=0,a=!1,c=0;for(r=e.charCodeAt(n);n<s;)96===r?a?(a=!1,c=n):o%2==0&&(a=!0,c=n):124!==r||o%2!=0||a||(t.push(e.substring(i,n)),i=n+1),92===r?o++:o=0,n++,n===s&&a&&(a=!1,n=c+1),r=e.charCodeAt(n);return t.push(e.substring(i)),t}var o=e(\"../common/utils\").isSpace;r.exports=function(e,r,t,i){var a,c,l,u,p,h,f,d,m,_,g,b;if(r+2>t)return!1;if(p=r+1,e.sCount[p]<e.blkIndent)return!1;if(e.sCount[p]-e.blkIndent>=4)return!1;if((l=e.bMarks[p]+e.tShift[p])>=e.eMarks[p])return!1;if(124!==(a=e.src.charCodeAt(l++))&&45!==a&&58!==a)return!1;for(;l<e.eMarks[p];){if(124!==(a=e.src.charCodeAt(l))&&45!==a&&58!==a&&!o(a))return!1;l++}for(c=n(e,r+1),h=c.split(\"|\"),m=[],u=0;u<h.length;u++){if(!(_=h[u].trim())){if(0===u||u===h.length-1)continue;return!1}if(!/^:?-+:?$/.test(_))return!1;58===_.charCodeAt(_.length-1)?m.push(58===_.charCodeAt(0)?\"center\":\"right\"):58===_.charCodeAt(0)?m.push(\"left\"):m.push(\"\")}if(c=n(e,r).trim(),c.indexOf(\"|\")===-1)return!1;if(e.sCount[r]-e.blkIndent>=4)return!1;if(h=s(c.replace(/^\\||\\|$/g,\"\")),(f=h.length)>m.length)return!1;if(i)return!0;for(d=e.push(\"table_open\",\"table\",1),d.map=g=[r,0],d=e.push(\"thead_open\",\"thead\",1),d.map=[r,r+1],d=e.push(\"tr_open\",\"tr\",1),d.map=[r,r+1],u=0;u<h.length;u++)d=e.push(\"th_open\",\"th\",1),d.map=[r,r+1],m[u]&&(d.attrs=[[\"style\",\"text-align:\"+m[u]]]),d=e.push(\"inline\",\"\",0),d.content=h[u].trim(),d.map=[r,r+1],d.children=[],d=e.push(\"th_close\",\"th\",-1);for(d=e.push(\"tr_close\",\"tr\",-1),d=e.push(\"thead_close\",\"thead\",-1),d=e.push(\"tbody_open\",\"tbody\",1),d.map=b=[r+2,0],p=r+2;p<t&&!(e.sCount[p]<e.blkIndent)&&(c=n(e,p).trim(),c.indexOf(\"|\")!==-1)&&!(e.sCount[p]-e.blkIndent>=4);p++){for(h=s(c.replace(/^\\||\\|$/g,\"\")),d=e.push(\"tr_open\",\"tr\",1),u=0;u<f;u++)d=e.push(\"td_open\",\"td\",1),m[u]&&(d.attrs=[[\"style\",\"text-align:\"+m[u]]]),d=e.push(\"inline\",\"\",0),d.content=h[u]?h[u].trim():\"\",d.children=[],d=e.push(\"td_close\",\"td\",-1);d=e.push(\"tr_close\",\"tr\",-1)}return d=e.push(\"tbody_close\",\"tbody\",-1),d=e.push(\"table_close\",\"table\",-1),g[1]=b[1]=p,e.line=p,!0}},{\"../common/utils\":4}],30:[function(e,r,t){\"use strict\";r.exports=function(e){var r;e.inlineMode?(r=new e.Token(\"inline\",\"\",0),r.content=e.src,r.map=[0,1],r.children=[],e.tokens.push(r)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}},{}],31:[function(e,r,t){\"use strict\";r.exports=function(e){var r,t,n,s=e.tokens;for(t=0,n=s.length;t<n;t++)r=s[t],\"inline\"===r.type&&e.md.inline.parse(r.content,e.md,e.env,r.children)}},{}],32:[function(e,r,t){\"use strict\";function n(e){return/^<a[>\\s]/i.test(e)}function s(e){return/^<\\/a\\s*>/i.test(e)}var o=e(\"../common/utils\").arrayReplaceAt;r.exports=function(e){var r,t,i,a,c,l,u,p,h,f,d,m,_,g,b,k,v,y=e.tokens;if(e.md.options.linkify)for(t=0,i=y.length;t<i;t++)if(\"inline\"===y[t].type&&e.md.linkify.pretest(y[t].content))for(a=y[t].children,_=0,r=a.length-1;r>=0;r--)if(l=a[r],\"link_close\"!==l.type){if(\"html_inline\"===l.type&&(n(l.content)&&_>0&&_--,s(l.content)&&_++),!(_>0)&&\"text\"===l.type&&e.md.linkify.test(l.content)){for(h=l.content,v=e.md.linkify.match(h),u=[],m=l.level,d=0,p=0;p<v.length;p++)g=v[p].url,b=e.md.normalizeLink(g),e.md.validateLink(b)&&(k=v[p].text,k=v[p].schema?\"mailto:\"!==v[p].schema||/^mailto:/i.test(k)?e.md.normalizeLinkText(k):e.md.normalizeLinkText(\"mailto:\"+k).replace(/^mailto:/,\"\"):e.md.normalizeLinkText(\"http://\"+k).replace(/^http:\\/\\//,\"\"),f=v[p].index,f>d&&(c=new e.Token(\"text\",\"\",0),c.content=h.slice(d,f),c.level=m,u.push(c)),c=new e.Token(\"link_open\",\"a\",1),c.attrs=[[\"href\",b]],c.level=m++,c.markup=\"linkify\",c.info=\"auto\",u.push(c),c=new e.Token(\"text\",\"\",0),c.content=k,c.level=m,u.push(c),c=new e.Token(\"link_close\",\"a\",-1),c.level=--m,c.markup=\"linkify\",c.info=\"auto\",u.push(c),d=v[p].lastIndex);d<h.length&&(c=new e.Token(\"text\",\"\",0),c.content=h.slice(d),c.level=m,u.push(c)),y[t].children=a=o(a,r,u)}}else for(r--;a[r].level!==l.level&&\"link_open\"!==a[r].type;)r--}},{\"../common/utils\":4}],33:[function(e,r,t){\"use strict\";r.exports=function(e){var r;r=e.src.replace(/\\r[\\n\\u0085]?|[\\u2424\\u2028\\u0085]/g,\"\\n\"),r=r.replace(/\\u0000/g,\"\\ufffd\"),e.src=r}},{}],34:[function(e,r,t){\"use strict\";function n(e,r){return c[r.toLowerCase()]}function s(e){var r,t,s=0;for(r=e.length-1;r>=0;r--)t=e[r],\"text\"!==t.type||s||(t.content=t.content.replace(/\\((c|tm|r|p)\\)/gi,n)),\"link_open\"===t.type&&\"auto\"===t.info&&s--,\"link_close\"===t.type&&\"auto\"===t.info&&s++}function o(e){var r,t,n=0;for(r=e.length-1;r>=0;r--)t=e[r],\"text\"!==t.type||n||i.test(t.content)&&(t.content=t.content.replace(/\\+-/g,\"\\xb1\").replace(/\\.{2,}/g,\"\\u2026\").replace(/([?!])\\u2026/g,\"$1..\").replace(/([?!]){4,}/g,\"$1$1$1\").replace(/,{2,}/g,\",\").replace(/(^|[^-])---([^-]|$)/gm,\"$1\\u2014$2\").replace(/(^|\\s)--(\\s|$)/gm,\"$1\\u2013$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/gm,\"$1\\u2013$2\")),\"link_open\"===t.type&&\"auto\"===t.info&&n--,\"link_close\"===t.type&&\"auto\"===t.info&&n++}var i=/\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/,a=/\\((c|tm|r|p)\\)/i,c={c:\"\\xa9\",r:\"\\xae\",p:\"\\xa7\",tm:\"\\u2122\"};r.exports=function(e){var r;if(e.md.options.typographer)for(r=e.tokens.length-1;r>=0;r--)\"inline\"===e.tokens[r].type&&(a.test(e.tokens[r].content)&&s(e.tokens[r].children),i.test(e.tokens[r].content)&&o(e.tokens[r].children))}},{}],35:[function(e,r,t){\"use strict\";function n(e,r,t){return e.substr(0,r)+t+e.substr(r+1)}function s(e,r){var t,s,c,u,p,h,f,d,m,_,g,b,k,v,y,x,C,A,w,D,q;for(w=[],t=0;t<e.length;t++){for(s=e[t],f=e[t].level,C=w.length-1;C>=0&&!(w[C].level<=f);C--);if(w.length=C+1,\"text\"===s.type){c=s.content,p=0,h=c.length;e:for(;p<h&&(l.lastIndex=p,u=l.exec(c));){if(y=x=!0,p=u.index+1,A=\"'\"===u[0],m=32,u.index-1>=0)m=c.charCodeAt(u.index-1);else for(C=t-1;C>=0;C--)if(\"text\"===e[C].type){m=e[C].content.charCodeAt(e[C].content.length-1);break}if(_=32,p<h)_=c.charCodeAt(p);else for(C=t+1;C<e.length;C++)if(\"text\"===e[C].type){_=e[C].content.charCodeAt(0);break}if(g=a(m)||i(String.fromCharCode(m)),b=a(_)||i(String.fromCharCode(_)),k=o(m),v=o(_),v?y=!1:b&&(k||g||(y=!1)),k?x=!1:g&&(v||b||(x=!1)),34===_&&'\"'===u[0]&&m>=48&&m<=57&&(x=y=!1),y&&x&&(y=!1,x=b),y||x){if(x)for(C=w.length-1;C>=0&&(d=w[C],!(w[C].level<f));C--)if(d.single===A&&w[C].level===f){d=w[C],A?(D=r.md.options.quotes[2],q=r.md.options.quotes[3]):(D=r.md.options.quotes[0],q=r.md.options.quotes[1]),s.content=n(s.content,u.index,q),e[d.token].content=n(e[d.token].content,d.pos,D),p+=q.length-1,d.token===t&&(p+=D.length-1),c=s.content,h=c.length,w.length=C;continue e}y?w.push({token:t,pos:u.index,single:A,level:f}):x&&A&&(s.content=n(s.content,u.index,\"\\u2019\"))}else A&&(s.content=n(s.content,u.index,\"\\u2019\"))}}}}var o=e(\"../common/utils\").isWhiteSpace,i=e(\"../common/utils\").isPunctChar,a=e(\"../common/utils\").isMdAsciiPunct,c=/['\"]/,l=/['\"]/g;r.exports=function(e){var r;if(e.md.options.typographer)for(r=e.tokens.length-1;r>=0;r--)\"inline\"===e.tokens[r].type&&c.test(e.tokens[r].content)&&s(e.tokens[r].children,e)}},{\"../common/utils\":4}],36:[function(e,r,t){\"use strict\";function n(e,r,t){this.src=e,this.env=t,this.tokens=[],this.inlineMode=!1,this.md=r}var s=e(\"../token\");n.prototype.Token=s,r.exports=n},{\"../token\":51}],37:[function(e,r,t){\"use strict\";var n=/^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,s=/^<([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)>/;r.exports=function(e,r){var t,o,i,a,c,l,u=e.pos;return 60===e.src.charCodeAt(u)&&(t=e.src.slice(u),!(t.indexOf(\">\")<0)&&(s.test(t)?(o=t.match(s),a=o[0].slice(1,-1),c=e.md.normalizeLink(a),!!e.md.validateLink(c)&&(r||(l=e.push(\"link_open\",\"a\",1),l.attrs=[[\"href\",c]],l.markup=\"autolink\",l.info=\"auto\",l=e.push(\"text\",\"\",0),l.content=e.md.normalizeLinkText(a),l=e.push(\"link_close\",\"a\",-1),l.markup=\"autolink\",l.info=\"auto\"),e.pos+=o[0].length,!0)):!!n.test(t)&&(i=t.match(n),a=i[0].slice(1,-1),c=e.md.normalizeLink(\"mailto:\"+a),!!e.md.validateLink(c)&&(r||(l=e.push(\"link_open\",\"a\",1),l.attrs=[[\"href\",c]],l.markup=\"autolink\",l.info=\"auto\",l=e.push(\"text\",\"\",0),l.content=e.md.normalizeLinkText(a),l=e.push(\"link_close\",\"a\",-1),l.markup=\"autolink\",l.info=\"auto\"),e.pos+=i[0].length,!0))))}},{}],38:[function(e,r,t){\"use strict\";r.exports=function(e,r){var t,n,s,o,i,a,c=e.pos;if(96!==e.src.charCodeAt(c))return!1;for(t=c,c++,n=e.posMax;c<n&&96===e.src.charCodeAt(c);)c++;for(s=e.src.slice(t,c),o=i=c;(o=e.src.indexOf(\"`\",i))!==-1;){for(i=o+1;i<n&&96===e.src.charCodeAt(i);)i++;if(i-o===s.length)return r||(a=e.push(\"code_inline\",\"code\",0),a.markup=s,a.content=e.src.slice(c,o).replace(/[ \\n]+/g,\" \").trim()),e.pos=i,!0}return r||(e.pending+=s),e.pos+=s.length,!0}},{}],39:[function(e,r,t){\"use strict\";r.exports=function(e){var r,t,n,s,o=e.delimiters,i=e.delimiters.length;for(r=0;r<i;r++)if(n=o[r],n.close)for(t=r-n.jump-1;t>=0;){if(s=o[t],s.open&&s.marker===n.marker&&s.end<0&&s.level===n.level){var a=(s.close||n.open)&&void 0!==s.length&&void 0!==n.length&&(s.length+n.length)%3==0;if(!a){n.jump=r-t,n.open=!1,s.end=r,s.jump=0;break}}t-=s.jump+1}}},{}],40:[function(e,r,t){\"use strict\";r.exports.tokenize=function(e,r){var t,n,s,o=e.pos,i=e.src.charCodeAt(o);if(r)return!1;if(95!==i&&42!==i)return!1;for(n=e.scanDelims(e.pos,42===i),t=0;t<n.length;t++)s=e.push(\"text\",\"\",0),s.content=String.fromCharCode(i),e.delimiters.push({marker:i,length:n.length,jump:t,token:e.tokens.length-1,level:e.level,end:-1,open:n.can_open,close:n.can_close});return e.pos+=n.length,!0},r.exports.postProcess=function(e){var r,t,n,s,o,i,a=e.delimiters,c=e.delimiters.length;for(r=0;r<c;r++)t=a[r],95!==t.marker&&42!==t.marker||t.end!==-1&&(n=a[t.end],i=r+1<c&&a[r+1].end===t.end-1&&a[r+1].token===t.token+1&&a[t.end-1].token===n.token-1&&a[r+1].marker===t.marker,o=String.fromCharCode(t.marker),s=e.tokens[t.token],s.type=i?\"strong_open\":\"em_open\",s.tag=i?\"strong\":\"em\",s.nesting=1,s.markup=i?o+o:o,s.content=\"\",s=e.tokens[n.token],s.type=i?\"strong_close\":\"em_close\",s.tag=i?\"strong\":\"em\",s.nesting=-1,s.markup=i?o+o:o,s.content=\"\",i&&(e.tokens[a[r+1].token].content=\"\",e.tokens[a[t.end-1].token].content=\"\",r++))}},{}],41:[function(e,r,t){\"use strict\";var n=e(\"../common/entities\"),s=e(\"../common/utils\").has,o=e(\"../common/utils\").isValidEntityCode,i=e(\"../common/utils\").fromCodePoint;r.exports=function(e,r){var t,a,c=e.pos,l=e.posMax;if(38!==e.src.charCodeAt(c))return!1;if(c+1<l)if(35===e.src.charCodeAt(c+1)){if(a=e.src.slice(c).match(/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i))return r||(t=\"x\"===a[1][0].toLowerCase()?parseInt(a[1].slice(1),16):parseInt(a[1],10),e.pending+=i(o(t)?t:65533)),e.pos+=a[0].length,!0}else if((a=e.src.slice(c).match(/^&([a-z][a-z0-9]{1,31});/i))&&s(n,a[1]))return r||(e.pending+=n[a[1]]),e.pos+=a[0].length,!0;return r||(e.pending+=\"&\"),e.pos++,!0}},{\"../common/entities\":1,\"../common/utils\":4}],42:[function(e,r,t){\"use strict\";for(var n=e(\"../common/utils\").isSpace,s=[],o=0;o<256;o++)s.push(0);\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(e){s[e.charCodeAt(0)]=1}),r.exports=function(e,r){var t,o=e.pos,i=e.posMax;if(92!==e.src.charCodeAt(o))return!1;if(++o<i){if((t=e.src.charCodeAt(o))<256&&0!==s[t])return r||(e.pending+=e.src[o]),e.pos+=2,!0;if(10===t){for(r||e.push(\"hardbreak\",\"br\",0),o++;o<i&&(t=e.src.charCodeAt(o),n(t));)o++;return e.pos=o,!0}}return r||(e.pending+=\"\\\\\"),e.pos++,!0}},{\"../common/utils\":4}],43:[function(e,r,t){\"use strict\";function n(e){var r=32|e;return r>=97&&r<=122}var s=e(\"../common/html_re\").HTML_TAG_RE;r.exports=function(e,r){var t,o,i,a,c=e.pos;return!!e.md.options.html&&(i=e.posMax,!(60!==e.src.charCodeAt(c)||c+2>=i)&&(!(33!==(t=e.src.charCodeAt(c+1))&&63!==t&&47!==t&&!n(t))&&(!!(o=e.src.slice(c).match(s))&&(r||(a=e.push(\"html_inline\",\"\",0),a.content=e.src.slice(c,c+o[0].length)),e.pos+=o[0].length,!0))))}},{\"../common/html_re\":3}],44:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").normalizeReference,s=e(\"../common/utils\").isSpace;r.exports=function(e,r){var t,o,i,a,c,l,u,p,h,f,d,m,_,g=\"\",b=e.pos,k=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(c=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((u=c+1)<k&&40===e.src.charCodeAt(u)){for(u++;u<k&&(o=e.src.charCodeAt(u),s(o)||10===o);u++);if(u>=k)return!1;for(_=u,h=e.md.helpers.parseLinkDestination(e.src,u,e.posMax),h.ok&&(g=e.md.normalizeLink(h.str),e.md.validateLink(g)?u=h.pos:g=\"\"),_=u;u<k&&(o=e.src.charCodeAt(u),s(o)||10===o);u++);if(h=e.md.helpers.parseLinkTitle(e.src,u,e.posMax),u<k&&_!==u&&h.ok)for(f=h.str,u=h.pos;u<k&&(o=e.src.charCodeAt(u),s(o)||10===o);u++);else f=\"\";if(u>=k||41!==e.src.charCodeAt(u))return e.pos=b,!1;u++}else{if(void 0===e.env.references)return!1;if(u<k&&91===e.src.charCodeAt(u)?(_=u+1,u=e.md.helpers.parseLinkLabel(e,u),u>=0?a=e.src.slice(_,u++):u=c+1):u=c+1,a||(a=e.src.slice(l,c)),!(p=e.env.references[n(a)]))return e.pos=b,!1;g=p.href,f=p.title}return r||(i=e.src.slice(l,c),e.md.inline.parse(i,e.md,e.env,m=[]),d=e.push(\"image\",\"img\",0),d.attrs=t=[[\"src\",g],[\"alt\",\"\"]],d.children=m,d.content=i,f&&t.push([\"title\",f])),e.pos=u,e.posMax=k,!0}},{\"../common/utils\":4}],45:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").normalizeReference,s=e(\"../common/utils\").isSpace;r.exports=function(e,r){var t,o,i,a,c,l,u,p,h,f,d=\"\",m=e.pos,_=e.posMax,g=e.pos,b=!0;if(91!==e.src.charCodeAt(e.pos))return!1;if(c=e.pos+1,(a=e.md.helpers.parseLinkLabel(e,e.pos,!0))<0)return!1;if((l=a+1)<_&&40===e.src.charCodeAt(l)){for(b=!1,l++;l<_&&(o=e.src.charCodeAt(l),s(o)||10===o);l++);if(l>=_)return!1;for(g=l,u=e.md.helpers.parseLinkDestination(e.src,l,e.posMax),u.ok&&(d=e.md.normalizeLink(u.str),e.md.validateLink(d)?l=u.pos:d=\"\"),g=l;l<_&&(o=e.src.charCodeAt(l),s(o)||10===o);l++);if(u=e.md.helpers.parseLinkTitle(e.src,l,e.posMax),l<_&&g!==l&&u.ok)for(h=u.str,l=u.pos;l<_&&(o=e.src.charCodeAt(l),s(o)||10===o);l++);else h=\"\";(l>=_||41!==e.src.charCodeAt(l))&&(b=!0),l++}if(b){if(void 0===e.env.references)return!1;if(l<_&&91===e.src.charCodeAt(l)?(g=l+1,l=e.md.helpers.parseLinkLabel(e,l),l>=0?i=e.src.slice(g,l++):l=a+1):l=a+1,i||(i=e.src.slice(c,a)),!(p=e.env.references[n(i)]))return e.pos=m,!1;d=p.href,h=p.title}return r||(e.pos=c,e.posMax=a,f=e.push(\"link_open\",\"a\",1),f.attrs=t=[[\"href\",d]],h&&t.push([\"title\",h]),e.md.inline.tokenize(e),f=e.push(\"link_close\",\"a\",-1)),e.pos=l,e.posMax=_,!0}},{\"../common/utils\":4}],46:[function(e,r,t){\"use strict\";var n=e(\"../common/utils\").isSpace;r.exports=function(e,r){var t,s,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;for(t=e.pending.length-1,s=e.posMax,r||(t>=0&&32===e.pending.charCodeAt(t)?t>=1&&32===e.pending.charCodeAt(t-1)?(e.pending=e.pending.replace(/ +$/,\"\"),e.push(\"hardbreak\",\"br\",0)):(e.pending=e.pending.slice(0,-1),e.push(\"softbreak\",\"br\",0)):e.push(\"softbreak\",\"br\",0)),o++;o<s&&n(e.src.charCodeAt(o));)o++;return e.pos=o,!0}},{\"../common/utils\":4}],47:[function(e,r,t){\"use strict\";function n(e,r,t,n){this.src=e,this.env=t,this.md=r,this.tokens=n,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\"\",this.pendingLevel=0,this.cache={},this.delimiters=[]}var s=e(\"../token\"),o=e(\"../common/utils\").isWhiteSpace,i=e(\"../common/utils\").isPunctChar,a=e(\"../common/utils\").isMdAsciiPunct;n.prototype.pushPending=function(){var e=new s(\"text\",\"\",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending=\"\",e},n.prototype.push=function(e,r,t){this.pending&&this.pushPending();var n=new s(e,r,t);return t<0&&this.level--,n.level=this.level,t>0&&this.level++,this.pendingLevel=this.level,this.tokens.push(n),n},n.prototype.scanDelims=function(e,r){var t,n,s,c,l,u,p,h,f,d=e,m=!0,_=!0,g=this.posMax,b=this.src.charCodeAt(e);for(t=e>0?this.src.charCodeAt(e-1):32;d<g&&this.src.charCodeAt(d)===b;)d++;return s=d-e,n=d<g?this.src.charCodeAt(d):32,p=a(t)||i(String.fromCharCode(t)),f=a(n)||i(String.fromCharCode(n)),u=o(t),h=o(n),h?m=!1:f&&(u||p||(m=!1)),u?_=!1:p&&(h||f||(_=!1)),r?(c=m,l=_):(c=m&&(!_||p),l=_&&(!m||f)),{can_open:c,can_close:l,length:s}},n.prototype.Token=s,r.exports=n},{\"../common/utils\":4,\"../token\":51}],48:[function(e,r,t){\"use strict\";r.exports.tokenize=function(e,r){var t,n,s,o,i,a=e.pos,c=e.src.charCodeAt(a);if(r)return!1;if(126!==c)return!1;if(n=e.scanDelims(e.pos,!0),o=n.length,i=String.fromCharCode(c),o<2)return!1;for(o%2&&(s=e.push(\"text\",\"\",0),s.content=i,o--),t=0;t<o;t+=2)s=e.push(\"text\",\"\",0),s.content=i+i,e.delimiters.push({marker:c,jump:t,token:e.tokens.length-1,level:e.level,end:-1,open:n.can_open,close:n.can_close});return e.pos+=n.length,!0},r.exports.postProcess=function(e){var r,t,n,s,o,i=[],a=e.delimiters,c=e.delimiters.length;for(r=0;r<c;r++)n=a[r],126===n.marker&&n.end!==-1&&(s=a[n.end],o=e.tokens[n.token],o.type=\"s_open\",o.tag=\"s\",o.nesting=1,o.markup=\"~~\",o.content=\"\",o=e.tokens[s.token],o.type=\"s_close\",o.tag=\"s\",o.nesting=-1,o.markup=\"~~\",o.content=\"\",\"text\"===e.tokens[s.token-1].type&&\"~\"===e.tokens[s.token-1].content&&i.push(s.token-1));for(;i.length;){for(r=i.pop(),t=r+1;t<e.tokens.length&&\"s_close\"===e.tokens[t].type;)t++;t--,r!==t&&(o=e.tokens[t],e.tokens[t]=e.tokens[r],e.tokens[r]=o)}}},{}],49:[function(e,r,t){\"use strict\";function n(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}r.exports=function(e,r){for(var t=e.pos;t<e.posMax&&!n(e.src.charCodeAt(t));)t++;return t!==e.pos&&(r||(e.pending+=e.src.slice(e.pos,t)),e.pos=t,!0)}},{}],50:[function(e,r,t){\"use strict\";r.exports=function(e){var r,t,n=0,s=e.tokens,o=e.tokens.length;for(r=t=0;r<o;r++)n+=s[r].nesting,s[r].level=n,\"text\"===s[r].type&&r+1<o&&\"text\"===s[r+1].type?s[r+1].content=s[r].content+s[r+1].content:(r!==t&&(s[t]=s[r]),t++);r!==t&&(s.length=t)}},{}],51:[function(e,r,t){\"use strict\";function n(e,r,t){this.type=e,this.tag=r,this.attrs=null,this.map=null,this.nesting=t,this.level=0,this.children=null,this.content=\"\",this.markup=\"\",this.info=\"\",this.meta=null,this.block=!1,this.hidden=!1}n.prototype.attrIndex=function(e){var r,t,n;if(!this.attrs)return-1;for(r=this.attrs,t=0,n=r.length;t<n;t++)if(r[t][0]===e)return t;return-1},n.prototype.attrPush=function(e){this.attrs?this.attrs.push(e):this.attrs=[e]},n.prototype.attrSet=function(e,r){var t=this.attrIndex(e),n=[e,r];t<0?this.attrPush(n):this.attrs[t]=n},n.prototype.attrGet=function(e){var r=this.attrIndex(e),t=null;return r>=0&&(t=this.attrs[r][1]),t},n.prototype.attrJoin=function(e,r){var t=this.attrIndex(e);t<0?this.attrPush([e,r]):this.attrs[t][1]=this.attrs[t][1]+\" \"+r},r.exports=n},{}],52:[function(e,r,t){r.exports={Aacute:\"\\xc1\",aacute:\"\\xe1\",Abreve:\"\\u0102\",abreve:\"\\u0103\",ac:\"\\u223e\",acd:\"\\u223f\",acE:\"\\u223e\\u0333\",Acirc:\"\\xc2\",acirc:\"\\xe2\",acute:\"\\xb4\",Acy:\"\\u0410\",acy:\"\\u0430\",AElig:\"\\xc6\",aelig:\"\\xe6\",af:\"\\u2061\",Afr:\"\\ud835\\udd04\",afr:\"\\ud835\\udd1e\",Agrave:\"\\xc0\",agrave:\"\\xe0\",alefsym:\"\\u2135\",aleph:\"\\u2135\",Alpha:\"\\u0391\",alpha:\"\\u03b1\",Amacr:\"\\u0100\",amacr:\"\\u0101\",amalg:\"\\u2a3f\",amp:\"&\",AMP:\"&\",andand:\"\\u2a55\",And:\"\\u2a53\",and:\"\\u2227\",andd:\"\\u2a5c\",andslope:\"\\u2a58\",andv:\"\\u2a5a\",ang:\"\\u2220\",ange:\"\\u29a4\",angle:\"\\u2220\",angmsdaa:\"\\u29a8\",angmsdab:\"\\u29a9\",angmsdac:\"\\u29aa\",angmsdad:\"\\u29ab\",angmsdae:\"\\u29ac\",angmsdaf:\"\\u29ad\",angmsdag:\"\\u29ae\",angmsdah:\"\\u29af\",angmsd:\"\\u2221\",angrt:\"\\u221f\",angrtvb:\"\\u22be\",angrtvbd:\"\\u299d\",angsph:\"\\u2222\",angst:\"\\xc5\",angzarr:\"\\u237c\",Aogon:\"\\u0104\",aogon:\"\\u0105\",Aopf:\"\\ud835\\udd38\",aopf:\"\\ud835\\udd52\",apacir:\"\\u2a6f\",ap:\"\\u2248\",apE:\"\\u2a70\",ape:\"\\u224a\",apid:\"\\u224b\",apos:\"'\",ApplyFunction:\"\\u2061\",approx:\"\\u2248\",approxeq:\"\\u224a\",Aring:\"\\xc5\",aring:\"\\xe5\",Ascr:\"\\ud835\\udc9c\",ascr:\"\\ud835\\udcb6\",Assign:\"\\u2254\",ast:\"*\",asymp:\"\\u2248\",asympeq:\"\\u224d\",Atilde:\"\\xc3\",atilde:\"\\xe3\",Auml:\"\\xc4\",auml:\"\\xe4\",awconint:\"\\u2233\",awint:\"\\u2a11\",backcong:\"\\u224c\",backepsilon:\"\\u03f6\",backprime:\"\\u2035\",backsim:\"\\u223d\",backsimeq:\"\\u22cd\",Backslash:\"\\u2216\",Barv:\"\\u2ae7\",barvee:\"\\u22bd\",barwed:\"\\u2305\",Barwed:\"\\u2306\",barwedge:\"\\u2305\",bbrk:\"\\u23b5\",bbrktbrk:\"\\u23b6\",bcong:\"\\u224c\",Bcy:\"\\u0411\",bcy:\"\\u0431\",bdquo:\"\\u201e\",becaus:\"\\u2235\",because:\"\\u2235\",Because:\"\\u2235\",bemptyv:\"\\u29b0\",bepsi:\"\\u03f6\",bernou:\"\\u212c\",Bernoullis:\"\\u212c\",Beta:\"\\u0392\",beta:\"\\u03b2\",beth:\"\\u2136\",between:\"\\u226c\",Bfr:\"\\ud835\\udd05\",bfr:\"\\ud835\\udd1f\",bigcap:\"\\u22c2\",bigcirc:\"\\u25ef\",bigcup:\"\\u22c3\",bigodot:\"\\u2a00\",bigoplus:\"\\u2a01\",bigotimes:\"\\u2a02\",bigsqcup:\"\\u2a06\",bigstar:\"\\u2605\",bigtriangledown:\"\\u25bd\",bigtriangleup:\"\\u25b3\",biguplus:\"\\u2a04\",bigvee:\"\\u22c1\",bigwedge:\"\\u22c0\",bkarow:\"\\u290d\",blacklozenge:\"\\u29eb\",blacksquare:\"\\u25aa\",blacktriangle:\"\\u25b4\",blacktriangledown:\"\\u25be\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",blank:\"\\u2423\",blk12:\"\\u2592\",blk14:\"\\u2591\",blk34:\"\\u2593\",block:\"\\u2588\",bne:\"=\\u20e5\",bnequiv:\"\\u2261\\u20e5\",bNot:\"\\u2aed\",bnot:\"\\u2310\",Bopf:\"\\ud835\\udd39\",bopf:\"\\ud835\\udd53\",bot:\"\\u22a5\",bottom:\"\\u22a5\",bowtie:\"\\u22c8\",boxbox:\"\\u29c9\",boxdl:\"\\u2510\",boxdL:\"\\u2555\",boxDl:\"\\u2556\",boxDL:\"\\u2557\",boxdr:\"\\u250c\",boxdR:\"\\u2552\",boxDr:\"\\u2553\",boxDR:\"\\u2554\",boxh:\"\\u2500\",boxH:\"\\u2550\",boxhd:\"\\u252c\",boxHd:\"\\u2564\",boxhD:\"\\u2565\",boxHD:\"\\u2566\",boxhu:\"\\u2534\",boxHu:\"\\u2567\",boxhU:\"\\u2568\",boxHU:\"\\u2569\",boxminus:\"\\u229f\",boxplus:\"\\u229e\",boxtimes:\"\\u22a0\",boxul:\"\\u2518\",boxuL:\"\\u255b\",boxUl:\"\\u255c\",boxUL:\"\\u255d\",boxur:\"\\u2514\",boxuR:\"\\u2558\",boxUr:\"\\u2559\",boxUR:\"\\u255a\",boxv:\"\\u2502\",boxV:\"\\u2551\",boxvh:\"\\u253c\",boxvH:\"\\u256a\",boxVh:\"\\u256b\",boxVH:\"\\u256c\",boxvl:\"\\u2524\",boxvL:\"\\u2561\",boxVl:\"\\u2562\",boxVL:\"\\u2563\",boxvr:\"\\u251c\",boxvR:\"\\u255e\",boxVr:\"\\u255f\",boxVR:\"\\u2560\",bprime:\"\\u2035\",breve:\"\\u02d8\",Breve:\"\\u02d8\",brvbar:\"\\xa6\",bscr:\"\\ud835\\udcb7\",Bscr:\"\\u212c\",bsemi:\"\\u204f\",bsim:\"\\u223d\",bsime:\"\\u22cd\",bsolb:\"\\u29c5\",bsol:\"\\\\\",bsolhsub:\"\\u27c8\",bull:\"\\u2022\",bullet:\"\\u2022\",bump:\"\\u224e\",bumpE:\"\\u2aae\",bumpe:\"\\u224f\",Bumpeq:\"\\u224e\",bumpeq:\"\\u224f\",Cacute:\"\\u0106\",cacute:\"\\u0107\",capand:\"\\u2a44\",capbrcup:\"\\u2a49\",capcap:\"\\u2a4b\",cap:\"\\u2229\",Cap:\"\\u22d2\",capcup:\"\\u2a47\",capdot:\"\\u2a40\",CapitalDifferentialD:\"\\u2145\",caps:\"\\u2229\\ufe00\",caret:\"\\u2041\",caron:\"\\u02c7\",Cayleys:\"\\u212d\",ccaps:\"\\u2a4d\",Ccaron:\"\\u010c\",ccaron:\"\\u010d\",Ccedil:\"\\xc7\",ccedil:\"\\xe7\",Ccirc:\"\\u0108\",ccirc:\"\\u0109\",Cconint:\"\\u2230\",ccups:\"\\u2a4c\",ccupssm:\"\\u2a50\",Cdot:\"\\u010a\",cdot:\"\\u010b\",cedil:\"\\xb8\",Cedilla:\"\\xb8\",cemptyv:\"\\u29b2\",cent:\"\\xa2\",centerdot:\"\\xb7\",CenterDot:\"\\xb7\",cfr:\"\\ud835\\udd20\",Cfr:\"\\u212d\",CHcy:\"\\u0427\",chcy:\"\\u0447\",check:\"\\u2713\",checkmark:\"\\u2713\",Chi:\"\\u03a7\",chi:\"\\u03c7\",circ:\"\\u02c6\",circeq:\"\\u2257\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",circledast:\"\\u229b\",circledcirc:\"\\u229a\",circleddash:\"\\u229d\",CircleDot:\"\\u2299\",circledR:\"\\xae\",circledS:\"\\u24c8\",CircleMinus:\"\\u2296\",CirclePlus:\"\\u2295\",CircleTimes:\"\\u2297\",cir:\"\\u25cb\",cirE:\"\\u29c3\",cire:\"\\u2257\",cirfnint:\"\\u2a10\",cirmid:\"\\u2aef\",cirscir:\"\\u29c2\",ClockwiseContourIntegral:\"\\u2232\",CloseCurlyDoubleQuote:\"\\u201d\",CloseCurlyQuote:\"\\u2019\",clubs:\"\\u2663\",clubsuit:\"\\u2663\",colon:\":\",Colon:\"\\u2237\",Colone:\"\\u2a74\",colone:\"\\u2254\",coloneq:\"\\u2254\",comma:\",\",commat:\"@\",comp:\"\\u2201\",compfn:\"\\u2218\",complement:\"\\u2201\",complexes:\"\\u2102\",cong:\"\\u2245\",congdot:\"\\u2a6d\",Congruent:\"\\u2261\",conint:\"\\u222e\",Conint:\"\\u222f\",ContourIntegral:\"\\u222e\",copf:\"\\ud835\\udd54\",Copf:\"\\u2102\",coprod:\"\\u2210\",Coproduct:\"\\u2210\",copy:\"\\xa9\",COPY:\"\\xa9\",copysr:\"\\u2117\",CounterClockwiseContourIntegral:\"\\u2233\",crarr:\"\\u21b5\",cross:\"\\u2717\",Cross:\"\\u2a2f\",Cscr:\"\\ud835\\udc9e\",cscr:\"\\ud835\\udcb8\",csub:\"\\u2acf\",csube:\"\\u2ad1\",csup:\"\\u2ad0\",csupe:\"\\u2ad2\",ctdot:\"\\u22ef\",cudarrl:\"\\u2938\",cudarrr:\"\\u2935\",cuepr:\"\\u22de\",cuesc:\"\\u22df\",cularr:\"\\u21b6\",cularrp:\"\\u293d\",cupbrcap:\"\\u2a48\",cupcap:\"\\u2a46\",CupCap:\"\\u224d\",cup:\"\\u222a\",Cup:\"\\u22d3\",cupcup:\"\\u2a4a\",cupdot:\"\\u228d\",cupor:\"\\u2a45\",cups:\"\\u222a\\ufe00\",curarr:\"\\u21b7\",curarrm:\"\\u293c\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",curlyvee:\"\\u22ce\",curlywedge:\"\\u22cf\",curren:\"\\xa4\",curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",cuvee:\"\\u22ce\",cuwed:\"\\u22cf\",cwconint:\"\\u2232\",cwint:\"\\u2231\",cylcty:\"\\u232d\",dagger:\"\\u2020\",Dagger:\"\\u2021\",daleth:\"\\u2138\",darr:\"\\u2193\",Darr:\"\\u21a1\",dArr:\"\\u21d3\",dash:\"\\u2010\",Dashv:\"\\u2ae4\",dashv:\"\\u22a3\",dbkarow:\"\\u290f\",dblac:\"\\u02dd\",Dcaron:\"\\u010e\",dcaron:\"\\u010f\",Dcy:\"\\u0414\",dcy:\"\\u0434\",ddagger:\"\\u2021\",ddarr:\"\\u21ca\",DD:\"\\u2145\",dd:\"\\u2146\",DDotrahd:\"\\u2911\",ddotseq:\"\\u2a77\",deg:\"\\xb0\",Del:\"\\u2207\",Delta:\"\\u0394\",delta:\"\\u03b4\",demptyv:\"\\u29b1\",dfisht:\"\\u297f\",Dfr:\"\\ud835\\udd07\",dfr:\"\\ud835\\udd21\",dHar:\"\\u2965\",dharl:\"\\u21c3\",dharr:\"\\u21c2\",DiacriticalAcute:\"\\xb4\",DiacriticalDot:\"\\u02d9\",DiacriticalDoubleAcute:\"\\u02dd\",DiacriticalGrave:\"`\",DiacriticalTilde:\"\\u02dc\",diam:\"\\u22c4\",diamond:\"\\u22c4\",Diamond:\"\\u22c4\",diamondsuit:\"\\u2666\",diams:\"\\u2666\",die:\"\\xa8\",DifferentialD:\"\\u2146\",digamma:\"\\u03dd\",disin:\"\\u22f2\",div:\"\\xf7\",divide:\"\\xf7\",divideontimes:\"\\u22c7\",divonx:\"\\u22c7\",DJcy:\"\\u0402\",djcy:\"\\u0452\",dlcorn:\"\\u231e\",dlcrop:\"\\u230d\",dollar:\"$\",Dopf:\"\\ud835\\udd3b\",dopf:\"\\ud835\\udd55\",Dot:\"\\xa8\",dot:\"\\u02d9\",DotDot:\"\\u20dc\",doteq:\"\\u2250\",doteqdot:\"\\u2251\",DotEqual:\"\\u2250\",dotminus:\"\\u2238\",dotplus:\"\\u2214\",dotsquare:\"\\u22a1\",doublebarwedge:\"\\u2306\",DoubleContourIntegral:\"\\u222f\",DoubleDot:\"\\xa8\",DoubleDownArrow:\"\\u21d3\",DoubleLeftArrow:\"\\u21d0\",DoubleLeftRightArrow:\"\\u21d4\",DoubleLeftTee:\"\\u2ae4\",DoubleLongLeftArrow:\"\\u27f8\",DoubleLongLeftRightArrow:\"\\u27fa\",DoubleLongRightArrow:\"\\u27f9\",DoubleRightArrow:\"\\u21d2\",DoubleRightTee:\"\\u22a8\",DoubleUpArrow:\"\\u21d1\",DoubleUpDownArrow:\"\\u21d5\",DoubleVerticalBar:\"\\u2225\",DownArrowBar:\"\\u2913\",downarrow:\"\\u2193\",DownArrow:\"\\u2193\",Downarrow:\"\\u21d3\",DownArrowUpArrow:\"\\u21f5\",DownBreve:\"\\u0311\",downdownarrows:\"\\u21ca\",downharpoonleft:\"\\u21c3\",downharpoonright:\"\\u21c2\",DownLeftRightVector:\"\\u2950\",DownLeftTeeVector:\"\\u295e\",DownLeftVectorBar:\"\\u2956\",DownLeftVector:\"\\u21bd\",DownRightTeeVector:\"\\u295f\",DownRightVectorBar:\"\\u2957\",DownRightVector:\"\\u21c1\",DownTeeArrow:\"\\u21a7\",DownTee:\"\\u22a4\",drbkarow:\"\\u2910\",drcorn:\"\\u231f\",drcrop:\"\\u230c\",Dscr:\"\\ud835\\udc9f\",dscr:\"\\ud835\\udcb9\",DScy:\"\\u0405\",dscy:\"\\u0455\",dsol:\"\\u29f6\",Dstrok:\"\\u0110\",dstrok:\"\\u0111\",dtdot:\"\\u22f1\",dtri:\"\\u25bf\",dtrif:\"\\u25be\",duarr:\"\\u21f5\",duhar:\"\\u296f\",dwangle:\"\\u29a6\",DZcy:\"\\u040f\",dzcy:\"\\u045f\",dzigrarr:\"\\u27ff\",Eacute:\"\\xc9\",eacute:\"\\xe9\",easter:\"\\u2a6e\",Ecaron:\"\\u011a\",ecaron:\"\\u011b\",Ecirc:\"\\xca\",ecirc:\"\\xea\",ecir:\"\\u2256\",ecolon:\"\\u2255\",Ecy:\"\\u042d\",ecy:\"\\u044d\",eDDot:\"\\u2a77\",Edot:\"\\u0116\",edot:\"\\u0117\",eDot:\"\\u2251\",ee:\"\\u2147\",efDot:\"\\u2252\",Efr:\"\\ud835\\udd08\",efr:\"\\ud835\\udd22\",eg:\"\\u2a9a\",Egrave:\"\\xc8\",egrave:\"\\xe8\",egs:\"\\u2a96\",egsdot:\"\\u2a98\",el:\"\\u2a99\",Element:\"\\u2208\",elinters:\"\\u23e7\",ell:\"\\u2113\",els:\"\\u2a95\",elsdot:\"\\u2a97\",Emacr:\"\\u0112\",emacr:\"\\u0113\",empty:\"\\u2205\",emptyset:\"\\u2205\",EmptySmallSquare:\"\\u25fb\",emptyv:\"\\u2205\",EmptyVerySmallSquare:\"\\u25ab\",emsp13:\"\\u2004\",emsp14:\"\\u2005\",emsp:\"\\u2003\",ENG:\"\\u014a\",eng:\"\\u014b\",ensp:\"\\u2002\",Eogon:\"\\u0118\",eogon:\"\\u0119\",Eopf:\"\\ud835\\udd3c\",eopf:\"\\ud835\\udd56\",epar:\"\\u22d5\",eparsl:\"\\u29e3\",eplus:\"\\u2a71\",epsi:\"\\u03b5\",Epsilon:\"\\u0395\",epsilon:\"\\u03b5\",epsiv:\"\\u03f5\",eqcirc:\"\\u2256\",eqcolon:\"\\u2255\",eqsim:\"\\u2242\",eqslantgtr:\"\\u2a96\",eqslantless:\"\\u2a95\",Equal:\"\\u2a75\",equals:\"=\",EqualTilde:\"\\u2242\",equest:\"\\u225f\",Equilibrium:\"\\u21cc\",equiv:\"\\u2261\",equivDD:\"\\u2a78\",eqvparsl:\"\\u29e5\",erarr:\"\\u2971\",erDot:\"\\u2253\",escr:\"\\u212f\",Escr:\"\\u2130\",esdot:\"\\u2250\",Esim:\"\\u2a73\",esim:\"\\u2242\",Eta:\"\\u0397\",eta:\"\\u03b7\",ETH:\"\\xd0\",eth:\"\\xf0\",Euml:\"\\xcb\",euml:\"\\xeb\",euro:\"\\u20ac\",excl:\"!\",exist:\"\\u2203\",Exists:\"\\u2203\",expectation:\"\\u2130\",exponentiale:\"\\u2147\",ExponentialE:\"\\u2147\",fallingdotseq:\"\\u2252\",Fcy:\"\\u0424\",fcy:\"\\u0444\",female:\"\\u2640\",ffilig:\"\\ufb03\",fflig:\"\\ufb00\",ffllig:\"\\ufb04\",Ffr:\"\\ud835\\udd09\",ffr:\"\\ud835\\udd23\",filig:\"\\ufb01\",FilledSmallSquare:\"\\u25fc\",FilledVerySmallSquare:\"\\u25aa\",fjlig:\"fj\",flat:\"\\u266d\",fllig:\"\\ufb02\",fltns:\"\\u25b1\",fnof:\"\\u0192\",Fopf:\"\\ud835\\udd3d\",fopf:\"\\ud835\\udd57\",forall:\"\\u2200\",ForAll:\"\\u2200\",fork:\"\\u22d4\",forkv:\"\\u2ad9\",Fouriertrf:\"\\u2131\",fpartint:\"\\u2a0d\",frac12:\"\\xbd\",frac13:\"\\u2153\",frac14:\"\\xbc\",frac15:\"\\u2155\",frac16:\"\\u2159\",frac18:\"\\u215b\",frac23:\"\\u2154\",frac25:\"\\u2156\",frac34:\"\\xbe\",frac35:\"\\u2157\",frac38:\"\\u215c\",frac45:\"\\u2158\",frac56:\"\\u215a\",frac58:\"\\u215d\",frac78:\"\\u215e\",frasl:\"\\u2044\",frown:\"\\u2322\",fscr:\"\\ud835\\udcbb\",Fscr:\"\\u2131\",gacute:\"\\u01f5\",Gamma:\"\\u0393\",gamma:\"\\u03b3\",Gammad:\"\\u03dc\",gammad:\"\\u03dd\",gap:\"\\u2a86\",Gbreve:\"\\u011e\",gbreve:\"\\u011f\",Gcedil:\"\\u0122\",Gcirc:\"\\u011c\",gcirc:\"\\u011d\",Gcy:\"\\u0413\",gcy:\"\\u0433\",Gdot:\"\\u0120\",gdot:\"\\u0121\",ge:\"\\u2265\",gE:\"\\u2267\",gEl:\"\\u2a8c\",gel:\"\\u22db\",geq:\"\\u2265\",geqq:\"\\u2267\",geqslant:\"\\u2a7e\",gescc:\"\\u2aa9\",ges:\"\\u2a7e\",gesdot:\"\\u2a80\",gesdoto:\"\\u2a82\",gesdotol:\"\\u2a84\",gesl:\"\\u22db\\ufe00\",gesles:\"\\u2a94\",Gfr:\"\\ud835\\udd0a\",gfr:\"\\ud835\\udd24\",gg:\"\\u226b\",Gg:\"\\u22d9\",ggg:\"\\u22d9\",gimel:\"\\u2137\",GJcy:\"\\u0403\",gjcy:\"\\u0453\",gla:\"\\u2aa5\",gl:\"\\u2277\",glE:\"\\u2a92\",glj:\"\\u2aa4\",gnap:\"\\u2a8a\",gnapprox:\"\\u2a8a\",gne:\"\\u2a88\",gnE:\"\\u2269\",gneq:\"\\u2a88\",gneqq:\"\\u2269\",gnsim:\"\\u22e7\",Gopf:\"\\ud835\\udd3e\",gopf:\"\\ud835\\udd58\",grave:\"`\",GreaterEqual:\"\\u2265\",GreaterEqualLess:\"\\u22db\",GreaterFullEqual:\"\\u2267\",GreaterGreater:\"\\u2aa2\",GreaterLess:\"\\u2277\",GreaterSlantEqual:\"\\u2a7e\",GreaterTilde:\"\\u2273\",Gscr:\"\\ud835\\udca2\",gscr:\"\\u210a\",gsim:\"\\u2273\",gsime:\"\\u2a8e\",gsiml:\"\\u2a90\",gtcc:\"\\u2aa7\",gtcir:\"\\u2a7a\",gt:\">\",GT:\">\",Gt:\"\\u226b\",gtdot:\"\\u22d7\",gtlPar:\"\\u2995\",gtquest:\"\\u2a7c\",gtrapprox:\"\\u2a86\",gtrarr:\"\\u2978\",gtrdot:\"\\u22d7\",gtreqless:\"\\u22db\",gtreqqless:\"\\u2a8c\",gtrless:\"\\u2277\",gtrsim:\"\\u2273\",gvertneqq:\"\\u2269\\ufe00\",gvnE:\"\\u2269\\ufe00\",Hacek:\"\\u02c7\",hairsp:\"\\u200a\",half:\"\\xbd\",hamilt:\"\\u210b\",HARDcy:\"\\u042a\",hardcy:\"\\u044a\",harrcir:\"\\u2948\",harr:\"\\u2194\",hArr:\"\\u21d4\",harrw:\"\\u21ad\",Hat:\"^\",hbar:\"\\u210f\",Hcirc:\"\\u0124\",hcirc:\"\\u0125\",hearts:\"\\u2665\",heartsuit:\"\\u2665\",hellip:\"\\u2026\",hercon:\"\\u22b9\",hfr:\"\\ud835\\udd25\",Hfr:\"\\u210c\",HilbertSpace:\"\\u210b\",hksearow:\"\\u2925\",hkswarow:\"\\u2926\",hoarr:\"\\u21ff\",homtht:\"\\u223b\",hookleftarrow:\"\\u21a9\",hookrightarrow:\"\\u21aa\",hopf:\"\\ud835\\udd59\",Hopf:\"\\u210d\",horbar:\"\\u2015\",HorizontalLine:\"\\u2500\",hscr:\"\\ud835\\udcbd\",Hscr:\"\\u210b\",hslash:\"\\u210f\",Hstrok:\"\\u0126\",hstrok:\"\\u0127\",HumpDownHump:\"\\u224e\",HumpEqual:\"\\u224f\",hybull:\"\\u2043\",hyphen:\"\\u2010\",Iacute:\"\\xcd\",iacute:\"\\xed\",ic:\"\\u2063\",Icirc:\"\\xce\",icirc:\"\\xee\",Icy:\"\\u0418\",icy:\"\\u0438\",Idot:\"\\u0130\",IEcy:\"\\u0415\",iecy:\"\\u0435\",iexcl:\"\\xa1\",iff:\"\\u21d4\",ifr:\"\\ud835\\udd26\",Ifr:\"\\u2111\",Igrave:\"\\xcc\",igrave:\"\\xec\",ii:\"\\u2148\",iiiint:\"\\u2a0c\",iiint:\"\\u222d\",iinfin:\"\\u29dc\",iiota:\"\\u2129\",IJlig:\"\\u0132\",ijlig:\"\\u0133\",Imacr:\"\\u012a\",imacr:\"\\u012b\",image:\"\\u2111\",ImaginaryI:\"\\u2148\",imagline:\"\\u2110\",imagpart:\"\\u2111\",imath:\"\\u0131\",Im:\"\\u2111\",imof:\"\\u22b7\",imped:\"\\u01b5\",Implies:\"\\u21d2\",incare:\"\\u2105\",in:\"\\u2208\",infin:\"\\u221e\",infintie:\"\\u29dd\",inodot:\"\\u0131\",intcal:\"\\u22ba\",int:\"\\u222b\",Int:\"\\u222c\",integers:\"\\u2124\",Integral:\"\\u222b\",intercal:\"\\u22ba\",Intersection:\"\\u22c2\",intlarhk:\"\\u2a17\",intprod:\"\\u2a3c\",InvisibleComma:\"\\u2063\",InvisibleTimes:\"\\u2062\",IOcy:\"\\u0401\",iocy:\"\\u0451\",Iogon:\"\\u012e\",iogon:\"\\u012f\",Iopf:\"\\ud835\\udd40\",iopf:\"\\ud835\\udd5a\",Iota:\"\\u0399\",iota:\"\\u03b9\",iprod:\"\\u2a3c\",iquest:\"\\xbf\",iscr:\"\\ud835\\udcbe\",Iscr:\"\\u2110\",isin:\"\\u2208\",isindot:\"\\u22f5\",isinE:\"\\u22f9\",isins:\"\\u22f4\",isinsv:\"\\u22f3\",isinv:\"\\u2208\",it:\"\\u2062\",Itilde:\"\\u0128\",itilde:\"\\u0129\",Iukcy:\"\\u0406\",iukcy:\"\\u0456\",Iuml:\"\\xcf\",iuml:\"\\xef\",Jcirc:\"\\u0134\",jcirc:\"\\u0135\",Jcy:\"\\u0419\",jcy:\"\\u0439\",Jfr:\"\\ud835\\udd0d\",jfr:\"\\ud835\\udd27\",jmath:\"\\u0237\",Jopf:\"\\ud835\\udd41\",\njopf:\"\\ud835\\udd5b\",Jscr:\"\\ud835\\udca5\",jscr:\"\\ud835\\udcbf\",Jsercy:\"\\u0408\",jsercy:\"\\u0458\",Jukcy:\"\\u0404\",jukcy:\"\\u0454\",Kappa:\"\\u039a\",kappa:\"\\u03ba\",kappav:\"\\u03f0\",Kcedil:\"\\u0136\",kcedil:\"\\u0137\",Kcy:\"\\u041a\",kcy:\"\\u043a\",Kfr:\"\\ud835\\udd0e\",kfr:\"\\ud835\\udd28\",kgreen:\"\\u0138\",KHcy:\"\\u0425\",khcy:\"\\u0445\",KJcy:\"\\u040c\",kjcy:\"\\u045c\",Kopf:\"\\ud835\\udd42\",kopf:\"\\ud835\\udd5c\",Kscr:\"\\ud835\\udca6\",kscr:\"\\ud835\\udcc0\",lAarr:\"\\u21da\",Lacute:\"\\u0139\",lacute:\"\\u013a\",laemptyv:\"\\u29b4\",lagran:\"\\u2112\",Lambda:\"\\u039b\",lambda:\"\\u03bb\",lang:\"\\u27e8\",Lang:\"\\u27ea\",langd:\"\\u2991\",langle:\"\\u27e8\",lap:\"\\u2a85\",Laplacetrf:\"\\u2112\",laquo:\"\\xab\",larrb:\"\\u21e4\",larrbfs:\"\\u291f\",larr:\"\\u2190\",Larr:\"\\u219e\",lArr:\"\\u21d0\",larrfs:\"\\u291d\",larrhk:\"\\u21a9\",larrlp:\"\\u21ab\",larrpl:\"\\u2939\",larrsim:\"\\u2973\",larrtl:\"\\u21a2\",latail:\"\\u2919\",lAtail:\"\\u291b\",lat:\"\\u2aab\",late:\"\\u2aad\",lates:\"\\u2aad\\ufe00\",lbarr:\"\\u290c\",lBarr:\"\\u290e\",lbbrk:\"\\u2772\",lbrace:\"{\",lbrack:\"[\",lbrke:\"\\u298b\",lbrksld:\"\\u298f\",lbrkslu:\"\\u298d\",Lcaron:\"\\u013d\",lcaron:\"\\u013e\",Lcedil:\"\\u013b\",lcedil:\"\\u013c\",lceil:\"\\u2308\",lcub:\"{\",Lcy:\"\\u041b\",lcy:\"\\u043b\",ldca:\"\\u2936\",ldquo:\"\\u201c\",ldquor:\"\\u201e\",ldrdhar:\"\\u2967\",ldrushar:\"\\u294b\",ldsh:\"\\u21b2\",le:\"\\u2264\",lE:\"\\u2266\",LeftAngleBracket:\"\\u27e8\",LeftArrowBar:\"\\u21e4\",leftarrow:\"\\u2190\",LeftArrow:\"\\u2190\",Leftarrow:\"\\u21d0\",LeftArrowRightArrow:\"\\u21c6\",leftarrowtail:\"\\u21a2\",LeftCeiling:\"\\u2308\",LeftDoubleBracket:\"\\u27e6\",LeftDownTeeVector:\"\\u2961\",LeftDownVectorBar:\"\\u2959\",LeftDownVector:\"\\u21c3\",LeftFloor:\"\\u230a\",leftharpoondown:\"\\u21bd\",leftharpoonup:\"\\u21bc\",leftleftarrows:\"\\u21c7\",leftrightarrow:\"\\u2194\",LeftRightArrow:\"\\u2194\",Leftrightarrow:\"\\u21d4\",leftrightarrows:\"\\u21c6\",leftrightharpoons:\"\\u21cb\",leftrightsquigarrow:\"\\u21ad\",LeftRightVector:\"\\u294e\",LeftTeeArrow:\"\\u21a4\",LeftTee:\"\\u22a3\",LeftTeeVector:\"\\u295a\",leftthreetimes:\"\\u22cb\",LeftTriangleBar:\"\\u29cf\",LeftTriangle:\"\\u22b2\",LeftTriangleEqual:\"\\u22b4\",LeftUpDownVector:\"\\u2951\",LeftUpTeeVector:\"\\u2960\",LeftUpVectorBar:\"\\u2958\",LeftUpVector:\"\\u21bf\",LeftVectorBar:\"\\u2952\",LeftVector:\"\\u21bc\",lEg:\"\\u2a8b\",leg:\"\\u22da\",leq:\"\\u2264\",leqq:\"\\u2266\",leqslant:\"\\u2a7d\",lescc:\"\\u2aa8\",les:\"\\u2a7d\",lesdot:\"\\u2a7f\",lesdoto:\"\\u2a81\",lesdotor:\"\\u2a83\",lesg:\"\\u22da\\ufe00\",lesges:\"\\u2a93\",lessapprox:\"\\u2a85\",lessdot:\"\\u22d6\",lesseqgtr:\"\\u22da\",lesseqqgtr:\"\\u2a8b\",LessEqualGreater:\"\\u22da\",LessFullEqual:\"\\u2266\",LessGreater:\"\\u2276\",lessgtr:\"\\u2276\",LessLess:\"\\u2aa1\",lesssim:\"\\u2272\",LessSlantEqual:\"\\u2a7d\",LessTilde:\"\\u2272\",lfisht:\"\\u297c\",lfloor:\"\\u230a\",Lfr:\"\\ud835\\udd0f\",lfr:\"\\ud835\\udd29\",lg:\"\\u2276\",lgE:\"\\u2a91\",lHar:\"\\u2962\",lhard:\"\\u21bd\",lharu:\"\\u21bc\",lharul:\"\\u296a\",lhblk:\"\\u2584\",LJcy:\"\\u0409\",ljcy:\"\\u0459\",llarr:\"\\u21c7\",ll:\"\\u226a\",Ll:\"\\u22d8\",llcorner:\"\\u231e\",Lleftarrow:\"\\u21da\",llhard:\"\\u296b\",lltri:\"\\u25fa\",Lmidot:\"\\u013f\",lmidot:\"\\u0140\",lmoustache:\"\\u23b0\",lmoust:\"\\u23b0\",lnap:\"\\u2a89\",lnapprox:\"\\u2a89\",lne:\"\\u2a87\",lnE:\"\\u2268\",lneq:\"\\u2a87\",lneqq:\"\\u2268\",lnsim:\"\\u22e6\",loang:\"\\u27ec\",loarr:\"\\u21fd\",lobrk:\"\\u27e6\",longleftarrow:\"\\u27f5\",LongLeftArrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longleftrightarrow:\"\\u27f7\",LongLeftRightArrow:\"\\u27f7\",Longleftrightarrow:\"\\u27fa\",longmapsto:\"\\u27fc\",longrightarrow:\"\\u27f6\",LongRightArrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",lopar:\"\\u2985\",Lopf:\"\\ud835\\udd43\",lopf:\"\\ud835\\udd5d\",loplus:\"\\u2a2d\",lotimes:\"\\u2a34\",lowast:\"\\u2217\",lowbar:\"_\",LowerLeftArrow:\"\\u2199\",LowerRightArrow:\"\\u2198\",loz:\"\\u25ca\",lozenge:\"\\u25ca\",lozf:\"\\u29eb\",lpar:\"(\",lparlt:\"\\u2993\",lrarr:\"\\u21c6\",lrcorner:\"\\u231f\",lrhar:\"\\u21cb\",lrhard:\"\\u296d\",lrm:\"\\u200e\",lrtri:\"\\u22bf\",lsaquo:\"\\u2039\",lscr:\"\\ud835\\udcc1\",Lscr:\"\\u2112\",lsh:\"\\u21b0\",Lsh:\"\\u21b0\",lsim:\"\\u2272\",lsime:\"\\u2a8d\",lsimg:\"\\u2a8f\",lsqb:\"[\",lsquo:\"\\u2018\",lsquor:\"\\u201a\",Lstrok:\"\\u0141\",lstrok:\"\\u0142\",ltcc:\"\\u2aa6\",ltcir:\"\\u2a79\",lt:\"<\",LT:\"<\",Lt:\"\\u226a\",ltdot:\"\\u22d6\",lthree:\"\\u22cb\",ltimes:\"\\u22c9\",ltlarr:\"\\u2976\",ltquest:\"\\u2a7b\",ltri:\"\\u25c3\",ltrie:\"\\u22b4\",ltrif:\"\\u25c2\",ltrPar:\"\\u2996\",lurdshar:\"\\u294a\",luruhar:\"\\u2966\",lvertneqq:\"\\u2268\\ufe00\",lvnE:\"\\u2268\\ufe00\",macr:\"\\xaf\",male:\"\\u2642\",malt:\"\\u2720\",maltese:\"\\u2720\",Map:\"\\u2905\",map:\"\\u21a6\",mapsto:\"\\u21a6\",mapstodown:\"\\u21a7\",mapstoleft:\"\\u21a4\",mapstoup:\"\\u21a5\",marker:\"\\u25ae\",mcomma:\"\\u2a29\",Mcy:\"\\u041c\",mcy:\"\\u043c\",mdash:\"\\u2014\",mDDot:\"\\u223a\",measuredangle:\"\\u2221\",MediumSpace:\"\\u205f\",Mellintrf:\"\\u2133\",Mfr:\"\\ud835\\udd10\",mfr:\"\\ud835\\udd2a\",mho:\"\\u2127\",micro:\"\\xb5\",midast:\"*\",midcir:\"\\u2af0\",mid:\"\\u2223\",middot:\"\\xb7\",minusb:\"\\u229f\",minus:\"\\u2212\",minusd:\"\\u2238\",minusdu:\"\\u2a2a\",MinusPlus:\"\\u2213\",mlcp:\"\\u2adb\",mldr:\"\\u2026\",mnplus:\"\\u2213\",models:\"\\u22a7\",Mopf:\"\\ud835\\udd44\",mopf:\"\\ud835\\udd5e\",mp:\"\\u2213\",mscr:\"\\ud835\\udcc2\",Mscr:\"\\u2133\",mstpos:\"\\u223e\",Mu:\"\\u039c\",mu:\"\\u03bc\",multimap:\"\\u22b8\",mumap:\"\\u22b8\",nabla:\"\\u2207\",Nacute:\"\\u0143\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",natural:\"\\u266e\",naturals:\"\\u2115\",natur:\"\\u266e\",nbsp:\"\\xa0\",nbump:\"\\u224e\\u0338\",nbumpe:\"\\u224f\\u0338\",ncap:\"\\u2a43\",Ncaron:\"\\u0147\",ncaron:\"\\u0148\",Ncedil:\"\\u0145\",ncedil:\"\\u0146\",ncong:\"\\u2247\",ncongdot:\"\\u2a6d\\u0338\",ncup:\"\\u2a42\",Ncy:\"\\u041d\",ncy:\"\\u043d\",ndash:\"\\u2013\",nearhk:\"\\u2924\",nearr:\"\\u2197\",neArr:\"\\u21d7\",nearrow:\"\\u2197\",ne:\"\\u2260\",nedot:\"\\u2250\\u0338\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",NestedGreaterGreater:\"\\u226b\",NestedLessLess:\"\\u226a\",NewLine:\"\\n\",nexist:\"\\u2204\",nexists:\"\\u2204\",Nfr:\"\\ud835\\udd11\",nfr:\"\\ud835\\udd2b\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",nGg:\"\\u22d9\\u0338\",ngsim:\"\\u2275\",nGt:\"\\u226b\\u20d2\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nGtv:\"\\u226b\\u0338\",nharr:\"\\u21ae\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",NJcy:\"\\u040a\",njcy:\"\\u045a\",nlarr:\"\\u219a\",nlArr:\"\\u21cd\",nldr:\"\\u2025\",nlE:\"\\u2266\\u0338\",nle:\"\\u2270\",nleftarrow:\"\\u219a\",nLeftarrow:\"\\u21cd\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\",nleq:\"\\u2270\",nleqq:\"\\u2266\\u0338\",nleqslant:\"\\u2a7d\\u0338\",nles:\"\\u2a7d\\u0338\",nless:\"\\u226e\",nLl:\"\\u22d8\\u0338\",nlsim:\"\\u2274\",nLt:\"\\u226a\\u20d2\",nlt:\"\\u226e\",nltri:\"\\u22ea\",nltrie:\"\\u22ec\",nLtv:\"\\u226a\\u0338\",nmid:\"\\u2224\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",nopf:\"\\ud835\\udd5f\",Nopf:\"\\u2115\",Not:\"\\u2aec\",not:\"\\xac\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotDoubleVerticalBar:\"\\u2226\",NotElement:\"\\u2209\",NotEqual:\"\\u2260\",NotEqualTilde:\"\\u2242\\u0338\",NotExists:\"\\u2204\",NotGreater:\"\\u226f\",NotGreaterEqual:\"\\u2271\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",notin:\"\\u2209\",notindot:\"\\u22f5\\u0338\",notinE:\"\\u22f9\\u0338\",notinva:\"\\u2209\",notinvb:\"\\u22f7\",notinvc:\"\\u22f6\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLeftTriangle:\"\\u22ea\",NotLeftTriangleEqual:\"\\u22ec\",NotLess:\"\\u226e\",NotLessEqual:\"\\u2270\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",notni:\"\\u220c\",notniva:\"\\u220c\",notnivb:\"\\u22fe\",notnivc:\"\\u22fd\",NotPrecedes:\"\\u2280\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotPrecedesSlantEqual:\"\\u22e0\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotRightTriangle:\"\\u22eb\",NotRightTriangleEqual:\"\\u22ed\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSubsetEqual:\"\\u2288\",NotSucceeds:\"\\u2281\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsSlantEqual:\"\\u22e1\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotSupersetEqual:\"\\u2289\",NotTilde:\"\\u2241\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",NotVerticalBar:\"\\u2224\",nparallel:\"\\u2226\",npar:\"\\u2226\",nparsl:\"\\u2afd\\u20e5\",npart:\"\\u2202\\u0338\",npolint:\"\\u2a14\",npr:\"\\u2280\",nprcue:\"\\u22e0\",nprec:\"\\u2280\",npreceq:\"\\u2aaf\\u0338\",npre:\"\\u2aaf\\u0338\",nrarrc:\"\\u2933\\u0338\",nrarr:\"\\u219b\",nrArr:\"\\u21cf\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nRightarrow:\"\\u21cf\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",Nscr:\"\\ud835\\udca9\",nscr:\"\\ud835\\udcc3\",nshortmid:\"\\u2224\",nshortparallel:\"\\u2226\",nsim:\"\\u2241\",nsime:\"\\u2244\",nsimeq:\"\\u2244\",nsmid:\"\\u2224\",nspar:\"\\u2226\",nsqsube:\"\\u22e2\",nsqsupe:\"\\u22e3\",nsub:\"\\u2284\",nsubE:\"\\u2ac5\\u0338\",nsube:\"\\u2288\",nsubset:\"\\u2282\\u20d2\",nsubseteq:\"\\u2288\",nsubseteqq:\"\\u2ac5\\u0338\",nsucc:\"\\u2281\",nsucceq:\"\\u2ab0\\u0338\",nsup:\"\\u2285\",nsupE:\"\\u2ac6\\u0338\",nsupe:\"\\u2289\",nsupset:\"\\u2283\\u20d2\",nsupseteq:\"\\u2289\",nsupseteqq:\"\\u2ac6\\u0338\",ntgl:\"\\u2279\",Ntilde:\"\\xd1\",ntilde:\"\\xf1\",ntlg:\"\\u2278\",ntriangleleft:\"\\u22ea\",ntrianglelefteq:\"\\u22ec\",ntriangleright:\"\\u22eb\",ntrianglerighteq:\"\\u22ed\",Nu:\"\\u039d\",nu:\"\\u03bd\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvap:\"\\u224d\\u20d2\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",nvge:\"\\u2265\\u20d2\",nvgt:\">\\u20d2\",nvHarr:\"\\u2904\",nvinfin:\"\\u29de\",nvlArr:\"\\u2902\",nvle:\"\\u2264\\u20d2\",nvlt:\"<\\u20d2\",nvltrie:\"\\u22b4\\u20d2\",nvrArr:\"\\u2903\",nvrtrie:\"\\u22b5\\u20d2\",nvsim:\"\\u223c\\u20d2\",nwarhk:\"\\u2923\",nwarr:\"\\u2196\",nwArr:\"\\u21d6\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\",Oacute:\"\\xd3\",oacute:\"\\xf3\",oast:\"\\u229b\",Ocirc:\"\\xd4\",ocirc:\"\\xf4\",ocir:\"\\u229a\",Ocy:\"\\u041e\",ocy:\"\\u043e\",odash:\"\\u229d\",Odblac:\"\\u0150\",odblac:\"\\u0151\",odiv:\"\\u2a38\",odot:\"\\u2299\",odsold:\"\\u29bc\",OElig:\"\\u0152\",oelig:\"\\u0153\",ofcir:\"\\u29bf\",Ofr:\"\\ud835\\udd12\",ofr:\"\\ud835\\udd2c\",ogon:\"\\u02db\",Ograve:\"\\xd2\",ograve:\"\\xf2\",ogt:\"\\u29c1\",ohbar:\"\\u29b5\",ohm:\"\\u03a9\",oint:\"\\u222e\",olarr:\"\\u21ba\",olcir:\"\\u29be\",olcross:\"\\u29bb\",oline:\"\\u203e\",olt:\"\\u29c0\",Omacr:\"\\u014c\",omacr:\"\\u014d\",Omega:\"\\u03a9\",omega:\"\\u03c9\",Omicron:\"\\u039f\",omicron:\"\\u03bf\",omid:\"\\u29b6\",ominus:\"\\u2296\",Oopf:\"\\ud835\\udd46\",oopf:\"\\ud835\\udd60\",opar:\"\\u29b7\",OpenCurlyDoubleQuote:\"\\u201c\",OpenCurlyQuote:\"\\u2018\",operp:\"\\u29b9\",oplus:\"\\u2295\",orarr:\"\\u21bb\",Or:\"\\u2a54\",or:\"\\u2228\",ord:\"\\u2a5d\",order:\"\\u2134\",orderof:\"\\u2134\",ordf:\"\\xaa\",ordm:\"\\xba\",origof:\"\\u22b6\",oror:\"\\u2a56\",orslope:\"\\u2a57\",orv:\"\\u2a5b\",oS:\"\\u24c8\",Oscr:\"\\ud835\\udcaa\",oscr:\"\\u2134\",Oslash:\"\\xd8\",oslash:\"\\xf8\",osol:\"\\u2298\",Otilde:\"\\xd5\",otilde:\"\\xf5\",otimesas:\"\\u2a36\",Otimes:\"\\u2a37\",otimes:\"\\u2297\",Ouml:\"\\xd6\",ouml:\"\\xf6\",ovbar:\"\\u233d\",OverBar:\"\\u203e\",OverBrace:\"\\u23de\",OverBracket:\"\\u23b4\",OverParenthesis:\"\\u23dc\",para:\"\\xb6\",parallel:\"\\u2225\",par:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",PartialD:\"\\u2202\",Pcy:\"\\u041f\",pcy:\"\\u043f\",percnt:\"%\",period:\".\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",Pfr:\"\\ud835\\udd13\",pfr:\"\\ud835\\udd2d\",Phi:\"\\u03a6\",phi:\"\\u03c6\",phiv:\"\\u03d5\",phmmat:\"\\u2133\",phone:\"\\u260e\",Pi:\"\\u03a0\",pi:\"\\u03c0\",pitchfork:\"\\u22d4\",piv:\"\\u03d6\",planck:\"\\u210f\",planckh:\"\\u210e\",plankv:\"\\u210f\",plusacir:\"\\u2a23\",plusb:\"\\u229e\",pluscir:\"\\u2a22\",plus:\"+\",plusdo:\"\\u2214\",plusdu:\"\\u2a25\",pluse:\"\\u2a72\",PlusMinus:\"\\xb1\",plusmn:\"\\xb1\",plussim:\"\\u2a26\",plustwo:\"\\u2a27\",pm:\"\\xb1\",Poincareplane:\"\\u210c\",pointint:\"\\u2a15\",popf:\"\\ud835\\udd61\",Popf:\"\\u2119\",pound:\"\\xa3\",prap:\"\\u2ab7\",Pr:\"\\u2abb\",pr:\"\\u227a\",prcue:\"\\u227c\",precapprox:\"\\u2ab7\",prec:\"\\u227a\",preccurlyeq:\"\\u227c\",Precedes:\"\\u227a\",PrecedesEqual:\"\\u2aaf\",PrecedesSlantEqual:\"\\u227c\",PrecedesTilde:\"\\u227e\",preceq:\"\\u2aaf\",precnapprox:\"\\u2ab9\",precneqq:\"\\u2ab5\",precnsim:\"\\u22e8\",pre:\"\\u2aaf\",prE:\"\\u2ab3\",precsim:\"\\u227e\",prime:\"\\u2032\",Prime:\"\\u2033\",primes:\"\\u2119\",prnap:\"\\u2ab9\",prnE:\"\\u2ab5\",prnsim:\"\\u22e8\",prod:\"\\u220f\",Product:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",Proportional:\"\\u221d\",Proportion:\"\\u2237\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",Pscr:\"\\ud835\\udcab\",pscr:\"\\ud835\\udcc5\",Psi:\"\\u03a8\",psi:\"\\u03c8\",puncsp:\"\\u2008\",Qfr:\"\\ud835\\udd14\",qfr:\"\\ud835\\udd2e\",qint:\"\\u2a0c\",qopf:\"\\ud835\\udd62\",Qopf:\"\\u211a\",qprime:\"\\u2057\",Qscr:\"\\ud835\\udcac\",qscr:\"\\ud835\\udcc6\",quaternions:\"\\u210d\",quatint:\"\\u2a16\",quest:\"?\",questeq:\"\\u225f\",quot:'\"',QUOT:'\"',rAarr:\"\\u21db\",race:\"\\u223d\\u0331\",Racute:\"\\u0154\",racute:\"\\u0155\",radic:\"\\u221a\",raemptyv:\"\\u29b3\",rang:\"\\u27e9\",Rang:\"\\u27eb\",rangd:\"\\u2992\",range:\"\\u29a5\",rangle:\"\\u27e9\",raquo:\"\\xbb\",rarrap:\"\\u2975\",rarrb:\"\\u21e5\",rarrbfs:\"\\u2920\",rarrc:\"\\u2933\",rarr:\"\\u2192\",Rarr:\"\\u21a0\",rArr:\"\\u21d2\",rarrfs:\"\\u291e\",rarrhk:\"\\u21aa\",rarrlp:\"\\u21ac\",rarrpl:\"\\u2945\",rarrsim:\"\\u2974\",Rarrtl:\"\\u2916\",rarrtl:\"\\u21a3\",rarrw:\"\\u219d\",ratail:\"\\u291a\",rAtail:\"\\u291c\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rBarr:\"\\u290f\",RBarr:\"\\u2910\",rbbrk:\"\\u2773\",rbrace:\"}\",rbrack:\"]\",rbrke:\"\\u298c\",rbrksld:\"\\u298e\",rbrkslu:\"\\u2990\",Rcaron:\"\\u0158\",rcaron:\"\\u0159\",Rcedil:\"\\u0156\",rcedil:\"\\u0157\",rceil:\"\\u2309\",rcub:\"}\",Rcy:\"\\u0420\",rcy:\"\\u0440\",rdca:\"\\u2937\",rdldhar:\"\\u2969\",rdquo:\"\\u201d\",rdquor:\"\\u201d\",rdsh:\"\\u21b3\",real:\"\\u211c\",realine:\"\\u211b\",realpart:\"\\u211c\",reals:\"\\u211d\",Re:\"\\u211c\",rect:\"\\u25ad\",reg:\"\\xae\",REG:\"\\xae\",ReverseElement:\"\\u220b\",ReverseEquilibrium:\"\\u21cb\",ReverseUpEquilibrium:\"\\u296f\",rfisht:\"\\u297d\",rfloor:\"\\u230b\",rfr:\"\\ud835\\udd2f\",Rfr:\"\\u211c\",rHar:\"\\u2964\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",Rho:\"\\u03a1\",rho:\"\\u03c1\",rhov:\"\\u03f1\",RightAngleBracket:\"\\u27e9\",RightArrowBar:\"\\u21e5\",rightarrow:\"\\u2192\",RightArrow:\"\\u2192\",Rightarrow:\"\\u21d2\",RightArrowLeftArrow:\"\\u21c4\",rightarrowtail:\"\\u21a3\",RightCeiling:\"\\u2309\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightDownVector:\"\\u21c2\",RightFloor:\"\\u230b\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightrightarrows:\"\\u21c9\",rightsquigarrow:\"\\u219d\",RightTeeArrow:\"\\u21a6\",RightTee:\"\\u22a2\",RightTeeVector:\"\\u295b\",rightthreetimes:\"\\u22cc\",RightTriangleBar:\"\\u29d0\",RightTriangle:\"\\u22b3\",RightTriangleEqual:\"\\u22b5\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightUpVector:\"\\u21be\",RightVectorBar:\"\\u2953\",RightVector:\"\\u21c0\",ring:\"\\u02da\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rmoust:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",ropf:\"\\ud835\\udd63\",Ropf:\"\\u211d\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",RoundImplies:\"\\u2970\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",Rrightarrow:\"\\u21db\",rsaquo:\"\\u203a\",rscr:\"\\ud835\\udcc7\",Rscr:\"\\u211b\",rsh:\"\\u21b1\",Rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtimes:\"\\u22ca\",rtri:\"\\u25b9\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",RuleDelayed:\"\\u29f4\",ruluhar:\"\\u2968\",rx:\"\\u211e\",Sacute:\"\\u015a\",sacute:\"\\u015b\",sbquo:\"\\u201a\",scap:\"\\u2ab8\",Scaron:\"\\u0160\",scaron:\"\\u0161\",Sc:\"\\u2abc\",sc:\"\\u227b\",sccue:\"\\u227d\",sce:\"\\u2ab0\",scE:\"\\u2ab4\",Scedil:\"\\u015e\",scedil:\"\\u015f\",Scirc:\"\\u015c\",scirc:\"\\u015d\",scnap:\"\\u2aba\",scnE:\"\\u2ab6\",scnsim:\"\\u22e9\",scpolint:\"\\u2a13\",scsim:\"\\u227f\",Scy:\"\\u0421\",scy:\"\\u0441\",sdotb:\"\\u22a1\",sdot:\"\\u22c5\",sdote:\"\\u2a66\",searhk:\"\\u2925\",searr:\"\\u2198\",seArr:\"\\u21d8\",searrow:\"\\u2198\",sect:\"\\xa7\",semi:\";\",seswar:\"\\u2929\",setminus:\"\\u2216\",setmn:\"\\u2216\",sext:\"\\u2736\",Sfr:\"\\ud835\\udd16\",sfr:\"\\ud835\\udd30\",sfrown:\"\\u2322\",sharp:\"\\u266f\",SHCHcy:\"\\u0429\",shchcy:\"\\u0449\",SHcy:\"\\u0428\",shcy:\"\\u0448\",ShortDownArrow:\"\\u2193\",ShortLeftArrow:\"\\u2190\",shortmid:\"\\u2223\",shortparallel:\"\\u2225\",ShortRightArrow:\"\\u2192\",ShortUpArrow:\"\\u2191\",shy:\"\\xad\",Sigma:\"\\u03a3\",sigma:\"\\u03c3\",sigmaf:\"\\u03c2\",sigmav:\"\\u03c2\",sim:\"\\u223c\",simdot:\"\\u2a6a\",sime:\"\\u2243\",simeq:\"\\u2243\",simg:\"\\u2a9e\",simgE:\"\\u2aa0\",siml:\"\\u2a9d\",simlE:\"\\u2a9f\",simne:\"\\u2246\",simplus:\"\\u2a24\",simrarr:\"\\u2972\",slarr:\"\\u2190\",SmallCircle:\"\\u2218\",smallsetminus:\"\\u2216\",smashp:\"\\u2a33\",smeparsl:\"\\u29e4\",smid:\"\\u2223\",smile:\"\\u2323\",smt:\"\\u2aaa\",smte:\"\\u2aac\",smtes:\"\\u2aac\\ufe00\",SOFTcy:\"\\u042c\",softcy:\"\\u044c\",solbar:\"\\u233f\",solb:\"\\u29c4\",sol:\"/\",Sopf:\"\\ud835\\udd4a\",sopf:\"\\ud835\\udd64\",spades:\"\\u2660\",spadesuit:\"\\u2660\",spar:\"\\u2225\",sqcap:\"\\u2293\",sqcaps:\"\\u2293\\ufe00\",sqcup:\"\\u2294\",sqcups:\"\\u2294\\ufe00\",Sqrt:\"\\u221a\",sqsub:\"\\u228f\",sqsube:\"\\u2291\",sqsubset:\"\\u228f\",sqsubseteq:\"\\u2291\",sqsup:\"\\u2290\",sqsupe:\"\\u2292\",sqsupset:\"\\u2290\",sqsupseteq:\"\\u2292\",square:\"\\u25a1\",Square:\"\\u25a1\",SquareIntersection:\"\\u2293\",SquareSubset:\"\\u228f\",SquareSubsetEqual:\"\\u2291\",SquareSuperset:\"\\u2290\",SquareSupersetEqual:\"\\u2292\",SquareUnion:\"\\u2294\",squarf:\"\\u25aa\",squ:\"\\u25a1\",squf:\"\\u25aa\",srarr:\"\\u2192\",Sscr:\"\\ud835\\udcae\",sscr:\"\\ud835\\udcc8\",ssetmn:\"\\u2216\",ssmile:\"\\u2323\",sstarf:\"\\u22c6\",Star:\"\\u22c6\",star:\"\\u2606\",starf:\"\\u2605\",straightepsilon:\"\\u03f5\",straightphi:\"\\u03d5\",strns:\"\\xaf\",sub:\"\\u2282\",Sub:\"\\u22d0\",subdot:\"\\u2abd\",subE:\"\\u2ac5\",sube:\"\\u2286\",subedot:\"\\u2ac3\",submult:\"\\u2ac1\",subnE:\"\\u2acb\",subne:\"\\u228a\",subplus:\"\\u2abf\",subrarr:\"\\u2979\",subset:\"\\u2282\",Subset:\"\\u22d0\",subseteq:\"\\u2286\",subseteqq:\"\\u2ac5\",SubsetEqual:\"\\u2286\",subsetneq:\"\\u228a\",subsetneqq:\"\\u2acb\",subsim:\"\\u2ac7\",subsub:\"\\u2ad5\",subsup:\"\\u2ad3\",succapprox:\"\\u2ab8\",succ:\"\\u227b\",succcurlyeq:\"\\u227d\",Succeeds:\"\\u227b\",SucceedsEqual:\"\\u2ab0\",SucceedsSlantEqual:\"\\u227d\",SucceedsTilde:\"\\u227f\",succeq:\"\\u2ab0\",succnapprox:\"\\u2aba\",succneqq:\"\\u2ab6\",succnsim:\"\\u22e9\",succsim:\"\\u227f\",SuchThat:\"\\u220b\",sum:\"\\u2211\",Sum:\"\\u2211\",sung:\"\\u266a\",sup1:\"\\xb9\",sup2:\"\\xb2\",sup3:\"\\xb3\",sup:\"\\u2283\",Sup:\"\\u22d1\",supdot:\"\\u2abe\",supdsub:\"\\u2ad8\",supE:\"\\u2ac6\",supe:\"\\u2287\",supedot:\"\\u2ac4\",Superset:\"\\u2283\",SupersetEqual:\"\\u2287\",suphsol:\"\\u27c9\",suphsub:\"\\u2ad7\",suplarr:\"\\u297b\",supmult:\"\\u2ac2\",supnE:\"\\u2acc\",supne:\"\\u228b\",supplus:\"\\u2ac0\",supset:\"\\u2283\",Supset:\"\\u22d1\",supseteq:\"\\u2287\",supseteqq:\"\\u2ac6\",supsetneq:\"\\u228b\",supsetneqq:\"\\u2acc\",supsim:\"\\u2ac8\",supsub:\"\\u2ad4\",supsup:\"\\u2ad6\",swarhk:\"\\u2926\",swarr:\"\\u2199\",swArr:\"\\u21d9\",swarrow:\"\\u2199\",swnwar:\"\\u292a\",szlig:\"\\xdf\",Tab:\"\\t\",target:\"\\u2316\",Tau:\"\\u03a4\",tau:\"\\u03c4\",tbrk:\"\\u23b4\",Tcaron:\"\\u0164\",tcaron:\"\\u0165\",Tcedil:\"\\u0162\",tcedil:\"\\u0163\",Tcy:\"\\u0422\",tcy:\"\\u0442\",tdot:\"\\u20db\",telrec:\"\\u2315\",Tfr:\"\\ud835\\udd17\",tfr:\"\\ud835\\udd31\",there4:\"\\u2234\",therefore:\"\\u2234\",Therefore:\"\\u2234\",Theta:\"\\u0398\",theta:\"\\u03b8\",thetasym:\"\\u03d1\",thetav:\"\\u03d1\",thickapprox:\"\\u2248\",thicksim:\"\\u223c\",ThickSpace:\"\\u205f\\u200a\",ThinSpace:\"\\u2009\",thinsp:\"\\u2009\",thkap:\"\\u2248\",thksim:\"\\u223c\",THORN:\"\\xde\",thorn:\"\\xfe\",tilde:\"\\u02dc\",Tilde:\"\\u223c\",TildeEqual:\"\\u2243\",TildeFullEqual:\"\\u2245\",TildeTilde:\"\\u2248\",timesbar:\"\\u2a31\",timesb:\"\\u22a0\",times:\"\\xd7\",timesd:\"\\u2a30\",tint:\"\\u222d\",toea:\"\\u2928\",topbot:\"\\u2336\",topcir:\"\\u2af1\",top:\"\\u22a4\",Topf:\"\\ud835\\udd4b\",topf:\"\\ud835\\udd65\",topfork:\"\\u2ada\",tosa:\"\\u2929\",tprime:\"\\u2034\",trade:\"\\u2122\",TRADE:\"\\u2122\",triangle:\"\\u25b5\",triangledown:\"\\u25bf\",triangleleft:\"\\u25c3\",trianglelefteq:\"\\u22b4\",triangleq:\"\\u225c\",triangleright:\"\\u25b9\",trianglerighteq:\"\\u22b5\",tridot:\"\\u25ec\",trie:\"\\u225c\",triminus:\"\\u2a3a\",TripleDot:\"\\u20db\",triplus:\"\\u2a39\",trisb:\"\\u29cd\",tritime:\"\\u2a3b\",trpezium:\"\\u23e2\",Tscr:\"\\ud835\\udcaf\",tscr:\"\\ud835\\udcc9\",TScy:\"\\u0426\",tscy:\"\\u0446\",TSHcy:\"\\u040b\",tshcy:\"\\u045b\",Tstrok:\"\\u0166\",tstrok:\"\\u0167\",twixt:\"\\u226c\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",Uacute:\"\\xda\",uacute:\"\\xfa\",uarr:\"\\u2191\",Uarr:\"\\u219f\",uArr:\"\\u21d1\",Uarrocir:\"\\u2949\",Ubrcy:\"\\u040e\",ubrcy:\"\\u045e\",Ubreve:\"\\u016c\",ubreve:\"\\u016d\",Ucirc:\"\\xdb\",ucirc:\"\\xfb\",Ucy:\"\\u0423\",ucy:\"\\u0443\",udarr:\"\\u21c5\",Udblac:\"\\u0170\",udblac:\"\\u0171\",udhar:\"\\u296e\",ufisht:\"\\u297e\",Ufr:\"\\ud835\\udd18\",ufr:\"\\ud835\\udd32\",Ugrave:\"\\xd9\",ugrave:\"\\xf9\",uHar:\"\\u2963\",uharl:\"\\u21bf\",uharr:\"\\u21be\",uhblk:\"\\u2580\",ulcorn:\"\\u231c\",ulcorner:\"\\u231c\",ulcrop:\"\\u230f\",ultri:\"\\u25f8\",Umacr:\"\\u016a\",umacr:\"\\u016b\",uml:\"\\xa8\",UnderBar:\"_\",UnderBrace:\"\\u23df\",UnderBracket:\"\\u23b5\",UnderParenthesis:\"\\u23dd\",Union:\"\\u22c3\",UnionPlus:\"\\u228e\",Uogon:\"\\u0172\",uogon:\"\\u0173\",Uopf:\"\\ud835\\udd4c\",uopf:\"\\ud835\\udd66\",UpArrowBar:\"\\u2912\",uparrow:\"\\u2191\",UpArrow:\"\\u2191\",Uparrow:\"\\u21d1\",UpArrowDownArrow:\"\\u21c5\",updownarrow:\"\\u2195\",UpDownArrow:\"\\u2195\",Updownarrow:\"\\u21d5\",UpEquilibrium:\"\\u296e\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",uplus:\"\\u228e\",UpperLeftArrow:\"\\u2196\",UpperRightArrow:\"\\u2197\",upsi:\"\\u03c5\",Upsi:\"\\u03d2\",upsih:\"\\u03d2\",Upsilon:\"\\u03a5\",upsilon:\"\\u03c5\",UpTeeArrow:\"\\u21a5\",UpTee:\"\\u22a5\",upuparrows:\"\\u21c8\",urcorn:\"\\u231d\",urcorner:\"\\u231d\",urcrop:\"\\u230e\",Uring:\"\\u016e\",uring:\"\\u016f\",urtri:\"\\u25f9\",Uscr:\"\\ud835\\udcb0\",uscr:\"\\ud835\\udcca\",utdot:\"\\u22f0\",Utilde:\"\\u0168\",utilde:\"\\u0169\",utri:\"\\u25b5\",utrif:\"\\u25b4\",uuarr:\"\\u21c8\",Uuml:\"\\xdc\",uuml:\"\\xfc\",uwangle:\"\\u29a7\",vangrt:\"\\u299c\",varepsilon:\"\\u03f5\",varkappa:\"\\u03f0\",varnothing:\"\\u2205\",varphi:\"\\u03d5\",varpi:\"\\u03d6\",varpropto:\"\\u221d\",varr:\"\\u2195\",vArr:\"\\u21d5\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varsubsetneq:\"\\u228a\\ufe00\",varsubsetneqq:\"\\u2acb\\ufe00\",varsupsetneq:\"\\u228b\\ufe00\",varsupsetneqq:\"\\u2acc\\ufe00\",vartheta:\"\\u03d1\",vartriangleleft:\"\\u22b2\",vartriangleright:\"\\u22b3\",vBar:\"\\u2ae8\",Vbar:\"\\u2aeb\",vBarv:\"\\u2ae9\",Vcy:\"\\u0412\",vcy:\"\\u0432\",vdash:\"\\u22a2\",vDash:\"\\u22a8\",Vdash:\"\\u22a9\",VDash:\"\\u22ab\",Vdashl:\"\\u2ae6\",veebar:\"\\u22bb\",vee:\"\\u2228\",Vee:\"\\u22c1\",veeeq:\"\\u225a\",vellip:\"\\u22ee\",verbar:\"|\",Verbar:\"\\u2016\",vert:\"|\",Vert:\"\\u2016\",VerticalBar:\"\\u2223\",VerticalLine:\"|\",VerticalSeparator:\"\\u2758\",VerticalTilde:\"\\u2240\",VeryThinSpace:\"\\u200a\",Vfr:\"\\ud835\\udd19\",vfr:\"\\ud835\\udd33\",vltri:\"\\u22b2\",vnsub:\"\\u2282\\u20d2\",vnsup:\"\\u2283\\u20d2\",Vopf:\"\\ud835\\udd4d\",vopf:\"\\ud835\\udd67\",vprop:\"\\u221d\",vrtri:\"\\u22b3\",Vscr:\"\\ud835\\udcb1\",vscr:\"\\ud835\\udccb\",vsubnE:\"\\u2acb\\ufe00\",vsubne:\"\\u228a\\ufe00\",vsupnE:\"\\u2acc\\ufe00\",vsupne:\"\\u228b\\ufe00\",Vvdash:\"\\u22aa\",vzigzag:\"\\u299a\",Wcirc:\"\\u0174\",wcirc:\"\\u0175\",wedbar:\"\\u2a5f\",wedge:\"\\u2227\",Wedge:\"\\u22c0\",wedgeq:\"\\u2259\",weierp:\"\\u2118\",Wfr:\"\\ud835\\udd1a\",wfr:\"\\ud835\\udd34\",Wopf:\"\\ud835\\udd4e\",wopf:\"\\ud835\\udd68\",wp:\"\\u2118\",wr:\"\\u2240\",wreath:\"\\u2240\",Wscr:\"\\ud835\\udcb2\",wscr:\"\\ud835\\udccc\",xcap:\"\\u22c2\",xcirc:\"\\u25ef\",xcup:\"\\u22c3\",xdtri:\"\\u25bd\",Xfr:\"\\ud835\\udd1b\",xfr:\"\\ud835\\udd35\",xharr:\"\\u27f7\",xhArr:\"\\u27fa\",Xi:\"\\u039e\",xi:\"\\u03be\",xlarr:\"\\u27f5\",xlArr:\"\\u27f8\",xmap:\"\\u27fc\",xnis:\"\\u22fb\",xodot:\"\\u2a00\",Xopf:\"\\ud835\\udd4f\",xopf:\"\\ud835\\udd69\",xoplus:\"\\u2a01\",xotime:\"\\u2a02\",xrarr:\"\\u27f6\",xrArr:\"\\u27f9\",Xscr:\"\\ud835\\udcb3\",xscr:\"\\ud835\\udccd\",xsqcup:\"\\u2a06\",xuplus:\"\\u2a04\",xutri:\"\\u25b3\",xvee:\"\\u22c1\",xwedge:\"\\u22c0\",Yacute:\"\\xdd\",yacute:\"\\xfd\",YAcy:\"\\u042f\",yacy:\"\\u044f\",Ycirc:\"\\u0176\",ycirc:\"\\u0177\",Ycy:\"\\u042b\",ycy:\"\\u044b\",yen:\"\\xa5\",Yfr:\"\\ud835\\udd1c\",yfr:\"\\ud835\\udd36\",YIcy:\"\\u0407\",yicy:\"\\u0457\",Yopf:\"\\ud835\\udd50\",yopf:\"\\ud835\\udd6a\",Yscr:\"\\ud835\\udcb4\",yscr:\"\\ud835\\udcce\",YUcy:\"\\u042e\",yucy:\"\\u044e\",yuml:\"\\xff\",Yuml:\"\\u0178\",Zacute:\"\\u0179\",zacute:\"\\u017a\",Zcaron:\"\\u017d\",zcaron:\"\\u017e\",Zcy:\"\\u0417\",zcy:\"\\u0437\",Zdot:\"\\u017b\",zdot:\"\\u017c\",zeetrf:\"\\u2128\",ZeroWidthSpace:\"\\u200b\",Zeta:\"\\u0396\",zeta:\"\\u03b6\",zfr:\"\\ud835\\udd37\",Zfr:\"\\u2128\",ZHcy:\"\\u0416\",zhcy:\"\\u0436\",zigrarr:\"\\u21dd\",zopf:\"\\ud835\\udd6b\",Zopf:\"\\u2124\",Zscr:\"\\ud835\\udcb5\",zscr:\"\\ud835\\udccf\",zwj:\"\\u200d\",zwnj:\"\\u200c\"}},{}],53:[function(e,r,t){\"use strict\";function n(e){return Array.prototype.slice.call(arguments,1).forEach(function(r){r&&Object.keys(r).forEach(function(t){e[t]=r[t]})}),e}function s(e){return Object.prototype.toString.call(e)}function o(e){return\"[object String]\"===s(e)}function i(e){return\"[object Object]\"===s(e)}function a(e){return\"[object RegExp]\"===s(e)}function c(e){return\"[object Function]\"===s(e)}function l(e){return e.replace(/[.?*+^$[\\]\\\\(){}|-]/g,\"\\\\$&\")}function u(e){return Object.keys(e||{}).reduce(function(e,r){return e||b.hasOwnProperty(r)},!1)}function p(e){e.__index__=-1,e.__text_cache__=\"\"}function h(e){return function(r,t){var n=r.slice(t);return e.test(n)?n.match(e)[0].length:0}}function f(){return function(e,r){r.normalize(e)}}function d(r){function t(e){return e.replace(\"%TLDS%\",s.src_tlds)}function n(e,r){throw new Error('(LinkifyIt) Invalid schema \"'+e+'\": '+r)}var s=r.re=e(\"./lib/re\")(r.__opts__),u=r.__tlds__.slice();r.onCompile(),r.__tlds_replaced__||u.push(\"a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]\"),u.push(s.src_xn),s.src_tlds=u.join(\"|\"),s.email_fuzzy=RegExp(t(s.tpl_email_fuzzy),\"i\"),s.link_fuzzy=RegExp(t(s.tpl_link_fuzzy),\"i\"),s.link_no_ip_fuzzy=RegExp(t(s.tpl_link_no_ip_fuzzy),\"i\"),s.host_fuzzy_test=RegExp(t(s.tpl_host_fuzzy_test),\"i\");var d=[];r.__compiled__={},Object.keys(r.__schemas__).forEach(function(e){var t=r.__schemas__[e];if(null!==t){var s={validate:null,link:null};return r.__compiled__[e]=s,i(t)?(a(t.validate)?s.validate=h(t.validate):c(t.validate)?s.validate=t.validate:n(e,t),void(c(t.normalize)?s.normalize=t.normalize:t.normalize?n(e,t):s.normalize=f())):o(t)?void d.push(e):void n(e,t)}}),d.forEach(function(e){r.__compiled__[r.__schemas__[e]]&&(r.__compiled__[e].validate=r.__compiled__[r.__schemas__[e]].validate,r.__compiled__[e].normalize=r.__compiled__[r.__schemas__[e]].normalize)}),r.__compiled__[\"\"]={validate:null,normalize:f()};var m=Object.keys(r.__compiled__).filter(function(e){return e.length>0&&r.__compiled__[e]}).map(l).join(\"|\");r.re.schema_test=RegExp(\"(^|(?!_)(?:[><\\uff5c]|\"+s.src_ZPCc+\"))(\"+m+\")\",\"i\"),r.re.schema_search=RegExp(\"(^|(?!_)(?:[><\\uff5c]|\"+s.src_ZPCc+\"))(\"+m+\")\",\"ig\"),r.re.pretest=RegExp(\"(\"+r.re.schema_test.source+\")|(\"+r.re.host_fuzzy_test.source+\")|@\",\"i\"),p(r)}function m(e,r){var t=e.__index__,n=e.__last_index__,s=e.__text_cache__.slice(t,n);this.schema=e.__schema__.toLowerCase(),this.index=t+r,this.lastIndex=n+r,this.raw=s,this.text=s,this.url=s}function _(e,r){var t=new m(e,r);return e.__compiled__[t.schema].normalize(t,e),t}function g(e,r){if(!(this instanceof g))return new g(e,r);r||u(e)&&(r=e,e={}),this.__opts__=n({},b,r),this.__index__=-1,this.__last_index__=-1,this.__schema__=\"\",this.__text_cache__=\"\",this.__schemas__=n({},k,e),this.__compiled__={},this.__tlds__=v,this.__tlds_replaced__=!1,this.re={},d(this)}var b={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1},k={\"http:\":{validate:function(e,r,t){var n=e.slice(r);return t.re.http||(t.re.http=new RegExp(\"^\\\\/\\\\/\"+t.re.src_auth+t.re.src_host_port_strict+t.re.src_path,\"i\")),t.re.http.test(n)?n.match(t.re.http)[0].length:0}},\"https:\":\"http:\",\"ftp:\":\"http:\",\"//\":{validate:function(e,r,t){var n=e.slice(r);return t.re.no_http||(t.re.no_http=new RegExp(\"^\"+t.re.src_auth+\"(?:localhost|(?:(?:\"+t.re.src_domain+\")\\\\.)+\"+t.re.src_domain_root+\")\"+t.re.src_port+t.re.src_host_terminator+t.re.src_path,\"i\")),t.re.no_http.test(n)?r>=3&&\":\"===e[r-3]?0:r>=3&&\"/\"===e[r-3]?0:n.match(t.re.no_http)[0].length:0}},\"mailto:\":{validate:function(e,r,t){var n=e.slice(r);return t.re.mailto||(t.re.mailto=new RegExp(\"^\"+t.re.src_email_name+\"@\"+t.re.src_host_strict,\"i\")),t.re.mailto.test(n)?n.match(t.re.mailto)[0].length:0}}},v=\"biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\\u0440\\u0444\".split(\"|\");g.prototype.add=function(e,r){return this.__schemas__[e]=r,d(this),this},g.prototype.set=function(e){return this.__opts__=n(this.__opts__,e),this},g.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var r,t,n,s,o,i,a,c;if(this.re.schema_test.test(e))for(a=this.re.schema_search,a.lastIndex=0;null!==(r=a.exec(e));)if(s=this.testSchemaAt(e,r[2],a.lastIndex)){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+s;break}return this.__opts__.fuzzyLink&&this.__compiled__[\"http:\"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c<this.__index__)&&null!==(t=e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))&&(o=t.index+t[1].length,(this.__index__<0||o<this.__index__)&&(this.__schema__=\"\",this.__index__=o,this.__last_index__=t.index+t[0].length)),this.__opts__.fuzzyEmail&&this.__compiled__[\"mailto:\"]&&e.indexOf(\"@\")>=0&&null!==(n=e.match(this.re.email_fuzzy))&&(o=n.index+n[1].length,i=n.index+n[0].length,(this.__index__<0||o<this.__index__||o===this.__index__&&i>this.__last_index__)&&(this.__schema__=\"mailto:\",this.__index__=o,this.__last_index__=i)),this.__index__>=0},g.prototype.pretest=function(e){return this.re.pretest.test(e)},g.prototype.testSchemaAt=function(e,r,t){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(e,t,this):0},g.prototype.match=function(e){var r=0,t=[];this.__index__>=0&&this.__text_cache__===e&&(t.push(_(this,r)),r=this.__last_index__);for(var n=r?e.slice(r):e;this.test(n);)t.push(_(this,r)),n=n.slice(this.__last_index__),r+=this.__last_index__;return t.length?t:null},g.prototype.tlds=function(e,r){return e=Array.isArray(e)?e:[e],r?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(e,r,t){return e!==t[r-1]}).reverse(),d(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,d(this),this)},g.prototype.normalize=function(e){e.schema||(e.url=\"http://\"+e.url),\"mailto:\"!==e.schema||/^mailto:/i.test(e.url)||(e.url=\"mailto:\"+e.url)},g.prototype.onCompile=function(){},r.exports=g},{\"./lib/re\":54}],54:[function(e,r,t){\"use strict\";r.exports=function(r){var t={};t.src_Any=e(\"uc.micro/properties/Any/regex\").source,t.src_Cc=e(\"uc.micro/categories/Cc/regex\").source,t.src_Z=e(\"uc.micro/categories/Z/regex\").source,t.src_P=e(\"uc.micro/categories/P/regex\").source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join(\"|\"),t.src_ZCc=[t.src_Z,t.src_Cc].join(\"|\");return t.src_pseudo_letter=\"(?:(?![><\\uff5c]|\"+t.src_ZPCc+\")\"+t.src_Any+\")\",t.src_ip4=\"(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\",t.src_auth=\"(?:(?:(?!\"+t.src_ZCc+\"|[@/\\\\[\\\\]()]).)+@)?\",t.src_port=\"(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?\",t.src_host_terminator=\"(?=$|[><\\uff5c]|\"+t.src_ZPCc+\")(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|\"+t.src_ZPCc+\"))\",t.src_path=\"(?:[/?#](?:(?!\"+t.src_ZCc+\"|[><\\uff5c]|[()[\\\\]{}.,\\\"'?!\\\\-]).|\\\\[(?:(?!\"+t.src_ZCc+\"|\\\\]).)*\\\\]|\\\\((?:(?!\"+t.src_ZCc+\"|[)]).)*\\\\)|\\\\{(?:(?!\"+t.src_ZCc+'|[}]).)*\\\\}|\\\\\"(?:(?!'+t.src_ZCc+'|[\"]).)+\\\\\"|\\\\\\'(?:(?!'+t.src_ZCc+\"|[']).)+\\\\'|\\\\'(?=\"+t.src_pseudo_letter+\"|[-]).|\\\\.{2,3}[a-zA-Z0-9%/]|\\\\.(?!\"+t.src_ZCc+\"|[.]).|\"+(r&&r[\"---\"]?\"\\\\-(?!--(?:[^-]|$))(?:-*)|\":\"\\\\-+|\")+\"\\\\,(?!\"+t.src_ZCc+\").|\\\\!(?!\"+t.src_ZCc+\"|[!]).|\\\\?(?!\"+t.src_ZCc+\"|[?]).)+|\\\\/)?\",t.src_email_name='[\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]+',t.src_xn=\"xn--[a-z0-9\\\\-]{1,59}\",t.src_domain_root=\"(?:\"+t.src_xn+\"|\"+t.src_pseudo_letter+\"{1,63})\",t.src_domain=\"(?:\"+t.src_xn+\"|(?:\"+t.src_pseudo_letter+\")|(?:\"+t.src_pseudo_letter+\"(?:-(?!-)|\"+t.src_pseudo_letter+\"){0,61}\"+t.src_pseudo_letter+\"))\",t.src_host=\"(?:(?:(?:(?:\"+t.src_domain+\")\\\\.)*\"+t.src_domain+\"))\",t.tpl_host_fuzzy=\"(?:\"+t.src_ip4+\"|(?:(?:(?:\"+t.src_domain+\")\\\\.)+(?:%TLDS%)))\",t.tpl_host_no_ip_fuzzy=\"(?:(?:(?:\"+t.src_domain+\")\\\\.)+(?:%TLDS%))\",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test=\"localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:\"+t.src_ZPCc+\"|>|$))\",t.tpl_email_fuzzy=\"(^|[><\\uff5c]|\\\\(|\"+t.src_ZCc+\")(\"+t.src_email_name+\"@\"+t.tpl_host_fuzzy_strict+\")\",t.tpl_link_fuzzy=\"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|\"+t.src_ZPCc+\"))((?![$+<=>^`|\\uff5c])\"+t.tpl_host_port_fuzzy_strict+t.src_path+\")\",t.tpl_link_no_ip_fuzzy=\"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|\"+t.src_ZPCc+\"))((?![$+<=>^`|\\uff5c])\"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+\")\",t}},{\n\"uc.micro/categories/Cc/regex\":61,\"uc.micro/categories/P/regex\":63,\"uc.micro/categories/Z/regex\":64,\"uc.micro/properties/Any/regex\":66}],55:[function(e,r,t){\"use strict\";function n(e){var r,t,n=o[e];if(n)return n;for(n=o[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),n.push(t);for(r=0;r<e.length;r++)t=e.charCodeAt(r),n[t]=\"%\"+(\"0\"+t.toString(16).toUpperCase()).slice(-2);return n}function s(e,r){var t;return\"string\"!=typeof r&&(r=s.defaultChars),t=n(r),e.replace(/(%[a-f0-9]{2})+/gi,function(e){var r,n,s,o,i,a,c,l=\"\";for(r=0,n=e.length;r<n;r+=3)s=parseInt(e.slice(r+1,r+3),16),s<128?l+=t[s]:192==(224&s)&&r+3<n&&128==(192&(o=parseInt(e.slice(r+4,r+6),16)))?(c=s<<6&1984|63&o,l+=c<128?\"\\ufffd\\ufffd\":String.fromCharCode(c),r+=3):224==(240&s)&&r+6<n&&(o=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16),128==(192&o)&&128==(192&i))?(c=s<<12&61440|o<<6&4032|63&i,l+=c<2048||c>=55296&&c<=57343?\"\\ufffd\\ufffd\\ufffd\":String.fromCharCode(c),r+=6):240==(248&s)&&r+9<n&&(o=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16),a=parseInt(e.slice(r+10,r+12),16),128==(192&o)&&128==(192&i)&&128==(192&a))?(c=s<<18&1835008|o<<12&258048|i<<6&4032|63&a,c<65536||c>1114111?l+=\"\\ufffd\\ufffd\\ufffd\\ufffd\":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),r+=9):l+=\"\\ufffd\";return l})}var o={};s.defaultChars=\";/?:@&=+$,#\",s.componentChars=\"\",r.exports=s},{}],56:[function(e,r,t){\"use strict\";function n(e){var r,t,n=o[e];if(n)return n;for(n=o[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),/^[0-9a-z]$/i.test(t)?n.push(t):n.push(\"%\"+(\"0\"+r.toString(16).toUpperCase()).slice(-2));for(r=0;r<e.length;r++)n[e.charCodeAt(r)]=e[r];return n}function s(e,r,t){var o,i,a,c,l,u=\"\";for(\"string\"!=typeof r&&(t=r,r=s.defaultChars),void 0===t&&(t=!0),l=n(r),o=0,i=e.length;o<i;o++)if(a=e.charCodeAt(o),t&&37===a&&o+2<i&&/^[0-9a-f]{2}$/i.test(e.slice(o+1,o+3)))u+=e.slice(o,o+3),o+=2;else if(a<128)u+=l[a];else if(a>=55296&&a<=57343){if(a>=55296&&a<=56319&&o+1<i&&(c=e.charCodeAt(o+1))>=56320&&c<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+=\"%EF%BF%BD\"}else u+=encodeURIComponent(e[o]);return u}var o={};s.defaultChars=\";/?:@&=+$,-_.!~*'()#\",s.componentChars=\"-_.!~*'()\",r.exports=s},{}],57:[function(e,r,t){\"use strict\";r.exports=function(e){var r=\"\";return r+=e.protocol||\"\",r+=e.slashes?\"//\":\"\",r+=e.auth?e.auth+\"@\":\"\",r+=e.hostname&&e.hostname.indexOf(\":\")!==-1?\"[\"+e.hostname+\"]\":e.hostname||\"\",r+=e.port?\":\"+e.port:\"\",r+=e.pathname||\"\",r+=e.search||\"\",r+=e.hash||\"\"}},{}],58:[function(e,r,t){\"use strict\";r.exports.encode=e(\"./encode\"),r.exports.decode=e(\"./decode\"),r.exports.format=e(\"./format\"),r.exports.parse=e(\"./parse\")},{\"./decode\":55,\"./encode\":56,\"./format\":57,\"./parse\":59}],59:[function(e,r,t){\"use strict\";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}function s(e,r){if(e&&e instanceof n)return e;var t=new n;return t.parse(e,r),t}var o=/^([a-z0-9.+-]+:)/i,i=/:[0-9]*$/,a=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,c=[\"<\",\">\",'\"',\"`\",\" \",\"\\r\",\"\\n\",\"\\t\"],l=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat(c),u=[\"'\"].concat(l),p=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(u),h=[\"/\",\"?\",\"#\"],f={javascript:!0,\"javascript:\":!0},d={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0};n.prototype.parse=function(e,r){var t,n,s,i,c,l=e;if(l=l.trim(),!r&&1===e.split(\"#\").length){var u=a.exec(l);if(u)return this.pathname=u[1],u[2]&&(this.search=u[2]),this}var m=o.exec(l);if(m&&(m=m[0],s=m.toLowerCase(),this.protocol=m,l=l.substr(m.length)),(r||m||l.match(/^\\/\\/[^@\\/]+@[^@\\/]+/))&&(!(c=\"//\"===l.substr(0,2))||m&&f[m]||(l=l.substr(2),this.slashes=!0)),!f[m]&&(c||m&&!d[m])){var _=-1;for(t=0;t<h.length;t++)(i=l.indexOf(h[t]))!==-1&&(_===-1||i<_)&&(_=i);var g,b;for(b=_===-1?l.lastIndexOf(\"@\"):l.lastIndexOf(\"@\",_),b!==-1&&(g=l.slice(0,b),l=l.slice(b+1),this.auth=g),_=-1,t=0;t<p.length;t++)(i=l.indexOf(p[t]))!==-1&&(_===-1||i<_)&&(_=i);_===-1&&(_=l.length),\":\"===l[_-1]&&_--;var k=l.slice(0,_);l=l.slice(_),this.parseHost(k),this.hostname=this.hostname||\"\";var v=\"[\"===this.hostname[0]&&\"]\"===this.hostname[this.hostname.length-1];if(!v){var y=this.hostname.split(/\\./);for(t=0,n=y.length;t<n;t++){var x=y[t];if(x&&!x.match(/^[+a-z0-9A-Z_-]{0,63}$/)){for(var C=\"\",A=0,w=x.length;A<w;A++)C+=x.charCodeAt(A)>127?\"x\":x[A];if(!C.match(/^[+a-z0-9A-Z_-]{0,63}$/)){var D=y.slice(0,t),q=y.slice(t+1),E=x.match(/^([+a-z0-9A-Z_-]{0,63})(.*)$/);E&&(D.push(E[1]),q.unshift(E[2])),q.length&&(l=q.join(\".\")+l),this.hostname=D.join(\".\");break}}}}this.hostname.length>255&&(this.hostname=\"\"),v&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var S=l.indexOf(\"#\");S!==-1&&(this.hash=l.substr(S),l=l.slice(0,S));var F=l.indexOf(\"?\");return F!==-1&&(this.search=l.substr(F),l=l.slice(0,F)),l&&(this.pathname=l),d[s]&&this.hostname&&!this.pathname&&(this.pathname=\"\"),this},n.prototype.parseHost=function(e){var r=i.exec(e);r&&(r=r[0],\":\"!==r&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)},r.exports=s},{}],60:[function(r,t,n){(function(r){!function(s){function o(e){throw new RangeError(w[e])}function i(e,r){for(var t=e.length,n=[];t--;)n[t]=r(e[t]);return n}function a(e,r){var t=e.split(\"@\"),n=\"\";return t.length>1&&(n=t[0]+\"@\",e=t[1]),e=e.replace(/[\\x2E\\u3002\\uFF0E\\uFF61]/g,\".\"),n+i(e.split(\".\"),r).join(\".\")}function c(e){for(var r,t,n=[],s=0,o=e.length;s<o;)r=e.charCodeAt(s++),r>=55296&&r<=56319&&s<o?(t=e.charCodeAt(s++),56320==(64512&t)?n.push(((1023&r)<<10)+(1023&t)+65536):(n.push(r),s--)):n.push(r);return n}function l(e){return i(e,function(e){var r=\"\";return e>65535&&(e-=65536,r+=q(e>>>10&1023|55296),e=56320|1023&e),r+=q(e)}).join(\"\")}function u(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:36}function p(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function h(e,r,t){var n=0;for(e=t?D(e/700):e>>1,e+=D(e/r);e>455;n+=36)e=D(e/35);return D(n+36*e/(e+38))}function f(e){var r,t,n,s,i,a,c,p,f,d,m=[],_=e.length,g=0,b=128,k=72;for(t=e.lastIndexOf(\"-\"),t<0&&(t=0),n=0;n<t;++n)e.charCodeAt(n)>=128&&o(\"not-basic\"),m.push(e.charCodeAt(n));for(s=t>0?t+1:0;s<_;){for(i=g,a=1,c=36;s>=_&&o(\"invalid-input\"),p=u(e.charCodeAt(s++)),(p>=36||p>D((x-g)/a))&&o(\"overflow\"),g+=p*a,f=c<=k?1:c>=k+26?26:c-k,!(p<f);c+=36)d=36-f,a>D(x/d)&&o(\"overflow\"),a*=d;r=m.length+1,k=h(g-i,r,0==i),D(g/r)>x-b&&o(\"overflow\"),b+=D(g/r),g%=r,m.splice(g++,0,b)}return l(m)}function d(e){var r,t,n,s,i,a,l,u,f,d,m,_,g,b,k,v=[];for(e=c(e),_=e.length,r=128,t=0,i=72,a=0;a<_;++a)(m=e[a])<128&&v.push(q(m));for(n=s=v.length,s&&v.push(\"-\");n<_;){for(l=x,a=0;a<_;++a)(m=e[a])>=r&&m<l&&(l=m);for(g=n+1,l-r>D((x-t)/g)&&o(\"overflow\"),t+=(l-r)*g,r=l,a=0;a<_;++a)if(m=e[a],m<r&&++t>x&&o(\"overflow\"),m==r){for(u=t,f=36;d=f<=i?1:f>=i+26?26:f-i,!(u<d);f+=36)k=u-d,b=36-d,v.push(q(p(d+k%b,0))),u=D(k/b);v.push(q(p(u,0))),i=h(t,g,n==s),t=0,++n}++t,++r}return v.join(\"\")}function m(e){return a(e,function(e){return C.test(e)?f(e.slice(4).toLowerCase()):e})}function _(e){return a(e,function(e){return A.test(e)?\"xn--\"+d(e):e})}var g=\"object\"==typeof n&&n&&!n.nodeType&&n,b=\"object\"==typeof t&&t&&!t.nodeType&&t,k=\"object\"==typeof r&&r;k.global!==k&&k.window!==k&&k.self!==k||(s=k);var v,y,x=2147483647,C=/^xn--/,A=/[^\\x20-\\x7E]/,w={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},D=Math.floor,q=String.fromCharCode;if(v={version:\"1.4.1\",ucs2:{decode:c,encode:l},decode:f,encode:d,toASCII:_,toUnicode:m},\"function\"==typeof e&&\"object\"==typeof e.amd&&e.amd)e(\"punycode\",function(){return v});else if(g&&b)if(t.exports==g)b.exports=v;else for(y in v)v.hasOwnProperty(y)&&(g[y]=v[y]);else s.punycode=v}(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],61:[function(e,r,t){r.exports=/[\\0-\\x1F\\x7F-\\x9F]/},{}],62:[function(e,r,t){r.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804\\uDCBD|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/},{}],63:[function(e,r,t){r.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E44\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/},{}],64:[function(e,r,t){r.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/},{}],65:[function(e,r,t){\"use strict\";t.Any=e(\"./properties/Any/regex\"),t.Cc=e(\"./categories/Cc/regex\"),t.Cf=e(\"./categories/Cf/regex\"),t.P=e(\"./categories/P/regex\"),t.Z=e(\"./categories/Z/regex\")},{\"./categories/Cc/regex\":61,\"./categories/Cf/regex\":62,\"./categories/P/regex\":63,\"./categories/Z/regex\":64,\"./properties/Any/regex\":66}],66:[function(e,r,t){r.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/},{}],67:[function(e,r,t){\"use strict\";r.exports=e(\"./lib/\")},{\"./lib/\":9}]},{},[67])(67)});\n"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/emoji.js",
    "content": "/*! Project:无, Create:FWS 2020.01.15 14:04, Update:FWS 2020.01.15 14:04 */ \r\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.markdownitEmoji=a()}}(function(){return function(){function a(e,n,o){function i(_,t){if(!n[_]){if(!e[_]){var s=\"function\"==typeof require&&require;if(!t&&s)return s(_,!0);if(r)return r(_,!0);var l=new Error(\"Cannot find module '\"+_+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[_]={exports:{}};e[_][0].call(c.exports,function(a){return i(e[_][1][a]||a)},c,c.exports,a,e,n,o)}return n[_].exports}for(var r=\"function\"==typeof require&&require,_=0;_<o.length;_++)i(o[_]);return i}return a}()({1:[function(require,a,exports){a.exports={100:\"💯\",1234:\"🔢\",grinning:\"😀\",grimacing:\"😬\",grin:\"😁\",joy:\"😂\",rofl:\"🤣\",partying:\"🥳\",smiley:\"😃\",smile:\"😄\",sweat_smile:\"😅\",laughing:\"😆\",innocent:\"😇\",wink:\"😉\",blush:\"😊\",slightly_smiling_face:\"🙂\",upside_down_face:\"🙃\",relaxed:\"☺️\",yum:\"😋\",relieved:\"😌\",heart_eyes:\"😍\",smiling_face_with_three_hearts:\"🥰\",kissing_heart:\"😘\",kissing:\"😗\",kissing_smiling_eyes:\"😙\",kissing_closed_eyes:\"😚\",stuck_out_tongue_winking_eye:\"😜\",zany:\"🤪\",raised_eyebrow:\"🤨\",monocle:\"🧐\",stuck_out_tongue_closed_eyes:\"😝\",stuck_out_tongue:\"😛\",money_mouth_face:\"🤑\",nerd_face:\"🤓\",sunglasses:\"😎\",star_struck:\"🤩\",clown_face:\"🤡\",cowboy_hat_face:\"🤠\",hugs:\"🤗\",smirk:\"😏\",no_mouth:\"😶\",neutral_face:\"😐\",expressionless:\"😑\",unamused:\"😒\",roll_eyes:\"🙄\",thinking:\"🤔\",lying_face:\"🤥\",hand_over_mouth:\"🤭\",shushing:\"🤫\",symbols_over_mouth:\"🤬\",exploding_head:\"🤯\",flushed:\"😳\",disappointed:\"😞\",worried:\"😟\",angry:\"😠\",rage:\"😡\",pensive:\"😔\",confused:\"😕\",slightly_frowning_face:\"🙁\",frowning_face:\"☹\",persevere:\"😣\",confounded:\"😖\",tired_face:\"😫\",weary:\"😩\",pleading:\"🥺\",triumph:\"😤\",open_mouth:\"😮\",scream:\"😱\",fearful:\"😨\",cold_sweat:\"😰\",hushed:\"😯\",frowning:\"😦\",anguished:\"😧\",cry:\"😢\",disappointed_relieved:\"😥\",drooling_face:\"🤤\",sleepy:\"😪\",sweat:\"😓\",hot:\"🥵\",cold:\"🥶\",sob:\"😭\",dizzy_face:\"😵\",astonished:\"😲\",zipper_mouth_face:\"🤐\",nauseated_face:\"🤢\",sneezing_face:\"🤧\",vomiting:\"🤮\",mask:\"😷\",face_with_thermometer:\"🤒\",face_with_head_bandage:\"🤕\",woozy:\"🥴\",sleeping:\"😴\",zzz:\"💤\",poop:\"💩\",smiling_imp:\"😈\",imp:\"👿\",japanese_ogre:\"👹\",japanese_goblin:\"👺\",skull:\"💀\",ghost:\"👻\",alien:\"👽\",robot:\"🤖\",smiley_cat:\"😺\",smile_cat:\"😸\",joy_cat:\"😹\",heart_eyes_cat:\"😻\",smirk_cat:\"😼\",kissing_cat:\"😽\",scream_cat:\"🙀\",crying_cat_face:\"😿\",pouting_cat:\"😾\",palms_up:\"🤲\",raised_hands:\"🙌\",clap:\"👏\",wave:\"👋\",call_me_hand:\"🤙\",\"+1\":\"👍\",\"-1\":\"👎\",facepunch:\"👊\",fist:\"✊\",fist_left:\"🤛\",fist_right:\"🤜\",v:\"✌\",ok_hand:\"👌\",raised_hand:\"✋\",raised_back_of_hand:\"🤚\",open_hands:\"👐\",muscle:\"💪\",pray:\"🙏\",foot:\"🦶\",leg:\"🦵\",handshake:\"🤝\",point_up:\"☝\",point_up_2:\"👆\",point_down:\"👇\",point_left:\"👈\",point_right:\"👉\",fu:\"🖕\",raised_hand_with_fingers_splayed:\"🖐\",love_you:\"🤟\",metal:\"🤘\",crossed_fingers:\"🤞\",vulcan_salute:\"🖖\",writing_hand:\"✍\",selfie:\"🤳\",nail_care:\"💅\",lips:\"👄\",tooth:\"🦷\",tongue:\"👅\",ear:\"👂\",nose:\"👃\",eye:\"👁\",eyes:\"👀\",brain:\"🧠\",bust_in_silhouette:\"👤\",busts_in_silhouette:\"👥\",speaking_head:\"🗣\",baby:\"👶\",child:\"🧒\",boy:\"👦\",girl:\"👧\",adult:\"🧑\",man:\"👨\",woman:\"👩\",blonde_woman:\"👱‍♀️\",blonde_man:\"👱\",bearded_person:\"🧔\",older_adult:\"🧓\",older_man:\"👴\",older_woman:\"👵\",man_with_gua_pi_mao:\"👲\",woman_with_headscarf:\"🧕\",woman_with_turban:\"👳‍♀️\",man_with_turban:\"👳\",policewoman:\"👮‍♀️\",policeman:\"👮\",construction_worker_woman:\"👷‍♀️\",construction_worker_man:\"👷\",guardswoman:\"💂‍♀️\",guardsman:\"💂\",female_detective:\"🕵️‍♀️\",male_detective:\"🕵\",woman_health_worker:\"👩‍⚕️\",man_health_worker:\"👨‍⚕️\",woman_farmer:\"👩‍🌾\",man_farmer:\"👨‍🌾\",woman_cook:\"👩‍🍳\",man_cook:\"👨‍🍳\",woman_student:\"👩‍🎓\",man_student:\"👨‍🎓\",woman_singer:\"👩‍🎤\",man_singer:\"👨‍🎤\",woman_teacher:\"👩‍🏫\",man_teacher:\"👨‍🏫\",woman_factory_worker:\"👩‍🏭\",man_factory_worker:\"👨‍🏭\",woman_technologist:\"👩‍💻\",man_technologist:\"👨‍💻\",woman_office_worker:\"👩‍💼\",man_office_worker:\"👨‍💼\",woman_mechanic:\"👩‍🔧\",man_mechanic:\"👨‍🔧\",woman_scientist:\"👩‍🔬\",man_scientist:\"👨‍🔬\",woman_artist:\"👩‍🎨\",man_artist:\"👨‍🎨\",woman_firefighter:\"👩‍🚒\",man_firefighter:\"👨‍🚒\",woman_pilot:\"👩‍✈️\",man_pilot:\"👨‍✈️\",woman_astronaut:\"👩‍🚀\",man_astronaut:\"👨‍🚀\",woman_judge:\"👩‍⚖️\",man_judge:\"👨‍⚖️\",woman_superhero:\"🦸‍♀️\",man_superhero:\"🦸‍♂️\",woman_supervillain:\"🦹‍♀️\",man_supervillain:\"🦹‍♂️\",mrs_claus:\"🤶\",santa:\"🎅\",sorceress:\"🧙‍♀️\",wizard:\"🧙‍♂️\",woman_elf:\"🧝‍♀️\",man_elf:\"🧝‍♂️\",woman_vampire:\"🧛‍♀️\",man_vampire:\"🧛‍♂️\",woman_zombie:\"🧟‍♀️\",man_zombie:\"🧟‍♂️\",woman_genie:\"🧞‍♀️\",man_genie:\"🧞‍♂️\",mermaid:\"🧜‍♀️\",merman:\"🧜‍♂️\",woman_fairy:\"🧚‍♀️\",man_fairy:\"🧚‍♂️\",angel:\"👼\",pregnant_woman:\"🤰\",breastfeeding:\"🤱\",princess:\"👸\",prince:\"🤴\",bride_with_veil:\"👰\",man_in_tuxedo:\"🤵\",running_woman:\"🏃‍♀️\",running_man:\"🏃\",walking_woman:\"🚶‍♀️\",walking_man:\"🚶\",dancer:\"💃\",man_dancing:\"🕺\",dancing_women:\"👯\",dancing_men:\"👯‍♂️\",couple:\"👫\",two_men_holding_hands:\"👬\",two_women_holding_hands:\"👭\",bowing_woman:\"🙇‍♀️\",bowing_man:\"🙇\",man_facepalming:\"🤦‍♂️\",woman_facepalming:\"🤦‍♀️\",woman_shrugging:\"🤷\",man_shrugging:\"🤷‍♂️\",tipping_hand_woman:\"💁\",tipping_hand_man:\"💁‍♂️\",no_good_woman:\"🙅\",no_good_man:\"🙅‍♂️\",ok_woman:\"🙆\",ok_man:\"🙆‍♂️\",raising_hand_woman:\"🙋\",raising_hand_man:\"🙋‍♂️\",pouting_woman:\"🙎\",pouting_man:\"🙎‍♂️\",frowning_woman:\"🙍\",frowning_man:\"🙍‍♂️\",haircut_woman:\"💇\",haircut_man:\"💇‍♂️\",massage_woman:\"💆\",massage_man:\"💆‍♂️\",woman_in_steamy_room:\"🧖‍♀️\",man_in_steamy_room:\"🧖‍♂️\",couple_with_heart_woman_man:\"💑\",couple_with_heart_woman_woman:\"👩‍❤️‍👩\",couple_with_heart_man_man:\"👨‍❤️‍👨\",couplekiss_man_woman:\"💏\",couplekiss_woman_woman:\"👩‍❤️‍💋‍👩\",couplekiss_man_man:\"👨‍❤️‍💋‍👨\",family_man_woman_boy:\"👪\",family_man_woman_girl:\"👨‍👩‍👧\",family_man_woman_girl_boy:\"👨‍👩‍👧‍👦\",family_man_woman_boy_boy:\"👨‍👩‍👦‍👦\",family_man_woman_girl_girl:\"👨‍👩‍👧‍👧\",family_woman_woman_boy:\"👩‍👩‍👦\",family_woman_woman_girl:\"👩‍👩‍👧\",family_woman_woman_girl_boy:\"👩‍👩‍👧‍👦\",family_woman_woman_boy_boy:\"👩‍👩‍👦‍👦\",family_woman_woman_girl_girl:\"👩‍👩‍👧‍👧\",family_man_man_boy:\"👨‍👨‍👦\",family_man_man_girl:\"👨‍👨‍👧\",family_man_man_girl_boy:\"👨‍👨‍👧‍👦\",family_man_man_boy_boy:\"👨‍👨‍👦‍👦\",family_man_man_girl_girl:\"👨‍👨‍👧‍👧\",family_woman_boy:\"👩‍👦\",family_woman_girl:\"👩‍👧\",family_woman_girl_boy:\"👩‍👧‍👦\",family_woman_boy_boy:\"👩‍👦‍👦\",family_woman_girl_girl:\"👩‍👧‍👧\",family_man_boy:\"👨‍👦\",family_man_girl:\"👨‍👧\",family_man_girl_boy:\"👨‍👧‍👦\",family_man_boy_boy:\"👨‍👦‍👦\",family_man_girl_girl:\"👨‍👧‍👧\",yarn:\"🧶\",thread:\"🧵\",coat:\"🧥\",labcoat:\"🥼\",womans_clothes:\"👚\",tshirt:\"👕\",jeans:\"👖\",necktie:\"👔\",dress:\"👗\",bikini:\"👙\",kimono:\"👘\",lipstick:\"💄\",kiss:\"💋\",footprints:\"👣\",flat_shoe:\"🥿\",high_heel:\"👠\",sandal:\"👡\",boot:\"👢\",mans_shoe:\"👞\",athletic_shoe:\"👟\",hiking_boot:\"🥾\",socks:\"🧦\",gloves:\"🧤\",scarf:\"🧣\",womans_hat:\"👒\",tophat:\"🎩\",billed_hat:\"🧢\",rescue_worker_helmet:\"⛑\",mortar_board:\"🎓\",crown:\"👑\",school_satchel:\"🎒\",luggage:\"🧳\",pouch:\"👝\",purse:\"👛\",handbag:\"👜\",briefcase:\"💼\",eyeglasses:\"👓\",dark_sunglasses:\"🕶\",goggles:\"🥽\",ring:\"💍\",closed_umbrella:\"🌂\",dog:\"🐶\",cat:\"🐱\",mouse:\"🐭\",hamster:\"🐹\",rabbit:\"🐰\",fox_face:\"🦊\",bear:\"🐻\",panda_face:\"🐼\",koala:\"🐨\",tiger:\"🐯\",lion:\"🦁\",cow:\"🐮\",pig:\"🐷\",pig_nose:\"🐽\",frog:\"🐸\",squid:\"🦑\",octopus:\"🐙\",shrimp:\"🦐\",monkey_face:\"🐵\",gorilla:\"🦍\",see_no_evil:\"🙈\",hear_no_evil:\"🙉\",speak_no_evil:\"🙊\",monkey:\"🐒\",chicken:\"🐔\",penguin:\"🐧\",bird:\"🐦\",baby_chick:\"🐤\",hatching_chick:\"🐣\",hatched_chick:\"🐥\",duck:\"🦆\",eagle:\"🦅\",owl:\"🦉\",bat:\"🦇\",wolf:\"🐺\",boar:\"🐗\",horse:\"🐴\",unicorn:\"🦄\",honeybee:\"🐝\",bug:\"🐛\",butterfly:\"🦋\",snail:\"🐌\",beetle:\"🐞\",ant:\"🐜\",grasshopper:\"🦗\",spider:\"🕷\",scorpion:\"🦂\",crab:\"🦀\",snake:\"🐍\",lizard:\"🦎\",\"t-rex\":\"🦖\",sauropod:\"🦕\",turtle:\"🐢\",tropical_fish:\"🐠\",fish:\"🐟\",blowfish:\"🐡\",dolphin:\"🐬\",shark:\"🦈\",whale:\"🐳\",whale2:\"🐋\",crocodile:\"🐊\",leopard:\"🐆\",zebra:\"🦓\",tiger2:\"🐅\",water_buffalo:\"🐃\",ox:\"🐂\",cow2:\"🐄\",deer:\"🦌\",dromedary_camel:\"🐪\",camel:\"🐫\",giraffe:\"🦒\",elephant:\"🐘\",rhinoceros:\"🦏\",goat:\"🐐\",ram:\"🐏\",sheep:\"🐑\",racehorse:\"🐎\",pig2:\"🐖\",rat:\"🐀\",mouse2:\"🐁\",rooster:\"🐓\",turkey:\"🦃\",dove:\"🕊\",dog2:\"🐕\",poodle:\"🐩\",cat2:\"🐈\",rabbit2:\"🐇\",chipmunk:\"🐿\",hedgehog:\"🦔\",raccoon:\"🦝\",llama:\"🦙\",hippopotamus:\"🦛\",kangaroo:\"🦘\",badger:\"🦡\",swan:\"🦢\",peacock:\"🦚\",parrot:\"🦜\",lobster:\"🦞\",mosquito:\"🦟\",paw_prints:\"🐾\",dragon:\"🐉\",dragon_face:\"🐲\",cactus:\"🌵\",christmas_tree:\"🎄\",evergreen_tree:\"🌲\",deciduous_tree:\"🌳\",palm_tree:\"🌴\",seedling:\"🌱\",herb:\"🌿\",shamrock:\"☘\",four_leaf_clover:\"🍀\",bamboo:\"🎍\",tanabata_tree:\"🎋\",leaves:\"🍃\",fallen_leaf:\"🍂\",maple_leaf:\"🍁\",ear_of_rice:\"🌾\",hibiscus:\"🌺\",sunflower:\"🌻\",rose:\"🌹\",wilted_flower:\"🥀\",tulip:\"🌷\",blossom:\"🌼\",cherry_blossom:\"🌸\",bouquet:\"💐\",mushroom:\"🍄\",chestnut:\"🌰\",jack_o_lantern:\"🎃\",shell:\"🐚\",spider_web:\"🕸\",earth_americas:\"🌎\",earth_africa:\"🌍\",earth_asia:\"🌏\",full_moon:\"🌕\",waning_gibbous_moon:\"🌖\",last_quarter_moon:\"🌗\",waning_crescent_moon:\"🌘\",new_moon:\"🌑\",waxing_crescent_moon:\"🌒\",first_quarter_moon:\"🌓\",waxing_gibbous_moon:\"🌔\",new_moon_with_face:\"🌚\",full_moon_with_face:\"🌝\",first_quarter_moon_with_face:\"🌛\",last_quarter_moon_with_face:\"🌜\",sun_with_face:\"🌞\",crescent_moon:\"🌙\",star:\"⭐\",star2:\"🌟\",dizzy:\"💫\",sparkles:\"✨\",comet:\"☄\",sunny:\"☀️\",sun_behind_small_cloud:\"🌤\",partly_sunny:\"⛅\",sun_behind_large_cloud:\"🌥\",sun_behind_rain_cloud:\"🌦\",cloud:\"☁️\",cloud_with_rain:\"🌧\",cloud_with_lightning_and_rain:\"⛈\",cloud_with_lightning:\"🌩\",zap:\"⚡\",fire:\"🔥\",boom:\"💥\",snowflake:\"❄️\",cloud_with_snow:\"🌨\",snowman:\"⛄\",snowman_with_snow:\"☃\",wind_face:\"🌬\",dash:\"💨\",tornado:\"🌪\",fog:\"🌫\",open_umbrella:\"☂\",umbrella:\"☔\",droplet:\"💧\",sweat_drops:\"💦\",ocean:\"🌊\",green_apple:\"🍏\",apple:\"🍎\",pear:\"🍐\",tangerine:\"🍊\",lemon:\"🍋\",banana:\"🍌\",watermelon:\"🍉\",grapes:\"🍇\",strawberry:\"🍓\",melon:\"🍈\",cherries:\"🍒\",peach:\"🍑\",pineapple:\"🍍\",coconut:\"🥥\",kiwi_fruit:\"🥝\",mango:\"🥭\",avocado:\"🥑\",broccoli:\"🥦\",tomato:\"🍅\",eggplant:\"🍆\",cucumber:\"🥒\",carrot:\"🥕\",hot_pepper:\"🌶\",potato:\"🥔\",corn:\"🌽\",leafy_greens:\"🥬\",sweet_potato:\"🍠\",peanuts:\"🥜\",honey_pot:\"🍯\",croissant:\"🥐\",bread:\"🍞\",baguette_bread:\"🥖\",bagel:\"🥯\",pretzel:\"🥨\",cheese:\"🧀\",egg:\"🥚\",bacon:\"🥓\",steak:\"🥩\",pancakes:\"🥞\",poultry_leg:\"🍗\",meat_on_bone:\"🍖\",bone:\"🦴\",fried_shrimp:\"🍤\",fried_egg:\"🍳\",hamburger:\"🍔\",fries:\"🍟\",stuffed_flatbread:\"🥙\",hotdog:\"🌭\",pizza:\"🍕\",sandwich:\"🥪\",canned_food:\"🥫\",spaghetti:\"🍝\",taco:\"🌮\",burrito:\"🌯\",green_salad:\"🥗\",shallow_pan_of_food:\"🥘\",ramen:\"🍜\",stew:\"🍲\",fish_cake:\"🍥\",fortune_cookie:\"🥠\",sushi:\"🍣\",bento:\"🍱\",curry:\"🍛\",rice_ball:\"🍙\",rice:\"🍚\",rice_cracker:\"🍘\",oden:\"🍢\",dango:\"🍡\",shaved_ice:\"🍧\",ice_cream:\"🍨\",icecream:\"🍦\",pie:\"🥧\",cake:\"🍰\",cupcake:\"🧁\",moon_cake:\"🥮\",birthday:\"🎂\",custard:\"🍮\",candy:\"🍬\",lollipop:\"🍭\",chocolate_bar:\"🍫\",popcorn:\"🍿\",dumpling:\"🥟\",doughnut:\"🍩\",cookie:\"🍪\",milk_glass:\"🥛\",beer:\"🍺\",beers:\"🍻\",clinking_glasses:\"🥂\",wine_glass:\"🍷\",tumbler_glass:\"🥃\",cocktail:\"🍸\",tropical_drink:\"🍹\",champagne:\"🍾\",sake:\"🍶\",tea:\"🍵\",cup_with_straw:\"🥤\",coffee:\"☕\",baby_bottle:\"🍼\",salt:\"🧂\",spoon:\"🥄\",fork_and_knife:\"🍴\",plate_with_cutlery:\"🍽\",bowl_with_spoon:\"🥣\",takeout_box:\"🥡\",chopsticks:\"🥢\",soccer:\"⚽\",basketball:\"🏀\",football:\"🏈\",baseball:\"⚾\",softball:\"🥎\",tennis:\"🎾\",volleyball:\"🏐\",rugby_football:\"🏉\",flying_disc:\"🥏\",\"8ball\":\"🎱\",golf:\"⛳\",golfing_woman:\"🏌️‍♀️\",golfing_man:\"🏌\",ping_pong:\"🏓\",badminton:\"🏸\",goal_net:\"🥅\",ice_hockey:\"🏒\",field_hockey:\"🏑\",lacrosse:\"🥍\",cricket:\"🏏\",ski:\"🎿\",skier:\"⛷\",snowboarder:\"🏂\",person_fencing:\"🤺\",women_wrestling:\"🤼‍♀️\",men_wrestling:\"🤼‍♂️\",woman_cartwheeling:\"🤸‍♀️\",man_cartwheeling:\"🤸‍♂️\",woman_playing_handball:\"🤾‍♀️\",man_playing_handball:\"🤾‍♂️\",ice_skate:\"⛸\",curling_stone:\"🥌\",skateboard:\"🛹\",sled:\"🛷\",bow_and_arrow:\"🏹\",fishing_pole_and_fish:\"🎣\",boxing_glove:\"🥊\",martial_arts_uniform:\"🥋\",rowing_woman:\"🚣‍♀️\",rowing_man:\"🚣\",climbing_woman:\"🧗‍♀️\",climbing_man:\"🧗‍♂️\",swimming_woman:\"🏊‍♀️\",swimming_man:\"🏊\",woman_playing_water_polo:\"🤽‍♀️\",man_playing_water_polo:\"🤽‍♂️\",woman_in_lotus_position:\"🧘‍♀️\",man_in_lotus_position:\"🧘‍♂️\",surfing_woman:\"🏄‍♀️\",surfing_man:\"🏄\",bath:\"🛀\",basketball_woman:\"⛹️‍♀️\",basketball_man:\"⛹\",weight_lifting_woman:\"🏋️‍♀️\",weight_lifting_man:\"🏋\",biking_woman:\"🚴‍♀️\",biking_man:\"🚴\",mountain_biking_woman:\"🚵‍♀️\",mountain_biking_man:\"🚵\",horse_racing:\"🏇\",business_suit_levitating:\"🕴\",trophy:\"🏆\",running_shirt_with_sash:\"🎽\",medal_sports:\"🏅\",medal_military:\"🎖\",\"1st_place_medal\":\"🥇\",\"2nd_place_medal\":\"🥈\",\"3rd_place_medal\":\"🥉\",reminder_ribbon:\"🎗\",rosette:\"🏵\",ticket:\"🎫\",tickets:\"🎟\",performing_arts:\"🎭\",art:\"🎨\",circus_tent:\"🎪\",woman_juggling:\"🤹‍♀️\",man_juggling:\"🤹‍♂️\",microphone:\"🎤\",headphones:\"🎧\",musical_score:\"🎼\",musical_keyboard:\"🎹\",drum:\"🥁\",saxophone:\"🎷\",trumpet:\"🎺\",guitar:\"🎸\",violin:\"🎻\",clapper:\"🎬\",video_game:\"🎮\",space_invader:\"👾\",dart:\"🎯\",game_die:\"🎲\",chess_pawn:\"♟\",slot_machine:\"🎰\",jigsaw:\"🧩\",bowling:\"🎳\",red_car:\"🚗\",taxi:\"🚕\",blue_car:\"🚙\",bus:\"🚌\",trolleybus:\"🚎\",racing_car:\"🏎\",police_car:\"🚓\",ambulance:\"🚑\",fire_engine:\"🚒\",minibus:\"🚐\",truck:\"🚚\",articulated_lorry:\"🚛\",tractor:\"🚜\",kick_scooter:\"🛴\",motorcycle:\"🏍\",bike:\"🚲\",motor_scooter:\"🛵\",rotating_light:\"🚨\",oncoming_police_car:\"🚔\",oncoming_bus:\"🚍\",oncoming_automobile:\"🚘\",oncoming_taxi:\"🚖\",aerial_tramway:\"🚡\",mountain_cableway:\"🚠\",suspension_railway:\"🚟\",railway_car:\"🚃\",train:\"🚋\",monorail:\"🚝\",bullettrain_side:\"🚄\",bullettrain_front:\"🚅\",light_rail:\"🚈\",mountain_railway:\"🚞\",steam_locomotive:\"🚂\",train2:\"🚆\",metro:\"🚇\",tram:\"🚊\",station:\"🚉\",flying_saucer:\"🛸\",helicopter:\"🚁\",small_airplane:\"🛩\",airplane:\"✈️\",flight_departure:\"🛫\",flight_arrival:\"🛬\",sailboat:\"⛵\",motor_boat:\"🛥\",speedboat:\"🚤\",ferry:\"⛴\",passenger_ship:\"🛳\",rocket:\"🚀\",artificial_satellite:\"🛰\",seat:\"💺\",canoe:\"🛶\",anchor:\"⚓\",construction:\"🚧\",fuelpump:\"⛽\",busstop:\"🚏\",vertical_traffic_light:\"🚦\",traffic_light:\"🚥\",checkered_flag:\"🏁\",ship:\"🚢\",ferris_wheel:\"🎡\",roller_coaster:\"🎢\",carousel_horse:\"🎠\",building_construction:\"🏗\",foggy:\"🌁\",tokyo_tower:\"🗼\",factory:\"🏭\",fountain:\"⛲\",rice_scene:\"🎑\",mountain:\"⛰\",mountain_snow:\"🏔\",mount_fuji:\"🗻\",volcano:\"🌋\",japan:\"🗾\",camping:\"🏕\",tent:\"⛺\",national_park:\"🏞\",motorway:\"🛣\",railway_track:\"🛤\",sunrise:\"🌅\",sunrise_over_mountains:\"🌄\",desert:\"🏜\",beach_umbrella:\"🏖\",desert_island:\"🏝\",city_sunrise:\"🌇\",city_sunset:\"🌆\",cityscape:\"🏙\",night_with_stars:\"🌃\",bridge_at_night:\"🌉\",milky_way:\"🌌\",stars:\"🌠\",sparkler:\"🎇\",fireworks:\"🎆\",rainbow:\"🌈\",houses:\"🏘\",european_castle:\"🏰\",japanese_castle:\"🏯\",stadium:\"🏟\",statue_of_liberty:\"🗽\",house:\"🏠\",house_with_garden:\"🏡\",derelict_house:\"🏚\",office:\"🏢\",department_store:\"🏬\",post_office:\"🏣\",european_post_office:\"🏤\",hospital:\"🏥\",bank:\"🏦\",hotel:\"🏨\",convenience_store:\"🏪\",school:\"🏫\",love_hotel:\"🏩\",wedding:\"💒\",classical_building:\"🏛\",church:\"⛪\",mosque:\"🕌\",synagogue:\"🕍\",kaaba:\"🕋\",shinto_shrine:\"⛩\",watch:\"⌚\",iphone:\"📱\",calling:\"📲\",computer:\"💻\",keyboard:\"⌨\",desktop_computer:\"🖥\",printer:\"🖨\",computer_mouse:\"🖱\",trackball:\"🖲\",joystick:\"🕹\",clamp:\"🗜\",minidisc:\"💽\",floppy_disk:\"💾\",cd:\"💿\",dvd:\"📀\",vhs:\"📼\",camera:\"📷\",camera_flash:\"📸\",video_camera:\"📹\",movie_camera:\"🎥\",film_projector:\"📽\",film_strip:\"🎞\",telephone_receiver:\"📞\",phone:\"☎️\",pager:\"📟\",fax:\"📠\",tv:\"📺\",radio:\"📻\",studio_microphone:\"🎙\",level_slider:\"🎚\",control_knobs:\"🎛\",compass:\"🧭\",stopwatch:\"⏱\",timer_clock:\"⏲\",alarm_clock:\"⏰\",mantelpiece_clock:\"🕰\",hourglass_flowing_sand:\"⏳\",hourglass:\"⌛\",satellite:\"📡\",battery:\"🔋\",electric_plug:\"🔌\",bulb:\"💡\",flashlight:\"🔦\",candle:\"🕯\",fire_extinguisher:\"🧯\",wastebasket:\"🗑\",oil_drum:\"🛢\",money_with_wings:\"💸\",dollar:\"💵\",yen:\"💴\",euro:\"💶\",pound:\"💷\",moneybag:\"💰\",credit_card:\"💳\",gem:\"💎\",balance_scale:\"⚖\",toolbox:\"🧰\",wrench:\"🔧\",hammer:\"🔨\",hammer_and_pick:\"⚒\",hammer_and_wrench:\"🛠\",pick:\"⛏\",nut_and_bolt:\"🔩\",gear:\"⚙\",brick:\"🧱\",chains:\"⛓\",magnet:\"🧲\",gun:\"🔫\",bomb:\"💣\",firecracker:\"🧨\",hocho:\"🔪\",dagger:\"🗡\",crossed_swords:\"⚔\",shield:\"🛡\",smoking:\"🚬\",skull_and_crossbones:\"☠\",coffin:\"⚰\",funeral_urn:\"⚱\",amphora:\"🏺\",crystal_ball:\"🔮\",prayer_beads:\"📿\",nazar_amulet:\"🧿\",barber:\"💈\",alembic:\"⚗\",telescope:\"🔭\",microscope:\"🔬\",hole:\"🕳\",pill:\"💊\",syringe:\"💉\",dna:\"🧬\",microbe:\"🦠\",petri_dish:\"🧫\",test_tube:\"🧪\",thermometer:\"🌡\",broom:\"🧹\",basket:\"🧺\",toilet_paper:\"🧻\",label:\"🏷\",bookmark:\"🔖\",toilet:\"🚽\",shower:\"🚿\",bathtub:\"🛁\",soap:\"🧼\",sponge:\"🧽\",lotion_bottle:\"🧴\",key:\"🔑\",old_key:\"🗝\",couch_and_lamp:\"🛋\",sleeping_bed:\"🛌\",bed:\"🛏\",door:\"🚪\",bellhop_bell:\"🛎\",teddy_bear:\"🧸\",framed_picture:\"🖼\",world_map:\"🗺\",parasol_on_ground:\"⛱\",moyai:\"🗿\",shopping:\"🛍\",shopping_cart:\"🛒\",balloon:\"🎈\",flags:\"🎏\",ribbon:\"🎀\",gift:\"🎁\",confetti_ball:\"🎊\",tada:\"🎉\",dolls:\"🎎\",wind_chime:\"🎐\",crossed_flags:\"🎌\",izakaya_lantern:\"🏮\",red_envelope:\"🧧\",email:\"✉️\",envelope_with_arrow:\"📩\",incoming_envelope:\"📨\",\"e-mail\":\"📧\",love_letter:\"💌\",postbox:\"📮\",mailbox_closed:\"📪\",mailbox:\"📫\",mailbox_with_mail:\"📬\",mailbox_with_no_mail:\"📭\",package:\"📦\",postal_horn:\"📯\",inbox_tray:\"📥\",outbox_tray:\"📤\",scroll:\"📜\",page_with_curl:\"📃\",bookmark_tabs:\"📑\",receipt:\"🧾\",bar_chart:\"📊\",chart_with_upwards_trend:\"📈\",chart_with_downwards_trend:\"📉\",page_facing_up:\"📄\",date:\"📅\",calendar:\"📆\",spiral_calendar:\"🗓\",card_index:\"📇\",card_file_box:\"🗃\",ballot_box:\"🗳\",file_cabinet:\"🗄\",clipboard:\"📋\",spiral_notepad:\"🗒\",file_folder:\"📁\",open_file_folder:\"📂\",card_index_dividers:\"🗂\",newspaper_roll:\"🗞\",newspaper:\"📰\",notebook:\"📓\",closed_book:\"📕\",green_book:\"📗\",blue_book:\"📘\",orange_book:\"📙\",notebook_with_decorative_cover:\"📔\",ledger:\"📒\",books:\"📚\",open_book:\"📖\",safety_pin:\"🧷\",link:\"🔗\",paperclip:\"📎\",paperclips:\"🖇\",scissors:\"✂️\",triangular_ruler:\"📐\",straight_ruler:\"📏\",abacus:\"🧮\",pushpin:\"📌\",round_pushpin:\"📍\",triangular_flag_on_post:\"🚩\",white_flag:\"🏳\",black_flag:\"🏴\",rainbow_flag:\"🏳️‍🌈\",closed_lock_with_key:\"🔐\",lock:\"🔒\",unlock:\"🔓\",lock_with_ink_pen:\"🔏\",pen:\"🖊\",fountain_pen:\"🖋\",black_nib:\"✒️\",memo:\"📝\",pencil2:\"✏️\",crayon:\"🖍\",paintbrush:\"🖌\",mag:\"🔍\",mag_right:\"🔎\",heart:\"❤️\",orange_heart:\"🧡\",yellow_heart:\"💛\",green_heart:\"💚\",blue_heart:\"💙\",purple_heart:\"💜\",black_heart:\"🖤\",broken_heart:\"💔\",heavy_heart_exclamation:\"❣\",two_hearts:\"💕\",revolving_hearts:\"💞\",heartbeat:\"💓\",heartpulse:\"💗\",sparkling_heart:\"💖\",cupid:\"💘\",gift_heart:\"💝\",heart_decoration:\"💟\",peace_symbol:\"☮\",latin_cross:\"✝\",star_and_crescent:\"☪\",om:\"🕉\",wheel_of_dharma:\"☸\",star_of_david:\"✡\",six_pointed_star:\"🔯\",menorah:\"🕎\",yin_yang:\"☯\",orthodox_cross:\"☦\",place_of_worship:\"🛐\",ophiuchus:\"⛎\",aries:\"♈\",taurus:\"♉\",gemini:\"♊\",cancer:\"♋\",leo:\"♌\",virgo:\"♍\",libra:\"♎\",scorpius:\"♏\",sagittarius:\"♐\",capricorn:\"♑\",aquarius:\"♒\",pisces:\"♓\",id:\"🆔\",atom_symbol:\"⚛\",u7a7a:\"🈳\",u5272:\"🈹\",radioactive:\"☢\",biohazard:\"☣\",mobile_phone_off:\"📴\",vibration_mode:\"📳\",u6709:\"🈶\",u7121:\"🈚\",u7533:\"🈸\",u55b6:\"🈺\",u6708:\"🈷️\",eight_pointed_black_star:\"✴️\",vs:\"🆚\",accept:\"🉑\",white_flower:\"💮\",ideograph_advantage:\"🉐\",secret:\"㊙️\",congratulations:\"㊗️\",u5408:\"🈴\",u6e80:\"🈵\",u7981:\"🈲\",a:\"🅰️\",b:\"🅱️\",ab:\"🆎\",cl:\"🆑\",o2:\"🅾️\",sos:\"🆘\",no_entry:\"⛔\",name_badge:\"📛\",no_entry_sign:\"🚫\",x:\"❌\",o:\"⭕\",stop_sign:\"🛑\",anger:\"💢\",hotsprings:\"♨️\",no_pedestrians:\"🚷\",do_not_litter:\"🚯\",no_bicycles:\"🚳\",\"non-potable_water\":\"🚱\",underage:\"🔞\",no_mobile_phones:\"📵\",exclamation:\"❗\",grey_exclamation:\"❕\",question:\"❓\",grey_question:\"❔\",bangbang:\"‼️\",interrobang:\"⁉️\",low_brightness:\"🔅\",high_brightness:\"🔆\",trident:\"🔱\",fleur_de_lis:\"⚜\",part_alternation_mark:\"〽️\",warning:\"⚠️\",children_crossing:\"🚸\",beginner:\"🔰\",recycle:\"♻️\",u6307:\"🈯\",chart:\"💹\",sparkle:\"❇️\",eight_spoked_asterisk:\"✳️\",negative_squared_cross_mark:\"❎\",white_check_mark:\"✅\",diamond_shape_with_a_dot_inside:\"💠\",cyclone:\"🌀\",loop:\"➿\",globe_with_meridians:\"🌐\",m:\"Ⓜ️\",atm:\"🏧\",sa:\"🈂️\",passport_control:\"🛂\",customs:\"🛃\",baggage_claim:\"🛄\",left_luggage:\"🛅\",wheelchair:\"♿\",no_smoking:\"🚭\",wc:\"🚾\",parking:\"🅿️\",potable_water:\"🚰\",mens:\"🚹\",womens:\"🚺\",baby_symbol:\"🚼\",restroom:\"🚻\",put_litter_in_its_place:\"🚮\",cinema:\"🎦\",signal_strength:\"📶\",koko:\"🈁\",ng:\"🆖\",ok:\"🆗\",up:\"🆙\",cool:\"🆒\",new:\"🆕\",free:\"🆓\",zero:\"0️⃣\",one:\"1️⃣\",two:\"2️⃣\",three:\"3️⃣\",four:\"4️⃣\",five:\"5️⃣\",six:\"6️⃣\",seven:\"7️⃣\",eight:\"8️⃣\",nine:\"9️⃣\",keycap_ten:\"🔟\",asterisk:\"*⃣\",eject_button:\"⏏️\",arrow_forward:\"▶️\",pause_button:\"⏸\",next_track_button:\"⏭\",stop_button:\"⏹\",record_button:\"⏺\",play_or_pause_button:\"⏯\",previous_track_button:\"⏮\",fast_forward:\"⏩\",rewind:\"⏪\",twisted_rightwards_arrows:\"🔀\",repeat:\"🔁\",repeat_one:\"🔂\",arrow_backward:\"◀️\",arrow_up_small:\"🔼\",arrow_down_small:\"🔽\",arrow_double_up:\"⏫\",arrow_double_down:\"⏬\",arrow_right:\"➡️\",arrow_left:\"⬅️\",arrow_up:\"⬆️\",arrow_down:\"⬇️\",arrow_upper_right:\"↗️\",arrow_lower_right:\"↘️\",arrow_lower_left:\"↙️\",arrow_upper_left:\"↖️\",arrow_up_down:\"↕️\",left_right_arrow:\"↔️\",arrows_counterclockwise:\"🔄\",arrow_right_hook:\"↪️\",leftwards_arrow_with_hook:\"↩️\",arrow_heading_up:\"⤴️\",arrow_heading_down:\"⤵️\",hash:\"#️⃣\",information_source:\"ℹ️\",abc:\"🔤\",abcd:\"🔡\",capital_abcd:\"🔠\",symbols:\"🔣\",musical_note:\"🎵\",notes:\"🎶\",wavy_dash:\"〰️\",curly_loop:\"➰\",heavy_check_mark:\"✔️\",arrows_clockwise:\"🔃\",heavy_plus_sign:\"➕\",heavy_minus_sign:\"➖\",heavy_division_sign:\"➗\",heavy_multiplication_x:\"✖️\",infinity:\"♾\",heavy_dollar_sign:\"💲\",currency_exchange:\"💱\",copyright:\"©️\",registered:\"®️\",tm:\"™️\",end:\"🔚\",back:\"🔙\",on:\"🔛\",top:\"🔝\",soon:\"🔜\",ballot_box_with_check:\"☑️\",radio_button:\"🔘\",white_circle:\"⚪\",black_circle:\"⚫\",red_circle:\"🔴\",large_blue_circle:\"🔵\",small_orange_diamond:\"🔸\",small_blue_diamond:\"🔹\",large_orange_diamond:\"🔶\",large_blue_diamond:\"🔷\",small_red_triangle:\"🔺\",black_small_square:\"▪️\",white_small_square:\"▫️\",black_large_square:\"⬛\",white_large_square:\"⬜\",small_red_triangle_down:\"🔻\",black_medium_square:\"◼️\",white_medium_square:\"◻️\",black_medium_small_square:\"◾\",white_medium_small_square:\"◽\",black_square_button:\"🔲\",white_square_button:\"🔳\",speaker:\"🔈\",sound:\"🔉\",loud_sound:\"🔊\",mute:\"🔇\",mega:\"📣\",loudspeaker:\"📢\",bell:\"🔔\",no_bell:\"🔕\",black_joker:\"🃏\",mahjong:\"🀄\",spades:\"♠️\",clubs:\"♣️\",hearts:\"♥️\",diamonds:\"♦️\",flower_playing_cards:\"🎴\",thought_balloon:\"💭\",right_anger_bubble:\"🗯\",speech_balloon:\"💬\",left_speech_bubble:\"🗨\",clock1:\"🕐\",clock2:\"🕑\",clock3:\"🕒\",clock4:\"🕓\",clock5:\"🕔\",clock6:\"🕕\",clock7:\"🕖\",clock8:\"🕗\",clock9:\"🕘\",clock10:\"🕙\",clock11:\"🕚\",clock12:\"🕛\",clock130:\"🕜\",clock230:\"🕝\",clock330:\"🕞\",clock430:\"🕟\",clock530:\"🕠\",clock630:\"🕡\",clock730:\"🕢\",clock830:\"🕣\",clock930:\"🕤\",clock1030:\"🕥\",clock1130:\"🕦\",clock1230:\"🕧\",afghanistan:\"🇦🇫\",aland_islands:\"🇦🇽\",albania:\"🇦🇱\",algeria:\"🇩🇿\",american_samoa:\"🇦🇸\",andorra:\"🇦🇩\",angola:\"🇦🇴\",anguilla:\"🇦🇮\",antarctica:\"🇦🇶\",antigua_barbuda:\"🇦🇬\",argentina:\"🇦🇷\",armenia:\"🇦🇲\",aruba:\"🇦🇼\",australia:\"🇦🇺\",austria:\"🇦🇹\",azerbaijan:\"🇦🇿\",bahamas:\"🇧🇸\",bahrain:\"🇧🇭\",bangladesh:\"🇧🇩\",barbados:\"🇧🇧\",belarus:\"🇧🇾\",belgium:\"🇧🇪\",belize:\"🇧🇿\",benin:\"🇧🇯\",bermuda:\"🇧🇲\",bhutan:\"🇧🇹\",bolivia:\"🇧🇴\",caribbean_netherlands:\"🇧🇶\",bosnia_herzegovina:\"🇧🇦\",botswana:\"🇧🇼\",brazil:\"🇧🇷\",british_indian_ocean_territory:\"🇮🇴\",british_virgin_islands:\"🇻🇬\",brunei:\"🇧🇳\",bulgaria:\"🇧🇬\",burkina_faso:\"🇧🇫\",burundi:\"🇧🇮\",cape_verde:\"🇨🇻\",cambodia:\"🇰🇭\",cameroon:\"🇨🇲\",canada:\"🇨🇦\",canary_islands:\"🇮🇨\",cayman_islands:\"🇰🇾\",central_african_republic:\"🇨🇫\",chad:\"🇹🇩\",chile:\"🇨🇱\",cn:\"🇨🇳\",christmas_island:\"🇨🇽\",cocos_islands:\"🇨🇨\",colombia:\"🇨🇴\",comoros:\"🇰🇲\",congo_brazzaville:\"🇨🇬\",congo_kinshasa:\"🇨🇩\",cook_islands:\"🇨🇰\",costa_rica:\"🇨🇷\",croatia:\"🇭🇷\",cuba:\"🇨🇺\",curacao:\"🇨🇼\",cyprus:\"🇨🇾\",czech_republic:\"🇨🇿\",denmark:\"🇩🇰\",djibouti:\"🇩🇯\",dominica:\"🇩🇲\",dominican_republic:\"🇩🇴\",ecuador:\"🇪🇨\",egypt:\"🇪🇬\",el_salvador:\"🇸🇻\",equatorial_guinea:\"🇬🇶\",eritrea:\"🇪🇷\",estonia:\"🇪🇪\",ethiopia:\"🇪🇹\",eu:\"🇪🇺\",falkland_islands:\"🇫🇰\",faroe_islands:\"🇫🇴\",fiji:\"🇫🇯\",finland:\"🇫🇮\",fr:\"🇫🇷\",french_guiana:\"🇬🇫\",french_polynesia:\"🇵🇫\",french_southern_territories:\"🇹🇫\",gabon:\"🇬🇦\",gambia:\"🇬🇲\",georgia:\"🇬🇪\",de:\"🇩🇪\",ghana:\"🇬🇭\",gibraltar:\"🇬🇮\",greece:\"🇬🇷\",greenland:\"🇬🇱\",grenada:\"🇬🇩\",guadeloupe:\"🇬🇵\",guam:\"🇬🇺\",guatemala:\"🇬🇹\",guernsey:\"🇬🇬\",guinea:\"🇬🇳\",guinea_bissau:\"🇬🇼\",guyana:\"🇬🇾\",haiti:\"🇭🇹\",honduras:\"🇭🇳\",hong_kong:\"🇭🇰\",hungary:\"🇭🇺\",iceland:\"🇮🇸\",india:\"🇮🇳\",indonesia:\"🇮🇩\",iran:\"🇮🇷\",iraq:\"🇮🇶\",ireland:\"🇮🇪\",isle_of_man:\"🇮🇲\",israel:\"🇮🇱\",it:\"🇮🇹\",cote_divoire:\"🇨🇮\",jamaica:\"🇯🇲\",jp:\"🇯🇵\",jersey:\"🇯🇪\",jordan:\"🇯🇴\",kazakhstan:\"🇰🇿\",kenya:\"🇰🇪\",kiribati:\"🇰🇮\",kosovo:\"🇽🇰\",kuwait:\"🇰🇼\",kyrgyzstan:\"🇰🇬\",laos:\"🇱🇦\",latvia:\"🇱🇻\",lebanon:\"🇱🇧\",lesotho:\"🇱🇸\",liberia:\"🇱🇷\",libya:\"🇱🇾\",liechtenstein:\"🇱🇮\",lithuania:\"🇱🇹\",luxembourg:\"🇱🇺\",macau:\"🇲🇴\",macedonia:\"🇲🇰\",madagascar:\"🇲🇬\",malawi:\"🇲🇼\",malaysia:\"🇲🇾\",maldives:\"🇲🇻\",mali:\"🇲🇱\",malta:\"🇲🇹\",marshall_islands:\"🇲🇭\",martinique:\"🇲🇶\",mauritania:\"🇲🇷\",mauritius:\"🇲🇺\",mayotte:\"🇾🇹\",mexico:\"🇲🇽\",micronesia:\"🇫🇲\",moldova:\"🇲🇩\",monaco:\"🇲🇨\",mongolia:\"🇲🇳\",montenegro:\"🇲🇪\",montserrat:\"🇲🇸\",morocco:\"🇲🇦\",mozambique:\"🇲🇿\",myanmar:\"🇲🇲\",namibia:\"🇳🇦\",nauru:\"🇳🇷\",nepal:\"🇳🇵\",netherlands:\"🇳🇱\",new_caledonia:\"🇳🇨\",new_zealand:\"🇳🇿\",nicaragua:\"🇳🇮\",niger:\"🇳🇪\",nigeria:\"🇳🇬\",niue:\"🇳🇺\",norfolk_island:\"🇳🇫\",northern_mariana_islands:\"🇲🇵\",north_korea:\"🇰🇵\",norway:\"🇳🇴\",oman:\"🇴🇲\",pakistan:\"🇵🇰\",palau:\"🇵🇼\",palestinian_territories:\"🇵🇸\",panama:\"🇵🇦\",papua_new_guinea:\"🇵🇬\",paraguay:\"🇵🇾\",peru:\"🇵🇪\",philippines:\"🇵🇭\",pitcairn_islands:\"🇵🇳\",poland:\"🇵🇱\",portugal:\"🇵🇹\",puerto_rico:\"🇵🇷\",qatar:\"🇶🇦\",reunion:\"🇷🇪\",romania:\"🇷🇴\",ru:\"🇷🇺\",rwanda:\"🇷🇼\",st_barthelemy:\"🇧🇱\",st_helena:\"🇸🇭\",st_kitts_nevis:\"🇰🇳\",st_lucia:\"🇱🇨\",st_pierre_miquelon:\"🇵🇲\",st_vincent_grenadines:\"🇻🇨\",samoa:\"🇼🇸\",san_marino:\"🇸🇲\",sao_tome_principe:\"🇸🇹\",saudi_arabia:\"🇸🇦\",senegal:\"🇸🇳\",serbia:\"🇷🇸\",seychelles:\"🇸🇨\",sierra_leone:\"🇸🇱\",singapore:\"🇸🇬\",sint_maarten:\"🇸🇽\",slovakia:\"🇸🇰\",slovenia:\"🇸🇮\",solomon_islands:\"🇸🇧\",somalia:\"🇸🇴\",south_africa:\"🇿🇦\",south_georgia_south_sandwich_islands:\"🇬🇸\",kr:\"🇰🇷\",south_sudan:\"🇸🇸\",es:\"🇪🇸\",sri_lanka:\"🇱🇰\",sudan:\"🇸🇩\",suriname:\"🇸🇷\",swaziland:\"🇸🇿\",sweden:\"🇸🇪\",switzerland:\"🇨🇭\",syria:\"🇸🇾\",taiwan:\"🇹🇼\",tajikistan:\"🇹🇯\",tanzania:\"🇹🇿\",thailand:\"🇹🇭\",timor_leste:\"🇹🇱\",togo:\"🇹🇬\",tokelau:\"🇹🇰\",tonga:\"🇹🇴\",trinidad_tobago:\"🇹🇹\",tunisia:\"🇹🇳\",tr:\"🇹🇷\",turkmenistan:\"🇹🇲\",turks_caicos_islands:\"🇹🇨\",tuvalu:\"🇹🇻\",uganda:\"🇺🇬\",ukraine:\"🇺🇦\",united_arab_emirates:\"🇦🇪\",uk:\"🇬🇧\",england:\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",scotland:\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",wales:\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",us:\"🇺🇸\",us_virgin_islands:\"🇻🇮\",uruguay:\"🇺🇾\",uzbekistan:\"🇺🇿\",vanuatu:\"🇻🇺\",vatican_city:\"🇻🇦\",venezuela:\"🇻🇪\",vietnam:\"🇻🇳\",wallis_futuna:\"🇼🇫\",western_sahara:\"🇪🇭\",yemen:\"🇾🇪\",zambia:\"🇿🇲\",zimbabwe:\"🇿🇼\",united_nations:\"🇺🇳\",pirate_flag:\"🏴‍☠️\"}},{}],2:[function(require,a,exports){\"use strict\";a.exports={angry:[\">:(\",\">:-(\"],blush:[':\")',':-\")'],broken_heart:[\"</3\",\"<\\\\3\"],confused:[\":/\",\":-/\"],cry:[\":'(\",\":'-(\",\":,(\",\":,-(\"],frowning:[\":(\",\":-(\"],heart:[\"<3\"],imp:[\"]:(\",\"]:-(\"],innocent:[\"o:)\",\"O:)\",\"o:-)\",\"O:-)\",\"0:)\",\"0:-)\"],joy:[\":')\",\":'-)\",\":,)\",\":,-)\",\":'D\",\":'-D\",\":,D\",\":,-D\"],kissing:[\":*\",\":-*\"],laughing:[\"x-)\",\"X-)\"],neutral_face:[\":|\",\":-|\"],open_mouth:[\":o\",\":-o\",\":O\",\":-O\"],rage:[\":@\",\":-@\"],smile:[\":D\",\":-D\"],smiley:[\":)\",\":-)\"],smiling_imp:[\"]:)\",\"]:-)\"],sob:[\":,'(\",\":,'-(\",\";(\",\";-(\"],stuck_out_tongue:[\":P\",\":-P\"],sunglasses:[\"8-)\",\"B-)\"],sweat:[\",:(\",\",:-(\"],sweat_smile:[\",:)\",\",:-)\"],unamused:[\":s\",\":-S\",\":z\",\":-Z\",\":$\",\":-$\"],wink:[\";)\",\";-)\"]}},{}],3:[function(require,a,exports){\"use strict\";function e(a){return a.replace(/[.?*+^$[\\]\\\\(){}|-]/g,\"\\\\$&\")}a.exports=function(a){var n,o=a.defs;a.enabled.length&&(o=Object.keys(o).reduce(function(e,n){return a.enabled.indexOf(n)>=0&&(e[n]=o[n]),e},{})),n=Object.keys(a.shortcuts).reduce(function(e,n){return o[n]?Array.isArray(a.shortcuts[n])?(a.shortcuts[n].forEach(function(a){e[a]=n}),e):(e[a.shortcuts[n]]=n,e):e},{});var i=Object.keys(o).map(function(a){return\":\"+a+\":\"}).concat(Object.keys(n)).sort().reverse().map(function(a){return e(a)}).join(\"|\"),r=RegExp(i),_=RegExp(i,\"g\");return{defs:o,shortcuts:n,scanRE:r,replaceRE:_}}},{}],4:[function(require,a,exports){\"use strict\";a.exports=function(a,e){return a[e].content}},{}],5:[function(require,a,exports){\"use strict\";a.exports=function(a,e,n,o,i){function r(a,o,r){var _,t=0,l=[];return a.replace(i,function(o,i,c){var m;if(n.hasOwnProperty(o)){if(m=n[o],i>0&&!s.test(c[i-1]))return;if(i+o.length<c.length&&!s.test(c[i+o.length]))return}else m=o.slice(1,-1);i>t&&(_=new r(\"text\",\"\",0),_.content=a.slice(t,i),l.push(_)),_=new r(\"emoji\",\"\",0),_.markup=m,_.content=e[m],l.push(_),t=i+o.length}),t<a.length&&(_=new r(\"text\",\"\",0),_.content=a.slice(t),l.push(_)),l}var _=a.utils.arrayReplaceAt,t=a.utils.lib.ucmicro,s=new RegExp([t.Z.source,t.P.source,t.Cc.source].join(\"|\"));return function(a){var e,n,i,t,s,l=a.tokens,c=0;for(n=0,i=l.length;n<i;n++)if(\"inline\"===l[n].type)for(t=l[n].children,e=t.length-1;e>=0;e--)s=t[e],\"link_open\"!==s.type&&\"link_close\"!==s.type||\"auto\"===s.info&&(c-=s.nesting),\"text\"===s.type&&0===c&&o.test(s.content)&&(l[n].children=t=_(t,e,r(s.content,s.level,a.Token)))}}},{}],6:[function(require,a,exports){\"use strict\";var e=require(\"./lib/data/full.json\"),n=require(\"./lib/data/shortcuts\"),o=require(\"./lib/render\"),i=require(\"./lib/replace\"),r=require(\"./lib/normalize_opts\");a.exports=function(a,_){var t={defs:e,shortcuts:n,enabled:[]},s=r(a.utils.assign({},t,_||{}));a.renderer.rules.emoji=o,a.core.ruler.push(\"emoji\",i(a,s.defs,s.shortcuts,s.scanRE,s.replaceRE))}},{\"./lib/data/full.json\":1,\"./lib/data/shortcuts\":2,\"./lib/normalize_opts\":3,\"./lib/render\":4,\"./lib/replace\":5}]},{},[6])(6)});"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/ins.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.markdownitIns=e()}}(function(){return function e(n,t,o){function r(s,f){if(!t[s]){if(!n[s]){var u=\"function\"==typeof require&&require;if(!f&&u)return u(s,!0);if(i)return i(s,!0);var l=new Error(\"Cannot find module '\"+s+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var p=t[s]={exports:{}};n[s][0].call(p.exports,function(e){var t=n[s][1][e];return r(t?t:e)},p,p.exports,e,n,t,o)}return t[s].exports}for(var i=\"function\"==typeof require&&require,s=0;s<o.length;s++)r(o[s]);return r}({1:[function(e,n,t){\"use strict\";n.exports=function(e){function n(e,n){var t,o,r,i,s,f=e.pos,u=e.src.charCodeAt(f);if(n)return!1;if(43!==u)return!1;if(o=e.scanDelims(e.pos,!0),i=o.length,s=String.fromCharCode(u),2>i)return!1;for(i%2&&(r=e.push(\"text\",\"\",0),r.content=s,i--),t=0;i>t;t+=2)r=e.push(\"text\",\"\",0),r.content=s+s,e.delimiters.push({marker:u,jump:t,token:e.tokens.length-1,level:e.level,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0}function t(e){var n,t,o,r,i,s=[],f=e.delimiters,u=e.delimiters.length;for(n=0;u>n;n++)o=f[n],43===o.marker&&-1!==o.end&&(r=f[o.end],i=e.tokens[o.token],i.type=\"ins_open\",i.tag=\"ins\",i.nesting=1,i.markup=\"++\",i.content=\"\",i=e.tokens[r.token],i.type=\"ins_close\",i.tag=\"ins\",i.nesting=-1,i.markup=\"++\",i.content=\"\",\"text\"===e.tokens[r.token-1].type&&\"+\"===e.tokens[r.token-1].content&&s.push(r.token-1));for(;s.length;){for(n=s.pop(),t=n+1;t<e.tokens.length&&\"ins_close\"===e.tokens[t].type;)t++;t--,n!==t&&(i=e.tokens[t],e.tokens[t]=e.tokens[n],e.tokens[n]=i)}}e.inline.ruler.before(\"emphasis\",\"ins\",n),e.inline.ruler2.before(\"emphasis\",\"ins\",t)}},{}]},{},[1])(1)});"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/mark.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.markdownitMark=e()}}(function(){return function e(n,t,o){function r(s,f){if(!t[s]){if(!n[s]){var u=\"function\"==typeof require&&require;if(!f&&u)return u(s,!0);if(i)return i(s,!0);var l=new Error(\"Cannot find module '\"+s+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var p=t[s]={exports:{}};n[s][0].call(p.exports,function(e){var t=n[s][1][e];return r(t?t:e)},p,p.exports,e,n,t,o)}return t[s].exports}for(var i=\"function\"==typeof require&&require,s=0;s<o.length;s++)r(o[s]);return r}({1:[function(e,n,t){\"use strict\";n.exports=function(e){function n(e,n){var t,o,r,i,s,f=e.pos,u=e.src.charCodeAt(f);if(n)return!1;if(61!==u)return!1;if(o=e.scanDelims(e.pos,!0),i=o.length,s=String.fromCharCode(u),2>i)return!1;for(i%2&&(r=e.push(\"text\",\"\",0),r.content=s,i--),t=0;i>t;t+=2)r=e.push(\"text\",\"\",0),r.content=s+s,e.delimiters.push({marker:u,jump:t,token:e.tokens.length-1,level:e.level,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0}function t(e){var n,t,o,r,i,s=[],f=e.delimiters,u=e.delimiters.length;for(n=0;u>n;n++)o=f[n],61===o.marker&&-1!==o.end&&(r=f[o.end],i=e.tokens[o.token],i.type=\"mark_open\",i.tag=\"mark\",i.nesting=1,i.markup=\"==\",i.content=\"\",i=e.tokens[r.token],i.type=\"mark_close\",i.tag=\"mark\",i.nesting=-1,i.markup=\"==\",i.content=\"\",\"text\"===e.tokens[r.token-1].type&&\"=\"===e.tokens[r.token-1].content&&s.push(r.token-1));for(;s.length;){for(n=s.pop(),t=n+1;t<e.tokens.length&&\"mark_close\"===e.tokens[t].type;)t++;t--,n!==t&&(i=e.tokens[t],e.tokens[t]=e.tokens[n],e.tokens[n]=i)}}e.inline.ruler.before(\"emphasis\",\"mark\",n),e.inline.ruler2.before(\"emphasis\",\"mark\",t)}},{}]},{},[1])(1)});"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/sub.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var r;r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,r.markdownitSub=e()}}(function(){return function e(r,o,n){function t(i,u){if(!o[i]){if(!r[i]){var f=\"function\"==typeof require&&require;if(!u&&f)return f(i,!0);if(s)return s(i,!0);var p=new Error(\"Cannot find module '\"+i+\"'\");throw p.code=\"MODULE_NOT_FOUND\",p}var a=o[i]={exports:{}};r[i][0].call(a.exports,function(e){var o=r[i][1][e];return t(o?o:e)},a,a.exports,e,r,o,n)}return o[i].exports}for(var s=\"function\"==typeof require&&require,i=0;i<n.length;i++)t(n[i]);return t}({1:[function(e,r){\"use strict\";function o(e,r){var o,t,s,i=e.posMax,u=e.pos;if(126!==e.src.charCodeAt(u))return!1;if(r)return!1;if(u+2>=i)return!1;for(e.pos=u+1;e.pos<i;){if(126===e.src.charCodeAt(e.pos)){o=!0;break}e.md.inline.skipToken(e)}return o&&u+1!==e.pos?(t=e.src.slice(u+1,e.pos),t.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=u,!1):(e.posMax=e.pos,e.pos=u+1,s=e.push(\"sub_open\",\"sub\",1),s.markup=\"~\",s=e.push(\"text\",\"\",0),s.content=t.replace(n,\"$1\"),s=e.push(\"sub_close\",\"sub\",-1),s.markup=\"~\",e.pos=e.posMax+1,e.posMax=i,!0)):(e.pos=u,!1)}var n=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;r.exports=function(e){e.inline.ruler.after(\"emphasis\",\"sub\",o)}},{}]},{},[1])(1)});"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/sup.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var r;r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,r.markdownitSup=e()}}(function(){return function e(r,o,n){function t(i,p){if(!o[i]){if(!r[i]){var u=\"function\"==typeof require&&require;if(!p&&u)return u(i,!0);if(s)return s(i,!0);var f=new Error(\"Cannot find module '\"+i+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var a=o[i]={exports:{}};r[i][0].call(a.exports,function(e){var o=r[i][1][e];return t(o?o:e)},a,a.exports,e,r,o,n)}return o[i].exports}for(var s=\"function\"==typeof require&&require,i=0;i<n.length;i++)t(n[i]);return t}({1:[function(e,r){\"use strict\";function o(e,r){var o,t,s,i=e.posMax,p=e.pos;if(94!==e.src.charCodeAt(p))return!1;if(r)return!1;if(p+2>=i)return!1;for(e.pos=p+1;e.pos<i;){if(94===e.src.charCodeAt(e.pos)){o=!0;break}e.md.inline.skipToken(e)}return o&&p+1!==e.pos?(t=e.src.slice(p+1,e.pos),t.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=p,!1):(e.posMax=e.pos,e.pos=p+1,s=e.push(\"sup_open\",\"sup\",1),s.markup=\"^\",s=e.push(\"text\",\"\",0),s.content=t.replace(n,\"$1\"),s=e.push(\"sup_close\",\"sup\",-1),s.markup=\"^\",e.pos=e.posMax+1,e.posMax=i,!0)):(e.pos=p,!1)}var n=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;r.exports=function(e){e.inline.ruler.after(\"emphasis\",\"sup\",o)}},{}]},{},[1])(1)});"
  },
  {
    "path": "miniprogram/components/towxml/parse/markdown/plugins/todo.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitTaskLists = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n    // Markdown-it plugin to render GitHub-style task lists; see\n    //\n    // https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n    // https://github.com/blog/1825-task-lists-in-all-markdown-documents\n    \n    var disableCheckboxes = true;\n    var useLabelWrapper = false;\n    var useLabelAfter = false;\n    \n    module.exports = function(md, options) {\n        if (options) {\n            disableCheckboxes = !options.enabled;\n            useLabelWrapper = !!options.label;\n            useLabelAfter = !!options.labelAfter;\n        }\n    \n        md.core.ruler.after('inline', 'github-task-lists', function(state) {\n            var tokens = state.tokens;\n\n            // 用于寻找关闭标签的数组\n            let tagPaired = (index)=>{\n                let targetItem,\n                    item = tokens[index],\n                    tag = item.tag,\n                    level = item.level,\n                    targetType = item.type === 'list_item_open' ? 'list_item_close' : 'bullet_list_close';\n                for(let i = index,len=tokens.length; i<len; i++){\n                    let _item = tokens[i];\n\n                    if(_item.tag === tag && level === _item.level && _item.type === targetType){\n                        targetItem = _item;\n                        break;\n                    };\n                };\n                return targetItem;\n\n            };\n\n            for (var i = 2; i < tokens.length; i++) {\n                if (isTodoItem(tokens, i)) {\n                    todoify(tokens[i], state.Token);\n                    attrSet(tokens[i-2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n                    attrSet(tokens[parentToken(tokens, i-2)], 'class', 'contains-task-list');\n\n                    tagPaired(parentToken(tokens, i-2)).tag = 'todogroup';\n                    tokens[parentToken(tokens, i-2)].tag = 'todogroup';\n\n                    tagPaired(i-2).tag = 'todolist';\n                    tokens[i-2].tag = 'todolist';\n                };\n            };\n        });\n    };\n    \n    function attrSet(token, name, value) {\n        var index = token.attrIndex(name);\n        var attr = [name, value];\n    \n        if (index < 0) {\n            token.attrPush(attr);\n        } else {\n            token.attrs[index] = attr;\n        }\n    }\n    \n    function parentToken(tokens, index) {\n        var targetLevel = tokens[index].level - 1;\n        for (var i = index - 1; i >= 0; i--) {\n            if (tokens[i].level === targetLevel) {\n                return i;\n            }\n        }\n        return -1;\n    }\n    \n    function isTodoItem(tokens, index) {\n        return isInline(tokens[index]) &&\n               isParagraph(tokens[index - 1]) &&\n               isListItem(tokens[index - 2]) &&\n               startsWithTodoMarkdown(tokens[index]);\n    }\n    \n    function todoify(token, TokenConstructor) {\n        token.children.unshift(makeCheckbox(token, TokenConstructor));\n        token.children[1].content = token.children[1].content.slice(3);\n        token.content = token.content.slice(3);\n    \n        if (useLabelWrapper) {\n            if (useLabelAfter) {\n                token.children.pop();\n    \n                // Use large random number as id property of the checkbox.\n                var id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n                token.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n                token.children.push(afterLabel(token.content, id, TokenConstructor));\n            } else {\n                token.children.unshift(beginLabel(TokenConstructor));\n                token.children.push(endLabel(TokenConstructor));\n            }\n        }\n    }\n    \n    function makeCheckbox(token, TokenConstructor) {\n        var checkbox = new TokenConstructor('html_inline', '', 0);\n        var disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n        var value = ' value=\"' + token.content + '\" ';\n        if (token.content.indexOf('[ ] ') === 0) {\n            checkbox.content = '<checkbox class=\"h2w__todoCheckbox task-list-item-checkbox\"' + disabledAttr + value + '/>';\n        } else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n            checkbox.content = '<checkbox class=\"h2w__todoCheckbox task-list-item-checkbox\" checked=\"true\"' + disabledAttr + value + '/>';\n        }\n        return checkbox;\n    }\n    \n    // these next two functions are kind of hacky; probably should really be a\n    // true block-level token with .tag=='label'\n    function beginLabel(TokenConstructor) {\n        var token = new TokenConstructor('html_inline', '', 0);\n        token.content = '<label>';\n        return token;\n    }\n    \n    function endLabel(TokenConstructor) {\n        var token = new TokenConstructor('html_inline', '', 0);\n        token.content = '</label>';\n        return token;\n    }\n    \n    function afterLabel(content, id, TokenConstructor) {\n        var token = new TokenConstructor('html_inline', '', 0);\n        token.content = '<label class=\"task-list-item-label\" for=\"' + id + '\">' + content + '</label>';\n        token.attrs = [{for: id}];\n        return token;\n    }\n    \n    function isInline(token) { return token.type === 'inline'; }\n    function isParagraph(token) { return token.type === 'paragraph_open'; }\n    function isListItem(token) { return token.type === 'list_item_open'; }\n    \n    function startsWithTodoMarkdown(token) {\n        // leading whitespace in a list item is already trimmed off by markdown-it\n        return token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\n    }\n    \n    },{}]},{},[1])(1)\n    });"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/Parser.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function Parser(t,e){var s=this;return s._tagname=\"\",s._attribname=\"\",s._attribvalue=\"\",s._attribs=null,s._stack=[],s._foreignContext=[],s.startIndex=0,s.endIndex=null,s.parseChunk=Parser.prototype.write,s.done=Parser.prototype.end,s._options=e||{},s._cbs=t||{},s._tagname=\"\",s._attribname=\"\",s._attribvalue=\"\",s._attribs=null,s._stack=[],s._foreignContext=[],s.startIndex=0,s.endIndex=null,s._lowerCaseTagNames=\"lowerCaseTags\"in s._options?!!s._options.lowerCaseTags:!s._options.xmlMode,s._lowerCaseAttributeNames=\"lowerCaseAttributeNames\"in s._options?!!s._options.lowerCaseAttributeNames:!s._options.xmlMode,s._tokenizer=new(s._options.Tokenizer||Tokenizer_1[\"default\"])(s._options,s),s._cbs.onparserinit&&s._cbs.onparserinit(s),s}var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,\"__esModule\",{value:!0});var Tokenizer_1=__importDefault(require(\"./Tokenizer\")),formTags=new Set([\"input\",\"option\",\"optgroup\",\"select\",\"button\",\"datalist\",\"textarea\"]),pTag=new Set([\"p\"]),openImpliesClose={tr:new Set([\"tr\",\"th\",\"td\"]),th:new Set([\"th\"]),td:new Set([\"thead\",\"th\",\"td\"]),body:new Set([\"head\",\"link\",\"script\"]),li:new Set([\"li\"]),p:pTag,h1:pTag,h2:pTag,h3:pTag,h4:pTag,h5:pTag,h6:pTag,select:formTags,input:formTags,output:formTags,button:formTags,datalist:formTags,textarea:formTags,option:new Set([\"option\"]),optgroup:new Set([\"optgroup\",\"option\"]),dd:new Set([\"dt\",\"dd\"]),dt:new Set([\"dt\",\"dd\"]),address:pTag,article:pTag,aside:pTag,blockquote:pTag,details:pTag,div:pTag,dl:pTag,fieldset:pTag,figcaption:pTag,figure:pTag,footer:pTag,form:pTag,header:pTag,hr:pTag,main:pTag,nav:pTag,ol:pTag,pre:pTag,section:pTag,table:pTag,ul:pTag,rt:new Set([\"rt\",\"rp\"]),rp:new Set([\"rt\",\"rp\"]),tbody:new Set([\"thead\",\"tbody\"]),tfoot:new Set([\"thead\",\"tbody\"])},voidElements=new Set([\"area\",\"base\",\"basefont\",\"br\",\"col\",\"command\",\"embed\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]),foreignContextElements=new Set([\"math\",\"svg\"]),htmlIntegrationElements=new Set([\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\",\"foreignObject\",\"desc\",\"title\"]),reNameEnd=/\\s|\\//;Parser.prototype._updatePosition=function(t){null===this.endIndex?this._tokenizer._sectionStart<=t?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-t:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},Parser.prototype.ontext=function(t){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(t)},Parser.prototype.onopentagname=function(t){if(this._lowerCaseTagNames&&(t=t.toLowerCase()),this._tagname=t,!this._options.xmlMode&&t in openImpliesClose)for(var e=void 0;openImpliesClose[t].has(e=this._stack[this._stack.length-1]);this.onclosetag(e));!this._options.xmlMode&&voidElements.has(t)||(this._stack.push(t),foreignContextElements.has(t)?this._foreignContext.push(!0):htmlIntegrationElements.has(t)&&this._foreignContext.push(!1)),this._cbs.onopentagname&&this._cbs.onopentagname(t),this._cbs.onopentag&&(this._attribs={})},Parser.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&voidElements.has(this._tagname)&&this._cbs.onclosetag(this._tagname),this._tagname=\"\"},Parser.prototype.onclosetag=function(t){if(this._updatePosition(1),this._lowerCaseTagNames&&(t=t.toLowerCase()),(foreignContextElements.has(t)||htmlIntegrationElements.has(t))&&this._foreignContext.pop(),!this._stack.length||!this._options.xmlMode&&voidElements.has(t))this._options.xmlMode||\"br\"!==t&&\"p\"!==t||(this.onopentagname(t),this._closeCurrentTag());else{var e=this._stack.lastIndexOf(t);if(-1!==e)if(this._cbs.onclosetag)for(e=this._stack.length-e;e--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=e;else\"p\"!==t||this._options.xmlMode||(this.onopentagname(t),this._closeCurrentTag())}},Parser.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing||this._foreignContext[this._foreignContext.length-1]?this._closeCurrentTag():this.onopentagend()},Parser.prototype._closeCurrentTag=function(){var t=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===t&&(this._cbs.onclosetag&&this._cbs.onclosetag(t),this._stack.pop())},Parser.prototype.onattribname=function(t){this._lowerCaseAttributeNames&&(t=t.toLowerCase()),this._attribname=t},Parser.prototype.onattribdata=function(t){this._attribvalue+=t},Parser.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname=\"\",this._attribvalue=\"\"},Parser.prototype._getInstructionName=function(t){var e=t.search(reNameEnd),s=e<0?t:t.substr(0,e);return this._lowerCaseTagNames&&(s=s.toLowerCase()),s},Parser.prototype.ondeclaration=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction(\"!\"+e,\"!\"+t)}},Parser.prototype.onprocessinginstruction=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction(\"?\"+e,\"?\"+t)}},Parser.prototype.oncomment=function(t){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(t),this._cbs.oncommentend&&this._cbs.oncommentend()},Parser.prototype.oncdata=function(t){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(t),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment(\"[CDATA[\"+t+\"]]\")},Parser.prototype.onerror=function(t){this._cbs.onerror&&this._cbs.onerror(t)},Parser.prototype.onend=function(){if(this._cbs.onclosetag)for(var t=this._stack.length;t>0;this._cbs.onclosetag(this._stack[--t]));this._cbs.onend&&this._cbs.onend()},Parser.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname=\"\",this._attribname=\"\",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},Parser.prototype.parseComplete=function(t){this.reset(),this.end(t)},Parser.prototype.write=function(t){this._tokenizer.write(t)},Parser.prototype.end=function(t){this._tokenizer.end(t)},Parser.prototype.pause=function(){this._tokenizer.pause()},Parser.prototype.resume=function(){this._tokenizer.resume()},exports.Parser=Parser;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/Tokenizer.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function whitespace(t){return\" \"===t||\"\\n\"===t||\"\\t\"===t||\"\\f\"===t||\"\\r\"===t}function ifElseState(t,e,s){var i=t.toLowerCase();return t===i?function(t,a){a===i?t._state=e:(t._state=s,t._index--)}:function(a,_){_===i||_===t?a._state=e:(a._state=s,a._index--)}}function consumeSpecialNameChar(t,e){var s=t.toLowerCase();return function(i,a){a===s||a===t?i._state=e:(i._state=3,i._index--)}}var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,\"__esModule\",{value:!0});var decode_codepoint_1=__importDefault(require(\"./entities/decode_codepoint\")),entities_json_1=__importDefault(require(\"./entities/maps/entities\")),legacy_json_1=__importDefault(require(\"./entities/maps/legacy\")),xml_json_1=__importDefault(require(\"./entities/maps/xml\")),stateBeforeCdata1=ifElseState(\"C\",23,16),stateBeforeCdata2=ifElseState(\"D\",24,16),stateBeforeCdata3=ifElseState(\"A\",25,16),stateBeforeCdata4=ifElseState(\"T\",26,16),stateBeforeCdata5=ifElseState(\"A\",27,16),stateBeforeScript1=consumeSpecialNameChar(\"R\",34),stateBeforeScript2=consumeSpecialNameChar(\"I\",35),stateBeforeScript3=consumeSpecialNameChar(\"P\",36),stateBeforeScript4=consumeSpecialNameChar(\"T\",37),stateAfterScript1=ifElseState(\"R\",39,1),stateAfterScript2=ifElseState(\"I\",40,1),stateAfterScript3=ifElseState(\"P\",41,1),stateAfterScript4=ifElseState(\"T\",42,1),stateBeforeStyle1=consumeSpecialNameChar(\"Y\",44),stateBeforeStyle2=consumeSpecialNameChar(\"L\",45),stateBeforeStyle3=consumeSpecialNameChar(\"E\",46),stateAfterStyle1=ifElseState(\"Y\",48,1),stateAfterStyle2=ifElseState(\"L\",49,1),stateAfterStyle3=ifElseState(\"E\",50,1),stateBeforeEntity=ifElseState(\"#\",52,53),stateBeforeNumericEntity=ifElseState(\"X\",55,54),Tokenizer=function(){function t(t,e){this._state=1,this._buffer=\"\",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=1,this._special=1,this._running=!0,this._ended=!1,this._cbs=e,this._xmlMode=!(!t||!t.xmlMode),this._decodeEntities=!(!t||!t.decodeEntities)}return t.prototype.reset=function(){this._state=1,this._buffer=\"\",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=1,this._special=1,this._running=!0,this._ended=!1},t.prototype._stateText=function(t){\"<\"===t?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=2,this._sectionStart=this._index):this._decodeEntities&&1===this._special&&\"&\"===t&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=1,this._state=51,this._sectionStart=this._index)},t.prototype._stateBeforeTagName=function(t){\"/\"===t?this._state=5:\"<\"===t?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):\">\"===t||1!==this._special||whitespace(t)?this._state=1:\"!\"===t?(this._state=15,this._sectionStart=this._index+1):\"?\"===t?(this._state=17,this._sectionStart=this._index+1):(this._state=this._xmlMode||\"s\"!==t&&\"S\"!==t?3:31,this._sectionStart=this._index)},t.prototype._stateInTagName=function(t){(\"/\"===t||\">\"===t||whitespace(t))&&(this._emitToken(\"onopentagname\"),this._state=8,this._index--)},t.prototype._stateBeforeCloseingTagName=function(t){whitespace(t)||(\">\"===t?this._state=1:1!==this._special?\"s\"===t||\"S\"===t?this._state=32:(this._state=1,this._index--):(this._state=6,this._sectionStart=this._index))},t.prototype._stateInCloseingTagName=function(t){(\">\"===t||whitespace(t))&&(this._emitToken(\"onclosetag\"),this._state=7,this._index--)},t.prototype._stateAfterCloseingTagName=function(t){\">\"===t&&(this._state=1,this._sectionStart=this._index+1)},t.prototype._stateBeforeAttributeName=function(t){\">\"===t?(this._cbs.onopentagend(),this._state=1,this._sectionStart=this._index+1):\"/\"===t?this._state=4:whitespace(t)||(this._state=9,this._sectionStart=this._index)},t.prototype._stateInSelfClosingTag=function(t){\">\"===t?(this._cbs.onselfclosingtag(),this._state=1,this._sectionStart=this._index+1):whitespace(t)||(this._state=8,this._index--)},t.prototype._stateInAttributeName=function(t){(\"=\"===t||\"/\"===t||\">\"===t||whitespace(t))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=10,this._index--)},t.prototype._stateAfterAttributeName=function(t){\"=\"===t?this._state=11:\"/\"===t||\">\"===t?(this._cbs.onattribend(),this._state=8,this._index--):whitespace(t)||(this._cbs.onattribend(),this._state=9,this._sectionStart=this._index)},t.prototype._stateBeforeAttributeValue=function(t){'\"'===t?(this._state=12,this._sectionStart=this._index+1):\"'\"===t?(this._state=13,this._sectionStart=this._index+1):whitespace(t)||(this._state=14,this._sectionStart=this._index,this._index--)},t.prototype._stateInAttributeValueDoubleQuotes=function(t){'\"'===t?(this._emitToken(\"onattribdata\"),this._cbs.onattribend(),this._state=8):this._decodeEntities&&\"&\"===t&&(this._emitToken(\"onattribdata\"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},t.prototype._stateInAttributeValueSingleQuotes=function(t){\"'\"===t?(this._emitToken(\"onattribdata\"),this._cbs.onattribend(),this._state=8):this._decodeEntities&&\"&\"===t&&(this._emitToken(\"onattribdata\"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},t.prototype._stateInAttributeValueNoQuotes=function(t){whitespace(t)||\">\"===t?(this._emitToken(\"onattribdata\"),this._cbs.onattribend(),this._state=8,this._index--):this._decodeEntities&&\"&\"===t&&(this._emitToken(\"onattribdata\"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},t.prototype._stateBeforeDeclaration=function(t){this._state=\"[\"===t?22:\"-\"===t?18:16},t.prototype._stateInDeclaration=function(t){\">\"===t&&(this._cbs.ondeclaration(this._getSection()),this._state=1,this._sectionStart=this._index+1)},t.prototype._stateInProcessingInstruction=function(t){\">\"===t&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=1,this._sectionStart=this._index+1)},t.prototype._stateBeforeComment=function(t){\"-\"===t?(this._state=19,this._sectionStart=this._index+1):this._state=16},t.prototype._stateInComment=function(t){\"-\"===t&&(this._state=20)},t.prototype._stateAfterComment1=function(t){this._state=\"-\"===t?21:19},t.prototype._stateAfterComment2=function(t){\">\"===t?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=1,this._sectionStart=this._index+1):\"-\"!==t&&(this._state=19)},t.prototype._stateBeforeCdata6=function(t){\"[\"===t?(this._state=28,this._sectionStart=this._index+1):(this._state=16,this._index--)},t.prototype._stateInCdata=function(t){\"]\"===t&&(this._state=29)},t.prototype._stateAfterCdata1=function(t){this._state=\"]\"===t?30:28},t.prototype._stateAfterCdata2=function(t){\">\"===t?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=1,this._sectionStart=this._index+1):\"]\"!==t&&(this._state=28)},t.prototype._stateBeforeSpecial=function(t){\"c\"===t||\"C\"===t?this._state=33:\"t\"===t||\"T\"===t?this._state=43:(this._state=3,this._index--)},t.prototype._stateBeforeSpecialEnd=function(t){2!==this._special||\"c\"!==t&&\"C\"!==t?3!==this._special||\"t\"!==t&&\"T\"!==t?this._state=1:this._state=47:this._state=38},t.prototype._stateBeforeScript5=function(t){(\"/\"===t||\">\"===t||whitespace(t))&&(this._special=2),this._state=3,this._index--},t.prototype._stateAfterScript5=function(t){\">\"===t||whitespace(t)?(this._special=1,this._state=6,this._sectionStart=this._index-6,this._index--):this._state=1},t.prototype._stateBeforeStyle4=function(t){(\"/\"===t||\">\"===t||whitespace(t))&&(this._special=3),this._state=3,this._index--},t.prototype._stateAfterStyle4=function(t){\">\"===t||whitespace(t)?(this._special=1,this._state=6,this._sectionStart=this._index-5,this._index--):this._state=1},t.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+1<this._index){var t=this._buffer.substring(this._sectionStart+1,this._index),e=this._xmlMode?xml_json_1[\"default\"]:entities_json_1[\"default\"];Object.prototype.hasOwnProperty.call(e,t)&&(this._emitPartial(e[t]),this._sectionStart=this._index+1)}},t.prototype._parseLegacyEntity=function(){var t=this._sectionStart+1,e=this._index-t;for(e>6&&(e=6);e>=2;){var s=this._buffer.substr(t,e);if(Object.prototype.hasOwnProperty.call(legacy_json_1[\"default\"],s))return this._emitPartial(legacy_json_1[\"default\"][s]),void(this._sectionStart+=e+1);e--}},t.prototype._stateInNamedEntity=function(t){\";\"===t?(this._parseNamedEntityStrict(),this._sectionStart+1<this._index&&!this._xmlMode&&this._parseLegacyEntity(),this._state=this._baseState):(t<\"a\"||t>\"z\")&&(t<\"A\"||t>\"Z\")&&(t<\"0\"||t>\"9\")&&(this._xmlMode||this._sectionStart+1===this._index||(1!==this._baseState?\"=\"!==t&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},t.prototype._decodeNumericEntity=function(t,e){var s=this._sectionStart+t;if(s!==this._index){var i=this._buffer.substring(s,this._index),a=parseInt(i,e);this._emitPartial(decode_codepoint_1[\"default\"](a)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},t.prototype._stateInNumericEntity=function(t){\";\"===t?(this._decodeNumericEntity(2,10),this._sectionStart++):(t<\"0\"||t>\"9\")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},t.prototype._stateInHexEntity=function(t){\";\"===t?(this._decodeNumericEntity(3,16),this._sectionStart++):(t<\"a\"||t>\"f\")&&(t<\"A\"||t>\"F\")&&(t<\"0\"||t>\"9\")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},t.prototype._cleanup=function(){this._sectionStart<0?(this._buffer=\"\",this._bufferOffset+=this._index,this._index=0):this._running&&(1===this._state?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer=\"\",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer=\"\",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},t.prototype.write=function(t){this._ended&&this._cbs.onerror(Error(\".write() after done!\")),this._buffer+=t,this._parse()},t.prototype._parse=function(){for(;this._index<this._buffer.length&&this._running;){var t=this._buffer.charAt(this._index);1===this._state?this._stateText(t):12===this._state?this._stateInAttributeValueDoubleQuotes(t):9===this._state?this._stateInAttributeName(t):19===this._state?this._stateInComment(t):8===this._state?this._stateBeforeAttributeName(t):3===this._state?this._stateInTagName(t):6===this._state?this._stateInCloseingTagName(t):2===this._state?this._stateBeforeTagName(t):10===this._state?this._stateAfterAttributeName(t):13===this._state?this._stateInAttributeValueSingleQuotes(t):11===this._state?this._stateBeforeAttributeValue(t):5===this._state?this._stateBeforeCloseingTagName(t):7===this._state?this._stateAfterCloseingTagName(t):31===this._state?this._stateBeforeSpecial(t):20===this._state?this._stateAfterComment1(t):14===this._state?this._stateInAttributeValueNoQuotes(t):4===this._state?this._stateInSelfClosingTag(t):16===this._state?this._stateInDeclaration(t):15===this._state?this._stateBeforeDeclaration(t):21===this._state?this._stateAfterComment2(t):18===this._state?this._stateBeforeComment(t):32===this._state?this._stateBeforeSpecialEnd(t):38===this._state?stateAfterScript1(this,t):39===this._state?stateAfterScript2(this,t):40===this._state?stateAfterScript3(this,t):33===this._state?stateBeforeScript1(this,t):34===this._state?stateBeforeScript2(this,t):35===this._state?stateBeforeScript3(this,t):36===this._state?stateBeforeScript4(this,t):37===this._state?this._stateBeforeScript5(t):41===this._state?stateAfterScript4(this,t):42===this._state?this._stateAfterScript5(t):43===this._state?stateBeforeStyle1(this,t):28===this._state?this._stateInCdata(t):44===this._state?stateBeforeStyle2(this,t):45===this._state?stateBeforeStyle3(this,t):46===this._state?this._stateBeforeStyle4(t):47===this._state?stateAfterStyle1(this,t):48===this._state?stateAfterStyle2(this,t):49===this._state?stateAfterStyle3(this,t):50===this._state?this._stateAfterStyle4(t):17===this._state?this._stateInProcessingInstruction(t):53===this._state?this._stateInNamedEntity(t):22===this._state?stateBeforeCdata1(this,t):51===this._state?stateBeforeEntity(this,t):23===this._state?stateBeforeCdata2(this,t):24===this._state?stateBeforeCdata3(this,t):29===this._state?this._stateAfterCdata1(t):30===this._state?this._stateAfterCdata2(t):25===this._state?stateBeforeCdata4(this,t):26===this._state?stateBeforeCdata5(this,t):27===this._state?this._stateBeforeCdata6(t):55===this._state?this._stateInHexEntity(t):54===this._state?this._stateInNumericEntity(t):52===this._state?stateBeforeNumericEntity(this,t):this._cbs.onerror(Error(\"unknown _state\"),this._state),this._index++}this._cleanup()},t.prototype.pause=function(){this._running=!1},t.prototype.resume=function(){this._running=!0,this._index<this._buffer.length&&this._parse(),this._ended&&this._finish()},t.prototype.end=function(t){this._ended&&this._cbs.onerror(Error(\".end() after done!\")),t&&this.write(t),this._ended=!0,this._running&&this._finish()},t.prototype._finish=function(){this._sectionStart<this._index&&this._handleTrailingData(),this._cbs.onend()},t.prototype._handleTrailingData=function(){var t=this._buffer.substr(this._sectionStart);28===this._state||29===this._state||30===this._state?this._cbs.oncdata(t):19===this._state||20===this._state||21===this._state?this._cbs.oncomment(t):53!==this._state||this._xmlMode?54!==this._state||this._xmlMode?55!==this._state||this._xmlMode?3!==this._state&&8!==this._state&&11!==this._state&&10!==this._state&&9!==this._state&&13!==this._state&&12!==this._state&&14!==this._state&&6!==this._state&&this._cbs.ontext(t):(this._decodeNumericEntity(3,16),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._decodeNumericEntity(2,10),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._parseLegacyEntity(),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData()))},t.prototype.getAbsoluteIndex=function(){return this._bufferOffset+this._index},t.prototype._getSection=function(){return this._buffer.substring(this._sectionStart,this._index)},t.prototype._emitToken=function(t){this._cbs[t](this._getSection()),this._sectionStart=-1},t.prototype._emitPartial=function(t){1!==this._baseState?this._cbs.onattribdata(t):this._cbs.ontext(t)},t}();exports[\"default\"]=Tokenizer;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/domhandler/index.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var node_1=require(\"./node\");exports.Node=node_1.Node,exports.Element=node_1.Element,exports.DataNode=node_1.DataNode,exports.NodeWithChildren=node_1.NodeWithChildren;var reWhitespace=/\\s+/g,defaultOpts={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1},DomHandler=function(){function t(t,e,o){this.dom=[],this._done=!1,this._tagStack=[],this._lastNode=null,this._parser=null,\"function\"==typeof e&&(o=e,e=defaultOpts),\"object\"==typeof t&&(e=t,t=undefined),this._callback=t||null,this._options=e||defaultOpts,this._elementCB=o||null}return t.prototype.onparserinit=function(t){this._parser=t},t.prototype.onreset=function(){this.dom=[],this._done=!1,this._tagStack=[],this._lastNode=null,this._parser=this._parser||null},t.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this.handleCallback(null))},t.prototype.onerror=function(t){this.handleCallback(t)},t.prototype.onclosetag=function(){this._lastNode=null;var t=this._tagStack.pop();t&&this._parser&&(this._options.withEndIndices&&(t.endIndex=this._parser.endIndex),this._elementCB&&this._elementCB(t))},t.prototype.onopentag=function(t,e){var o=new node_1.Element(t,e);this.addNode(o),this._tagStack.push(o)},t.prototype.ontext=function(t){var e=this._options.normalizeWhitespace,o=this._lastNode;if(o&&\"text\"===o.type)e?o.data=(o.data+t).replace(reWhitespace,\" \"):o.data+=t;else{e&&(t=t.replace(reWhitespace,\" \"));var n=new node_1.DataNode(\"text\",t);this.addNode(n),this._lastNode=n}},t.prototype.oncomment=function(t){if(this._lastNode&&\"comment\"===this._lastNode.type)return void(this._lastNode.data+=t);var e=new node_1.DataNode(\"comment\",t);this.addNode(e),this._lastNode=e},t.prototype.oncommentend=function(){this._lastNode=null},t.prototype.oncdatastart=function(){var t=new node_1.DataNode(\"text\",\"\"),e=new node_1.NodeWithChildren(\"cdata\",[t]);this.addNode(e),t.parent=e,this._lastNode=t},t.prototype.oncdataend=function(){this._lastNode=null},t.prototype.onprocessinginstruction=function(t,e){var o=new node_1.ProcessingInstruction(t,e);this.addNode(o)},t.prototype.handleCallback=function(t){if(\"function\"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},t.prototype.addNode=function(t){var e=this._tagStack[this._tagStack.length-1],o=e?e.children:this.dom,n=o[o.length-1];this._parser&&(this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withEndIndices&&(t.endIndex=this._parser.endIndex)),o.push(t),n&&(t.prev=n,n.next=t),e&&(t.parent=e),this._lastNode=null},t.prototype.addDataNode=function(t){this.addNode(t),this._lastNode=t},t}();exports.DomHandler=DomHandler,exports[\"default\"]=DomHandler;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/domhandler/node.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";var __extends=this&&this.__extends||function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(exports,\"__esModule\",{value:!0});var nodeTypes=new Map([[\"tag\",1],[\"script\",1],[\"style\",1],[\"directive\",1],[\"text\",3],[\"cdata\",4],[\"comment\",8]]),Node=function(){function e(e){this.type=e,this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return nodeTypes.get(this.type)||1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"parentNode\",{get:function(){return this.parent||null},set:function(e){this.parent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"previousSibling\",{get:function(){return this.prev||null},set:function(e){this.prev=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"nextSibling\",{get:function(){return this.next||null},set:function(e){this.next=e},enumerable:!0,configurable:!0}),e}();exports.Node=Node;var DataNode=function(e){function t(t,n){var r=e.call(this,t)||this;return r.data=n,r}return __extends(t,e),Object.defineProperty(t.prototype,\"nodeValue\",{get:function(){return this.data},set:function(e){this.data=e},enumerable:!0,configurable:!0}),t}(Node);exports.DataNode=DataNode;var ProcessingInstruction=function(e){function t(t,n){var r=e.call(this,\"directive\",n)||this;return r.name=t,r}return __extends(t,e),t}(DataNode);exports.ProcessingInstruction=ProcessingInstruction;var NodeWithChildren=function(e){function t(t,n){var r=e.call(this,t)||this;return r.children=n,r}return __extends(t,e),Object.defineProperty(t.prototype,\"firstChild\",{get:function(){return this.children[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"lastChild\",{get:function(){return this.children[this.children.length-1]||null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"childNodes\",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!0,configurable:!0}),t}(Node);exports.NodeWithChildren=NodeWithChildren;var Element=function(e){function t(t,n){var r=e.call(this,\"script\"===t?\"script\":\"style\"===t?\"style\":\"tag\",[])||this;return r.name=t,r.attribs=n,r.attribs=n,r}return __extends(t,e),Object.defineProperty(t.prototype,\"tagName\",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!0,configurable:!0}),t}(NodeWithChildren);exports.Element=Element;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/decode.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function getStrictDecoder(e){var t=Object.keys(e).join(\"|\"),r=getReplacer(e);t+=\"|#[xX][\\\\da-fA-F]+|#\\\\d+\";var o=new RegExp(\"&(?:\"+t+\");\",\"g\");return function(e){return String(e).replace(o,r)}}function getReplacer(e){return function(t){return\"#\"===t.charAt(1)?\"X\"===t.charAt(2)||\"x\"===t.charAt(2)?decode_codepoint_1[\"default\"](parseInt(t.substr(3),16)):decode_codepoint_1[\"default\"](parseInt(t.substr(2),10)):e[t.slice(1,-1)]}}var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,\"__esModule\",{value:!0});var entities_json_1=__importDefault(require(\"./maps/entities.json\")),legacy_json_1=__importDefault(require(\"./maps/legacy.json\")),xml_json_1=__importDefault(require(\"./maps/xml.json\")),decode_codepoint_1=__importDefault(require(\"./decode_codepoint\"));exports.decodeXML=getStrictDecoder(xml_json_1[\"default\"]),exports.decodeHTMLStrict=getStrictDecoder(entities_json_1[\"default\"]);var sorter=function(e,t){return e<t?1:-1};exports.decodeHTML=function(){function e(e){return\";\"!==e.substr(-1)&&(e+=\";\"),s(e)}for(var t=Object.keys(legacy_json_1[\"default\"]).sort(sorter),r=Object.keys(entities_json_1[\"default\"]).sort(sorter),o=0,n=0;o<r.length;o++)t[n]===r[o]?(r[o]+=\";?\",n++):r[o]+=\";\";var i=new RegExp(\"&(?:\"+r.join(\"|\")+\"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\",\"g\"),s=getReplacer(entities_json_1[\"default\"]);return function(t){return String(t).replace(i,e)}}();"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/decode_codepoint.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function decodeCodePoint(e){if(e>=55296&&e<=57343||e>1114111)return\"�\";e in decode_json_1[\"default\"]&&(e=decode_json_1[\"default\"][e]);var o=\"\";return e>65535&&(e-=65536,o+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),o+=String.fromCharCode(e)}var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,\"__esModule\",{value:!0});var decode_json_1=__importDefault(require(\"./maps/decode\"));exports[\"default\"]=decodeCodePoint;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/encode.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function getInverseObj(e){return Object.keys(e).sort().reduce(function(r,t){return r[e[t]]=\"&\"+t+\";\",r},{})}function getInverseReplacer(e){var r=[],t=[];return Object.keys(e).forEach(function(e){return 1===e.length?r.push(\"\\\\\"+e):t.push(e)}),t.unshift(\"[\"+r.join(\"\")+\"]\"),new RegExp(t.join(\"|\"),\"g\")}function singleCharReplacer(e){return\"&#x\"+e.charCodeAt(0).toString(16).toUpperCase()+\";\"}function astralReplacer(e,r){return\"&#x\"+(1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1)-56320+65536).toString(16).toUpperCase()+\";\"}function getInverse(e,r){return function(t){return t.replace(r,function(r){return e[r]}).replace(reAstralSymbols,astralReplacer).replace(reNonASCII,singleCharReplacer)}}function escape(e){return e.replace(reXmlChars,singleCharReplacer).replace(reAstralSymbols,astralReplacer).replace(reNonASCII,singleCharReplacer)}var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,\"__esModule\",{value:!0});var xml_json_1=__importDefault(require(\"./maps/xml.json\")),inverseXML=getInverseObj(xml_json_1[\"default\"]),xmlReplacer=getInverseReplacer(inverseXML);exports.encodeXML=getInverse(inverseXML,xmlReplacer);var entities_json_1=__importDefault(require(\"./maps/entities.json\")),inverseHTML=getInverseObj(entities_json_1[\"default\"]),htmlReplacer=getInverseReplacer(inverseHTML);exports.encodeHTML=getInverse(inverseHTML,htmlReplacer);var reNonASCII=/[^\\0-\\x7F]/g,reAstralSymbols=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,reXmlChars=getInverseReplacer(inverseXML);exports.escape=escape;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/index.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\n\"use strict\";function decode(e,d){return(!d||d<=0?decode_1.decodeXML:decode_1.decodeHTML)(e)}function decodeStrict(e,d){return(!d||d<=0?decode_1.decodeXML:decode_1.decodeHTMLStrict)(e)}function encode(e,d){return(!d||d<=0?encode_1.encodeXML:encode_1.encodeHTML)(e)}Object.defineProperty(exports,\"__esModule\",{value:!0});var decode_1=require(\"./decode\"),encode_1=require(\"./encode\");exports.decode=decode,exports.decodeStrict=decodeStrict,exports.encode=encode;var encode_2=require(\"./encode\");exports.encodeXML=encode_2.encodeXML,exports.encodeHTML=encode_2.encodeHTML,exports.escape=encode_2.escape,exports.encodeHTML4=encode_2.encodeHTML,exports.encodeHTML5=encode_2.encodeHTML;var decode_2=require(\"./decode\");exports.decodeXML=decode_2.decodeXML,exports.decodeHTML=decode_2.decodeHTML,exports.decodeHTMLStrict=decode_2.decodeHTMLStrict,exports.decodeHTML4=decode_2.decodeHTML,exports.decodeHTML5=decode_2.decodeHTML,exports.decodeHTML4Strict=decode_2.decodeHTMLStrict,exports.decodeHTML5Strict=decode_2.decodeHTMLStrict,exports.decodeXMLStrict=decode_2.decodeXML;"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/maps/decode.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\nmodule.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/maps/entities.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\nmodule.exports={Aacute:\"Á\",aacute:\"á\",Abreve:\"Ă\",abreve:\"ă\",ac:\"∾\",acd:\"∿\",acE:\"∾̳\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",Acy:\"А\",acy:\"а\",AElig:\"Æ\",aelig:\"æ\",af:\"⁡\",Afr:\"𝔄\",afr:\"𝔞\",Agrave:\"À\",agrave:\"à\",alefsym:\"ℵ\",aleph:\"ℵ\",Alpha:\"Α\",alpha:\"α\",Amacr:\"Ā\",amacr:\"ā\",amalg:\"⨿\",amp:\"&\",AMP:\"&\",andand:\"⩕\",And:\"⩓\",and:\"∧\",andd:\"⩜\",andslope:\"⩘\",andv:\"⩚\",ang:\"∠\",ange:\"⦤\",angle:\"∠\",angmsdaa:\"⦨\",angmsdab:\"⦩\",angmsdac:\"⦪\",angmsdad:\"⦫\",angmsdae:\"⦬\",angmsdaf:\"⦭\",angmsdag:\"⦮\",angmsdah:\"⦯\",angmsd:\"∡\",angrt:\"∟\",angrtvb:\"⊾\",angrtvbd:\"⦝\",angsph:\"∢\",angst:\"Å\",angzarr:\"⍼\",Aogon:\"Ą\",aogon:\"ą\",Aopf:\"𝔸\",aopf:\"𝕒\",apacir:\"⩯\",ap:\"≈\",apE:\"⩰\",ape:\"≊\",apid:\"≋\",apos:\"'\",ApplyFunction:\"⁡\",approx:\"≈\",approxeq:\"≊\",Aring:\"Å\",aring:\"å\",Ascr:\"𝒜\",ascr:\"𝒶\",Assign:\"≔\",ast:\"*\",asymp:\"≈\",asympeq:\"≍\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",awconint:\"∳\",awint:\"⨑\",backcong:\"≌\",backepsilon:\"϶\",backprime:\"‵\",backsim:\"∽\",backsimeq:\"⋍\",Backslash:\"∖\",Barv:\"⫧\",barvee:\"⊽\",barwed:\"⌅\",Barwed:\"⌆\",barwedge:\"⌅\",bbrk:\"⎵\",bbrktbrk:\"⎶\",bcong:\"≌\",Bcy:\"Б\",bcy:\"б\",bdquo:\"„\",becaus:\"∵\",because:\"∵\",Because:\"∵\",bemptyv:\"⦰\",bepsi:\"϶\",bernou:\"ℬ\",Bernoullis:\"ℬ\",Beta:\"Β\",beta:\"β\",beth:\"ℶ\",between:\"≬\",Bfr:\"𝔅\",bfr:\"𝔟\",bigcap:\"⋂\",bigcirc:\"◯\",bigcup:\"⋃\",bigodot:\"⨀\",bigoplus:\"⨁\",bigotimes:\"⨂\",bigsqcup:\"⨆\",bigstar:\"★\",bigtriangledown:\"▽\",bigtriangleup:\"△\",biguplus:\"⨄\",bigvee:\"⋁\",bigwedge:\"⋀\",bkarow:\"⤍\",blacklozenge:\"⧫\",blacksquare:\"▪\",blacktriangle:\"▴\",blacktriangledown:\"▾\",blacktriangleleft:\"◂\",blacktriangleright:\"▸\",blank:\"␣\",blk12:\"▒\",blk14:\"░\",blk34:\"▓\",block:\"█\",bne:\"=⃥\",bnequiv:\"≡⃥\",bNot:\"⫭\",bnot:\"⌐\",Bopf:\"𝔹\",bopf:\"𝕓\",bot:\"⊥\",bottom:\"⊥\",bowtie:\"⋈\",boxbox:\"⧉\",boxdl:\"┐\",boxdL:\"╕\",boxDl:\"╖\",boxDL:\"╗\",boxdr:\"┌\",boxdR:\"╒\",boxDr:\"╓\",boxDR:\"╔\",boxh:\"─\",boxH:\"═\",boxhd:\"┬\",boxHd:\"╤\",boxhD:\"╥\",boxHD:\"╦\",boxhu:\"┴\",boxHu:\"╧\",boxhU:\"╨\",boxHU:\"╩\",boxminus:\"⊟\",boxplus:\"⊞\",boxtimes:\"⊠\",boxul:\"┘\",boxuL:\"╛\",boxUl:\"╜\",boxUL:\"╝\",boxur:\"└\",boxuR:\"╘\",boxUr:\"╙\",boxUR:\"╚\",boxv:\"│\",boxV:\"║\",boxvh:\"┼\",boxvH:\"╪\",boxVh:\"╫\",boxVH:\"╬\",boxvl:\"┤\",boxvL:\"╡\",boxVl:\"╢\",boxVL:\"╣\",boxvr:\"├\",boxvR:\"╞\",boxVr:\"╟\",boxVR:\"╠\",bprime:\"‵\",breve:\"˘\",Breve:\"˘\",brvbar:\"¦\",bscr:\"𝒷\",Bscr:\"ℬ\",bsemi:\"⁏\",bsim:\"∽\",bsime:\"⋍\",bsolb:\"⧅\",bsol:\"\\\\\",bsolhsub:\"⟈\",bull:\"•\",bullet:\"•\",bump:\"≎\",bumpE:\"⪮\",bumpe:\"≏\",Bumpeq:\"≎\",bumpeq:\"≏\",Cacute:\"Ć\",cacute:\"ć\",capand:\"⩄\",capbrcup:\"⩉\",capcap:\"⩋\",cap:\"∩\",Cap:\"⋒\",capcup:\"⩇\",capdot:\"⩀\",CapitalDifferentialD:\"ⅅ\",caps:\"∩︀\",caret:\"⁁\",caron:\"ˇ\",Cayleys:\"ℭ\",ccaps:\"⩍\",Ccaron:\"Č\",ccaron:\"č\",Ccedil:\"Ç\",ccedil:\"ç\",Ccirc:\"Ĉ\",ccirc:\"ĉ\",Cconint:\"∰\",ccups:\"⩌\",ccupssm:\"⩐\",Cdot:\"Ċ\",cdot:\"ċ\",cedil:\"¸\",Cedilla:\"¸\",cemptyv:\"⦲\",cent:\"¢\",centerdot:\"·\",CenterDot:\"·\",cfr:\"𝔠\",Cfr:\"ℭ\",CHcy:\"Ч\",chcy:\"ч\",check:\"✓\",checkmark:\"✓\",Chi:\"Χ\",chi:\"χ\",circ:\"ˆ\",circeq:\"≗\",circlearrowleft:\"↺\",circlearrowright:\"↻\",circledast:\"⊛\",circledcirc:\"⊚\",circleddash:\"⊝\",CircleDot:\"⊙\",circledR:\"®\",circledS:\"Ⓢ\",CircleMinus:\"⊖\",CirclePlus:\"⊕\",CircleTimes:\"⊗\",cir:\"○\",cirE:\"⧃\",cire:\"≗\",cirfnint:\"⨐\",cirmid:\"⫯\",cirscir:\"⧂\",ClockwiseContourIntegral:\"∲\",CloseCurlyDoubleQuote:\"”\",CloseCurlyQuote:\"’\",clubs:\"♣\",clubsuit:\"♣\",colon:\":\",Colon:\"∷\",Colone:\"⩴\",colone:\"≔\",coloneq:\"≔\",comma:\",\",commat:\"@\",comp:\"∁\",compfn:\"∘\",complement:\"∁\",complexes:\"ℂ\",cong:\"≅\",congdot:\"⩭\",Congruent:\"≡\",conint:\"∮\",Conint:\"∯\",ContourIntegral:\"∮\",copf:\"𝕔\",Copf:\"ℂ\",coprod:\"∐\",Coproduct:\"∐\",copy:\"©\",COPY:\"©\",copysr:\"℗\",CounterClockwiseContourIntegral:\"∳\",crarr:\"↵\",cross:\"✗\",Cross:\"⨯\",Cscr:\"𝒞\",cscr:\"𝒸\",csub:\"⫏\",csube:\"⫑\",csup:\"⫐\",csupe:\"⫒\",ctdot:\"⋯\",cudarrl:\"⤸\",cudarrr:\"⤵\",cuepr:\"⋞\",cuesc:\"⋟\",cularr:\"↶\",cularrp:\"⤽\",cupbrcap:\"⩈\",cupcap:\"⩆\",CupCap:\"≍\",cup:\"∪\",Cup:\"⋓\",cupcup:\"⩊\",cupdot:\"⊍\",cupor:\"⩅\",cups:\"∪︀\",curarr:\"↷\",curarrm:\"⤼\",curlyeqprec:\"⋞\",curlyeqsucc:\"⋟\",curlyvee:\"⋎\",curlywedge:\"⋏\",curren:\"¤\",curvearrowleft:\"↶\",curvearrowright:\"↷\",cuvee:\"⋎\",cuwed:\"⋏\",cwconint:\"∲\",cwint:\"∱\",cylcty:\"⌭\",dagger:\"†\",Dagger:\"‡\",daleth:\"ℸ\",darr:\"↓\",Darr:\"↡\",dArr:\"⇓\",dash:\"‐\",Dashv:\"⫤\",dashv:\"⊣\",dbkarow:\"⤏\",dblac:\"˝\",Dcaron:\"Ď\",dcaron:\"ď\",Dcy:\"Д\",dcy:\"д\",ddagger:\"‡\",ddarr:\"⇊\",DD:\"ⅅ\",dd:\"ⅆ\",DDotrahd:\"⤑\",ddotseq:\"⩷\",deg:\"°\",Del:\"∇\",Delta:\"Δ\",delta:\"δ\",demptyv:\"⦱\",dfisht:\"⥿\",Dfr:\"𝔇\",dfr:\"𝔡\",dHar:\"⥥\",dharl:\"⇃\",dharr:\"⇂\",DiacriticalAcute:\"´\",DiacriticalDot:\"˙\",DiacriticalDoubleAcute:\"˝\",DiacriticalGrave:\"`\",DiacriticalTilde:\"˜\",diam:\"⋄\",diamond:\"⋄\",Diamond:\"⋄\",diamondsuit:\"♦\",diams:\"♦\",die:\"¨\",DifferentialD:\"ⅆ\",digamma:\"ϝ\",disin:\"⋲\",div:\"÷\",divide:\"÷\",divideontimes:\"⋇\",divonx:\"⋇\",DJcy:\"Ђ\",djcy:\"ђ\",dlcorn:\"⌞\",dlcrop:\"⌍\",dollar:\"$\",Dopf:\"𝔻\",dopf:\"𝕕\",Dot:\"¨\",dot:\"˙\",DotDot:\"⃜\",doteq:\"≐\",doteqdot:\"≑\",DotEqual:\"≐\",dotminus:\"∸\",dotplus:\"∔\",dotsquare:\"⊡\",doublebarwedge:\"⌆\",DoubleContourIntegral:\"∯\",DoubleDot:\"¨\",DoubleDownArrow:\"⇓\",DoubleLeftArrow:\"⇐\",DoubleLeftRightArrow:\"⇔\",DoubleLeftTee:\"⫤\",DoubleLongLeftArrow:\"⟸\",DoubleLongLeftRightArrow:\"⟺\",DoubleLongRightArrow:\"⟹\",DoubleRightArrow:\"⇒\",DoubleRightTee:\"⊨\",DoubleUpArrow:\"⇑\",DoubleUpDownArrow:\"⇕\",DoubleVerticalBar:\"∥\",DownArrowBar:\"⤓\",downarrow:\"↓\",DownArrow:\"↓\",Downarrow:\"⇓\",DownArrowUpArrow:\"⇵\",DownBreve:\"̑\",downdownarrows:\"⇊\",downharpoonleft:\"⇃\",downharpoonright:\"⇂\",DownLeftRightVector:\"⥐\",DownLeftTeeVector:\"⥞\",DownLeftVectorBar:\"⥖\",DownLeftVector:\"↽\",DownRightTeeVector:\"⥟\",DownRightVectorBar:\"⥗\",DownRightVector:\"⇁\",DownTeeArrow:\"↧\",DownTee:\"⊤\",drbkarow:\"⤐\",drcorn:\"⌟\",drcrop:\"⌌\",Dscr:\"𝒟\",dscr:\"𝒹\",DScy:\"Ѕ\",dscy:\"ѕ\",dsol:\"⧶\",Dstrok:\"Đ\",dstrok:\"đ\",dtdot:\"⋱\",dtri:\"▿\",dtrif:\"▾\",duarr:\"⇵\",duhar:\"⥯\",dwangle:\"⦦\",DZcy:\"Џ\",dzcy:\"џ\",dzigrarr:\"⟿\",Eacute:\"É\",eacute:\"é\",easter:\"⩮\",Ecaron:\"Ě\",ecaron:\"ě\",Ecirc:\"Ê\",ecirc:\"ê\",ecir:\"≖\",ecolon:\"≕\",Ecy:\"Э\",ecy:\"э\",eDDot:\"⩷\",Edot:\"Ė\",edot:\"ė\",eDot:\"≑\",ee:\"ⅇ\",efDot:\"≒\",Efr:\"𝔈\",efr:\"𝔢\",eg:\"⪚\",Egrave:\"È\",egrave:\"è\",egs:\"⪖\",egsdot:\"⪘\",el:\"⪙\",Element:\"∈\",elinters:\"⏧\",ell:\"ℓ\",els:\"⪕\",elsdot:\"⪗\",Emacr:\"Ē\",emacr:\"ē\",empty:\"∅\",emptyset:\"∅\",EmptySmallSquare:\"◻\",emptyv:\"∅\",EmptyVerySmallSquare:\"▫\",emsp13:\" \",emsp14:\" \",emsp:\" \",ENG:\"Ŋ\",eng:\"ŋ\",ensp:\" \",Eogon:\"Ę\",eogon:\"ę\",Eopf:\"𝔼\",eopf:\"𝕖\",epar:\"⋕\",eparsl:\"⧣\",eplus:\"⩱\",epsi:\"ε\",Epsilon:\"Ε\",epsilon:\"ε\",epsiv:\"ϵ\",eqcirc:\"≖\",eqcolon:\"≕\",eqsim:\"≂\",eqslantgtr:\"⪖\",eqslantless:\"⪕\",Equal:\"⩵\",equals:\"=\",EqualTilde:\"≂\",equest:\"≟\",Equilibrium:\"⇌\",equiv:\"≡\",equivDD:\"⩸\",eqvparsl:\"⧥\",erarr:\"⥱\",erDot:\"≓\",escr:\"ℯ\",Escr:\"ℰ\",esdot:\"≐\",Esim:\"⩳\",esim:\"≂\",Eta:\"Η\",eta:\"η\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",euro:\"€\",excl:\"!\",exist:\"∃\",Exists:\"∃\",expectation:\"ℰ\",exponentiale:\"ⅇ\",ExponentialE:\"ⅇ\",fallingdotseq:\"≒\",Fcy:\"Ф\",fcy:\"ф\",female:\"♀\",ffilig:\"ﬃ\",fflig:\"ﬀ\",ffllig:\"ﬄ\",Ffr:\"𝔉\",ffr:\"𝔣\",filig:\"ﬁ\",FilledSmallSquare:\"◼\",FilledVerySmallSquare:\"▪\",fjlig:\"fj\",flat:\"♭\",fllig:\"ﬂ\",fltns:\"▱\",fnof:\"ƒ\",Fopf:\"𝔽\",fopf:\"𝕗\",forall:\"∀\",ForAll:\"∀\",fork:\"⋔\",forkv:\"⫙\",Fouriertrf:\"ℱ\",fpartint:\"⨍\",frac12:\"½\",frac13:\"⅓\",frac14:\"¼\",frac15:\"⅕\",frac16:\"⅙\",frac18:\"⅛\",frac23:\"⅔\",frac25:\"⅖\",frac34:\"¾\",frac35:\"⅗\",frac38:\"⅜\",frac45:\"⅘\",frac56:\"⅚\",frac58:\"⅝\",frac78:\"⅞\",frasl:\"⁄\",frown:\"⌢\",fscr:\"𝒻\",Fscr:\"ℱ\",gacute:\"ǵ\",Gamma:\"Γ\",gamma:\"γ\",Gammad:\"Ϝ\",gammad:\"ϝ\",gap:\"⪆\",Gbreve:\"Ğ\",gbreve:\"ğ\",Gcedil:\"Ģ\",Gcirc:\"Ĝ\",gcirc:\"ĝ\",Gcy:\"Г\",gcy:\"г\",Gdot:\"Ġ\",gdot:\"ġ\",ge:\"≥\",gE:\"≧\",gEl:\"⪌\",gel:\"⋛\",geq:\"≥\",geqq:\"≧\",geqslant:\"⩾\",gescc:\"⪩\",ges:\"⩾\",gesdot:\"⪀\",gesdoto:\"⪂\",gesdotol:\"⪄\",gesl:\"⋛︀\",gesles:\"⪔\",Gfr:\"𝔊\",gfr:\"𝔤\",gg:\"≫\",Gg:\"⋙\",ggg:\"⋙\",gimel:\"ℷ\",GJcy:\"Ѓ\",gjcy:\"ѓ\",gla:\"⪥\",gl:\"≷\",glE:\"⪒\",glj:\"⪤\",gnap:\"⪊\",gnapprox:\"⪊\",gne:\"⪈\",gnE:\"≩\",gneq:\"⪈\",gneqq:\"≩\",gnsim:\"⋧\",Gopf:\"𝔾\",gopf:\"𝕘\",grave:\"`\",GreaterEqual:\"≥\",GreaterEqualLess:\"⋛\",GreaterFullEqual:\"≧\",GreaterGreater:\"⪢\",GreaterLess:\"≷\",GreaterSlantEqual:\"⩾\",GreaterTilde:\"≳\",Gscr:\"𝒢\",gscr:\"ℊ\",gsim:\"≳\",gsime:\"⪎\",gsiml:\"⪐\",gtcc:\"⪧\",gtcir:\"⩺\",gt:\">\",GT:\">\",Gt:\"≫\",gtdot:\"⋗\",gtlPar:\"⦕\",gtquest:\"⩼\",gtrapprox:\"⪆\",gtrarr:\"⥸\",gtrdot:\"⋗\",gtreqless:\"⋛\",gtreqqless:\"⪌\",gtrless:\"≷\",gtrsim:\"≳\",gvertneqq:\"≩︀\",gvnE:\"≩︀\",Hacek:\"ˇ\",hairsp:\" \",half:\"½\",hamilt:\"ℋ\",HARDcy:\"Ъ\",hardcy:\"ъ\",harrcir:\"⥈\",harr:\"↔\",hArr:\"⇔\",harrw:\"↭\",Hat:\"^\",hbar:\"ℏ\",Hcirc:\"Ĥ\",hcirc:\"ĥ\",hearts:\"♥\",heartsuit:\"♥\",hellip:\"…\",hercon:\"⊹\",hfr:\"𝔥\",Hfr:\"ℌ\",HilbertSpace:\"ℋ\",hksearow:\"⤥\",hkswarow:\"⤦\",hoarr:\"⇿\",homtht:\"∻\",hookleftarrow:\"↩\",hookrightarrow:\"↪\",hopf:\"𝕙\",Hopf:\"ℍ\",horbar:\"―\",HorizontalLine:\"─\",hscr:\"𝒽\",Hscr:\"ℋ\",hslash:\"ℏ\",Hstrok:\"Ħ\",hstrok:\"ħ\",HumpDownHump:\"≎\",HumpEqual:\"≏\",hybull:\"⁃\",hyphen:\"‐\",Iacute:\"Í\",iacute:\"í\",ic:\"⁣\",Icirc:\"Î\",icirc:\"î\",Icy:\"И\",icy:\"и\",Idot:\"İ\",IEcy:\"Е\",iecy:\"е\",iexcl:\"¡\",iff:\"⇔\",ifr:\"𝔦\",Ifr:\"ℑ\",Igrave:\"Ì\",igrave:\"ì\",ii:\"ⅈ\",iiiint:\"⨌\",iiint:\"∭\",iinfin:\"⧜\",iiota:\"℩\",IJlig:\"Ĳ\",ijlig:\"ĳ\",Imacr:\"Ī\",imacr:\"ī\",image:\"ℑ\",ImaginaryI:\"ⅈ\",imagline:\"ℐ\",imagpart:\"ℑ\",imath:\"ı\",Im:\"ℑ\",imof:\"⊷\",imped:\"Ƶ\",Implies:\"⇒\",incare:\"℅\",in:\"∈\",infin:\"∞\",infintie:\"⧝\",inodot:\"ı\",intcal:\"⊺\",int:\"∫\",Int:\"∬\",integers:\"ℤ\",Integral:\"∫\",intercal:\"⊺\",Intersection:\"⋂\",intlarhk:\"⨗\",intprod:\"⨼\",InvisibleComma:\"⁣\",InvisibleTimes:\"⁢\",IOcy:\"Ё\",iocy:\"ё\",Iogon:\"Į\",iogon:\"į\",Iopf:\"𝕀\",iopf:\"𝕚\",Iota:\"Ι\",iota:\"ι\",iprod:\"⨼\",iquest:\"¿\",iscr:\"𝒾\",Iscr:\"ℐ\",isin:\"∈\",isindot:\"⋵\",isinE:\"⋹\",isins:\"⋴\",isinsv:\"⋳\",isinv:\"∈\",it:\"⁢\",Itilde:\"Ĩ\",itilde:\"ĩ\",Iukcy:\"І\",iukcy:\"і\",Iuml:\"Ï\",iuml:\"ï\",Jcirc:\"Ĵ\",jcirc:\"ĵ\",Jcy:\"Й\",jcy:\"й\",Jfr:\"𝔍\",jfr:\"𝔧\",jmath:\"ȷ\",Jopf:\"𝕁\",jopf:\"𝕛\",Jscr:\"𝒥\",jscr:\"𝒿\",Jsercy:\"Ј\",jsercy:\"ј\",Jukcy:\"Є\",jukcy:\"є\",Kappa:\"Κ\",kappa:\"κ\",kappav:\"ϰ\",Kcedil:\"Ķ\",kcedil:\"ķ\",Kcy:\"К\",kcy:\"к\",Kfr:\"𝔎\",kfr:\"𝔨\",kgreen:\"ĸ\",KHcy:\"Х\",khcy:\"х\",KJcy:\"Ќ\",kjcy:\"ќ\",Kopf:\"𝕂\",kopf:\"𝕜\",Kscr:\"𝒦\",kscr:\"𝓀\",lAarr:\"⇚\",Lacute:\"Ĺ\",lacute:\"ĺ\",laemptyv:\"⦴\",lagran:\"ℒ\",Lambda:\"Λ\",lambda:\"λ\",lang:\"⟨\",Lang:\"⟪\",langd:\"⦑\",langle:\"⟨\",lap:\"⪅\",Laplacetrf:\"ℒ\",laquo:\"«\",larrb:\"⇤\",larrbfs:\"⤟\",larr:\"←\",Larr:\"↞\",lArr:\"⇐\",larrfs:\"⤝\",larrhk:\"↩\",larrlp:\"↫\",larrpl:\"⤹\",larrsim:\"⥳\",larrtl:\"↢\",latail:\"⤙\",lAtail:\"⤛\",lat:\"⪫\",late:\"⪭\",lates:\"⪭︀\",lbarr:\"⤌\",lBarr:\"⤎\",lbbrk:\"❲\",lbrace:\"{\",lbrack:\"[\",lbrke:\"⦋\",lbrksld:\"⦏\",lbrkslu:\"⦍\",Lcaron:\"Ľ\",lcaron:\"ľ\",Lcedil:\"Ļ\",lcedil:\"ļ\",lceil:\"⌈\",lcub:\"{\",Lcy:\"Л\",lcy:\"л\",ldca:\"⤶\",ldquo:\"“\",ldquor:\"„\",ldrdhar:\"⥧\",ldrushar:\"⥋\",ldsh:\"↲\",le:\"≤\",lE:\"≦\",LeftAngleBracket:\"⟨\",LeftArrowBar:\"⇤\",leftarrow:\"←\",LeftArrow:\"←\",Leftarrow:\"⇐\",LeftArrowRightArrow:\"⇆\",leftarrowtail:\"↢\",LeftCeiling:\"⌈\",LeftDoubleBracket:\"⟦\",LeftDownTeeVector:\"⥡\",LeftDownVectorBar:\"⥙\",LeftDownVector:\"⇃\",LeftFloor:\"⌊\",leftharpoondown:\"↽\",leftharpoonup:\"↼\",leftleftarrows:\"⇇\",leftrightarrow:\"↔\",LeftRightArrow:\"↔\",Leftrightarrow:\"⇔\",leftrightarrows:\"⇆\",leftrightharpoons:\"⇋\",leftrightsquigarrow:\"↭\",LeftRightVector:\"⥎\",LeftTeeArrow:\"↤\",LeftTee:\"⊣\",LeftTeeVector:\"⥚\",leftthreetimes:\"⋋\",LeftTriangleBar:\"⧏\",LeftTriangle:\"⊲\",LeftTriangleEqual:\"⊴\",LeftUpDownVector:\"⥑\",LeftUpTeeVector:\"⥠\",LeftUpVectorBar:\"⥘\",LeftUpVector:\"↿\",LeftVectorBar:\"⥒\",LeftVector:\"↼\",lEg:\"⪋\",leg:\"⋚\",leq:\"≤\",leqq:\"≦\",leqslant:\"⩽\",lescc:\"⪨\",les:\"⩽\",lesdot:\"⩿\",lesdoto:\"⪁\",lesdotor:\"⪃\",lesg:\"⋚︀\",lesges:\"⪓\",lessapprox:\"⪅\",lessdot:\"⋖\",lesseqgtr:\"⋚\",lesseqqgtr:\"⪋\",LessEqualGreater:\"⋚\",LessFullEqual:\"≦\",LessGreater:\"≶\",lessgtr:\"≶\",LessLess:\"⪡\",lesssim:\"≲\",LessSlantEqual:\"⩽\",LessTilde:\"≲\",lfisht:\"⥼\",lfloor:\"⌊\",Lfr:\"𝔏\",lfr:\"𝔩\",lg:\"≶\",lgE:\"⪑\",lHar:\"⥢\",lhard:\"↽\",lharu:\"↼\",lharul:\"⥪\",lhblk:\"▄\",LJcy:\"Љ\",ljcy:\"љ\",llarr:\"⇇\",ll:\"≪\",Ll:\"⋘\",llcorner:\"⌞\",Lleftarrow:\"⇚\",llhard:\"⥫\",lltri:\"◺\",Lmidot:\"Ŀ\",lmidot:\"ŀ\",lmoustache:\"⎰\",lmoust:\"⎰\",lnap:\"⪉\",lnapprox:\"⪉\",lne:\"⪇\",lnE:\"≨\",lneq:\"⪇\",lneqq:\"≨\",lnsim:\"⋦\",loang:\"⟬\",loarr:\"⇽\",lobrk:\"⟦\",longleftarrow:\"⟵\",LongLeftArrow:\"⟵\",Longleftarrow:\"⟸\",longleftrightarrow:\"⟷\",LongLeftRightArrow:\"⟷\",Longleftrightarrow:\"⟺\",longmapsto:\"⟼\",longrightarrow:\"⟶\",LongRightArrow:\"⟶\",Longrightarrow:\"⟹\",looparrowleft:\"↫\",looparrowright:\"↬\",lopar:\"⦅\",Lopf:\"𝕃\",lopf:\"𝕝\",loplus:\"⨭\",lotimes:\"⨴\",lowast:\"∗\",lowbar:\"_\",LowerLeftArrow:\"↙\",LowerRightArrow:\"↘\",loz:\"◊\",lozenge:\"◊\",lozf:\"⧫\",lpar:\"(\",lparlt:\"⦓\",lrarr:\"⇆\",lrcorner:\"⌟\",lrhar:\"⇋\",lrhard:\"⥭\",lrm:\"‎\",lrtri:\"⊿\",lsaquo:\"‹\",lscr:\"𝓁\",Lscr:\"ℒ\",lsh:\"↰\",Lsh:\"↰\",lsim:\"≲\",lsime:\"⪍\",lsimg:\"⪏\",lsqb:\"[\",lsquo:\"‘\",lsquor:\"‚\",Lstrok:\"Ł\",lstrok:\"ł\",ltcc:\"⪦\",ltcir:\"⩹\",lt:\"<\",LT:\"<\",Lt:\"≪\",ltdot:\"⋖\",lthree:\"⋋\",ltimes:\"⋉\",ltlarr:\"⥶\",ltquest:\"⩻\",ltri:\"◃\",ltrie:\"⊴\",ltrif:\"◂\",ltrPar:\"⦖\",lurdshar:\"⥊\",luruhar:\"⥦\",lvertneqq:\"≨︀\",lvnE:\"≨︀\",macr:\"¯\",male:\"♂\",malt:\"✠\",maltese:\"✠\",Map:\"⤅\",map:\"↦\",mapsto:\"↦\",mapstodown:\"↧\",mapstoleft:\"↤\",mapstoup:\"↥\",marker:\"▮\",mcomma:\"⨩\",Mcy:\"М\",mcy:\"м\",mdash:\"—\",mDDot:\"∺\",measuredangle:\"∡\",MediumSpace:\" \",Mellintrf:\"ℳ\",Mfr:\"𝔐\",mfr:\"𝔪\",mho:\"℧\",micro:\"µ\",midast:\"*\",midcir:\"⫰\",mid:\"∣\",middot:\"·\",minusb:\"⊟\",minus:\"−\",minusd:\"∸\",minusdu:\"⨪\",MinusPlus:\"∓\",mlcp:\"⫛\",mldr:\"…\",mnplus:\"∓\",models:\"⊧\",Mopf:\"𝕄\",mopf:\"𝕞\",mp:\"∓\",mscr:\"𝓂\",Mscr:\"ℳ\",mstpos:\"∾\",Mu:\"Μ\",mu:\"μ\",multimap:\"⊸\",mumap:\"⊸\",nabla:\"∇\",Nacute:\"Ń\",nacute:\"ń\",nang:\"∠⃒\",nap:\"≉\",napE:\"⩰̸\",napid:\"≋̸\",napos:\"ŉ\",napprox:\"≉\",natural:\"♮\",naturals:\"ℕ\",natur:\"♮\",nbsp:\" \",nbump:\"≎̸\",nbumpe:\"≏̸\",ncap:\"⩃\",Ncaron:\"Ň\",ncaron:\"ň\",Ncedil:\"Ņ\",ncedil:\"ņ\",ncong:\"≇\",ncongdot:\"⩭̸\",ncup:\"⩂\",Ncy:\"Н\",ncy:\"н\",ndash:\"–\",nearhk:\"⤤\",nearr:\"↗\",neArr:\"⇗\",nearrow:\"↗\",ne:\"≠\",nedot:\"≐̸\",NegativeMediumSpace:\"​\",NegativeThickSpace:\"​\",NegativeThinSpace:\"​\",NegativeVeryThinSpace:\"​\",nequiv:\"≢\",nesear:\"⤨\",nesim:\"≂̸\",NestedGreaterGreater:\"≫\",NestedLessLess:\"≪\",NewLine:\"\\n\",nexist:\"∄\",nexists:\"∄\",Nfr:\"𝔑\",nfr:\"𝔫\",ngE:\"≧̸\",nge:\"≱\",ngeq:\"≱\",ngeqq:\"≧̸\",ngeqslant:\"⩾̸\",nges:\"⩾̸\",nGg:\"⋙̸\",ngsim:\"≵\",nGt:\"≫⃒\",ngt:\"≯\",ngtr:\"≯\",nGtv:\"≫̸\",nharr:\"↮\",nhArr:\"⇎\",nhpar:\"⫲\",ni:\"∋\",nis:\"⋼\",nisd:\"⋺\",niv:\"∋\",NJcy:\"Њ\",njcy:\"њ\",nlarr:\"↚\",nlArr:\"⇍\",nldr:\"‥\",nlE:\"≦̸\",nle:\"≰\",nleftarrow:\"↚\",nLeftarrow:\"⇍\",nleftrightarrow:\"↮\",nLeftrightarrow:\"⇎\",nleq:\"≰\",nleqq:\"≦̸\",nleqslant:\"⩽̸\",nles:\"⩽̸\",nless:\"≮\",nLl:\"⋘̸\",nlsim:\"≴\",nLt:\"≪⃒\",nlt:\"≮\",nltri:\"⋪\",nltrie:\"⋬\",nLtv:\"≪̸\",nmid:\"∤\",NoBreak:\"⁠\",NonBreakingSpace:\" \",nopf:\"𝕟\",Nopf:\"ℕ\",Not:\"⫬\",not:\"¬\",NotCongruent:\"≢\",NotCupCap:\"≭\",NotDoubleVerticalBar:\"∦\",NotElement:\"∉\",NotEqual:\"≠\",NotEqualTilde:\"≂̸\",NotExists:\"∄\",NotGreater:\"≯\",NotGreaterEqual:\"≱\",NotGreaterFullEqual:\"≧̸\",NotGreaterGreater:\"≫̸\",NotGreaterLess:\"≹\",NotGreaterSlantEqual:\"⩾̸\",NotGreaterTilde:\"≵\",NotHumpDownHump:\"≎̸\",NotHumpEqual:\"≏̸\",notin:\"∉\",notindot:\"⋵̸\",notinE:\"⋹̸\",notinva:\"∉\",notinvb:\"⋷\",notinvc:\"⋶\",NotLeftTriangleBar:\"⧏̸\",NotLeftTriangle:\"⋪\",NotLeftTriangleEqual:\"⋬\",NotLess:\"≮\",NotLessEqual:\"≰\",NotLessGreater:\"≸\",NotLessLess:\"≪̸\",NotLessSlantEqual:\"⩽̸\",NotLessTilde:\"≴\",NotNestedGreaterGreater:\"⪢̸\",NotNestedLessLess:\"⪡̸\",notni:\"∌\",notniva:\"∌\",notnivb:\"⋾\",notnivc:\"⋽\",NotPrecedes:\"⊀\",NotPrecedesEqual:\"⪯̸\",NotPrecedesSlantEqual:\"⋠\",NotReverseElement:\"∌\",NotRightTriangleBar:\"⧐̸\",NotRightTriangle:\"⋫\",NotRightTriangleEqual:\"⋭\",NotSquareSubset:\"⊏̸\",NotSquareSubsetEqual:\"⋢\",NotSquareSuperset:\"⊐̸\",NotSquareSupersetEqual:\"⋣\",NotSubset:\"⊂⃒\",NotSubsetEqual:\"⊈\",NotSucceeds:\"⊁\",NotSucceedsEqual:\"⪰̸\",NotSucceedsSlantEqual:\"⋡\",NotSucceedsTilde:\"≿̸\",NotSuperset:\"⊃⃒\",NotSupersetEqual:\"⊉\",NotTilde:\"≁\",NotTildeEqual:\"≄\",NotTildeFullEqual:\"≇\",NotTildeTilde:\"≉\",NotVerticalBar:\"∤\",nparallel:\"∦\",npar:\"∦\",nparsl:\"⫽⃥\",npart:\"∂̸\",npolint:\"⨔\",npr:\"⊀\",nprcue:\"⋠\",nprec:\"⊀\",npreceq:\"⪯̸\",npre:\"⪯̸\",nrarrc:\"⤳̸\",nrarr:\"↛\",nrArr:\"⇏\",nrarrw:\"↝̸\",nrightarrow:\"↛\",nRightarrow:\"⇏\",nrtri:\"⋫\",nrtrie:\"⋭\",nsc:\"⊁\",nsccue:\"⋡\",nsce:\"⪰̸\",Nscr:\"𝒩\",nscr:\"𝓃\",nshortmid:\"∤\",nshortparallel:\"∦\",nsim:\"≁\",nsime:\"≄\",nsimeq:\"≄\",nsmid:\"∤\",nspar:\"∦\",nsqsube:\"⋢\",nsqsupe:\"⋣\",nsub:\"⊄\",nsubE:\"⫅̸\",nsube:\"⊈\",nsubset:\"⊂⃒\",nsubseteq:\"⊈\",nsubseteqq:\"⫅̸\",nsucc:\"⊁\",nsucceq:\"⪰̸\",nsup:\"⊅\",nsupE:\"⫆̸\",nsupe:\"⊉\",nsupset:\"⊃⃒\",nsupseteq:\"⊉\",nsupseteqq:\"⫆̸\",ntgl:\"≹\",Ntilde:\"Ñ\",ntilde:\"ñ\",ntlg:\"≸\",ntriangleleft:\"⋪\",ntrianglelefteq:\"⋬\",ntriangleright:\"⋫\",ntrianglerighteq:\"⋭\",Nu:\"Ν\",nu:\"ν\",num:\"#\",numero:\"№\",numsp:\" \",nvap:\"≍⃒\",nvdash:\"⊬\",nvDash:\"⊭\",nVdash:\"⊮\",nVDash:\"⊯\",nvge:\"≥⃒\",nvgt:\">⃒\",nvHarr:\"⤄\",nvinfin:\"⧞\",nvlArr:\"⤂\",nvle:\"≤⃒\",nvlt:\"<⃒\",nvltrie:\"⊴⃒\",nvrArr:\"⤃\",nvrtrie:\"⊵⃒\",nvsim:\"∼⃒\",nwarhk:\"⤣\",nwarr:\"↖\",nwArr:\"⇖\",nwarrow:\"↖\",nwnear:\"⤧\",Oacute:\"Ó\",oacute:\"ó\",oast:\"⊛\",Ocirc:\"Ô\",ocirc:\"ô\",ocir:\"⊚\",Ocy:\"О\",ocy:\"о\",odash:\"⊝\",Odblac:\"Ő\",odblac:\"ő\",odiv:\"⨸\",odot:\"⊙\",odsold:\"⦼\",OElig:\"Œ\",oelig:\"œ\",ofcir:\"⦿\",Ofr:\"𝔒\",ofr:\"𝔬\",ogon:\"˛\",Ograve:\"Ò\",ograve:\"ò\",ogt:\"⧁\",ohbar:\"⦵\",ohm:\"Ω\",oint:\"∮\",olarr:\"↺\",olcir:\"⦾\",olcross:\"⦻\",oline:\"‾\",olt:\"⧀\",Omacr:\"Ō\",omacr:\"ō\",Omega:\"Ω\",omega:\"ω\",Omicron:\"Ο\",omicron:\"ο\",omid:\"⦶\",ominus:\"⊖\",Oopf:\"𝕆\",oopf:\"𝕠\",opar:\"⦷\",OpenCurlyDoubleQuote:\"“\",OpenCurlyQuote:\"‘\",operp:\"⦹\",oplus:\"⊕\",orarr:\"↻\",Or:\"⩔\",or:\"∨\",ord:\"⩝\",order:\"ℴ\",orderof:\"ℴ\",ordf:\"ª\",ordm:\"º\",origof:\"⊶\",oror:\"⩖\",orslope:\"⩗\",orv:\"⩛\",oS:\"Ⓢ\",Oscr:\"𝒪\",oscr:\"ℴ\",Oslash:\"Ø\",oslash:\"ø\",osol:\"⊘\",Otilde:\"Õ\",otilde:\"õ\",otimesas:\"⨶\",Otimes:\"⨷\",otimes:\"⊗\",Ouml:\"Ö\",ouml:\"ö\",ovbar:\"⌽\",OverBar:\"‾\",OverBrace:\"⏞\",OverBracket:\"⎴\",OverParenthesis:\"⏜\",para:\"¶\",parallel:\"∥\",par:\"∥\",parsim:\"⫳\",parsl:\"⫽\",part:\"∂\",PartialD:\"∂\",Pcy:\"П\",pcy:\"п\",percnt:\"%\",period:\".\",permil:\"‰\",perp:\"⊥\",pertenk:\"‱\",Pfr:\"𝔓\",pfr:\"𝔭\",Phi:\"Φ\",phi:\"φ\",phiv:\"ϕ\",phmmat:\"ℳ\",phone:\"☎\",Pi:\"Π\",pi:\"π\",pitchfork:\"⋔\",piv:\"ϖ\",planck:\"ℏ\",planckh:\"ℎ\",plankv:\"ℏ\",plusacir:\"⨣\",plusb:\"⊞\",pluscir:\"⨢\",plus:\"+\",plusdo:\"∔\",plusdu:\"⨥\",pluse:\"⩲\",PlusMinus:\"±\",plusmn:\"±\",plussim:\"⨦\",plustwo:\"⨧\",pm:\"±\",Poincareplane:\"ℌ\",pointint:\"⨕\",popf:\"𝕡\",Popf:\"ℙ\",pound:\"£\",prap:\"⪷\",Pr:\"⪻\",pr:\"≺\",prcue:\"≼\",precapprox:\"⪷\",prec:\"≺\",preccurlyeq:\"≼\",Precedes:\"≺\",PrecedesEqual:\"⪯\",PrecedesSlantEqual:\"≼\",PrecedesTilde:\"≾\",preceq:\"⪯\",precnapprox:\"⪹\",precneqq:\"⪵\",precnsim:\"⋨\",pre:\"⪯\",prE:\"⪳\",precsim:\"≾\",prime:\"′\",Prime:\"″\",primes:\"ℙ\",prnap:\"⪹\",prnE:\"⪵\",prnsim:\"⋨\",prod:\"∏\",Product:\"∏\",profalar:\"⌮\",profline:\"⌒\",profsurf:\"⌓\",prop:\"∝\",Proportional:\"∝\",Proportion:\"∷\",propto:\"∝\",prsim:\"≾\",prurel:\"⊰\",Pscr:\"𝒫\",pscr:\"𝓅\",Psi:\"Ψ\",psi:\"ψ\",puncsp:\" \",Qfr:\"𝔔\",qfr:\"𝔮\",qint:\"⨌\",qopf:\"𝕢\",Qopf:\"ℚ\",qprime:\"⁗\",Qscr:\"𝒬\",qscr:\"𝓆\",quaternions:\"ℍ\",quatint:\"⨖\",quest:\"?\",questeq:\"≟\",quot:'\"',QUOT:'\"',rAarr:\"⇛\",race:\"∽̱\",Racute:\"Ŕ\",racute:\"ŕ\",radic:\"√\",raemptyv:\"⦳\",rang:\"⟩\",Rang:\"⟫\",rangd:\"⦒\",range:\"⦥\",rangle:\"⟩\",raquo:\"»\",rarrap:\"⥵\",rarrb:\"⇥\",rarrbfs:\"⤠\",rarrc:\"⤳\",rarr:\"→\",Rarr:\"↠\",rArr:\"⇒\",rarrfs:\"⤞\",rarrhk:\"↪\",rarrlp:\"↬\",rarrpl:\"⥅\",rarrsim:\"⥴\",Rarrtl:\"⤖\",rarrtl:\"↣\",rarrw:\"↝\",ratail:\"⤚\",rAtail:\"⤜\",ratio:\"∶\",rationals:\"ℚ\",rbarr:\"⤍\",rBarr:\"⤏\",RBarr:\"⤐\",rbbrk:\"❳\",rbrace:\"}\",rbrack:\"]\",rbrke:\"⦌\",rbrksld:\"⦎\",rbrkslu:\"⦐\",Rcaron:\"Ř\",rcaron:\"ř\",Rcedil:\"Ŗ\",rcedil:\"ŗ\",rceil:\"⌉\",rcub:\"}\",Rcy:\"Р\",rcy:\"р\",rdca:\"⤷\",rdldhar:\"⥩\",rdquo:\"”\",rdquor:\"”\",rdsh:\"↳\",real:\"ℜ\",realine:\"ℛ\",realpart:\"ℜ\",reals:\"ℝ\",Re:\"ℜ\",rect:\"▭\",reg:\"®\",REG:\"®\",ReverseElement:\"∋\",ReverseEquilibrium:\"⇋\",ReverseUpEquilibrium:\"⥯\",rfisht:\"⥽\",rfloor:\"⌋\",rfr:\"𝔯\",Rfr:\"ℜ\",rHar:\"⥤\",rhard:\"⇁\",rharu:\"⇀\",rharul:\"⥬\",Rho:\"Ρ\",rho:\"ρ\",rhov:\"ϱ\",RightAngleBracket:\"⟩\",RightArrowBar:\"⇥\",rightarrow:\"→\",RightArrow:\"→\",Rightarrow:\"⇒\",RightArrowLeftArrow:\"⇄\",rightarrowtail:\"↣\",RightCeiling:\"⌉\",RightDoubleBracket:\"⟧\",RightDownTeeVector:\"⥝\",RightDownVectorBar:\"⥕\",RightDownVector:\"⇂\",RightFloor:\"⌋\",rightharpoondown:\"⇁\",rightharpoonup:\"⇀\",rightleftarrows:\"⇄\",rightleftharpoons:\"⇌\",rightrightarrows:\"⇉\",rightsquigarrow:\"↝\",RightTeeArrow:\"↦\",RightTee:\"⊢\",RightTeeVector:\"⥛\",rightthreetimes:\"⋌\",RightTriangleBar:\"⧐\",RightTriangle:\"⊳\",RightTriangleEqual:\"⊵\",RightUpDownVector:\"⥏\",RightUpTeeVector:\"⥜\",RightUpVectorBar:\"⥔\",RightUpVector:\"↾\",RightVectorBar:\"⥓\",RightVector:\"⇀\",ring:\"˚\",risingdotseq:\"≓\",rlarr:\"⇄\",rlhar:\"⇌\",rlm:\"‏\",rmoustache:\"⎱\",rmoust:\"⎱\",rnmid:\"⫮\",roang:\"⟭\",roarr:\"⇾\",robrk:\"⟧\",ropar:\"⦆\",ropf:\"𝕣\",Ropf:\"ℝ\",roplus:\"⨮\",rotimes:\"⨵\",RoundImplies:\"⥰\",rpar:\")\",rpargt:\"⦔\",rppolint:\"⨒\",rrarr:\"⇉\",Rrightarrow:\"⇛\",rsaquo:\"›\",rscr:\"𝓇\",Rscr:\"ℛ\",rsh:\"↱\",Rsh:\"↱\",rsqb:\"]\",rsquo:\"’\",rsquor:\"’\",rthree:\"⋌\",rtimes:\"⋊\",rtri:\"▹\",rtrie:\"⊵\",rtrif:\"▸\",rtriltri:\"⧎\",RuleDelayed:\"⧴\",ruluhar:\"⥨\",rx:\"℞\",Sacute:\"Ś\",sacute:\"ś\",sbquo:\"‚\",scap:\"⪸\",Scaron:\"Š\",scaron:\"š\",Sc:\"⪼\",sc:\"≻\",sccue:\"≽\",sce:\"⪰\",scE:\"⪴\",Scedil:\"Ş\",scedil:\"ş\",Scirc:\"Ŝ\",scirc:\"ŝ\",scnap:\"⪺\",scnE:\"⪶\",scnsim:\"⋩\",scpolint:\"⨓\",scsim:\"≿\",Scy:\"С\",scy:\"с\",sdotb:\"⊡\",sdot:\"⋅\",sdote:\"⩦\",searhk:\"⤥\",searr:\"↘\",seArr:\"⇘\",searrow:\"↘\",sect:\"§\",semi:\";\",seswar:\"⤩\",setminus:\"∖\",setmn:\"∖\",sext:\"✶\",Sfr:\"𝔖\",sfr:\"𝔰\",sfrown:\"⌢\",sharp:\"♯\",SHCHcy:\"Щ\",shchcy:\"щ\",SHcy:\"Ш\",shcy:\"ш\",ShortDownArrow:\"↓\",ShortLeftArrow:\"←\",shortmid:\"∣\",shortparallel:\"∥\",ShortRightArrow:\"→\",ShortUpArrow:\"↑\",shy:\"­\",Sigma:\"Σ\",sigma:\"σ\",sigmaf:\"ς\",sigmav:\"ς\",sim:\"∼\",simdot:\"⩪\",sime:\"≃\",simeq:\"≃\",simg:\"⪞\",simgE:\"⪠\",siml:\"⪝\",simlE:\"⪟\",simne:\"≆\",simplus:\"⨤\",simrarr:\"⥲\",slarr:\"←\",SmallCircle:\"∘\",smallsetminus:\"∖\",smashp:\"⨳\",smeparsl:\"⧤\",smid:\"∣\",smile:\"⌣\",smt:\"⪪\",smte:\"⪬\",smtes:\"⪬︀\",SOFTcy:\"Ь\",softcy:\"ь\",solbar:\"⌿\",solb:\"⧄\",sol:\"/\",Sopf:\"𝕊\",sopf:\"𝕤\",spades:\"♠\",spadesuit:\"♠\",spar:\"∥\",sqcap:\"⊓\",sqcaps:\"⊓︀\",sqcup:\"⊔\",sqcups:\"⊔︀\",Sqrt:\"√\",sqsub:\"⊏\",sqsube:\"⊑\",sqsubset:\"⊏\",sqsubseteq:\"⊑\",sqsup:\"⊐\",sqsupe:\"⊒\",sqsupset:\"⊐\",sqsupseteq:\"⊒\",square:\"□\",Square:\"□\",SquareIntersection:\"⊓\",SquareSubset:\"⊏\",SquareSubsetEqual:\"⊑\",SquareSuperset:\"⊐\",SquareSupersetEqual:\"⊒\",SquareUnion:\"⊔\",squarf:\"▪\",squ:\"□\",squf:\"▪\",srarr:\"→\",Sscr:\"𝒮\",sscr:\"𝓈\",ssetmn:\"∖\",ssmile:\"⌣\",sstarf:\"⋆\",Star:\"⋆\",star:\"☆\",starf:\"★\",straightepsilon:\"ϵ\",straightphi:\"ϕ\",strns:\"¯\",sub:\"⊂\",Sub:\"⋐\",subdot:\"⪽\",subE:\"⫅\",sube:\"⊆\",subedot:\"⫃\",submult:\"⫁\",subnE:\"⫋\",subne:\"⊊\",subplus:\"⪿\",subrarr:\"⥹\",subset:\"⊂\",Subset:\"⋐\",subseteq:\"⊆\",subseteqq:\"⫅\",SubsetEqual:\"⊆\",subsetneq:\"⊊\",subsetneqq:\"⫋\",subsim:\"⫇\",subsub:\"⫕\",subsup:\"⫓\",succapprox:\"⪸\",succ:\"≻\",succcurlyeq:\"≽\",Succeeds:\"≻\",SucceedsEqual:\"⪰\",SucceedsSlantEqual:\"≽\",SucceedsTilde:\"≿\",succeq:\"⪰\",succnapprox:\"⪺\",succneqq:\"⪶\",succnsim:\"⋩\",succsim:\"≿\",SuchThat:\"∋\",sum:\"∑\",Sum:\"∑\",sung:\"♪\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",sup:\"⊃\",Sup:\"⋑\",supdot:\"⪾\",supdsub:\"⫘\",supE:\"⫆\",supe:\"⊇\",supedot:\"⫄\",Superset:\"⊃\",SupersetEqual:\"⊇\",suphsol:\"⟉\",suphsub:\"⫗\",suplarr:\"⥻\",supmult:\"⫂\",supnE:\"⫌\",supne:\"⊋\",supplus:\"⫀\",supset:\"⊃\",Supset:\"⋑\",supseteq:\"⊇\",supseteqq:\"⫆\",supsetneq:\"⊋\",supsetneqq:\"⫌\",supsim:\"⫈\",supsub:\"⫔\",supsup:\"⫖\",swarhk:\"⤦\",swarr:\"↙\",swArr:\"⇙\",swarrow:\"↙\",swnwar:\"⤪\",szlig:\"ß\",Tab:\"\\t\",target:\"⌖\",Tau:\"Τ\",tau:\"τ\",tbrk:\"⎴\",Tcaron:\"Ť\",tcaron:\"ť\",Tcedil:\"Ţ\",tcedil:\"ţ\",Tcy:\"Т\",tcy:\"т\",tdot:\"⃛\",telrec:\"⌕\",Tfr:\"𝔗\",tfr:\"𝔱\",there4:\"∴\",therefore:\"∴\",Therefore:\"∴\",Theta:\"Θ\",theta:\"θ\",thetasym:\"ϑ\",thetav:\"ϑ\",thickapprox:\"≈\",thicksim:\"∼\",ThickSpace:\"  \",ThinSpace:\" \",thinsp:\" \",thkap:\"≈\",thksim:\"∼\",THORN:\"Þ\",thorn:\"þ\",tilde:\"˜\",Tilde:\"∼\",TildeEqual:\"≃\",TildeFullEqual:\"≅\",TildeTilde:\"≈\",timesbar:\"⨱\",timesb:\"⊠\",times:\"×\",timesd:\"⨰\",tint:\"∭\",toea:\"⤨\",topbot:\"⌶\",topcir:\"⫱\",top:\"⊤\",Topf:\"𝕋\",topf:\"𝕥\",topfork:\"⫚\",tosa:\"⤩\",tprime:\"‴\",trade:\"™\",TRADE:\"™\",triangle:\"▵\",triangledown:\"▿\",triangleleft:\"◃\",trianglelefteq:\"⊴\",triangleq:\"≜\",triangleright:\"▹\",trianglerighteq:\"⊵\",tridot:\"◬\",trie:\"≜\",triminus:\"⨺\",TripleDot:\"⃛\",triplus:\"⨹\",trisb:\"⧍\",tritime:\"⨻\",trpezium:\"⏢\",Tscr:\"𝒯\",tscr:\"𝓉\",TScy:\"Ц\",tscy:\"ц\",TSHcy:\"Ћ\",tshcy:\"ћ\",Tstrok:\"Ŧ\",tstrok:\"ŧ\",twixt:\"≬\",twoheadleftarrow:\"↞\",twoheadrightarrow:\"↠\",Uacute:\"Ú\",uacute:\"ú\",uarr:\"↑\",Uarr:\"↟\",uArr:\"⇑\",Uarrocir:\"⥉\",Ubrcy:\"Ў\",ubrcy:\"ў\",Ubreve:\"Ŭ\",ubreve:\"ŭ\",Ucirc:\"Û\",ucirc:\"û\",Ucy:\"У\",ucy:\"у\",udarr:\"⇅\",Udblac:\"Ű\",udblac:\"ű\",udhar:\"⥮\",ufisht:\"⥾\",Ufr:\"𝔘\",ufr:\"𝔲\",Ugrave:\"Ù\",ugrave:\"ù\",uHar:\"⥣\",uharl:\"↿\",uharr:\"↾\",uhblk:\"▀\",ulcorn:\"⌜\",ulcorner:\"⌜\",ulcrop:\"⌏\",ultri:\"◸\",Umacr:\"Ū\",umacr:\"ū\",uml:\"¨\",UnderBar:\"_\",UnderBrace:\"⏟\",UnderBracket:\"⎵\",UnderParenthesis:\"⏝\",Union:\"⋃\",UnionPlus:\"⊎\",Uogon:\"Ų\",uogon:\"ų\",Uopf:\"𝕌\",uopf:\"𝕦\",UpArrowBar:\"⤒\",uparrow:\"↑\",UpArrow:\"↑\",Uparrow:\"⇑\",UpArrowDownArrow:\"⇅\",updownarrow:\"↕\",UpDownArrow:\"↕\",Updownarrow:\"⇕\",UpEquilibrium:\"⥮\",upharpoonleft:\"↿\",upharpoonright:\"↾\",uplus:\"⊎\",UpperLeftArrow:\"↖\",UpperRightArrow:\"↗\",upsi:\"υ\",Upsi:\"ϒ\",upsih:\"ϒ\",Upsilon:\"Υ\",upsilon:\"υ\",UpTeeArrow:\"↥\",UpTee:\"⊥\",upuparrows:\"⇈\",urcorn:\"⌝\",urcorner:\"⌝\",urcrop:\"⌎\",Uring:\"Ů\",uring:\"ů\",urtri:\"◹\",Uscr:\"𝒰\",uscr:\"𝓊\",utdot:\"⋰\",Utilde:\"Ũ\",utilde:\"ũ\",utri:\"▵\",utrif:\"▴\",uuarr:\"⇈\",Uuml:\"Ü\",uuml:\"ü\",uwangle:\"⦧\",vangrt:\"⦜\",varepsilon:\"ϵ\",varkappa:\"ϰ\",varnothing:\"∅\",varphi:\"ϕ\",varpi:\"ϖ\",varpropto:\"∝\",varr:\"↕\",vArr:\"⇕\",varrho:\"ϱ\",varsigma:\"ς\",varsubsetneq:\"⊊︀\",varsubsetneqq:\"⫋︀\",varsupsetneq:\"⊋︀\",varsupsetneqq:\"⫌︀\",vartheta:\"ϑ\",vartriangleleft:\"⊲\",vartriangleright:\"⊳\",vBar:\"⫨\",Vbar:\"⫫\",vBarv:\"⫩\",Vcy:\"В\",vcy:\"в\",vdash:\"⊢\",vDash:\"⊨\",Vdash:\"⊩\",VDash:\"⊫\",Vdashl:\"⫦\",veebar:\"⊻\",vee:\"∨\",Vee:\"⋁\",veeeq:\"≚\",vellip:\"⋮\",verbar:\"|\",Verbar:\"‖\",vert:\"|\",Vert:\"‖\",VerticalBar:\"∣\",VerticalLine:\"|\",VerticalSeparator:\"❘\",VerticalTilde:\"≀\",VeryThinSpace:\" \",Vfr:\"𝔙\",vfr:\"𝔳\",vltri:\"⊲\",vnsub:\"⊂⃒\",vnsup:\"⊃⃒\",Vopf:\"𝕍\",vopf:\"𝕧\",vprop:\"∝\",vrtri:\"⊳\",Vscr:\"𝒱\",vscr:\"𝓋\",vsubnE:\"⫋︀\",vsubne:\"⊊︀\",vsupnE:\"⫌︀\",vsupne:\"⊋︀\",Vvdash:\"⊪\",vzigzag:\"⦚\",Wcirc:\"Ŵ\",wcirc:\"ŵ\",wedbar:\"⩟\",wedge:\"∧\",Wedge:\"⋀\",wedgeq:\"≙\",weierp:\"℘\",Wfr:\"𝔚\",wfr:\"𝔴\",Wopf:\"𝕎\",wopf:\"𝕨\",wp:\"℘\",wr:\"≀\",wreath:\"≀\",Wscr:\"𝒲\",wscr:\"𝓌\",xcap:\"⋂\",xcirc:\"◯\",xcup:\"⋃\",xdtri:\"▽\",Xfr:\"𝔛\",xfr:\"𝔵\",xharr:\"⟷\",xhArr:\"⟺\",Xi:\"Ξ\",xi:\"ξ\",xlarr:\"⟵\",xlArr:\"⟸\",xmap:\"⟼\",xnis:\"⋻\",xodot:\"⨀\",Xopf:\"𝕏\",xopf:\"𝕩\",xoplus:\"⨁\",xotime:\"⨂\",xrarr:\"⟶\",xrArr:\"⟹\",Xscr:\"𝒳\",xscr:\"𝓍\",xsqcup:\"⨆\",xuplus:\"⨄\",xutri:\"△\",xvee:\"⋁\",xwedge:\"⋀\",Yacute:\"Ý\",yacute:\"ý\",YAcy:\"Я\",yacy:\"я\",Ycirc:\"Ŷ\",ycirc:\"ŷ\",Ycy:\"Ы\",ycy:\"ы\",yen:\"¥\",Yfr:\"𝔜\",yfr:\"𝔶\",YIcy:\"Ї\",yicy:\"ї\",Yopf:\"𝕐\",yopf:\"𝕪\",Yscr:\"𝒴\",yscr:\"𝓎\",YUcy:\"Ю\",yucy:\"ю\",yuml:\"ÿ\",Yuml:\"Ÿ\",Zacute:\"Ź\",zacute:\"ź\",Zcaron:\"Ž\",zcaron:\"ž\",Zcy:\"З\",zcy:\"з\",Zdot:\"Ż\",zdot:\"ż\",zeetrf:\"ℨ\",ZeroWidthSpace:\"​\",Zeta:\"Ζ\",zeta:\"ζ\",zfr:\"𝔷\",Zfr:\"ℨ\",ZHcy:\"Ж\",zhcy:\"ж\",zigrarr:\"⇝\",zopf:\"𝕫\",Zopf:\"ℤ\",Zscr:\"𝒵\",zscr:\"𝓏\",zwj:\"‍\",zwnj:\"‌\"};"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/maps/legacy.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\nmodule.exports={Aacute:\"Á\",aacute:\"á\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",AElig:\"Æ\",aelig:\"æ\",Agrave:\"À\",agrave:\"à\",amp:\"&\",AMP:\"&\",Aring:\"Å\",aring:\"å\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",brvbar:\"¦\",Ccedil:\"Ç\",ccedil:\"ç\",cedil:\"¸\",cent:\"¢\",copy:\"©\",COPY:\"©\",curren:\"¤\",deg:\"°\",divide:\"÷\",Eacute:\"É\",eacute:\"é\",Ecirc:\"Ê\",ecirc:\"ê\",Egrave:\"È\",egrave:\"è\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",frac12:\"½\",frac14:\"¼\",frac34:\"¾\",gt:\">\",GT:\">\",Iacute:\"Í\",iacute:\"í\",Icirc:\"Î\",icirc:\"î\",iexcl:\"¡\",Igrave:\"Ì\",igrave:\"ì\",iquest:\"¿\",Iuml:\"Ï\",iuml:\"ï\",laquo:\"«\",lt:\"<\",LT:\"<\",macr:\"¯\",micro:\"µ\",middot:\"·\",nbsp:\" \",not:\"¬\",Ntilde:\"Ñ\",ntilde:\"ñ\",Oacute:\"Ó\",oacute:\"ó\",Ocirc:\"Ô\",ocirc:\"ô\",Ograve:\"Ò\",ograve:\"ò\",ordf:\"ª\",ordm:\"º\",Oslash:\"Ø\",oslash:\"ø\",Otilde:\"Õ\",otilde:\"õ\",Ouml:\"Ö\",ouml:\"ö\",para:\"¶\",plusmn:\"±\",pound:\"£\",quot:'\"',QUOT:'\"',raquo:\"»\",reg:\"®\",REG:\"®\",sect:\"§\",shy:\"­\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",szlig:\"ß\",THORN:\"Þ\",thorn:\"þ\",times:\"×\",Uacute:\"Ú\",uacute:\"ú\",Ucirc:\"Û\",ucirc:\"û\",Ugrave:\"Ù\",ugrave:\"ù\",uml:\"¨\",Uuml:\"Ü\",uuml:\"ü\",Yacute:\"Ý\",yacute:\"ý\",yen:\"¥\",yuml:\"ÿ\"};"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/entities/maps/xml.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\nmodule.exports={amp:\"&\",apos:\"'\",gt:\">\",lt:\"<\",quot:'\"'};"
  },
  {
    "path": "miniprogram/components/towxml/parse/parse2/index.js",
    "content": "/*! Project:无, Create:FWS 2020.01.08 21:48, Update:FWS 2020.01.08 21:48 */ \r\nfunction parseDOM(r,e){var a=new domhandler_1.DomHandler(void 0,e);return new Parser_1.Parser(a,e).end(r),a.dom}var domhandler_1=require(\"./domhandler/index\"),Parser_1=require(\"./Parser\");module.exports=parseDOM;"
  },
  {
    "path": "miniprogram/components/towxml/style/main.wxss",
    "content": "/*正文样式*/\n.h2w {\n    font-family: PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif;\n    font-weight:300;\n    font-size: 32rpx;\n    line-height: 1.8;\n    word-wrap: break-word;\n    word-break: normal;\n    text-align:justify;\n}\n\n.h2w__main {\n    margin: 0 40rpx;\n    padding: 40rpx 0;\n}\n\n/**标题**/\n.h2w__h1,\n.h2w__h2,\n.h2w__h3,\n.h2w__h4,\n.h2w__h5,\n.h2w__h6 {\n    font-weight: bold;\n}\n\n/**设置行间元素样式**/\n.h2w__span,\n.h2w__b,\n.h2w__strong,\n.h2w__i,\n.h2w__em,\n.h2w__code,\n.h2w__sub,\n.h2w__sup,\n.h2w__g-emoji,\n.h2w__mark,\n.h2w__u,\n.h2w__ins {\n    display:inline;\n}\n\n.h2w__h1 {\n    border-bottom-style: double;\n    border-bottom-width: 6rpx;\n    font-size: 42rpx;\n    padding-bottom: 10rpx;\n    margin-bottom: 20rpx;\n}\n\n.h2w__h2 {\n    border-bottom-style: solid;\n    border-bottom-width: 1rpx;\n    font-size: 40rpx;\n    padding-bottom: 8rpx;\n    margin-bottom: 18rpx;\n}\n\n.h2w__h3 {\n    font-size: 38rpx;\n    padding-bottom: 6rpx;\n    margin-bottom: 12rpx;\n}\n\n.h2w__h4 {\n    font-size: 36rpx;\n    padding-bottom: 4rpx;\n    margin-bottom: 12rpx;\n}\n\n.h2w__h5 {\n    font-size: 34rpx;\n    padding-bottom: 2rpx;\n    margin-bottom: 12rpx;\n}\n\n.h2w__h6 {\n    margin-bottom: 12rpx;\n}\n\n\n/**表格**/\n.h2w__tableParent {\n    width:100%;\n    overflow-x:auto;\n}\n\n.h2w__table {\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0;\n    display: table;\n    margin-bottom: 40rpx;\n    white-space: nowrap;\n}\n\n.h2w__table .h2w__tr:nth-child(2n) {\n    background-color: red;\n}\n\n.h2w__colgroup {\n    display: table-column-group;\n}\n\n.h2w__col {\n    display: table-column;\n}\n\n.h2w__thead {\n    display: table-header-group;\n}\n\n.h2w__tbody {\n    display: table-row-group;\n}\n\n.h2w__tfoot {\n    display: table-footer-group;\n}\n\n.h2w__tr {\n    display: table-row;\n}\n\n.h2w__th,\n.h2w__td {\n    padding: 8rpx 16rpx;\n    font-size: 28rpx;\n    border-width: 1rpx;\n    border-style: solid;\n    display: table-cell;\n}\n\n.h2w__th {\n    font-weight: bold;\n}\n\n/**代码块**/\n.h2w__pre {\n    /*white-space:nowrap;*/\n    padding: 10rpx 14rpx 10rpx 10rpx;\n    font-size: 28rpx;\n    word-break: normal;\n    border-width: 1rpx;\n    border-style: solid;\n    margin-bottom: 40rpx;\n    white-space: nowrap;\n    overflow-x: auto;\n    tab-size:4;\n}\n\n.h2w__pre .h2w__code {\n    padding: 0;\n    border: 0;\n    font-size: 100%;\n}\n\n.h2w__pre,\n.h2w__code {\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace, \"STHeitiTC-Light\", \"Microsoft YaHei Light\", -apple-system, system-ui, BlinkMacSystemFont;\n}\n\n.h2w__code {\n    padding: 4rpx 8rpx;\n    margin: 0 4rpx;\n    border-width: 1rpx;\n    border-style: solid;\n    border-radius: 8rpx;\n    font-size: 80%;\n    overflow-x: auto;\n}\n\n.h2w__pre .h2w__span,\n.h2w__pre .h2w__a,\n.h2w__pre .h2w__span,\n.h2w__pre .h2w__b,\n.h2w__pre .h2w__strong,\n.h2w__pre .h2w__i,\n.h2w__pre .h2w__em {\n    display: inline;\n}\n\n.h2w__pre {\n    white-space: pre;\n    display: block;\n}\n\n.h2w__pre .h2w__code {\n    white-space:nowrap;\n    /* width: 9999px; */\n    display: block;\n    font-size: 80%;\n}\n\n/**列表**/\n.h2w__ul,\n.h2w__ol {\n    margin-bottom: 40rpx;\n    padding-left: 1rem;\n}\n\n.h2w__ul .h2w__ol,\n.h2w__ol .h2w__ul {\n    margin-bottom: 0;\n}\n\n.h2w__li {\n    display: list-item;\n}\n\n/**todo**/\n.h2w__todogroup {\n    margin-bottom: 40rpx;\n}\n\n.h2w__todogroup .h2w__todogroup {\n    padding-left: 1.6rem;\n}\n\n/**一级ol样式**/\n.h2w__ol {\n    list-style-type: decimal;\n}\n\n/**二级ol样式**/\n.h2w__ul .h2w__ol,\n.h2w__ol .h2w__ol {\n    list-style-type: lower-roman;\n}\n\n/**三级ol样式**/\n.h2w__ul .h2w__ul .h2w__ol,\n.h2w__ul .h2w__ol .h2w__ol,\n.h2w__ol .h2w__ul .h2w__ol,\n.h2w__ol .h2w__ol .h2w__ol {\n    list-style-type: lower-alpha;\n}\n\n/**一级ul样式**/\n.h2w__ul {\n    list-style-type: disc;\n}\n\n/**二级ul样式**/\n.h2w__ul .h2w__ul,\n.h2w__ol .h2w__ul {\n    list-style-type: circle;\n}\n\n/**三级样式**/\n.h2w__ol .h2w__ol .h2w__ul,\n.h2w__ol .h2w__ul .h2w__ul,\n.h2w__ul .h2w__ol .h2w__ul,\n.h2w__ul .h2w__ul .h2w__ul {\n    list-style-type: square;\n}\n\n/**块元素**/\n.h2w__p {\n    margin: 20rpx 0 20rpx 0;\n}\n\n.h2w__blockquote {\n    border-left-width: 8rpx;\n    border-left-style: solid;\n    padding: 0 20rpx;\n}\n\n/**内连元素**/\n.h2w__a,\n.h2w__span,\n.h2w__b,\n.h2w__strong,\n.h2w__i,\n.h2w__em {\n    display: inline;\n}\n\n.h2w__b,\n.h2w__strong {\n    font-weight: bold;\n}\n\n.h2w__i,\n.h2w__em {\n    font-style: italic;\n}\n\n/**文本删除线**/\n.h2w__s,\n.h2w__strike,\n.h2w__del {\n    text-decoration: line-through;\n}\n\n/**文本下划线**/\n.h2w__ins,\n.h2w__u {\n    text-decoration: underline;\n}\n\n/**链接**/\n.h2w__a {\n    margin: 0 8rpx;\n    border-bottom-width: 1rpx;\n    border-bottom-style: solid;\n    line-height: 1;\n}\n\n.h2w__hr {\n    height: 8rpx;\n    margin: 40rpx 0;\n}\n\n/**荧光标记**/\n.h2w__mark {\n    border-radius: 4rpx;\n}\n\n/**上标、下标**/\n.h2w__sup,\n.h2w__sub {\n    font-size: 75%;\n    position: relative;\n}\n\n.h2w__sup {\n    top: -0.5em;\n}\n\n.h2w__sub {\n    bottom: -0.25em;\n}\n\n/**emoji表情**/\n.h2w__g-emoji {\n    margin: 0 0.1em;\n    font-family: \"Apple Color Emoji\", \"Segoe UI\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n/**内置元素**/\nimage,video {\n    max-width: 100%;\n}\n\n\nvideo {\n    width:100%; margin: 10rpx auto;\n}\n\nimage {\n    height:auto; vertical-align:middle;\n}\n\nvideo {\n    height:220px; font-size:0;\n}\n\n.h2w__latex--line {margin:4rpx 8rpx; vertical-align:middle;}\n.h2w__latex--block {display:block; margin:1em auto;} \n\n.h2w__yuml {display:block;}\n\n.h2w__yumlBox {\n    width:100%;\n    overflow-x:auto;\n}\n.h2w__yumlView {\n    margin:0 auto; padding-bottom:40rpx;\n}\n\n/**代码行号**/\n.h2w__lineNum {\n    text-align:right; float:left; padding:0; margin:0 1em 0 0;\n}\n.h2w__lineNumLine {\n    list-style:none;\n}"
  },
  {
    "path": "miniprogram/components/towxml/style/theme/dark.wxss",
    "content": "/*正文样式*/\n.h2w-dark {\n  color:#ddd;\n  background-color:#000;\n}\n\n/**标题**/\n.h2w-dark .h2w__h1,\n.h2w-dark .h2w__h2 {\n    border-color:#3d3d3d;\n}\n\n\n/**表格**/\n.h2w-dark .h2w__thead .h2w__tr {\n    background-color:#1f1f1f;\n}\n.h2w-dark .h2w__table .h2w__tr:nth-child(2n){\n    background-color:#090909;\n}\n.h2w-dark .h2w__th,\n.h2w-dark .h2w__td {\n    border-color:#333;\n}\n\n\n/**代码块**/\n.h2w-dark .h2w__pre,\n.h2w-dark .h2w__pre .h2w__code {\n    background-color:#1b1b1b;\n    border-color:#262626;\n}\n\n.h2w-dark .h2w__code {\n    background-color:#272822;\n    border-color:#1b1c18;\n}\n\n\n/**块元素**/\n.h2w-dark .h2w__blockquote {\n    border-left-color:#10230f;\n}\n\n/**内连元素**/\n.h2w-dark .h2w__a {\n    color:#1aad16; border-color:#4d804b;\n}\n\n.h2w-dark .h2w__hr {\n    background-color:#242424;\n}\n\n.h2w-dark .h2w__mark {\n    background:yellow;\n    color:black;\n}\n\n.h2w-dark .h2w__todoCheckbox .wx-checkbox-input {\n    background:#2e2e2e; border-color:#494949;\n}\n.h2w-dark .h2w__todoCheckbox .wx-checkbox-input.wx-checkbox-input-checked {\n    background:green; border-color:#4d804b;\n}\n.h2w-dark .h2w__todoCheckbox .wx-checkbox-input.wx-checkbox-input-checked::before {\n    color:white;\n}\n.h2w-dark .h2w__lineNum {\n    color:#494949;\n}\n\n/**代码高亮样式**/\n@import '../../parse/highlight/style/monokai.wxss';\n"
  },
  {
    "path": "miniprogram/components/towxml/style/theme/light.wxss",
    "content": "/*正文样式*/\n.h2w-light {\n  color:#333;\n  background-color:white;\n}\n\n/**标题**/\n.h2w-light .h2w__h1,\n.h2w-light .h2w__h2 {\n    border-color:#eee;\n}\n\n\n/**表格**/\n.h2w-light .h2w__thead .h2w__tr {\n    background-color:#f6f8fa;\n}\n.h2w-light .h2w__table .h2w__tr:nth-child(2n){\n    background-color:#fbfcfd;\n}\n.h2w-light .h2w__th,\n.h2w-light .h2w__td {\n    border-color:#dfe2e5;\n}\n\n\n/**代码块**/\n.h2w-light .h2w__pre {\n    background-color:#f6f8fa;\n    border-color:#eaedf0;\n}\n\n.h2w-light .h2w__code {\n    background-color:#f6f8fa;\n    border-color:#eaedf0;\n}\n\n\n/**块元素**/\n.h2w-light .h2w__blockquote {\n    border-left-color:#dfe2e5;\n}\n\n/**内连元素**/\n.h2w-light .h2w__a {\n    color:#1aad16; border-color:#b9d9b8;\n}\n\n.h2w-light .h2w__hr {\n    background-color:#eee;\n}\n\n.h2w-light .h2w__mark {\n    background:yellow;\n    color:black;\n}\n\n.h2w-light .h2w__lineNum {\n    color:#ccc;\n}\n\n/**代码高亮样式**/\n@import '../../parse/highlight/style/github.wxss';"
  },
  {
    "path": "miniprogram/components/towxml/table/table.js",
    "content": "Component({\n\toptions: {\n\t\tstyleIsolation: 'shared'\n\t},\n\tproperties: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t\tvalue: {}\n\t\t}\n\t}\n})"
  },
  {
    "path": "miniprogram/components/towxml/table/table.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {\n    \"decode\": \"../decode\"\n  }\n}"
  },
  {
    "path": "miniprogram/components/towxml/table/table.wxml",
    "content": "<!--table-->\n<block wx:if=\"{{data.tag === 'table'}}\">\n    <view class=\"h2w__tableParent\">\n        <view class=\"{{data.attr.class}}\" width=\"{{data.attr.width}}\" style=\"{{data.attr.style}}\">\n            <!--thead、tbody、tfoot-->\n            <block wx:if=\"{{data.child}}\" wx:for=\"{{data.child}}\" wx:for-item=\"item\" wx:key=\"i\">\n                <view wx:if=\"{{item.tag}}\" class=\"{{item.attr.class}}\">\n                    <!--tr-->\n                    <block wx:if=\"{{item.child}}\" wx:for=\"{{item.child}}\" wx:for-item=\"item\" wx:key=\"i\">\n                        <view wx:if=\"{{item.tag}}\" class=\"{{item.attr.class}}\">\n                            <!--td-->\n                            <block wx:if=\"{{item.child}}\" wx:for=\"{{item.child}}\" wx:for-item=\"item\" wx:key=\"i\">\n                                <view wx:if=\"{{item.tag}}\" class=\"{{item.attr.class}}\" width=\"{{data.attr.width}}\" style=\"{{data.attr.style}}\">\n                                    <!--content-->\n                                    <decode wx:if=\"{{item.child}}\" nodes=\"{{item}}\"/>\n                                </view>\n                            </block>\n                        </view>\n                    </block>\n                </view>\n            </block>\n        </view>\n    </view>\n</block>"
  },
  {
    "path": "miniprogram/components/towxml/table/table.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/components/towxml/towxml.js",
    "content": "Component({\n  options:{\n    styleIsolation:'shared'\n  },\n  properties:{\n    nodes:{\n      type:Object,\n      value:{}\n    }\n  },\n  data:{\n    someData:{\n      \n    }\n  }\n})"
  },
  {
    "path": "miniprogram/components/towxml/towxml.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {\n    \"decode\": \"./decode\"\n  }\n}"
  },
  {
    "path": "miniprogram/components/towxml/towxml.wxml",
    "content": "<view class=\"h2w h2w-{{nodes.theme}}\">\r\n\t<view class=\"h2w__main\">\r\n\t\t<decode nodes=\"{{nodes}}\"/>\r\n\t</view>\r\n</view>"
  },
  {
    "path": "miniprogram/components/towxml/towxml.wxss",
    "content": "/**基础风格样式**/\n@import './style/main.wxss';\n\n/**主题配色（浅色样式）**/\n@import './style/theme/light.wxss';\n\n/**主题配色（深色样式）**/\n@import './style/theme/dark.wxss';"
  },
  {
    "path": "miniprogram/libs/av-live-query-core-min.js",
    "content": "!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.AV=e():t.AV=e()}(\"undefined\"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=272)}([function(t,e,n){\"use strict\";var r=n(7),i=n(73),o=n(4),a=n(8),s=n(60).f,u=n(153),c=n(6),f=n(48),l=n(37),h=n(12),d=function(t){var e=function(n,r,o){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,r)}return new t(n,r,o)}return i(t,this,arguments)};return e.prototype=t.prototype,e};t.exports=function(t,e){var n,i,p,v,g,m,y,b,_,w=t.target,E=t.global,O=t.stat,T=t.proto,S=E?r:O?r[w]:(r[w]||{}).prototype,A=E?c:c[w]||l(c,w,{})[w],x=A.prototype;for(v in e)n=u(E?v:w+(O?\".\":\"#\")+v,t.forced),i=!n&&S&&h(S,v),m=A[v],i&&(t.dontCallGetSet?(_=s(S,v),y=_&&_.value):y=S[v]),g=i&&y?y:e[v],i&&typeof m==typeof g||(b=t.bind&&i?f(g,r):t.wrap&&i?d(g):T&&a(g)?o(g):g,(t.sham||g&&g.sham||m&&m.sham)&&l(b,\"sham\",!0),l(A,v,b),T&&(p=w+\"Prototype\",h(c,p)||l(c,p,{}),l(c[p],v,g),t.real&&x&&!x[v]&&l(x,v,g)))}},function(t,e){function n(t){return t&&t.__esModule?t:{default:t}}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=n(312);n.d(e,\"default\",function(){return r.a});var i=n(131);n.d(e,\"VERSION\",function(){return i.VERSION}),n.d(e,\"restArguments\",function(){return i.restArguments}),n.d(e,\"isObject\",function(){return i.isObject}),n.d(e,\"isNull\",function(){return i.isNull}),n.d(e,\"isUndefined\",function(){return i.isUndefined}),n.d(e,\"isBoolean\",function(){return i.isBoolean}),n.d(e,\"isElement\",function(){return i.isElement}),n.d(e,\"isString\",function(){return i.isString}),n.d(e,\"isNumber\",function(){return i.isNumber}),n.d(e,\"isDate\",function(){return i.isDate}),n.d(e,\"isRegExp\",function(){return i.isRegExp}),n.d(e,\"isError\",function(){return i.isError}),n.d(e,\"isSymbol\",function(){return i.isSymbol}),n.d(e,\"isArrayBuffer\",function(){return i.isArrayBuffer}),n.d(e,\"isDataView\",function(){return i.isDataView}),n.d(e,\"isArray\",function(){return i.isArray}),n.d(e,\"isFunction\",function(){return i.isFunction}),n.d(e,\"isArguments\",function(){return i.isArguments}),n.d(e,\"isFinite\",function(){return i.isFinite}),n.d(e,\"isNaN\",function(){return i.isNaN}),n.d(e,\"isTypedArray\",function(){return i.isTypedArray}),n.d(e,\"isEmpty\",function(){return i.isEmpty}),n.d(e,\"isMatch\",function(){return i.isMatch}),n.d(e,\"isEqual\",function(){return i.isEqual}),n.d(e,\"isMap\",function(){return i.isMap}),n.d(e,\"isWeakMap\",function(){return i.isWeakMap}),n.d(e,\"isSet\",function(){return i.isSet}),n.d(e,\"isWeakSet\",function(){return i.isWeakSet}),n.d(e,\"keys\",function(){return i.keys}),n.d(e,\"allKeys\",function(){return i.allKeys}),n.d(e,\"values\",function(){return i.values}),n.d(e,\"pairs\",function(){return i.pairs}),n.d(e,\"invert\",function(){return i.invert}),n.d(e,\"functions\",function(){return i.functions}),n.d(e,\"methods\",function(){return i.methods}),n.d(e,\"extend\",function(){return i.extend}),n.d(e,\"extendOwn\",function(){return i.extendOwn}),n.d(e,\"assign\",function(){return i.assign}),n.d(e,\"defaults\",function(){return i.defaults}),n.d(e,\"create\",function(){return i.create}),n.d(e,\"clone\",function(){return i.clone}),n.d(e,\"tap\",function(){return i.tap}),n.d(e,\"get\",function(){return i.get}),n.d(e,\"has\",function(){return i.has}),n.d(e,\"mapObject\",function(){return i.mapObject}),n.d(e,\"identity\",function(){return i.identity}),n.d(e,\"constant\",function(){return i.constant}),n.d(e,\"noop\",function(){return i.noop}),n.d(e,\"toPath\",function(){return i.toPath}),n.d(e,\"property\",function(){return i.property}),n.d(e,\"propertyOf\",function(){return i.propertyOf}),n.d(e,\"matcher\",function(){return i.matcher}),n.d(e,\"matches\",function(){return i.matches}),n.d(e,\"times\",function(){return i.times}),n.d(e,\"random\",function(){return i.random}),n.d(e,\"now\",function(){return i.now}),n.d(e,\"escape\",function(){return i.escape}),n.d(e,\"unescape\",function(){return i.unescape}),n.d(e,\"templateSettings\",function(){return i.templateSettings}),n.d(e,\"template\",function(){return i.template}),n.d(e,\"result\",function(){return i.result}),n.d(e,\"uniqueId\",function(){return i.uniqueId}),n.d(e,\"chain\",function(){return i.chain}),n.d(e,\"iteratee\",function(){return i.iteratee}),n.d(e,\"partial\",function(){return i.partial}),n.d(e,\"bind\",function(){return i.bind}),n.d(e,\"bindAll\",function(){return i.bindAll}),n.d(e,\"memoize\",function(){return i.memoize}),n.d(e,\"delay\",function(){return i.delay}),n.d(e,\"defer\",function(){return i.defer}),n.d(e,\"throttle\",function(){return i.throttle}),n.d(e,\"debounce\",function(){return i.debounce}),n.d(e,\"wrap\",function(){return i.wrap}),n.d(e,\"negate\",function(){return i.negate}),n.d(e,\"compose\",function(){return i.compose}),n.d(e,\"after\",function(){return i.after}),n.d(e,\"before\",function(){return i.before}),n.d(e,\"once\",function(){return i.once}),n.d(e,\"findKey\",function(){return i.findKey}),n.d(e,\"findIndex\",function(){return i.findIndex}),n.d(e,\"findLastIndex\",function(){return i.findLastIndex}),n.d(e,\"sortedIndex\",function(){return i.sortedIndex}),n.d(e,\"indexOf\",function(){return i.indexOf}),n.d(e,\"lastIndexOf\",function(){return i.lastIndexOf}),n.d(e,\"find\",function(){return i.find}),n.d(e,\"detect\",function(){return i.detect}),n.d(e,\"findWhere\",function(){return i.findWhere}),n.d(e,\"each\",function(){return i.each}),n.d(e,\"forEach\",function(){return i.forEach}),n.d(e,\"map\",function(){return i.map}),n.d(e,\"collect\",function(){return i.collect}),n.d(e,\"reduce\",function(){return i.reduce}),n.d(e,\"foldl\",function(){return i.foldl}),n.d(e,\"inject\",function(){return i.inject}),n.d(e,\"reduceRight\",function(){return i.reduceRight}),n.d(e,\"foldr\",function(){return i.foldr}),n.d(e,\"filter\",function(){return i.filter}),n.d(e,\"select\",function(){return i.select}),n.d(e,\"reject\",function(){return i.reject}),n.d(e,\"every\",function(){return i.every}),n.d(e,\"all\",function(){return i.all}),n.d(e,\"some\",function(){return i.some}),n.d(e,\"any\",function(){return i.any}),n.d(e,\"contains\",function(){return i.contains}),n.d(e,\"includes\",function(){return i.includes}),n.d(e,\"include\",function(){return i.include}),n.d(e,\"invoke\",function(){return i.invoke}),n.d(e,\"pluck\",function(){return i.pluck}),n.d(e,\"where\",function(){return i.where}),n.d(e,\"max\",function(){return i.max}),n.d(e,\"min\",function(){return i.min}),n.d(e,\"shuffle\",function(){return i.shuffle}),n.d(e,\"sample\",function(){return i.sample}),n.d(e,\"sortBy\",function(){return i.sortBy}),n.d(e,\"groupBy\",function(){return i.groupBy}),n.d(e,\"indexBy\",function(){return i.indexBy}),n.d(e,\"countBy\",function(){return i.countBy}),n.d(e,\"partition\",function(){return i.partition}),n.d(e,\"toArray\",function(){return i.toArray}),n.d(e,\"size\",function(){return i.size}),n.d(e,\"pick\",function(){return i.pick}),n.d(e,\"omit\",function(){return i.omit}),n.d(e,\"first\",function(){return i.first}),n.d(e,\"head\",function(){return i.head}),n.d(e,\"take\",function(){return i.take}),n.d(e,\"initial\",function(){return i.initial}),n.d(e,\"last\",function(){return i.last}),n.d(e,\"rest\",function(){return i.rest}),n.d(e,\"tail\",function(){return i.tail}),n.d(e,\"drop\",function(){return i.drop}),n.d(e,\"compact\",function(){return i.compact}),n.d(e,\"flatten\",function(){return i.flatten}),n.d(e,\"without\",function(){return i.without}),n.d(e,\"uniq\",function(){return i.uniq}),n.d(e,\"unique\",function(){return i.unique}),n.d(e,\"union\",function(){return i.union}),n.d(e,\"intersection\",function(){return i.intersection}),n.d(e,\"difference\",function(){return i.difference}),n.d(e,\"unzip\",function(){return i.unzip}),n.d(e,\"transpose\",function(){return i.transpose}),n.d(e,\"zip\",function(){return i.zip}),n.d(e,\"object\",function(){return i.object}),n.d(e,\"range\",function(){return i.range}),n.d(e,\"chunk\",function(){return i.chunk}),n.d(e,\"mixin\",function(){return i.mixin})},function(t,e,n){var r=n(74),i=Function.prototype,o=i.bind,a=i.call,s=r&&o.bind(a,a);t.exports=r?function(t){return t&&s(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},function(t,e,n){\"use strict\";(function(t){n.d(e,\"e\",function(){return r}),n.d(e,\"p\",function(){return i}),n.d(e,\"a\",function(){return o}),n.d(e,\"c\",function(){return a}),n.d(e,\"d\",function(){return s}),n.d(e,\"o\",function(){return u}),n.d(e,\"q\",function(){return c}),n.d(e,\"t\",function(){return f}),n.d(e,\"i\",function(){return l}),n.d(e,\"r\",function(){return h}),n.d(e,\"s\",function(){return d}),n.d(e,\"k\",function(){return p}),n.d(e,\"m\",function(){return v}),n.d(e,\"j\",function(){return g}),n.d(e,\"l\",function(){return m}),n.d(e,\"g\",function(){return y}),n.d(e,\"f\",function(){return b}),n.d(e,\"h\",function(){return _}),n.d(e,\"n\",function(){return w}),n.d(e,\"b\",function(){return E});var r=\"1.12.1\",i=\"object\"==typeof self&&self.self===self&&self||\"object\"==typeof t&&t.global===t&&t||Function(\"return this\")()||{},o=Array.prototype,a=Object.prototype,s=\"undefined\"!=typeof Symbol?Symbol.prototype:null,u=o.push,c=o.slice,f=a.toString,l=a.hasOwnProperty,h=\"undefined\"!=typeof ArrayBuffer,d=\"undefined\"!=typeof DataView,p=Array.isArray,v=Object.keys,g=Object.create,m=h&&ArrayBuffer.isView,y=isNaN,b=isFinite,_=!{toString:null}.propertyIsEnumerable(\"toString\"),w=[\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"],E=Math.pow(2,53)-1}).call(e,n(72))},function(t,e){t.exports={}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n(\"object\"==typeof globalThis&&globalThis)||n(\"object\"==typeof window&&window)||n(\"object\"==typeof self&&self)||n(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")()}).call(e,n(72))},function(t,e){t.exports=function(t){return\"function\"==typeof t}},function(t,e,n){var r=n(7),i=n(77),o=n(12),a=n(98),s=n(62),u=n(151),c=i(\"wks\"),f=r.Symbol,l=f&&f.for,h=u?f:f&&f.withoutSetter||a;t.exports=function(t){if(!o(c,t)||!s&&\"string\"!=typeof c[t]){var e=\"Symbol.\"+t;s&&o(f,t)?c[t]=f[t]:c[t]=u&&l?l(e):h(e)}return c[t]}},function(t,e,n){var r=n(6),i=n(12),o=n(147),a=n(23).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});i(e,t)||a(e,t,{value:o.f(t)})}},function(t,e,n){var r=n(8);t.exports=function(t){return\"object\"==typeof t?null!==t:r(t)}},function(t,e,n){var r=n(4),i=n(34),o=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return o(i(t),e)}},function(t,e,n){t.exports=n(275)},function(t,e,n){var r=n(2);t.exports=!r(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},function(t,e,n){var r=n(74),i=Function.prototype.call;t.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){\"use strict\";function r(t){if(!Object(i.a)(t))return[];if(o.m)return Object(o.m)(t);var e=[];for(var n in t)Object(a.a)(t,n)&&e.push(n);return o.h&&Object(s.a)(t,e),e}e.a=r;var i=n(54),o=n(5),a=n(45),s=n(184)},function(t,e,n){\"use strict\";function r(t){var e=\"[object \"+t+\"]\";return function(t){return i.t.call(t)===e}}e.a=r;var i=n(5)},function(t,e,n){var r=n(6),i=n(7),o=n(8),a=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?a(r[t])||a(i[t]):r[t]&&r[t][e]||i[t]&&i[t][e]}},function(t,e,n){var r=n(4);t.exports=r({}.isPrototypeOf)},function(t,e,n){var r=n(11),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+\" is not an object\")}},function(t,e,n){\"use strict\";function r(t,e,n){return i.a.iteratee!==a.a?i.a.iteratee(t,e):Object(o.a)(t,e,n)}e.a=r;var i=n(25),o=n(194),a=n(195)},function(t,e,n){t.exports=n(384)},function(t,e,n){var r=n(14),i=n(152),o=n(154),a=n(20),s=n(95),u=TypeError,c=Object.defineProperty,f=Object.getOwnPropertyDescriptor;e.f=r?o?function(t,e,n){if(a(t),e=s(e),a(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&\"writable\"in n&&!n.writable){var r=f(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:\"configurable\"in n?n.configurable:r.configurable,enumerable:\"enumerable\"in n?n.enumerable:r.enumerable,writable:!1})}return c(t,e,n)}:c:function(t,e,n){if(a(t),e=s(e),a(n),i)try{return c(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw u(\"Accessors not supported\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e,n){\"use strict\";function r(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),r=Array(n),i=0;i<n;i++)r[i]=arguments[i+e];switch(e){case 0:return t.call(this,r);case 1:return t.call(this,arguments[0],r);case 2:return t.call(this,arguments[0],arguments[1],r)}var o=Array(e+1);for(i=0;i<e;i++)o[i]=arguments[i];return o[e]=r,t.apply(this,o)}}e.a=r},function(t,e,n){\"use strict\";function r(t){return t instanceof r?t:this instanceof r?void(this._wrapped=t):new r(t)}e.a=r;var i=n(5);r.VERSION=i.e,r.prototype.value=function(){return this._wrapped},r.prototype.valueOf=r.prototype.toJSON=r.prototype.value,r.prototype.toString=function(){return String(this._wrapped)}},function(t,e,n){\"use strict\";var r=n(182),i=n(29);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";var r=n(1),i=r(n(22)),o=r(n(13)),a=n(3),s=n(522),u=n(3),c=u.extend,f=n(69),l=n(46),h=n(30),d=h.getSessionToken,p=n(115),v=function(t,e){var n,r=(new Date).getTime(),o=s(r+t);if(e){var a;return(0,i.default)(a=\"\".concat(o,\",\")).call(a,r,\",master\")}return(0,i.default)(n=\"\".concat(o,\",\")).call(n,r)},g=function(t,e){e?t[\"X-LC-Sign\"]=v(f.applicationKey):t[\"X-LC-Key\"]=f.applicationKey},m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n={\"X-LC-Id\":f.applicationId,\"Content-Type\":\"application/json;charset=UTF-8\"},r=!1;return\"boolean\"==typeof t.useMasterKey?r=t.useMasterKey:\"boolean\"==typeof f._config.useMasterKey&&(r=f._config.useMasterKey),r?f.masterKey?e?n[\"X-LC-Sign\"]=v(f.masterKey,!0):n[\"X-LC-Key\"]=\"\".concat(f.masterKey,\",master\"):(console.warn(\"masterKey is not set, fall back to use appKey\"),g(n,e)):g(n,e),f.hookKey&&(n[\"X-LC-Hook-Key\"]=f.hookKey),null!==f._config.production&&(n[\"X-LC-Prod\"]=String(f._config.production)),n[\"X-LC-UA\"]=f._sharedConfig.userAgent,o.default.resolve().then(function(){var e=d(t);if(e)n[\"X-LC-Session\"]=e;else if(!f._config.disableCurrentUser)return f.User.currentAsync().then(function(t){return t&&t._sessionToken&&(n[\"X-LC-Session\"]=t._sessionToken),n});return n})},y=function(t){var e=t.service,n=void 0===e?\"api\":e,r=t.version,i=void 0===r?\"1.1\":r,o=t.path,a=f._config.serverURLs[n];if(!a)throw new Error(\"undefined server URL for \".concat(n));return\"/\"!==a.charAt(a.length-1)&&(a+=\"/\"),a+=i,o&&(a+=o),a},b=function(t){var e=t.service,n=t.version,r=t.method,o=t.path,s=t.query,u=t.data,c=t.authOptions,h=t.signKey,d=void 0===h||h;if(!f.applicationId||!f.applicationKey&&!f.masterKey)throw new Error(\"Not initialized\");f._appRouter&&f._appRouter.refresh();var v=f._config.requestTimeout,g=y({service:e,path:o,version:n});return m(c,d).then(function(t){return p({method:r,url:g,query:s,data:u,headers:t,timeout:v}).catch(function(t){var e={code:t.code||-1,error:t.message||t.responseText};if(t.response&&t.response.code)e=t.response;else if(t.responseText)try{e=JSON.parse(t.responseText)}catch(t){}if(e.rawMessage=e.rawMessage||e.error,!f._sharedConfig.keepErrorRawMessage){var n,o;e.error+=(0,i.default)(n=(0,i.default)(o=\" [\".concat(t.statusCode||\"N/A\",\" \")).call(o,r,\" \")).call(n,g,\"]\")}var s=new l(e.code,e.error);throw delete e.error,a.extend(s,e)})})},_=function(t,e,n,r,i,o,a){var s=\"\";if(t&&(s+=\"/\".concat(t)),e&&(s+=\"/\".concat(e)),n&&(s+=\"/\".concat(n)),i&&i._fetchWhenSave)throw new Error(\"_fetchWhenSave should be in the query\");if(i&&i._where)throw new Error(\"_where should be in the query\");return r&&\"get\"===r.toLowerCase()&&(a=c({},a,i),i=null),b({method:r,path:s,query:a,data:i,authOptions:o})};f.request=b,t.exports={_request:_,request:b}},function(t,e,n){\"use strict\";var r=n(17),i=n(5),o=Object(r.a)(\"Function\"),a=i.p.document&&i.p.document.childNodes;\"function\"!=typeof/./&&\"object\"!=typeof Int8Array&&\"function\"!=typeof a&&(o=function(t){return\"function\"==typeof t||!1}),e.a=o},function(t,e,n){\"use strict\";var r=n(183);e.a=Object(r.a)(\"length\")},function(t,e,n){\"use strict\";var r=n(1),i=r(n(57)),o=r(n(227)),a=r(n(13)),s=n(3),u=function(t){return s.isNull(t)||s.isUndefined(t)},c=function(t){return s.isArray(t)?t:void 0===t||null===t?[]:[t]},f=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(0,i.default)(t),n=t.include,r=t.includeACL,o={};return e&&(o.keys=c(e).join(\",\")),n&&(o.include=c(n).join(\",\")),r&&(o.returnACL=r),o},l=function(t){return t.sessionToken?t.sessionToken:t.user&&\"function\"==typeof t.user.getSessionToken?t.user.getSessionToken():void 0},h=function(t){return function(e){return t(e),e}},d=function(){},p=function(t,e,n){var r;return r=e&&e.hasOwnProperty(\"constructor\")?e.constructor:function(){t.apply(this,arguments)},s.extend(r,t),d.prototype=t.prototype,r.prototype=new d,e&&s.extend(r.prototype,e),n&&s.extend(r,n),r.prototype.constructor=r,r.__super__=t.prototype,r},v=function(t){return new Date(t)},g=function(t,e,n){var r=e.split(\".\"),i=r.pop(),o=t;return r.forEach(function(t){void 0===o[t]&&(o[t]={}),o=o[t]}),o[i]=n,t},m=function(t,e){for(var n=e.split(\".\"),r=n[0],i=n.pop(),o=t,a=0;a<n.length;a++)if(void 0===(o=o[n[a]]))return[void 0,void 0,i];return[o[i],o,i,r]},y=function(t){return s.isObject(t)&&(0,o.default)(t)===Object.prototype},b=function t(e,n){return e()?n().then(function(){return t(e,n)}):a.default.resolve()};t.exports={isNullOrUndefined:u,ensureArray:c,transformFetchOptions:f,getSessionToken:l,tap:h,inherits:p,parseDate:v,setValue:g,findValue:m,isPlainObject:y,continueWhile:b}},function(t,e,n){var r=n(8),i=n(76),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+\" is not a function\")}},function(t,e,n){var r=n(94),i=n(120);t.exports=function(t){return r(i(t))}},function(t,e){t.exports=!0},function(t,e,n){var r=n(120),i=Object;t.exports=function(t){return i(r(t))}},function(t,e,n){t.exports=n(389)},function(t,e,n){t.exports=n(396)},function(t,e,n){var r=n(14),i=n(23),o=n(47);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(6);t.exports=function(t){return r[t+\"Prototype\"]}},function(t,e,n){var r=n(285);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(48),i=n(15),o=n(20),a=n(76),s=n(160),u=n(39),c=n(19),f=n(161),l=n(105),h=n(162),d=TypeError,p=function(t,e){this.stopped=t,this.result=e},v=p.prototype;t.exports=function(t,e,n){var g,m,y,b,_,w,E,O=n&&n.that,T=!(!n||!n.AS_ENTRIES),S=!(!n||!n.IS_ITERATOR),A=!(!n||!n.INTERRUPTED),x=r(e,O),I=function(t){return g&&h(g,\"normal\",t),new p(!0,t)},j=function(t){return T?(o(t),A?x(t[0],t[1],I):x(t[0],t[1])):A?x(t,I):x(t)};if(S)g=t;else{if(!(m=l(t)))throw d(a(t)+\" is not iterable\");if(s(m)){for(y=0,b=u(t);b>y;y++)if((_=j(t[y]))&&c(v,_))return _;return new p(!1)}g=f(t,m)}for(w=g.next;!(E=i(w,g)).done;){try{_=j(E.value)}catch(t){h(g,\"throw\",t)}if(\"object\"==typeof _&&_&&c(v,_))return _}return new p(!1)}},function(t,e,n){\"use strict\";var r=n(32),i=n(163),o=n(50),a=n(42),s=n(23).f,u=n(130),c=n(33),f=n(14),l=a.set,h=a.getterFor(\"Array Iterator\");t.exports=u(Array,\"Array\",function(t,e){l(this,{type:\"Array Iterator\",target:r(t),index:0,kind:e})},function(){var t=h(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==n?{value:r,done:!1}:\"values\"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}},\"values\");var d=o.Arguments=o.Array;if(i(\"keys\"),i(\"values\"),i(\"entries\"),!c&&f&&\"values\"!==d.name)try{s(d,\"name\",{value:\"values\"})}catch(t){}},function(t,e,n){var r,i,o,a=n(164),s=n(7),u=n(4),c=n(11),f=n(37),l=n(12),h=n(122),d=n(100),p=n(78),v=s.TypeError,g=s.WeakMap,m=function(t){return o(t)?i(t):r(t,{})},y=function(t){return function(e){var n;if(!c(e)||(n=i(e)).type!==t)throw v(\"Incompatible receiver, \"+t+\" required\");return n}};if(a||h.state){var b=h.state||(h.state=new g),_=u(b.get),w=u(b.has),E=u(b.set);r=function(t,e){if(w(b,t))throw new v(\"Object already initialized\");return e.facade=t,E(b,t,e),e},i=function(t){return _(b,t)||{}},o=function(t){return w(b,t)}}else{var O=d(\"state\");p[O]=!0,r=function(t,e){if(l(t,O))throw new v(\"Object already initialized\");return e.facade=t,f(t,O,e),e},i=function(t){return l(t,O)?t[O]:{}},o=function(t){return l(t,O)}}t.exports={set:r,get:i,has:o,enforce:m,getterFor:y}},function(t,e,n){var r=n(37);t.exports=function(t,e,n,i){return i&&i.enumerable?t[e]=n:r(t,e,n),t}},function(t,e,n){n(41);var r=n(311),i=n(7),o=n(51),a=n(37),s=n(50),u=n(9),c=u(\"toStringTag\");for(var f in r){var l=i[f],h=l&&l.prototype;h&&o(h)!==c&&a(h,c,f),s[f]=s.Array}},function(t,e,n){\"use strict\";function r(t,e){return null!=t&&i.i.call(t,e)}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";function r(t,e){if(this instanceof r?this.constructor:void 0){var n=new Error(e);return(0,o.default)(n,(0,a.default)(this)),n.code=t,n}return new r(t,e)}var i=n(1),o=i(n(411)),a=i(n(227)),s=n(3);r.prototype=Object.create(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),(0,o.default)(r,Error),s.extend(r,{OTHER_CAUSE:-1,INTERNAL_SERVER_ERROR:1,CONNECTION_FAILED:100,OBJECT_NOT_FOUND:101,INVALID_QUERY:102,INVALID_CLASS_NAME:103,MISSING_OBJECT_ID:104,INVALID_KEY_NAME:105,INVALID_POINTER:106,INVALID_JSON:107,COMMAND_UNAVAILABLE:108,NOT_INITIALIZED:109,INCORRECT_TYPE:111,INVALID_CHANNEL_NAME:112,PUSH_MISCONFIGURED:115,OBJECT_TOO_LARGE:116,OPERATION_FORBIDDEN:119,CACHE_MISS:120,INVALID_NESTED_KEY:121,INVALID_FILE_NAME:122,INVALID_ACL:123,TIMEOUT:124,INVALID_EMAIL_ADDRESS:125,MISSING_CONTENT_TYPE:126,MISSING_CONTENT_LENGTH:127,INVALID_CONTENT_LENGTH:128,FILE_TOO_LARGE:129,FILE_SAVE_ERROR:130,FILE_DELETE_ERROR:153,DUPLICATE_VALUE:137,INVALID_ROLE_NAME:139,EXCEEDED_QUOTA:140,SCRIPT_FAILED:141,VALIDATION_ERROR:142,INVALID_IMAGE_DATA:150,UNSAVED_FILE_ERROR:151,INVALID_PUSH_TIME_ERROR:152,USERNAME_MISSING:200,PASSWORD_MISSING:201,USERNAME_TAKEN:202,EMAIL_TAKEN:203,EMAIL_MISSING:204,EMAIL_NOT_FOUND:205,SESSION_MISSING:206,MUST_CREATE_USER_THROUGH_SIGNUP:207,ACCOUNT_ALREADY_LINKED:208,LINKED_ID_MISSING:250,INVALID_LINKED_SESSION:251,UNSUPPORTED_SERVICE:252,X_DOMAIN_REQUEST:602}),t.exports=r},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(4),i=n(31),o=n(74),a=r(r.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?a(t,e):function(){return t.apply(e,arguments)}}},function(t,e,n){var r,i=n(20),o=n(127),a=n(126),s=n(78),u=n(159),c=n(123),f=n(100),l=f(\"IE_PROTO\"),h=function(){},d=function(t){return\"<script>\"+t+\"<\\/script>\"},p=function(t){t.write(d(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},v=function(){var t,e=c(\"iframe\");return e.style.display=\"none\",u.appendChild(e),e.src=String(\"javascript:\"),t=e.contentWindow.document,t.open(),t.write(d(\"document.F=Object\")),t.close(),t.F},g=function(){try{r=new ActiveXObject(\"htmlfile\")}catch(t){}g=\"undefined\"!=typeof document?document.domain&&r?p(r):v():p(r);for(var t=a.length;t--;)delete g.prototype[a[t]];return g()};s[l]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h.prototype=i(t),n=new h,h.prototype=null,n[l]=t):n=g(),void 0===e?n:o.f(n,e)}},function(t,e){t.exports={}},function(t,e,n){var r=n(128),i=n(8),o=n(61),a=n(9),s=a(\"toStringTag\"),u=Object,c=\"Arguments\"==o(function(){return arguments}()),f=function(t,e){try{return t[e]}catch(t){}};t.exports=r?o:function(t){var e,n,r;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=f(e=u(t),s))?n:c?o(e):\"Object\"==(r=o(e))&&i(e.callee)?\"Arguments\":r}},function(t,e,n){var r=n(128),i=n(23).f,o=n(37),a=n(12),s=n(292),u=n(9),c=u(\"toStringTag\");t.exports=function(t,e,n,u){if(t){var f=n?t:t.prototype;a(f,c)||i(f,c,{configurable:!0,value:e}),u&&!r&&o(f,\"toString\",s)}}},function(t,e,n){\"use strict\";var r=n(31),i=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError(\"Bad Promise constructor\");e=t,n=r}),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new i(t)}},function(t,e,n){\"use strict\";function r(t){var e=typeof t;return\"function\"===e||\"object\"===e&&!!t}e.a=r},function(t,e,n){\"use strict\";var r=n(5),i=n(17);e.a=r.k||Object(i.a)(\"Array\")},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);var r,s;if(Object(o.a)(t))for(r=0,s=t.length;r<s;r++)e(t[r],r,t);else{var u=Object(a.a)(t);for(r=0,s=u.length;r<s;r++)e(t[u[r]],u[r],t)}return t}e.a=r;var i=n(85),o=n(26),a=n(16)},function(t,e,n){t.exports=n(402)},function(t,e,n){\"use strict\";function r(t){return(r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}function i(){return!(\"undefined\"==typeof window||!window.process||\"renderer\"!==window.process.type&&!window.process.__nwjs)||(\"undefined\"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/))&&(\"undefined\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\"undefined\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))}function o(e){if(e[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+e[0]+(this.useColors?\"%c \":\" \")+\"+\"+t.exports.humanize(this.diff),this.useColors){var n=\"color: \"+this.color;e.splice(1,0,n,\"color: inherit\");var r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(t){\"%%\"!==t&&(r++,\"%c\"===t&&(i=r))}),e.splice(i,0,n)}}function a(){var t;return\"object\"===(\"undefined\"==typeof console?\"undefined\":r(console))&&console.log&&(t=console).log.apply(t,arguments)}function s(t){try{t?e.storage.setItem(\"debug\",t):e.storage.removeItem(\"debug\")}catch(t){}}function u(){var t;try{t=e.storage.getItem(\"debug\")}catch(t){}return!t&&\"undefined\"!=typeof process&&\"env\"in process&&(t=process.env.DEBUG),t}e.log=a,e.formatArgs=o,e.save=s,e.load=u,e.useColors=i,e.storage=function(){try{return localStorage}catch(t){}}(),e.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"],t.exports=n(407)(e),t.exports.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}}},function(t,e,n){t.exports=n(234)},function(t,e,n){var r=n(14),i=n(15),o=n(119),a=n(47),s=n(32),u=n(95),c=n(12),f=n(152),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=s(t),e=u(e),f)try{return l(t,e)}catch(t){}if(c(t,e))return a(!i(o.f,t,e),t[e])}},function(t,e,n){var r=n(4),i=r({}.toString),o=r(\"\".slice);t.exports=function(t){return o(i(t),8,-1)}},function(t,e,n){var r=n(75),i=n(2);t.exports=!!Object.getOwnPropertySymbols&&!i(function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41})},function(t,e){},function(t,e,n){var r=n(7);t.exports=r.Promise},function(t,e,n){\"use strict\";var r=n(310).charAt,i=n(79),o=n(42),a=n(130),s=o.set,u=o.getterFor(\"String Iterator\");a(String,\"String\",function(t){s(this,{type:\"String Iterator\",string:i(t),index:0})},function(){var t,e=u(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=r(n,i),e.index+=t.length,{value:t,done:!1})})},function(t,e,n){\"use strict\";function r(t){for(var e=Object(i.a)(t),n=e.length,r=Array(n),o=0;o<n;o++)r[o]=t[e[o]];return r}e.a=r;var i=n(16)},function(t,e,n){\"use strict\";function r(t,e,n,u){if(u=u||[],e||0===e){if(e<=0)return u.concat(t)}else e=1/0;for(var c=u.length,f=0,l=Object(i.a)(t);f<l;f++){var h=t[f];if(Object(o.a)(h)&&(Object(a.a)(h)||Object(s.a)(h)))if(e>1)r(h,e-1,n,u),c=u.length;else for(var d=0,p=h.length;d<p;)u[c++]=h[d++];else n||(u[c++]=h)}return u}e.a=r;var i=n(29),o=n(26),a=n(55),s=n(134)},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);for(var r=!Object(o.a)(t)&&Object(a.a)(t),s=(r||t).length,u=Array(s),c=0;c<s;c++){var f=r?r[c]:c;u[c]=e(t[f],f,t)}return u}e.a=r;var i=n(21),o=n(26),a=n(16)},function(t,e,n){\"use strict\";(function(e){var r=n(1),i=r(n(13)),o=r(n(22)),a=r(n(35)),s=r(n(146)),u=r(n(36)),c=r(n(90)),f=r(n(57)),l=n(3),h=n(226),d=n(58),p=n(30),v=p.inherits,g=p.parseDate,m=n(229),y=n(71),b=y.setAdapters,_=y.adapterManager,w=e.AV||{};w._config={serverURLs:{},useMasterKey:!1,production:null,realtime:null,requestTimeout:null};var E=\"LeanCloud-JS-SDK/\".concat(m);w._sharedConfig={userAgent:E,liveQueryRealtime:null},_.on(\"platformInfo\",function(t){var e=E;if(t)if(t.userAgent)e=t.userAgent;else{var n=t.name;t.version&&(n+=\"/\".concat(t.version)),t.extra&&(n+=\"; \".concat(t.extra)),e+=\" (\".concat(n,\")\")}w._sharedConfig.userAgent=e}),w._getAVPath=function(t){if(!w.applicationId)throw new Error(\"You need to call AV.initialize before using AV.\");if(t||(t=\"\"),!l.isString(t))throw new Error(\"Tried to get a localStorage path that wasn't a String.\");return\"/\"===t[0]&&(t=t.substring(1)),\"AV/\"+w.applicationId+\"/\"+t},w._installationId=null,w._getInstallationId=function(){if(w._installationId)return i.default.resolve(w._installationId);var t=w._getAVPath(\"installationId\");return w.localStorage.getItemAsync(t).then(function(e){return w._installationId=e,w._installationId?e:(w._installationId=e=h(),w.localStorage.setItemAsync(t,e).then(function(){return e}))})},w._subscriptionId=null,w._refreshSubscriptionId=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:w._getAVPath(\"subscriptionId\"),e=w._subscriptionId=h();return w.localStorage.setItemAsync(t,e).then(function(){return e})},w._getSubscriptionId=function(){if(w._subscriptionId)return i.default.resolve(w._subscriptionId);var t=w._getAVPath(\"subscriptionId\");return w.localStorage.getItemAsync(t).then(function(e){return w._subscriptionId=e,w._subscriptionId||(e=w._refreshSubscriptionId(t)),e})},w._parseDate=g,w._extend=function(t,e){var n=v(this,t,e);return n.extend=this.extend,n},w._encode=function(t,e,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(t instanceof w.Object){if(n)throw new Error(\"AV.Objects not allowed here\");return e&&!l.include(e,t)&&t._hasData?t._toFullJSON((0,o.default)(e).call(e,t),r):t._toPointer()}if(t instanceof w.ACL)return t.toJSON();if(l.isDate(t))return r?{__type:\"Date\",iso:t.toJSON()}:t.toJSON();if(t instanceof w.GeoPoint)return t.toJSON();if(l.isArray(t))return(0,a.default)(l).call(l,t,function(t){return w._encode(t,e,n,r)});if(l.isRegExp(t))return t.source;if(t instanceof w.Relation)return t.toJSON();if(t instanceof w.Op)return t.toJSON();if(t instanceof w.File){if(!t.url()&&!t.id)throw new Error(\"Tried to save an object containing an unsaved file.\");return t._toFullJSON(e,r)}return l.isObject(t)?l.mapObject(t,function(t,i){return w._encode(t,e,n,r)}):t},w._decode=function(t,e){if(!l.isObject(t)||l.isDate(t))return t;if(l.isArray(t))return(0,a.default)(l).call(l,t,function(t){return w._decode(t)});if(t instanceof w.Object)return t;if(t instanceof w.File)return t;if(t instanceof w.Op)return t;if(t instanceof w.GeoPoint)return t;if(t instanceof w.ACL)return t;if(\"ACL\"===e)return new w.ACL(t);if(t.__op)return w.Op._decode(t);var n;if(\"Pointer\"===t.__type){n=t.className;var r=w.Object._create(n);if((0,s.default)(t).length>3){var i=l.clone(t);delete i.__type,delete i.className,r._finishFetch(i,!0)}else r._finishFetch({objectId:t.objectId},!1);return r}if(\"Object\"===t.__type){n=t.className;var o=l.clone(t);delete o.__type,delete o.className;var u=w.Object._create(n);return u._finishFetch(o,!0),u}if(\"Date\"===t.__type)return w._parseDate(t.iso);if(\"GeoPoint\"===t.__type)return new w.GeoPoint({latitude:t.latitude,longitude:t.longitude});if(\"Relation\"===t.__type){if(!e)throw new Error(\"key missing decoding a Relation\");var c=new w.Relation(null,e);return c.targetClassName=t.className,c}if(\"File\"===t.__type){var f=new w.File(t.name),h=l.clone(t);return delete h.__type,f._finishFetch(h),f}return l.mapObject(t,w._decode)},w.parseJSON=w._decode,w.parse=function(t){return w.parseJSON(JSON.parse(t))},w.stringify=function(t){return(0,u.default)(w._encode(t,[],!1,!0))},w._encodeObjectOrArray=function(t){var e=function(t){return t&&t._toFullJSON&&(t=t._toFullJSON([])),l.mapObject(t,function(t){return w._encode(t,[])})};return l.isArray(t)?(0,a.default)(t).call(t,function(t){return e(t)}):e(t)},w._arrayEach=l.each,w._traverse=function(t,e,n){if(t instanceof w.Object){if(n=n||[],(0,c.default)(l).call(l,n,t)>=0)return;return n.push(t),w._traverse(t.attributes,e,n),e(t)}return t instanceof w.Relation||t instanceof w.File?e(t):l.isArray(t)?(l.each(t,function(r,i){var o=w._traverse(r,e,n);o&&(t[i]=o)}),e(t)):l.isObject(t)?(w._each(t,function(r,i){var o=w._traverse(r,e,n);o&&(t[i]=o)}),e(t)):e(t)},w._objectEach=w._each=function(t,e){l.isObject(t)?l.each((0,f.default)(l).call(l,t),function(n){e(t[n],n)}):l.each(t,e)},w.debug={enable:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"leancloud*\";return d.enable(t)},disable:d.disable},w.setAdapters=b,t.exports=w}).call(e,n(72))},function(t,e,n){var r=n(48),i=n(4),o=n(94),a=n(34),s=n(39),u=n(223),c=i([].push),f=function(t){var e=1==t,n=2==t,i=3==t,f=4==t,l=6==t,h=7==t,d=5==t||l;return function(p,v,g,m){for(var y,b,_=a(p),w=o(_),E=r(v,g),O=s(w),T=0,S=m||u,A=e?S(p,O):n||h?S(p,0):void 0;O>T;T++)if((d||T in w)&&(y=w[T],b=E(y,T,_),t))if(e)A[T]=b;else if(b)switch(t){case 3:return!0;case 5:return y;case 6:return T;case 2:c(A,y)}else switch(t){case 4:return!1;case 7:c(A,y)}return l?-1:i||f?f:A}};t.exports={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6),filterReject:f(7)}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(57)),o=n(3),a=n(230),s=n(30),u=s.inherits,c=u(a,{constructor:function(){a.apply(this),this._adapters={}},getAdapter:function(t){var e=this._adapters[t];if(void 0===e)throw new Error(\"\".concat(t,\" adapter is not configured\"));return e},setAdapters:function(t){var e=this;o.extend(this._adapters,t),(0,i.default)(o).call(o,t).forEach(function(n){return e.emit(n,t[n])})}}),f=new c;t.exports={getAdapter:f.getAdapter.bind(f),setAdapters:f.setAdapters.bind(f),adapterManager:f}},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(74),i=Function.prototype,o=i.apply,a=i.call;t.exports=\"object\"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},function(t,e,n){var r=n(2);t.exports=!r(function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")})},function(t,e,n){var r,i,o=n(7),a=n(97),s=o.process,u=o.Deno,c=s&&s.versions||u&&u.version,f=c&&c.v8;f&&(r=f.split(\".\"),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(!(r=a.match(/Edge\\/(\\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\\/(\\d+)/))&&(i=+r[1]),t.exports=i},function(t,e){var n=String;t.exports=function(t){try{return n(t)}catch(t){return\"Object\"}}},function(t,e,n){var r=n(33),i=n(122);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.23.3\",mode:r?\"pure\":\"global\",copyright:\"© 2014-2022 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},function(t,e){t.exports={}},function(t,e,n){var r=n(51),i=String;t.exports=function(t){if(\"Symbol\"===r(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return i(t)}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,n){var r=n(7),i=n(64),o=n(8),a=n(153),s=n(129),u=n(9),c=n(301),f=n(33),l=n(75),h=i&&i.prototype,d=u(\"species\"),p=!1,v=o(r.PromiseRejectionEvent),g=a(\"Promise\",function(){var t=s(i),e=t!==String(i);if(!e&&66===l)return!0;if(f&&(!h.catch||!h.finally))return!0;if(l>=51&&/native code/.test(t))return!1;var n=new i(function(t){t(1)}),r=function(t){t(function(){},function(){})},o=n.constructor={};return o[d]=r,!(p=n.then(function(){})instanceof r)||!e&&c&&!v});t.exports={CONSTRUCTOR:g,REJECTION_EVENT:v,SUBCLASSING:p}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o}),n.d(e,\"b\",function(){return a});var r=n(5),i=n(318),o=r.s&&Object(i.a)(new DataView(new ArrayBuffer(8))),a=\"undefined\"!=typeof Map&&Object(i.a)(new Map)},function(t,e,n){\"use strict\";function r(t){if(!Object(i.a)(t))return[];var e=[];for(var n in t)e.push(n);return o.h&&Object(a.a)(t,e),e}e.a=r;var i=n(54),o=n(5),a=n(184)},function(t,e,n){\"use strict\";function r(t){return i.a.toPath(t)}e.a=r;var i=n(25);n(193)},function(t,e,n){\"use strict\";function r(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,o){return t.call(e,n,r,i,o)}}return function(){return t.apply(e,arguments)}}e.a=r},function(t,e,n){\"use strict\";function r(t,e,n){var r=[];return e=Object(i.a)(e,n),Object(o.a)(t,function(t,n,i){e(t,n,i)&&r.push(t)}),r}e.a=r;var i=n(21),o=n(56)},function(t,e,n){\"use strict\";function r(t,e,n,r){return Object(i.a)(t)||(t=Object(o.a)(t)),(\"number\"!=typeof n||r)&&(n=0),Object(a.a)(t,e,n)>=0}e.a=r;var i=n(26),o=n(66),a=n(209)},function(t,e,n){var r=n(61);t.exports=Array.isArray||function(t){return\"Array\"==r(t)}},function(t,e,n){\"use strict\";var r=n(95),i=n(23),o=n(47);t.exports=function(t,e,n){var a=r(e);a in t?i.f(t,a,o(0,n)):t[a]=n}},function(t,e,n){t.exports=n(398)},function(t,e,n){function r(e){\"@babel/helpers - typeof\";return t.exports=r=\"function\"==typeof i&&\"symbol\"==typeof o?function(t){return typeof t}:function(t){return t&&\"function\"==typeof i&&t.constructor===i&&t!==i.prototype?\"symbol\":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,r(e)}var i=n(236),o=n(454);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(468)},function(t,e,n){var r=n(0),i=n(4),o=n(78),a=n(11),s=n(12),u=n(23).f,c=n(102),f=n(239),l=n(255),h=n(98),d=n(254),p=!1,v=h(\"meta\"),g=0,m=function(t){u(t,v,{value:{objectID:\"O\"+g++,weakData:{}}})},y=function(t,e){if(!a(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!s(t,v)){if(!l(t))return\"F\";if(!e)return\"E\";m(t)}return t[v].objectID},b=function(t,e){if(!s(t,v)){if(!l(t))return!0;if(!e)return!1;m(t)}return t[v].weakData},_=function(t){return d&&p&&l(t)&&!s(t,v)&&m(t),t},w=function(){E.enable=function(){},p=!0;var t=c.f,e=i([].splice),n={};n[v]=1,t(n).length&&(c.f=function(n){for(var r=t(n),i=0,o=r.length;i<o;i++)if(r[i]===v){e(r,i,1);break}return r},r({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:f.f}))},E=t.exports={enable:w,fastKey:y,getWeakData:b,onFreeze:_};o[v]=!0},function(t,e,n){var r=n(4),i=n(2),o=n(61),a=Object,s=r(\"\".split);t.exports=i(function(){return!a(\"z\").propertyIsEnumerable(0)})?function(t){return\"String\"==o(t)?s(t,\"\"):a(t)}:a},function(t,e,n){var r=n(279),i=n(96);t.exports=function(t){var e=r(t,\"string\");return i(e)?e:e+\"\"}},function(t,e,n){var r=n(18),i=n(8),o=n(19),a=n(151),s=Object;t.exports=a?function(t){return\"symbol\"==typeof t}:function(t){var e=r(\"Symbol\");return i(e)&&o(e.prototype,s(t))}},function(t,e,n){var r=n(18);t.exports=r(\"navigator\",\"userAgent\")||\"\"},function(t,e,n){var r=n(4),i=0,o=Math.random(),a=r(1..toString);t.exports=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+a(++i+o,36)}},function(t,e,n){var r=n(12),i=n(8),o=n(34),a=n(100),s=n(155),u=a(\"IE_PROTO\"),c=Object,f=c.prototype;t.exports=s?c.getPrototypeOf:function(t){var e=o(t);if(r(e,u))return e[u];var n=e.constructor;return i(n)&&e instanceof n?n.prototype:e instanceof c?f:null}},function(t,e,n){var r=n(77),i=n(98),o=r(\"keys\");t.exports=function(t){return o[t]||(o[t]=i(t))}},function(t,e,n){var r=n(4),i=n(20),o=n(282);t.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,n={};try{t=r(Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set),t(n,[]),e=n instanceof Array}catch(t){}return function(n,r){return i(n),o(r),e?t(n,r):n.__proto__=r,n}}():void 0)},function(t,e,n){var r=n(157),i=n(126),o=i.concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(157),i=n(126);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){var r=n(51),i=n(121),o=n(50),a=n(9),s=a(\"iterator\");t.exports=function(t){if(void 0!=t)return i(t,s)||i(t,\"@@iterator\")||o[r(t)]}},function(t,e,n){var r=n(61),i=n(7);t.exports=\"process\"==r(i.process)},function(t,e,n){var r=n(19),i=TypeError;t.exports=function(t,e){if(r(e,t))return t;throw i(\"Incorrect invocation\")}},function(t,e,n){var r=n(4),i=n(2),o=n(8),a=n(51),s=n(18),u=n(129),c=function(){},f=[],l=s(\"Reflect\",\"construct\"),h=/^\\s*(?:class|function)\\b/,d=r(h.exec),p=!h.exec(c),v=function(t){if(!o(t))return!1;try{return l(c,f,t),!0}catch(t){return!1}},g=function(t){if(!o(t))return!1;switch(a(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return p||!!d(h,u(t))}catch(t){return!0}};g.sham=!0,t.exports=!l||i(function(){var t;return v(v.call)||!v(Object)||!v(function(){t=!0})||t})?g:v},function(t,e,n){var r=n(4);t.exports=r([].slice)},function(t,e,n){\"use strict\";function r(t){return t=Object(i.a)({},t),function(e){return Object(o.a)(e,t)}}e.a=r;var i=n(138),o=n(185)},function(t,e,n){\"use strict\";var r=n(24),i=n(201),o=n(25),a=Object(r.a)(function(t,e){var n=a.placeholder,r=function(){for(var o=0,a=e.length,s=Array(a),u=0;u<a;u++)s[u]=e[u]===n?arguments[o++]:e[u];for(;o<arguments.length;)s.push(arguments[o++]);return Object(i.a)(t,r,this,this,s)};return r});a.placeholder=o.a,e.a=a},function(t,e,n){\"use strict\";function r(t,e){return function(n,r,a){var s=e?[[],[]]:{};return r=Object(i.a)(r,a),Object(o.a)(n,function(e,i){var o=r(e,i,n);t(s,e,o)}),s}}e.a=r;var i=n(21),o=n(56)},function(t,e,n){var r=n(2),i=n(9),o=n(75),a=i(\"species\");t.exports=function(t){return o>=51||!r(function(){var e=[],n=e.constructor={};return n[a]=function(){return{foo:1}},1!==e[t](Boolean).foo})}},function(t,e,n){t.exports=n(235)},function(t,e,n){\"use strict\";var r=n(1),i=r(n(91)),o=r(n(243)),a=r(n(35)),s=r(n(146)),u=r(n(36)),c=r(n(22)),f=(n(3),n(244)),l=f.timeout,h=n(58),d=h(\"leancloud:request\"),p=h(\"leancloud:request:error\"),v=n(71),g=v.getAdapter,m=0,y=function(t){var e=t.method,n=t.url,r=t.query,f=t.data,v=t.headers,y=void 0===v?{}:v,b=t.timeout,_=t.onprogress;if(r){var w,E,O,T=(0,o.default)(w=(0,a.default)(E=(0,s.default)(r)).call(E,function(t){var e,n=r[t];if(void 0!==n){var o=\"object\"===(0,i.default)(n)?(0,u.default)(n):n;return(0,c.default)(e=\"\".concat(encodeURIComponent(t),\"=\")).call(e,encodeURIComponent(o))}})).call(w,function(t){return t}).join(\"&\");n=(0,c.default)(O=\"\".concat(n,\"?\")).call(O,T)}var S=m++;d(\"request(%d) %s %s %o %o %o\",S,e,n,r,f,y);var A=g(\"request\"),x=A(n,{method:e,headers:y,data:f,onprogress:_}).then(function(t){if(d(\"response(%d) %d %O %o\",S,t.status,t.data||t.text,t.header),!1===t.ok){var e=new Error;throw e.response=t,e}return t.data}).catch(function(t){throw t.response&&(h.enabled(\"leancloud:request\")||p(\"request(%d) %s %s %o %o %o\",S,e,n,r,f,y),p(\"response(%d) %d %O %o\",S,t.response.status,t.response.data||t.response.text,t.response.header),t.statusCode=t.response.status,t.responseText=t.response.text,t.response=t.response.data),t});return b?l(x,b):x};t.exports=y},function(t,e){},function(t,e,n){function r(t){return null==t?void 0===t?u:s:c&&c in Object(t)?o(t):a(t)}var i=n(265),o=n(631),a=n(632),s=\"[object Null]\",u=\"[object Undefined]\",c=i?i.toStringTag:void 0;t.exports=r},function(t,e){function n(t){return null!=t&&\"object\"==typeof t}t.exports=n},function(t,e,n){\"use strict\";var r={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,o=i&&!r.call({1:2},1);e.f=o?function(t){var e=i(this,t);return!!e&&e.enumerable}:r},function(t,e){var n=TypeError;t.exports=function(t){if(void 0==t)throw n(\"Can't call method on \"+t);return t}},function(t,e,n){var r=n(31);t.exports=function(t,e){var n=t[e];return null==n?void 0:r(n)}},function(t,e,n){var r=n(7),i=n(281),o=r[\"__core-js_shared__\"]||i(\"__core-js_shared__\",{});t.exports=o},function(t,e,n){var r=n(7),i=n(11),o=r.document,a=i(o)&&i(o.createElement);t.exports=function(t){return a?o.createElement(t):{}}},function(t,e,n){var r=n(125),i=Math.max,o=Math.min;t.exports=function(t,e){var n=r(t);return n<0?i(n+e,0):o(n,e)}},function(t,e,n){var r=n(284);t.exports=function(t){var e=+t;return e!==e||0===e?0:r(e)}},function(t,e){t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},function(t,e,n){var r=n(14),i=n(154),o=n(23),a=n(20),s=n(32),u=n(104);e.f=r&&!i?Object.defineProperties:function(t,e){a(t);for(var n,r=s(e),i=u(e),c=i.length,f=0;c>f;)o.f(t,n=i[f++],r[n]);return t}},function(t,e,n){var r=n(9),i=r(\"toStringTag\"),o={};o[i]=\"z\",t.exports=\"[object z]\"===String(o)},function(t,e,n){var r=n(4),i=n(8),o=n(122),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(t){return a(t)}),t.exports=o.inspectSource},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(33),a=n(290),s=n(8),u=n(291),c=n(99),f=n(101),l=n(52),h=n(37),d=n(43),p=n(9),v=n(50),g=n(165),m=a.PROPER,y=a.CONFIGURABLE,b=g.IteratorPrototype,_=g.BUGGY_SAFARI_ITERATORS,w=p(\"iterator\"),E=function(){return this};t.exports=function(t,e,n,a,p,g,O){u(n,e,a);var T,S,A,x=function(t){if(t===p&&P)return P;if(!_&&t in C)return C[t];switch(t){case\"keys\":case\"values\":case\"entries\":return function(){return new n(this,t)}}return function(){return new n(this)}},I=e+\" Iterator\",j=!1,C=t.prototype,N=C[w]||C[\"@@iterator\"]||p&&C[p],P=!_&&N||x(p),R=\"Array\"==e?C.entries||N:N;if(R&&(T=c(R.call(new t)))!==Object.prototype&&T.next&&(o||c(T)===b||(f?f(T,b):s(T[w])||d(T,w,E)),l(T,I,!0,!0),o&&(v[I]=E)),m&&\"values\"==p&&N&&\"values\"!==N.name&&(!o&&y?h(C,\"name\",\"values\"):(j=!0,P=function(){return i(N,this)})),p)if(S={values:x(\"values\"),keys:g?P:x(\"keys\"),entries:x(\"entries\")},O)for(A in S)!_&&!j&&A in C||d(C,A,S[A]);else r({target:e,proto:!0,forced:_||j},S);return o&&!O||C[w]===P||d(C,w,P,{name:p}),v[e]=P,S}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=n(5);n.d(e,\"VERSION\",function(){return r.e});var i=n(24);n.d(e,\"restArguments\",function(){return i.a});var o=n(54);n.d(e,\"isObject\",function(){return o.a});var a=n(313);n.d(e,\"isNull\",function(){return a.a});var s=n(174);n.d(e,\"isUndefined\",function(){return s.a});var u=n(175);n.d(e,\"isBoolean\",function(){return u.a});var c=n(314);n.d(e,\"isElement\",function(){return c.a});var f=n(132);n.d(e,\"isString\",function(){return f.a});var l=n(176);n.d(e,\"isNumber\",function(){return l.a});var h=n(315);n.d(e,\"isDate\",function(){return h.a});var d=n(316);n.d(e,\"isRegExp\",function(){return d.a});var p=n(317);n.d(e,\"isError\",function(){return p.a});var v=n(177);n.d(e,\"isSymbol\",function(){return v.a});var g=n(178);n.d(e,\"isArrayBuffer\",function(){return g.a});var m=n(133);n.d(e,\"isDataView\",function(){return m.a});var y=n(55);n.d(e,\"isArray\",function(){return y.a});var b=n(28);n.d(e,\"isFunction\",function(){return b.a});var _=n(134);n.d(e,\"isArguments\",function(){return _.a});var w=n(319);n.d(e,\"isFinite\",function(){return w.a});var E=n(179);n.d(e,\"isNaN\",function(){return E.a});var O=n(180);n.d(e,\"isTypedArray\",function(){return O.a});var T=n(321);n.d(e,\"isEmpty\",function(){return T.a});var S=n(185);n.d(e,\"isMatch\",function(){return S.a});var A=n(322);n.d(e,\"isEqual\",function(){return A.a});var x=n(324);n.d(e,\"isMap\",function(){return x.a});var I=n(325);n.d(e,\"isWeakMap\",function(){return I.a});var j=n(326);n.d(e,\"isSet\",function(){return j.a});var C=n(327);n.d(e,\"isWeakSet\",function(){return C.a});var N=n(16);n.d(e,\"keys\",function(){return N.a});var P=n(83);n.d(e,\"allKeys\",function(){return P.a});var R=n(66);n.d(e,\"values\",function(){return R.a});var U=n(328);n.d(e,\"pairs\",function(){return U.a});var k=n(186);n.d(e,\"invert\",function(){return k.a});var L=n(187);n.d(e,\"functions\",function(){return L.a}),n.d(e,\"methods\",function(){return L.a});var M=n(188);n.d(e,\"extend\",function(){return M.a});var D=n(138);n.d(e,\"extendOwn\",function(){return D.a}),n.d(e,\"assign\",function(){return D.a});var F=n(189);n.d(e,\"defaults\",function(){return F.a});var B=n(329);n.d(e,\"create\",function(){return B.a});var V=n(191);n.d(e,\"clone\",function(){return V.a});var q=n(330);n.d(e,\"tap\",function(){return q.a});var W=n(192);n.d(e,\"get\",function(){return W.a});var Y=n(331);n.d(e,\"has\",function(){return Y.a});var z=n(332);n.d(e,\"mapObject\",function(){return z.a});var G=n(140);n.d(e,\"identity\",function(){return G.a});var K=n(181);n.d(e,\"constant\",function(){return K.a});var Q=n(196);n.d(e,\"noop\",function(){return Q.a});var J=n(193);n.d(e,\"toPath\",function(){return J.a});var $=n(141);n.d(e,\"property\",function(){return $.a});var H=n(333);n.d(e,\"propertyOf\",function(){return H.a});var Z=n(110);n.d(e,\"matcher\",function(){return Z.a}),n.d(e,\"matches\",function(){return Z.a});var X=n(334);n.d(e,\"times\",function(){return X.a});var tt=n(197);n.d(e,\"random\",function(){return tt.a});var et=n(142);n.d(e,\"now\",function(){return et.a});var nt=n(335);n.d(e,\"escape\",function(){return nt.a});var rt=n(336);n.d(e,\"unescape\",function(){return rt.a});var it=n(200);n.d(e,\"templateSettings\",function(){return it.a});var ot=n(338);n.d(e,\"template\",function(){return ot.a});var at=n(339);n.d(e,\"result\",function(){return at.a});var st=n(340);n.d(e,\"uniqueId\",function(){return st.a});var ut=n(341);n.d(e,\"chain\",function(){return ut.a});var ct=n(195);n.d(e,\"iteratee\",function(){return ct.a});var ft=n(111);n.d(e,\"partial\",function(){return ft.a});var lt=n(202);n.d(e,\"bind\",function(){return lt.a});var ht=n(342);n.d(e,\"bindAll\",function(){return ht.a});var dt=n(343);n.d(e,\"memoize\",function(){return dt.a});var pt=n(203);n.d(e,\"delay\",function(){return pt.a});var vt=n(344);n.d(e,\"defer\",function(){return vt.a});var gt=n(345);n.d(e,\"throttle\",function(){return gt.a});var mt=n(346);n.d(e,\"debounce\",function(){return mt.a});var yt=n(347);n.d(e,\"wrap\",function(){return yt.a});var bt=n(143);n.d(e,\"negate\",function(){return bt.a});var _t=n(348);n.d(e,\"compose\",function(){return _t.a});var wt=n(349);n.d(e,\"after\",function(){return wt.a});var Et=n(204);n.d(e,\"before\",function(){return Et.a});var Ot=n(350);n.d(e,\"once\",function(){return Ot.a});var Tt=n(205);n.d(e,\"findKey\",function(){return Tt.a});var St=n(144);n.d(e,\"findIndex\",function(){return St.a});var At=n(207);n.d(e,\"findLastIndex\",function(){return At.a});var xt=n(208);n.d(e,\"sortedIndex\",function(){return xt.a});var It=n(209);n.d(e,\"indexOf\",function(){return It.a});var jt=n(351);n.d(e,\"lastIndexOf\",function(){return jt.a});var Ct=n(211);n.d(e,\"find\",function(){return Ct.a}),n.d(e,\"detect\",function(){return Ct.a});var Nt=n(352);n.d(e,\"findWhere\",function(){return Nt.a});var Pt=n(56);n.d(e,\"each\",function(){return Pt.a}),n.d(e,\"forEach\",function(){return Pt.a});var Rt=n(68);n.d(e,\"map\",function(){return Rt.a}),n.d(e,\"collect\",function(){return Rt.a});var Ut=n(353);n.d(e,\"reduce\",function(){return Ut.a}),n.d(e,\"foldl\",function(){return Ut.a}),n.d(e,\"inject\",function(){return Ut.a});var kt=n(354);n.d(e,\"reduceRight\",function(){return kt.a}),n.d(e,\"foldr\",function(){return kt.a});var Lt=n(86);n.d(e,\"filter\",function(){return Lt.a}),n.d(e,\"select\",function(){return Lt.a});var Mt=n(355);n.d(e,\"reject\",function(){return Mt.a});var Dt=n(356);n.d(e,\"every\",function(){return Dt.a}),n.d(e,\"all\",function(){return Dt.a});var Ft=n(357);n.d(e,\"some\",function(){return Ft.a}),n.d(e,\"any\",function(){return Ft.a});var Bt=n(87);n.d(e,\"contains\",function(){return Bt.a}),n.d(e,\"includes\",function(){return Bt.a}),n.d(e,\"include\",function(){return Bt.a});var Vt=n(358);n.d(e,\"invoke\",function(){return Vt.a});var qt=n(145);n.d(e,\"pluck\",function(){return qt.a});var Wt=n(359);n.d(e,\"where\",function(){return Wt.a});var Yt=n(213);n.d(e,\"max\",function(){return Yt.a});var zt=n(360);n.d(e,\"min\",function(){return zt.a});var Gt=n(361);n.d(e,\"shuffle\",function(){return Gt.a});var Kt=n(214);n.d(e,\"sample\",function(){return Kt.a});var Qt=n(362);n.d(e,\"sortBy\",function(){return Qt.a});var Jt=n(363);n.d(e,\"groupBy\",function(){return Jt.a});var $t=n(364);n.d(e,\"indexBy\",function(){return $t.a});var Ht=n(365);n.d(e,\"countBy\",function(){return Ht.a});var Zt=n(366);n.d(e,\"partition\",function(){return Zt.a});var Xt=n(367);n.d(e,\"toArray\",function(){return Xt.a});var te=n(368);n.d(e,\"size\",function(){return te.a});var ee=n(215);n.d(e,\"pick\",function(){return ee.a});var ne=n(370);n.d(e,\"omit\",function(){return ne.a});var re=n(371);n.d(e,\"first\",function(){return re.a}),n.d(e,\"head\",function(){return re.a}),n.d(e,\"take\",function(){return re.a});var ie=n(216);n.d(e,\"initial\",function(){return ie.a});var oe=n(372);n.d(e,\"last\",function(){return oe.a});var ae=n(217);n.d(e,\"rest\",function(){return ae.a}),n.d(e,\"tail\",function(){return ae.a}),n.d(e,\"drop\",function(){return ae.a});var se=n(373);n.d(e,\"compact\",function(){return se.a});var ue=n(374);n.d(e,\"flatten\",function(){return ue.a});var ce=n(375);n.d(e,\"without\",function(){return ce.a});var fe=n(219);n.d(e,\"uniq\",function(){return fe.a}),n.d(e,\"unique\",function(){return fe.a});var le=n(376);n.d(e,\"union\",function(){return le.a});var he=n(377);n.d(e,\"intersection\",function(){return he.a});var de=n(218);n.d(e,\"difference\",function(){return de.a});var pe=n(220);n.d(e,\"unzip\",function(){return pe.a}),n.d(e,\"transpose\",function(){return pe.a});var ve=n(378);n.d(e,\"zip\",function(){return ve.a});var ge=n(379);n.d(e,\"object\",function(){return ge.a});var me=n(380);n.d(e,\"range\",function(){return me.a});var ye=n(381);n.d(e,\"chunk\",function(){return ye.a});var be=n(382);n.d(e,\"mixin\",function(){return be.a});var _e=n(383);n.d(e,\"default\",function(){return _e.a})},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"String\")},function(t,e,n){\"use strict\";function r(t){return null!=t&&Object(o.a)(t.getInt8)&&Object(a.a)(t.buffer)}var i=n(17),o=n(28),a=n(178),s=n(82),u=Object(i.a)(\"DataView\");e.a=s.a?r:u},function(t,e,n){\"use strict\";var r=n(17),i=n(45),o=Object(r.a)(\"Arguments\");!function(){o(arguments)||(o=function(t){return Object(i.a)(t,\"callee\")})}(),e.a=o},function(t,e,n){\"use strict\";var r=n(183);e.a=Object(r.a)(\"byteLength\")},function(t,e,n){\"use strict\";function r(t){var e=Object(i.a)(t);return function(n){if(null==n)return!1;var r=Object(a.a)(n);if(Object(i.a)(r))return!1;for(var u=0;u<e;u++)if(!Object(o.a)(n[t[u]]))return!1;return t!==l||!Object(o.a)(n[s])}}e.a=r,n.d(e,\"b\",function(){return f}),n.d(e,\"d\",function(){return l}),n.d(e,\"c\",function(){return h});var i=n(29),o=n(28),a=n(83),s=\"forEach\",u=[\"clear\",\"delete\"],c=[\"get\",\"has\",\"set\"],f=u.concat(s,c),l=u.concat(c),h=[\"add\"].concat(u,s,\"has\")},function(t,e,n){\"use strict\";function r(t,e){return function(n){var r=arguments.length;if(e&&(n=Object(n)),r<2||null==n)return n;for(var i=1;i<r;i++)for(var o=arguments[i],a=t(o),s=a.length,u=0;u<s;u++){var c=a[u];e&&void 0!==n[c]||(n[c]=o[c])}return n}}e.a=r},function(t,e,n){\"use strict\";var r=n(137),i=n(16);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";function r(t,e){for(var n=e.length,r=0;r<n;r++){if(null==t)return;t=t[e[r]]}return n?t:void 0}e.a=r},function(t,e,n){\"use strict\";function r(t){return t}e.a=r},function(t,e,n){\"use strict\";function r(t){return t=Object(o.a)(t),function(e){return Object(i.a)(e,t)}}e.a=r;var i=n(139),o=n(84)},function(t,e,n){\"use strict\";e.a=Date.now||function(){return(new Date).getTime()}},function(t,e,n){\"use strict\";function r(t){return function(){return!t.apply(this,arguments)}}e.a=r},function(t,e,n){\"use strict\";var r=n(206);e.a=Object(r.a)(1)},function(t,e,n){\"use strict\";function r(t,e){return Object(i.a)(t,Object(o.a)(e))}e.a=r;var i=n(68),o=n(141)},function(t,e,n){t.exports=n(393)},function(t,e,n){var r=n(9);e.f=r},function(t,e,n){t.exports=n(497)},function(t,e,n){\"use strict\";t.exports=n(566)},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i in e)n&&n.unsafe&&t[i]?t[i]=e[i]:r(t,i,e[i],n);return t}},function(t,e,n){var r=n(62);t.exports=r&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},function(t,e,n){var r=n(14),i=n(2),o=n(123);t.exports=!r&&!i(function(){return 7!=Object.defineProperty(o(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,e,n){var r=n(2),i=n(8),o=/#|\\.prototype\\./,a=function(t,e){var n=u[s(t)];return n==f||n!=c&&(i(e)?r(e):!!e)},s=a.normalize=function(t){return String(t).replace(o,\".\").toLowerCase()},u=a.data={},c=a.NATIVE=\"N\",f=a.POLYFILL=\"P\";t.exports=a},function(t,e,n){var r=n(14),i=n(2);t.exports=r&&i(function(){return 42!=Object.defineProperty(function(){},\"prototype\",{value:42,writable:!1}).prototype})},function(t,e,n){var r=n(2);t.exports=!r(function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})},function(t,e,n){var r=n(18),i=n(4),o=n(102),a=n(103),s=n(20),u=i([].concat);t.exports=r(\"Reflect\",\"ownKeys\")||function(t){var e=o.f(s(t)),n=a.f;return n?u(e,n(t)):e}},function(t,e,n){var r=n(4),i=n(12),o=n(32),a=n(158).indexOf,s=n(78),u=r([].push);t.exports=function(t,e){var n,r=o(t),c=0,f=[];for(n in r)!i(s,n)&&i(r,n)&&u(f,n);for(;e.length>c;)i(r,n=e[c++])&&(~a(f,n)||u(f,n));return f}},function(t,e,n){var r=n(32),i=n(124),o=n(39),a=function(t){return function(e,n,a){var s,u=r(e),c=o(u),f=i(a,c);if(t&&n!=n){for(;c>f;)if((s=u[f++])!=s)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===n)return t||f||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,e,n){var r=n(18);t.exports=r(\"document\",\"documentElement\")},function(t,e,n){var r=n(9),i=n(50),o=r(\"iterator\"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||a[o]===t)}},function(t,e,n){var r=n(15),i=n(31),o=n(20),a=n(76),s=n(105),u=TypeError;t.exports=function(t,e){var n=arguments.length<2?s(t):e;if(i(n))return o(r(n,t));throw u(a(t)+\" is not iterable\")}},function(t,e,n){var r=n(15),i=n(20),o=n(121);t.exports=function(t,e,n){var a,s;i(t);try{if(!(a=o(t,\"return\"))){if(\"throw\"===e)throw n;return n}a=r(a,t)}catch(t){s=!0,a=t}if(\"throw\"===e)throw n;if(s)throw a;return i(a),n}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(7),i=n(8),o=n(129),a=r.WeakMap;t.exports=i(a)&&/native code/.test(o(a))},function(t,e,n){\"use strict\";var r,i,o,a=n(2),s=n(8),u=n(49),c=n(99),f=n(43),l=n(9),h=n(33),d=l(\"iterator\"),p=!1;[].keys&&(o=[].keys(),\"next\"in o?(i=c(c(o)))!==Object.prototype&&(r=i):p=!0),void 0==r||a(function(){var t={};return r[d].call(t)!==t})?r={}:h&&(r=u(r)),s(r[d])||f(r,d,function(){return this}),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:p}},function(t,e,n){\"use strict\";var r=n(18),i=n(23),o=n(9),a=n(14),s=o(\"species\");t.exports=function(t){var e=r(t),n=i.f;a&&e&&!e[s]&&n(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){var r=n(20),i=n(168),o=n(9),a=o(\"species\");t.exports=function(t,e){var n,o=r(t).constructor;return void 0===o||void 0==(n=r(o)[a])?e:i(n)}},function(t,e,n){var r=n(108),i=n(76),o=TypeError;t.exports=function(t){if(r(t))return t;throw o(i(t)+\" is not a constructor\")}},function(t,e,n){var r,i,o,a,s=n(7),u=n(73),c=n(48),f=n(8),l=n(12),h=n(2),d=n(159),p=n(109),v=n(123),g=n(295),m=n(170),y=n(106),b=s.setImmediate,_=s.clearImmediate,w=s.process,E=s.Dispatch,O=s.Function,T=s.MessageChannel,S=s.String,A=0,x={};try{r=s.location}catch(t){}var I=function(t){if(l(x,t)){var e=x[t];delete x[t],e()}},j=function(t){return function(){I(t)}},C=function(t){I(t.data)},N=function(t){s.postMessage(S(t),r.protocol+\"//\"+r.host)};b&&_||(b=function(t){g(arguments.length,1);var e=f(t)?t:O(t),n=p(arguments,1);return x[++A]=function(){u(e,void 0,n)},i(A),A},_=function(t){delete x[t]},y?i=function(t){w.nextTick(j(t))}:E&&E.now?i=function(t){E.now(j(t))}:T&&!m?(o=new T,a=o.port2,o.port1.onmessage=C,i=c(a.postMessage,a)):s.addEventListener&&f(s.postMessage)&&!s.importScripts&&r&&\"file:\"!==r.protocol&&!h(N)?(i=N,s.addEventListener(\"message\",C,!1)):i=\"onreadystatechange\"in v(\"script\")?function(t){d.appendChild(v(\"script\")).onreadystatechange=function(){d.removeChild(this),I(t)}}:function(t){setTimeout(j(t),0)}),t.exports={set:b,clear:_}},function(t,e,n){var r=n(97);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},function(t,e,n){var r=n(64),i=n(172),o=n(81).CONSTRUCTOR;t.exports=o||!i(function(t){r.all(t).then(void 0,function(){})})},function(t,e,n){var r=n(9),i=r(\"iterator\"),o=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){o=!0}};s[i]=function(){return this},Array.from(s,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var r={};r[i]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(t){}return n}},function(t,e,n){var r=n(20),i=n(11),o=n(53);t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){\"use strict\";function r(t){return void 0===t}e.a=r},function(t,e,n){\"use strict\";function r(t){return!0===t||!1===t||\"[object Boolean]\"===i.t.call(t)}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"Number\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"Symbol\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"ArrayBuffer\")},function(t,e,n){\"use strict\";function r(t){return Object(o.a)(t)&&Object(i.g)(t)}e.a=r;var i=n(5),o=n(176)},function(t,e,n){\"use strict\";function r(t){return i.l?Object(i.l)(t)&&!Object(o.a)(t):Object(s.a)(t)&&u.test(i.t.call(t))}var i=n(5),o=n(133),a=n(181),s=n(320),u=/\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;e.a=i.r?r:Object(a.a)(!1)},function(t,e,n){\"use strict\";function r(t){return function(){return t}}e.a=r},function(t,e,n){\"use strict\";function r(t){return function(e){var n=t(e);return\"number\"==typeof n&&n>=0&&n<=i.b}}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";function r(t){return function(e){return null==e?void 0:e[t]}}e.a=r},function(t,e,n){\"use strict\";function r(t){for(var e={},n=t.length,r=0;r<n;++r)e[t[r]]=!0;return{contains:function(t){return e[t]},push:function(n){return e[n]=!0,t.push(n)}}}function i(t,e){e=r(e);var n=o.n.length,i=t.constructor,u=Object(a.a)(i)&&i.prototype||o.c,c=\"constructor\";for(Object(s.a)(t,c)&&!e.contains(c)&&e.push(c);n--;)(c=o.n[n])in t&&t[c]!==u[c]&&!e.contains(c)&&e.push(c)}e.a=i;var o=n(5),a=n(28),s=n(45)},function(t,e,n){\"use strict\";function r(t,e){var n=Object(i.a)(e),r=n.length;if(null==t)return!r;for(var o=Object(t),a=0;a<r;a++){var s=n[a];if(e[s]!==o[s]||!(s in o))return!1}return!0}e.a=r;var i=n(16)},function(t,e,n){\"use strict\";function r(t){for(var e={},n=Object(i.a)(t),r=0,o=n.length;r<o;r++)e[t[n[r]]]=n[r];return e}e.a=r;var i=n(16)},function(t,e,n){\"use strict\";function r(t){var e=[];for(var n in t)Object(i.a)(t[n])&&e.push(n);return e.sort()}e.a=r;var i=n(28)},function(t,e,n){\"use strict\";var r=n(137),i=n(83);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";var r=n(137),i=n(83);e.a=Object(r.a)(i.a,!0)},function(t,e,n){\"use strict\";function r(){return function(){}}function i(t){if(!Object(o.a)(t))return{};if(a.j)return Object(a.j)(t);var e=r();e.prototype=t;var n=new e;return e.prototype=null,n}e.a=i;var o=n(54),a=n(5)},function(t,e,n){\"use strict\";function r(t){return Object(i.a)(t)?Object(o.a)(t)?t.slice():Object(a.a)({},t):t}e.a=r;var i=n(54),o=n(55),a=n(188)},function(t,e,n){\"use strict\";function r(t,e,n){var r=Object(o.a)(t,Object(i.a)(e));return Object(a.a)(r)?n:r}e.a=r;var i=n(84),o=n(139),a=n(174)},function(t,e,n){\"use strict\";function r(t){return Object(o.a)(t)?t:[t]}e.a=r;var i=n(25),o=n(55);i.a.toPath=r},function(t,e,n){\"use strict\";function r(t,e,n){return null==t?i.a:Object(o.a)(t)?Object(f.a)(t,e,n):Object(a.a)(t)&&!Object(s.a)(t)?Object(u.a)(t):Object(c.a)(t)}e.a=r;var i=n(140),o=n(28),a=n(54),s=n(55),u=n(110),c=n(141),f=n(85)},function(t,e,n){\"use strict\";function r(t,e){return Object(o.a)(t,e,1/0)}e.a=r;var i=n(25),o=n(194);i.a.iteratee=r},function(t,e,n){\"use strict\";function r(){}e.a=r},function(t,e,n){\"use strict\";function r(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))}e.a=r},function(t,e,n){\"use strict\";function r(t){var e=function(e){return t[e]},n=\"(?:\"+Object(i.a)(t).join(\"|\")+\")\",r=RegExp(n),o=RegExp(n,\"g\");return function(t){return t=null==t?\"\":\"\"+t,r.test(t)?t.replace(o,e):t}}e.a=r;var i=n(16)},function(t,e,n){\"use strict\";e.a={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"}},function(t,e,n){\"use strict\";var r=n(25);e.a=r.a.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g}},function(t,e,n){\"use strict\";function r(t,e,n,r,a){if(!(r instanceof e))return t.apply(n,a);var s=Object(i.a)(t.prototype),u=t.apply(s,a);return Object(o.a)(u)?u:s}e.a=r;var i=n(190),o=n(54)},function(t,e,n){\"use strict\";var r=n(24),i=n(28),o=n(201);e.a=Object(r.a)(function(t,e,n){if(!Object(i.a)(t))throw new TypeError(\"Bind must be called on a function\");var a=Object(r.a)(function(r){return Object(o.a)(t,a,e,this,n.concat(r))});return a})},function(t,e,n){\"use strict\";var r=n(24);e.a=Object(r.a)(function(t,e,n){return setTimeout(function(){return t.apply(null,n)},e)})},function(t,e,n){\"use strict\";function r(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}}e.a=r},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);for(var r,a=Object(o.a)(t),s=0,u=a.length;s<u;s++)if(r=a[s],e(t[r],r,t))return r}e.a=r;var i=n(21),o=n(16)},function(t,e,n){\"use strict\";function r(t){return function(e,n,r){n=Object(i.a)(n,r);for(var a=Object(o.a)(e),s=t>0?0:a-1;s>=0&&s<a;s+=t)if(n(e[s],s,e))return s;return-1}}e.a=r;var i=n(21),o=n(29)},function(t,e,n){\"use strict\";var r=n(206);e.a=Object(r.a)(-1)},function(t,e,n){\"use strict\";function r(t,e,n,r){n=Object(i.a)(n,r,1);for(var a=n(e),s=0,u=Object(o.a)(t);s<u;){var c=Math.floor((s+u)/2);n(t[c])<a?s=c+1:u=c}return s}e.a=r;var i=n(21),o=n(29)},function(t,e,n){\"use strict\";var r=n(208),i=n(144),o=n(210);e.a=Object(o.a)(1,i.a,r.a)},function(t,e,n){\"use strict\";function r(t,e,n){return function(r,s,u){var c=0,f=Object(i.a)(r);if(\"number\"==typeof u)t>0?c=u>=0?u:Math.max(u+f,c):f=u>=0?Math.min(u+1,f):u+f+1;else if(n&&u&&f)return u=n(r,s),r[u]===s?u:-1;if(s!==s)return u=e(o.q.call(r,c,f),a.a),u>=0?u+c:-1;for(u=t>0?c:f-1;u>=0&&u<f;u+=t)if(r[u]===s)return u;return-1}}e.a=r;var i=n(29),o=n(5),a=n(179)},function(t,e,n){\"use strict\";function r(t,e,n){var r=Object(i.a)(t)?o.a:a.a,s=r(t,e,n);if(void 0!==s&&-1!==s)return t[s]}e.a=r;var i=n(26),o=n(144),a=n(205)},function(t,e,n){\"use strict\";function r(t){var e=function(e,n,r,a){var s=!Object(i.a)(e)&&Object(o.a)(e),u=(s||e).length,c=t>0?0:u-1;for(a||(r=e[s?s[c]:c],c+=t);c>=0&&c<u;c+=t){var f=s?s[c]:c;r=n(r,e[f],f,e)}return r};return function(t,n,r,i){var o=arguments.length>=3;return e(t,Object(a.a)(n,i,4),r,o)}}e.a=r;var i=n(26),o=n(16),a=n(85)},function(t,e,n){\"use strict\";function r(t,e,n){var r,u,c=-1/0,f=-1/0;if(null==e||\"number\"==typeof e&&\"object\"!=typeof t[0]&&null!=t){t=Object(i.a)(t)?t:Object(o.a)(t);for(var l=0,h=t.length;l<h;l++)null!=(r=t[l])&&r>c&&(c=r)}else e=Object(a.a)(e,n),Object(s.a)(t,function(t,n,r){((u=e(t,n,r))>f||u===-1/0&&c===-1/0)&&(c=t,f=u)});return c}e.a=r;var i=n(26),o=n(66),a=n(21),s=n(56)},function(t,e,n){\"use strict\";function r(t,e,n){if(null==e||n)return Object(i.a)(t)||(t=Object(a.a)(t)),t[Object(u.a)(t.length-1)];var r=Object(i.a)(t)?Object(o.a)(t):Object(a.a)(t),c=Object(s.a)(r);e=Math.max(Math.min(e,c),0);for(var f=c-1,l=0;l<e;l++){var h=Object(u.a)(l,f),d=r[l];r[l]=r[h],r[h]=d}return r.slice(0,e)}e.a=r;var i=n(26),o=n(191),a=n(66),s=n(29),u=n(197)},function(t,e,n){\"use strict\";var r=n(24),i=n(28),o=n(85),a=n(83),s=n(369),u=n(67);e.a=Object(r.a)(function(t,e){var n={},r=e[0];if(null==t)return n;Object(i.a)(r)?(e.length>1&&(r=Object(o.a)(r,e[1])),e=Object(a.a)(t)):(r=s.a,e=Object(u.a)(e,!1,!1),t=Object(t));for(var c=0,f=e.length;c<f;c++){var l=e[c],h=t[l];r(h,l,t)&&(n[l]=h)}return n})},function(t,e,n){\"use strict\";function r(t,e,n){return i.q.call(t,0,Math.max(0,t.length-(null==e||n?1:e)))}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";function r(t,e,n){return i.q.call(t,null==e||n?1:e)}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";var r=n(24),i=n(67),o=n(86),a=n(87);e.a=Object(r.a)(function(t,e){return e=Object(i.a)(e,!0,!0),Object(o.a)(t,function(t){return!Object(a.a)(e,t)})})},function(t,e,n){\"use strict\";function r(t,e,n,r){Object(i.a)(e)||(r=n,n=e,e=!1),null!=n&&(n=Object(o.a)(n,r));for(var u=[],c=[],f=0,l=Object(a.a)(t);f<l;f++){var h=t[f],d=n?n(h,f,t):h;e&&!n?(f&&c===d||u.push(h),c=d):n?Object(s.a)(c,d)||(c.push(d),u.push(h)):Object(s.a)(u,h)||u.push(h)}return u}e.a=r;var i=n(175),o=n(21),a=n(29),s=n(87)},function(t,e,n){\"use strict\";function r(t){for(var e=t&&Object(i.a)(t,o.a).length||0,n=Array(e),r=0;r<e;r++)n[r]=Object(a.a)(t,r);return n}e.a=r;var i=n(213),o=n(29),a=n(145)},function(t,e,n){\"use strict\";function r(t,e){return t._chain?Object(i.a)(e).chain():e}e.a=r;var i=n(25)},function(t,e,n){\"use strict\";var r=n(0),i=n(2),o=n(88),a=n(11),s=n(34),u=n(39),c=n(387),f=n(89),l=n(223),h=n(113),d=n(9),p=n(75),v=d(\"isConcatSpreadable\"),g=p>=51||!i(function(){var t=[];return t[v]=!1,t.concat()[0]!==t}),m=h(\"concat\"),y=function(t){if(!a(t))return!1;var e=t[v];return void 0!==e?!!e:o(t)};r({target:\"Array\",proto:!0,arity:1,forced:!g||!m},{concat:function(t){var e,n,r,i,o,a=s(this),h=l(a,0),d=0;for(e=-1,r=arguments.length;e<r;e++)if(o=-1===e?a:arguments[e],y(o))for(i=u(o),c(d+i),n=0;n<i;n++,d++)n in o&&f(h,d,o[n]);else c(d+1),f(h,d++,o);return h.length=d,h}})},function(t,e,n){var r=n(388);t.exports=function(t,e){return new(r(t))(0===e?0:e)}},function(t,e,n){var r=n(0),i=n(18),o=n(73),a=n(15),s=n(4),u=n(2),c=n(88),f=n(8),l=n(11),h=n(96),d=n(109),p=n(62),v=i(\"JSON\",\"stringify\"),g=s(/./.exec),m=s(\"\".charAt),y=s(\"\".charCodeAt),b=s(\"\".replace),_=s(1..toString),w=/[\\uD800-\\uDFFF]/g,E=/^[\\uD800-\\uDBFF]$/,O=/^[\\uDC00-\\uDFFF]$/,T=!p||u(function(){var t=i(\"Symbol\")();return\"[null]\"!=v([t])||\"{}\"!=v({a:t})||\"{}\"!=v(Object(t))}),S=u(function(){return'\"\\\\udf06\\\\ud834\"'!==v(\"��\")||'\"\\\\udead\"'!==v(\"�\")}),A=function(t,e){var n=d(arguments),r=e;if((l(e)||void 0!==t)&&!h(t))return c(e)||(e=function(t,e){if(f(r)&&(e=a(r,this,t,e)),!h(e))return e}),n[1]=e,o(v,null,n)},x=function(t,e,n){var r=m(n,e-1),i=m(n,e+1);return g(E,t)&&!g(O,i)||g(O,t)&&!g(E,r)?\"\\\\u\"+_(y(t,0),16):t};v&&r({target:\"JSON\",stat:!0,arity:3,forced:T||S},{stringify:function(t,e,n){var r=d(arguments),i=o(T?A:v,null,r);return S&&\"string\"==typeof i?b(i,w,x):i}})},function(t,e,n){\"use strict\";var r=n(2);t.exports=function(t,e){var n=[][t];return!!n&&r(function(){n.call(null,e||function(){return 1},1)})}},function(t,e,n){function r(t,e,n){var r=e&&n||0;\"string\"==typeof t&&(e=\"binary\"===t?new Array(16):null,t=null),t=t||{};var a=t.random||(t.rng||i)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,e)for(var s=0;s<16;++s)e[r+s]=a[s];return e||o(a)}var i=n(405),o=n(406);t.exports=r},function(t,e,n){t.exports=n(228)},function(t,e,n){var r=n(409);t.exports=r},function(t,e,n){\"use strict\";t.exports=\"4.14.0\"},function(t,e,n){\"use strict\";function r(){}function i(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(){this._events=new r,this._eventsCount=0}var a=Object.prototype.hasOwnProperty,s=\"~\";Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(s=!1)),o.prototype.eventNames=function(){var t,e,n=[];if(0===this._eventsCount)return n;for(e in t=this._events)a.call(t,e)&&n.push(s?e.slice(1):e);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},o.prototype.listeners=function(t,e){var n=s?s+t:t,r=this._events[n];if(e)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,o=r.length,a=new Array(o);i<o;i++)a[i]=r[i].fn;return a},o.prototype.emit=function(t,e,n,r,i,o){var a=s?s+t:t;if(!this._events[a])return!1;var u,c,f=this._events[a],l=arguments.length;if(f.fn){switch(f.once&&this.removeListener(t,f.fn,void 0,!0),l){case 1:return f.fn.call(f.context),!0;case 2:return f.fn.call(f.context,e),!0;case 3:return f.fn.call(f.context,e,n),!0;case 4:return f.fn.call(f.context,e,n,r),!0;case 5:return f.fn.call(f.context,e,n,r,i),!0;case 6:return f.fn.call(f.context,e,n,r,i,o),!0}for(c=1,u=new Array(l-1);c<l;c++)u[c-1]=arguments[c];f.fn.apply(f.context,u)}else{var h,d=f.length;for(c=0;c<d;c++)switch(f[c].once&&this.removeListener(t,f[c].fn,void 0,!0),l){case 1:f[c].fn.call(f[c].context);break;case 2:f[c].fn.call(f[c].context,e);break;case 3:f[c].fn.call(f[c].context,e,n);break;case 4:f[c].fn.call(f[c].context,e,n,r);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];f[c].fn.apply(f[c].context,u)}}return!0},o.prototype.on=function(t,e,n){var r=new i(e,n||this),o=s?s+t:t;return this._events[o]?this._events[o].fn?this._events[o]=[this._events[o],r]:this._events[o].push(r):(this._events[o]=r,this._eventsCount++),this},o.prototype.once=function(t,e,n){var r=new i(e,n||this,!0),o=s?s+t:t;return this._events[o]?this._events[o].fn?this._events[o]=[this._events[o],r]:this._events[o].push(r):(this._events[o]=r,this._eventsCount++),this},o.prototype.removeListener=function(t,e,n,i){var o=s?s+t:t;if(!this._events[o])return this;if(!e)return 0==--this._eventsCount?this._events=new r:delete this._events[o],this;var a=this._events[o];if(a.fn)a.fn!==e||i&&!a.once||n&&a.context!==n||(0==--this._eventsCount?this._events=new r:delete this._events[o]);else{for(var u=0,c=[],f=a.length;u<f;u++)(a[u].fn!==e||i&&!a[u].once||n&&a[u].context!==n)&&c.push(a[u]);c.length?this._events[o]=1===c.length?c[0]:c:0==--this._eventsCount?this._events=new r:delete this._events[o]}return this},o.prototype.removeAllListeners=function(t){var e;return t?(e=s?s+t:t,this._events[e]&&(0==--this._eventsCount?this._events=new r:delete this._events[e])):(this._events=new r,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prototype.setMaxListeners=function(){return this},o.prefixed=s,o.EventEmitter=o,t.exports=o},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(71),a=o.getAdapter,s=[\"getItem\",\"setItem\",\"removeItem\",\"clear\"],u={get async(){return a(\"storage\").async}};s.forEach(function(t){u[t+\"Async\"]=function(){var e=a(\"storage\");return i.default.resolve(e[t].apply(e,arguments))},u[t]=function(){var e=a(\"storage\");if(!e.async)return e[t].apply(e,arguments);var n=new Error(\"Synchronous API [\"+t+\"] is not available in this runtime.\");throw n.code=\"SYNC_API_NOT_AVAILABLE\",n}}),t.exports=u},function(t,e,n){\"use strict\";var r=n(1),i=r(n(22)),o=r(n(36)),a=n(231),s=n(69),u=e.removeAsync=a.removeItemAsync.bind(a),c=function(t,e){try{t=JSON.parse(t)}catch(t){return null}if(t){return t.expiredAt&&t.expiredAt<Date.now()?u(e).then(function(){return null}):t.value}return null};e.getAsync=function(t){var e;return t=(0,i.default)(e=\"AV/\".concat(s.applicationId,\"/\")).call(e,t),a.getItemAsync(t).then(function(e){return c(e,t)})},e.setAsync=function(t,e,n){var r,u={value:e};return\"number\"==typeof n&&(u.expiredAt=Date.now()+n),a.setItemAsync((0,i.default)(r=\"AV/\".concat(s.applicationId,\"/\")).call(r,t),(0,o.default)(u))}},function(t,e,n){var r=n(412);t.exports=r},function(t,e,n){var r=n(415);t.exports=r},function(t,e,n){var r=n(418);t.exports=r},function(t,e,n){t.exports=n(421)},function(t,e,n){var r=n(424);n(44),t.exports=r},function(t,e,n){n(425),n(427),n(428),n(224),n(429)},function(t,e,n){var r=n(61),i=n(32),o=n(102).f,a=n(426),s=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(t){try{return o(t)}catch(t){return a(s)}};t.exports.f=function(t){return s&&\"Window\"==r(t)?u(t):o(i(t))}},function(t,e,n){var r=n(15),i=n(18),o=n(9),a=n(43);t.exports=function(){var t=i(\"Symbol\"),e=t&&t.prototype,n=e&&e.valueOf,s=o(\"toPrimitive\");e&&!e[s]&&a(e,s,function(t){return r(n,this)},{arity:1})}},function(t,e,n){var r=n(62);t.exports=r&&!!Symbol.for&&!!Symbol.keyFor},function(t,e,n){n(10)(\"iterator\")},function(t,e,n){t.exports=n(460)},function(t,e,n){\"use strict\";var r;t.exports.timeout=function(t,e){var n,i=new r;return Promise.race([t,new Promise(function(t,r){n=setTimeout(function(){r(i)},e)})]).then(function(t){return clearTimeout(n),t},function(t){throw clearTimeout(n),t})};r=t.exports.TimeoutError=function(){Error.call(this),this.stack=Error().stack,this.message=\"Timeout\"},r.prototype=Object.create(Error.prototype),r.prototype.name=\"TimeoutError\"},function(t,e,n){t.exports=n(246)},function(t,e,n){var r=n(476);t.exports=r},function(t,e,n){t.exports=n(237)},function(t,e,n){t.exports=n(480)},function(t,e,n){\"use strict\";var r=n(4),i=n(31),o=n(11),a=n(12),s=n(109),u=n(74),c=Function,f=r([].concat),l=r([].join),h={},d=function(t,e,n){if(!a(h,e)){for(var r=[],i=0;i<e;i++)r[i]=\"a[\"+i+\"]\";h[e]=c(\"C,a\",\"return new C(\"+l(r,\",\")+\")\")}return h[e](t,n)};t.exports=u?c.bind:function(t){var e=i(this),n=e.prototype,r=s(arguments,1),a=function(){var n=f(r,s(arguments));return this instanceof a?d(e,n.length,n):e.apply(t,n)};return o(n)&&(a.prototype=n),a}},function(t,e,n){t.exports=n(501)},function(t,e,n){t.exports=n(504)},function(t,e){var n={utf8:{stringToBytes:function(t){return n.bin.stringToBytes(unescape(encodeURIComponent(t)))},bytesToString:function(t){return decodeURIComponent(escape(n.bin.bytesToString(t)))}},bin:{stringToBytes:function(t){for(var e=[],n=0;n<t.length;n++)e.push(255&t.charCodeAt(n));return e},bytesToString:function(t){for(var e=[],n=0;n<t.length;n++)e.push(String.fromCharCode(t[n]));return e.join(\"\")}}};t.exports=n},function(t,e,n){t.exports=n(548)},function(t,e,n){var r=n(2);t.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},function(t,e,n){var r=n(2),i=n(11),o=n(61),a=n(571),s=Object.isExtensible,u=r(function(){s(1)});t.exports=u||a?function(t){return!!i(t)&&((!a||\"ArrayBuffer\"!=o(t))&&(!s||s(t)))}:s},function(t,e,n){t.exports=n(572)},function(t,e,n){t.exports=n(576)},function(t,e,n){\"use strict\";var r=n(0),i=n(7),o=n(93),a=n(2),s=n(37),u=n(40),c=n(107),f=n(8),l=n(11),h=n(52),d=n(23).f,p=n(70).forEach,v=n(14),g=n(42),m=g.set,y=g.getterFor;t.exports=function(t,e,n){var g,b=-1!==t.indexOf(\"Map\"),_=-1!==t.indexOf(\"Weak\"),w=b?\"set\":\"add\",E=i[t],O=E&&E.prototype,T={};if(v&&f(E)&&(_||O.forEach&&!a(function(){(new E).entries().next()}))){g=e(function(e,n){m(c(e,S),{type:t,collection:new E}),void 0!=n&&u(n,e[w],{that:e,AS_ENTRIES:b})});var S=g.prototype,A=y(t);p([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],function(t){var e=\"add\"==t||\"set\"==t;t in O&&(!_||\"clear\"!=t)&&s(S,t,function(n,r){var i=A(this).collection;if(!e&&_&&!l(n))return\"get\"==t&&void 0;var o=i[t](0===n?0:n,r);return e?this:o})}),_||d(S,\"size\",{configurable:!0,get:function(){return A(this).collection.size}})}else g=n.getConstructor(e,t,b,w),o.enable();return h(g,t,!1,!0),T[t]=g,r({global:!0,forced:!0},T),_||n.setStrong(g,t,b),g}},function(t,e,n){t.exports=n(598)},function(t,e){function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}t.exports=n},function(t,e){function n(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}t.exports=n},function(t,e,n){function r(t,e){if(t){if(\"string\"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}var i=n(260);t.exports=r},function(t,e,n){function r(t,e){var n=-1,r=t.length,o=r-1;for(e=void 0===e?r:e;++n<e;){var a=i(n,o),s=t[a];t[a]=t[n],t[n]=s}return t.length=e,t}var i=n(622);t.exports=r},function(t,e,n){function r(t){return null==t?[]:i(t,o(t))}var i=n(624),o=n(626);t.exports=r},function(t,e,n){var r=n(266),i=r.Symbol;t.exports=i},function(t,e,n){var r=n(267),i=\"object\"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function(\"return this\")();t.exports=o},function(t,e,n){(function(e){var n=\"object\"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(72))},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function n(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},function(t,e,n){\"use strict\";var r=n(273),i=n(565);t.exports=i(r)},function(t,e,n){\"use strict\";t.exports=n(274)},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3),a=n(69);a._=o,a.version=n(229),a.Promise=i.default,a.localStorage=n(231),a.Cache=n(232),a.Error=n(46),n(414),n(464)(a),n(465)(a),n(466)(a),n(467)(a),n(472)(a),n(473)(a),n(526)(a),n(551)(a),n(552)(a),n(554)(a),n(555)(a),n(556)(a),n(557)(a),n(558)(a),n(559)(a),n(560)(a),n(561)(a),n(562)(a),a.Conversation=n(563),n(564),t.exports=a},function(t,e,n){var r=n(276);n(44),t.exports=r},function(t,e,n){n(277),n(41),n(63),n(293),n(307),n(308),n(309),n(65);var r=n(6);t.exports=r.Promise},function(t,e,n){n(278)},function(t,e,n){\"use strict\";var r=n(0),i=n(19),o=n(99),a=n(101),s=n(283),u=n(49),c=n(37),f=n(47),l=n(286),h=n(287),d=n(40),p=n(288),v=n(9),g=n(289),m=v(\"toStringTag\"),y=Error,b=[].push,_=function(t,e){var n,r=arguments.length>2?arguments[2]:void 0,s=i(w,this);a?n=a(new y,s?o(this):w):(n=s?this:u(w),c(n,m,\"Error\")),void 0!==e&&c(n,\"message\",p(e)),g&&c(n,\"stack\",l(n.stack,1)),h(n,r);var f=[];return d(t,b,{that:f}),c(n,\"errors\",f),n};a?a(_,y):s(_,y,{name:!0});var w=_.prototype=u(y.prototype,{constructor:f(1,_),message:f(1,\"\"),name:f(1,\"AggregateError\")});r({global:!0,constructor:!0,arity:2},{AggregateError:_})},function(t,e,n){var r=n(15),i=n(11),o=n(96),a=n(121),s=n(280),u=n(9),c=TypeError,f=u(\"toPrimitive\");t.exports=function(t,e){if(!i(t)||o(t))return t;var n,u=a(t,f);if(u){if(void 0===e&&(e=\"default\"),n=r(u,t,e),!i(n)||o(n))return n;throw c(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),s(t,e)}},function(t,e,n){var r=n(15),i=n(8),o=n(11),a=TypeError;t.exports=function(t,e){var n,s;if(\"string\"===e&&i(n=t.toString)&&!o(s=r(n,t)))return s;if(i(n=t.valueOf)&&!o(s=r(n,t)))return s;if(\"string\"!==e&&i(n=t.toString)&&!o(s=r(n,t)))return s;throw a(\"Can't convert object to primitive value\")}},function(t,e,n){var r=n(7),i=Object.defineProperty;t.exports=function(t,e){try{i(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){var r=n(8),i=String,o=TypeError;t.exports=function(t){if(\"object\"==typeof t||r(t))return t;throw o(\"Can't set \"+i(t)+\" as a prototype\")}},function(t,e,n){var r=n(12),i=n(156),o=n(60),a=n(23);t.exports=function(t,e,n){for(var s=i(e),u=a.f,c=o.f,f=0;f<s.length;f++){var l=s[f];r(t,l)||n&&r(n,l)||u(t,l,c(e,l))}}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var e=+t;return(e>0?r:n)(e)}},function(t,e,n){var r=n(125),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(4),i=Error,o=r(\"\".replace),a=function(t){return String(i(\"zxcasd\").stack)}(),s=/\\n\\s*at [^:]*:[^\\n]*/,u=s.test(a);t.exports=function(t,e){if(u&&\"string\"==typeof t&&!i.prepareStackTrace)for(;e--;)t=o(t,s,\"\");return t}},function(t,e,n){var r=n(11),i=n(37);t.exports=function(t,e){r(e)&&\"cause\"in e&&i(t,\"cause\",e.cause)}},function(t,e,n){var r=n(79);t.exports=function(t,e){return void 0===t?arguments.length<2?\"\":e:r(t)}},function(t,e,n){var r=n(2),i=n(47);t.exports=!r(function(){var t=Error(\"a\");return!(\"stack\"in t)||(Object.defineProperty(t,\"stack\",i(1,7)),7!==t.stack)})},function(t,e,n){var r=n(14),i=n(12),o=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=i(o,\"name\"),u=s&&\"something\"===function(){}.name,c=s&&(!r||r&&a(o,\"name\").configurable);t.exports={EXISTS:s,PROPER:u,CONFIGURABLE:c}},function(t,e,n){\"use strict\";var r=n(165).IteratorPrototype,i=n(49),o=n(47),a=n(52),s=n(50),u=function(){return this};t.exports=function(t,e,n,c){var f=e+\" Iterator\";return t.prototype=i(r,{next:o(+!c,n)}),a(t,f,!1,!0),s[f]=u,t}},function(t,e,n){\"use strict\";var r=n(128),i=n(51);t.exports=r?{}.toString:function(){return\"[object \"+i(this)+\"]\"}},function(t,e,n){n(294),n(302),n(303),n(304),n(305),n(306)},function(t,e,n){\"use strict\";var r,i,o,a=n(0),s=n(33),u=n(106),c=n(7),f=n(15),l=n(43),h=n(101),d=n(52),p=n(166),v=n(31),g=n(8),m=n(11),y=n(107),b=n(167),_=n(169).set,w=n(296),E=n(299),O=n(80),T=n(300),S=n(42),A=n(64),x=n(81),I=n(53),j=x.CONSTRUCTOR,C=x.REJECTION_EVENT,N=x.SUBCLASSING,P=S.getterFor(\"Promise\"),R=S.set,U=A&&A.prototype,k=A,L=U,M=c.TypeError,D=c.document,F=c.process,B=I.f,V=B,q=!!(D&&D.createEvent&&c.dispatchEvent),W=function(t){var e;return!(!m(t)||!g(e=t.then))&&e},Y=function(t,e){var n,r,i,o=e.value,a=1==e.state,s=a?t.ok:t.fail,u=t.resolve,c=t.reject,l=t.domain;try{s?(a||(2===e.rejection&&J(e),e.rejection=1),!0===s?n=o:(l&&l.enter(),n=s(o),l&&(l.exit(),i=!0)),n===t.promise?c(M(\"Promise-chain cycle\")):(r=W(n))?f(r,n,u,c):u(n)):c(o)}catch(t){l&&!i&&l.exit(),c(t)}},z=function(t,e){t.notified||(t.notified=!0,w(function(){for(var n,r=t.reactions;n=r.get();)Y(n,t);t.notified=!1,e&&!t.rejection&&K(t)}))},G=function(t,e,n){var r,i;q?(r=D.createEvent(\"Event\"),r.promise=e,r.reason=n,r.initEvent(t,!1,!0),c.dispatchEvent(r)):r={promise:e,reason:n},!C&&(i=c[\"on\"+t])?i(r):\"unhandledrejection\"===t&&E(\"Unhandled promise rejection\",n)},K=function(t){f(_,c,function(){var e,n=t.facade,r=t.value,i=Q(t);if(i&&(e=O(function(){u?F.emit(\"unhandledRejection\",r,n):G(\"unhandledrejection\",n,r)}),t.rejection=u||Q(t)?2:1,e.error))throw e.value})},Q=function(t){return 1!==t.rejection&&!t.parent},J=function(t){f(_,c,function(){var e=t.facade;u?F.emit(\"rejectionHandled\",e):G(\"rejectionhandled\",e,t.value)})},$=function(t,e,n){return function(r){t(e,r,n)}},H=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,z(t,!0))},Z=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw M(\"Promise can't be resolved itself\");var r=W(e);r?w(function(){var n={done:!1};try{f(r,e,$(Z,n,t),$(H,n,t))}catch(e){H(n,e,t)}}):(t.value=e,t.state=1,z(t,!1))}catch(e){H({done:!1},e,t)}}};if(j&&(k=function(t){y(this,L),v(t),f(r,this);var e=P(this);try{t($(Z,e),$(H,e))}catch(t){H(e,t)}},L=k.prototype,r=function(t){R(this,{type:\"Promise\",done:!1,notified:!1,parent:!1,reactions:new T,rejection:!1,state:0,value:void 0})},r.prototype=l(L,\"then\",function(t,e){var n=P(this),r=B(b(this,k));return n.parent=!0,r.ok=!g(t)||t,r.fail=g(e)&&e,r.domain=u?F.domain:void 0,0==n.state?n.reactions.add(r):w(function(){Y(r,n)}),r.promise}),i=function(){var t=new r,e=P(t);this.promise=t,this.resolve=$(Z,e),this.reject=$(H,e)},I.f=B=function(t){return t===k||void 0===t?new i(t):V(t)},!s&&g(A)&&U!==Object.prototype)){o=U.then,N||l(U,\"then\",function(t,e){var n=this;return new k(function(t,e){f(o,n,t,e)}).then(t,e)},{unsafe:!0});try{delete U.constructor}catch(t){}h&&h(U,L)}a({global:!0,constructor:!0,wrap:!0,forced:j},{Promise:k}),d(k,\"Promise\",!1,!0),p(\"Promise\")},function(t,e){var n=TypeError;t.exports=function(t,e){if(t<e)throw n(\"Not enough arguments\");return t}},function(t,e,n){var r,i,o,a,s,u,c,f,l=n(7),h=n(48),d=n(60).f,p=n(169).set,v=n(170),g=n(297),m=n(298),y=n(106),b=l.MutationObserver||l.WebKitMutationObserver,_=l.document,w=l.process,E=l.Promise,O=d(l,\"queueMicrotask\"),T=O&&O.value;T||(r=function(){var t,e;for(y&&(t=w.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?a():o=void 0,t}}o=void 0,t&&t.enter()},v||y||m||!b||!_?!g&&E&&E.resolve?(c=E.resolve(void 0),c.constructor=E,f=h(c.then,c),a=function(){f(r)}):y?a=function(){w.nextTick(r)}:(p=h(p,l),a=function(){p(r)}):(s=!0,u=_.createTextNode(\"\"),new b(r).observe(u,{characterData:!0}),a=function(){u.data=s=!s})),t.exports=T||function(t){var e={fn:t,next:void 0};o&&(o.next=e),i||(i=e,a()),o=e}},function(t,e,n){var r=n(97),i=n(7);t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==i.Pebble},function(t,e,n){var r=n(97);t.exports=/web0s(?!.*chrome)/i.test(r)},function(t,e,n){var r=n(7);t.exports=function(t,e){var n=r.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},function(t,e){var n=function(){this.head=null,this.tail=null};n.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=n},function(t,e){t.exports=\"object\"==typeof window&&\"object\"!=typeof Deno},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(31),a=n(53),s=n(80),u=n(40);r({target:\"Promise\",stat:!0,forced:n(171)},{all:function(t){var e=this,n=a.f(e),r=n.resolve,c=n.reject,f=s(function(){var n=o(e.resolve),a=[],s=0,f=1;u(t,function(t){var o=s++,u=!1;f++,i(n,e,t).then(function(t){u||(u=!0,a[o]=t,--f||r(a))},c)}),--f||r(a)});return f.error&&c(f.value),n.promise}})},function(t,e,n){\"use strict\";var r=n(0),i=n(33),o=n(81).CONSTRUCTOR,a=n(64),s=n(18),u=n(8),c=n(43),f=a&&a.prototype;if(r({target:\"Promise\",proto:!0,forced:o,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&u(a)){var l=s(\"Promise\").prototype.catch;f.catch!==l&&c(f,\"catch\",l,{unsafe:!0})}},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(31),a=n(53),s=n(80),u=n(40);r({target:\"Promise\",stat:!0,forced:n(171)},{race:function(t){var e=this,n=a.f(e),r=n.reject,c=s(function(){var a=o(e.resolve);u(t,function(t){i(a,e,t).then(n.resolve,r)})});return c.error&&r(c.value),n.promise}})},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(53);r({target:\"Promise\",stat:!0,forced:n(81).CONSTRUCTOR},{reject:function(t){var e=o.f(this);return i(e.reject,void 0,t),e.promise}})},function(t,e,n){\"use strict\";var r=n(0),i=n(18),o=n(33),a=n(64),s=n(81).CONSTRUCTOR,u=n(173),c=i(\"Promise\"),f=o&&!s;r({target:\"Promise\",stat:!0,forced:o||s},{resolve:function(t){return u(f&&this===c?a:this,t)}})},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(31),a=n(53),s=n(80),u=n(40);r({target:\"Promise\",stat:!0},{allSettled:function(t){var e=this,n=a.f(e),r=n.resolve,c=n.reject,f=s(function(){var n=o(e.resolve),a=[],s=0,c=1;u(t,function(t){var o=s++,u=!1;c++,i(n,e,t).then(function(t){u||(u=!0,a[o]={status:\"fulfilled\",value:t},--c||r(a))},function(t){u||(u=!0,a[o]={status:\"rejected\",reason:t},--c||r(a))})}),--c||r(a)});return f.error&&c(f.value),n.promise}})},function(t,e,n){\"use strict\";var r=n(0),i=n(15),o=n(31),a=n(18),s=n(53),u=n(80),c=n(40);r({target:\"Promise\",stat:!0},{any:function(t){var e=this,n=a(\"AggregateError\"),r=s.f(e),f=r.resolve,l=r.reject,h=u(function(){var r=o(e.resolve),a=[],s=0,u=1,h=!1;c(t,function(t){var o=s++,c=!1;u++,i(r,e,t).then(function(t){c||h||(h=!0,f(t))},function(t){c||h||(c=!0,a[o]=t,--u||l(new n(a,\"No one promise resolved\")))})}),--u||l(new n(a,\"No one promise resolved\"))});return h.error&&l(h.value),r.promise}})},function(t,e,n){\"use strict\";var r=n(0),i=n(33),o=n(64),a=n(2),s=n(18),u=n(8),c=n(167),f=n(173),l=n(43),h=o&&o.prototype;if(r({target:\"Promise\",proto:!0,real:!0,forced:!!o&&a(function(){h.finally.call({then:function(){}},function(){})})},{finally:function(t){var e=c(this,s(\"Promise\")),n=u(t);return this.then(n?function(n){return f(e,t()).then(function(){return n})}:t,n?function(n){return f(e,t()).then(function(){throw n})}:t)}}),!i&&u(o)){var d=s(\"Promise\").prototype.finally;h.finally!==d&&l(h,\"finally\",d,{unsafe:!0})}},function(t,e,n){var r=n(4),i=n(125),o=n(79),a=n(120),s=r(\"\".charAt),u=r(\"\".charCodeAt),c=r(\"\".slice),f=function(t){return function(e,n){var r,f,l=o(a(e)),h=i(n),d=l.length;return h<0||h>=d?t?\"\":void 0:(r=u(l,h),r<55296||r>56319||h+1===d||(f=u(l,h+1))<56320||f>57343?t?s(l,h):r:t?c(l,h,h+2):f-56320+(r-55296<<10)+65536)}};t.exports={codeAt:f(!1),charAt:f(!0)}},function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,e,n){\"use strict\";var r=n(131),i=Object(r.mixin)(r);i._=i,e.a=i},function(t,e,n){\"use strict\";function r(t){return null===t}e.a=r},function(t,e,n){\"use strict\";function r(t){return!(!t||1!==t.nodeType)}e.a=r},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"Date\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"RegExp\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"Error\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"Object\")},function(t,e,n){\"use strict\";function r(t){return!Object(o.a)(t)&&Object(i.f)(t)&&!isNaN(parseFloat(t))}e.a=r;var i=n(5),o=n(177)},function(t,e,n){\"use strict\";var r=n(182),i=n(135);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";function r(t){if(null==t)return!0;var e=Object(i.a)(t);return\"number\"==typeof e&&(Object(o.a)(t)||Object(a.a)(t)||Object(s.a)(t))?0===e:0===Object(i.a)(Object(u.a)(t))}e.a=r;var i=n(29),o=n(55),a=n(132),s=n(134),u=n(16)},function(t,e,n){\"use strict\";function r(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return!1;if(t!==t)return e!==e;var o=typeof t;return(\"function\"===o||\"object\"===o||\"object\"==typeof e)&&i(t,e,n,r)}function i(t,e,n,o){t instanceof a.a&&(t=t._wrapped),e instanceof a.a&&(e=e._wrapped);var m=s.t.call(t);if(m!==s.t.call(e))return!1;if(l.a&&\"[object Object]\"==m&&Object(h.a)(t)){if(!Object(h.a)(e))return!1;m=g}switch(m){case\"[object RegExp]\":case\"[object String]\":return\"\"+t==\"\"+e;case\"[object Number]\":return+t!=+t?+e!=+e:0==+t?1/+t==1/e:+t==+e;case\"[object Date]\":case\"[object Boolean]\":return+t==+e;case\"[object Symbol]\":return s.d.valueOf.call(t)===s.d.valueOf.call(e);case\"[object ArrayBuffer]\":case g:return i(Object(v.a)(t),Object(v.a)(e),n,o)}var y=\"[object Array]\"===m;if(!y&&Object(c.a)(t)){if(Object(u.a)(t)!==Object(u.a)(e))return!1;if(t.buffer===e.buffer&&t.byteOffset===e.byteOffset)return!0;y=!0}if(!y){if(\"object\"!=typeof t||\"object\"!=typeof e)return!1;var b=t.constructor,_=e.constructor;if(b!==_&&!(Object(f.a)(b)&&b instanceof b&&Object(f.a)(_)&&_ instanceof _)&&\"constructor\"in t&&\"constructor\"in e)return!1}n=n||[],o=o||[];for(var w=n.length;w--;)if(n[w]===t)return o[w]===e;if(n.push(t),o.push(e),y){if((w=t.length)!==e.length)return!1;for(;w--;)if(!r(t[w],e[w],n,o))return!1}else{var E,O=Object(d.a)(t);if(w=O.length,Object(d.a)(e).length!==w)return!1;for(;w--;)if(E=O[w],!Object(p.a)(e,E)||!r(t[E],e[E],n,o))return!1}return n.pop(),o.pop(),!0}function o(t,e){return r(t,e)}e.a=o;var a=n(25),s=n(5),u=n(135),c=n(180),f=n(28),l=n(82),h=n(133),d=n(16),p=n(45),v=n(323),g=\"[object DataView]\"},function(t,e,n){\"use strict\";function r(t){return new Uint8Array(t.buffer||t,t.byteOffset||0,Object(i.a)(t))}e.a=r;var i=n(135)},function(t,e,n){\"use strict\";var r=n(17),i=n(82),o=n(136);e.a=i.b?Object(o.a)(o.b):Object(r.a)(\"Map\")},function(t,e,n){\"use strict\";var r=n(17),i=n(82),o=n(136);e.a=i.b?Object(o.a)(o.d):Object(r.a)(\"WeakMap\")},function(t,e,n){\"use strict\";var r=n(17),i=n(82),o=n(136);e.a=i.b?Object(o.a)(o.c):Object(r.a)(\"Set\")},function(t,e,n){\"use strict\";var r=n(17);e.a=Object(r.a)(\"WeakSet\")},function(t,e,n){\"use strict\";function r(t){for(var e=Object(i.a)(t),n=e.length,r=Array(n),o=0;o<n;o++)r[o]=[e[o],t[e[o]]];return r}e.a=r;var i=n(16)},function(t,e,n){\"use strict\";function r(t,e){var n=Object(i.a)(t);return e&&Object(o.a)(n,e),n}e.a=r;var i=n(190),o=n(138)},function(t,e,n){\"use strict\";function r(t,e){return e(t),t}e.a=r},function(t,e,n){\"use strict\";function r(t,e){e=Object(o.a)(e);for(var n=e.length,r=0;r<n;r++){var a=e[r];if(!Object(i.a)(t,a))return!1;t=t[a]}return!!n}e.a=r;var i=n(45),o=n(84)},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);for(var r=Object(o.a)(t),a=r.length,s={},u=0;u<a;u++){var c=r[u];s[c]=e(t[c],c,t)}return s}e.a=r;var i=n(21),o=n(16)},function(t,e,n){\"use strict\";function r(t){return null==t?i.a:function(e){return Object(o.a)(t,e)}}e.a=r;var i=n(196),o=n(192)},function(t,e,n){\"use strict\";function r(t,e,n){var r=Array(Math.max(0,t));e=Object(i.a)(e,n,1);for(var o=0;o<t;o++)r[o]=e(o);return r}e.a=r;var i=n(85)},function(t,e,n){\"use strict\";var r=n(198),i=n(199);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";var r=n(198),i=n(337);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";var r=n(186),i=n(199);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";function r(t){return\"\\\\\"+u[t]}function i(t,e,n){!e&&n&&(e=n),e=Object(o.a)({},e,a.a.templateSettings);var i=RegExp([(e.escape||s).source,(e.interpolate||s).source,(e.evaluate||s).source].join(\"|\")+\"|$\",\"g\"),u=0,l=\"__p+='\";t.replace(i,function(e,n,i,o,a){return l+=t.slice(u,a).replace(c,r),u=a+e.length,n?l+=\"'+\\n((__t=(\"+n+\"))==null?'':_.escape(__t))+\\n'\":i?l+=\"'+\\n((__t=(\"+i+\"))==null?'':__t)+\\n'\":o&&(l+=\"';\\n\"+o+\"\\n__p+='\"),e}),l+=\"';\\n\";var h=e.variable;if(h){if(!f.test(h))throw new Error(h)}else l=\"with(obj||{}){\\n\"+l+\"}\\n\",h=\"obj\";l=\"var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\\n\"+l+\"return __p;\\n\";var d;try{d=new Function(h,\"_\",l)}catch(t){throw t.source=l,t}var p=function(t){return d.call(this,t,a.a)};return p.source=\"function(\"+h+\"){\\n\"+l+\"}\",p}e.a=i;var o=n(189),a=n(25),s=(n(200),/(.)^/),u={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},c=/\\\\|'|\\r|\\n|\\u2028|\\u2029/g,f=/^\\s*(\\w|\\$)+\\s*$/},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(o.a)(e);var r=e.length;if(!r)return Object(i.a)(n)?n.call(t):n;for(var a=0;a<r;a++){var s=null==t?void 0:t[e[a]];void 0===s&&(s=n,a=r),t=Object(i.a)(s)?s.call(t):s}return t}e.a=r;var i=n(28),o=n(84)},function(t,e,n){\"use strict\";function r(t){var e=++i+\"\";return t?t+e:e}e.a=r;var i=0},function(t,e,n){\"use strict\";function r(t){var e=Object(i.a)(t);return e._chain=!0,e}e.a=r;var i=n(25)},function(t,e,n){\"use strict\";var r=n(24),i=n(67),o=n(202);e.a=Object(r.a)(function(t,e){e=Object(i.a)(e,!1,!1);var n=e.length;if(n<1)throw new Error(\"bindAll must be passed function names\");for(;n--;){var r=e[n];t[r]=Object(o.a)(t[r],t)}return t})},function(t,e,n){\"use strict\";function r(t,e){var n=function(r){var o=n.cache,a=\"\"+(e?e.apply(this,arguments):r);return Object(i.a)(o,a)||(o[a]=t.apply(this,arguments)),o[a]};return n.cache={},n}e.a=r;var i=n(45)},function(t,e,n){\"use strict\";var r=n(111),i=n(203),o=n(25);e.a=Object(r.a)(i.a,o.a,1)},function(t,e,n){\"use strict\";function r(t,e,n){var r,o,a,s,u=0;n||(n={});var c=function(){u=!1===n.leading?0:Object(i.a)(),r=null,s=t.apply(o,a),r||(o=a=null)},f=function(){var f=Object(i.a)();u||!1!==n.leading||(u=f);var l=e-(f-u);return o=this,a=arguments,l<=0||l>e?(r&&(clearTimeout(r),r=null),u=f,s=t.apply(o,a),r||(o=a=null)):r||!1===n.trailing||(r=setTimeout(c,l)),s};return f.cancel=function(){clearTimeout(r),u=0,r=o=a=null},f}e.a=r;var i=n(142)},function(t,e,n){\"use strict\";function r(t,e,n){var r,a,s,u,c,f=function(){var i=Object(o.a)()-a;e>i?r=setTimeout(f,e-i):(r=null,n||(u=t.apply(c,s)),r||(s=c=null))},l=Object(i.a)(function(i){return c=this,s=i,a=Object(o.a)(),r||(r=setTimeout(f,e),n&&(u=t.apply(c,s))),u});return l.cancel=function(){clearTimeout(r),r=s=c=null},l}e.a=r;var i=n(24),o=n(142)},function(t,e,n){\"use strict\";function r(t,e){return Object(i.a)(e,t)}e.a=r;var i=n(111)},function(t,e,n){\"use strict\";function r(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}}e.a=r},function(t,e,n){\"use strict\";function r(t,e){return function(){if(--t<1)return e.apply(this,arguments)}}e.a=r},function(t,e,n){\"use strict\";var r=n(111),i=n(204);e.a=Object(r.a)(i.a,2)},function(t,e,n){\"use strict\";var r=n(207),i=n(210);e.a=Object(i.a)(-1,r.a)},function(t,e,n){\"use strict\";function r(t,e){return Object(i.a)(t,Object(o.a)(e))}e.a=r;var i=n(211),o=n(110)},function(t,e,n){\"use strict\";var r=n(212);e.a=Object(r.a)(1)},function(t,e,n){\"use strict\";var r=n(212);e.a=Object(r.a)(-1)},function(t,e,n){\"use strict\";function r(t,e,n){return Object(i.a)(t,Object(o.a)(Object(a.a)(e)),n)}e.a=r;var i=n(86),o=n(143),a=n(21)},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);for(var r=!Object(o.a)(t)&&Object(a.a)(t),s=(r||t).length,u=0;u<s;u++){var c=r?r[u]:u;if(!e(t[c],c,t))return!1}return!0}e.a=r;var i=n(21),o=n(26),a=n(16)},function(t,e,n){\"use strict\";function r(t,e,n){e=Object(i.a)(e,n);for(var r=!Object(o.a)(t)&&Object(a.a)(t),s=(r||t).length,u=0;u<s;u++){var c=r?r[u]:u;if(e(t[c],c,t))return!0}return!1}e.a=r;var i=n(21),o=n(26),a=n(16)},function(t,e,n){\"use strict\";var r=n(24),i=n(28),o=n(68),a=n(139),s=n(84);e.a=Object(r.a)(function(t,e,n){var r,u;return Object(i.a)(e)?u=e:(e=Object(s.a)(e),r=e.slice(0,-1),e=e[e.length-1]),Object(o.a)(t,function(t){var i=u;if(!i){if(r&&r.length&&(t=Object(a.a)(t,r)),null==t)return;i=t[e]}return null==i?i:i.apply(t,n)})})},function(t,e,n){\"use strict\";function r(t,e){return Object(i.a)(t,Object(o.a)(e))}e.a=r;var i=n(86),o=n(110)},function(t,e,n){\"use strict\";function r(t,e,n){var r,u,c=1/0,f=1/0;if(null==e||\"number\"==typeof e&&\"object\"!=typeof t[0]&&null!=t){t=Object(i.a)(t)?t:Object(o.a)(t);for(var l=0,h=t.length;l<h;l++)null!=(r=t[l])&&r<c&&(c=r)}else e=Object(a.a)(e,n),Object(s.a)(t,function(t,n,r){((u=e(t,n,r))<f||u===1/0&&c===1/0)&&(c=t,f=u)});return c}e.a=r;var i=n(26),o=n(66),a=n(21),s=n(56)},function(t,e,n){\"use strict\";function r(t){return Object(i.a)(t,1/0)}e.a=r;var i=n(214)},function(t,e,n){\"use strict\";function r(t,e,n){var r=0;return e=Object(i.a)(e,n),Object(o.a)(Object(a.a)(t,function(t,n,i){return{value:t,index:r++,criteria:e(t,n,i)}}).sort(function(t,e){var n=t.criteria,r=e.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return t.index-e.index}),\"value\")}e.a=r;var i=n(21),o=n(145),a=n(68)},function(t,e,n){\"use strict\";var r=n(112),i=n(45);e.a=Object(r.a)(function(t,e,n){Object(i.a)(t,n)?t[n].push(e):t[n]=[e]})},function(t,e,n){\"use strict\";var r=n(112);e.a=Object(r.a)(function(t,e,n){t[n]=e})},function(t,e,n){\"use strict\";var r=n(112),i=n(45);e.a=Object(r.a)(function(t,e,n){Object(i.a)(t,n)?t[n]++:t[n]=1})},function(t,e,n){\"use strict\";var r=n(112);e.a=Object(r.a)(function(t,e,n){t[n?0:1].push(e)},!0)},function(t,e,n){\"use strict\";function r(t){return t?Object(i.a)(t)?o.q.call(t):Object(a.a)(t)?t.match(l):Object(s.a)(t)?Object(u.a)(t,c.a):Object(f.a)(t):[]}e.a=r;var i=n(55),o=n(5),a=n(132),s=n(26),u=n(68),c=n(140),f=n(66),l=/[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g},function(t,e,n){\"use strict\";function r(t){return null==t?0:Object(i.a)(t)?t.length:Object(o.a)(t).length}e.a=r;var i=n(26),o=n(16)},function(t,e,n){\"use strict\";function r(t,e,n){return e in n}e.a=r},function(t,e,n){\"use strict\";var r=n(24),i=n(28),o=n(143),a=n(68),s=n(67),u=n(87),c=n(215);e.a=Object(r.a)(function(t,e){var n,r=e[0];return Object(i.a)(r)?(r=Object(o.a)(r),e.length>1&&(n=e[1])):(e=Object(a.a)(Object(s.a)(e,!1,!1),String),r=function(t,n){return!Object(u.a)(e,n)}),Object(c.a)(t,r,n)})},function(t,e,n){\"use strict\";function r(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[0]:Object(i.a)(t,t.length-e)}e.a=r;var i=n(216)},function(t,e,n){\"use strict\";function r(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[t.length-1]:Object(i.a)(t,Math.max(0,t.length-e))}e.a=r;var i=n(217)},function(t,e,n){\"use strict\";function r(t){return Object(i.a)(t,Boolean)}e.a=r;var i=n(86)},function(t,e,n){\"use strict\";function r(t,e){return Object(i.a)(t,e,!1)}e.a=r;var i=n(67)},function(t,e,n){\"use strict\";var r=n(24),i=n(218);e.a=Object(r.a)(function(t,e){return Object(i.a)(t,e)})},function(t,e,n){\"use strict\";var r=n(24),i=n(219),o=n(67);e.a=Object(r.a)(function(t){return Object(i.a)(Object(o.a)(t,!0,!0))})},function(t,e,n){\"use strict\";function r(t){for(var e=[],n=arguments.length,r=0,a=Object(i.a)(t);r<a;r++){var s=t[r];if(!Object(o.a)(e,s)){var u;for(u=1;u<n&&Object(o.a)(arguments[u],s);u++);u===n&&e.push(s)}}return e}e.a=r;var i=n(29),o=n(87)},function(t,e,n){\"use strict\";var r=n(24),i=n(220);e.a=Object(r.a)(i.a)},function(t,e,n){\"use strict\";function r(t,e){for(var n={},r=0,o=Object(i.a)(t);r<o;r++)e?n[t[r]]=e[r]:n[t[r][0]]=t[r][1];return n}e.a=r;var i=n(29)},function(t,e,n){\"use strict\";function r(t,e,n){null==e&&(e=t||0,t=0),n||(n=e<t?-1:1);for(var r=Math.max(Math.ceil((e-t)/n),0),i=Array(r),o=0;o<r;o++,t+=n)i[o]=t;return i}e.a=r},function(t,e,n){\"use strict\";function r(t,e){if(null==e||e<1)return[];for(var n=[],r=0,o=t.length;r<o;)n.push(i.q.call(t,r,r+=e));return n}e.a=r;var i=n(5)},function(t,e,n){\"use strict\";function r(t){return Object(o.a)(Object(a.a)(t),function(e){var n=i.a[e]=t[e];i.a.prototype[e]=function(){var t=[this._wrapped];return s.o.apply(t,arguments),Object(u.a)(this,n.apply(i.a,t))}}),i.a}e.a=r;var i=n(25),o=n(56),a=n(187),s=n(5),u=n(221)},function(t,e,n){\"use strict\";var r=n(25),i=n(56),o=n(5),a=n(221);Object(i.a)([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=o.a[t];r.a.prototype[t]=function(){var n=this._wrapped;return null!=n&&(e.apply(n,arguments),\"shift\"!==t&&\"splice\"!==t||0!==n.length||delete n[0]),Object(a.a)(this,n)}}),Object(i.a)([\"concat\",\"join\",\"slice\"],function(t){var e=o.a[t];r.a.prototype[t]=function(){var t=this._wrapped;return null!=t&&(t=e.apply(t,arguments)),Object(a.a)(this,t)}}),e.a=r.a},function(t,e,n){var r=n(385);t.exports=r},function(t,e,n){var r=n(19),i=n(386),o=Array.prototype;t.exports=function(t){var e=t.concat;return t===o||r(o,t)&&e===o.concat?i:e}},function(t,e,n){n(222);var r=n(38);t.exports=r(\"Array\").concat},function(t,e){var n=TypeError;t.exports=function(t){if(t>9007199254740991)throw n(\"Maximum allowed index exceeded\");return t}},function(t,e,n){var r=n(88),i=n(108),o=n(11),a=n(9),s=a(\"species\"),u=Array;t.exports=function(t){var e;return r(t)&&(e=t.constructor,i(e)&&(e===u||r(e.prototype))?e=void 0:o(e)&&null===(e=e[s])&&(e=void 0)),void 0===e?u:e}},function(t,e,n){var r=n(390);t.exports=r},function(t,e,n){var r=n(19),i=n(391),o=Array.prototype;t.exports=function(t){var e=t.map;return t===o||r(o,t)&&e===o.map?i:e}},function(t,e,n){n(392);var r=n(38);t.exports=r(\"Array\").map},function(t,e,n){\"use strict\";var r=n(0),i=n(70).map;r({target:\"Array\",proto:!0,forced:!n(113)(\"map\")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(394);t.exports=r},function(t,e,n){n(395);var r=n(6);t.exports=r.Object.keys},function(t,e,n){var r=n(0),i=n(34),o=n(104);r({target:\"Object\",stat:!0,forced:n(2)(function(){o(1)})},{keys:function(t){return o(i(t))}})},function(t,e,n){var r=n(397);t.exports=r},function(t,e,n){n(224);var r=n(6),i=n(73);r.JSON||(r.JSON={stringify:JSON.stringify}),t.exports=function(t,e,n){return i(r.JSON.stringify,null,arguments)}},function(t,e,n){var r=n(399);t.exports=r},function(t,e,n){var r=n(19),i=n(400),o=Array.prototype;t.exports=function(t){var e=t.indexOf;return t===o||r(o,t)&&e===o.indexOf?i:e}},function(t,e,n){n(401);var r=n(38);t.exports=r(\"Array\").indexOf},function(t,e,n){\"use strict\";var r=n(0),i=n(4),o=n(158).indexOf,a=n(225),s=i([].indexOf),u=!!s&&1/s([1],1,-0)<0,c=a(\"indexOf\");r({target:\"Array\",proto:!0,forced:u||!c},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return u?s(this,t,e)||0:o(this,t,e)}})},function(t,e,n){n(44);var r=n(51),i=n(12),o=n(19),a=n(403),s=Array.prototype,u={DOMTokenList:!0,NodeList:!0};t.exports=function(t){var e=t.keys;return t===s||o(s,t)&&e===s.keys||i(u,r(t))?a:e}},function(t,e,n){var r=n(404);t.exports=r},function(t,e,n){n(41),n(63);var r=n(38);t.exports=r(\"Array\").keys},function(t,e){var n=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(n){var r=new Uint8Array(16);t.exports=function(){return n(r),r}}else{var i=new Array(16);t.exports=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),i[e]=t>>>((3&e)<<3)&255;return i}}},function(t,e){function n(t,e){var n=e||0,i=r;return[i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],\"-\",i[t[n++]],i[t[n++]],\"-\",i[t[n++]],i[t[n++]],\"-\",i[t[n++]],i[t[n++]],\"-\",i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]]].join(\"\")}for(var r=[],i=0;i<256;++i)r[i]=(i+256).toString(16).substr(1);t.exports=n},function(t,e,n){\"use strict\";function r(t){function e(t){for(var e=0,n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return r.colors[Math.abs(e)%r.colors.length]}function r(t){function n(){if(n.enabled){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];var o=n,s=Number(new Date),u=s-(a||s);o.diff=u,o.prev=a,o.curr=s,a=s,e[0]=r.coerce(e[0]),\"string\"!=typeof e[0]&&e.unshift(\"%O\");var c=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,function(t,n){if(\"%%\"===t)return t;c++;var i=r.formatters[n];if(\"function\"==typeof i){var a=e[c];t=i.call(o,a),e.splice(c,1),c--}return t}),r.formatArgs.call(o,e);(o.log||r.log).apply(o,e)}}var a;return n.namespace=t,n.enabled=r.enabled(t),n.useColors=r.useColors(),n.color=e(t),n.destroy=i,n.extend=o,\"function\"==typeof r.init&&r.init(n),r.instances.push(n),n}function i(){var t=r.instances.indexOf(this);return-1!==t&&(r.instances.splice(t,1),!0)}function o(t,e){return r(this.namespace+(void 0===e?\":\":e)+t)}function a(t){r.save(t),r.names=[],r.skips=[];var e,n=(\"string\"==typeof t?t:\"\").split(/[\\s,]+/),i=n.length;for(e=0;e<i;e++)n[e]&&(t=n[e].replace(/\\*/g,\".*?\"),\"-\"===t[0]?r.skips.push(new RegExp(\"^\"+t.substr(1)+\"$\")):r.names.push(new RegExp(\"^\"+t+\"$\")));for(e=0;e<r.instances.length;e++){var o=r.instances[e];o.enabled=r.enabled(o.namespace)}}function s(){r.enable(\"\")}function u(t){if(\"*\"===t[t.length-1])return!0;var e,n;for(e=0,n=r.skips.length;e<n;e++)if(r.skips[e].test(t))return!1;for(e=0,n=r.names.length;e<n;e++)if(r.names[e].test(t))return!0;return!1}function c(t){return t instanceof Error?t.stack||t.message:t}return r.debug=r,r.default=r,r.coerce=c,r.disable=s,r.enable=a,r.enabled=u,r.humanize=n(408),Object.keys(t).forEach(function(e){r[e]=t[e]}),r.instances=[],r.names=[],r.skips=[],r.formatters={},r.selectColor=e,r.enable(r.load()),r}t.exports=r},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]);switch((e[2]||\"ms\").toLowerCase()){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*l;case\"weeks\":case\"week\":case\"w\":return n*f;case\"days\":case\"day\":case\"d\":return n*c;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*u;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*s;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*a;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function r(t){var e=Math.abs(t);return e>=c?Math.round(t/c)+\"d\":e>=u?Math.round(t/u)+\"h\":e>=s?Math.round(t/s)+\"m\":e>=a?Math.round(t/a)+\"s\":t+\"ms\"}function i(t){var e=Math.abs(t);return e>=c?o(t,e,c,\"day\"):e>=u?o(t,e,u,\"hour\"):e>=s?o(t,e,s,\"minute\"):e>=a?o(t,e,a,\"second\"):t+\" ms\"}function o(t,e,n,r){var i=e>=1.5*n;return Math.round(t/n)+\" \"+r+(i?\"s\":\"\")}var a=1e3,s=60*a,u=60*s,c=24*u,f=7*c,l=365.25*c;t.exports=function(t,e){e=e||{};var o=typeof t;if(\"string\"===o&&t.length>0)return n(t);if(\"number\"===o&&isFinite(t))return e.long?i(t):r(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))}},function(t,e,n){n(410);var r=n(6);t.exports=r.Object.getPrototypeOf},function(t,e,n){var r=n(0),i=n(2),o=n(34),a=n(99),s=n(155);r({target:\"Object\",stat:!0,forced:i(function(){a(1)}),sham:!s},{getPrototypeOf:function(t){return a(o(t))}})},function(t,e,n){t.exports=n(233)},function(t,e,n){n(413);var r=n(6);t.exports=r.Object.setPrototypeOf},function(t,e,n){n(0)({target:\"Object\",stat:!0},{setPrototypeOf:n(101)})},function(t,e,n){\"use strict\";function r(t){var e,n,r,i,s;if(g(t))return{};var u=(0,o.default)(t).call(t,0,8).toLowerCase(),c=\"lncldglobal.com\";return{push:(0,a.default)(e=\"https://\".concat(u,\".push.\")).call(e,c),stats:(0,a.default)(n=\"https://\".concat(u,\".stats.\")).call(n,c),engine:(0,a.default)(r=\"https://\".concat(u,\".engine.\")).call(r,c),api:(0,a.default)(i=\"https://\".concat(u,\".api.\")).call(i,c),rtm:(0,a.default)(s=\"https://\".concat(u,\".rtm.\")).call(s,c)}}var i=n(1),o=i(n(59)),a=i(n(22)),s=i(n(114)),u=n(69),c=n(420),f=n(30),l=f.isNullOrUndefined,h=n(3),d=h.extend,p=h.isObject,v=h.isEmpty,g=function(t){return\"-MdYXbMMI\"!==(0,o.default)(t).call(t,-9)},m=function(t){return{push:t,stats:t,engine:t,api:t,rtm:t}},y=!1,b=!1;u.init=function(t){if(!p(t))return u.init({appId:t,appKey:arguments.length<=1?void 0:arguments[1],masterKey:arguments.length<=2?void 0:arguments[2]});var e=t.appId,n=t.appKey,i=t.masterKey,o=t.hookKey,a=t.serverURL,s=t.serverURLs,f=void 0===s?a:s,h=t.disableCurrentUser,_=t.production,w=t.realtime;if(b&&console.warn(\"Initializing LeanCloud Storage SDK which has already been initialized. Reinitializing the SDK might cause problems like unexpected cross-app data writing and invalid relations.\"),!e)throw new TypeError(\"appId must be a string\");if(!n)throw new TypeError(\"appKey must be a string\");if(i&&console.warn(\"MasterKey is not supposed to be used at client side.\"),g(e)&&!f&&v(u._config.serverURLs))throw new TypeError(\"serverURL option is required for apps from CN region\");e!==u._config.applicationId?(u._config.masterKey=i,u._config.hookKey=o):(i&&(u._config.masterKey=i),o&&(u._config.hookKey=o)),u._config.applicationId=e,u._config.applicationKey=n,l(_)||u.setProduction(_),void 0!==h&&(u._config.disableCurrentUser=h);var E=y||void 0!==f;if(E||(u._appRouter=new c(u)),u._setServerURLs(d({},r(e),u._config.serverURLs,\"string\"==typeof f?m(f):f),E),w)u._config.realtime=w;else if(u._sharedConfig.liveQueryRealtime){var O=u._config.serverURLs,T=O.api,S=O.rtm;u._config.realtime=new u._sharedConfig.liveQueryRealtime({appId:e,appKey:n,server:{api:T,RTMRouter:S}})}b=!0},u.setProduction=function(t){l(t)?u._config.production=null:u._config.production=t?1:0},u._setServerURLs=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"string\"!=typeof t?d(u._config.serverURLs,t):u._config.serverURLs=m(t),e&&(u._appRouter?u._appRouter.disable():y=!0)},u.setServerURL=function(t){return u._setServerURLs(t)},u.setServerURLs=u.setServerURL,u.keepErrorRawMessage=function(t){u._sharedConfig.keepErrorRawMessage=t},u.setRequestTimeout=function(t){u._config.requestTimeout=t},u.initialize=u.init,[\"applicationId\",\"applicationKey\",\"masterKey\",\"hookKey\"].forEach(function(t){return(0,s.default)(u,t,{get:function(){return u._config[t]},set:function(e){u._config[t]=e}})})},function(t,e,n){var r=n(19),i=n(416),o=Array.prototype;t.exports=function(t){var e=t.slice;return t===o||r(o,t)&&e===o.slice?i:e}},function(t,e,n){n(417);var r=n(38);t.exports=r(\"Array\").slice},function(t,e,n){\"use strict\";var r=n(0),i=n(88),o=n(108),a=n(11),s=n(124),u=n(39),c=n(32),f=n(89),l=n(9),h=n(113),d=n(109),p=h(\"slice\"),v=l(\"species\"),g=Array,m=Math.max;r({target:\"Array\",proto:!0,forced:!p},{slice:function(t,e){var n,r,l,h=c(this),p=u(h),y=s(t,p),b=s(void 0===e?p:e,p);if(i(h)&&(n=h.constructor,o(n)&&(n===g||i(n.prototype))?n=void 0:a(n)&&null===(n=n[v])&&(n=void 0),n===g||void 0===n))return d(h,y,b);for(r=new(void 0===n?g:n)(m(b-y,0)),l=0;y<b;y++,l++)y in h&&f(r,l,h[y]);return r.length=l,r}})},function(t,e,n){n(419);var r=n(6),i=r.Object,o=t.exports=function(t,e,n){return i.defineProperty(t,e,n)};i.defineProperty.sham&&(o.sham=!0)},function(t,e,n){var r=n(0),i=n(14),o=n(23).f;r({target:\"Object\",stat:!0,forced:Object.defineProperty!==o,sham:!i},{defineProperty:o})},function(t,e,n){\"use strict\";function r(t){var e=this;this.AV=t,this.lockedUntil=0,o.getAsync(\"serverURLs\").then(function(t){if(!e.disabled){if(!t)return e.lock(0);var n=t.serverURLs,r=t.lockedUntil;e.AV._setServerURLs(n,!1),e.lockedUntil=r}}).catch(function(){return e.lock(0)})}var i=n(115),o=n(232);r.prototype.disable=function(){this.disabled=!0},r.prototype.lock=function(t){this.lockedUntil=Date.now()+t},r.prototype.refresh=function(){var t=this;if(!(this.disabled||Date.now()<this.lockedUntil)){this.lock(10);return i({method:\"get\",url:\"https://app-router.com/2/route\",query:{appId:this.AV.applicationId}}).then(function(e){if(!t.disabled){var n=e.ttl;if(!n)throw new Error(\"missing ttl\");n*=1e3;var r={push:\"https://\"+e.push_server,stats:\"https://\"+e.stats_server,engine:\"https://\"+e.engine_server,api:\"https://\"+e.api_server};return t.AV._setServerURLs(r,!1),t.lock(n),o.setAsync(\"serverURLs\",{serverURLs:r,lockedUntil:t.lockedUntil},n)}}).catch(function(e){console.warn(\"refresh server URLs failed: \".concat(e.message)),t.lock(600)})}},t.exports=r},function(t,e,n){t.exports=n(422)},function(t,e,n){var r=n(423);n(446),n(447),n(448),n(449),n(450),n(451),n(452),n(453),t.exports=r},function(t,e,n){var r=n(237);t.exports=r},function(t,e,n){n(222),n(63),n(238),n(430),n(431),n(432),n(433),n(242),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445);var r=n(6);t.exports=r.Symbol},function(t,e,n){\"use strict\";var r=n(0),i=n(7),o=n(15),a=n(4),s=n(33),u=n(14),c=n(62),f=n(2),l=n(12),h=n(19),d=n(20),p=n(32),v=n(95),g=n(79),m=n(47),y=n(49),b=n(104),_=n(102),w=n(239),E=n(103),O=n(60),T=n(23),S=n(127),A=n(119),x=n(43),I=n(77),j=n(100),C=n(78),N=n(98),P=n(9),R=n(147),U=n(10),k=n(240),L=n(52),M=n(42),D=n(70).forEach,F=j(\"hidden\"),B=M.set,V=M.getterFor(\"Symbol\"),q=Object.prototype,W=i.Symbol,Y=W&&W.prototype,z=i.TypeError,G=i.QObject,K=O.f,Q=T.f,J=w.f,$=A.f,H=a([].push),Z=I(\"symbols\"),X=I(\"op-symbols\"),tt=I(\"wks\"),et=!G||!G.prototype||!G.prototype.findChild,nt=u&&f(function(){return 7!=y(Q({},\"a\",{get:function(){return Q(this,\"a\",{value:7}).a}})).a})?function(t,e,n){var r=K(q,e);r&&delete q[e],Q(t,e,n),r&&t!==q&&Q(q,e,r)}:Q,rt=function(t,e){var n=Z[t]=y(Y);return B(n,{type:\"Symbol\",tag:t,description:e}),u||(n.description=e),n},it=function(t,e,n){t===q&&it(X,e,n),d(t);var r=v(e);return d(n),l(Z,r)?(n.enumerable?(l(t,F)&&t[F][r]&&(t[F][r]=!1),n=y(n,{enumerable:m(0,!1)})):(l(t,F)||Q(t,F,m(1,{})),t[F][r]=!0),nt(t,r,n)):Q(t,r,n)},ot=function(t,e){d(t);var n=p(e),r=b(n).concat(ft(n));return D(r,function(e){u&&!o(st,n,e)||it(t,e,n[e])}),t},at=function(t,e){return void 0===e?y(t):ot(y(t),e)},st=function(t){var e=v(t),n=o($,this,e);return!(this===q&&l(Z,e)&&!l(X,e))&&(!(n||!l(this,e)||!l(Z,e)||l(this,F)&&this[F][e])||n)},ut=function(t,e){var n=p(t),r=v(e);if(n!==q||!l(Z,r)||l(X,r)){var i=K(n,r);return!i||!l(Z,r)||l(n,F)&&n[F][r]||(i.enumerable=!0),i}},ct=function(t){var e=J(p(t)),n=[];return D(e,function(t){l(Z,t)||l(C,t)||H(n,t)}),n},ft=function(t){var e=t===q,n=J(e?X:p(t)),r=[];return D(n,function(t){!l(Z,t)||e&&!l(q,t)||H(r,Z[t])}),r};c||(W=function(){if(h(Y,this))throw z(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,e=N(t),n=function(t){this===q&&o(n,X,t),l(this,F)&&l(this[F],e)&&(this[F][e]=!1),nt(this,e,m(1,t))};return u&&et&&nt(q,e,{configurable:!0,set:n}),rt(e,t)},Y=W.prototype,x(Y,\"toString\",function(){return V(this).tag}),x(W,\"withoutSetter\",function(t){return rt(N(t),t)}),A.f=st,T.f=it,S.f=ot,O.f=ut,_.f=w.f=ct,E.f=ft,R.f=function(t){return rt(P(t),t)},u&&(Q(Y,\"description\",{configurable:!0,get:function(){return V(this).description}}),s||x(q,\"propertyIsEnumerable\",st,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:W}),D(b(tt),function(t){U(t)}),r({target:\"Symbol\",stat:!0,forced:!c},{useSetter:function(){et=!0},useSimple:function(){et=!1}}),r({target:\"Object\",stat:!0,forced:!c,sham:!u},{create:at,defineProperty:it,defineProperties:ot,getOwnPropertyDescriptor:ut}),r({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:ct}),k(),L(W,\"Symbol\"),C[F]=!0},function(t,e,n){var r=n(124),i=n(39),o=n(89),a=Array,s=Math.max;t.exports=function(t,e,n){for(var u=i(t),c=r(e,u),f=r(void 0===n?u:n,u),l=a(s(f-c,0)),h=0;c<f;c++,h++)o(l,h,t[c]);return l.length=h,l}},function(t,e,n){var r=n(0),i=n(18),o=n(12),a=n(79),s=n(77),u=n(241),c=s(\"string-to-symbol-registry\"),f=s(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!u},{for:function(t){var e=a(t);if(o(c,e))return c[e];var n=i(\"Symbol\")(e);return c[e]=n,f[n]=e,n}})},function(t,e,n){var r=n(0),i=n(12),o=n(96),a=n(76),s=n(77),u=n(241),c=s(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!u},{keyFor:function(t){if(!o(t))throw TypeError(a(t)+\" is not a symbol\");if(i(c,t))return c[t]}})},function(t,e,n){var r=n(0),i=n(62),o=n(2),a=n(103),s=n(34);r({target:\"Object\",stat:!0,forced:!i||o(function(){a.f(1)})},{getOwnPropertySymbols:function(t){var e=a.f;return e?e(s(t)):[]}})},function(t,e,n){n(10)(\"asyncIterator\")},function(t,e){},function(t,e,n){n(10)(\"hasInstance\")},function(t,e,n){n(10)(\"isConcatSpreadable\")},function(t,e,n){n(10)(\"match\")},function(t,e,n){n(10)(\"matchAll\")},function(t,e,n){n(10)(\"replace\")},function(t,e,n){n(10)(\"search\")},function(t,e,n){n(10)(\"species\")},function(t,e,n){n(10)(\"split\")},function(t,e,n){var r=n(10),i=n(240);r(\"toPrimitive\"),i()},function(t,e,n){var r=n(18),i=n(10),o=n(52);i(\"toStringTag\"),o(r(\"Symbol\"),\"Symbol\")},function(t,e,n){n(10)(\"unscopables\")},function(t,e,n){var r=n(7);n(52)(r.JSON,\"JSON\",!0)},function(t,e){},function(t,e){},function(t,e,n){n(10)(\"asyncDispose\")},function(t,e,n){n(10)(\"dispose\")},function(t,e,n){n(10)(\"matcher\")},function(t,e,n){n(10)(\"metadataKey\")},function(t,e,n){n(10)(\"observable\")},function(t,e,n){n(10)(\"metadata\")},function(t,e,n){n(10)(\"patternMatch\")},function(t,e,n){n(10)(\"replaceAll\")},function(t,e,n){t.exports=n(455)},function(t,e,n){t.exports=n(456)},function(t,e,n){var r=n(457);t.exports=r},function(t,e,n){var r=n(458);t.exports=r},function(t,e,n){var r=n(459);n(44),t.exports=r},function(t,e,n){n(41),n(63),n(65),n(242);var r=n(147);t.exports=r.f(\"iterator\")},function(t,e,n){var r=n(461);t.exports=r},function(t,e,n){var r=n(19),i=n(462),o=Array.prototype;t.exports=function(t){var e=t.filter;return t===o||r(o,t)&&e===o.filter?i:e}},function(t,e,n){n(463);var r=n(38);t.exports=r(\"Array\").filter},function(t,e,n){\"use strict\";var r=n(0),i=n(70).filter;r({target:\"Array\",proto:!0,forced:!n(113)(\"filter\")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){\"use strict\";var r=n(1),i=r(n(59)),o=r(n(57)),a=r(n(22)),s=n(3);t.exports=function(t){var e=/\\s+/,n=(0,i.default)(Array.prototype);t.Events={on:function(t,n,r){var i,o,a,s,u;if(!n)return this;for(t=t.split(e),i=this._callbacks||(this._callbacks={}),o=t.shift();o;)u=i[o],a=u?u.tail:{},a.next=s={},a.context=r,a.callback=n,i[o]={tail:s,next:u?u.next:a},o=t.shift();return this},off:function(t,n,r){var i,a,u,c,f,l;if(a=this._callbacks){if(!(t||n||r))return delete this._callbacks,this;for(t=t?t.split(e):(0,o.default)(s).call(s,a),i=t.shift();i;)if(u=a[i],delete a[i],u&&(n||r)){for(c=u.tail,u=u.next;u!==c;)f=u.callback,l=u.context,(n&&f!==n||r&&l!==r)&&this.on(i,f,l),u=u.next;i=t.shift()}return this}},trigger:function(t){var r,i,o,s,u,c,f;if(!(o=this._callbacks))return this;for(c=o.all,t=t.split(e),f=n.call(arguments,1),r=t.shift();r;){if(i=o[r])for(s=i.tail;(i=i.next)!==s;)i.callback.apply(i.context||this,f);if(i=c){var l;for(s=i.tail,u=(0,a.default)(l=[r]).call(l,f);(i=i.next)!==s;)i.callback.apply(i.context||this,u)}r=t.shift()}return this}},t.Events.bind=t.Events.on,t.Events.unbind=t.Events.off}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3);t.exports=function(t){t.GeoPoint=function(e,n){o.isArray(e)?(t.GeoPoint._validate(e[0],e[1]),this.latitude=e[0],this.longitude=e[1]):o.isObject(e)?(t.GeoPoint._validate(e.latitude,e.longitude),this.latitude=e.latitude,this.longitude=e.longitude):o.isNumber(e)&&o.isNumber(n)?(t.GeoPoint._validate(e,n),this.latitude=e,this.longitude=n):(this.latitude=0,this.longitude=0);var r=this;this.__defineGetter__&&this.__defineSetter__&&(this._latitude=this.latitude,this._longitude=this.longitude,this.__defineGetter__(\"latitude\",function(){return r._latitude}),this.__defineGetter__(\"longitude\",function(){return r._longitude}),this.__defineSetter__(\"latitude\",function(e){t.GeoPoint._validate(e,r.longitude),r._latitude=e}),this.__defineSetter__(\"longitude\",function(e){t.GeoPoint._validate(r.latitude,e),r._longitude=e}))},t.GeoPoint._validate=function(t,e){if(t<-90)throw new Error(\"AV.GeoPoint latitude \"+t+\" < -90.0.\");if(t>90)throw new Error(\"AV.GeoPoint latitude \"+t+\" > 90.0.\");if(e<-180)throw new Error(\"AV.GeoPoint longitude \"+e+\" < -180.0.\");if(e>180)throw new Error(\"AV.GeoPoint longitude \"+e+\" > 180.0.\")},t.GeoPoint.current=function(){return new i.default(function(e,n){navigator.geolocation.getCurrentPosition(function(n){e(new t.GeoPoint({latitude:n.coords.latitude,longitude:n.coords.longitude}))},n)})},o.extend(t.GeoPoint.prototype,{toJSON:function(){return t.GeoPoint._validate(this.latitude,this.longitude),{__type:\"GeoPoint\",latitude:this.latitude,longitude:this.longitude}},radiansTo:function(t){var e=Math.PI/180,n=this.latitude*e,r=this.longitude*e,i=t.latitude*e,o=t.longitude*e,a=n-i,s=r-o,u=Math.sin(a/2),c=Math.sin(s/2),f=u*u+Math.cos(n)*Math.cos(i)*c*c;return f=Math.min(1,f),2*Math.asin(Math.sqrt(f))},kilometersTo:function(t){return 6371*this.radiansTo(t)},milesTo:function(t){return 3958.8*this.radiansTo(t)}})}},function(t,e,n){\"use strict\";var r=n(3);t.exports=function(t){t.ACL=function(e){var n=this;if(n.permissionsById={},r.isObject(e))if(e instanceof t.User)n.setReadAccess(e,!0),n.setWriteAccess(e,!0);else{if(r.isFunction(e))throw new Error(\"AV.ACL() called with a function.  Did you forget ()?\");t._objectEach(e,function(e,i){if(!r.isString(i))throw new Error(\"Tried to create an ACL with an invalid userId.\");n.permissionsById[i]={},t._objectEach(e,function(t,e){if(\"read\"!==e&&\"write\"!==e)throw new Error(\"Tried to create an ACL with an invalid permission type.\");if(!r.isBoolean(t))throw new Error(\"Tried to create an ACL with an invalid permission value.\");n.permissionsById[i][e]=t})})}},t.ACL.prototype.toJSON=function(){return r.clone(this.permissionsById)},t.ACL.prototype._setAccess=function(e,n,i){if(n instanceof t.User?n=n.id:n instanceof t.Role&&(n=\"role:\"+n.getName()),!r.isString(n))throw new Error(\"userId must be a string.\");if(!r.isBoolean(i))throw new Error(\"allowed must be either true or false.\");var o=this.permissionsById[n];if(!o){if(!i)return;o={},this.permissionsById[n]=o}i?this.permissionsById[n][e]=!0:(delete o[e],r.isEmpty(o)&&delete this.permissionsById[n])},t.ACL.prototype._getAccess=function(e,n){n instanceof t.User?n=n.id:n instanceof t.Role&&(n=\"role:\"+n.getName());var r=this.permissionsById[n];return!!r&&!!r[e]},t.ACL.prototype.setReadAccess=function(t,e){this._setAccess(\"read\",t,e)},t.ACL.prototype.getReadAccess=function(t){return this._getAccess(\"read\",t)},t.ACL.prototype.setWriteAccess=function(t,e){this._setAccess(\"write\",t,e)},t.ACL.prototype.getWriteAccess=function(t){return this._getAccess(\"write\",t)},t.ACL.prototype.setPublicReadAccess=function(t){this.setReadAccess(\"*\",t)},t.ACL.prototype.getPublicReadAccess=function(){return this.getReadAccess(\"*\")},t.ACL.prototype.setPublicWriteAccess=function(t){this.setWriteAccess(\"*\",t)},t.ACL.prototype.getPublicWriteAccess=function(){return this.getWriteAccess(\"*\")},t.ACL.prototype.getRoleReadAccess=function(e){if(e instanceof t.Role&&(e=e.getName()),r.isString(e))return this.getReadAccess(\"role:\"+e);throw new Error(\"role must be a AV.Role or a String\")},t.ACL.prototype.getRoleWriteAccess=function(e){if(e instanceof t.Role&&(e=e.getName()),r.isString(e))return this.getWriteAccess(\"role:\"+e);throw new Error(\"role must be a AV.Role or a String\")},t.ACL.prototype.setRoleReadAccess=function(e,n){if(e instanceof t.Role&&(e=e.getName()),r.isString(e))return void this.setReadAccess(\"role:\"+e,n);throw new Error(\"role must be a AV.Role or a String\")},t.ACL.prototype.setRoleWriteAccess=function(e,n){if(e instanceof t.Role&&(e=e.getName()),r.isString(e))return void this.setWriteAccess(\"role:\"+e,n);throw new Error(\"role must be a AV.Role or a String\")}}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(22)),o=r(n(92)),a=r(n(90)),s=r(n(35)),u=n(3);t.exports=function(t){t.Op=function(){this._initialize.apply(this,arguments)},u.extend(t.Op.prototype,{_initialize:function(){}}),u.extend(t.Op,{_extend:t._extend,_opDecoderMap:{},_registerDecoder:function(e,n){t.Op._opDecoderMap[e]=n},_decode:function(e){var n=t.Op._opDecoderMap[e.__op];return n?n(e):void 0}}),t.Op._registerDecoder(\"Batch\",function(e){var n=null;return t._arrayEach(e.ops,function(e){e=t.Op._decode(e),n=e._mergeWithPrevious(n)}),n}),t.Op.Set=t.Op._extend({_initialize:function(t){this._value=t},value:function(){return this._value},toJSON:function(){return t._encode(this.value())},_mergeWithPrevious:function(t){return this},_estimate:function(t){return this.value()}}),t.Op._UNSET={},t.Op.Unset=t.Op._extend({toJSON:function(){return{__op:\"Delete\"}},_mergeWithPrevious:function(t){return this},_estimate:function(e){return t.Op._UNSET}}),t.Op._registerDecoder(\"Delete\",function(e){return new t.Op.Unset}),t.Op.Increment=t.Op._extend({_initialize:function(t){this._amount=t},amount:function(){return this._amount},toJSON:function(){return{__op:\"Increment\",amount:this._amount}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(this.amount());if(e instanceof t.Op.Set)return new t.Op.Set(e.value()+this.amount());if(e instanceof t.Op.Increment)return new t.Op.Increment(this.amount()+e.amount());throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(t){return t?t+this.amount():this.amount()}}),t.Op._registerDecoder(\"Increment\",function(e){return new t.Op.Increment(e.amount)}),t.Op.BitAnd=t.Op._extend({_initialize:function(t){this._value=t},value:function(){return this._value},toJSON:function(){return{__op:\"BitAnd\",value:this.value()}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(0);if(e instanceof t.Op.Set)return new t.Op.Set(e.value()&this.value());throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(t){return t&this.value()}}),t.Op._registerDecoder(\"BitAnd\",function(e){return new t.Op.BitAnd(e.value)}),t.Op.BitOr=t.Op._extend({_initialize:function(t){this._value=t},value:function(){return this._value},toJSON:function(){return{__op:\"BitOr\",value:this.value()}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(this.value());if(e instanceof t.Op.Set)return new t.Op.Set(e.value()|this.value());throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(t){return t|this.value()}}),t.Op._registerDecoder(\"BitOr\",function(e){return new t.Op.BitOr(e.value)}),t.Op.BitXor=t.Op._extend({_initialize:function(t){this._value=t},value:function(){return this._value},toJSON:function(){return{__op:\"BitXor\",value:this.value()}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(this.value());if(e instanceof t.Op.Set)return new t.Op.Set(e.value()^this.value());throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(t){return t^this.value()}}),t.Op._registerDecoder(\"BitXor\",function(e){return new t.Op.BitXor(e.value)}),t.Op.Add=t.Op._extend({_initialize:function(t){this._objects=t},objects:function(){return this._objects},toJSON:function(){return{__op:\"Add\",objects:t._encode(this.objects())}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(this.objects());if(e instanceof t.Op.Set)return new t.Op.Set(this._estimate(e.value()));if(e instanceof t.Op.Add){var n;return new t.Op.Add((0,i.default)(n=e.objects()).call(n,this.objects()))}throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(t){return t?(0,i.default)(t).call(t,this.objects()):u.clone(this.objects())}}),t.Op._registerDecoder(\"Add\",function(e){return new t.Op.Add(t._decode(e.objects))}),t.Op.AddUnique=t.Op._extend({_initialize:function(t){this._objects=u.uniq(t)},objects:function(){return this._objects},toJSON:function(){return{__op:\"AddUnique\",objects:t._encode(this.objects())}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return new t.Op.Set(this.objects());if(e instanceof t.Op.Set)return new t.Op.Set(this._estimate(e.value()));if(e instanceof t.Op.AddUnique)return new t.Op.AddUnique(this._estimate(e.objects()));throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(e){if(e){var n=u.clone(e);return t._arrayEach(this.objects(),function(e){if(e instanceof t.Object&&e.id){var r=(0,o.default)(u).call(u,n,function(n){return n instanceof t.Object&&n.id===e.id});if(r){var i=(0,a.default)(u).call(u,n,r);n[i]=e}else n.push(e)}else u.contains(n,e)||n.push(e)}),n}return u.clone(this.objects())}}),t.Op._registerDecoder(\"AddUnique\",function(e){return new t.Op.AddUnique(t._decode(e.objects))}),t.Op.Remove=t.Op._extend({_initialize:function(t){this._objects=u.uniq(t)},objects:function(){return this._objects},toJSON:function(){return{__op:\"Remove\",objects:t._encode(this.objects())}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)return e;if(e instanceof t.Op.Set)return new t.Op.Set(this._estimate(e.value()));if(e instanceof t.Op.Remove)return new t.Op.Remove(u.union(e.objects(),this.objects()));throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(e){if(e){var n=u.difference(e,this.objects());return t._arrayEach(this.objects(),function(e){e instanceof t.Object&&e.id&&(n=u.reject(n,function(n){return n instanceof t.Object&&n.id===e.id}))}),n}return[]}}),t.Op._registerDecoder(\"Remove\",function(e){return new t.Op.Remove(t._decode(e.objects))}),t.Op.Relation=t.Op._extend({_initialize:function(e,n){this._targetClassName=null;var r=this,i=function(e){if(e instanceof t.Object){if(!e.id)throw new Error(\"You can't add an unsaved AV.Object to a relation.\");if(r._targetClassName||(r._targetClassName=e.className),r._targetClassName!==e.className)throw new Error(\"Tried to create a AV.Relation with 2 different types: \"+r._targetClassName+\" and \"+e.className+\".\");return e.id}return e};this.relationsToAdd=u.uniq((0,s.default)(u).call(u,e,i)),this.relationsToRemove=u.uniq((0,s.default)(u).call(u,n,i))},added:function(){var e=this;return(0,s.default)(u).call(u,this.relationsToAdd,function(n){var r=t.Object._create(e._targetClassName);return r.id=n,r})},removed:function(){var e=this;return(0,s.default)(u).call(u,this.relationsToRemove,function(n){var r=t.Object._create(e._targetClassName);return r.id=n,r})},toJSON:function(){var t=null,e=null,n=this,r=function(t){return{__type:\"Pointer\",className:n._targetClassName,objectId:t}},i=null;return this.relationsToAdd.length>0&&(i=(0,s.default)(u).call(u,this.relationsToAdd,r),t={__op:\"AddRelation\",objects:i}),this.relationsToRemove.length>0&&(i=(0,s.default)(u).call(u,this.relationsToRemove,r),e={__op:\"RemoveRelation\",objects:i}),t&&e?{__op:\"Batch\",ops:[t,e]}:t||e||{}},_mergeWithPrevious:function(e){if(e){if(e instanceof t.Op.Unset)throw new Error(\"You can't modify a relation after deleting it.\");if(e instanceof t.Op.Relation){if(e._targetClassName&&e._targetClassName!==this._targetClassName)throw new Error(\"Related object must be of class \"+e._targetClassName+\", but \"+this._targetClassName+\" was passed in.\");var n=u.union(u.difference(e.relationsToAdd,this.relationsToRemove),this.relationsToAdd),r=u.union(u.difference(e.relationsToRemove,this.relationsToAdd),this.relationsToRemove),i=new t.Op.Relation(n,r);return i._targetClassName=this._targetClassName,i}throw new Error(\"Op is invalid after previous op.\")}return this},_estimate:function(e,n,r){if(e){if(e instanceof t.Relation){if(this._targetClassName)if(e.targetClassName){if(e.targetClassName!==this._targetClassName)throw new Error(\"Related object must be a \"+e.targetClassName+\", but a \"+this._targetClassName+\" was passed in.\")}else e.targetClassName=this._targetClassName;return e}throw new Error(\"Op is invalid after previous op.\")}new t.Relation(n,r).targetClassName=this._targetClassName}}),t.Op._registerDecoder(\"AddRelation\",function(e){return new t.Op.Relation(t._decode(e.objects),[])}),t.Op._registerDecoder(\"RemoveRelation\",function(e){return new t.Op.Relation([],t._decode(e.objects))})}},function(t,e,n){var r=n(469);t.exports=r},function(t,e,n){var r=n(19),i=n(470),o=Array.prototype;t.exports=function(t){var e=t.find;return t===o||r(o,t)&&e===o.find?i:e}},function(t,e,n){n(471);var r=n(38);t.exports=r(\"Array\").find},function(t,e,n){\"use strict\";var r=n(0),i=n(70).find,o=n(163),a=!0;\"find\"in[]&&Array(1).find(function(){a=!1}),r({target:\"Array\",proto:!0,forced:a},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(\"find\")},function(t,e,n){\"use strict\";var r=n(3);t.exports=function(t){t.Relation=function(t,e){if(!r.isString(e))throw new TypeError(\"key must be a string\");this.parent=t,this.key=e,this.targetClassName=null},t.Relation.reverseQuery=function(e,n,r){var i=new t.Query(e);return i.equalTo(n,r._toPointer()),i},r.extend(t.Relation.prototype,{_ensureParentAndKey:function(t,e){if(this.parent=this.parent||t,this.key=this.key||e,this.parent!==t)throw new Error(\"Internal Error. Relation retrieved from two different Objects.\");if(this.key!==e)throw new Error(\"Internal Error. Relation retrieved from two different keys.\")},add:function(e){r.isArray(e)||(e=[e]);var n=new t.Op.Relation(e,[]);this.parent.set(this.key,n),this.targetClassName=n._targetClassName},remove:function(e){r.isArray(e)||(e=[e]);var n=new t.Op.Relation([],e);this.parent.set(this.key,n),this.targetClassName=n._targetClassName},toJSON:function(){return{__type:\"Relation\",className:this.targetClassName}},query:function(){var e,n;return this.targetClassName?(e=t.Object._getSubclass(this.targetClassName),n=new t.Query(e)):(e=t.Object._getSubclass(this.parent.className),n=new t.Query(e),n._defaultParams.redirectClassNameForKey=this.key),n._addCondition(\"$relatedTo\",\"object\",this.parent._toPointer()),n._addCondition(\"$relatedTo\",\"key\",this.key),n}})}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3),a=n(474),s=n(475),u=n(521),c=n(46),f=n(27),l=f.request,h=f._request,d=n(30),p=d.tap,v=d.transformFetchOptions,g=n(58)(\"leancloud:file\"),m=n(525);t.exports=function(t){var e=function(t){return o.isString(t)?t.match(/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/)[4]:\"\"},n=function(t){if(t<26)return String.fromCharCode(65+t);if(t<52)return String.fromCharCode(t-26+97);if(t<62)return String.fromCharCode(t-52+48);if(62===t)return\"+\";if(63===t)return\"/\";throw new Error(\"Tried to encode large digit \"+t+\" in base64.\")},r=function(t){var e=[];return e.length=Math.ceil(t.length/3),o.times(e.length,function(r){var i=t[3*r],o=t[3*r+1]||0,a=t[3*r+2]||0,s=3*r+1<t.length,u=3*r+2<t.length;e[r]=[n(i>>2&63),n(i<<4&48|o>>4&15),s?n(o<<2&60|a>>6&3):\"=\",u?n(63&a):\"=\"].join(\"\")}),e.join(\"\")};t.File=function(n,i,a){if(this.attributes={name:n,url:\"\",metaData:{},base64:\"\"},o.isString(i))throw new TypeError(\"Creating an AV.File from a String is not yet supported.\");o.isArray(i)&&(this.attributes.metaData.size=i.length,i={base64:r(i)}),this._extName=\"\",this._data=i,this._uploadHeaders={},i&&i.blob&&\"string\"==typeof i.blob.uri&&(this._extName=e(i.blob.uri)),\"undefined\"!=typeof Blob&&i instanceof Blob&&(i.size&&(this.attributes.metaData.size=i.size),i.name&&(this._extName=e(i.name)));var s;if(i&&i.owner)s=i.owner;else if(!t._config.disableCurrentUser)try{s=t.User.current()}catch(t){if(\"SYNC_API_NOT_AVAILABLE\"!==t.code)throw t}this.attributes.metaData.owner=s?s.id:\"unknown\",this.set(\"mime_type\",a)},t.File.withURL=function(e,n,r,i){if(!e||!n)throw new Error(\"Please provide file name and url\");var o=new t.File(e,null,i);if(r)for(var a in r)o.attributes.metaData[a]||(o.attributes.metaData[a]=r[a]);return o.attributes.url=n,o.attributes.metaData.__source=\"external\",o.attributes.metaData.size=0,o},t.File.createWithoutData=function(e){if(!e)throw new TypeError(\"The objectId must be provided\");var n=new t.File;return n.id=e,n},t.File.censor=function(e){if(!t._config.masterKey)throw new Error(\"Cannot censor a file without masterKey\");return l({method:\"POST\",path:\"/files/\".concat(e,\"/censor\"),authOptions:{useMasterKey:!0}}).then(function(t){return t.censorResult})},o.extend(t.File.prototype,{className:\"_File\",_toFullJSON:function(e){var n=this,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=o.clone(this.attributes);return t._objectEach(i,function(n,o){i[o]=t._encode(n,e,void 0,r)}),t._objectEach(this._operations,function(t,e){i[e]=t}),o.has(this,\"id\")&&(i.objectId=this.id),[\"createdAt\",\"updatedAt\"].forEach(function(t){if(o.has(n,t)){var e=n[t];i[t]=o.isDate(e)?e.toJSON():e}}),r&&(i.__type=\"File\"),i},toFullJSON:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this._toFullJSON(t)},toJSON:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[this];return this._toFullJSON(n,!1)},_toPointer:function(){return{__type:\"Pointer\",className:this.className,objectId:this.id}},getACL:function(){return this._acl},setACL:function(e){return e instanceof t.ACL?(this._acl=e,this):new c(c.OTHER_CAUSE,\"ACL must be a AV.ACL.\")},name:function(){return this.get(\"name\")},url:function(){return this.get(\"url\")},get:function(t){switch(t){case\"objectId\":return this.id;case\"url\":case\"name\":case\"mime_type\":case\"metaData\":case\"createdAt\":case\"updatedAt\":return this.attributes[t];default:return this.attributes.metaData[t]}},set:function(){for(var t=this,e=function(e,n){switch(e){case\"name\":case\"url\":case\"mime_type\":case\"base64\":case\"metaData\":t.attributes[e]=n;break;default:t.attributes.metaData[e]=n}},n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];switch(r.length){case 1:for(var o in r[0])e(o,r[0][o]);break;case 2:e(r[0],r[1])}return this},setUploadHeader:function(t,e){return this._uploadHeaders[t]=e,this},metaData:function(t,e){return t&&e?(this.attributes.metaData[t]=e,this):t&&!e?this.attributes.metaData[t]:this.attributes.metaData},thumbnailURL:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"png\",o=this.attributes.url;if(!o)throw new Error(\"Invalid url.\");if(!t||!e||t<=0||e<=0)throw new Error(\"Invalid width or height value.\");if(n<=0||n>100)throw new Error(\"Invalid quality value.\");return o+\"?imageView/\"+(r?2:1)+\"/w/\"+t+\"/h/\"+e+\"/q/\"+n+\"/format/\"+i},size:function(){return this.metaData().size},ownerId:function(){return this.metaData().owner},destroy:function(t){return this.id?h(\"files\",null,this.id,\"DELETE\",null,t):i.default.reject(new Error(\"The file id does not eixst.\"))},_fileToken:function(t,n){var r=this.attributes.name,i=e(r);!i&&this._extName&&(r+=this._extName,i=this._extName);var o={name:r,keep_file_name:n.keepFileName,key:n.key,ACL:this._acl,mime_type:t,metaData:this.attributes.metaData};return h(\"fileTokens\",null,null,\"POST\",o,n)},save:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.id)throw new Error(\"File is already saved.\");if(!this._previousSave)if(this._data){var n=this.get(\"mime_type\");this._previousSave=this._fileToken(n,e).then(function(r){return r.mime_type&&(n=r.mime_type,t.set(\"mime_type\",n)),t._token=r.token,i.default.resolve().then(function(){var e=t._data;if(e&&e.base64)return m(e.base64,n);if(e&&e.blob)return!e.blob.type&&n&&(e.blob.type=n),e.blob.name||(e.blob.name=t.get(\"name\")),e.blob;if(\"undefined\"!=typeof Blob&&e instanceof Blob)return e;throw new TypeError(\"malformed file data\")}).then(function(n){var i=o.extend({},e);switch(e.onprogress&&(i.onprogress=function(t){if(\"download\"!==t.direction)return e.onprogress(t)}),r.provider){case\"s3\":return u(r,n,t,i);case\"qcloud\":return a(r,n,t,i);case\"qiniu\":default:return s(r,n,t,i)}}).then(p(function(){return t._callback(!0)}),function(e){throw t._callback(!1),e})})}else if(this.attributes.url&&\"external\"===this.attributes.metaData.__source){var r={name:this.attributes.name,ACL:this._acl,metaData:this.attributes.metaData,mime_type:this.mimeType,url:this.attributes.url};this._previousSave=h(\"files\",null,null,\"post\",r,e).then(function(e){return t.id=e.objectId,t})}return this._previousSave},_callback:function(t){h(\"fileCallback\",null,null,\"post\",{token:this._token,result:t}).catch(g),delete this._token,delete this._data},fetch:function(t,e){if(!this.id)throw new Error(\"Cannot fetch unsaved file\");return h(\"files\",null,this.id,\"GET\",v(t),e).then(this._finishFetch.bind(this))},_finishFetch:function(e){var n=t.Object.prototype.parse(e);return n.attributes={name:n.name,url:n.url,mime_type:n.mime_type,bucket:n.bucket},n.attributes.metaData=n.metaData||{},n.id=n.objectId,delete n.objectId,delete n.metaData,delete n.url,delete n.name,delete n.mime_type,delete n.bucket,o.extend(this,n),this},censor:function(){if(!this.id)throw new Error(\"Cannot censor an unsaved file\");return t.File.censor(this.id)}})}},function(t,e,n){\"use strict\";var r=n(71),i=r.getAdapter,o=n(58)(\"cos\");t.exports=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.upload_url+\"?sign=\"+encodeURIComponent(t.token),s={field:\"fileContent\",data:e,name:n.attributes.name},u={headers:n._uploadHeaders,data:{op:\"upload\"},onprogress:r.onprogress};return o(\"url: %s, file: %o, options: %o\",a,s,u),i(\"upload\")(a,s,u).then(function(e){if(o(e.status,e.data),!1===e.ok){var r=new Error(e.status);throw r.response=e,r}return n.attributes.url=t.url,n._bucket=t.bucket,n.id=t.objectId,n},function(t){var e=t.response;throw e&&(o(e.status,e.data),t.statusCode=e.status,t.response=e.data),t})}},function(t,e,n){\"use strict\";function r(t){var e=i();return function(){var n,r=(0,b.default)(t);if(e){var i=(0,b.default)(this).constructor;n=v(r,arguments,i)}else n=r.apply(this,arguments);return(0,y.default)(this,n)}}function i(){if(\"undefined\"==typeof Reflect||!v)return!1;if(v.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(v(Boolean,[],function(){})),!0}catch(t){return!1}}function o(t,e){var n=void 0!==d&&p(t)||t[\"@@iterator\"];if(!n){if(Array.isArray(t)||(n=a(t))||e&&t&&\"number\"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,u=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){u=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw o}}}}function a(t,e){var n;if(t){if(\"string\"==typeof t)return s(t,e);var r=l(n=Object.prototype.toString.call(t)).call(n,8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?h(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(t,e):void 0}}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function u(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.token,o=t.upload_url||\"https://upload.qiniup.com\",a={field:\"file\",data:e,name:n.attributes.name},s={headers:n._uploadHeaders,data:{name:n.attributes.name,key:t.key,token:i},onprogress:r.onprogress};return I(\"url: %s, file: %o, options: %o\",o,a,s),x(\"upload\")(o,a,s).then(function(e){if(I(e.status,e.data),!1===e.ok){var r=e.status;e.data&&(r=e.data.error?e.data.error:(0,E.default)(e.data));var i=new Error(r);throw i.response=e,i}return n.attributes.url=t.url,n._bucket=t.bucket,n.id=t.objectId,n},function(t){var e=t.response;throw e&&(I(e.status,e.data),t.statusCode=e.status,t.response=e.data),t})}function c(t){var e,n=C(unescape(encodeURIComponent(t))),r=\"\",i=o(n);try{for(i.s();!(e=i.n()).done;){var a=e.value;switch(a){case\"+\":r+=\"-\";break;case\"/\":r+=\"_\";break;default:r+=a}}}catch(t){i.e(t)}finally{i.f()}return r}function f(t){return\"undefined\"!=typeof Blob&&t instanceof Blob}var l=n(59),h=n(245),d=n(247),p=n(248),v=n(485),g=n(1),m=g(n(489)),y=g(n(511)),b=g(n(513)),_=g(n(518)),w=g(n(519)),E=g(n(36)),O=g(n(22)),T=g(n(13)),S=g(n(59)),A=n(71),x=A.getAdapter,I=n(58)(\"leancloud:qiniu\"),j=n(115),C=n(520),N=16777216,P=function(){function t(e,n,r,i){var o,a,s=this;(0,_.default)(this,t),this.uploadInfo=e,this.data=n,this.file=r,this.size=void 0,this.offset=0,this.uploadedChunks=0;var u=c(e.key),f=e.upload_url||\"https://upload.qiniup.com\";this.baseURL=(0,O.default)(o=(0,O.default)(a=\"\".concat(f,\"/buckets/\")).call(a,e.bucket,\"/objects/\")).call(o,u,\"/uploads\"),this.upToken=\"UpToken \"+e.token,this.uploaded=0,i&&i.onprogress&&(this.onProgress=function(t){var e=t.loaded;(e+=s.uploadedChunks*N)<=s.uploaded||(s.size?i.onprogress({loaded:e,total:s.size,percent:e/s.size*100}):i.onprogress({loaded:e}),s.uploaded=e)})}return(0,w.default)(t,[{key:\"getUploadId\",value:function(){return j({method:\"POST\",url:this.baseURL,headers:{Authorization:this.upToken}}).then(function(t){return t.uploadId})}},{key:\"getChunk\",value:function(){throw new Error(\"Not implemented\")}},{key:\"uploadPart\",value:function(t,e,n){var r,i;return j({method:\"PUT\",url:(0,O.default)(r=(0,O.default)(i=\"\".concat(this.baseURL,\"/\")).call(i,t,\"/\")).call(r,e),headers:{Authorization:this.upToken},data:n,onprogress:this.onProgress}).then(function(t){var n=t.etag;return{partNumber:e,etag:n}})}},{key:\"stopUpload\",value:function(t){var e;return j({method:\"DELETE\",url:(0,O.default)(e=\"\".concat(this.baseURL,\"/\")).call(e,t),headers:{Authorization:this.upToken}})}},{key:\"upload\",value:function(){var t=this,e=[];return this.getUploadId().then(function(n){return function r(){return T.default.resolve(t.getChunk()).then(function(i){if(i){var o=e.length+1;return t.uploadPart(n,o,i).then(function(n){return e.push(n),t.uploadedChunks++,r()})}}).catch(function(e){return t.stopUpload(n).then(function(){return T.default.reject(e)})})}().then(function(){var r;return j({method:\"POST\",url:(0,O.default)(r=\"\".concat(t.baseURL,\"/\")).call(r,n),headers:{Authorization:t.upToken},data:{parts:e,fname:t.file.attributes.name,mimeType:t.file.attributes.mime_type}})})}).then(function(){return t.file.attributes.url=t.uploadInfo.url,t.file._bucket=t.uploadInfo.bucket,t.file.id=t.uploadInfo.objectId,t.file})}}]),t}(),R=function(t){function e(t,r,i,o){var a;return(0,_.default)(this,e),a=n.call(this,t,r,i,o),a.size=r.size,a}(0,m.default)(e,t);var n=r(e);return(0,w.default)(e,[{key:\"getChunk\",value:function(){var t;if(this.offset>=this.size)return null;var e=(0,S.default)(t=this.data).call(t,this.offset,this.offset+N);return this.offset+=e.size,e}}]),e}(P);t.exports=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return f(e)&&e.size>=67108864?new R(t,e,n,r).upload():u(t,e,n,r)}},function(t,e,n){n(65),n(477);var r=n(6);t.exports=r.Array.from},function(t,e,n){var r=n(0),i=n(478);r({target:\"Array\",stat:!0,forced:!n(172)(function(t){Array.from(t)})},{from:i})},function(t,e,n){\"use strict\";var r=n(48),i=n(15),o=n(34),a=n(479),s=n(160),u=n(108),c=n(39),f=n(89),l=n(161),h=n(105),d=Array;t.exports=function(t){var e=o(t),n=u(this),p=arguments.length,v=p>1?arguments[1]:void 0,g=void 0!==v;g&&(v=r(v,p>2?arguments[2]:void 0));var m,y,b,_,w,E,O=h(e),T=0;if(!O||this===d&&s(O))for(m=c(e),y=n?new this(m):d(m);m>T;T++)E=g?v(e[T],T):e[T],f(y,T,E);else for(_=l(e,O),w=_.next,y=n?new this:[];!(b=i(w,_)).done;T++)E=g?a(_,v,[b.value,T],!0):b.value,f(y,T,E);return y.length=T,y}},function(t,e,n){var r=n(20),i=n(162);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){i(t,\"throw\",e)}}},function(t,e,n){t.exports=n(481)},function(t,e,n){var r=n(482);t.exports=r},function(t,e,n){var r=n(483);t.exports=r},function(t,e,n){var r=n(484);n(44),t.exports=r},function(t,e,n){n(41),n(65);var r=n(105);t.exports=r},function(t,e,n){t.exports=n(486)},function(t,e,n){var r=n(487);t.exports=r},function(t,e,n){n(488);var r=n(6);t.exports=r.Reflect.construct},function(t,e,n){var r=n(0),i=n(18),o=n(73),a=n(249),s=n(168),u=n(20),c=n(11),f=n(49),l=n(2),h=i(\"Reflect\",\"construct\"),d=Object.prototype,p=[].push,v=l(function(){function t(){}return!(h(function(){},[],t)instanceof t)}),g=!l(function(){h(function(){})}),m=v||g;r({target:\"Reflect\",stat:!0,forced:m,sham:m},{construct:function(t,e){s(t),u(e);var n=arguments.length<3?t:s(arguments[2]);if(g&&!v)return h(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return o(p,r,e),new(o(a,t,r))}var i=n.prototype,l=f(c(i)?i:d),m=o(t,l,e);return c(m)?m:l}})},function(t,e,n){function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=i(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),o(t,\"prototype\",{writable:!1}),e&&a(t,e)}var i=n(490),o=n(148),a=n(500);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(491)},function(t,e,n){t.exports=n(492)},function(t,e,n){var r=n(493);t.exports=r},function(t,e,n){var r=n(494);t.exports=r},function(t,e,n){var r=n(495);t.exports=r},function(t,e,n){n(496);var r=n(6),i=r.Object;t.exports=function(t,e){return i.create(t,e)}},function(t,e,n){n(0)({target:\"Object\",stat:!0,sham:!n(14)},{create:n(49)})},function(t,e,n){t.exports=n(498)},function(t,e,n){var r=n(499);t.exports=r},function(t,e,n){var r=n(235);t.exports=r},function(t,e,n){function r(e,n){var a;return t.exports=r=i?o(a=i).call(a):function(t,e){return t.__proto__=e,t},t.exports.__esModule=!0,t.exports.default=t.exports,r(e,n)}var i=n(250),o=n(251);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(502)},function(t,e,n){var r=n(503);t.exports=r},function(t,e,n){var r=n(233);t.exports=r},function(t,e,n){t.exports=n(505)},function(t,e,n){var r=n(506);t.exports=r},function(t,e,n){var r=n(507);t.exports=r},function(t,e,n){var r=n(508);t.exports=r},function(t,e,n){var r=n(19),i=n(509),o=Function.prototype;t.exports=function(t){var e=t.bind;return t===o||r(o,t)&&e===o.bind?i:e}},function(t,e,n){n(510);var r=n(38);t.exports=r(\"Function\").bind},function(t,e,n){var r=n(0),i=n(249);r({target:\"Function\",proto:!0,forced:Function.bind!==i},{bind:i})},function(t,e,n){function r(t,e){if(e&&(\"object\"===i(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return o(t)}var i=n(91).default,o=n(512);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e){function n(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){function r(e){var n;return t.exports=r=i?o(n=a).call(n):function(t){return t.__proto__||a(t)},t.exports.__esModule=!0,t.exports.default=t.exports,r(e)}var i=n(250),o=n(251),a=n(514);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(515)},function(t,e,n){t.exports=n(516)},function(t,e,n){var r=n(517);t.exports=r},function(t,e,n){var r=n(228);t.exports=r},function(t,e){function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),o(t,r.key,r)}}function i(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),o(t,\"prototype\",{writable:!1}),t}var o=n(148);t.exports=i,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){\"use strict\";var r=n(1),i=r(n(59)),o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";t.exports=function(t){for(var e=\"\",n=0;n<t.length;){var r=t.charCodeAt(n++),a=t.charCodeAt(n++),s=t.charCodeAt(n++);if(r>255||a>255||s>255)throw new TypeError(\"Failed to encode base64: The string to be encoded contains characters outside of the Latin1 range.\");var u=r<<16|a<<8|s;e+=o.charAt(u>>18&63)+o.charAt(u>>12&63)+o.charAt(u>>6&63)+o.charAt(63&u)}var c=t.length%3;return c?(0,i.default)(e).call(e,0,c-3)+\"===\".substring(c):e}},function(t,e,n){\"use strict\";var r=n(3),i=n(115);t.exports=function(t,e,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return i({url:t.upload_url,method:\"PUT\",data:e,headers:r.extend({\"Content-Type\":n.get(\"mime_type\"),\"Cache-Control\":\"public, max-age=31536000\"},n._uploadHeaders),onprogress:o.onprogress}).then(function(){return n.attributes.url=t.url,n._bucket=t.bucket,n.id=t.objectId,n})}},function(t,e,n){!function(){var e=n(523),r=n(252).utf8,i=n(524),o=n(252).bin,a=function(t,n){t.constructor==String?t=n&&\"binary\"===n.encoding?o.stringToBytes(t):r.stringToBytes(t):i(t)?t=Array.prototype.slice.call(t,0):Array.isArray(t)||(t=t.toString());for(var s=e.bytesToWords(t),u=8*t.length,c=1732584193,f=-271733879,l=-1732584194,h=271733878,d=0;d<s.length;d++)s[d]=16711935&(s[d]<<8|s[d]>>>24)|4278255360&(s[d]<<24|s[d]>>>8);s[u>>>5]|=128<<u%32,s[14+(u+64>>>9<<4)]=u;for(var p=a._ff,v=a._gg,g=a._hh,m=a._ii,d=0;d<s.length;d+=16){var y=c,b=f,_=l,w=h;c=p(c,f,l,h,s[d+0],7,-680876936),h=p(h,c,f,l,s[d+1],12,-389564586),l=p(l,h,c,f,s[d+2],17,606105819),f=p(f,l,h,c,s[d+3],22,-1044525330),c=p(c,f,l,h,s[d+4],7,-176418897),h=p(h,c,f,l,s[d+5],12,1200080426),l=p(l,h,c,f,s[d+6],17,-1473231341),f=p(f,l,h,c,s[d+7],22,-45705983),c=p(c,f,l,h,s[d+8],7,1770035416),h=p(h,c,f,l,s[d+9],12,-1958414417),l=p(l,h,c,f,s[d+10],17,-42063),f=p(f,l,h,c,s[d+11],22,-1990404162),c=p(c,f,l,h,s[d+12],7,1804603682),h=p(h,c,f,l,s[d+13],12,-40341101),l=p(l,h,c,f,s[d+14],17,-1502002290),f=p(f,l,h,c,s[d+15],22,1236535329),c=v(c,f,l,h,s[d+1],5,-165796510),h=v(h,c,f,l,s[d+6],9,-1069501632),l=v(l,h,c,f,s[d+11],14,643717713),f=v(f,l,h,c,s[d+0],20,-373897302),c=v(c,f,l,h,s[d+5],5,-701558691),h=v(h,c,f,l,s[d+10],9,38016083),l=v(l,h,c,f,s[d+15],14,-660478335),f=v(f,l,h,c,s[d+4],20,-405537848),c=v(c,f,l,h,s[d+9],5,568446438),h=v(h,c,f,l,s[d+14],9,-1019803690),l=v(l,h,c,f,s[d+3],14,-187363961),f=v(f,l,h,c,s[d+8],20,1163531501),c=v(c,f,l,h,s[d+13],5,-1444681467),h=v(h,c,f,l,s[d+2],9,-51403784),l=v(l,h,c,f,s[d+7],14,1735328473),f=v(f,l,h,c,s[d+12],20,-1926607734),c=g(c,f,l,h,s[d+5],4,-378558),h=g(h,c,f,l,s[d+8],11,-2022574463),l=g(l,h,c,f,s[d+11],16,1839030562),f=g(f,l,h,c,s[d+14],23,-35309556),c=g(c,f,l,h,s[d+1],4,-1530992060),h=g(h,c,f,l,s[d+4],11,1272893353),l=g(l,h,c,f,s[d+7],16,-155497632),f=g(f,l,h,c,s[d+10],23,-1094730640),c=g(c,f,l,h,s[d+13],4,681279174),h=g(h,c,f,l,s[d+0],11,-358537222),l=g(l,h,c,f,s[d+3],16,-722521979),f=g(f,l,h,c,s[d+6],23,76029189),c=g(c,f,l,h,s[d+9],4,-640364487),h=g(h,c,f,l,s[d+12],11,-421815835),l=g(l,h,c,f,s[d+15],16,530742520),f=g(f,l,h,c,s[d+2],23,-995338651),c=m(c,f,l,h,s[d+0],6,-198630844),h=m(h,c,f,l,s[d+7],10,1126891415),l=m(l,h,c,f,s[d+14],15,-1416354905),f=m(f,l,h,c,s[d+5],21,-57434055),c=m(c,f,l,h,s[d+12],6,1700485571),h=m(h,c,f,l,s[d+3],10,-1894986606),l=m(l,h,c,f,s[d+10],15,-1051523),f=m(f,l,h,c,s[d+1],21,-2054922799),c=m(c,f,l,h,s[d+8],6,1873313359),h=m(h,c,f,l,s[d+15],10,-30611744),l=m(l,h,c,f,s[d+6],15,-1560198380),f=m(f,l,h,c,s[d+13],21,1309151649),c=m(c,f,l,h,s[d+4],6,-145523070),h=m(h,c,f,l,s[d+11],10,-1120210379),l=m(l,h,c,f,s[d+2],15,718787259),f=m(f,l,h,c,s[d+9],21,-343485551),c=c+y>>>0,f=f+b>>>0,l=l+_>>>0,h=h+w>>>0}return e.endian([c,f,l,h])};a._ff=function(t,e,n,r,i,o,a){var s=t+(e&n|~e&r)+(i>>>0)+a;return(s<<o|s>>>32-o)+e},a._gg=function(t,e,n,r,i,o,a){var s=t+(e&r|n&~r)+(i>>>0)+a;return(s<<o|s>>>32-o)+e},a._hh=function(t,e,n,r,i,o,a){var s=t+(e^n^r)+(i>>>0)+a;return(s<<o|s>>>32-o)+e},a._ii=function(t,e,n,r,i,o,a){var s=t+(n^(e|~r))+(i>>>0)+a;return(s<<o|s>>>32-o)+e},a._blocksize=16,a._digestsize=16,t.exports=function(t,n){if(void 0===t||null===t)throw new Error(\"Illegal argument \"+t);var r=e.wordsToBytes(a(t,n));return n&&n.asBytes?r:n&&n.asString?o.bytesToString(r):e.bytesToHex(r)}}()},function(t,e){!function(){var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n={rotl:function(t,e){return t<<e|t>>>32-e},rotr:function(t,e){return t<<32-e|t>>>e},endian:function(t){if(t.constructor==Number)return 16711935&n.rotl(t,8)|4278255360&n.rotl(t,24);for(var e=0;e<t.length;e++)t[e]=n.endian(t[e]);return t},randomBytes:function(t){for(var e=[];t>0;t--)e.push(Math.floor(256*Math.random()));return e},bytesToWords:function(t){for(var e=[],n=0,r=0;n<t.length;n++,r+=8)e[r>>>5]|=t[n]<<24-r%32;return e},wordsToBytes:function(t){for(var e=[],n=0;n<32*t.length;n+=8)e.push(t[n>>>5]>>>24-n%32&255);return e},bytesToHex:function(t){for(var e=[],n=0;n<t.length;n++)e.push((t[n]>>>4).toString(16)),e.push((15&t[n]).toString(16));return e.join(\"\")},hexToBytes:function(t){for(var e=[],n=0;n<t.length;n+=2)e.push(parseInt(t.substr(n,2),16));return e},bytesToBase64:function(t){for(var n=[],r=0;r<t.length;r+=3)for(var i=t[r]<<16|t[r+1]<<8|t[r+2],o=0;o<4;o++)8*r+6*o<=8*t.length?n.push(e.charAt(i>>>6*(3-o)&63)):n.push(\"=\");return n.join(\"\")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\\/]/gi,\"\");for(var n=[],r=0,i=0;r<t.length;i=++r%4)0!=i&&n.push((e.indexOf(t.charAt(r-1))&Math.pow(2,-2*i+8)-1)<<2*i|e.indexOf(t.charAt(r))>>>6-2*i);return n}};t.exports=n}()},function(t,e){function n(t){return!!t.constructor&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function r(t){return\"function\"==typeof t.readFloatLE&&\"function\"==typeof t.slice&&n(t.slice(0,0))}/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\nt.exports=function(t){return null!=t&&(n(t)||r(t)||!!t._isBuffer)}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(90)),o=function(t,e){var n,r;(0,i.default)(t).call(t,\"base64\")<0?r=atob(t):(0,i.default)(n=t.split(\",\")[0]).call(n,\"base64\")>=0?(e=e||t.split(\",\")[0].split(\":\")[1].split(\";\")[0],r=atob(t.split(\",\")[1])):r=unescape(t.split(\",\")[1]);for(var o=new Uint8Array(r.length),a=0;a<r.length;a++)o[a]=r.charCodeAt(a);return new Blob([o],{type:e})};t.exports=o},function(t,e,n){\"use strict\";function r(t,e){return t&&t[e]?v.isFunction(t[e])?t[e]():t[e]:null}var i=n(1),o=i(n(527)),a=i(n(35)),s=i(n(90)),u=i(n(92)),c=i(n(13)),f=i(n(22)),l=i(n(57)),h=i(n(36)),d=i(n(114)),p=i(n(253)),v=n(3),g=n(46),m=n(27),y=m._request,b=n(30),_=b.isNullOrUndefined,w=b.ensureArray,E=b.transformFetchOptions,O=b.setValue,T=b.findValue,S=b.isPlainObject,A=b.continueWhile,x=function t(e){return v.isArray(e)?(0,a.default)(e).call(e,t):S(e)?v.mapObject(e,t):v.isObject(e)&&e._toPointer?e._toPointer():e},I=[\"objectId\",\"createdAt\",\"updatedAt\"],j=function(t){if(-1!==(0,s.default)(I).call(I,t))throw new Error(\"key[\".concat(t,\"] is reserved\"))},C=function(t){var e=(0,u.default)(v).call(v,t,function(t){return t instanceof Error});if(!e)return t;var n=new g(e.code,e.message);throw n.results=t,n};t.exports=function(t){t.Object=function(e,n){if(v.isString(e))return t.Object._create.apply(this,arguments);e=e||{},n&&n.parse&&(e=this.parse(e),e=this._mergeMagicFields(e));var i=r(this,\"defaults\");i&&(e=v.extend({},i,e)),n&&n.collection&&(this.collection=n.collection),this._serverData={},this._opSetQueue=[{}],this._flags={},this.attributes={},this._hashedJSON={},this._escapedAttributes={},this.cid=v.uniqueId(\"c\"),this.changed={},this._silent={},this._pending={},this.set(e,{silent:!0}),this.changed={},this._silent={},this._pending={},this._hasData=!0,this._previousAttributes=v.clone(this.attributes),this.initialize.apply(this,arguments)},t.Object.saveAll=function(e,n){return t.Object._deepSaveAsync(e,null,n)},t.Object.fetchAll=function(t,e){return c.default.resolve().then(function(){return y(\"batch\",null,null,\"POST\",{requests:(0,a.default)(v).call(v,t,function(t){var e;if(!t.className)throw new Error(\"object must have className to fetch\");if(!t.id)throw new Error(\"object must have id to fetch\");if(t.dirty())throw new Error(\"object is modified but not saved\");return{method:\"GET\",path:(0,f.default)(e=\"/1.1/classes/\".concat(t.className,\"/\")).call(e,t.id)}})},e)}).then(function(e){var n=(0,a.default)(v).call(v,t,function(t,n){if(e[n].success){var r=t.parse(e[n].success);return t._cleanupUnsetKeys(r),t._finishFetch(r),t}return null===e[n].success?new g(g.OBJECT_NOT_FOUND,\"Object not found.\"):new g(e[n].error.code,e[n].error.error)});return C(n)})},v.extend(t.Object.prototype,t.Events,{_fetchWhenSave:!1,initialize:function(){},fetchWhenSave:function(t){if(console.warn(\"AV.Object#fetchWhenSave is deprecated, use AV.Object#save with options.fetchWhenSave instead.\"),!v.isBoolean(t))throw new Error(\"Expect boolean value for fetchWhenSave\");this._fetchWhenSave=t},getObjectId:function(){return this.id},getCreatedAt:function(){return this.createdAt},getUpdatedAt:function(){return this.updatedAt},toJSON:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this._toFullJSON(n,!1)},toFullJSON:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this._toFullJSON(t)},_toFullJSON:function(e){var n=this,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=v.clone(this.attributes);if(v.isArray(e))var o=(0,f.default)(e).call(e,this);return t._objectEach(i,function(e,n){i[n]=t._encode(e,o,void 0,r)}),t._objectEach(this._operations,function(t,e){i[e]=t}),v.has(this,\"id\")&&(i.objectId=this.id),[\"createdAt\",\"updatedAt\"].forEach(function(t){if(v.has(n,t)){var e=n[t];i[t]=v.isDate(e)?e.toJSON():e}}),r&&(i.__type=\"Object\",v.isArray(e)&&e.length&&(i.__type=\"Pointer\"),i.className=this.className),i},_refreshCache:function(){var e=this;e._refreshingCache||(e._refreshingCache=!0,t._objectEach(this.attributes,function(n,r){n instanceof t.Object?n._refreshCache():v.isObject(n)&&e._resetCacheForKey(r)&&e.set(r,new t.Op.Set(n),{silent:!0})}),delete e._refreshingCache)},dirty:function(t){this._refreshCache();var e=v.last(this._opSetQueue);return t?!!e[t]:!this.id||(0,l.default)(v).call(v,e).length>0},dirtyKeys:function(){this._refreshCache();var t=v.last(this._opSetQueue);return(0,l.default)(v).call(v,t)},_toPointer:function(){return{__type:\"Pointer\",className:this.className,objectId:this.id}},get:function(t){switch(t){case\"objectId\":return this.id;case\"createdAt\":case\"updatedAt\":return this[t];default:return this.attributes[t]}},relation:function(e){var n=this.get(e);if(n){if(!(n instanceof t.Relation))throw new Error(\"Called relation() on non-relation field \"+e);return n._ensureParentAndKey(this,e),n}return new t.Relation(this,e)},escape:function(t){var e=this._escapedAttributes[t];if(e)return e;var n,r=this.attributes[t];return n=_(r)?\"\":v.escape(r.toString()),this._escapedAttributes[t]=n,n},has:function(t){return!_(this.attributes[t])},_mergeMagicFields:function(e){var n=this,r=[\"objectId\",\"createdAt\",\"updatedAt\"];return t._arrayEach(r,function(r){e[r]&&(\"objectId\"===r?n.id=e[r]:\"createdAt\"!==r&&\"updatedAt\"!==r||v.isDate(e[r])?n[r]=e[r]:n[r]=t._parseDate(e[r]),delete e[r])}),e},_startSave:function(){this._opSetQueue.push({})},_cancelSave:function(){var e=v.first(this._opSetQueue);this._opSetQueue=v.rest(this._opSetQueue);var n=v.first(this._opSetQueue);t._objectEach(e,function(t,r){var i=e[r],o=n[r];i&&o?n[r]=o._mergeWithPrevious(i):i&&(n[r]=i)}),this._saving=this._saving-1},_finishSave:function(e){var n,r={};t._traverse(this.attributes,function(e){e instanceof t.Object&&e.id&&e._hasData&&(r[e.id]=e)});var i=v.first(this._opSetQueue);this._opSetQueue=v.rest(this._opSetQueue),this._applyOpSet(i,this._serverData),this._mergeMagicFields(e);var o=this;t._objectEach(e,function(e,n){o._serverData[n]=t._decode(e,n);var i=t._traverse(o._serverData[n],function(e){if(e instanceof t.Object&&r[e.id])return r[e.id]});i&&(o._serverData[n]=i)}),this._rebuildAllEstimatedData();var s=(0,a.default)(n=this._opSetQueue).call(n,v.clone);this._refreshCache(),this._opSetQueue=s,this._saving=this._saving-1},_finishFetch:function(e,n){this._opSetQueue=[{}],this._mergeMagicFields(e);var r=this;t._objectEach(e,function(e,n){r._serverData[n]=t._decode(e,n)}),this._rebuildAllEstimatedData(),this._refreshCache(),this._opSetQueue=[{}],this._hasData=n},_applyOpSet:function(e,n){var r=this;t._objectEach(e,function(e,i){var a=T(n,i),s=(0,o.default)(a,3),u=s[0],c=s[1],f=s[2];O(n,i,e._estimate(u,r,i)),c&&c[f]===t.Op._UNSET&&delete c[f]})},_resetCacheForKey:function(e){var n=this.attributes[e];if(v.isObject(n)&&!(n instanceof t.Object)&&!(n instanceof t.File)){var r=(0,h.default)(x(n));if(this._hashedJSON[e]!==r){var i=!!this._hashedJSON[e];return this._hashedJSON[e]=r,i}}return!1},_rebuildEstimatedDataForKey:function(e){var n=this;delete this.attributes[e],this._serverData[e]&&(this.attributes[e]=this._serverData[e]),t._arrayEach(this._opSetQueue,function(r){var i=r[e];if(i){var a=T(n.attributes,e),s=(0,o.default)(a,4),u=s[0],c=s[1],f=s[2],l=s[3];O(n.attributes,e,i._estimate(u,n,e)),c&&c[f]===t.Op._UNSET&&delete c[f],n._resetCacheForKey(l)}})},_rebuildAllEstimatedData:function(){var e=this,n=v.clone(this.attributes);this.attributes=v.clone(this._serverData),t._arrayEach(this._opSetQueue,function(n){e._applyOpSet(n,e.attributes),t._objectEach(n,function(t,n){e._resetCacheForKey(n)})}),t._objectEach(n,function(t,n){e.attributes[n]!==t&&e.trigger(\"change:\"+n,e,e.attributes[n],{})}),t._objectEach(this.attributes,function(t,r){v.has(n,r)||e.trigger(\"change:\"+r,e,t,{})})},set:function(e,n,r){var i;if(v.isObject(e)||_(e)?(i=v.mapObject(e,function(e,n){return j(n),t._decode(e,n)}),r=n):(i={},j(e),i[e]=t._decode(n,e)),r=r||{},!i)return this;i instanceof t.Object&&(i=i.attributes),r.unset&&t._objectEach(i,function(e,n){i[n]=new t.Op.Unset});var o=v.clone(i),a=this;t._objectEach(o,function(e,n){e instanceof t.Op&&(o[n]=e._estimate(a.attributes[n],a,n),o[n]===t.Op._UNSET&&delete o[n])}),this._validate(i,r),r.changes={};var s=this._escapedAttributes;return t._arrayEach((0,l.default)(v).call(v,i),function(e){var n=i[e];n instanceof t.Relation&&(n.parent=a),n instanceof t.Op||(n=new t.Op.Set(n));var o=!0;n instanceof t.Op.Set&&v.isEqual(a.attributes[e],n.value)&&(o=!1),o&&(delete s[e],r.silent?a._silent[e]=!0:r.changes[e]=!0);var u=v.last(a._opSetQueue);u[e]=n._mergeWithPrevious(u[e]),a._rebuildEstimatedDataForKey(e),o?(a.changed[e]=a.attributes[e],r.silent||(a._pending[e]=!0)):(delete a.changed[e],delete a._pending[e])}),r.silent||this.change(r),this},unset:function(t,e){return e=e||{},e.unset=!0,this.set(t,null,e)},increment:function(e,n){return(v.isUndefined(n)||v.isNull(n))&&(n=1),this.set(e,new t.Op.Increment(n))},add:function(e,n){return this.set(e,new t.Op.Add(w(n)))},addUnique:function(e,n){return this.set(e,new t.Op.AddUnique(w(n)))},remove:function(e,n){return this.set(e,new t.Op.Remove(w(n)))},bitAnd:function(e,n){return this.set(e,new t.Op.BitAnd(n))},bitOr:function(e,n){return this.set(e,new t.Op.BitOr(n))},bitXor:function(e,n){return this.set(e,new t.Op.BitXor(n))},op:function(t){return v.last(this._opSetQueue)[t]},clear:function(t){t=t||{},t.unset=!0;var e=v.extend(this.attributes,this._operations);return this.set(e,t)},revert:function(t){var e=v.last(this._opSetQueue);return w(t||(0,l.default)(v).call(v,e)).forEach(function(t){delete e[t]}),this._rebuildAllEstimatedData(),this},_getSaveJSON:function(){var e=v.clone(v.first(this._opSetQueue));return t._objectEach(e,function(t,n){e[n]=t.toJSON()}),e},_canBeSerialized:function(){return t.Object._canBeSerializedAsValue(this.attributes)},fetch:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;if(!this.id)throw new Error(\"Cannot fetch unsaved object\");var n=this;return y(\"classes\",this.className,this.id,\"GET\",E(t),e).then(function(e){var r=n.parse(e);return n._cleanupUnsetKeys(r,(0,l.default)(t)?w((0,l.default)(t)).join(\",\").split(\",\"):void 0),n._finishFetch(r,!0),n})},_cleanupUnsetKeys:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,l.default)(v).call(v,this._serverData);v.forEach(n,function(n){void 0===t[n]&&delete e._serverData[n]})},save:function(e,n,r){var i,o,a;v.isObject(e)||_(e)?(i=e,a=n):(i={},i[e]=n,a=r),a=v.clone(a)||{},a.wait&&(o=v.clone(this.attributes));var s=v.clone(a)||{};s.wait&&(s.silent=!0),i&&this.set(i,s);var u=this,f=[],l=[];return t.Object._findUnsavedChildren(u,f,l),f.length+l.length>1?t.Object._deepSaveAsync(this,u,a):(this._startSave(),this._saving=(this._saving||0)+1,this._allPreviousSaves=this._allPreviousSaves||c.default.resolve(),this._allPreviousSaves=this._allPreviousSaves.catch(function(t){}).then(function(){var t=u.id?\"PUT\":\"POST\",e=u._getSaveJSON(),n={};if((u._fetchWhenSave||a.fetchWhenSave)&&(n.new=\"true\"),a._failOnNotExist&&(n.failOnNotExist=\"true\"),a.query){var r;if(\"function\"==typeof a.query._getParams&&(r=a.query._getParams())&&(n.where=r.where),!n.where){throw new Error(\"options.query is not an AV.Query\")}}v.extend(e,u._flags);var c=\"classes\",f=u.className;\"_User\"!==u.className||u.id||(c=\"users\",f=null);var l=a._makeRequest||y,h=l(c,f,u.id,t,e,a,n);return h=h.then(function(t){var e=u.parse(t);return a.wait&&(e=v.extend(i||{},e)),u._finishSave(e),a.wait&&u.set(o,s),u},function(t){throw u._cancelSave(),t})}),this._allPreviousSaves)},destroy:function(t){t=t||{};var e=this,n=function(){e.trigger(\"destroy\",e,e.collection,t)};return this.id?(t.wait||n(),y(\"classes\",this.className,this.id,\"DELETE\",this._flags,t).then(function(){return t.wait&&n(),e})):n()},parse:function(e){var n=v.clone(e);return[\"createdAt\",\"updatedAt\"].forEach(function(e){n[e]&&(n[e]=t._parseDate(n[e]))}),n.createdAt&&!n.updatedAt&&(n.updatedAt=n.createdAt),n},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.id},change:function(e){e=e||{};var n=this._changing;this._changing=!0;var r=this;t._objectEach(this._silent,function(t){r._pending[t]=!0});var i=v.extend({},e.changes,this._silent);if(this._silent={},t._objectEach(i,function(t,n){r.trigger(\"change:\"+n,r,r.get(n),e)}),n)return this;for(var o=function(t,e){r._pending[e]||r._silent[e]||delete r.changed[e]};!v.isEmpty(this._pending);)this._pending={},this.trigger(\"change\",this,e),t._objectEach(this.changed,o),r._previousAttributes=v.clone(this.attributes);return this._changing=!1,this},previous:function(t){return arguments.length&&this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return v.clone(this._previousAttributes)},isValid:function(){try{this.validate(this.attributes)}catch(t){return!1}return!0},validate:function(e){if(v.has(e,\"ACL\")&&!(e.ACL instanceof t.ACL))throw new g(g.OTHER_CAUSE,\"ACL must be a AV.ACL.\")},_validate:function(t,e){!e.silent&&this.validate&&(t=v.extend({},this.attributes,t),this.validate(t))},getACL:function(){return this.get(\"ACL\")},setACL:function(t,e){return this.set(\"ACL\",t,e)},disableBeforeHook:function(){this.ignoreHook(\"beforeSave\"),this.ignoreHook(\"beforeUpdate\"),this.ignoreHook(\"beforeDelete\")},disableAfterHook:function(){this.ignoreHook(\"afterSave\"),this.ignoreHook(\"afterUpdate\"),this.ignoreHook(\"afterDelete\")},ignoreHook:function(e){if(!v.contains([\"beforeSave\",\"afterSave\",\"beforeUpdate\",\"afterUpdate\",\"beforeDelete\",\"afterDelete\"],e))throw new Error(\"Unsupported hookName: \"+e);if(!t.hookKey)throw new Error(\"ignoreHook required hookKey\");this._flags.__ignore_hooks||(this._flags.__ignore_hooks=[]),this._flags.__ignore_hooks.push(e)}}),t.Object.createWithoutData=function(e,n,r){var i;if(v.isString(e))i=t.Object._getSubclass(e);else{if(!(e.prototype&&e.prototype instanceof t.Object))throw new Error(\"class must be a string or a subclass of AV.Object.\");i=e}if(!n)throw new TypeError(\"The objectId must be provided\");var o=new i;return o.id=n,o._hasData=r,o},t.Object.destroyAll=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||0===t.length)return c.default.resolve();var n=v.groupBy(t,function(t){return(0,h.default)({className:t.className,flags:t._flags})}),r={requests:(0,a.default)(v).call(v,n,function(t){var e,n=(0,a.default)(v).call(v,t,\"id\").join(\",\");return{method:\"DELETE\",path:(0,f.default)(e=\"/1.1/classes/\".concat(t[0].className,\"/\")).call(e,n),body:t[0]._flags}})};return y(\"batch\",null,null,\"POST\",r,e).then(function(t){var e=(0,u.default)(v).call(v,t,function(t){return!t.success});if(e)throw new g(e.error.code,e.error.error)})},t.Object._getSubclass=function(e){if(!v.isString(e))throw new Error(\"AV.Object._getSubclass requires a string argument.\");var n=t.Object._classMap[e];return n||(n=t.Object.extend(e),t.Object._classMap[e]=n),n},t.Object._create=function(e,n,r){return new(t.Object._getSubclass(e))(n,r)},t.Object._classMap={},t.Object._extend=t._extend,t.Object.new=function(e,n){return new t.Object(e,n)},t.Object.extend=function(e,n,r){if(!v.isString(e)){if(e&&v.has(e,\"className\"))return t.Object.extend(e.className,e,n);throw new Error(\"AV.Object.extend's first argument should be the className.\")}\"User\"===e&&(e=\"_User\");var i=null;if(v.has(t.Object._classMap,e)){var o=t.Object._classMap[e];if(!n&&!r)return o;i=o._extend(n,r)}else n=n||{},n._className=e,i=this._extend(n,r);return i.extend=function(n){var r;if(v.isString(n)||n&&v.has(n,\"className\"))return t.Object.extend.apply(i,arguments);var o=(0,f.default)(r=[e]).call(r,v.toArray(arguments));return t.Object.extend.apply(i,o)},(0,d.default)(i,\"query\",(0,p.default)(t.Object,\"query\")),i.new=function(t,e){return new i(t,e)},t.Object._classMap[e]=i,i},(0,d.default)(t.Object.prototype,\"className\",{get:function(){var t=this._className||this.constructor._LCClassName||this.constructor.name;return\"User\"===t?\"_User\":t}}),t.Object.register=function(e,n){if(!(e.prototype instanceof t.Object))throw new Error(\"registered class is not a subclass of AV.Object\");var r=n||e.name;if(!r.length)throw new Error(\"registered class must be named\");n&&(e._LCClassName=n),t.Object._classMap[r]=e},(0,d.default)(t.Object,\"query\",{get:function(){return new t.Query(this.prototype.className)}}),t.Object._findUnsavedChildren=function(e,n,r){t._traverse(e,function(e){return e instanceof t.Object?void(e.dirty()&&n.push(e)):e instanceof t.File?void(e.id||r.push(e)):void 0})},t.Object._canBeSerializedAsValue=function(e){var n=!0;return e instanceof t.Object||e instanceof t.File?n=!!e.id:v.isArray(e)?t._arrayEach(e,function(e){t.Object._canBeSerializedAsValue(e)||(n=!1)}):v.isObject(e)&&t._objectEach(e,function(e){t.Object._canBeSerializedAsValue(e)||(n=!1)}),n},t.Object._deepSaveAsync=function(e,n,r){var i=[],o=[];t.Object._findUnsavedChildren(e,i,o),o=v.uniq(o);var s=c.default.resolve();v.each(o,function(t){s=s.then(function(){return t.save()})});var u=v.uniq(i),f=v.uniq(u);return s.then(function(){return A(function(){return f.length>0},function(){var e=[],n=[];if(t._arrayEach(f,function(t){t._canBeSerialized()?e.push(t):n.push(t)}),f=n,0===e.length)return c.default.reject(new g(g.OTHER_CAUSE,\"Tried to save a batch with a cycle.\"));var i=c.default.resolve((0,a.default)(v).call(v,e,function(t){return t._allPreviousSaves||c.default.resolve()})),o=i.then(function(){return y(\"batch\",null,null,\"POST\",{requests:(0,a.default)(v).call(v,e,function(t){var e=t.id?\"PUT\":\"POST\",n=t._getSaveJSON();v.extend(n,t._flags);var i=t.className,o=\"/\".concat(\"classes\",\"/\").concat(i);\"_User\"!==t.className||t.id||(o=\"/users\");var o=\"/1.1\".concat(o);return t.id&&(o=o+\"/\"+t.id),t._startSave(),{method:e,path:o,body:n,params:r&&r.fetchWhenSave?{fetchWhenSave:!0}:void 0}})},r).then(function(t){var n=(0,a.default)(v).call(v,e,function(e,n){return t[n].success?(e._finishSave(e.parse(t[n].success)),e):(e._cancelSave(),new g(t[n].error.code,t[n].error.error))});return C(n)})});return t._arrayEach(e,function(t){t._allPreviousSaves=o}),o})}).then(function(){return e})}}},function(t,e,n){function r(t,e){return i(t)||o(t,e)||a(t,e)||s()}var i=n(528),o=n(536),a=n(537),s=n(547);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){function r(t){if(i(t))return t}var i=n(529);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(530)},function(t,e,n){t.exports=n(531)},function(t,e,n){var r=n(532);t.exports=r},function(t,e,n){var r=n(533);t.exports=r},function(t,e,n){var r=n(534);t.exports=r},function(t,e,n){n(535);var r=n(6);t.exports=r.Array.isArray},function(t,e,n){n(0)({target:\"Array\",stat:!0},{isArray:n(88)})},function(t,e,n){function r(t,e){var n=null==t?null:void 0!==i&&o(t)||t[\"@@iterator\"];if(null!=n){var r,a,s=[],u=!0,c=!1;try{for(n=n.call(t);!(u=(r=n.next()).done)&&(s.push(r.value),!e||s.length!==e);u=!0);}catch(t){c=!0,a=t}finally{try{u||null==n.return||n.return()}finally{if(c)throw a}}return s}}var i=n(236),o=n(248);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){function r(t,e){var n;if(t){if(\"string\"==typeof t)return a(t,e);var r=i(n=Object.prototype.toString.call(t)).call(n,8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?o(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}var i=n(538),o=n(542),a=n(546);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){t.exports=n(539)},function(t,e,n){t.exports=n(540)},function(t,e,n){var r=n(541);t.exports=r},function(t,e,n){var r=n(234);t.exports=r},function(t,e,n){t.exports=n(543)},function(t,e,n){t.exports=n(544)},function(t,e,n){var r=n(545);t.exports=r},function(t,e,n){var r=n(246);t.exports=r},function(t,e){function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e){function n(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){var r=n(549);t.exports=r},function(t,e,n){n(550);var r=n(6),i=r.Object,o=t.exports=function(t,e){return i.getOwnPropertyDescriptor(t,e)};i.getOwnPropertyDescriptor.sham&&(o.sham=!0)},function(t,e,n){var r=n(0),i=n(2),o=n(32),a=n(60).f,s=n(14),u=i(function(){a(1)});r({target:\"Object\",stat:!0,forced:!s||u,sham:!s},{getOwnPropertyDescriptor:function(t,e){return a(o(t),e)}})},function(t,e,n){\"use strict\";var r=n(3),i=n(46);t.exports=function(t){t.Role=t.Object.extend(\"_Role\",{constructor:function(e,n){if(r.isString(e)?(t.Object.prototype.constructor.call(this,null,null),this.setName(e)):t.Object.prototype.constructor.call(this,e,n),n){if(!(n instanceof t.ACL))throw new TypeError(\"acl must be an instance of AV.ACL\");this.setACL(n)}},getName:function(){return this.get(\"name\")},setName:function(t,e){return this.set(\"name\",t,e)},getUsers:function(){return this.relation(\"users\")},getRoles:function(){return this.relation(\"roles\")},validate:function(e,n){if(\"name\"in e&&e.name!==this.getName()){var o=e.name;if(this.id&&this.id!==e.objectId)return new i(i.OTHER_CAUSE,\"A role's name can only be set before it has been saved.\");if(!r.isString(o))return new i(i.OTHER_CAUSE,\"A role's name must be a String.\");if(!/^[0-9a-zA-Z\\-_ ]+$/.test(o))return new i(i.OTHER_CAUSE,\"A role's name can only contain alphanumeric characters, _, -, and spaces.\")}return!!t.Object.prototype.validate&&t.Object.prototype.validate.call(this,e,n)}})}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(553)),o=r(n(13)),a=r(n(35)),s=r(n(92)),u=r(n(36)),c=n(3),f=n(226),l=n(46),h=n(27),d=h._request,p=h.request,v=n(71),g=v.getAdapter,m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"weixin\";return function(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=r.unionIdPlatform,o=void 0===i?t:i,a=r.asMainAccount,s=void 0!==a&&a;if(\"string\"!=typeof n)throw new l(l.OTHER_CAUSE,\"unionId is not a string\");if(\"string\"!=typeof o)throw new l(l.OTHER_CAUSE,\"unionIdPlatform is not a string\");return c.extend({},e,{platform:o,unionid:n,main_account:Boolean(s)})}};t.exports=function(t){t.User=t.Object.extend(\"_User\",{_isCurrentUser:!1,_mergeMagicFields:function(e){return e.sessionToken&&(this._sessionToken=e.sessionToken,delete e.sessionToken),t.User.__super__._mergeMagicFields.call(this,e)},_cleanupAuthData:function(){if(this.isCurrent()){var e=this.get(\"authData\");e&&t._objectEach(this.get(\"authData\"),function(t,n){e[n]||delete e[n]})}},_synchronizeAllAuthData:function(){if(this.get(\"authData\")){var e=this;t._objectEach(this.get(\"authData\"),function(t,n){e._synchronizeAuthData(n)})}},_synchronizeAuthData:function(e){if(this.isCurrent()){var n;c.isString(e)?(n=e,e=t.User._authProviders[n]):n=e.getAuthType();var r=this.get(\"authData\");if(r&&e){e.restoreAuthentication(r[n])||this.dissociateAuthData(e)}}},_handleSaveResult:function(e){return e&&!t._config.disableCurrentUser&&(this._isCurrentUser=!0),this._cleanupAuthData(),this._synchronizeAllAuthData(),delete this._serverData.password,this._rebuildEstimatedDataForKey(\"password\"),this._refreshCache(),!e&&!this.isCurrent()||t._config.disableCurrentUser?o.default.resolve():o.default.resolve(t.User._saveCurrentUser(this))},_linkWith:function(e,n){var r,o=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=a.failOnNotExist,u=void 0!==s&&s,f=a.useMasterKey,l=a.sessionToken,h=a.user;return c.isString(e)?(r=e,e=t.User._authProviders[e]):r=e.getAuthType(),n?this.save({authData:(0,i.default)({},r,n)},{useMasterKey:f,sessionToken:l,user:h,fetchWhenSave:!!this.get(\"authData\"),_failOnNotExist:u}).then(function(t){return t._handleSaveResult(!0).then(function(){return t})}):e.authenticate().then(function(t){return o._linkWith(e,t)})},associateWithAuthData:function(t,e){return this._linkWith(e,t)},associateWithAuthDataAndUnionId:function(t,e,n,r){return this._linkWith(e,m()(t,n,r))},associateWithMiniApp:function(t,e){var n=this;if(void 0===t){return g(\"getAuthInfo\")().then(function(t){return n._linkWith(t.provider,t.authData,e)})}return this._linkWith(t.provider,t.authData,e)},associateWithQQApp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"qq\":i,a=e.asMainAccount,s=void 0===a||a;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return e.provider=\"lc_qqapp\",t.associateWithMiniApp(e)})},associateWithWeapp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"weixin\":i,a=e.asMainAccount,s=void 0===a||a;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return t.associateWithMiniApp(e)})},linkWithWeapp:function(t){return console.warn(\"DEPRECATED: User#linkWithWeapp 已废弃，请使用 User#associateWithWeapp 代替\"),this.associateWithWeapp(t)},associateWithQQAppWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"qq\":i,a=r.asMainAccount,s=void 0!==a&&a;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),r.provider=\"lc_qqapp\",n.associateWithMiniApp(r)})},associateWithWeappWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"weixin\":i,a=r.asMainAccount,s=void 0!==a&&a;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),n.associateWithMiniApp(r)})},dissociateAuthData:function(t){return this.unset(\"authData.\".concat(t)),this.save().then(function(t){return t._handleSaveResult(!0).then(function(){return t})})},_unlinkFrom:function(t){return console.warn(\"DEPRECATED: User#_unlinkFrom 已废弃，请使用 User#dissociateAuthData 代替\"),this.dissociateAuthData(t)},_isLinked:function(t){var e;return e=c.isString(t)?t:t.getAuthType(),!!(this.get(\"authData\")||{})[e]},isAnonymous:function(){return this._isLinked(\"anonymous\")},logOut:function(){this._logOutWithAll(),this._isCurrentUser=!1},_logOutWithAll:function(){if(this.get(\"authData\")){var e=this;t._objectEach(this.get(\"authData\"),function(t,n){e._logOutWith(n)})}},_logOutWith:function(e){this.isCurrent()&&(c.isString(e)&&(e=t.User._authProviders[e]),e&&e.deauthenticate&&e.deauthenticate())},signUp:function(t,e){var n=t&&t.username||this.get(\"username\");if(!n||\"\"===n)throw new l(l.OTHER_CAUSE,\"Cannot sign up user with an empty name.\");var r=t&&t.password||this.get(\"password\");if(!r||\"\"===r)throw new l(l.OTHER_CAUSE,\"Cannot sign up user with an empty password.\");return this.save(t,e).then(function(t){return t.isAnonymous()&&(t.unset(\"authData.\".concat(\"anonymous\")),t._opSetQueue=[{}]),t._handleSaveResult(!0).then(function(){return t})})},signUpOrlogInWithMobilePhone:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t&&t.mobilePhoneNumber||this.get(\"mobilePhoneNumber\");if(!n||\"\"===n)throw new l(l.OTHER_CAUSE,\"Cannot sign up or login user by mobilePhoneNumber with an empty mobilePhoneNumber.\");var r=t&&t.smsCode||this.get(\"smsCode\");if(!r||\"\"===r)throw new l(l.OTHER_CAUSE,\"Cannot sign up or login user by mobilePhoneNumber  with an empty smsCode.\");return e._makeRequest=function(t,e,n,r,i){return d(\"usersByMobilePhone\",null,null,\"POST\",i)},this.save(t,e).then(function(t){return delete t.attributes.smsCode,delete t._serverData.smsCode,t._handleSaveResult(!0).then(function(){return t})})},loginWithAuthData:function(t,e,n){return this._linkWith(e,t,n)},loginWithAuthDataAndUnionId:function(t,e,n,r){return this.loginWithAuthData(m()(t,n,r),e,r)},loginWithWeapp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"weixin\":i,a=e.asMainAccount,s=void 0===a||a,u=e.failOnNotExist,c=void 0!==u&&u,f=e.useMasterKey,l=e.sessionToken,h=e.user;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return t.loginWithMiniApp(e,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithWeappWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"weixin\":i,a=r.asMainAccount,s=void 0!==a&&a,u=r.failOnNotExist,c=void 0!==u&&u,f=r.useMasterKey,l=r.sessionToken,h=r.user;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),n.loginWithMiniApp(r,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithQQApp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"qq\":i,a=e.asMainAccount,s=void 0===a||a,u=e.failOnNotExist,c=void 0!==u&&u,f=e.useMasterKey,l=e.sessionToken,h=e.user;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return e.provider=\"lc_qqapp\",t.loginWithMiniApp(e,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithQQAppWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"qq\":i,a=r.asMainAccount,s=void 0!==a&&a,u=r.failOnNotExist,c=void 0!==u&&u,f=r.useMasterKey,l=r.sessionToken,h=r.user;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),r.provider=\"lc_qqapp\",n.loginWithMiniApp(r,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithMiniApp:function(t,e){var n=this;if(void 0===t){return g(\"getAuthInfo\")().then(function(t){return n.loginWithAuthData(t.authData,t.provider,e)})}return this.loginWithAuthData(t.authData,t.provider,e)},logIn:function(){var t=this;return d(\"login\",null,null,\"POST\",this.toJSON()).then(function(e){var n=t.parse(e);return t._finishFetch(n),t._handleSaveResult(!0).then(function(){return n.smsCode||delete t.attributes.smsCode,t})})},save:function(e,n,r){var i,o;return c.isObject(e)||c.isNull(e)||c.isUndefined(e)?(i=e,o=n):(i={},i[e]=n,o=r),o=o||{},t.Object.prototype.save.call(this,i,o).then(function(t){return t._handleSaveResult(!1).then(function(){return t})})},follow:function(e,n){if(!this.id)throw new Error(\"Please signin.\");var r,i;e.user?(r=e.user,i=e.attributes):r=e;var o=c.isString(r)?r:r.id;if(!o)throw new Error(\"Invalid target user.\");var a=\"users/\"+this.id+\"/friendship/\"+o;return d(a,null,null,\"POST\",t._encode(i),n)},unfollow:function(t,e){if(!this.id)throw new Error(\"Please signin.\");var n;n=t.user?t.user:t;var r=c.isString(n)?n:n.id;if(!r)throw new Error(\"Invalid target user.\");var i=\"users/\"+this.id+\"/friendship/\"+r;return d(i,null,null,\"DELETE\",null,e)},getFollowersAndFollowees:function(e,n){if(!this.id)throw new Error(\"Please signin.\");return p({method:\"GET\",path:\"/users/\".concat(this.id,\"/followersAndFollowees\"),query:{skip:e&&e.skip,limit:e&&e.limit,include:\"follower,followee\",keys:\"follower,followee\"},authOptions:n}).then(function(e){var n=e.followers,r=e.followees;return{followers:(0,a.default)(n).call(n,function(e){var n=e.follower;return t._decode(n)}),followees:(0,a.default)(r).call(r,function(e){var n=e.followee;return t._decode(n)})}})},followerQuery:function(){return t.User.followerQuery(this.id)},followeeQuery:function(){return t.User.followeeQuery(this.id)},fetch:function(e,n){return t.Object.prototype.fetch.call(this,e,n).then(function(t){return t._handleSaveResult(!1).then(function(){return t})})},updatePassword:function(t,e,n){var r=this,i=\"users/\"+this.id+\"/updatePassword\";return d(i,null,null,\"PUT\",{old_password:t,new_password:e},n).then(function(t){return r._finishFetch(r.parse(t)),r._handleSaveResult(!0).then(function(){return t})})},isCurrent:function(){return this._isCurrentUser},getUsername:function(){return this.get(\"username\")},getMobilePhoneNumber:function(){return this.get(\"mobilePhoneNumber\")},setMobilePhoneNumber:function(t,e){return this.set(\"mobilePhoneNumber\",t,e)},setUsername:function(t,e){return this.set(\"username\",t,e)},setPassword:function(t,e){return this.set(\"password\",t,e)},getEmail:function(){return this.get(\"email\")},setEmail:function(t,e){return this.set(\"email\",t,e)},authenticated:function(){return console.warn(\"DEPRECATED: 如果要判断当前用户的登录状态是否有效，请使用 currentUser.isAuthenticated().then()，如果要判断该用户是否是当前登录用户，请使用 user.id === currentUser.id。\"),!!this._sessionToken&&!t._config.disableCurrentUser&&t.User.current()&&t.User.current().id===this.id},isAuthenticated:function(){var e=this;return o.default.resolve().then(function(){return!!e._sessionToken&&t.User._fetchUserBySessionToken(e._sessionToken).then(function(){return!0},function(t){if(211===t.code)return!1;throw t})})},getSessionToken:function(){return this._sessionToken},refreshSessionToken:function(t){var e=this;return d(\"users/\".concat(this.id,\"/refreshSessionToken\"),null,null,\"PUT\",null,t).then(function(t){return e._finishFetch(t),e._handleSaveResult(!0).then(function(){return e})})},getRoles:function(e){var n;return(0,s.default)(n=t.Relation.reverseQuery(\"_Role\",\"users\",this)).call(n,e)}},{_currentUser:null,_currentUserMatchesDisk:!1,_CURRENT_USER_KEY:\"currentUser\",_authProviders:{},signUp:function(e,n,r,i){return r=r||{},r.username=e,r.password=n,t.Object._create(\"_User\").signUp(r,i)},logIn:function(e,n){var r=t.Object._create(\"_User\");return r._finishFetch({username:e,password:n}),r.logIn()},become:function(t){return this._fetchUserBySessionToken(t).then(function(t){return t._handleSaveResult(!0).then(function(){return t})})},_fetchUserBySessionToken:function(e){if(void 0===e)return o.default.reject(new Error(\"The sessionToken cannot be undefined\"));var n=t.Object._create(\"_User\");return p({method:\"GET\",path:\"/users/me\",authOptions:{sessionToken:e}}).then(function(t){var e=n.parse(t);return n._finishFetch(e),n})},logInWithMobilePhoneSmsCode:function(e,n){var r=t.Object._create(\"_User\");return r._finishFetch({mobilePhoneNumber:e,smsCode:n}),r.logIn()},signUpOrlogInWithMobilePhone:function(e,n,r,i){return r=r||{},r.mobilePhoneNumber=e,r.smsCode=n,t.Object._create(\"_User\").signUpOrlogInWithMobilePhone(r,i)},logInWithMobilePhone:function(e,n){var r=t.Object._create(\"_User\");return r._finishFetch({mobilePhoneNumber:e,password:n}),r.logIn()},loginWithEmail:function(e,n){var r=t.Object._create(\"_User\");return r._finishFetch({email:e,password:n}),r.logIn()},loginWithAuthData:function(e,n,r){return t.User._logInWith(n,e,r)},signUpOrlogInWithAuthData:function(){return console.warn(\"DEPRECATED: User.signUpOrlogInWithAuthData 已废弃，请使用 User#loginWithAuthData 代替\"),this.loginWithAuthData.apply(this,arguments)},loginWithAuthDataAndUnionId:function(t,e,n,r){return this.loginWithAuthData(m()(t,n,r),e,r)},signUpOrlogInWithAuthDataAndUnionId:function(){return console.warn(\"DEPRECATED: User.signUpOrlogInWithAuthDataAndUnionId 已废弃，请使用 User#loginWithAuthDataAndUnionId 代替\"),this.loginWithAuthDataAndUnionId.apply(this,arguments)},mergeUnionId:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.asMainAccount,i=void 0!==r&&r;t=JSON.parse((0,u.default)(t));var o=t,a=o.authData,s=o.platform;return a.platform=s,a.main_account=i,a.unionid=e,t},loginWithWeapp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"weixin\":i,a=e.asMainAccount,s=void 0===a||a,u=e.failOnNotExist,c=void 0!==u&&u,f=e.useMasterKey,l=e.sessionToken,h=e.user;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return t.loginWithMiniApp(e,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithWeappWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"weixin\":i,a=r.asMainAccount,s=void 0!==a&&a,u=r.failOnNotExist,c=void 0!==u&&u,f=r.useMasterKey,l=r.sessionToken,h=r.user;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),n.loginWithMiniApp(r,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithQQApp:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.preferUnionId,r=void 0!==n&&n,i=e.unionIdPlatform,o=void 0===i?\"qq\":i,a=e.asMainAccount,s=void 0===a||a,u=e.failOnNotExist,c=void 0!==u&&u,f=e.useMasterKey,l=e.sessionToken,h=e.user;return g(\"getAuthInfo\")({preferUnionId:r,asMainAccount:s,platform:o}).then(function(e){return e.provider=\"lc_qqapp\",t.loginWithMiniApp(e,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithQQAppWithUnionId:function(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.unionIdPlatform,o=void 0===i?\"qq\":i,a=r.asMainAccount,s=void 0!==a&&a,u=r.failOnNotExist,c=void 0!==u&&u,f=r.useMasterKey,l=r.sessionToken,h=r.user;return g(\"getAuthInfo\")({platform:o}).then(function(r){return r=t.User.mergeUnionId(r,e,{asMainAccount:s}),r.provider=\"lc_qqapp\",n.loginWithMiniApp(r,{failOnNotExist:c,useMasterKey:f,sessionToken:l,user:h})})},loginWithMiniApp:function(t,e){var n=this;if(void 0===t){return g(\"getAuthInfo\")().then(function(t){return n.loginWithAuthData(t.authData,t.provider,e)})}return this.loginWithAuthData(t.authData,t.provider,e)},_genId:function(){return f()},loginAnonymously:function(){return this.loginWithAuthData({id:t.User._genId()},\"anonymous\")},associateWithAuthData:function(t,e,n){return console.warn(\"DEPRECATED: User.associateWithAuthData 已废弃，请使用 User#associateWithAuthData 代替\"),t._linkWith(e,n)},logOut:function(){return t._config.disableCurrentUser?(console.warn(\"AV.User.current() was disabled in multi-user environment, call logOut() from user object instead https://leancloud.cn/docs/leanengine-node-sdk-upgrade-1.html\"),o.default.resolve(null)):(null!==t.User._currentUser&&(t.User._currentUser._logOutWithAll(),t.User._currentUser._isCurrentUser=!1),t.User._currentUserMatchesDisk=!0,t.User._currentUser=null,t.localStorage.removeItemAsync(t._getAVPath(t.User._CURRENT_USER_KEY)).then(function(){return t._refreshSubscriptionId()}))},followerQuery:function(e){if(!e||!c.isString(e))throw new Error(\"Invalid user object id.\");var n=new t.FriendShipQuery(\"_Follower\");return n._friendshipTag=\"follower\",n.equalTo(\"user\",t.Object.createWithoutData(\"_User\",e)),n},followeeQuery:function(e){if(!e||!c.isString(e))throw new Error(\"Invalid user object id.\");var n=new t.FriendShipQuery(\"_Followee\");return n._friendshipTag=\"followee\",n.equalTo(\"user\",t.Object.createWithoutData(\"_User\",e)),n},requestPasswordReset:function(t){return d(\"requestPasswordReset\",null,null,\"POST\",{email:t})},requestEmailVerify:function(t){return d(\"requestEmailVerify\",null,null,\"POST\",{email:t})},requestMobilePhoneVerify:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={mobilePhoneNumber:t};return e.validateToken&&(n.validate_token=e.validateToken),d(\"requestMobilePhoneVerify\",null,null,\"POST\",n,e)},requestPasswordResetBySmsCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={mobilePhoneNumber:t};return e.validateToken&&(n.validate_token=e.validateToken),d(\"requestPasswordResetBySmsCode\",null,null,\"POST\",n,e)},requestChangePhoneNumber:function(t,e,n){var r={mobilePhoneNumber:t};return e&&(r.ttl=n.ttl),n&&n.validateToken&&(r.validate_token=n.validateToken),d(\"requestChangePhoneNumber\",null,null,\"POST\",r,n)},changePhoneNumber:function(t,e){return d(\"changePhoneNumber\",null,null,\"POST\",{mobilePhoneNumber:t,code:e})},resetPasswordBySmsCode:function(t,e){return d(\"resetPasswordBySmsCode\",null,t,\"PUT\",{password:e})},verifyMobilePhone:function(t){return d(\"verifyMobilePhone\",null,t,\"POST\",null)},requestLoginSmsCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={mobilePhoneNumber:t};return e.validateToken&&(n.validate_token=e.validateToken),d(\"requestLoginSmsCode\",null,null,\"POST\",n,e)},currentAsync:function(){return t._config.disableCurrentUser?(console.warn(\"AV.User.currentAsync() was disabled in multi-user environment, access user from request instead https://leancloud.cn/docs/leanengine-node-sdk-upgrade-1.html\"),o.default.resolve(null)):t.User._currentUser?o.default.resolve(t.User._currentUser):t.User._currentUserMatchesDisk?o.default.resolve(t.User._currentUser):t.localStorage.getItemAsync(t._getAVPath(t.User._CURRENT_USER_KEY)).then(function(e){if(!e)return null;t.User._currentUserMatchesDisk=!0,t.User._currentUser=t.Object._create(\"_User\"),t.User._currentUser._isCurrentUser=!0;var n=JSON.parse(e);return t.User._currentUser.id=n._id,delete n._id,t.User._currentUser._sessionToken=n._sessionToken,delete n._sessionToken,t.User._currentUser._finishFetch(n),t.User._currentUser._synchronizeAllAuthData(),t.User._currentUser._refreshCache(),t.User._currentUser._opSetQueue=[{}],t.User._currentUser})},current:function(){if(t._config.disableCurrentUser)return console.warn(\"AV.User.current() was disabled in multi-user environment, access user from request instead https://leancloud.cn/docs/leanengine-node-sdk-upgrade-1.html\"),null;if(t.localStorage.async){var e=new Error(\"Synchronous API User.current() is not available in this runtime. Use User.currentAsync() instead.\");throw e.code=\"SYNC_API_NOT_AVAILABLE\",e}if(t.User._currentUser)return t.User._currentUser;if(t.User._currentUserMatchesDisk)return t.User._currentUser;t.User._currentUserMatchesDisk=!0;var n=t.localStorage.getItem(t._getAVPath(t.User._CURRENT_USER_KEY));if(!n)return null;t.User._currentUser=t.Object._create(\"_User\"),t.User._currentUser._isCurrentUser=!0;var r=JSON.parse(n);return t.User._currentUser.id=r._id,delete r._id,t.User._currentUser._sessionToken=r._sessionToken,delete r._sessionToken,t.User._currentUser._finishFetch(r),t.User._currentUser._synchronizeAllAuthData(),t.User._currentUser._refreshCache(),t.User._currentUser._opSetQueue=[{}],t.User._currentUser},_saveCurrentUser:function(e){var n;return n=t.User._currentUser!==e?t.User.logOut():o.default.resolve(),n.then(function(){e._isCurrentUser=!0,t.User._currentUser=e;var n=e._toFullJSON();return n._id=e.id,n._sessionToken=e._sessionToken,t.localStorage.setItemAsync(t._getAVPath(t.User._CURRENT_USER_KEY),(0,u.default)(n)).then(function(){return t.User._currentUserMatchesDisk=!0,t._refreshSubscriptionId()})})},_registerAuthenticationProvider:function(e){t.User._authProviders[e.getAuthType()]=e,!t._config.disableCurrentUser&&t.User.current()&&t.User.current()._synchronizeAuthData(e.getAuthType())},_logInWith:function(e,n,r){return t.Object._create(\"_User\")._linkWith(e,n,r)}})}},function(t,e,n){function r(t,e,n){return e in t?i(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var i=n(148);t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){\"use strict\";var r=n(1),i=r(n(35)),o=r(n(13)),a=r(n(57)),s=r(n(36)),u=r(n(92)),c=r(n(22)),f=n(3),l=n(58)(\"leancloud:query\"),h=n(46),d=n(27),p=d._request,v=d.request,g=n(30),m=g.ensureArray,y=g.transformFetchOptions,b=g.continueWhile,_=function(t,e){if(void 0===t)throw new Error(e)};t.exports=function(t){t.Query=function(e){f.isString(e)&&(e=t.Object._getSubclass(e)),this.objectClass=e,this.className=e.prototype.className,this._where={},this._include=[],this._select=[],this._limit=-1,this._skip=0,this._defaultParams={}},t.Query.or=function(){var e=f.toArray(arguments),n=null;t._arrayEach(e,function(t){if(f.isNull(n)&&(n=t.className),n!==t.className)throw new Error(\"All queries must be for the same class\")});var r=new t.Query(n);return r._orQuery(e),r},t.Query.and=function(){var e=f.toArray(arguments),n=null;t._arrayEach(e,function(t){if(f.isNull(n)&&(n=t.className),n!==t.className)throw new Error(\"All queries must be for the same class\")});var r=new t.Query(n);return r._andQuery(e),r},t.Query.doCloudQuery=function(e,n,r){var o={cql:e};return f.isArray(n)?o.pvalues=n:r=n,p(\"cloudQuery\",null,null,\"GET\",o,r).then(function(e){var n=new t.Query(e.className);return{results:(0,i.default)(f).call(f,e.results,function(t){var r=n._newObject(e);return r._finishFetch&&r._finishFetch(n._processResult(t),!0),r}),count:e.count,className:e.className}})},t.Query.fromJSON=function(e){var n=e.className,r=e.where,i=e.include,o=e.select,a=e.includeACL,s=e.limit,u=e.skip,c=e.order;if(\"string\"!=typeof n)throw new TypeError(\"Invalid Query JSON, className must be a String.\");var l=new t.Query(n);return f.extend(l,{_where:r,_include:i,_select:o,_includeACL:a,_limit:s,_skip:u,_order:c}),l},t.Query._extend=t._extend,f.extend(t.Query.prototype,{_processResult:function(t){return t},get:function(t,e){if(!f.isString(t))throw new Error(\"objectId must be a string\");if(\"\"===t)return o.default.reject(new h(h.OBJECT_NOT_FOUND,\"Object not found.\"));var n=this._newObject();n.id=t;var r=this._getParams(),i={};return(0,a.default)(r)&&(i.keys=(0,a.default)(r)),r.include&&(i.include=r.include),r.includeACL&&(i.includeACL=r.includeACL),p(\"classes\",this.className,t,\"GET\",y(i),e).then(function(t){if(f.isEmpty(t))throw new h(h.OBJECT_NOT_FOUND,\"Object not found.\");return n._finishFetch(n.parse(t),!0),n})},toJSON:function(){return{className:this.className,where:this._where,include:this._include,select:this._select,includeACL:this._includeACL,limit:this._limit,skip:this._skip,order:this._order}},_getParams:function(){var t=f.extend({},this._defaultParams,{where:this._where});return this._include.length>0&&(t.include=this._include.join(\",\")),this._select.length>0&&(t.keys=this._select.join(\",\")),void 0!==this._includeACL&&(t.returnACL=this._includeACL),this._limit>=0&&(t.limit=this._limit),this._skip>0&&(t.skip=this._skip),void 0!==this._order&&(t.order=this._order),t},_newObject:function(e){return e&&e.className?new t.Object(e.className):new this.objectClass},_createRequest:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._getParams(),e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"/classes/\".concat(this.className);if(encodeURIComponent((0,s.default)(t)).length>2e3){var r={requests:[{method:\"GET\",path:\"/1.1\".concat(n),params:t}]};return v({path:\"/batch\",method:\"POST\",data:r,authOptions:e}).then(function(t){var e=t[0];if(e.success)return e.success;throw new h(e.error.code,e.error.error||\"Unknown batch error\")})}return v({method:\"GET\",path:n,query:t,authOptions:e})},_parseResponse:function(t){var e=this;return(0,i.default)(f).call(f,t.results,function(n){var r=e._newObject(t);return r._finishFetch&&r._finishFetch(e._processResult(n),!0),r})},find:function(t){return this._createRequest(void 0,t).then(this._parseResponse.bind(this))},findAndCount:function(t){var e=this,n=this._getParams();return n.count=1,this._createRequest(n,t).then(function(t){return[e._parseResponse(t),t.count]})},scan:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.orderedBy,r=e.batchSize,i=arguments.length>1?arguments[1]:void 0,a=this._getParams();l(\"scan %O\",a),a.order&&(console.warn(\"The order of the query is ignored for Query#scan. Checkout the orderedBy option of Query#scan.\"),delete a.order),a.skip&&(console.warn(\"The skip option of the query is ignored for Query#scan.\"),delete a.skip),a.limit&&(console.warn(\"The limit option of the query is ignored for Query#scan.\"),delete a.limit),n&&(a.scan_key=n),r&&(a.limit=r);var s,u=[];return{next:function(){return u.length?o.default.resolve({done:!1,value:u.shift()}):null===s?o.default.resolve({done:!0}):p(\"scan/classes\",t.className,null,\"GET\",s?f.extend({},a,{cursor:s}):a,i).then(function(e){if(s=e.cursor,e.results.length){t._parseResponse(e).forEach(function(t){return u.push(t)})}return null===s&&0===u.length?{done:!0}:{done:!1,value:u.shift()}})}}},destroyAll:function(e){var n=this;return(0,u.default)(n).call(n,e).then(function(n){return t.Object.destroyAll(n,e)})},count:function(t){var e=this._getParams();return e.limit=0,e.count=1,this._createRequest(e,t).then(function(t){return t.count})},first:function(t){var e=this,n=this._getParams();return n.limit=1,this._createRequest(n,t).then(function(t){return(0,i.default)(f).call(f,t.results,function(t){var n=e._newObject();return n._finishFetch&&n._finishFetch(e._processResult(t),!0),n})[0]})},skip:function(t){return _(t,\"undefined is not a valid skip value\"),this._skip=t,this},limit:function(t){return _(t,\"undefined is not a valid limit value\"),this._limit=t,this},equalTo:function(e,n){return _(e,\"undefined is not a valid key\"),_(n,\"undefined is not a valid value\"),this._where[e]=t._encode(n),this},_addCondition:function(e,n,r){return _(e,\"undefined is not a valid condition key\"),_(n,\"undefined is not a valid condition\"),_(r,\"undefined is not a valid condition value\"),this._where[e]||(this._where[e]={}),this._where[e][n]=t._encode(r),this},sizeEqualTo:function(t,e){return this._addCondition(t,\"$size\",e),this},notEqualTo:function(t,e){return this._addCondition(t,\"$ne\",e),this},lessThan:function(t,e){return this._addCondition(t,\"$lt\",e),this},greaterThan:function(t,e){return this._addCondition(t,\"$gt\",e),this},lessThanOrEqualTo:function(t,e){return this._addCondition(t,\"$lte\",e),this},greaterThanOrEqualTo:function(t,e){return this._addCondition(t,\"$gte\",e),this},containedIn:function(t,e){return this._addCondition(t,\"$in\",e),this},notContainedIn:function(t,e){return this._addCondition(t,\"$nin\",e),this},containsAll:function(t,e){return this._addCondition(t,\"$all\",e),this},exists:function(t){return this._addCondition(t,\"$exists\",!0),this},doesNotExist:function(t){return this._addCondition(t,\"$exists\",!1),this},matches:function(t,e,n){return this._addCondition(t,\"$regex\",e),n||(n=\"\"),e.ignoreCase&&(n+=\"i\"),e.multiline&&(n+=\"m\"),n&&n.length&&this._addCondition(t,\"$options\",n),this},matchesQuery:function(t,e){var n=e._getParams();return n.className=e.className,this._addCondition(t,\"$inQuery\",n),this},doesNotMatchQuery:function(t,e){var n=e._getParams();return n.className=e.className,this._addCondition(t,\"$notInQuery\",n),this},matchesKeyInQuery:function(t,e,n){var r=n._getParams();return r.className=n.className,this._addCondition(t,\"$select\",{key:e,query:r}),this},doesNotMatchKeyInQuery:function(t,e,n){var r=n._getParams();return r.className=n.className,this._addCondition(t,\"$dontSelect\",{key:e,query:r}),this},_orQuery:function(t){var e=(0,i.default)(f).call(f,t,function(t){return t._getParams().where});return this._where.$or=e,this},_andQuery:function(t){var e=(0,i.default)(f).call(f,t,function(t){return t._getParams().where});return this._where.$and=e,this},_quote:function(t){return\"\\\\Q\"+t.replace(\"\\\\E\",\"\\\\E\\\\\\\\E\\\\Q\")+\"\\\\E\"},contains:function(t,e){return this._addCondition(t,\"$regex\",this._quote(e)),this},startsWith:function(t,e){return this._addCondition(t,\"$regex\",\"^\"+this._quote(e)),this},endsWith:function(t,e){return this._addCondition(t,\"$regex\",this._quote(e)+\"$\"),this},ascending:function(t){return _(t,\"undefined is not a valid key\"),this._order=t,this},addAscending:function(t){return _(t,\"undefined is not a valid key\"),this._order?this._order+=\",\"+t:this._order=t,this},descending:function(t){return _(t,\"undefined is not a valid key\"),this._order=\"-\"+t,this},addDescending:function(t){return _(t,\"undefined is not a valid key\"),this._order?this._order+=\",-\"+t:this._order=\"-\"+t,this},near:function(e,n){return n instanceof t.GeoPoint||(n=new t.GeoPoint(n)),this._addCondition(e,\"$nearSphere\",n),this},withinRadians:function(t,e,n){return this.near(t,e),this._addCondition(t,\"$maxDistance\",n),this},withinMiles:function(t,e,n){return this.withinRadians(t,e,n/3958.8)},withinKilometers:function(t,e,n){return this.withinRadians(t,e,n/6371)},withinGeoBox:function(e,n,r){return n instanceof t.GeoPoint||(n=new t.GeoPoint(n)),r instanceof t.GeoPoint||(r=new t.GeoPoint(r)),this._addCondition(e,\"$within\",{$box:[n,r]}),this},include:function(t){var e=this;return _(t,\"undefined is not a valid key\"),f.forEach(arguments,function(t){var n;e._include=(0,c.default)(n=e._include).call(n,m(t))}),this},includeACL:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._includeACL=t,this},select:function(t){var e=this;return _(t,\"undefined is not a valid key\"),f.forEach(arguments,function(t){var n;e._select=(0,c.default)(n=e._select).call(n,m(t))}),this},each:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this._order||this._skip||this._limit>=0){var r=new Error(\"Cannot iterate on a query with sort, skip, or limit.\");return o.default.reject(r)}var i=new t.Query(this.objectClass);i._limit=n.batchSize||100,i._where=f.clone(this._where),i._include=f.clone(this._include),i.ascending(\"objectId\");var a=!1;return b(function(){return!a},function(){return(0,u.default)(i).call(i,n).then(function(t){var n=o.default.resolve();return f.each(t,function(t){n=n.then(function(){return e(t)})}),n.then(function(){t.length>=i._limit?i.greaterThan(\"objectId\",t[t.length-1].id):a=!0})})})},subscribe:function(e){return t.LiveQuery.init(this,e)}}),t.FriendShipQuery=t.Query._extend({_newObject:function(){return new(t.Object._getSubclass(\"_User\"))},_processResult:function(t){if(t&&t[this._friendshipTag]){var e=t[this._friendshipTag];return\"Pointer\"===e.__type&&\"_User\"===e.className&&(delete e.__type,delete e.className),e}return null}})}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=r(n(57)),a=n(3),s=n(230),u=n(30),c=u.inherits,f=n(27),l=f.request,h=function(t,e){return l({method:\"POST\",path:\"/LiveQuery/subscribe\",data:{query:t,id:e}})};t.exports=function(t){var e=function(){if(!t._config.realtime)throw new Error(\"LiveQuery not supported. Please use the LiveQuery bundle. https://url.leanapp.cn/enable-live-query\")};t.LiveQuery=c(s,{constructor:function(t,e,n,r){var i=this;s.apply(this),this.id=t,this._client=e,this._client.register(this),this._queryJSON=n,this._subscriptionId=r,this._onMessage=this._dispatch.bind(this),this._onReconnect=function(){h(i._queryJSON,i._subscriptionId).catch(function(t){return console.error(\"LiveQuery resubscribe error: \".concat(t.message))})},e.on(\"message\",this._onMessage),e.on(\"reconnect\",this._onReconnect)},_dispatch:function(e){var n=this;e.forEach(function(e){var r=e.op,i=e.object,o=e.query_id,s=e.updatedKeys;if(o===n.id){var u=t.parseJSON(a.extend({__type:\"_File\"===i.className?\"File\":\"Object\"},i));s?n.emit(r,u,s):n.emit(r,u)}})},unsubscribe:function(){var t=this._client;return t.off(\"message\",this._onMessage),t.off(\"reconnect\",this._onReconnect),t.deregister(this),l({method:\"POST\",path:\"/LiveQuery/unsubscribe\",data:{id:t.id,query_id:this.id}})}},{init:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=r.subscriptionId,s=void 0===a?t._getSubscriptionId():a;if(e(),!(n instanceof t.Query))throw new TypeError(\"LiveQuery must be inited with a Query\");return i.default.resolve(s).then(function(e){return t._config.realtime.createLiveQueryClient(e).then(function(r){var i=n._getParams(),a=i.where,s=(0,o.default)(i),u=i.returnACL,c={where:a,keys:s,returnACL:u,className:n.className},f=h(c,e).then(function(n){var i=n.query_id;return new t.LiveQuery(i,r,c,e)}).finally(function(){r.deregister(f)});return r.register(f),f})})},pause:function(){return e(),t._config.realtime.pause()},resume:function(){return e(),t._config.realtime.resume()}})}},function(t,e,n){\"use strict\";var r=n(3),i=n(30),o=i.tap;t.exports=function(t){t.Captcha=function(t,e){this._options=t,this._authOptions=e,this.url=void 0,this.captchaToken=void 0,this.validateToken=void 0},t.Captcha.prototype.refresh=function(){var e=this;return t.Cloud._requestCaptcha(this._options,this._authOptions).then(function(t){var n=t.captchaToken,i=t.url;return r.extend(e,{captchaToken:n,url:i}),i})},t.Captcha.prototype.verify=function(e){var n=this;return t.Cloud.verifyCaptcha(e,this.captchaToken).then(o(function(t){return n.validateToken=t}))},t.Captcha.request=function(e,n){var r=new t.Captcha(e,n);return r.refresh().then(function(){return r})}}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3),a=n(27),s=a._request,u=a.request;t.exports=function(t){t.Cloud=t.Cloud||{},o.extend(t.Cloud,{run:function(e,n,r){return u({service:\"engine\",method:\"POST\",path:\"/functions/\".concat(e),data:t._encode(n,null,!0),authOptions:r}).then(function(e){return t._decode(e).result})},rpc:function(e,n,r){return o.isArray(n)?i.default.reject(new Error(\"Can't pass Array as the param of rpc function in JavaScript SDK.\")):u({service:\"engine\",method:\"POST\",path:\"/call/\".concat(e),data:t._encodeObjectOrArray(n),authOptions:r}).then(function(e){return t._decode(e).result})},getServerDate:function(){return s(\"date\",null,null,\"GET\").then(function(e){return t._decode(e)})},requestSmsCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o.isString(t)&&(t={mobilePhoneNumber:t}),!t.mobilePhoneNumber)throw new Error(\"Missing mobilePhoneNumber.\");return e.validateToken&&(t=o.extend({},t,{validate_token:e.validateToken})),s(\"requestSmsCode\",null,null,\"POST\",t,e)},verifySmsCode:function(t,e){if(!t)throw new Error(\"Missing sms code.\");var n={};return o.isString(e)&&(n.mobilePhoneNumber=e),s(\"verifySmsCode\",t,null,\"POST\",n)},_requestCaptcha:function(t,e){return s(\"requestCaptcha\",null,null,\"GET\",t,e).then(function(t){var e=t.captcha_url;return{captchaToken:t.captcha_token,url:e}})},requestCaptcha:t.Captcha.request,verifyCaptcha:function(t,e){return s(\"verifyCaptcha\",null,null,\"POST\",{captcha_code:t,captcha_token:e}).then(function(t){return t.validate_token})}})}},function(t,e,n){\"use strict\";var r=n(27).request;t.exports=function(t){t.Installation=t.Object.extend(\"_Installation\"),t.Push=t.Push||{},t.Push.send=function(t,e){if(t.where&&(t.where=t.where._getParams().where),t.where&&t.cql)throw new Error(\"Both where and cql can't be set\");if(t.push_time&&(t.push_time=t.push_time.toJSON()),t.expiration_time&&(t.expiration_time=t.expiration_time.toJSON()),t.expiration_time&&t.expiration_interval)throw new Error(\"Both expiration_time and expiration_interval can't be set\");return r({service:\"push\",method:\"POST\",path:\"/push\",data:t,authOptions:e})}}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=r(n(91)),a=n(3),s=n(27)._request,u=n(30),c=u.getSessionToken;t.exports=function(t){var e=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return c(e)?t.User._fetchUserBySessionToken(c(e)):t.User.currentAsync()},n=function(n){return e(n).then(function(e){return t.Object.createWithoutData(\"_User\",e.id)._toPointer()})};t.Status=function(t,e){return this.data={},this.inboxType=\"default\",this.query=null,t&&\"object\"===(0,o.default)(t)?this.data=t:(t&&(this.data.image=t),e&&(this.data.message=e)),this},a.extend(t.Status.prototype,{get:function(t){return this.data[t]},set:function(t,e){return this.data[t]=e,this},destroy:function(t){return this.id?s(\"statuses\",null,this.id,\"DELETE\",t):i.default.reject(new Error(\"The status id is not exists.\"))},toObject:function(){return this.id?t.Object.createWithoutData(\"_Status\",this.id):null},_getDataJSON:function(){var e=a.clone(this.data);return t._encode(e)},send:function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!c(r)&&!t.User.current())throw new Error(\"Please signin an user.\");return this.query?n(r).then(function(t){var n=e.query._getParams();n.className=e.query.className;var i={};return i.query=n,e.data=e.data||{},e.data.source=e.data.source||t,i.data=e._getDataJSON(),i.inboxType=e.inboxType||\"default\",s(\"statuses\",null,null,\"POST\",i,r)}).then(function(n){return e.id=n.objectId,e.createdAt=t._parseDate(n.createdAt),e}):t.Status.sendStatusToFollowers(this,r)},_finishFetch:function(e){this.id=e.objectId,this.createdAt=t._parseDate(e.createdAt),this.updatedAt=t._parseDate(e.updatedAt),this.messageId=e.messageId,delete e.messageId,delete e.objectId,delete e.createdAt,delete e.updatedAt,this.data=t._decode(e)}}),t.Status.sendStatusToFollowers=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!c(r)&&!t.User.current())throw new Error(\"Please signin an user.\");return n(r).then(function(n){var i={};i.className=\"_Follower\",i.keys=\"follower\",i.where={user:n};var o={};return o.query=i,e.data=e.data||{},e.data.source=e.data.source||n,o.data=e._getDataJSON(),o.inboxType=e.inboxType||\"default\",s(\"statuses\",null,null,\"POST\",o,r).then(function(n){return e.id=n.objectId,e.createdAt=t._parseDate(n.createdAt),e})})},t.Status.sendPrivateStatus=function(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!c(i)&&!t.User.current())throw new Error(\"Please signin an user.\");if(!r)throw new Error(\"Invalid target user.\");var o=a.isString(r)?r:r.id;if(!o)throw new Error(\"Invalid target user.\");return n(i).then(function(n){var r={};r.className=\"_User\",r.where={objectId:o};var a={};return a.query=r,e.data=e.data||{},e.data.source=e.data.source||n,a.data=e._getDataJSON(),a.inboxType=\"private\",e.inboxType=\"private\",s(\"statuses\",null,null,\"POST\",a,i).then(function(n){return e.id=n.objectId,e.createdAt=t._parseDate(n.createdAt),e})})},t.Status.countUnreadStatuses=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"default\",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(a.isString(r)||(o=r),!c(o)&&null==n&&!t.User.current())throw new Error(\"Please signin an user or pass the owner objectId.\");return i.default.resolve(n||e(o)).then(function(e){var n={};return n.inboxType=t._encode(r),n.owner=t._encode(e),s(\"subscribe/statuses/count\",null,null,\"GET\",n,o)})},t.Status.resetUnreadCount=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"default\",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(a.isString(r)||(o=r),!c(o)&&null==n&&!t.User.current())throw new Error(\"Please signin an user or pass the owner objectId.\");return i.default.resolve(n||e(o)).then(function(e){var n={};return n.inboxType=t._encode(r),n.owner=t._encode(e),s(\"subscribe/statuses/resetUnreadCount\",null,null,\"POST\",n,o)})},t.Status.statusQuery=function(e){var n=new t.Query(\"_Status\");return e&&n.equalTo(\"source\",e),n},t.InboxQuery=t.Query._extend({_objectClass:t.Status,_sinceId:0,_maxId:0,_inboxType:\"default\",_owner:null,_newObject:function(){return new t.Status},_createRequest:function(e,n){return t.InboxQuery.__super__._createRequest.call(this,e,n,\"/subscribe/statuses\")},sinceId:function(t){return this._sinceId=t,this},maxId:function(t){return this._maxId=t,this},owner:function(t){return this._owner=t,this},inboxType:function(t){return this._inboxType=t,this},_getParams:function(){var e=t.InboxQuery.__super__._getParams.call(this);return e.owner=t._encode(this._owner),e.inboxType=t._encode(this._inboxType),e.sinceId=t._encode(this._sinceId),e.maxId=t._encode(this._maxId),e}}),t.Status.inboxQuery=function(e,n){var r=new t.InboxQuery(t.Status);return e&&(r._owner=e),n&&(r._inboxType=n),r}}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(36)),o=r(n(35)),a=n(3),s=n(27)._request;t.exports=function(t){t.SearchSortBuilder=function(){this._sortFields=[]},a.extend(t.SearchSortBuilder.prototype,{_addField:function(t,e,n,r){var i={};return i[t]={order:e||\"asc\",mode:n||\"avg\",missing:\"_\"+(r||\"last\")},this._sortFields.push(i),this},ascending:function(t,e,n){return this._addField(t,\"asc\",e,n)},descending:function(t,e,n){return this._addField(t,\"desc\",e,n)},whereNear:function(t,e,n){n=n||{};var r={},i={lat:e.latitude,lon:e.longitude},o={order:n.order||\"asc\",mode:n.mode||\"avg\",unit:n.unit||\"km\"};return o[t]=i,r._geo_distance=o,this._sortFields.push(r),this},build:function(){return(0,i.default)(t._encode(this._sortFields))}}),t.SearchQuery=t.Query._extend({_sid:null,_hits:0,_queryString:null,_highlights:null,_sortBuilder:null,_clazz:null,constructor:function(e){e?this._clazz=e:e=\"__INVALID_CLASS\",t.Query.call(this,e)},_createRequest:function(t,e){return s(\"search/select\",null,null,\"GET\",t||this._getParams(),e)},sid:function(t){return this._sid=t,this},queryString:function(t){return this._queryString=t,this},highlights:function(t){var e;return e=t&&a.isString(t)?a.toArray(arguments):t,this._highlights=e,this},sortBy:function(t){return this._sortBuilder=t,this},hits:function(){return this._hits||(this._hits=0),this._hits},_processResult:function(t){return delete t.className,delete t._app_url,delete t._deeplink,t},hasMore:function(){return!this._hitEnd},reset:function(){this._hitEnd=!1,this._sid=null,this._hits=0},find:function(t){var e=this;return this._createRequest(void 0,t).then(function(t){return t.sid?(e._oldSid=e._sid,e._sid=t.sid):(e._sid=null,e._hitEnd=!0),e._hits=t.hits||0,(0,o.default)(a).call(a,t.results,function(n){n.className&&(t.className=n.className);var r=e._newObject(t);return r.appURL=n._app_url,r._finishFetch(e._processResult(n),!0),r})})},_getParams:function(){var e=t.SearchQuery.__super__._getParams.call(this);if(delete e.where,this._clazz&&(e.clazz=this.className),this._sid&&(e.sid=this._sid),!this._queryString)throw new Error(\"Please set query string.\");if(e.q=this._queryString,this._highlights&&(e.highlights=this._highlights.join(\",\")),this._sortBuilder&&e.order)throw new Error(\"sort and order can not be set at same time.\");return this._sortBuilder&&(e.sort=this._sortBuilder.build()),e}})}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3),a=n(46),s=n(27),u=s.request;t.exports=function(t){t.Insight=t.Insight||{},o.extend(t.Insight,{startJob:function(e,n){if(!e||!e.sql)throw new Error(\"Please provide the sql to run the job.\");var r={jobConfig:e,appId:t.applicationId};return u({path:\"/bigquery/jobs\",method:\"POST\",data:t._encode(r,null,!0),authOptions:n,signKey:!1}).then(function(e){return t._decode(e).id})},on:function(t,e){}}),t.Insight.JobQuery=function(t,e){if(!t)throw new Error(\"Please provide the job id.\");this.id=t,this.className=e,this._skip=0,this._limit=100},o.extend(t.Insight.JobQuery.prototype,{skip:function(t){return this._skip=t,this},limit:function(t){return this._limit=t,this},find:function(t){var e={skip:this._skip,limit:this._limit};return u({path:\"/bigquery/jobs/\".concat(this.id),method:\"GET\",query:e,authOptions:t,signKey:!1}).then(function(t){return t.error?i.default.reject(new a(t.code,t.error)):i.default.resolve(t)})}})}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(13)),o=n(3),a=n(27),s=a.request,u=n(30),c=u.getSessionToken;t.exports=function(t){var e=function(e){if(e.user){if(!e.user._sessionToken)throw new Error(\"authOptions.user is not signed in.\");return i.default.resolve(e.user)}return e.sessionToken?t.User._fetchUserBySessionToken(e.sessionToken):t.User.currentAsync()},n=function(e){var n=c(e);return n?i.default.resolve(n):t.User.currentAsync().then(function(t){if(t)return t.getSessionToken()})};t.Friendship={request:function(n){var r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};n.friend?(r=n.friend,i=n.attributes):r=n;var u=o.isString(r)?t.Object.createWithoutData(\"_User\",r):r;return e(a).then(function(t){if(!t)throw new Error(\"Please signin an user.\");return s({method:\"POST\",path:\"/users/friendshipRequests\",data:{user:t._toPointer(),friend:u._toPointer(),friendship:i},authOptions:a})})},acceptRequest:function(e){var r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.request?(r=e.request,i=e.attributes):r=e;var u=o.isString(r)?r:r.id;return n(a).then(function(e){if(!e)throw new Error(\"Please signin an user.\");return s({method:\"PUT\",path:\"/users/friendshipRequests/\"+u+\"/accept\",data:{friendship:t._encode(i)},authOptions:a})})},declineRequest:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=o.isString(t)?t:t.id;return n(e).then(function(t){if(!t)throw new Error(\"Please signin an user.\");return s({method:\"PUT\",path:\"/users/friendshipRequests/\"+r+\"/decline\",authOptions:e})})}}}},function(t,e,n){\"use strict\";var r=n(1),i=r(n(36)),o=n(3),a=n(27),s=a._request,u=n(69),c=function(t){return\"string\"==typeof t?t:\"function\"==typeof t.getPayload?(0,i.default)(t.getPayload()):(0,i.default)(t)};t.exports=u.Object.extend(\"_Conversation\",{constructor:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u.Object.prototype.constructor.call(this,null,null),this.set(\"name\",t),void 0!==e.isSystem&&this.set(\"sys\",!!e.isSystem),void 0!==e.isTransient&&this.set(\"tr\",!!e.isTransient)},getCreator:function(){return this.get(\"c\")},getLastMessageAt:function(){return this.get(\"lm\")},getMembers:function(){return this.get(\"m\")},addMember:function(t){return this.add(\"m\",t)},getMutedMembers:function(){return this.get(\"mu\")},getName:function(){return this.get(\"name\")},isTransient:function(){return this.get(\"tr\")},isSystem:function(){return this.get(\"sys\")},send:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i={from_peer:t,conv_id:this.id,transient:!1,message:c(e)};return void 0!==n.toClients&&(i.to_peers=n.toClients),void 0!==n.transient&&(i.transient=!!n.transient),void 0!==n.pushData&&(i.push_data=n.pushData),s(\"rtm\",\"messages\",null,\"POST\",i,r)},broadcast:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i={from_peer:t,conv_id:this.id,message:c(e)};if(void 0!==n.pushData&&(i.push=n.pushData),void 0!==n.validTill){var a=n.validTill;o.isDate(a)&&(a=a.getTime()),n.valid_till=a}return s(\"rtm\",\"broadcast\",null,\"POST\",i,r)}})},function(t,e,n){\"use strict\";function r(t){var e=t.name,n=t.value,r=t.version;this.name=e,this.value=n,this.version=r}var i=n(1),o=i(n(13)),a=i(n(35)),s=i(n(22)),u=n(3),c=n(27),f=c.request,l=n(30),h=l.ensureArray,d=l.parseDate,p=n(69);p.LeaderboardVersionChangeInterval={NEVER:\"never\",DAY:\"day\",WEEK:\"week\",MONTH:\"month\"},p.LeaderboardOrder={ASCENDING:\"ascending\",DESCENDING:\"descending\"},p.LeaderboardUpdateStrategy={BETTER:\"better\",LAST:\"last\",SUM:\"sum\"};var v=function(t){var e=p._decode(t);return new r({name:e.statisticName,value:e.statisticValue,version:e.version})};p.Leaderboard=function(t){this.statisticName=t,this.order=void 0,this.updateStrategy=void 0,this.versionChangeInterval=void 0,this.version=void 0,this.nextResetAt=void 0,this.createdAt=void 0};var g=p.Leaderboard;p.Leaderboard.createWithoutData=function(t){return new g(t)},p.Leaderboard.createLeaderboard=function(t,e){var n=t.statisticName,r=t.order,i=t.versionChangeInterval,o=t.updateStrategy;return f({method:\"POST\",path:\"/leaderboard/leaderboards\",data:{statisticName:n,order:r,versionChangeInterval:i,updateStrategy:o},authOptions:e}).then(function(t){return new g(n)._finishFetch(t)})},p.Leaderboard.getLeaderboard=function(t,e){return g.createWithoutData(t).fetch(e)},p.Leaderboard.getStatistics=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.statisticNames,r=arguments.length>2?arguments[2]:void 0;return o.default.resolve().then(function(){if(!t||!t.id)throw new Error(\"user must be an AV.User\");return f({method:\"GET\",path:\"/leaderboard/users/\".concat(t.id,\"/statistics\"),query:{statistics:n?h(n).join(\",\"):void 0},authOptions:r}).then(function(t){var e=t.results;return(0,a.default)(e).call(e,v)})})},p.Leaderboard.updateStatistics=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return o.default.resolve().then(function(){if(!t||!t.id)throw new Error(\"user must be an AV.User\");var r=(0,a.default)(u).call(u,e,function(t,e){return{statisticName:e,statisticValue:t}}),i=n.overwrite;return f({method:\"POST\",path:\"/leaderboard/users/\".concat(t.id,\"/statistics\"),query:{overwrite:i?1:void 0},data:r,authOptions:n}).then(function(t){var e=t.results;return(0,a.default)(e).call(e,v)})})},p.Leaderboard.deleteStatistics=function(t,e,n){return o.default.resolve().then(function(){if(!t||!t.id)throw new Error(\"user must be an AV.User\");return f({method:\"DELETE\",path:\"/leaderboard/users/\".concat(t.id,\"/statistics\"),query:{statistics:h(e).join(\",\")},authOptions:n}).then(function(){})})},u.extend(g.prototype,{_finishFetch:function(t){var e=this;return u.forEach(t,function(t,n){\"updatedAt\"!==n&&\"objectId\"!==n&&(\"expiredAt\"===n&&(n=\"nextResetAt\"),\"createdAt\"===n&&(t=d(t)),t&&\"Date\"===t.__type&&(t=d(t.iso)),e[n]=t)}),this},fetch:function(t){var e=this;return f({method:\"GET\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName),authOptions:t}).then(function(t){return e._finishFetch(t)})},count:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.version,n=arguments.length>1?arguments[1]:void 0;return f({method:\"GET\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName,\"/ranks\"),query:{count:1,limit:0,version:e},authOptions:n}).then(function(t){return t.count})},_getResults:function(t,e,n){var r,i=t.skip,o=t.limit,c=t.selectUserKeys,l=t.includeUserKeys,d=t.includeStatistics,g=t.version;return f({method:\"GET\",path:(0,s.default)(r=\"/leaderboard/leaderboards/\".concat(this.statisticName,\"/ranks\")).call(r,n?\"/\".concat(n):\"\"),query:{skip:i,limit:o,selectUserKeys:u.union(h(c),h(l)).join(\",\")||void 0,includeUser:l?h(l).join(\",\"):void 0,includeStatistics:d?h(d).join(\",\"):void 0,version:g},authOptions:e}).then(function(t){var e=t.results;return(0,a.default)(e).call(e,function(t){var e=p._decode(t),n=e.user,r=e.statisticValue,i=e.rank,o=e.statistics,s=void 0===o?[]:o;return{user:n,value:r,rank:i,includedStatistics:(0,a.default)(s).call(s,v)}})})},getResults:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.skip,n=t.limit,r=t.selectUserKeys,i=t.includeUserKeys,o=t.includeStatistics,a=t.version,s=arguments.length>1?arguments[1]:void 0;return this._getResults({skip:e,limit:n,selectUserKeys:r,includeUserKeys:i,includeStatistics:o,version:a},s)},getResultsAroundUser:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;if(t&&\"string\"!=typeof t.id)return this.getResultsAroundUser(void 0,t,e);var r=e.limit,i=e.selectUserKeys,o=e.includeUserKeys,a=e.includeStatistics,s=e.version;return this._getResults({limit:r,selectUserKeys:i,includeUserKeys:o,includeStatistics:a,version:s},n,t?t.id:\"self\")},_update:function(t,e){var n=this;return f({method:\"PUT\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName),data:t,authOptions:e}).then(function(t){return n._finishFetch(t)})},updateVersionChangeInterval:function(t,e){return this._update({versionChangeInterval:t},e)},updateUpdateStrategy:function(t,e){return this._update({updateStrategy:t},e)},reset:function(t){var e=this;return f({method:\"PUT\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName,\"/incrementVersion\"),authOptions:t}).then(function(t){return e._finishFetch(t)})},destroy:function(t){return p.request({method:\"DELETE\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName),authOptions:t}).then(function(){})},getArchives:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.skip,r=e.limit,i=arguments.length>1?arguments[1]:void 0;return f({method:\"GET\",path:\"/leaderboard/leaderboards/\".concat(this.statisticName,\"/archives\"),query:{skip:n,limit:r},authOptions:i}).then(function(e){var n=e.results;return(0,a.default)(n).call(n,function(e){var n=e.version,r=e.status,i=e.url,o=e.activatedAt,a=e.deactivatedAt;return{statisticName:t.statisticName,version:n,status:r,url:i,activatedAt:d(o.iso),deactivatedAt:d(a.iso)}})})}})},function(t,e,n){\"use strict\";var r=n(149),i=r.Realtime,o=r.setAdapters,a=n(655),s=a.LiveQueryPlugin;i.__preRegisteredPlugins=[s],t.exports=function(t){t._sharedConfig.liveQueryRealtime=i;var e=t.setAdapters;return t.setAdapters=function(t){e(t),o(t)},t}},function(t,e,n){\"use strict\";(function(t){function r(t){return t&&\"object\"===(0,d.default)(t)&&\"default\"in t?t.default:t}function i(t,e){var n=(0,b.default)(t);if(_.default){var r=(0,_.default)(t);e&&(r=(0,w.default)(r).call(r,function(e){return(0,E.default)(t,e).enumerable})),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach(function(e){F(t,e,n[e])}):O.default?(0,T.default)(t,(0,O.default)(n)):i(Object(n)).forEach(function(e){(0,p.default)(t,e,(0,E.default)(n,e))})}return t}function a(t,e){var n=(0,b.default)(t);if(_.default){var r=(0,_.default)(t);e&&(r=(0,w.default)(r).call(r,function(e){return(0,E.default)(t,e).enumerable})),n.push.apply(n,r)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach(function(e){F(t,e,n[e])}):O.default?(0,T.default)(t,(0,O.default)(n)):a(Object(n)).forEach(function(e){(0,p.default)(t,e,(0,E.default)(n,e))})}return t}function u(t,e){var n=(0,b.default)(t);if(_.default){var r=(0,_.default)(t);e&&(r=(0,w.default)(r).call(r,function(e){return(0,E.default)(t,e).enumerable})),n.push.apply(n,r)}return n}function c(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?u(Object(n),!0).forEach(function(e){F(t,e,n[e])}):O.default?(0,T.default)(t,(0,O.default)(n)):u(Object(n)).forEach(function(e){(0,p.default)(t,e,(0,E.default)(n,e))})}return t}var f,l,h=n(1),d=h(n(91)),p=h(n(114)),v=h(n(567)),g=h(n(256)),m=h(n(247)),y=h(n(22)),b=h(n(146)),_=h(n(257)),w=h(n(243)),E=h(n(253)),O=h(n(578)),T=h(n(582)),S=h(n(13)),A=h(n(59)),x=h(n(90)),I=h(n(586)),j=h(n(36)),C=h(n(35)),N=h(n(592)),P=h(n(92)),R=h(n(259));(0,p.default)(e,\"__esModule\",{value:!0});var U=r(n(603)),k=r(n(607)),L=r(n(608)),M=r(n(610)),D=r(n(611)),F=r(n(614)),B=r(n(615)),V=r(n(617)),q=r(n(618)),W=r(n(58)),Y=r(n(619)),z=r(n(264)),G=r(n(646)),K=r(n(649)),Q=r(n(650)),J=r(n(651)),$=r(n(652)),H=r(n(653)),Z=n(244),X=U.newBuilder({}).import({package:\"push_server.messages2\",syntax:\"proto2\",options:{objc_class_prefix:\"AVIM\"},messages:[{name:\"JsonObjectMessage\",syntax:\"proto2\",fields:[{rule:\"required\",type:\"string\",name:\"data\",id:1}]},{name:\"UnreadTuple\",syntax:\"proto2\",fields:[{rule:\"required\",type:\"string\",name:\"cid\",id:1},{rule:\"required\",type:\"int32\",name:\"unread\",id:2},{rule:\"optional\",type:\"string\",name:\"mid\",id:3},{rule:\"optional\",type:\"int64\",name:\"timestamp\",id:4},{rule:\"optional\",type:\"string\",name:\"from\",id:5},{rule:\"optional\",type:\"string\",name:\"data\",id:6},{rule:\"optional\",type:\"int64\",name:\"patchTimestamp\",id:7},{rule:\"optional\",type:\"bool\",name:\"mentioned\",id:8},{rule:\"optional\",type:\"bytes\",name:\"binaryMsg\",id:9},{rule:\"optional\",type:\"int32\",name:\"convType\",id:10}]},{name:\"LogItem\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"from\",id:1},{rule:\"optional\",type:\"string\",name:\"data\",id:2},{rule:\"optional\",type:\"int64\",name:\"timestamp\",id:3},{rule:\"optional\",type:\"string\",name:\"msgId\",id:4},{rule:\"optional\",type:\"int64\",name:\"ackAt\",id:5},{rule:\"optional\",type:\"int64\",name:\"readAt\",id:6},{rule:\"optional\",type:\"int64\",name:\"patchTimestamp\",id:7},{rule:\"optional\",type:\"bool\",name:\"mentionAll\",id:8},{rule:\"repeated\",type:\"string\",name:\"mentionPids\",id:9},{rule:\"optional\",type:\"bool\",name:\"bin\",id:10},{rule:\"optional\",type:\"int32\",name:\"convType\",id:11}]},{name:\"ConvMemberInfo\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"pid\",id:1},{rule:\"optional\",type:\"string\",name:\"role\",id:2},{rule:\"optional\",type:\"string\",name:\"infoId\",id:3}]},{name:\"DataCommand\",syntax:\"proto2\",fields:[{rule:\"repeated\",type:\"string\",name:\"ids\",id:1},{rule:\"repeated\",type:\"JsonObjectMessage\",name:\"msg\",id:2},{rule:\"optional\",type:\"bool\",name:\"offline\",id:3}]},{name:\"SessionCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"int64\",name:\"t\",id:1},{rule:\"optional\",type:\"string\",name:\"n\",id:2},{rule:\"optional\",type:\"string\",name:\"s\",id:3},{rule:\"optional\",type:\"string\",name:\"ua\",id:4},{rule:\"optional\",type:\"bool\",name:\"r\",id:5},{rule:\"optional\",type:\"string\",name:\"tag\",id:6},{rule:\"optional\",type:\"string\",name:\"deviceId\",id:7},{rule:\"repeated\",type:\"string\",name:\"sessionPeerIds\",id:8},{rule:\"repeated\",type:\"string\",name:\"onlineSessionPeerIds\",id:9},{rule:\"optional\",type:\"string\",name:\"st\",id:10},{rule:\"optional\",type:\"int32\",name:\"stTtl\",id:11},{rule:\"optional\",type:\"int32\",name:\"code\",id:12},{rule:\"optional\",type:\"string\",name:\"reason\",id:13},{rule:\"optional\",type:\"string\",name:\"deviceToken\",id:14},{rule:\"optional\",type:\"bool\",name:\"sp\",id:15},{rule:\"optional\",type:\"string\",name:\"detail\",id:16},{rule:\"optional\",type:\"int64\",name:\"lastUnreadNotifTime\",id:17},{rule:\"optional\",type:\"int64\",name:\"lastPatchTime\",id:18},{rule:\"optional\",type:\"int64\",name:\"configBitmap\",id:19}]},{name:\"ErrorCommand\",syntax:\"proto2\",fields:[{rule:\"required\",type:\"int32\",name:\"code\",id:1},{rule:\"required\",type:\"string\",name:\"reason\",id:2},{rule:\"optional\",type:\"int32\",name:\"appCode\",id:3},{rule:\"optional\",type:\"string\",name:\"detail\",id:4},{rule:\"repeated\",type:\"string\",name:\"pids\",id:5},{rule:\"optional\",type:\"string\",name:\"appMsg\",id:6}]},{name:\"DirectCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"msg\",id:1},{rule:\"optional\",type:\"string\",name:\"uid\",id:2},{rule:\"optional\",type:\"string\",name:\"fromPeerId\",id:3},{rule:\"optional\",type:\"int64\",name:\"timestamp\",id:4},{rule:\"optional\",type:\"bool\",name:\"offline\",id:5},{rule:\"optional\",type:\"bool\",name:\"hasMore\",id:6},{rule:\"repeated\",type:\"string\",name:\"toPeerIds\",id:7},{rule:\"optional\",type:\"bool\",name:\"r\",id:10},{rule:\"optional\",type:\"string\",name:\"cid\",id:11},{rule:\"optional\",type:\"string\",name:\"id\",id:12},{rule:\"optional\",type:\"bool\",name:\"transient\",id:13},{rule:\"optional\",type:\"string\",name:\"dt\",id:14},{rule:\"optional\",type:\"string\",name:\"roomId\",id:15},{rule:\"optional\",type:\"string\",name:\"pushData\",id:16},{rule:\"optional\",type:\"bool\",name:\"will\",id:17},{rule:\"optional\",type:\"int64\",name:\"patchTimestamp\",id:18},{rule:\"optional\",type:\"bytes\",name:\"binaryMsg\",id:19},{rule:\"repeated\",type:\"string\",name:\"mentionPids\",id:20},{rule:\"optional\",type:\"bool\",name:\"mentionAll\",id:21},{rule:\"optional\",type:\"int32\",name:\"convType\",id:22}]},{name:\"AckCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"int32\",name:\"code\",id:1},{rule:\"optional\",type:\"string\",name:\"reason\",id:2},{rule:\"optional\",type:\"string\",name:\"mid\",id:3},{rule:\"optional\",type:\"string\",name:\"cid\",id:4},{rule:\"optional\",type:\"int64\",name:\"t\",id:5},{rule:\"optional\",type:\"string\",name:\"uid\",id:6},{rule:\"optional\",type:\"int64\",name:\"fromts\",id:7},{rule:\"optional\",type:\"int64\",name:\"tots\",id:8},{rule:\"optional\",type:\"string\",name:\"type\",id:9},{rule:\"repeated\",type:\"string\",name:\"ids\",id:10},{rule:\"optional\",type:\"int32\",name:\"appCode\",id:11},{rule:\"optional\",type:\"string\",name:\"appMsg\",id:12}]},{name:\"UnreadCommand\",syntax:\"proto2\",fields:[{rule:\"repeated\",type:\"UnreadTuple\",name:\"convs\",id:1},{rule:\"optional\",type:\"int64\",name:\"notifTime\",id:2}]},{name:\"ConvCommand\",syntax:\"proto2\",fields:[{rule:\"repeated\",type:\"string\",name:\"m\",id:1},{rule:\"optional\",type:\"bool\",name:\"transient\",id:2},{rule:\"optional\",type:\"bool\",name:\"unique\",id:3},{rule:\"optional\",type:\"string\",name:\"cid\",id:4},{rule:\"optional\",type:\"string\",name:\"cdate\",id:5},{rule:\"optional\",type:\"string\",name:\"initBy\",id:6},{rule:\"optional\",type:\"string\",name:\"sort\",id:7},{rule:\"optional\",type:\"int32\",name:\"limit\",id:8},{rule:\"optional\",type:\"int32\",name:\"skip\",id:9},{rule:\"optional\",type:\"int32\",name:\"flag\",id:10},{rule:\"optional\",type:\"int32\",name:\"count\",id:11},{rule:\"optional\",type:\"string\",name:\"udate\",id:12},{rule:\"optional\",type:\"int64\",name:\"t\",id:13},{rule:\"optional\",type:\"string\",name:\"n\",id:14},{rule:\"optional\",type:\"string\",name:\"s\",id:15},{rule:\"optional\",type:\"bool\",name:\"statusSub\",id:16},{rule:\"optional\",type:\"bool\",name:\"statusPub\",id:17},{rule:\"optional\",type:\"int32\",name:\"statusTTL\",id:18},{rule:\"optional\",type:\"string\",name:\"uniqueId\",id:19},{rule:\"optional\",type:\"string\",name:\"targetClientId\",id:20},{rule:\"optional\",type:\"int64\",name:\"maxReadTimestamp\",id:21},{rule:\"optional\",type:\"int64\",name:\"maxAckTimestamp\",id:22},{rule:\"optional\",type:\"bool\",name:\"queryAllMembers\",id:23},{rule:\"repeated\",type:\"MaxReadTuple\",name:\"maxReadTuples\",id:24},{rule:\"repeated\",type:\"string\",name:\"cids\",id:25},{rule:\"optional\",type:\"ConvMemberInfo\",name:\"info\",id:26},{rule:\"optional\",type:\"bool\",name:\"tempConv\",id:27},{rule:\"optional\",type:\"int32\",name:\"tempConvTTL\",id:28},{rule:\"repeated\",type:\"string\",name:\"tempConvIds\",id:29},{rule:\"repeated\",type:\"string\",name:\"allowedPids\",id:30},{rule:\"repeated\",type:\"ErrorCommand\",name:\"failedPids\",id:31},{rule:\"optional\",type:\"string\",name:\"next\",id:40},{rule:\"optional\",type:\"JsonObjectMessage\",name:\"results\",id:100},{rule:\"optional\",type:\"JsonObjectMessage\",name:\"where\",id:101},{rule:\"optional\",type:\"JsonObjectMessage\",name:\"attr\",id:103},{rule:\"optional\",type:\"JsonObjectMessage\",name:\"attrModified\",id:104}]},{name:\"RoomCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"roomId\",id:1},{rule:\"optional\",type:\"string\",name:\"s\",id:2},{rule:\"optional\",type:\"int64\",name:\"t\",id:3},{rule:\"optional\",type:\"string\",name:\"n\",id:4},{rule:\"optional\",type:\"bool\",name:\"transient\",id:5},{rule:\"repeated\",type:\"string\",name:\"roomPeerIds\",id:6},{rule:\"optional\",type:\"string\",name:\"byPeerId\",id:7}]},{name:\"LogsCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"cid\",id:1},{rule:\"optional\",type:\"int32\",name:\"l\",id:2},{rule:\"optional\",type:\"int32\",name:\"limit\",id:3},{rule:\"optional\",type:\"int64\",name:\"t\",id:4},{rule:\"optional\",type:\"int64\",name:\"tt\",id:5},{rule:\"optional\",type:\"string\",name:\"tmid\",id:6},{rule:\"optional\",type:\"string\",name:\"mid\",id:7},{rule:\"optional\",type:\"string\",name:\"checksum\",id:8},{rule:\"optional\",type:\"bool\",name:\"stored\",id:9},{rule:\"optional\",type:\"QueryDirection\",name:\"direction\",id:10,options:{default:\"OLD\"}},{rule:\"optional\",type:\"bool\",name:\"tIncluded\",id:11},{rule:\"optional\",type:\"bool\",name:\"ttIncluded\",id:12},{rule:\"optional\",type:\"int32\",name:\"lctype\",id:13},{rule:\"repeated\",type:\"LogItem\",name:\"logs\",id:105}],enums:[{name:\"QueryDirection\",syntax:\"proto2\",values:[{name:\"OLD\",id:1},{name:\"NEW\",id:2}]}]},{name:\"RcpCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"id\",id:1},{rule:\"optional\",type:\"string\",name:\"cid\",id:2},{rule:\"optional\",type:\"int64\",name:\"t\",id:3},{rule:\"optional\",type:\"bool\",name:\"read\",id:4},{rule:\"optional\",type:\"string\",name:\"from\",id:5}]},{name:\"ReadTuple\",syntax:\"proto2\",fields:[{rule:\"required\",type:\"string\",name:\"cid\",id:1},{rule:\"optional\",type:\"int64\",name:\"timestamp\",id:2},{rule:\"optional\",type:\"string\",name:\"mid\",id:3}]},{name:\"MaxReadTuple\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"pid\",id:1},{rule:\"optional\",type:\"int64\",name:\"maxAckTimestamp\",id:2},{rule:\"optional\",type:\"int64\",name:\"maxReadTimestamp\",id:3}]},{name:\"ReadCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"cid\",id:1},{rule:\"repeated\",type:\"string\",name:\"cids\",id:2},{rule:\"repeated\",type:\"ReadTuple\",name:\"convs\",id:3}]},{name:\"PresenceCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"StatusType\",name:\"status\",id:1},{rule:\"repeated\",type:\"string\",name:\"sessionPeerIds\",id:2},{rule:\"optional\",type:\"string\",name:\"cid\",id:3}]},{name:\"ReportCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"bool\",name:\"initiative\",id:1},{rule:\"optional\",type:\"string\",name:\"type\",id:2},{rule:\"optional\",type:\"string\",name:\"data\",id:3}]},{name:\"PatchItem\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"cid\",id:1},{rule:\"optional\",type:\"string\",name:\"mid\",id:2},{rule:\"optional\",type:\"int64\",name:\"timestamp\",id:3},{rule:\"optional\",type:\"bool\",name:\"recall\",id:4},{rule:\"optional\",type:\"string\",name:\"data\",id:5},{rule:\"optional\",type:\"int64\",name:\"patchTimestamp\",id:6},{rule:\"optional\",type:\"string\",name:\"from\",id:7},{rule:\"optional\",type:\"bytes\",name:\"binaryMsg\",id:8},{rule:\"optional\",type:\"bool\",name:\"mentionAll\",id:9},{rule:\"repeated\",type:\"string\",name:\"mentionPids\",id:10},{rule:\"optional\",type:\"int64\",name:\"patchCode\",id:11},{rule:\"optional\",type:\"string\",name:\"patchReason\",id:12}]},{name:\"PatchCommand\",syntax:\"proto2\",fields:[{rule:\"repeated\",type:\"PatchItem\",name:\"patches\",id:1},{rule:\"optional\",type:\"int64\",name:\"lastPatchTime\",id:2}]},{name:\"PubsubCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"cid\",id:1},{rule:\"repeated\",type:\"string\",name:\"cids\",id:2},{rule:\"optional\",type:\"string\",name:\"topic\",id:3},{rule:\"optional\",type:\"string\",name:\"subtopic\",id:4},{rule:\"repeated\",type:\"string\",name:\"topics\",id:5},{rule:\"repeated\",type:\"string\",name:\"subtopics\",id:6},{rule:\"optional\",type:\"JsonObjectMessage\",name:\"results\",id:7}]},{name:\"BlacklistCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"string\",name:\"srcCid\",id:1},{rule:\"repeated\",type:\"string\",name:\"toPids\",id:2},{rule:\"optional\",type:\"string\",name:\"srcPid\",id:3},{rule:\"repeated\",type:\"string\",name:\"toCids\",id:4},{rule:\"optional\",type:\"int32\",name:\"limit\",id:5},{rule:\"optional\",type:\"string\",name:\"next\",id:6},{rule:\"repeated\",type:\"string\",name:\"blockedPids\",id:8},{rule:\"repeated\",type:\"string\",name:\"blockedCids\",id:9},{rule:\"repeated\",type:\"string\",name:\"allowedPids\",id:10},{rule:\"repeated\",type:\"ErrorCommand\",name:\"failedPids\",id:11},{rule:\"optional\",type:\"int64\",name:\"t\",id:12},{rule:\"optional\",type:\"string\",name:\"n\",id:13},{rule:\"optional\",type:\"string\",name:\"s\",id:14}]},{name:\"GenericCommand\",syntax:\"proto2\",fields:[{rule:\"optional\",type:\"CommandType\",name:\"cmd\",id:1},{rule:\"optional\",type:\"OpType\",name:\"op\",id:2},{rule:\"optional\",type:\"string\",name:\"appId\",id:3},{rule:\"optional\",type:\"string\",name:\"peerId\",id:4},{rule:\"optional\",type:\"int32\",name:\"i\",id:5},{rule:\"optional\",type:\"string\",name:\"installationId\",id:6},{rule:\"optional\",type:\"int32\",name:\"priority\",id:7},{rule:\"optional\",type:\"int32\",name:\"service\",id:8},{rule:\"optional\",type:\"int64\",name:\"serverTs\",id:9},{rule:\"optional\",type:\"int64\",name:\"clientTs\",id:10},{rule:\"optional\",type:\"int32\",name:\"notificationType\",id:11},{rule:\"optional\",type:\"DataCommand\",name:\"dataMessage\",id:101},{rule:\"optional\",type:\"SessionCommand\",name:\"sessionMessage\",id:102},{rule:\"optional\",type:\"ErrorCommand\",name:\"errorMessage\",id:103},{rule:\"optional\",type:\"DirectCommand\",name:\"directMessage\",id:104},{rule:\"optional\",type:\"AckCommand\",name:\"ackMessage\",id:105},{rule:\"optional\",type:\"UnreadCommand\",name:\"unreadMessage\",id:106},{rule:\"optional\",type:\"ReadCommand\",name:\"readMessage\",id:107},{rule:\"optional\",type:\"RcpCommand\",name:\"rcpMessage\",id:108},{rule:\"optional\",type:\"LogsCommand\",name:\"logsMessage\",id:109},{rule:\"optional\",type:\"ConvCommand\",name:\"convMessage\",id:110},{rule:\"optional\",type:\"RoomCommand\",name:\"roomMessage\",id:111},{rule:\"optional\",type:\"PresenceCommand\",name:\"presenceMessage\",id:112},{rule:\"optional\",type:\"ReportCommand\",name:\"reportMessage\",id:113},{rule:\"optional\",type:\"PatchCommand\",name:\"patchMessage\",id:114},{rule:\"optional\",type:\"PubsubCommand\",name:\"pubsubMessage\",id:115},{rule:\"optional\",type:\"BlacklistCommand\",name:\"blacklistMessage\",id:116}]}],enums:[{name:\"CommandType\",syntax:\"proto2\",values:[{name:\"session\",id:0},{name:\"conv\",id:1},{name:\"direct\",id:2},{name:\"ack\",id:3},{name:\"rcp\",id:4},{name:\"unread\",id:5},{name:\"logs\",id:6},{name:\"error\",id:7},{name:\"login\",id:8},{name:\"data\",id:9},{name:\"room\",id:10},{name:\"read\",id:11},{name:\"presence\",id:12},{name:\"report\",id:13},{name:\"echo\",id:14},{name:\"loggedin\",id:15},{name:\"logout\",id:16},{name:\"loggedout\",id:17},{name:\"patch\",id:18},{name:\"pubsub\",id:19},{name:\"blacklist\",id:20},{name:\"goaway\",id:21}]},{name:\"OpType\",syntax:\"proto2\",values:[{name:\"open\",id:1},{name:\"add\",id:2},{name:\"remove\",id:3},{name:\"close\",id:4},{name:\"opened\",id:5},{name:\"closed\",id:6},{name:\"query\",id:7},{name:\"query_result\",id:8},{name:\"conflict\",id:9},{name:\"added\",id:10},{name:\"removed\",id:11},{name:\"refresh\",id:12},{name:\"refreshed\",id:13},{name:\"start\",id:30},{name:\"started\",id:31},{name:\"joined\",id:32},{name:\"members_joined\",id:33},{name:\"left\",id:39},{name:\"members_left\",id:40},{name:\"results\",id:42},{name:\"count\",id:43},{name:\"result\",id:44},{name:\"update\",id:45},{name:\"updated\",id:46},{name:\"mute\",id:47},{name:\"unmute\",id:48},{name:\"status\",id:49},{name:\"members\",id:50},{name:\"max_read\",id:51},{name:\"is_member\",id:52},{name:\"member_info_update\",id:53},{name:\"member_info_updated\",id:54},{name:\"member_info_changed\",id:55},{name:\"join\",id:80},{name:\"invite\",id:81},{name:\"leave\",id:82},{name:\"kick\",id:83},{name:\"reject\",id:84},{name:\"invited\",id:85},{name:\"kicked\",id:86},{name:\"upload\",id:100},{name:\"uploaded\",id:101},{name:\"subscribe\",id:120},{name:\"subscribed\",id:121},{name:\"unsubscribe\",id:122},{name:\"unsubscribed\",id:123},{name:\"is_subscribed\",id:124},{name:\"modify\",id:150},{name:\"modified\",id:151},{name:\"block\",id:170},{name:\"unblock\",id:171},{name:\"blocked\",id:172},{name:\"unblocked\",id:173},{name:\"members_blocked\",id:174},{name:\"members_unblocked\",id:175},{name:\"check_block\",id:176},{name:\"check_result\",id:177},{name:\"add_shutup\",id:180},{name:\"remove_shutup\",id:181},{name:\"query_shutup\",id:182},{name:\"shutup_added\",id:183},{name:\"shutup_removed\",id:184},{name:\"shutup_result\",id:185},{name:\"shutuped\",id:186},{name:\"unshutuped\",id:187},{name:\"members_shutuped\",id:188},{name:\"members_unshutuped\",id:189},{name:\"check_shutup\",id:190}]},{name:\"StatusType\",syntax:\"proto2\",values:[{name:\"on\",id:1},{name:\"off\",id:2}]}],isNamespace:!0}).build(),tt=X.push_server.messages2,et=tt.JsonObjectMessage,nt=tt.UnreadTuple,rt=tt.LogItem,it=tt.DataCommand,ot=tt.SessionCommand,at=tt.ErrorCommand,st=tt.DirectCommand,ut=tt.AckCommand,ct=tt.UnreadCommand,ft=tt.ConvCommand,lt=tt.RoomCommand,ht=tt.LogsCommand,dt=tt.RcpCommand,pt=tt.ReadTuple,vt=tt.MaxReadTuple,gt=tt.ReadCommand,mt=tt.PresenceCommand,yt=tt.ReportCommand,bt=tt.GenericCommand,_t=tt.BlacklistCommand,wt=tt.PatchCommand,Et=tt.PatchItem,Ot=tt.ConvMemberInfo,Tt=tt.CommandType,St=tt.OpType,At=tt.StatusType,xt=(0,v.default)({__proto__:null,JsonObjectMessage:et,UnreadTuple:nt,LogItem:rt,DataCommand:it,SessionCommand:ot,ErrorCommand:at,DirectCommand:st,AckCommand:ut,UnreadCommand:ct,ConvCommand:ft,RoomCommand:lt,LogsCommand:ht,RcpCommand:dt,ReadTuple:pt,MaxReadTuple:vt,ReadCommand:gt,PresenceCommand:mt,ReportCommand:yt,GenericCommand:bt,BlacklistCommand:_t,PatchCommand:wt,PatchItem:Et,ConvMemberInfo:Ot,CommandType:Tt,OpType:St,StatusType:At}),It={},jt=function(t){var e=It[t];if(void 0===e)throw new Error(\"\".concat(t,\" adapter is not configured\"));return e},Ct=function(t){(0,g.default)(It,t)},Nt=void 0!==t?t:\"undefined\"!=typeof window?window:{},Pt=(0,m.default)(\"expired\"),Rt=W(\"LC:Expirable\"),Ut=function(){function t(t,e){this.originalValue=t,\"number\"==typeof e&&(this.expiredAt=Date.now()+e)}return K(t,[{key:\"value\",get:function(){var t=this.expiredAt&&this.expiredAt<=Date.now();return t&&Rt(\"expired: \".concat(this.originalValue)),t?Pt:this.originalValue}}]),t}();Ut.EXPIRED=Pt;var kt,Lt=W(\"LC:Cache\"),Mt=function(){function t(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"anonymous\";this.name=t,this._map={}}var e=t.prototype;return e.get=function(t){var e,n=this._map[t];if(n){var r=n.value;if(r!==Ut.EXPIRED)return Lt(\"[%s] hit: %s\",this.name,t),r;delete this._map[t]}return Lt((0,y.default)(e=\"[\".concat(this.name,\"] missed: \")).call(e,t)),null},e.set=function(t,e,n){Lt(\"[%s] set: %s %d\",this.name,t,n),this._map[t]=new Ut(e,n)},t}(),Dt={enable:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"LC*\";return W.enable(t)},disable:W.disable},Ft=function t(e){var n=new S.default(e[0]);return 1===e.length?n:n.catch(function(){return t((0,A.default)(e).call(e,1))})},Bt=function(t){return function(e){return t(e),e}},Vt=(Nt.navigator&&Nt.navigator.userAgent&&(0,x.default)(f=Nt.navigator.userAgent).call(f,\"MSIE 10.\"),new I.default),qt=function(t){return Vt.has(t)||Vt.set(t,{}),Vt.get(t)},Wt=function t(e,n){if(!H(e))return e;var r=o({},e);return(0,b.default)(r).forEach(function(e){var i=r[e];i===n?delete r[e]:r[e]=t(i,n)}),r},Yt=function(t){return Wt(t,null)},zt=function(t){return Yt(JSON.parse((0,j.default)(t)))},Gt=function(t){return Array.isArray(t)?t:void 0===t||null===t?[]:[t]},Kt=\"object\"===(\"undefined\"==typeof wx?\"undefined\":$(wx))&&\"function\"==typeof wx.connectSocket,Qt=function(t){return\"-MdYXbMMI\"!==(0,A.default)(t).call(t,-9)},Jt=function(t,e){if(!t||!e)return!1;if(t.byteLength!==e.byteLength)return!1;var n=new Uint8Array(t),r=new Uint8Array(e);return!n.some(function(t,e){return t!==r[e]})},$t=W(\"LC:WebSocketPlus\"),Ht=function(t){return Math.min(1e3*Math.pow(2,t),3e5)},Zt=function(t,e,n){return s(s({},n),{},{value:function(){var t,r;this.checkConnectionAvailability(e);for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return(r=n.value).call.apply(r,(0,y.default)(t=[this]).call(t,o))}})},Xt=(kt=function(t){function e(e,n){var r;return r=t.call(this)||this,r.init(),r._protocol=n,S.default.resolve(\"function\"==typeof e?e():e).then(Gt).then(function(t){return r._urls=t,r._open()}).then(function(){r.__postponeTimeoutTimer=r._postponeTimeoutTimer.bind(V(r)),Nt.addEventListener&&(r.__pause=function(){r.can(\"pause\")&&r.pause()},r.__resume=function(){r.can(\"resume\")&&r.resume()},Nt.addEventListener(\"offline\",r.__pause),Nt.addEventListener(\"online\",r.__resume)),r.open()}).catch(r.throw.bind(V(r))),r}q(e,t),K(e,[{key:\"urls\",get:function(){return this._urls},set:function(t){this._urls=Gt(t)}}]);var n=e.prototype;return n._open=function(){var t=this;return this._createWs(this._urls,this._protocol).then(function(e){var n,r=G(t._urls),i=r[0],o=(0,A.default)(r).call(r,1);return t._urls=(0,y.default)(n=[]).call(n,D(o),[i]),e})},n._createWs=function(t,e){var n=this;return Ft((0,C.default)(t).call(t,function(t){return function(r,i){var o;$t((0,y.default)(o=\"connect [\".concat(t,\"] \")).call(o,e));var a=jt(\"WebSocket\"),s=e?new a(t,e):new a(t);s.binaryType=n.binaryType||\"arraybuffer\",s.onopen=function(){return r(s)},s.onclose=function(e){return i(e instanceof Error?e:new Error(\"Failed to connect [\".concat(t,\"]\")))},s.onerror=s.onclose}})).then(function(t){return n._ws=t,n._ws.onclose=n._handleClose.bind(n),n._ws.onmessage=n._handleMessage.bind(n),t})},n._destroyWs=function(){var t=this._ws;t&&(t.onopen=null,t.onclose=null,t.onerror=null,t.onmessage=null,this._ws=null,t.close())},n.onbeforeevent=function(t,e,n){for(var r,i,o=arguments.length,a=new Array(o>3?o-3:0),s=3;s<o;s++)a[s-3]=arguments[s];$t((0,y.default)(r=(0,y.default)(i=\"\".concat(t,\": \")).call(i,e,\" -> \")).call(r,n,\" %o\"),a)},n.onopen=function(){this.emit(\"open\")},n.onconnected=function(){this._startConnectionKeeper()},n.onleaveconnected=function(t,e,n){this._stopConnectionKeeper(),this._destroyWs(),\"offline\"!==n&&\"disconnected\"!==n||this.emit(\"disconnect\")},n.onpause=function(){this.emit(\"offline\")},n.onbeforeresume=function(){this.emit(\"online\")},n.onreconnect=function(){this.emit(\"reconnect\")},n.ondisconnected=function(t,e,n){var r,i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=\"offline\"===e?0:Ht.call(null,o);$t((0,y.default)(r=\"schedule attempt=\".concat(o,\" delay=\")).call(r,a)),this.emit(\"schedule\",o,a),this.__scheduledRetry&&clearTimeout(this.__scheduledRetry),this.__scheduledRetry=setTimeout(function(){i.is(\"disconnected\")&&i.retry(o)},a)},n.onretry=function(t,e,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;this.emit(\"retry\",i),this._open().then(function(){return r.can(\"reconnect\")&&r.reconnect()},function(){return r.can(\"fail\")&&r.fail(i+1)})},n.onerror=function(t,e,n,r){this.emit(\"error\",r)},n.onclose=function(){Nt.removeEventListener&&(this.__pause&&Nt.removeEventListener(\"offline\",this.__pause),this.__resume&&Nt.removeEventListener(\"online\",this.__resume))},n.checkConnectionAvailability=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"API\";if(!this.is(\"connected\")){var e,n=this.current;throw console.warn((0,y.default)(e=\"\".concat(t,\" should not be called when the connection is \")).call(e,n)),(this.is(\"disconnected\")||this.is(\"reconnecting\"))&&console.warn(\"disconnect and reconnect event should be handled to avoid such calls.\"),new Error(\"Connection unavailable\")}},n._ping=function(){$t(\"ping\");try{this.ping()}catch(t){console.warn(\"websocket ping error: \".concat(t.message))}},n.ping=function(){this._ws.ping?this._ws.ping():console.warn(\"The WebSocket implement does not support sending ping frame.\\n        Override ping method to use application defined ping/pong mechanism.\")},n._postponeTimeoutTimer=function(){var t=this;$t(\"_postponeTimeoutTimer\"),this._clearTimeoutTimers(),this._timeoutTimer=setTimeout(function(){$t(\"timeout\"),t.disconnect()},38e4)},n._clearTimeoutTimers=function(){this._timeoutTimer&&clearTimeout(this._timeoutTimer)},n._startConnectionKeeper=function(){$t(\"start connection keeper\"),this._heartbeatTimer=setInterval(this._ping.bind(this),18e4);var t=this._ws.addListener||this._ws.addEventListener;if(!t)return void $t(\"connection keeper disabled due to the lack of #addEventListener.\");t.call(this._ws,\"message\",this.__postponeTimeoutTimer),t.call(this._ws,\"pong\",this.__postponeTimeoutTimer),this._postponeTimeoutTimer()},n._stopConnectionKeeper=function(){$t(\"stop connection keeper\");var t=this._ws.removeListener||this._ws.removeEventListener;t&&(t.call(this._ws,\"message\",this.__postponeTimeoutTimer),t.call(this._ws,\"pong\",this.__postponeTimeoutTimer),this._clearTimeoutTimers()),this._heartbeatTimer&&clearInterval(this._heartbeatTimer)},n._handleClose=function(t){var e;$t((0,y.default)(e=\"ws closed [\".concat(t.code,\"] \")).call(e,t.reason)),this.isFinished()||this.handleClose(t)},n.handleClose=function(){this.disconnect()},n.send=function(t){$t(\"send\",t),this._ws.send(t)},n._handleMessage=function(t){$t(\"message\",t.data),this.handleMessage(t.data)},n.handleMessage=function(t){this.emit(\"message\",t)},e}(k),Q(kt.prototype,\"_ping\",[Zt],(0,E.default)(kt.prototype,\"_ping\"),kt.prototype),Q(kt.prototype,\"send\",[Zt],(0,E.default)(kt.prototype,\"send\"),kt.prototype),kt);J.create({target:Xt.prototype,initial:{state:\"initialized\",event:\"init\",defer:!0},terminal:\"closed\",events:[{name:\"open\",from:\"initialized\",to:\"connected\"},{name:\"disconnect\",from:\"connected\",to:\"disconnected\"},{name:\"retry\",from:\"disconnected\",to:\"reconnecting\"},{name:\"fail\",from:\"reconnecting\",to:\"disconnected\"},{name:\"reconnect\",from:\"reconnecting\",to:\"connected\"},{name:\"pause\",from:[\"connected\",\"disconnected\",\"reconnecting\"],to:\"offline\"},{},{name:\"resume\",from:\"offline\",to:\"disconnected\"},{name:\"close\",from:[\"connected\",\"disconnected\",\"reconnecting\",\"offline\"],to:\"closed\"},{name:\"throw\",from:\"*\",to:\"error\"}]});var te=(0,v.default)({1e3:{name:\"CLOSE_NORMAL\"},1006:{name:\"CLOSE_ABNORMAL\"},4100:{name:\"APP_NOT_AVAILABLE\",message:\"App not exists or realtime message service is disabled.\"},4102:{name:\"SIGNATURE_FAILED\",message:\"Login signature mismatch.\"},4103:{name:\"INVALID_LOGIN\",message:\"Malformed clientId.\"},4105:{name:\"SESSION_REQUIRED\",message:\"Message sent before session opened.\"},4107:{name:\"READ_TIMEOUT\"},4108:{name:\"LOGIN_TIMEOUT\"},4109:{name:\"FRAME_TOO_LONG\"},4110:{name:\"INVALID_ORIGIN\",message:\"Access denied by domain whitelist.\"},4111:{name:\"SESSION_CONFLICT\"},4112:{name:\"SESSION_TOKEN_EXPIRED\"},4113:{name:\"APP_QUOTA_EXCEEDED\",message:\"The daily active users limit exceeded.\"},4116:{name:\"MESSAGE_SENT_QUOTA_EXCEEDED\",message:\"Command sent too fast.\"},4200:{name:\"INTERNAL_ERROR\",message:\"Internal error, please contact LeanCloud for support.\"},4301:{name:\"CONVERSATION_API_FAILED\",message:\"Upstream Conversatoin API failed, see error.detail for details.\"},4302:{name:\"CONVERSATION_SIGNATURE_FAILED\",message:\"Conversation action signature mismatch.\"},4303:{name:\"CONVERSATION_NOT_FOUND\"},4304:{name:\"CONVERSATION_FULL\"},4305:{name:\"CONVERSATION_REJECTED_BY_APP\",message:\"Conversation action rejected by hook.\"},4306:{name:\"CONVERSATION_UPDATE_FAILED\"},4307:{name:\"CONVERSATION_READ_ONLY\"},4308:{name:\"CONVERSATION_NOT_ALLOWED\"},4309:{name:\"CONVERSATION_UPDATE_REJECTED\",message:\"Conversation update rejected because the client is not a member.\"},4310:{name:\"CONVERSATION_QUERY_FAILED\",message:\"Conversation query failed because it is too expansive.\"},4311:{name:\"CONVERSATION_LOG_FAILED\"},4312:{name:\"CONVERSATION_LOG_REJECTED\",message:\"Message query rejected because the client is not a member of the conversation.\"},4313:{name:\"SYSTEM_CONVERSATION_REQUIRED\"},4314:{name:\"NORMAL_CONVERSATION_REQUIRED\"},4315:{name:\"CONVERSATION_BLACKLISTED\",message:\"Blacklisted in the conversation.\"},4316:{name:\"TRANSIENT_CONVERSATION_REQUIRED\"},4317:{name:\"CONVERSATION_MEMBERSHIP_REQUIRED\"},4318:{name:\"CONVERSATION_API_QUOTA_EXCEEDED\",message:\"LeanCloud API quota exceeded. You may upgrade your plan.\"},4323:{name:\"TEMPORARY_CONVERSATION_EXPIRED\",message:\"Temporary conversation expired or does not exist.\"},4401:{name:\"INVALID_MESSAGING_TARGET\",message:\"Conversation does not exist or client is not a member.\"},4402:{name:\"MESSAGE_REJECTED_BY_APP\",message:\"Message rejected by hook.\"},4403:{name:\"MESSAGE_OWNERSHIP_REQUIRED\"},4404:{name:\"MESSAGE_NOT_FOUND\"},4405:{name:\"MESSAGE_UPDATE_REJECTED_BY_APP\",message:\"Message update rejected by hook.\"},4406:{name:\"MESSAGE_EDIT_DISABLED\"},4407:{name:\"MESSAGE_RECALL_DISABLED\"},5130:{name:\"OWNER_PROMOTION_NOT_ALLOWED\",message:\"Updating a member's role to owner is not allowed.\"}}),ee=(0,v.default)((0,N.default)(l=(0,b.default)(te)).call(l,function(t,e){return(0,g.default)(t,F({},te[e].name,Number(e)))},{})),ne=function(t){var e=t.code,n=t.reason,r=t.appCode,i=t.detail,o=t.error,a=n||i||o,s=n;!a&&te[e]&&(s=te[e].name,a=te[e].message||s),a||(a=\"Unknow Error: \".concat(e));var u=new Error(a);return(0,g.default)(u,{code:e,appCode:r,detail:i,name:s})},re=W(\"LC:Connection\"),ie=(0,m.default)(\"expire\"),oe=function(t){return!(t.cmd===Tt.direct||t.cmd===Tt.session&&t.op===St.open||t.cmd===Tt.conv&&(t.op===St.start||t.op===St.update||t.op===St.members))},ae=function(t){function e(e,n){var r,i,o=n.format,a=n.version;re(\"initializing Connection\");var s=(0,y.default)(r=\"lc.\".concat(o,\".\")).call(r,a);return i=t.call(this,e,s)||this,i._protocolFormat=o,i._commands={},i._serialId=0,i}q(e,t);var n=e.prototype;return n.send=function(){function e(t){return n.apply(this,arguments)}var n=M(L.mark(function e(n){var r,i,o,a,s,u,c=this,f=arguments;return L.wrap(function(e){for(var l,h;;)switch(e.prev=e.next){case 0:if(!(r=!(f.length>1&&void 0!==f[1])||f[1])){e.next=11;break}if(!oe(n)){e.next=8;break}if(i=n.toArrayBuffer(),!(a=(0,P.default)(l=z(this._commands)).call(l,function(t){var e=t.buffer,r=t.command;return r.cmd===n.cmd&&r.op===n.op&&Jt(e,i)}))){e.next=8;break}return console.warn((0,y.default)(h=\"Duplicated command [cmd:\".concat(n.cmd,\" op:\")).call(h,n.op,\"] is throttled.\")),e.abrupt(\"return\",a.promise);case 8:this._serialId+=1,o=this._serialId,n.i=o;case 11:if(re.enabled&&re(\"↑ %O sent\",zt(n)),\"proto2base64\"===this._protocolFormat?s=n.toBase64():n.toArrayBuffer&&(s=n.toArrayBuffer()),s){e.next=15;break}throw new TypeError(\"\".concat(n,\" is not a GenericCommand\"));case 15:if(t.prototype.send.call(this,s),r){e.next=18;break}return e.abrupt(\"return\",void 0);case 18:return u=new S.default(function(t,e){c._commands[o]={command:n,buffer:i,resolve:t,reject:e,timeout:setTimeout(function(){if(c._commands[o]){var t;re.enabled&&re(\"✗ %O timeout\",zt(n)),e(ne({error:(0,y.default)(t=\"Command Timeout [cmd:\".concat(n.cmd,\" op:\")).call(t,n.op,\"]\"),name:\"COMMAND_TIMEOUT\"})),delete c._commands[o]}},2e4)}}),this._commands[o].promise=u,e.abrupt(\"return\",u);case 21:case\"end\":return e.stop()}},e,this)}));return e}(),n.handleMessage=function(t){var e;try{e=bt.decode(t),re.enabled&&re(\"↓ %O received\",zt(e))}catch(e){return void console.warn(\"Decode message failed:\",e.message,t)}var n=e.i;if(n)this._commands[n]?(clearTimeout(this._commands[n].timeout),e.cmd===Tt.error?this._commands[n].reject(ne(e.errorMessage)):this._commands[n].resolve(e),delete this._commands[n]):console.warn(\"Unexpected command received with serialId [\".concat(n,\"],\\n         which have timed out or never been requested.\"));else switch(e.cmd){case Tt.error:return void this.emit(\"error\",ne(e.errorMessage));case Tt.goaway:return void this.emit(ie);default:this.emit(\"message\",e)}},n.ping=function(){return this.send(new bt({cmd:Tt.echo})).catch(function(t){return re(\"ping failed:\",t)})},e}(Xt),se=W(\"LC:request\"),ue=function(t){var e=t.method,n=void 0===e?\"GET\":e,r=t.url,i=t.query,o=t.headers,a=t.data,s=t.timeout,u=r;if(i){var c,f,l,h=(0,w.default)(c=(0,C.default)(f=(0,b.default)(i)).call(f,function(t){var e,n=i[t];if(void 0!==n){var r=H(n)?(0,j.default)(n):n;return(0,y.default)(e=\"\".concat(encodeURIComponent(t),\"=\")).call(e,encodeURIComponent(r))}})).call(c,function(t){return t}).join(\"&\");u=(0,y.default)(l=\"\".concat(u,\"?\")).call(l,h)}se(\"Req: %O %O %O\",n,u,{headers:o,data:a});var d=jt(\"request\"),p=d(u,{method:n,headers:o,data:a}).then(function(t){if(!1===t.ok){var e=ne(t.data);throw e.response=t,e}return se(\"Res: %O %O %O\",u,t.status,t.data),t.data}).catch(function(t){throw t.response&&se(\"Error: %O %O %O\",u,t.response.status,t.response.data),t});return s?Z.timeout(p,s):p},ce=function(t,e){t&&t.forEach(function(t){try{t(e)}catch(e){throw t._pluginName&&(e.message+=\"[\".concat(t._pluginName,\"]\")),e}})},fe=function(t,e){var n;return(0,N.default)(n=Gt(t)).call(n,function(t,n){return t.then(function(t){return!1!==t&&n.apply(void 0,D(e))}).catch(function(t){throw n._pluginName&&(t.message+=\"[\".concat(n._pluginName,\"]\")),t})},S.default.resolve(!0))},le=\"5.0.0-rc.7\",he=W(\"LC:Realtime\"),de=new Mt(\"push-router\"),pe={},ve=function(t){function e(n){var r,i,o=n.plugins,a=B(n,[\"plugins\"]);he(\"initializing Realtime %s %O\",le,a),i=t.call(this)||this;var s=a.appId;if(\"string\"!=typeof s)throw new TypeError(\"appId [\".concat(s,\"] is not a string\"));if(pe[s])throw new Error(\"App [\".concat(s,\"] is already initialized.\"));if(pe[s]=!0,\"string\"!=typeof a.appKey)throw new TypeError(\"appKey [\".concat(a.appKey,\"] is not a string\"));if(Qt(s)&&!a.server)throw new TypeError(\"server option is required for apps from CN region\");i._options=c({appId:void 0,appKey:void 0,noBinary:!1,ssl:!0,RTMServerName:\"undefined\"!=typeof process?process.env.RTM_SERVER_NAME:void 0},a),i._cache=new Mt(\"endpoints\");var u=qt(V(i));u.clients=new R.default,u.pendingClients=new R.default;var f=(0,y.default)(r=[]).call(r,D(Gt(e.__preRegisteredPlugins)),D(Gt(o)));return he(\"Using plugins %o\",(0,C.default)(f).call(f,function(t){return t.name})),i._plugins=(0,N.default)(f).call(f,function(t,e){return(0,b.default)(e).forEach(function(n){if({}.hasOwnProperty.call(e,n)&&\"name\"!==n){var r;e.name&&Gt(e[n]).forEach(function(t){t._pluginName=e.name}),t[n]=(0,y.default)(r=Gt(t[n])).call(r,e[n])}}),t},{}),ce(i._plugins.onRealtimeCreate,V(i)),i}q(e,t);var n=e.prototype;return n._request=function(){function t(t){return e.apply(this,arguments)}var e=M(L.mark(function t(e){var n,r,i,o,a,s,u,f,l,h,d,p,v,g;return L.wrap(function(t){for(var m,b;;)switch(t.prev=t.next){case 0:if(n=e.method,r=e.url,i=e.version,o=void 0===i?\"1.1\":i,a=e.path,s=e.query,u=e.headers,f=e.data,l=r){t.next=9;break}return h=this._options,d=h.appId,p=h.server,t.next=6,this.constructor._getServerUrls({appId:d,server:p});case 6:v=t.sent,g=v.api,l=(0,y.default)(m=(0,y.default)(b=\"\".concat(g,\"/\")).call(b,o)).call(m,a);case 9:return t.abrupt(\"return\",ue({url:l,method:n,query:s,headers:c({\"X-LC-Id\":this._options.appId,\"X-LC-Key\":this._options.appKey},u),data:f}));case 10:case\"end\":return t.stop()}},t,this)}));return t}(),n._open=function(){var t=this;if(this._openPromise)return this._openPromise;var e=\"protobuf2\";this._options.noBinary&&(e=\"proto2base64\");var n={format:e,version:3};return this._openPromise=new S.default(function(e,r){he(\"No connection established, create a new one.\");var i=new ae(function(){return t._getRTMServers(t._options)},n);i.on(\"open\",function(){return e(i)}).on(\"error\",function(e){delete t._openPromise,r(e)}).on(ie,M(L.mark(function e(){return L.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return he(\"Connection expired. Refresh endpoints.\"),t._cache.set(\"endpoints\",null,0),e.next=4,t._getRTMServers(t._options);case 4:i.urls=e.sent,i.disconnect();case 6:case\"end\":return e.stop()}},e)}))).on(\"message\",t._dispatchCommand.bind(t)),[\"disconnect\",\"reconnect\",\"retry\",\"schedule\",\"offline\",\"online\"].forEach(function(e){return i.on(e,function(){for(var n,r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];he(\"\".concat(e,\" event emitted. %o\"),i),t.emit.apply(t,(0,y.default)(n=[e]).call(n,i)),\"reconnect\"!==e&&qt(t).clients.forEach(function(t){var n;t.emit.apply(t,(0,y.default)(n=[e]).call(n,i))})})}),i.handleClose=function(t){[ee.APP_NOT_AVAILABLE,ee.INVALID_LOGIN,ee.INVALID_ORIGIN].some(function(e){return e===t.code})?this.throw(ne(t)):this.disconnect()},qt(t).connection=i}),this._openPromise},n._getRTMServers=function(){function t(t){return e.apply(this,arguments)}var e=M(L.mark(function t(e){var n,r,i,o,a,s;return L.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.RTMServers){t.next=2;break}return t.abrupt(\"return\",Y(Gt(e.RTMServers)));case 2:if(!(r=this._cache.get(\"endpoints\"))){t.next=7;break}n=r,t.next=14;break;case 7:return t.next=9,this.constructor._fetchRTMServers(e);case 9:if(n=t.sent,i=n,o=i.server,a=i.secondary,s=i.ttl,\"string\"==typeof o||\"string\"==typeof a||\"number\"==typeof s){t.next=13;break}throw new Error(\"malformed RTM route response: \".concat((0,j.default)(n)));case 13:this._cache.set(\"endpoints\",n,1e3*n.ttl);case 14:return he(\"endpoint info: %O\",n),t.abrupt(\"return\",[n.server,n.secondary]);case 16:case\"end\":return t.stop()}},t,this)}));return t}(),e._getServerUrls=function(){function t(t){return e.apply(this,arguments)}var e=M(L.mark(function t(e){var n,r,i,o;return L.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.appId,r=e.server,he(\"fetch server urls\"),!r){t.next=6;break}if(\"string\"==typeof r){t.next=5;break}return t.abrupt(\"return\",r);case 5:return t.abrupt(\"return\",{RTMRouter:r,api:r});case 6:if(!(i=de.get(n))){t.next=9;break}return t.abrupt(\"return\",i);case 9:return o=\"https://\",t.abrupt(\"return\",ue({url:\"https://app-router.com/2/route\",query:{appId:n},timeout:2e4}).then(Bt(he)).then(function(t){var e,r,i=t.rtm_router_server,a=t.api_server,s=t.ttl,u=void 0===s?3600:s;if(!i)throw new Error(\"rtm router not exists\");var c={RTMRouter:(0,y.default)(e=\"\".concat(o)).call(e,i),api:(0,y.default)(r=\"\".concat(o)).call(r,a)};return de.set(n,c,1e3*u),c}).catch(function(){var t,e,r,i,a=(0,A.default)(n).call(n,0,8).toLowerCase();return{RTMRouter:(0,y.default)(t=(0,y.default)(e=\"\".concat(o)).call(e,a,\".rtm.\")).call(t,\"lncldglobal.com\"),api:(0,y.default)(r=(0,y.default)(i=\"\".concat(o)).call(i,a,\".api.\")).call(r,\"lncldglobal.com\")}}));case 11:case\"end\":return t.stop()}},t)}));return t}(),e._fetchRTMServers=function(t){var e=t.appId,n=t.ssl,r=t.server,i=t.RTMServerName;return he(\"fetch endpoint info\"),this._getServerUrls({appId:e,server:r}).then(Bt(he)).then(function(t){var r=t.RTMRouter;return ue({url:\"\".concat(r,\"/v1/route\"),query:{appId:e,secure:n,features:Kt?\"wechat\":void 0,server:i,_t:Date.now()},timeout:2e4}).then(Bt(he))})},n._close=function(){this._openPromise&&this._openPromise.then(function(t){return t.close()}),delete this._openPromise},n.retry=function(){var t=qt(this),e=t.connection;if(!e)throw new Error(\"no connection established\");if(e.cannot(\"retry\"))throw new Error(\"retrying not allowed when not disconnected. the connection is now \".concat(e.current));return e.retry()},n.pause=function(){var t=qt(this),e=t.connection;e&&e.can(\"pause\")&&e.pause()},n.resume=function(){var t=qt(this),e=t.connection;e&&e.can(\"resume\")&&e.resume()},n._registerPending=function(t){qt(this).pendingClients.add(t)},n._deregisterPending=function(t){qt(this).pendingClients.delete(t)},n._register=function(t){qt(this).clients.add(t)},n._deregister=function(t){var e=qt(this);e.clients.delete(t),e.clients.size+e.pendingClients.size===0&&this._close()},n._dispatchCommand=function(t){return fe(this._plugins.beforeCommandDispatch,[t,this]).then(function(e){return!!e&&he(\"[WARN] Unexpected message received: %O\",zt(t))})},e}(k),ge=S.default;e.EventEmitter=k,e.Promise=ge,e.Protocals=xt,e.Protocols=xt,e.Realtime=ve,e.debug=Dt,e.getAdapter=jt,e.setAdapters=Ct}).call(e,n(72))},function(t,e,n){t.exports=n(568)},function(t,e,n){var r=n(569);t.exports=r},function(t,e,n){n(570);var r=n(6);t.exports=r.Object.freeze},function(t,e,n){var r=n(0),i=n(254),o=n(2),a=n(11),s=n(93).onFreeze,u=Object.freeze;r({target:\"Object\",stat:!0,forced:o(function(){u(1)}),sham:!i},{freeze:function(t){return u&&a(t)?u(s(t)):t}})},function(t,e,n){var r=n(2);t.exports=r(function(){if(\"function\"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,\"a\",{value:8})}})},function(t,e,n){var r=n(573);t.exports=r},function(t,e,n){n(574);var r=n(6);t.exports=r.Object.assign},function(t,e,n){var r=n(0),i=n(575);r({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},function(t,e,n){\"use strict\";var r=n(14),i=n(4),o=n(15),a=n(2),s=n(104),u=n(103),c=n(119),f=n(34),l=n(94),h=Object.assign,d=Object.defineProperty,p=i([].concat);t.exports=!h||a(function(){if(r&&1!==h({b:1},h(d({},\"a\",{enumerable:!0,get:function(){d(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i=\"abcdefghijklmnopqrst\";return t[n]=7,i.split(\"\").forEach(function(t){e[t]=t}),7!=h({},t)[n]||s(h({},e)).join(\"\")!=i})?function(t,e){for(var n=f(t),i=arguments.length,a=1,h=u.f,d=c.f;i>a;)for(var v,g=l(arguments[a++]),m=h?p(s(g),h(g)):s(g),y=m.length,b=0;y>b;)v=m[b++],r&&!o(d,g,v)||(n[v]=g[v]);return n}:h},function(t,e,n){var r=n(577);t.exports=r},function(t,e,n){n(238);var r=n(6);t.exports=r.Object.getOwnPropertySymbols},function(t,e,n){t.exports=n(579)},function(t,e,n){var r=n(580);t.exports=r},function(t,e,n){n(581);var r=n(6);t.exports=r.Object.getOwnPropertyDescriptors},function(t,e,n){var r=n(0),i=n(14),o=n(156),a=n(32),s=n(60),u=n(89);r({target:\"Object\",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,r=a(t),i=s.f,c=o(r),f={},l=0;c.length>l;)void 0!==(n=i(r,e=c[l++]))&&u(f,e,n);return f}})},function(t,e,n){t.exports=n(583)},function(t,e,n){var r=n(584);t.exports=r},function(t,e,n){n(585);var r=n(6),i=r.Object,o=t.exports=function(t,e){return i.defineProperties(t,e)};i.defineProperties.sham&&(o.sham=!0)},function(t,e,n){var r=n(0),i=n(14),o=n(127).f;r({target:\"Object\",stat:!0,forced:Object.defineProperties!==o,sham:!i},{defineProperties:o})},function(t,e,n){t.exports=n(587)},function(t,e,n){var r=n(588);n(44),t.exports=r},function(t,e,n){n(41),n(63),n(589);var r=n(6);t.exports=r.WeakMap},function(t,e,n){n(590)},function(t,e,n){\"use strict\";var r,i=n(7),o=n(4),a=n(150),s=n(93),u=n(258),c=n(591),f=n(11),l=n(255),h=n(42).enforce,d=n(164),p=!i.ActiveXObject&&\"ActiveXObject\"in i,v=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},g=u(\"WeakMap\",v,c);if(d&&p){r=c.getConstructor(v,\"WeakMap\",!0),s.enable();var m=g.prototype,y=o(m.delete),b=o(m.has),_=o(m.get),w=o(m.set);a(m,{delete:function(t){if(f(t)&&!l(t)){var e=h(this);return e.frozen||(e.frozen=new r),y(this,t)||e.frozen.delete(t)}return y(this,t)},has:function(t){if(f(t)&&!l(t)){var e=h(this);return e.frozen||(e.frozen=new r),b(this,t)||e.frozen.has(t)}return b(this,t)},get:function(t){if(f(t)&&!l(t)){var e=h(this);return e.frozen||(e.frozen=new r),b(this,t)?_(this,t):e.frozen.get(t)}return _(this,t)},set:function(t,e){if(f(t)&&!l(t)){var n=h(this);n.frozen||(n.frozen=new r),b(this,t)?w(this,t,e):n.frozen.set(t,e)}else w(this,t,e);return this}})}},function(t,e,n){\"use strict\";var r=n(4),i=n(150),o=n(93).getWeakData,a=n(20),s=n(11),u=n(107),c=n(40),f=n(70),l=n(12),h=n(42),d=h.set,p=h.getterFor,v=f.find,g=f.findIndex,m=r([].splice),y=0,b=function(t){return t.frozen||(t.frozen=new _)},_=function(){this.entries=[]},w=function(t,e){return v(t.entries,function(t){return t[0]===e})};_.prototype={get:function(t){var e=w(this,t);if(e)return e[1]},has:function(t){return!!w(this,t)},set:function(t,e){var n=w(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=g(this.entries,function(e){return e[0]===t});return~e&&m(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,r){var f=t(function(t,i){u(t,h),d(t,{type:e,id:y++,frozen:void 0}),void 0!=i&&c(i,t[r],{that:t,AS_ENTRIES:n})}),h=f.prototype,v=p(e),g=function(t,e,n){var r=v(t),i=o(a(e),!0);return!0===i?b(r).set(e,n):i[r.id]=n,t};return i(h,{delete:function(t){var e=v(this);if(!s(t))return!1;var n=o(t);return!0===n?b(e).delete(t):n&&l(n,e.id)&&delete n[e.id]},has:function(t){var e=v(this);if(!s(t))return!1;var n=o(t);return!0===n?b(e).has(t):n&&l(n,e.id)}}),i(h,n?{get:function(t){var e=v(this);if(s(t)){var n=o(t);return!0===n?b(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return g(this,t,e)}}:{add:function(t){return g(this,t,!0)}}),f}}},function(t,e,n){t.exports=n(593)},function(t,e,n){var r=n(594);t.exports=r},function(t,e,n){var r=n(19),i=n(595),o=Array.prototype;t.exports=function(t){var e=t.reduce;return t===o||r(o,t)&&e===o.reduce?i:e}},function(t,e,n){n(596);var r=n(38);t.exports=r(\"Array\").reduce},function(t,e,n){\"use strict\";var r=n(0),i=n(597).left,o=n(225),a=n(75),s=n(106),u=o(\"reduce\"),c=!s&&a>79&&a<83;r({target:\"Array\",proto:!0,forced:!u||c},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(31),i=n(34),o=n(94),a=n(39),s=TypeError,u=function(t){return function(e,n,u,c){r(n);var f=i(e),l=o(f),h=a(f),d=t?h-1:0,p=t?-1:1;if(u<2)for(;;){if(d in l){c=l[d],d+=p;break}if(d+=p,t?d<0:h<=d)throw s(\"Reduce of empty array with no initial value\")}for(;t?d>=0:h>d;d+=p)d in l&&(c=n(c,l[d],d,f));return c}};t.exports={left:u(!1),right:u(!0)}},function(t,e,n){var r=n(599);n(44),t.exports=r},function(t,e,n){n(41),n(63),n(600),n(65);var r=n(6);t.exports=r.Set},function(t,e,n){n(601)},function(t,e,n){\"use strict\";var r=n(258),i=n(602);r(\"Set\",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},i)},function(t,e,n){\"use strict\";var r=n(23).f,i=n(49),o=n(150),a=n(48),s=n(107),u=n(40),c=n(130),f=n(166),l=n(14),h=n(93).fastKey,d=n(42),p=d.set,v=d.getterFor;t.exports={getConstructor:function(t,e,n,c){var f=t(function(t,r){s(t,d),p(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),l||(t.size=0),void 0!=r&&u(r,t[c],{that:t,AS_ENTRIES:n})}),d=f.prototype,g=v(e),m=function(t,e,n){var r,i,o=g(t),a=y(t,e);return a?a.value=n:(o.last=a={index:i=h(e,!0),key:e,value:n,previous:r=o.last,next:void 0,removed:!1},o.first||(o.first=a),r&&(r.next=a),l?o.size++:t.size++,\"F\"!==i&&(o.index[i]=a)),t},y=function(t,e){var n,r=g(t),i=h(e);if(\"F\"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==e)return n};return o(d,{clear:function(){for(var t=this,e=g(t),n=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete n[r.index],r=r.next;e.first=e.last=void 0,l?e.size=0:t.size=0},delete:function(t){var e=this,n=g(e),r=y(e,t);if(r){var i=r.next,o=r.previous;delete n.index[r.index],r.removed=!0,o&&(o.next=i),i&&(i.previous=o),n.first==r&&(n.first=i),n.last==r&&(n.last=o),l?n.size--:e.size--}return!!r},forEach:function(t){for(var e,n=g(this),r=a(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(r(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!y(this,t)}}),o(d,n?{get:function(t){var e=y(this,t);return e&&e.value},set:function(t,e){return m(this,0===t?0:t,e)}}:{add:function(t){return m(this,t=0===t?0:t,t)}}),l&&r(d,\"size\",{get:function(){return g(this).size}}),f},setStrong:function(t,e,n){var r=e+\" Iterator\",i=v(e),o=v(r);c(t,e,function(t,e){p(this,{type:r,target:t,state:i(t),kind:e,last:void 0})},function(){for(var t=o(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?\"keys\"==e?{value:n.key,done:!1}:\"values\"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})},n?\"entries\":\"values\",!n,!0),f(e)}}},function(t,e,n){var r,i,o;/**\n * @license protobuf.js (c) 2013 Daniel Wirtz <dcode@dcode.io>\n * Released under the Apache License, Version 2.0\n * see: https://github.com/dcodeIO/protobuf.js for details\n */\n!function(a,s){i=[n(604)],r=s,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(t,e){\"use strict\";var r={};return r.ByteBuffer=t,r.Long=t.Long||null,r.VERSION=\"5.0.3\",r.WIRE_TYPES={},r.WIRE_TYPES.VARINT=0,r.WIRE_TYPES.BITS64=1,r.WIRE_TYPES.LDELIM=2,r.WIRE_TYPES.STARTGROUP=3,r.WIRE_TYPES.ENDGROUP=4,r.WIRE_TYPES.BITS32=5,r.PACKABLE_WIRE_TYPES=[r.WIRE_TYPES.VARINT,r.WIRE_TYPES.BITS64,r.WIRE_TYPES.BITS32],r.TYPES={int32:{name:\"int32\",wireType:r.WIRE_TYPES.VARINT,defaultValue:0},uint32:{name:\"uint32\",wireType:r.WIRE_TYPES.VARINT,defaultValue:0},sint32:{name:\"sint32\",wireType:r.WIRE_TYPES.VARINT,defaultValue:0},int64:{name:\"int64\",wireType:r.WIRE_TYPES.VARINT,defaultValue:r.Long?r.Long.ZERO:void 0},uint64:{name:\"uint64\",wireType:r.WIRE_TYPES.VARINT,defaultValue:r.Long?r.Long.UZERO:void 0},sint64:{name:\"sint64\",wireType:r.WIRE_TYPES.VARINT,defaultValue:r.Long?r.Long.ZERO:void 0},bool:{name:\"bool\",wireType:r.WIRE_TYPES.VARINT,defaultValue:!1},double:{name:\"double\",wireType:r.WIRE_TYPES.BITS64,defaultValue:0},string:{name:\"string\",wireType:r.WIRE_TYPES.LDELIM,defaultValue:\"\"},bytes:{name:\"bytes\",wireType:r.WIRE_TYPES.LDELIM,defaultValue:null},fixed32:{name:\"fixed32\",wireType:r.WIRE_TYPES.BITS32,defaultValue:0},sfixed32:{name:\"sfixed32\",wireType:r.WIRE_TYPES.BITS32,defaultValue:0},fixed64:{name:\"fixed64\",wireType:r.WIRE_TYPES.BITS64,defaultValue:r.Long?r.Long.UZERO:void 0},sfixed64:{name:\"sfixed64\",wireType:r.WIRE_TYPES.BITS64,defaultValue:r.Long?r.Long.ZERO:void 0},float:{name:\"float\",wireType:r.WIRE_TYPES.BITS32,defaultValue:0},enum:{name:\"enum\",wireType:r.WIRE_TYPES.VARINT,defaultValue:0},message:{name:\"message\",wireType:r.WIRE_TYPES.LDELIM,defaultValue:null},group:{name:\"group\",wireType:r.WIRE_TYPES.STARTGROUP,defaultValue:null}},r.MAP_KEY_TYPES=[r.TYPES.int32,r.TYPES.sint32,r.TYPES.sfixed32,r.TYPES.uint32,r.TYPES.fixed32,r.TYPES.int64,r.TYPES.sint64,r.TYPES.sfixed64,r.TYPES.uint64,r.TYPES.fixed64,r.TYPES.bool,r.TYPES.string,r.TYPES.bytes],r.ID_MIN=1,r.ID_MAX=536870911,r.convertFieldsToCamelCase=!1,r.populateAccessors=!0,r.populateDefaults=!0,r.Util=function(){var t={};return t.IS_NODE=!(\"object\"!=typeof process||process+\"\"!=\"[object process]\"||process.browser),t.XHR=function(){for(var t=[function(){return new XMLHttpRequest},function(){return new ActiveXObject(\"Msxml2.XMLHTTP\")},function(){return new ActiveXObject(\"Msxml3.XMLHTTP\")},function(){return new ActiveXObject(\"Microsoft.XMLHTTP\")}],e=null,n=0;n<t.length;n++){try{e=t[n]()}catch(t){continue}break}if(!e)throw Error(\"XMLHttpRequest is not supported\");return e},t.fetch=function(e,r){if(r&&\"function\"!=typeof r&&(r=null),t.IS_NODE){var i=n(606);if(r)i.readFile(e,function(t,e){r(t?null:\"\"+e)});else try{return i.readFileSync(e)}catch(t){return null}}else{var o=t.XHR();if(o.open(\"GET\",e,!!r),o.setRequestHeader(\"Accept\",\"text/plain\"),\"function\"==typeof o.overrideMimeType&&o.overrideMimeType(\"text/plain\"),!r)return o.send(null),200==o.status||0==o.status&&\"string\"==typeof o.responseText?o.responseText:null;if(o.onreadystatechange=function(){4==o.readyState&&r(200==o.status||0==o.status&&\"string\"==typeof o.responseText?o.responseText:null)},4==o.readyState)return;o.send(null)}},t.toCamelCase=function(t){return t.replace(/_([a-zA-Z])/g,function(t,e){return e.toUpperCase()})},t}(),r.Lang={DELIM:/[\\s\\{\\}=;:\\[\\],'\"\\(\\)<>]/g,RULE:/^(?:required|optional|repeated|map)$/,TYPE:/^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,NAME:/^[a-zA-Z_][a-zA-Z_0-9]*$/,TYPEDEF:/^[a-zA-Z][a-zA-Z_0-9]*$/,TYPEREF:/^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,FQTYPEREF:/^(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)+$/,NUMBER:/^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,NUMBER_DEC:/^(?:[1-9][0-9]*|0)$/,NUMBER_HEX:/^0[xX][0-9a-fA-F]+$/,NUMBER_OCT:/^0[0-7]+$/,NUMBER_FLT:/^([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,BOOL:/^(?:true|false)$/i,ID:/^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,NEGID:/^\\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,WHITESPACE:/\\s/,STRING:/(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")|(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g,STRING_DQ:/(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")/g,STRING_SQ:/(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g},r.Reflect=function(e){function n(n){if(\"string\"==typeof n&&(n=e.TYPES[n]),void 0===n.defaultValue)throw Error(\"default value for type \"+n.name+\" is not supported\");return n==e.TYPES.bytes?new t(0):n.defaultValue}function r(t,n){if(t&&\"number\"==typeof t.low&&\"number\"==typeof t.high&&\"boolean\"==typeof t.unsigned&&t.low===t.low&&t.high===t.high)return new e.Long(t.low,t.high,void 0===n?t.unsigned:n);if(\"string\"==typeof t)return e.Long.fromString(t,n||!1,10);if(\"number\"==typeof t)return e.Long.fromNumber(t,n||!1);throw Error(\"not convertible to Long\")}function i(t,n){var r=n.readVarint32(),o=7&r,a=r>>>3;switch(o){case e.WIRE_TYPES.VARINT:do{r=n.readUint8()}while(128==(128&r));break;case e.WIRE_TYPES.BITS64:n.offset+=8;break;case e.WIRE_TYPES.LDELIM:r=n.readVarint32(),n.offset+=r;break;case e.WIRE_TYPES.STARTGROUP:i(a,n);break;case e.WIRE_TYPES.ENDGROUP:if(a===t)return!1;throw Error(\"Illegal GROUPEND after unknown group: \"+a+\" (\"+t+\" expected)\");case e.WIRE_TYPES.BITS32:n.offset+=4;break;default:throw Error(\"Illegal wire type in unknown group \"+t+\": \"+o)}return!0}var o={},a=function(t,e,n){this.builder=t,this.parent=e,this.name=n,this.className},s=a.prototype;s.fqn=function(){for(var t=this.name,e=this;;){if(null==(e=e.parent))break;t=e.name+\".\"+t}return t},s.toString=function(t){return(t?this.className+\" \":\"\")+this.fqn()},s.build=function(){throw Error(this.toString(!0)+\" cannot be built directly\")},o.T=a;var u=function(t,e,n,r,i){a.call(this,t,e,n),this.className=\"Namespace\",this.children=[],this.options=r||{},this.syntax=i||\"proto2\"},c=u.prototype=Object.create(a.prototype);c.getChildren=function(t){if(null==(t=t||null))return this.children.slice();for(var e=[],n=0,r=this.children.length;n<r;++n)this.children[n]instanceof t&&e.push(this.children[n]);return e},c.addChild=function(t){var e;if(e=this.getChild(t.name))if(e instanceof h.Field&&e.name!==e.originalName&&null===this.getChild(e.originalName))e.name=e.originalName;else{if(!(t instanceof h.Field&&t.name!==t.originalName&&null===this.getChild(t.originalName)))throw Error(\"Duplicate name in namespace \"+this.toString(!0)+\": \"+t.name);t.name=t.originalName}this.children.push(t)},c.getChild=function(t){for(var e=\"number\"==typeof t?\"id\":\"name\",n=0,r=this.children.length;n<r;++n)if(this.children[n][e]===t)return this.children[n];return null},c.resolve=function(t,e){var n=\"string\"==typeof t?t.split(\".\"):t,r=this,i=0;if(\"\"===n[i]){for(;null!==r.parent;)r=r.parent;i++}var a;do{do{if(!(r instanceof o.Namespace)){r=null;break}if(!(a=r.getChild(n[i]))||!(a instanceof o.T)||e&&!(a instanceof o.Namespace)){r=null;break}r=a,i++}while(i<n.length);if(null!=r)break;if(null!==this.parent)return this.parent.resolve(t,e)}while(null!=r);return r},c.qn=function(t){var e=[],n=t;do{e.unshift(n.name),n=n.parent}while(null!==n);for(var r=1;r<=e.length;r++){var i=e.slice(e.length-r);if(t===this.resolve(i,t instanceof o.Namespace))return i.join(\".\")}return t.fqn()},c.build=function(){for(var t,e={},n=this.children,r=0,i=n.length;r<i;++r)(t=n[r])instanceof u&&(e[t.name]=t.build());return Object.defineProperty&&Object.defineProperty(e,\"$options\",{value:this.buildOpt()}),e},c.buildOpt=function(){for(var t={},e=Object.keys(this.options),n=0,r=e.length;n<r;++n){var i=e[n],o=this.options[e[n]];t[i]=o}return t},c.getOption=function(t){return void 0===t?this.options:void 0!==this.options[t]?this.options[t]:null},o.Namespace=u;var f=function(t,n,r,i,o){if(this.type=t,this.resolvedType=n,this.isMapKey=r,this.syntax=i,this.name=o,r&&e.MAP_KEY_TYPES.indexOf(t)<0)throw Error(\"Invalid map key type: \"+t.name)},l=f.prototype;f.defaultFieldValue=n,l.toString=function(){return(this.name||\"\")+(this.isMapKey?\"map\":\"value\")+\" element\"},l.verifyValue=function(n){function i(t,e){throw Error(\"Illegal value for \"+o.toString(!0)+\" of type \"+o.type.name+\": \"+t+\" (\"+e+\")\")}var o=this;switch(this.type){case e.TYPES.int32:case e.TYPES.sint32:case e.TYPES.sfixed32:return(\"number\"!=typeof n||n===n&&n%1!=0)&&i(typeof n,\"not an integer\"),n>4294967295?0|n:n;case e.TYPES.uint32:case e.TYPES.fixed32:return(\"number\"!=typeof n||n===n&&n%1!=0)&&i(typeof n,\"not an integer\"),n<0?n>>>0:n;case e.TYPES.int64:case e.TYPES.sint64:case e.TYPES.sfixed64:if(e.Long)try{return r(n,!1)}catch(t){i(typeof n,t.message)}else i(typeof n,\"requires Long.js\");case e.TYPES.uint64:case e.TYPES.fixed64:if(e.Long)try{return r(n,!0)}catch(t){i(typeof n,t.message)}else i(typeof n,\"requires Long.js\");case e.TYPES.bool:return\"boolean\"!=typeof n&&i(typeof n,\"not a boolean\"),n;case e.TYPES.float:case e.TYPES.double:return\"number\"!=typeof n&&i(typeof n,\"not a number\"),n;case e.TYPES.string:return\"string\"==typeof n||n&&n instanceof String||i(typeof n,\"not a string\"),\"\"+n;case e.TYPES.bytes:return t.isByteBuffer(n)?n:t.wrap(n,\"base64\");case e.TYPES.enum:var a=this.resolvedType.getChildren(e.Reflect.Enum.Value);for(u=0;u<a.length;u++){if(a[u].name==n)return a[u].id;if(a[u].id==n)return a[u].id}if(\"proto3\"===this.syntax)return(\"number\"!=typeof n||n===n&&n%1!=0)&&i(typeof n,\"not an integer\"),(n>4294967295||n<0)&&i(typeof n,\"not in range for uint32\"),n;i(n,\"not a valid enum value\");case e.TYPES.group:case e.TYPES.message:if(n&&\"object\"==typeof n||i(typeof n,\"object expected\"),n instanceof this.resolvedType.clazz)return n;if(n instanceof e.Builder.Message){var s={};for(var u in n)n.hasOwnProperty(u)&&(s[u]=n[u]);n=s}return new this.resolvedType.clazz(n)}throw Error(\"[INTERNAL] Illegal value for \"+this.toString(!0)+\": \"+n+\" (undefined type \"+this.type+\")\")},l.calculateLength=function(n,r){if(null===r)return 0;var i;switch(this.type){case e.TYPES.int32:return r<0?t.calculateVarint64(r):t.calculateVarint32(r);case e.TYPES.uint32:return t.calculateVarint32(r);case e.TYPES.sint32:return t.calculateVarint32(t.zigZagEncode32(r));case e.TYPES.fixed32:case e.TYPES.sfixed32:case e.TYPES.float:return 4;case e.TYPES.int64:case e.TYPES.uint64:return t.calculateVarint64(r);case e.TYPES.sint64:return t.calculateVarint64(t.zigZagEncode64(r));case e.TYPES.fixed64:case e.TYPES.sfixed64:return 8;case e.TYPES.bool:return 1;case e.TYPES.enum:return t.calculateVarint32(r);case e.TYPES.double:return 8;case e.TYPES.string:return i=t.calculateUTF8Bytes(r),t.calculateVarint32(i)+i;case e.TYPES.bytes:if(r.remaining()<0)throw Error(\"Illegal value for \"+this.toString(!0)+\": \"+r.remaining()+\" bytes remaining\");return t.calculateVarint32(r.remaining())+r.remaining();case e.TYPES.message:return i=this.resolvedType.calculate(r),t.calculateVarint32(i)+i;case e.TYPES.group:return(i=this.resolvedType.calculate(r))+t.calculateVarint32(n<<3|e.WIRE_TYPES.ENDGROUP)}throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(!0)+\": \"+r+\" (unknown type)\")},l.encodeValue=function(n,r,i){if(null===r)return i;switch(this.type){case e.TYPES.int32:r<0?i.writeVarint64(r):i.writeVarint32(r);break;case e.TYPES.uint32:i.writeVarint32(r);break;case e.TYPES.sint32:i.writeVarint32ZigZag(r);break;case e.TYPES.fixed32:i.writeUint32(r);break;case e.TYPES.sfixed32:i.writeInt32(r);break;case e.TYPES.int64:case e.TYPES.uint64:i.writeVarint64(r);break;case e.TYPES.sint64:i.writeVarint64ZigZag(r);break;case e.TYPES.fixed64:i.writeUint64(r);break;case e.TYPES.sfixed64:i.writeInt64(r);break;case e.TYPES.bool:\"string\"==typeof r?i.writeVarint32(\"false\"===r.toLowerCase()?0:!!r):i.writeVarint32(r?1:0);break;case e.TYPES.enum:i.writeVarint32(r);break;case e.TYPES.float:i.writeFloat32(r);break;case e.TYPES.double:i.writeFloat64(r);break;case e.TYPES.string:i.writeVString(r);break;case e.TYPES.bytes:if(r.remaining()<0)throw Error(\"Illegal value for \"+this.toString(!0)+\": \"+r.remaining()+\" bytes remaining\");var o=r.offset;i.writeVarint32(r.remaining()),i.append(r),r.offset=o;break;case e.TYPES.message:var a=(new t).LE();this.resolvedType.encode(r,a),i.writeVarint32(a.offset),i.append(a.flip());break;case e.TYPES.group:this.resolvedType.encode(r,i),i.writeVarint32(n<<3|e.WIRE_TYPES.ENDGROUP);break;default:throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(!0)+\": \"+r+\" (unknown type)\")}return i},l.decode=function(t,n,r){if(n!=this.type.wireType)throw Error(\"Unexpected wire type for element\");var i,o;switch(this.type){case e.TYPES.int32:return 0|t.readVarint32();case e.TYPES.uint32:return t.readVarint32()>>>0;case e.TYPES.sint32:return 0|t.readVarint32ZigZag();case e.TYPES.fixed32:return t.readUint32()>>>0;case e.TYPES.sfixed32:return 0|t.readInt32();case e.TYPES.int64:return t.readVarint64();case e.TYPES.uint64:return t.readVarint64().toUnsigned();case e.TYPES.sint64:return t.readVarint64ZigZag();case e.TYPES.fixed64:return t.readUint64();case e.TYPES.sfixed64:return t.readInt64();case e.TYPES.bool:return!!t.readVarint32();case e.TYPES.enum:return t.readVarint32();case e.TYPES.float:return t.readFloat();case e.TYPES.double:return t.readDouble();case e.TYPES.string:return t.readVString();case e.TYPES.bytes:if(o=t.readVarint32(),t.remaining()<o)throw Error(\"Illegal number of bytes for \"+this.toString(!0)+\": \"+o+\" required but got only \"+t.remaining());return i=t.clone(),i.limit=i.offset+o,t.offset+=o,i;case e.TYPES.message:return o=t.readVarint32(),this.resolvedType.decode(t,o);case e.TYPES.group:return this.resolvedType.decode(t,-1,r)}throw Error(\"[INTERNAL] Illegal decode type\")},l.valueFromString=function(n){if(!this.isMapKey)throw Error(\"valueFromString() called on non-map-key element\");switch(this.type){case e.TYPES.int32:case e.TYPES.sint32:case e.TYPES.sfixed32:case e.TYPES.uint32:case e.TYPES.fixed32:return this.verifyValue(parseInt(n));case e.TYPES.int64:case e.TYPES.sint64:case e.TYPES.sfixed64:case e.TYPES.uint64:case e.TYPES.fixed64:return this.verifyValue(n);case e.TYPES.bool:return\"true\"===n;case e.TYPES.string:return this.verifyValue(n);case e.TYPES.bytes:return t.fromBinary(n)}},l.valueToString=function(t){if(!this.isMapKey)throw Error(\"valueToString() called on non-map-key element\");return this.type===e.TYPES.bytes?t.toString(\"binary\"):t.toString()},o.Element=f;var h=function(t,e,n,r,i,o){u.call(this,t,e,n,r,o),this.className=\"Message\",this.extensions=void 0,this.clazz=null,this.isGroup=!!i,this._fields=null,this._fieldsById=null,this._fieldsByName=null},d=h.prototype=Object.create(u.prototype);d.build=function(n){if(this.clazz&&!n)return this.clazz;var r=function(e,n){function r(n,i,o,a){if(null===n||\"object\"!=typeof n){if(a&&a instanceof e.Reflect.Enum){var s=e.Reflect.Enum.getName(a.object,n);if(null!==s)return s}return n}if(t.isByteBuffer(n))return i?n.toBase64():n.toBuffer();if(e.Long.isLong(n))return o?n.toString():e.Long.fromValue(n);var u;if(Array.isArray(n))return u=[],n.forEach(function(t,e){u[e]=r(t,i,o,a)}),u;if(u={},n instanceof e.Map){for(var c=n.entries(),f=c.next();!f.done;f=c.next())u[n.keyElem.valueToString(f.value[0])]=r(f.value[1],i,o,n.valueElem.resolvedType);return u}var l=n.$type,h=void 0;for(var d in n)n.hasOwnProperty(d)&&(l&&(h=l.getChild(d))?u[d]=r(n[d],i,o,h.resolvedType):u[d]=r(n[d],i,o));return u}var i=n.getChildren(e.Reflect.Message.Field),o=n.getChildren(e.Reflect.Message.OneOf),a=function(r,s){e.Builder.Message.call(this);for(var u=0,c=o.length;u<c;++u)this[o[u].name]=null;for(u=0,c=i.length;u<c;++u){var f=i[u];this[f.name]=f.repeated?[]:f.map?new e.Map(f):null,!f.required&&\"proto3\"!==n.syntax||null===f.defaultValue||(this[f.name]=f.defaultValue)}if(arguments.length>0){var l;if(1!==arguments.length||null===r||\"object\"!=typeof r||!(\"function\"!=typeof r.encode||r instanceof a)||Array.isArray(r)||r instanceof e.Map||t.isByteBuffer(r)||r instanceof ArrayBuffer||e.Long&&r instanceof e.Long)for(u=0,c=arguments.length;u<c;++u)void 0!==(l=arguments[u])&&this.$set(i[u].name,l);else this.$set(r)}},s=a.prototype=Object.create(e.Builder.Message.prototype);s.add=function(t,r,i){var o=n._fieldsByName[t];if(!i){if(!o)throw Error(this+\"#\"+t+\" is undefined\");if(!(o instanceof e.Reflect.Message.Field))throw Error(this+\"#\"+t+\" is not a field: \"+o.toString(!0));if(!o.repeated)throw Error(this+\"#\"+t+\" is not a repeated field\");r=o.verifyValue(r,!0)}return null===this[t]&&(this[t]=[]),this[t].push(r),this},s.$add=s.add,s.set=function(t,r,i){if(t&&\"object\"==typeof t){i=r;for(var o in t)t.hasOwnProperty(o)&&void 0!==(r=t[o])&&void 0===n._oneofsByName[o]&&this.$set(o,r,i);return this}var a=n._fieldsByName[t];if(i)this[t]=r;else{if(!a)throw Error(this+\"#\"+t+\" is not a field: undefined\");if(!(a instanceof e.Reflect.Message.Field))throw Error(this+\"#\"+t+\" is not a field: \"+a.toString(!0));this[a.name]=r=a.verifyValue(r)}if(a&&a.oneof){var s=this[a.oneof.name];null!==r?(null!==s&&s!==a.name&&(this[s]=null),this[a.oneof.name]=a.name):s===t&&(this[a.oneof.name]=null)}return this},s.$set=s.set,s.get=function(t,r){if(r)return this[t];var i=n._fieldsByName[t];if(!(i&&i instanceof e.Reflect.Message.Field))throw Error(this+\"#\"+t+\" is not a field: undefined\");if(!(i instanceof e.Reflect.Message.Field))throw Error(this+\"#\"+t+\" is not a field: \"+i.toString(!0));return this[i.name]},s.$get=s.get;for(var u=0;u<i.length;u++){var c=i[u];c instanceof e.Reflect.Message.ExtensionField||n.builder.options.populateAccessors&&function(t){var e=t.originalName.replace(/(_[a-zA-Z])/g,function(t){return t.toUpperCase().replace(\"_\",\"\")});e=e.substring(0,1).toUpperCase()+e.substring(1);var r=t.originalName.replace(/([A-Z])/g,function(t){return\"_\"+t}),i=function(e,n){return this[t.name]=n?e:t.verifyValue(e),this},o=function(){return this[t.name]};null===n.getChild(\"set\"+e)&&(s[\"set\"+e]=i),null===n.getChild(\"set_\"+r)&&(s[\"set_\"+r]=i),null===n.getChild(\"get\"+e)&&(s[\"get\"+e]=o),null===n.getChild(\"get_\"+r)&&(s[\"get_\"+r]=o)}(c)}s.encode=function(e,r){\"boolean\"==typeof e&&(r=e,e=void 0);var i=!1;e||(e=new t,i=!0);var o=e.littleEndian;try{return n.encode(this,e.LE(),r),(i?e.flip():e).LE(o)}catch(t){throw e.LE(o),t}},a.encode=function(t,e,n){return new a(t).encode(e,n)},s.calculate=function(){return n.calculate(this)},s.encodeDelimited=function(e,r){var i=!1;e||(e=new t,i=!0);var o=(new t).LE();return n.encode(this,o,r).flip(),e.writeVarint32(o.remaining()),e.append(o),i?e.flip():e},s.encodeAB=function(){try{return this.encode().toArrayBuffer()}catch(t){throw t.encoded&&(t.encoded=t.encoded.toArrayBuffer()),t}},s.toArrayBuffer=s.encodeAB,s.encodeNB=function(){try{return this.encode().toBuffer()}catch(t){throw t.encoded&&(t.encoded=t.encoded.toBuffer()),t}},s.toBuffer=s.encodeNB,s.encode64=function(){try{return this.encode().toBase64()}catch(t){throw t.encoded&&(t.encoded=t.encoded.toBase64()),t}},s.toBase64=s.encode64,s.encodeHex=function(){try{return this.encode().toHex()}catch(t){throw t.encoded&&(t.encoded=t.encoded.toHex()),t}},s.toHex=s.encodeHex,s.toRaw=function(t,e){return r(this,!!t,!!e,this.$type)},s.encodeJSON=function(){return JSON.stringify(r(this,!0,!0,this.$type))},a.decode=function(e,r,i){\"string\"==typeof r&&(i=r,r=-1),\"string\"==typeof e?e=t.wrap(e,i||\"base64\"):t.isByteBuffer(e)||(e=t.wrap(e));var o=e.littleEndian;try{var a=n.decode(e.LE(),r);return e.LE(o),a}catch(t){throw e.LE(o),t}},a.decodeDelimited=function(e,r){if(\"string\"==typeof e?e=t.wrap(e,r||\"base64\"):t.isByteBuffer(e)||(e=t.wrap(e)),e.remaining()<1)return null;var i=e.offset,o=e.readVarint32();if(e.remaining()<o)return e.offset=i,null;try{var a=n.decode(e.slice(e.offset,e.offset+o).LE());return e.offset+=o,a}catch(t){throw e.offset+=o,t}},a.decode64=function(t){return a.decode(t,\"base64\")},a.decodeHex=function(t){return a.decode(t,\"hex\")},a.decodeJSON=function(t){return new a(JSON.parse(t))},s.toString=function(){return n.toString()};return Object.defineProperty&&(Object.defineProperty(a,\"$options\",{value:n.buildOpt()}),Object.defineProperty(s,\"$options\",{value:a.$options}),Object.defineProperty(a,\"$type\",{value:n}),Object.defineProperty(s,\"$type\",{value:n})),a}(e,this);this._fields=[],this._fieldsById={},this._fieldsByName={},this._oneofsByName={};for(var i,o=0,a=this.children.length;o<a;o++)if((i=this.children[o])instanceof y||i instanceof h||i instanceof w){if(r.hasOwnProperty(i.name))throw Error(\"Illegal reflect child of \"+this.toString(!0)+\": \"+i.toString(!0)+\" cannot override static property '\"+i.name+\"'\");r[i.name]=i.build()}else if(i instanceof h.Field)i.build(),this._fields.push(i),this._fieldsById[i.id]=i,this._fieldsByName[i.name]=i;else if(i instanceof h.OneOf)this._oneofsByName[i.name]=i;else if(!(i instanceof h.OneOf||i instanceof _))throw Error(\"Illegal reflect child of \"+this.toString(!0)+\": \"+this.children[o].toString(!0));return this.clazz=r},d.encode=function(t,e,n){for(var r,i,o=null,a=0,s=this._fields.length;a<s;++a)r=this._fields[a],i=t[r.name],r.required&&null===i?null===o&&(o=r):r.encode(n?i:r.verifyValue(i),e,t);if(null!==o){var u=Error(\"Missing at least one required field for \"+this.toString(!0)+\": \"+o);throw u.encoded=e,u}return e},d.calculate=function(t){for(var e,n,r=0,i=0,o=this._fields.length;i<o;++i){if(e=this._fields[i],n=t[e.name],e.required&&null===n)throw Error(\"Missing at least one required field for \"+this.toString(!0)+\": \"+e);r+=e.calculate(n,t)}return r},d.decode=function(t,n,r){\"number\"!=typeof n&&(n=-1);for(var o,a,s,u,c=t.offset,f=new this.clazz;t.offset<c+n||-1===n&&t.remaining()>0;){if(o=t.readVarint32(),a=7&o,s=o>>>3,a===e.WIRE_TYPES.ENDGROUP){if(s!==r)throw Error(\"Illegal group end indicator for \"+this.toString(!0)+\": \"+s+\" (\"+(r?r+\" expected\":\"not a group\")+\")\");break}if(u=this._fieldsById[s]){if(u.repeated&&!u.options.packed)f[u.name].push(u.decode(a,t));else if(u.map){var l=u.decode(a,t);f[u.name].set(l[0],l[1])}else if(f[u.name]=u.decode(a,t),u.oneof){var h=f[u.oneof.name];null!==h&&h!==u.name&&(f[h]=null),f[u.oneof.name]=u.name}}else switch(a){case e.WIRE_TYPES.VARINT:t.readVarint32();break;case e.WIRE_TYPES.BITS32:t.offset+=4;break;case e.WIRE_TYPES.BITS64:t.offset+=8;break;case e.WIRE_TYPES.LDELIM:var d=t.readVarint32();t.offset+=d;break;case e.WIRE_TYPES.STARTGROUP:for(;i(s,t););break;default:throw Error(\"Illegal wire type for unknown field \"+s+\" in \"+this.toString(!0)+\"#decode: \"+a)}}for(var p=0,v=this._fields.length;p<v;++p)if(u=this._fields[p],null===f[u.name])if(\"proto3\"===this.syntax)f[u.name]=u.defaultValue;else{if(u.required){var g=Error(\"Missing at least one required field for \"+this.toString(!0)+\": \"+u.name);throw g.decoded=f,g}e.populateDefaults&&null!==u.defaultValue&&(f[u.name]=u.defaultValue)}return f},o.Message=h;var p=function(t,n,r,i,o,s,u,c,f,l){a.call(this,t,n,s),this.className=\"Message.Field\",this.required=\"required\"===r,this.repeated=\"repeated\"===r,this.map=\"map\"===r,this.keyType=i||null,this.type=o,this.resolvedType=null,this.id=u,this.options=c||{},this.defaultValue=null,this.oneof=f||null,this.syntax=l||\"proto2\",this.originalName=this.name,this.element=null,this.keyElement=null,!this.builder.options.convertFieldsToCamelCase||this instanceof h.ExtensionField||(this.name=e.Util.toCamelCase(this.name))},v=p.prototype=Object.create(a.prototype);v.build=function(){this.element=new f(this.type,this.resolvedType,!1,this.syntax,this.name),this.map&&(this.keyElement=new f(this.keyType,void 0,!0,this.syntax,this.name)),\"proto3\"!==this.syntax||this.repeated||this.map?void 0!==this.options.default&&(this.defaultValue=this.verifyValue(this.options.default)):this.defaultValue=f.defaultFieldValue(this.type)},v.verifyValue=function(t,n){function r(t,e){throw Error(\"Illegal value for \"+i.toString(!0)+\" of type \"+i.type.name+\": \"+t+\" (\"+e+\")\")}n=n||!1;var i=this;if(null===t)return this.required&&r(typeof t,\"required\"),\"proto3\"===this.syntax&&this.type!==e.TYPES.message&&r(typeof t,\"proto3 field without field presence cannot be null\"),null;var o;if(this.repeated&&!n){Array.isArray(t)||(t=[t]);var a=[];for(o=0;o<t.length;o++)a.push(this.element.verifyValue(t[o]));return a}return this.map&&!n?t instanceof e.Map?t:(t instanceof Object||r(typeof t,\"expected ProtoBuf.Map or raw object for map field\"),new e.Map(this,t)):(!this.repeated&&Array.isArray(t)&&r(typeof t,\"no array expected\"),this.element.verifyValue(t))},v.hasWirePresence=function(t,n){if(\"proto3\"!==this.syntax)return null!==t;if(this.oneof&&n[this.oneof.name]===this.name)return!0;switch(this.type){case e.TYPES.int32:case e.TYPES.sint32:case e.TYPES.sfixed32:case e.TYPES.uint32:case e.TYPES.fixed32:return 0!==t;case e.TYPES.int64:case e.TYPES.sint64:case e.TYPES.sfixed64:case e.TYPES.uint64:case e.TYPES.fixed64:return 0!==t.low||0!==t.high;case e.TYPES.bool:return t;case e.TYPES.float:case e.TYPES.double:return 0!==t;case e.TYPES.string:return t.length>0;case e.TYPES.bytes:return t.remaining()>0;case e.TYPES.enum:return 0!==t;case e.TYPES.message:return null!==t;default:return!0}},v.encode=function(n,r,i){if(null===this.type||\"object\"!=typeof this.type)throw Error(\"[INTERNAL] Unresolved type in \"+this.toString(!0)+\": \"+this.type);if(null===n||this.repeated&&0==n.length)return r;try{if(this.repeated){var o;if(this.options.packed&&e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType)>=0){r.writeVarint32(this.id<<3|e.WIRE_TYPES.LDELIM),r.ensureCapacity(r.offset+=1);var a=r.offset;for(o=0;o<n.length;o++)this.element.encodeValue(this.id,n[o],r);var s=r.offset-a,u=t.calculateVarint32(s);if(u>1){var c=r.slice(a,r.offset);a+=u-1,r.offset=a,r.append(c)}r.writeVarint32(s,a-u)}else for(o=0;o<n.length;o++)r.writeVarint32(this.id<<3|this.type.wireType),this.element.encodeValue(this.id,n[o],r)}else this.map?n.forEach(function(n,i,o){var a=t.calculateVarint32(8|this.keyType.wireType)+this.keyElement.calculateLength(1,i)+t.calculateVarint32(16|this.type.wireType)+this.element.calculateLength(2,n);r.writeVarint32(this.id<<3|e.WIRE_TYPES.LDELIM),r.writeVarint32(a),r.writeVarint32(8|this.keyType.wireType),this.keyElement.encodeValue(1,i,r),r.writeVarint32(16|this.type.wireType),this.element.encodeValue(2,n,r)},this):this.hasWirePresence(n,i)&&(r.writeVarint32(this.id<<3|this.type.wireType),this.element.encodeValue(this.id,n,r))}catch(t){throw Error(\"Illegal value for \"+this.toString(!0)+\": \"+n+\" (\"+t+\")\")}return r},v.calculate=function(n,r){if(n=this.verifyValue(n),null===this.type||\"object\"!=typeof this.type)throw Error(\"[INTERNAL] Unresolved type in \"+this.toString(!0)+\": \"+this.type);if(null===n||this.repeated&&0==n.length)return 0;var i=0;try{if(this.repeated){var o,a;if(this.options.packed&&e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType)>=0){for(i+=t.calculateVarint32(this.id<<3|e.WIRE_TYPES.LDELIM),a=0,o=0;o<n.length;o++)a+=this.element.calculateLength(this.id,n[o]);i+=t.calculateVarint32(a),i+=a}else for(o=0;o<n.length;o++)i+=t.calculateVarint32(this.id<<3|this.type.wireType),i+=this.element.calculateLength(this.id,n[o])}else this.map?n.forEach(function(n,r,o){var a=t.calculateVarint32(8|this.keyType.wireType)+this.keyElement.calculateLength(1,r)+t.calculateVarint32(16|this.type.wireType)+this.element.calculateLength(2,n);i+=t.calculateVarint32(this.id<<3|e.WIRE_TYPES.LDELIM),i+=t.calculateVarint32(a),i+=a},this):this.hasWirePresence(n,r)&&(i+=t.calculateVarint32(this.id<<3|this.type.wireType),i+=this.element.calculateLength(this.id,n))}catch(t){throw Error(\"Illegal value for \"+this.toString(!0)+\": \"+n+\" (\"+t+\")\")}return i},v.decode=function(t,n,r){var i,o;if(!(!this.map&&t==this.type.wireType||!r&&this.repeated&&this.options.packed&&t==e.WIRE_TYPES.LDELIM||this.map&&t==e.WIRE_TYPES.LDELIM))throw Error(\"Illegal wire type for field \"+this.toString(!0)+\": \"+t+\" (\"+this.type.wireType+\" expected)\");if(t==e.WIRE_TYPES.LDELIM&&this.repeated&&this.options.packed&&e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType)>=0&&!r){o=n.readVarint32(),o=n.offset+o;for(var a=[];n.offset<o;)a.push(this.decode(this.type.wireType,n,!0));return a}if(this.map){var s=f.defaultFieldValue(this.keyType);if(i=f.defaultFieldValue(this.type),o=n.readVarint32(),n.remaining()<o)throw Error(\"Illegal number of bytes for \"+this.toString(!0)+\": \"+o+\" required but got only \"+n.remaining());var u=n.clone();for(u.limit=u.offset+o,n.offset+=o;u.remaining()>0;){var c=u.readVarint32();t=7&c;var l=c>>>3;if(1===l)s=this.keyElement.decode(u,t,l);else{if(2!==l)throw Error(\"Unexpected tag in map field key/value submessage\");i=this.element.decode(u,t,l)}}return[s,i]}return this.element.decode(n,t,this.id)},o.Message.Field=p;var g=function(t,e,n,r,i,o,a){p.call(this,t,e,n,null,r,i,o,a),this.extension};g.prototype=Object.create(p.prototype),o.Message.ExtensionField=g;var m=function(t,e,n){a.call(this,t,e,n),this.fields=[]};o.Message.OneOf=m;var y=function(t,e,n,r,i){u.call(this,t,e,n,r,i),this.className=\"Enum\",this.object=null};y.getName=function(t,e){for(var n,r=Object.keys(t),i=0;i<r.length;++i)if(t[n=r[i]]===e)return n;return null},(y.prototype=Object.create(u.prototype)).build=function(t){if(this.object&&!t)return this.object;for(var n=new e.Builder.Enum,r=this.getChildren(y.Value),i=0,o=r.length;i<o;++i)n[r[i].name]=r[i].id;return Object.defineProperty&&Object.defineProperty(n,\"$options\",{value:this.buildOpt(),enumerable:!1}),this.object=n},o.Enum=y;var b=function(t,e,n,r){a.call(this,t,e,n),this.className=\"Enum.Value\",this.id=r};b.prototype=Object.create(a.prototype),o.Enum.Value=b;var _=function(t,e,n,r){a.call(this,t,e,n),this.field=r};_.prototype=Object.create(a.prototype),o.Extension=_;var w=function(t,e,n,r){u.call(this,t,e,n,r),this.className=\"Service\",this.clazz=null};(w.prototype=Object.create(u.prototype)).build=function(n){return this.clazz&&!n?this.clazz:this.clazz=function(e,n){for(var r=function(t){e.Builder.Service.call(this),this.rpcImpl=t||function(t,e,n){setTimeout(n.bind(this,Error(\"Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services\")),0)}},i=r.prototype=Object.create(e.Builder.Service.prototype),o=n.getChildren(e.Reflect.Service.RPCMethod),a=0;a<o.length;a++)!function(e){i[e.name]=function(r,i){try{try{r=e.resolvedRequestType.clazz.decode(t.wrap(r))}catch(t){if(!(t instanceof TypeError))throw t}if(null===r||\"object\"!=typeof r)throw Error(\"Illegal arguments\");r instanceof e.resolvedRequestType.clazz||(r=new e.resolvedRequestType.clazz(r)),this.rpcImpl(e.fqn(),r,function(t,r){if(t)return void i(t);null===r&&(r=\"\");try{r=e.resolvedResponseType.clazz.decode(r)}catch(t){}if(!(r&&r instanceof e.resolvedResponseType.clazz))return void i(Error(\"Illegal response type received in service method \"+n.name+\"#\"+e.name));i(null,r)})}catch(t){setTimeout(i.bind(this,t),0)}},r[e.name]=function(t,n,i){new r(t)[e.name](n,i)},Object.defineProperty&&(Object.defineProperty(r[e.name],\"$options\",{value:e.buildOpt()}),Object.defineProperty(i[e.name],\"$options\",{value:r[e.name].$options}))}(o[a]);return Object.defineProperty&&(Object.defineProperty(r,\"$options\",{value:n.buildOpt()}),Object.defineProperty(i,\"$options\",{value:r.$options}),Object.defineProperty(r,\"$type\",{value:n}),Object.defineProperty(i,\"$type\",{value:n})),r}(e,this)},o.Service=w;var E=function(t,e,n,r){a.call(this,t,e,n),this.className=\"Service.Method\",this.options=r||{}};(E.prototype=Object.create(a.prototype)).buildOpt=c.buildOpt,o.Service.Method=E;var O=function(t,e,n,r,i,o,a,s){E.call(this,t,e,n,s),this.className=\"Service.RPCMethod\",this.requestName=r,this.responseName=i,this.requestStream=o,this.responseStream=a,this.resolvedRequestType=null,this.resolvedResponseType=null};return O.prototype=Object.create(E.prototype),o.Service.RPCMethod=O,o}(r),r.Builder=function(t,e,r){function i(t){t.messages&&t.messages.forEach(function(e){e.syntax=t.syntax,i(e)}),t.enums&&t.enums.forEach(function(e){e.syntax=t.syntax})}var o=function(t){this.ns=new r.Namespace(this,null,\"\"),this.ptr=this.ns,this.resolved=!1,this.result=null,this.files={},this.importRoot=null,this.options=t||{}},a=o.prototype;return o.isMessage=function(t){return\"string\"==typeof t.name&&(void 0===t.values&&void 0===t.rpc)},o.isMessageField=function(t){return\"string\"==typeof t.rule&&\"string\"==typeof t.name&&\"string\"==typeof t.type&&void 0!==t.id},o.isEnum=function(t){return\"string\"==typeof t.name&&!(void 0===t.values||!Array.isArray(t.values)||0===t.values.length)},o.isService=function(t){return!(\"string\"!=typeof t.name||\"object\"!=typeof t.rpc||!t.rpc)},o.isExtend=function(t){return\"string\"==typeof t.ref},a.reset=function(){return this.ptr=this.ns,this},a.define=function(t){if(\"string\"!=typeof t||!e.TYPEREF.test(t))throw Error(\"illegal namespace: \"+t);return t.split(\".\").forEach(function(t){var e=this.ptr.getChild(t);null===e&&this.ptr.addChild(e=new r.Namespace(this,this.ptr,t)),this.ptr=e},this),this},a.create=function(e){if(!e)return this;if(Array.isArray(e)){if(0===e.length)return this;e=e.slice()}else e=[e];for(var n=[e];n.length>0;){if(e=n.pop(),!Array.isArray(e))throw Error(\"not a valid namespace: \"+JSON.stringify(e));for(;e.length>0;){var i=e.shift();if(o.isMessage(i)){var a=new r.Message(this,this.ptr,i.name,i.options,i.isGroup,i.syntax),s={};i.oneofs&&Object.keys(i.oneofs).forEach(function(t){a.addChild(s[t]=new r.Message.OneOf(this,a,t))},this),i.fields&&i.fields.forEach(function(t){if(null!==a.getChild(0|t.id))throw Error(\"duplicate or invalid field id in \"+a.name+\": \"+t.id);if(t.options&&\"object\"!=typeof t.options)throw Error(\"illegal field options in \"+a.name+\"#\"+t.name);var e=null;if(\"string\"==typeof t.oneof&&!(e=s[t.oneof]))throw Error(\"illegal oneof in \"+a.name+\"#\"+t.name+\": \"+t.oneof);t=new r.Message.Field(this,a,t.rule,t.keytype,t.type,t.name,t.id,t.options,e,i.syntax),e&&e.fields.push(t),a.addChild(t)},this);var u=[];if(i.enums&&i.enums.forEach(function(t){u.push(t)}),i.messages&&i.messages.forEach(function(t){u.push(t)}),i.services&&i.services.forEach(function(t){u.push(t)}),i.extensions&&(\"number\"==typeof i.extensions[0]?a.extensions=[i.extensions]:a.extensions=i.extensions),this.ptr.addChild(a),u.length>0){n.push(e),e=u,u=null,this.ptr=a,a=null;continue}u=null}else if(o.isEnum(i))a=new r.Enum(this,this.ptr,i.name,i.options,i.syntax),i.values.forEach(function(t){a.addChild(new r.Enum.Value(this,a,t.name,t.id))},this),this.ptr.addChild(a);else if(o.isService(i))a=new r.Service(this,this.ptr,i.name,i.options),Object.keys(i.rpc).forEach(function(t){var e=i.rpc[t];a.addChild(new r.Service.RPCMethod(this,a,t,e.request,e.response,!!e.request_stream,!!e.response_stream,e.options))},this),this.ptr.addChild(a);else{if(!o.isExtend(i))throw Error(\"not a valid definition: \"+JSON.stringify(i));if(a=this.ptr.resolve(i.ref,!0))i.fields.forEach(function(e){if(null!==a.getChild(0|e.id))throw Error(\"duplicate extended field id in \"+a.name+\": \"+e.id);if(a.extensions){var n=!1;if(a.extensions.forEach(function(t){e.id>=t[0]&&e.id<=t[1]&&(n=!0)}),!n)throw Error(\"illegal extended field id in \"+a.name+\": \"+e.id+\" (not within valid ranges)\")}var i=e.name;this.options.convertFieldsToCamelCase&&(i=t.Util.toCamelCase(i));var o=new r.Message.ExtensionField(this,a,e.rule,e.type,this.ptr.fqn()+\".\"+i,e.id,e.options),s=new r.Extension(this,this.ptr,e.name,o);o.extension=s,this.ptr.addChild(s),a.addChild(o)},this);else if(!/\\.?google\\.protobuf\\./.test(i.ref))throw Error(\"extended message \"+i.ref+\" is not defined\")}i=null,a=null}e=null,this.ptr=this.ptr.parent}return this.resolved=!1,this.result=null,this},a.import=function(e,r){var o=\"/\";if(\"string\"==typeof r){if(t.Util.IS_NODE&&(r=n(116).resolve(r)),!0===this.files[r])return this.reset();this.files[r]=!0}else if(\"object\"==typeof r){var a=r.root;t.Util.IS_NODE&&(a=n(116).resolve(a)),(a.indexOf(\"\\\\\")>=0||r.file.indexOf(\"\\\\\")>=0)&&(o=\"\\\\\");var s;if(s=t.Util.IS_NODE?n(116).join(a,r.file):a+o+r.file,!0===this.files[s])return this.reset();this.files[s]=!0}if(e.imports&&e.imports.length>0){var u,c=!1;\"object\"==typeof r?(this.importRoot=r.root,c=!0,u=this.importRoot,r=r.file,(u.indexOf(\"\\\\\")>=0||r.indexOf(\"\\\\\")>=0)&&(o=\"\\\\\")):\"string\"==typeof r?this.importRoot?u=this.importRoot:r.indexOf(\"/\")>=0?\"\"===(u=r.replace(/\\/[^\\/]*$/,\"\"))&&(u=\"/\"):r.indexOf(\"\\\\\")>=0?(u=r.replace(/\\\\[^\\\\]*$/,\"\"),o=\"\\\\\"):u=\".\":u=null;for(var f=0;f<e.imports.length;f++)if(\"string\"==typeof e.imports[f]){if(!u)throw Error(\"cannot determine import root\");var l=e.imports[f];if(\"google/protobuf/descriptor.proto\"===l)continue;if(l=t.Util.IS_NODE?n(116).join(u,l):u+o+l,!0===this.files[l])continue;/\\.proto$/i.test(l)&&!t.DotProto&&(l=l.replace(/\\.proto$/,\".json\"));var h=t.Util.fetch(l);if(null===h)throw Error(\"failed to import '\"+l+\"' in '\"+r+\"': file not found\");/\\.json$/i.test(l)?this.import(JSON.parse(h+\"\"),l):this.import(t.DotProto.Parser.parse(h),l)}else r?/\\.(\\w+)$/.test(r)?this.import(e.imports[f],r.replace(/^(.+)\\.(\\w+)$/,function(t,e,n){return e+\"_import\"+f+\".\"+n})):this.import(e.imports[f],r+\"_import\"+f):this.import(e.imports[f]);c&&(this.importRoot=null)}e.package&&this.define(e.package),e.syntax&&i(e);var d=this.ptr;return e.options&&Object.keys(e.options).forEach(function(t){d.options[t]=e.options[t]}),e.messages&&(this.create(e.messages),this.ptr=d),e.enums&&(this.create(e.enums),this.ptr=d),e.services&&(this.create(e.services),this.ptr=d),e.extends&&this.create(e.extends),this.reset()},a.resolveAll=function(){var n;if(null==this.ptr||\"object\"==typeof this.ptr.type)return this;if(this.ptr instanceof r.Namespace)this.ptr.children.forEach(function(t){this.ptr=t,this.resolveAll()},this);else if(this.ptr instanceof r.Message.Field){if(e.TYPE.test(this.ptr.type))this.ptr.type=t.TYPES[this.ptr.type];else{if(!e.TYPEREF.test(this.ptr.type))throw Error(\"illegal type reference in \"+this.ptr.toString(!0)+\": \"+this.ptr.type);if(!(n=(this.ptr instanceof r.Message.ExtensionField?this.ptr.extension.parent:this.ptr.parent).resolve(this.ptr.type,!0)))throw Error(\"unresolvable type reference in \"+this.ptr.toString(!0)+\": \"+this.ptr.type);if(this.ptr.resolvedType=n,n instanceof r.Enum){if(this.ptr.type=t.TYPES.enum,\"proto3\"===this.ptr.syntax&&\"proto3\"!==n.syntax)throw Error(\"proto3 message cannot reference proto2 enum\")}else{if(!(n instanceof r.Message))throw Error(\"illegal type reference in \"+this.ptr.toString(!0)+\": \"+this.ptr.type);this.ptr.type=n.isGroup?t.TYPES.group:t.TYPES.message}}if(this.ptr.map){if(!e.TYPE.test(this.ptr.keyType))throw Error(\"illegal key type for map field in \"+this.ptr.toString(!0)+\": \"+this.ptr.keyType);this.ptr.keyType=t.TYPES[this.ptr.keyType]}\"proto3\"===this.ptr.syntax&&this.ptr.repeated&&void 0===this.ptr.options.packed&&-1!==t.PACKABLE_WIRE_TYPES.indexOf(this.ptr.type.wireType)&&(this.ptr.options.packed=!0)}else if(this.ptr instanceof t.Reflect.Service.Method){if(!(this.ptr instanceof t.Reflect.Service.RPCMethod))throw Error(\"illegal service type in \"+this.ptr.toString(!0));if(!((n=this.ptr.parent.resolve(this.ptr.requestName,!0))&&n instanceof t.Reflect.Message))throw Error(\"Illegal type reference in \"+this.ptr.toString(!0)+\": \"+this.ptr.requestName);if(this.ptr.resolvedRequestType=n,!((n=this.ptr.parent.resolve(this.ptr.responseName,!0))&&n instanceof t.Reflect.Message))throw Error(\"Illegal type reference in \"+this.ptr.toString(!0)+\": \"+this.ptr.responseName);this.ptr.resolvedResponseType=n}else if(!(this.ptr instanceof t.Reflect.Message.OneOf||this.ptr instanceof t.Reflect.Extension||this.ptr instanceof t.Reflect.Enum.Value))throw Error(\"illegal object in namespace: \"+typeof this.ptr+\": \"+this.ptr);return this.reset()},a.build=function(t){if(this.reset(),this.resolved||(this.resolveAll(),this.resolved=!0,this.result=null),null===this.result&&(this.result=this.ns.build()),!t)return this.result;for(var e=\"string\"==typeof t?t.split(\".\"):t,n=this.result,r=0;r<e.length;r++){if(!n[e[r]]){n=null;break}n=n[e[r]]}return n},a.lookup=function(t,e){return t?this.ns.resolve(t,e):this.ns},a.toString=function(){return\"Builder\"},o.Message=function(){},o.Enum=function(){},o.Service=function(){},o}(r,r.Lang,r.Reflect),r.Map=function(t,e){function n(t){var e=0;return{next:function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}}var r=function(t,n){if(!t.map)throw Error(\"field is not a map\");if(this.field=t,this.keyElem=new e.Element(t.keyType,null,!0,t.syntax),this.valueElem=new e.Element(t.type,t.resolvedType,!1,t.syntax),this.map={},Object.defineProperty(this,\"size\",{get:function(){return Object.keys(this.map).length}}),n)for(var r=Object.keys(n),i=0;i<r.length;i++){var o=this.keyElem.valueFromString(r[i]),a=this.valueElem.verifyValue(n[r[i]]);this.map[this.keyElem.valueToString(o)]={key:o,value:a}}},i=r.prototype;return i.clear=function(){this.map={}},i.delete=function(t){var e=this.keyElem.valueToString(this.keyElem.verifyValue(t)),n=e in this.map;return delete this.map[e],n},i.entries=function(){for(var t,e=[],r=Object.keys(this.map),i=0;i<r.length;i++)e.push([(t=this.map[r[i]]).key,t.value]);return n(e)},i.keys=function(){for(var t=[],e=Object.keys(this.map),r=0;r<e.length;r++)t.push(this.map[e[r]].key);return n(t)},i.values=function(){for(var t=[],e=Object.keys(this.map),r=0;r<e.length;r++)t.push(this.map[e[r]].value);return n(t)},i.forEach=function(t,e){for(var n,r=Object.keys(this.map),i=0;i<r.length;i++)t.call(e,(n=this.map[r[i]]).value,n.key,this)},i.set=function(t,e){var n=this.keyElem.verifyValue(t),r=this.valueElem.verifyValue(e);return this.map[this.keyElem.valueToString(n)]={key:n,value:r},this},i.get=function(t){var e=this.keyElem.valueToString(this.keyElem.verifyValue(t));if(e in this.map)return this.map[e].value},i.has=function(t){return this.keyElem.valueToString(this.keyElem.verifyValue(t))in this.map},r}(0,r.Reflect),r.newBuilder=function(t){return t=t||{},void 0===t.convertFieldsToCamelCase&&(t.convertFieldsToCamelCase=r.convertFieldsToCamelCase),void 0===t.populateAccessors&&(t.populateAccessors=r.populateAccessors),new r.Builder(t)},r.loadJson=function(t,e,n){return(\"string\"==typeof e||e&&\"string\"==typeof e.file&&\"string\"==typeof e.root)&&(n=e,e=null),e&&\"object\"==typeof e||(e=r.newBuilder()),\"string\"==typeof t&&(t=JSON.parse(t)),e.import(t,n),e.resolveAll(),e},r.loadJsonFile=function(t,e,n){if(e&&\"object\"==typeof e?(n=e,e=null):e&&\"function\"==typeof e||(e=null),e)return r.Util.fetch(\"string\"==typeof t?t:t.root+\"/\"+t.file,function(i){if(null===i)return void e(Error(\"Failed to fetch file\"));try{e(null,r.loadJson(JSON.parse(i),n,t))}catch(t){e(t)}});var i=r.Util.fetch(\"object\"==typeof t?t.root+\"/\"+t.file:t);return null===i?null:r.loadJson(JSON.parse(i),n,t)},r})},function(t,e,n){var r,i,o;/**\n * @license bytebuffer.js (c) 2015 Daniel Wirtz <dcode@dcode.io>\n * Backing buffer: ArrayBuffer, Accessor: Uint8Array\n * Released under the Apache License, Version 2.0\n * see: https://github.com/dcodeIO/bytebuffer.js for details\n */\n!function(a,s){i=[n(605)],r=s,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(t){\"use strict\";function e(t){var e=0;return function(){return e<t.length?t.charCodeAt(e++):null}}function n(){var t=[],e=[];return function(){if(0===arguments.length)return e.join(\"\")+u.apply(String,t);t.length+arguments.length>1024&&(e.push(u.apply(String,t)),t.length=0),Array.prototype.push.apply(t,arguments)}}function r(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<<s)-1,c=u>>1,f=-7,l=n?i-1:0,h=n?-1:1,d=t[e+l];for(l+=h,o=d&(1<<-f)-1,d>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=h,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=r;f>0;a=256*a+t[e+l],l+=h,f-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,r),o-=c}return(d?-1:1)*a*Math.pow(2,o-r)}function i(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,f=(1<<c)-1,l=f>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=f):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+l>=1?h/u:h*Math.pow(2,1-l),e*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(e*u-1)*Math.pow(2,i),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;t[n+d]=255&s,d+=p,s/=256,i-=8);for(a=a<<i|s,c+=i;c>0;t[n+d]=255&a,d+=p,a/=256,c-=8);t[n+d-p]|=128*v}var o=function(t,e,n){if(void 0===t&&(t=o.DEFAULT_CAPACITY),void 0===e&&(e=o.DEFAULT_ENDIAN),void 0===n&&(n=o.DEFAULT_NOASSERT),!n){if((t|=0)<0)throw RangeError(\"Illegal capacity\");e=!!e,n=!!n}this.buffer=0===t?s:new ArrayBuffer(t),this.view=0===t?null:new Uint8Array(this.buffer),this.offset=0,this.markedOffset=-1,this.limit=t,this.littleEndian=e,this.noAssert=n};o.VERSION=\"5.0.1\",o.LITTLE_ENDIAN=!0,o.BIG_ENDIAN=!1,o.DEFAULT_CAPACITY=16,o.DEFAULT_ENDIAN=o.BIG_ENDIAN,o.DEFAULT_NOASSERT=!1,o.Long=t||null;var a=o.prototype;a.__isByteBuffer__,Object.defineProperty(a,\"__isByteBuffer__\",{value:!0,enumerable:!1,configurable:!1});var s=new ArrayBuffer(0),u=String.fromCharCode;o.accessor=function(){return Uint8Array},o.allocate=function(t,e,n){return new o(t,e,n)},o.concat=function(t,e,n,r){\"boolean\"!=typeof e&&\"string\"==typeof e||(r=n,n=e,e=void 0);for(var i,a=0,s=0,u=t.length;s<u;++s)o.isByteBuffer(t[s])||(t[s]=o.wrap(t[s],e)),(i=t[s].limit-t[s].offset)>0&&(a+=i);if(0===a)return new o(0,n,r);var c,f=new o(a,n,r);for(s=0;s<u;)c=t[s++],(i=c.limit-c.offset)<=0||(f.view.set(c.view.subarray(c.offset,c.limit),f.offset),f.offset+=i);return f.limit=f.offset,f.offset=0,f},o.isByteBuffer=function(t){return!0===(t&&t.__isByteBuffer__)},o.type=function(){return ArrayBuffer},o.wrap=function(t,e,n,r){if(\"string\"!=typeof e&&(r=n,n=e,e=void 0),\"string\"==typeof t)switch(void 0===e&&(e=\"utf8\"),e){case\"base64\":return o.fromBase64(t,n);case\"hex\":return o.fromHex(t,n);case\"binary\":return o.fromBinary(t,n);case\"utf8\":return o.fromUTF8(t,n);case\"debug\":return o.fromDebug(t,n);default:throw Error(\"Unsupported encoding: \"+e)}if(null===t||\"object\"!=typeof t)throw TypeError(\"Illegal buffer\");var i;if(o.isByteBuffer(t))return i=a.clone.call(t),i.markedOffset=-1,i;if(t instanceof Uint8Array)i=new o(0,n,r),t.length>0&&(i.buffer=t.buffer,i.offset=t.byteOffset,i.limit=t.byteOffset+t.byteLength,i.view=new Uint8Array(t.buffer));else if(t instanceof ArrayBuffer)i=new o(0,n,r),t.byteLength>0&&(i.buffer=t,i.offset=0,i.limit=t.byteLength,i.view=t.byteLength>0?new Uint8Array(t):null);else{if(\"[object Array]\"!==Object.prototype.toString.call(t))throw TypeError(\"Illegal buffer\");i=new o(t.length,n,r),i.limit=t.length;for(var s=0;s<t.length;++s)i.view[s]=t[s]}return i},a.writeBitSet=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(!(t instanceof Array))throw TypeError(\"Illegal BitSet: Not an array\");if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}var r,i=e,o=t.length,a=o>>3,s=0;for(e+=this.writeVarint32(o,e);a--;)r=1&!!t[s++]|(1&!!t[s++])<<1|(1&!!t[s++])<<2|(1&!!t[s++])<<3|(1&!!t[s++])<<4|(1&!!t[s++])<<5|(1&!!t[s++])<<6|(1&!!t[s++])<<7,this.writeByte(r,e++);if(s<o){var u=0;for(r=0;s<o;)r|=(1&!!t[s++])<<u++;this.writeByte(r,e++)}return n?(this.offset=e,this):e-i},a.readBitSet=function(t){var e=void 0===t;e&&(t=this.offset);var n,r=this.readVarint32(t),i=r.value,o=i>>3,a=0,s=[];for(t+=r.length;o--;)n=this.readByte(t++),s[a++]=!!(1&n),s[a++]=!!(2&n),s[a++]=!!(4&n),s[a++]=!!(8&n),s[a++]=!!(16&n),s[a++]=!!(32&n),s[a++]=!!(64&n),s[a++]=!!(128&n);if(a<i){var u=0;for(n=this.readByte(t++);a<i;)s[a++]=!!(n>>u++&1)}return e&&(this.offset=t),s},a.readBytes=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+t>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+\"+t+\") <= \"+this.buffer.byteLength)}var r=this.slice(e,e+t);return n&&(this.offset+=t),r},a.writeBytes=a.append,a.writeInt8=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=1;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=1,this.view[e]=t,n&&(this.offset+=1),this},a.writeByte=a.writeInt8,a.readInt8=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+1) <= \"+this.buffer.byteLength)}var n=this.view[t];return 128==(128&n)&&(n=-(255-n+1)),e&&(this.offset+=1),n},a.readByte=a.readInt8,a.writeUint8=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=1;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=1,this.view[e]=t,n&&(this.offset+=1),this},a.writeUInt8=a.writeUint8,a.readUint8=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+1) <= \"+this.buffer.byteLength)}var n=this.view[t];return e&&(this.offset+=1),n},a.readUInt8=a.readUint8,a.writeInt16=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=2;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=2,this.littleEndian?(this.view[e+1]=(65280&t)>>>8,this.view[e]=255&t):(this.view[e]=(65280&t)>>>8,this.view[e+1]=255&t),n&&(this.offset+=2),this},a.writeShort=a.writeInt16,a.readInt16=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+2>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+2) <= \"+this.buffer.byteLength)}var n=0;return this.littleEndian?(n=this.view[t],n|=this.view[t+1]<<8):(n=this.view[t]<<8,n|=this.view[t+1]),32768==(32768&n)&&(n=-(65535-n+1)),e&&(this.offset+=2),n},a.readShort=a.readInt16,a.writeUint16=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=2;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=2,this.littleEndian?(this.view[e+1]=(65280&t)>>>8,this.view[e]=255&t):(this.view[e]=(65280&t)>>>8,this.view[e+1]=255&t),n&&(this.offset+=2),this},a.writeUInt16=a.writeUint16,a.readUint16=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+2>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+2) <= \"+this.buffer.byteLength)}var n=0;return this.littleEndian?(n=this.view[t],n|=this.view[t+1]<<8):(n=this.view[t]<<8,n|=this.view[t+1]),e&&(this.offset+=2),n},a.readUInt16=a.readUint16,a.writeInt32=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=4;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=4,this.littleEndian?(this.view[e+3]=t>>>24&255,this.view[e+2]=t>>>16&255,this.view[e+1]=t>>>8&255,this.view[e]=255&t):(this.view[e]=t>>>24&255,this.view[e+1]=t>>>16&255,this.view[e+2]=t>>>8&255,this.view[e+3]=255&t),n&&(this.offset+=4),this},a.writeInt=a.writeInt32,a.readInt32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+4) <= \"+this.buffer.byteLength)}var n=0;return this.littleEndian?(n=this.view[t+2]<<16,n|=this.view[t+1]<<8,n|=this.view[t],n+=this.view[t+3]<<24>>>0):(n=this.view[t+1]<<16,n|=this.view[t+2]<<8,n|=this.view[t+3],n+=this.view[t]<<24>>>0),n|=0,e&&(this.offset+=4),n},a.readInt=a.readInt32,a.writeUint32=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=4;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=4,this.littleEndian?(this.view[e+3]=t>>>24&255,this.view[e+2]=t>>>16&255,this.view[e+1]=t>>>8&255,this.view[e]=255&t):(this.view[e]=t>>>24&255,this.view[e+1]=t>>>16&255,this.view[e+2]=t>>>8&255,this.view[e+3]=255&t),n&&(this.offset+=4),this},a.writeUInt32=a.writeUint32,a.readUint32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+4) <= \"+this.buffer.byteLength)}var n=0;return this.littleEndian?(n=this.view[t+2]<<16,n|=this.view[t+1]<<8,n|=this.view[t],n+=this.view[t+3]<<24>>>0):(n=this.view[t+1]<<16,n|=this.view[t+2]<<8,n|=this.view[t+3],n+=this.view[t]<<24>>>0),e&&(this.offset+=4),n},a.readUInt32=a.readUint32,t&&(a.writeInt64=function(e,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"==typeof e)e=t.fromNumber(e);else if(\"string\"==typeof e)e=t.fromString(e);else if(!(e&&e instanceof t))throw TypeError(\"Illegal value: \"+e+\" (not an integer or Long)\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}\"number\"==typeof e?e=t.fromNumber(e):\"string\"==typeof e&&(e=t.fromString(e)),n+=8;var i=this.buffer.byteLength;n>i&&this.resize((i*=2)>n?i:n),n-=8;var o=e.low,a=e.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=a>>>24&255,this.view[n+2]=a>>>16&255,this.view[n+1]=a>>>8&255,this.view[n]=255&a):(this.view[n]=a>>>24&255,this.view[n+1]=a>>>16&255,this.view[n+2]=a>>>8&255,this.view[n+3]=255&a,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),r&&(this.offset+=8),this},a.writeLong=a.writeInt64,a.readInt64=function(e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+8>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+8) <= \"+this.buffer.byteLength)}var r=0,i=0;this.littleEndian?(r=this.view[e+2]<<16,r|=this.view[e+1]<<8,r|=this.view[e],r+=this.view[e+3]<<24>>>0,e+=4,i=this.view[e+2]<<16,i|=this.view[e+1]<<8,i|=this.view[e],i+=this.view[e+3]<<24>>>0):(i=this.view[e+1]<<16,i|=this.view[e+2]<<8,i|=this.view[e+3],i+=this.view[e]<<24>>>0,e+=4,r=this.view[e+1]<<16,r|=this.view[e+2]<<8,r|=this.view[e+3],r+=this.view[e]<<24>>>0);var o=new t(r,i,!1);return n&&(this.offset+=8),o},a.readLong=a.readInt64,a.writeUint64=function(e,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"==typeof e)e=t.fromNumber(e);else if(\"string\"==typeof e)e=t.fromString(e);else if(!(e&&e instanceof t))throw TypeError(\"Illegal value: \"+e+\" (not an integer or Long)\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}\"number\"==typeof e?e=t.fromNumber(e):\"string\"==typeof e&&(e=t.fromString(e)),n+=8;var i=this.buffer.byteLength;n>i&&this.resize((i*=2)>n?i:n),n-=8;var o=e.low,a=e.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=a>>>24&255,this.view[n+2]=a>>>16&255,this.view[n+1]=a>>>8&255,this.view[n]=255&a):(this.view[n]=a>>>24&255,this.view[n+1]=a>>>16&255,this.view[n+2]=a>>>8&255,this.view[n+3]=255&a,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),r&&(this.offset+=8),this},a.writeUInt64=a.writeUint64,a.readUint64=function(e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+8>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+8) <= \"+this.buffer.byteLength)}var r=0,i=0;this.littleEndian?(r=this.view[e+2]<<16,r|=this.view[e+1]<<8,r|=this.view[e],r+=this.view[e+3]<<24>>>0,e+=4,i=this.view[e+2]<<16,i|=this.view[e+1]<<8,i|=this.view[e],i+=this.view[e+3]<<24>>>0):(i=this.view[e+1]<<16,i|=this.view[e+2]<<8,i|=this.view[e+3],i+=this.view[e]<<24>>>0,e+=4,r=this.view[e+1]<<16,r|=this.view[e+2]<<8,r|=this.view[e+3],r+=this.view[e]<<24>>>0);var o=new t(r,i,!0);return n&&(this.offset+=8),o},a.readUInt64=a.readUint64),a.writeFloat32=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t)throw TypeError(\"Illegal value: \"+t+\" (not a number)\");if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=4;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=4,i(this.view,t,e,this.littleEndian,23,4),n&&(this.offset+=4),this},a.writeFloat=a.writeFloat32,a.readFloat32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+4) <= \"+this.buffer.byteLength)}var n=r(this.view,t,this.littleEndian,23,4);return e&&(this.offset+=4),n},a.readFloat=a.readFloat32,a.writeFloat64=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t)throw TypeError(\"Illegal value: \"+t+\" (not a number)\");if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}e+=8;var r=this.buffer.byteLength;return e>r&&this.resize((r*=2)>e?r:e),e-=8,i(this.view,t,e,this.littleEndian,52,8),n&&(this.offset+=8),this},a.writeDouble=a.writeFloat64,a.readFloat64=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+8>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+8) <= \"+this.buffer.byteLength)}var n=r(this.view,t,this.littleEndian,52,8);return e&&(this.offset+=8),n},a.readDouble=a.readFloat64,o.MAX_VARINT32_BYTES=5,o.calculateVarint32=function(t){return t>>>=0,t<128?1:t<16384?2:t<1<<21?3:t<1<<28?4:5},o.zigZagEncode32=function(t){return((t|=0)<<1^t>>31)>>>0},o.zigZagDecode32=function(t){return t>>>1^-(1&t)|0},a.writeVarint32=function(t,e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+0) <= \"+this.buffer.byteLength)}var r,i=o.calculateVarint32(t);e+=i;var a=this.buffer.byteLength;for(e>a&&this.resize((a*=2)>e?a:e),e-=i,t>>>=0;t>=128;)r=127&t|128,this.view[e++]=r,t>>>=7;return this.view[e++]=t,n?(this.offset=e,this):i},a.writeVarint32ZigZag=function(t,e){return this.writeVarint32(o.zigZagEncode32(t),e)},a.readVarint32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+1) <= \"+this.buffer.byteLength)}var n,r=0,i=0;do{if(!this.noAssert&&t>this.limit){var o=Error(\"Truncated\");throw o.truncated=!0,o}n=this.view[t++],r<5&&(i|=(127&n)<<7*r),++r}while(0!=(128&n));return i|=0,e?(this.offset=t,i):{value:i,length:r}},a.readVarint32ZigZag=function(t){var e=this.readVarint32(t);return\"object\"==typeof e?e.value=o.zigZagDecode32(e.value):e=o.zigZagDecode32(e),e},t&&(o.MAX_VARINT64_BYTES=10,o.calculateVarint64=function(e){\"number\"==typeof e?e=t.fromNumber(e):\"string\"==typeof e&&(e=t.fromString(e));var n=e.toInt()>>>0,r=e.shiftRightUnsigned(28).toInt()>>>0,i=e.shiftRightUnsigned(56).toInt()>>>0;return 0==i?0==r?n<16384?n<128?1:2:n<1<<21?3:4:r<16384?r<128?5:6:r<1<<21?7:8:i<128?9:10},o.zigZagEncode64=function(e){return\"number\"==typeof e?e=t.fromNumber(e,!1):\"string\"==typeof e?e=t.fromString(e,!1):!1!==e.unsigned&&(e=e.toSigned()),e.shiftLeft(1).xor(e.shiftRight(63)).toUnsigned()},o.zigZagDecode64=function(e){return\"number\"==typeof e?e=t.fromNumber(e,!1):\"string\"==typeof e?e=t.fromString(e,!1):!1!==e.unsigned&&(e=e.toSigned()),e.shiftRightUnsigned(1).xor(e.and(t.ONE).toSigned().negate()).toSigned()},a.writeVarint64=function(e,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"==typeof e)e=t.fromNumber(e);else if(\"string\"==typeof e)e=t.fromString(e);else if(!(e&&e instanceof t))throw TypeError(\"Illegal value: \"+e+\" (not an integer or Long)\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}\"number\"==typeof e?e=t.fromNumber(e,!1):\"string\"==typeof e?e=t.fromString(e,!1):!1!==e.unsigned&&(e=e.toSigned());var i=o.calculateVarint64(e),a=e.toInt()>>>0,s=e.shiftRightUnsigned(28).toInt()>>>0,u=e.shiftRightUnsigned(56).toInt()>>>0;n+=i;var c=this.buffer.byteLength;switch(n>c&&this.resize((c*=2)>n?c:n),n-=i,i){case 10:this.view[n+9]=u>>>7&1;case 9:this.view[n+8]=9!==i?128|u:127&u;case 8:this.view[n+7]=8!==i?s>>>21|128:s>>>21&127;case 7:this.view[n+6]=7!==i?s>>>14|128:s>>>14&127;case 6:this.view[n+5]=6!==i?s>>>7|128:s>>>7&127;case 5:this.view[n+4]=5!==i?128|s:127&s;case 4:this.view[n+3]=4!==i?a>>>21|128:a>>>21&127;case 3:this.view[n+2]=3!==i?a>>>14|128:a>>>14&127;case 2:this.view[n+1]=2!==i?a>>>7|128:a>>>7&127;case 1:this.view[n]=1!==i?128|a:127&a}return r?(this.offset+=i,this):i},a.writeVarint64ZigZag=function(t,e){return this.writeVarint64(o.zigZagEncode64(t),e)},a.readVarint64=function(e){var n=void 0===e;if(n&&(e=this.offset),!this.noAssert){if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: \"+e+\" (not an integer)\");if((e>>>=0)<0||e+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+e+\" (+1) <= \"+this.buffer.byteLength)}var r=e,i=0,o=0,a=0,s=0;if(s=this.view[e++],i=127&s,128&s&&(s=this.view[e++],i|=(127&s)<<7,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],i|=(127&s)<<14,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],i|=(127&s)<<21,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],o=127&s,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],o|=(127&s)<<7,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],o|=(127&s)<<14,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],o|=(127&s)<<21,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],a=127&s,(128&s||this.noAssert&&void 0===s)&&(s=this.view[e++],a|=(127&s)<<7,128&s||this.noAssert&&void 0===s))))))))))throw Error(\"Buffer overrun\");var u=t.fromBits(i|o<<28,o>>>4|a<<24,!1);return n?(this.offset=e,u):{value:u,length:e-r}},a.readVarint64ZigZag=function(e){var n=this.readVarint64(e);return n&&n.value instanceof t?n.value=o.zigZagDecode64(n.value):n=o.zigZagDecode64(n),n}),a.writeCString=function(t,n){var r=void 0===n;r&&(n=this.offset);var i,o=t.length;if(!this.noAssert){if(\"string\"!=typeof t)throw TypeError(\"Illegal str: Not a string\");for(i=0;i<o;++i)if(0===t.charCodeAt(i))throw RangeError(\"Illegal str: Contains NULL-characters\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}o=f.calculateUTF16asUTF8(e(t))[1],n+=o+1;var a=this.buffer.byteLength;return n>a&&this.resize((a*=2)>n?a:n),n-=o+1,f.encodeUTF16toUTF8(e(t),function(t){this.view[n++]=t}.bind(this)),this.view[n++]=0,r?(this.offset=n,this):o},a.readCString=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+1) <= \"+this.buffer.byteLength)}var r,i=t,o=-1;return f.decodeUTF8toUTF16(function(){if(0===o)return null;if(t>=this.limit)throw RangeError(\"Illegal range: Truncated data, \"+t+\" < \"+this.limit);return o=this.view[t++],0===o?null:o}.bind(this),r=n(),!0),e?(this.offset=t,r()):{string:r(),length:t-i}},a.writeIString=function(t,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"string\"!=typeof t)throw TypeError(\"Illegal str: Not a string\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}var i,o=n;i=f.calculateUTF16asUTF8(e(t),this.noAssert)[1],n+=4+i;var a=this.buffer.byteLength;if(n>a&&this.resize((a*=2)>n?a:n),n-=4+i,this.littleEndian?(this.view[n+3]=i>>>24&255,this.view[n+2]=i>>>16&255,this.view[n+1]=i>>>8&255,this.view[n]=255&i):(this.view[n]=i>>>24&255,this.view[n+1]=i>>>16&255,this.view[n+2]=i>>>8&255,this.view[n+3]=255&i),n+=4,f.encodeUTF16toUTF8(e(t),function(t){this.view[n++]=t}.bind(this)),n!==o+4+i)throw RangeError(\"Illegal range: Truncated data, \"+n+\" == \"+(n+4+i));return r?(this.offset=n,this):n-o},a.readIString=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+4) <= \"+this.buffer.byteLength)}var n=t,r=this.readUint32(t),i=this.readUTF8String(r,o.METRICS_BYTES,t+=4);return t+=i.length,e?(this.offset=t,i.string):{string:i.string,length:t-n}},o.METRICS_CHARS=\"c\",o.METRICS_BYTES=\"b\",a.writeUTF8String=function(t,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}var i,o=n;i=f.calculateUTF16asUTF8(e(t))[1],n+=i;var a=this.buffer.byteLength;return n>a&&this.resize((a*=2)>n?a:n),n-=i,f.encodeUTF16toUTF8(e(t),function(t){this.view[n++]=t}.bind(this)),r?(this.offset=n,this):n-o},a.writeString=a.writeUTF8String,o.calculateUTF8Chars=function(t){return f.calculateUTF16asUTF8(e(t))[0]},o.calculateUTF8Bytes=function(t){return f.calculateUTF16asUTF8(e(t))[1]},o.calculateString=o.calculateUTF8Bytes,a.readUTF8String=function(t,e,r){\"number\"==typeof e&&(r=e,e=void 0);var i=void 0===r;if(i&&(r=this.offset),void 0===e&&(e=o.METRICS_CHARS),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal length: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof r||r%1!=0)throw TypeError(\"Illegal offset: \"+r+\" (not an integer)\");if((r>>>=0)<0||r+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+r+\" (+0) <= \"+this.buffer.byteLength)}var a,s=0,u=r;if(e===o.METRICS_CHARS){if(a=n(),f.decodeUTF8(function(){return s<t&&r<this.limit?this.view[r++]:null}.bind(this),function(t){++s,f.UTF8toUTF16(t,a)}),s!==t)throw RangeError(\"Illegal range: Truncated data, \"+s+\" == \"+t);return i?(this.offset=r,a()):{string:a(),length:r-u}}if(e===o.METRICS_BYTES){if(!this.noAssert){if(\"number\"!=typeof r||r%1!=0)throw TypeError(\"Illegal offset: \"+r+\" (not an integer)\");if((r>>>=0)<0||r+t>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+r+\" (+\"+t+\") <= \"+this.buffer.byteLength)}var c=r+t;if(f.decodeUTF8toUTF16(function(){return r<c?this.view[r++]:null}.bind(this),a=n(),this.noAssert),r!==c)throw RangeError(\"Illegal range: Truncated data, \"+r+\" == \"+c);return i?(this.offset=r,a()):{string:a(),length:r-u}}throw TypeError(\"Unsupported metrics: \"+e)},a.readString=a.readUTF8String,a.writeVString=function(t,n){var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"string\"!=typeof t)throw TypeError(\"Illegal str: Not a string\");if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}var i,a,s=n;i=f.calculateUTF16asUTF8(e(t),this.noAssert)[1],a=o.calculateVarint32(i),n+=a+i;var u=this.buffer.byteLength;if(n>u&&this.resize((u*=2)>n?u:n),n-=a+i,n+=this.writeVarint32(i,n),f.encodeUTF16toUTF8(e(t),function(t){this.view[n++]=t}.bind(this)),n!==s+i+a)throw RangeError(\"Illegal range: Truncated data, \"+n+\" == \"+(n+i+a));return r?(this.offset=n,this):n-s},a.readVString=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+1) <= \"+this.buffer.byteLength)}var n=t,r=this.readVarint32(t),i=this.readUTF8String(r.value,o.METRICS_BYTES,t+=r.length);return t+=i.length,e?(this.offset=t,i.string):{string:i.string,length:t-n}},a.append=function(t,e,n){\"number\"!=typeof e&&\"string\"==typeof e||(n=e,e=void 0);var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}t instanceof o||(t=o.wrap(t,e));var i=t.limit-t.offset;if(i<=0)return this;n+=i;var a=this.buffer.byteLength;return n>a&&this.resize((a*=2)>n?a:n),n-=i,this.view.set(t.view.subarray(t.offset,t.limit),n),t.offset+=i,r&&(this.offset+=i),this},a.appendTo=function(t,e){return t.append(this,e),this},a.assert=function(t){return this.noAssert=!t,this},a.capacity=function(){return this.buffer.byteLength},a.clear=function(){return this.offset=0,this.limit=this.buffer.byteLength,this.markedOffset=-1,this},a.clone=function(t){var e=new o(0,this.littleEndian,this.noAssert);return t?(e.buffer=new ArrayBuffer(this.buffer.byteLength),e.view=new Uint8Array(e.buffer)):(e.buffer=this.buffer,e.view=this.view),e.offset=this.offset,e.markedOffset=this.markedOffset,e.limit=this.limit,e},a.compact=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}if(0===t&&e===this.buffer.byteLength)return this;var n=e-t;if(0===n)return this.buffer=s,this.view=null,this.markedOffset>=0&&(this.markedOffset-=t),this.offset=0,this.limit=0,this;var r=new ArrayBuffer(n),i=new Uint8Array(r);return i.set(this.view.subarray(t,e)),this.buffer=r,this.view=i,this.markedOffset>=0&&(this.markedOffset-=t),this.offset=0,this.limit=n,this},a.copy=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}if(t===e)return new o(0,this.littleEndian,this.noAssert);var n=e-t,r=new o(n,this.littleEndian,this.noAssert);return r.offset=0,r.limit=n,r.markedOffset>=0&&(r.markedOffset-=t),this.copyTo(r,0,t,e),r},a.copyTo=function(t,e,n,r){var i,a;if(!this.noAssert&&!o.isByteBuffer(t))throw TypeError(\"Illegal target: Not a ByteBuffer\");if(e=(a=void 0===e)?t.offset:0|e,n=(i=void 0===n)?this.offset:0|n,r=void 0===r?this.limit:0|r,e<0||e>t.buffer.byteLength)throw RangeError(\"Illegal target range: 0 <= \"+e+\" <= \"+t.buffer.byteLength);if(n<0||r>this.buffer.byteLength)throw RangeError(\"Illegal source range: 0 <= \"+n+\" <= \"+this.buffer.byteLength);var s=r-n;return 0===s?t:(t.ensureCapacity(e+s),t.view.set(this.view.subarray(n,r),e),i&&(this.offset+=s),a&&(t.offset+=s),this)},a.ensureCapacity=function(t){var e=this.buffer.byteLength;return e<t?this.resize((e*=2)>t?e:t):this},a.fill=function(t,e,n){var r=void 0===e;if(r&&(e=this.offset),\"string\"==typeof t&&t.length>0&&(t=t.charCodeAt(0)),void 0===e&&(e=this.offset),void 0===n&&(n=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal value: \"+t+\" (not an integer)\");if(t|=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(e>>>=0,\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(n>>>=0,e<0||e>n||n>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+e+\" <= \"+n+\" <= \"+this.buffer.byteLength)}if(e>=n)return this;for(;e<n;)this.view[e++]=t;return r&&(this.offset=e),this},a.flip=function(){return this.limit=this.offset,this.offset=0,this},a.mark=function(t){if(t=void 0===t?this.offset:t,!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal offset: \"+t+\" (not an integer)\");if((t>>>=0)<0||t+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+t+\" (+0) <= \"+this.buffer.byteLength)}return this.markedOffset=t,this},a.order=function(t){if(!this.noAssert&&\"boolean\"!=typeof t)throw TypeError(\"Illegal littleEndian: Not a boolean\");return this.littleEndian=!!t,this},a.LE=function(t){return this.littleEndian=void 0===t||!!t,this},a.BE=function(t){return this.littleEndian=void 0!==t&&!t,this},a.prepend=function(t,e,n){\"number\"!=typeof e&&\"string\"==typeof e||(n=e,e=void 0);var r=void 0===n;if(r&&(n=this.offset),!this.noAssert){if(\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal offset: \"+n+\" (not an integer)\");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError(\"Illegal offset: 0 <= \"+n+\" (+0) <= \"+this.buffer.byteLength)}t instanceof o||(t=o.wrap(t,e));var i=t.limit-t.offset;if(i<=0)return this;var a=i-n;if(a>0){var s=new ArrayBuffer(this.buffer.byteLength+a),u=new Uint8Array(s);u.set(this.view.subarray(n,this.buffer.byteLength),i),this.buffer=s,this.view=u,this.offset+=a,this.markedOffset>=0&&(this.markedOffset+=a),this.limit+=a,n+=a}else{new Uint8Array(this.buffer)}return this.view.set(t.view.subarray(t.offset,t.limit),n-i),t.offset=t.limit,r&&(this.offset-=i),this},a.prependTo=function(t,e){return t.prepend(this,e),this},a.printDebug=function(t){\"function\"!=typeof t&&(t=console.log.bind(console)),t(this.toString()+\"\\n-------------------------------------------------------------------\\n\"+this.toDebug(!0))},a.remaining=function(){return this.limit-this.offset},a.reset=function(){return this.markedOffset>=0?(this.offset=this.markedOffset,this.markedOffset=-1):this.offset=0,this},a.resize=function(t){if(!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal capacity: \"+t+\" (not an integer)\");if((t|=0)<0)throw RangeError(\"Illegal capacity: 0 <= \"+t)}if(this.buffer.byteLength<t){var e=new ArrayBuffer(t),n=new Uint8Array(e);n.set(this.view),this.buffer=e,this.view=n}return this},a.reverse=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}return t===e?this:(Array.prototype.reverse.call(this.view.subarray(t,e)),this)},a.skip=function(t){if(!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal length: \"+t+\" (not an integer)\");t|=0}var e=this.offset+t;if(!this.noAssert&&(e<0||e>this.buffer.byteLength))throw RangeError(\"Illegal length: 0 <= \"+this.offset+\" + \"+t+\" <= \"+this.buffer.byteLength);return this.offset=e,this},a.slice=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}var n=this.clone();return n.offset=t,n.limit=e,n},a.toBuffer=function(t){var e=this.offset,n=this.limit;if(!this.noAssert){if(\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal offset: Not an integer\");if(e>>>=0,\"number\"!=typeof n||n%1!=0)throw TypeError(\"Illegal limit: Not an integer\");if(n>>>=0,e<0||e>n||n>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+e+\" <= \"+n+\" <= \"+this.buffer.byteLength)}if(!t&&0===e&&n===this.buffer.byteLength)return this.buffer;if(e===n)return s;var r=new ArrayBuffer(n-e);return new Uint8Array(r).set(new Uint8Array(this.buffer).subarray(e,n),0),r},a.toArrayBuffer=a.toBuffer,a.toString=function(t,e,n){if(void 0===t)return\"ByteBufferAB(offset=\"+this.offset+\",markedOffset=\"+this.markedOffset+\",limit=\"+this.limit+\",capacity=\"+this.capacity()+\")\";switch(\"number\"==typeof t&&(t=\"utf8\",e=t,n=e),t){case\"utf8\":return this.toUTF8(e,n);case\"base64\":return this.toBase64(e,n);case\"hex\":return this.toHex(e,n);case\"binary\":return this.toBinary(e,n);case\"debug\":return this.toDebug();case\"columns\":return this.toColumns();default:throw Error(\"Unsupported encoding: \"+t)}};var c=function(){for(var t={},e=[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47],n=[],r=0,i=e.length;r<i;++r)n[e[r]]=r;return t.encode=function(t,n){for(var r,i;null!==(r=t());)n(e[r>>2&63]),i=(3&r)<<4,null!==(r=t())?(i|=r>>4&15,n(e[63&(i|r>>4&15)]),i=(15&r)<<2,null!==(r=t())?(n(e[63&(i|r>>6&3)]),n(e[63&r])):(n(e[63&i]),n(61))):(n(e[63&i]),n(61),n(61))},t.decode=function(t,e){function r(t){throw Error(\"Illegal character code: \"+t)}for(var i,o,a;null!==(i=t());)if(o=n[i],void 0===o&&r(i),null!==(i=t())&&(a=n[i],void 0===a&&r(i),e(o<<2>>>0|(48&a)>>4),null!==(i=t()))){if(void 0===(o=n[i])){if(61===i)break;r(i)}if(e((15&a)<<4>>>0|(60&o)>>2),null!==(i=t())){if(void 0===(a=n[i])){if(61===i)break;r(i)}e((3&o)<<6>>>0|a)}}},t.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)},t}();a.toBase64=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),t|=0,e|=0,t<0||e>this.capacity||t>e)throw RangeError(\"begin, end\");var r;return c.encode(function(){return t<e?this.view[t++]:null}.bind(this),r=n()),r()},o.fromBase64=function(t,n){if(\"string\"!=typeof t)throw TypeError(\"str\");var r=new o(t.length/4*3,n),i=0;return c.decode(e(t),function(t){r.view[i++]=t}),r.limit=i,r},o.btoa=function(t){return o.fromBinary(t).toBase64()},o.atob=function(t){return o.fromBase64(t).toBinary()},a.toBinary=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),t|=0,e|=0,t<0||e>this.capacity()||t>e)throw RangeError(\"begin, end\");if(t===e)return\"\";for(var n=[],r=[];t<e;)n.push(this.view[t++]),n.length>=1024&&(r.push(String.fromCharCode.apply(String,n)),n=[]);return r.join(\"\")+String.fromCharCode.apply(String,n)},o.fromBinary=function(t,e){if(\"string\"!=typeof t)throw TypeError(\"str\");for(var n,r=0,i=t.length,a=new o(i,e);r<i;){if((n=t.charCodeAt(r))>255)throw RangeError(\"illegal char code: \"+n);a.view[r++]=n}return a.limit=i,a},a.toDebug=function(t){for(var e,n=-1,r=this.buffer.byteLength,i=\"\",o=\"\",a=\"\";n<r;){if(-1!==n&&(e=this.view[n],i+=e<16?\"0\"+e.toString(16).toUpperCase():e.toString(16).toUpperCase(),t&&(o+=e>32&&e<127?String.fromCharCode(e):\".\")),++n,t&&n>0&&n%16==0&&n!==r){for(;i.length<51;)i+=\" \";a+=i+o+\"\\n\",i=o=\"\"}n===this.offset&&n===this.limit?i+=n===this.markedOffset?\"!\":\"|\":n===this.offset?i+=n===this.markedOffset?\"[\":\"<\":n===this.limit?i+=n===this.markedOffset?\"]\":\">\":i+=n===this.markedOffset?\"'\":t||0!==n&&n!==r?\" \":\"\"}if(t&&\" \"!==i){for(;i.length<51;)i+=\" \";a+=i+o+\"\\n\"}return t?a:i},o.fromDebug=function(t,e,n){for(var r,i,a=t.length,s=new o((a+1)/3|0,e,n),u=0,c=0,f=!1,l=!1,h=!1,d=!1,p=!1;u<a;){switch(r=t.charAt(u++)){case\"!\":if(!n){if(l||h||d){p=!0;break}l=h=d=!0}s.offset=s.markedOffset=s.limit=c,f=!1;break;case\"|\":if(!n){if(l||d){p=!0;break}l=d=!0}s.offset=s.limit=c,f=!1;break;case\"[\":if(!n){if(l||h){p=!0;break}l=h=!0}s.offset=s.markedOffset=c,f=!1;break;case\"<\":if(!n){if(l){p=!0;break}l=!0}s.offset=c,f=!1;break;case\"]\":if(!n){if(d||h){p=!0;break}d=h=!0}s.limit=s.markedOffset=c,f=!1;break;case\">\":if(!n){if(d){p=!0;break}d=!0}s.limit=c,f=!1;break;case\"'\":if(!n){if(h){p=!0;break}h=!0}s.markedOffset=c,f=!1;break;case\" \":f=!1;break;default:if(!n&&f){p=!0;break}if(i=parseInt(r+t.charAt(u++),16),!n&&(isNaN(i)||i<0||i>255))throw TypeError(\"Illegal str: Not a debug encoded string\");s.view[c++]=i,f=!0}if(p)throw TypeError(\"Illegal str: Invalid symbol at \"+u)}if(!n){if(!l||!d)throw TypeError(\"Illegal str: Missing offset or limit\");if(c<s.buffer.byteLength)throw TypeError(\"Illegal str: Not a debug encoded string (is it hex?) \"+c+\" < \"+a)}return s},a.toHex=function(t,e){if(t=void 0===t?this.offset:t,e=void 0===e?this.limit:e,!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}for(var n,r=new Array(e-t);t<e;)n=this.view[t++],n<16?r.push(\"0\",n.toString(16)):r.push(n.toString(16));return r.join(\"\")},o.fromHex=function(t,e,n){if(!n){if(\"string\"!=typeof t)throw TypeError(\"Illegal str: Not a string\");if(t.length%2!=0)throw TypeError(\"Illegal str: Length not a multiple of 2\")}for(var r,i=t.length,a=new o(i/2|0,e),s=0,u=0;s<i;s+=2){if(r=parseInt(t.substring(s,s+2),16),!n&&(!isFinite(r)||r<0||r>255))throw TypeError(\"Illegal str: Contains non-hex characters\");a.view[u++]=r}return a.limit=u,a};var f=function(){var t={};return t.MAX_CODEPOINT=1114111,t.encodeUTF8=function(t,e){var n=null;for(\"number\"==typeof t&&(n=t,t=function(){return null});null!==n||null!==(n=t());)n<128?e(127&n):n<2048?(e(n>>6&31|192),e(63&n|128)):n<65536?(e(n>>12&15|224),e(n>>6&63|128),e(63&n|128)):(e(n>>18&7|240),e(n>>12&63|128),e(n>>6&63|128),e(63&n|128)),n=null},t.decodeUTF8=function(t,e){for(var n,r,i,o,a=function(t){t=t.slice(0,t.indexOf(null));var e=Error(t.toString());throw e.name=\"TruncatedError\",e.bytes=t,e};null!==(n=t());)if(0==(128&n))e(n);else if(192==(224&n))null===(r=t())&&a([n,r]),e((31&n)<<6|63&r);else if(224==(240&n))(null===(r=t())||null===(i=t()))&&a([n,r,i]),e((15&n)<<12|(63&r)<<6|63&i);else{if(240!=(248&n))throw RangeError(\"Illegal starting byte: \"+n);(null===(r=t())||null===(i=t())||null===(o=t()))&&a([n,r,i,o]),e((7&n)<<18|(63&r)<<12|(63&i)<<6|63&o)}},t.UTF16toUTF8=function(t,e){for(var n,r=null;;){if(null===(n=null!==r?r:t()))break;n>=55296&&n<=57343&&null!==(r=t())&&r>=56320&&r<=57343?(e(1024*(n-55296)+r-56320+65536),r=null):e(n)}null!==r&&e(r)},t.UTF8toUTF16=function(t,e){var n=null;for(\"number\"==typeof t&&(n=t,t=function(){return null});null!==n||null!==(n=t());)n<=65535?e(n):(n-=65536,e(55296+(n>>10)),e(n%1024+56320)),n=null},t.encodeUTF16toUTF8=function(e,n){t.UTF16toUTF8(e,function(e){t.encodeUTF8(e,n)})},t.decodeUTF8toUTF16=function(e,n){t.decodeUTF8(e,function(e){t.UTF8toUTF16(e,n)})},t.calculateCodePoint=function(t){return t<128?1:t<2048?2:t<65536?3:4},t.calculateUTF8=function(t){for(var e,n=0;null!==(e=t());)n+=e<128?1:e<2048?2:e<65536?3:4;return n},t.calculateUTF16asUTF8=function(e){var n=0,r=0;return t.UTF16toUTF8(e,function(t){++n,r+=t<128?1:t<2048?2:t<65536?3:4}),[n,r]},t}();return a.toUTF8=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if(\"number\"!=typeof t||t%1!=0)throw TypeError(\"Illegal begin: Not an integer\");if(t>>>=0,\"number\"!=typeof e||e%1!=0)throw TypeError(\"Illegal end: Not an integer\");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError(\"Illegal range: 0 <= \"+t+\" <= \"+e+\" <= \"+this.buffer.byteLength)}var r;try{f.decodeUTF8toUTF16(function(){return t<e?this.view[t++]:null}.bind(this),r=n())}catch(n){if(t!==e)throw RangeError(\"Illegal range: Truncated data, \"+t+\" != \"+e)}return r()},o.fromUTF8=function(t,n,r){if(!r&&\"string\"!=typeof t)throw TypeError(\"Illegal str: Not a string\");var i=new o(f.calculateUTF16asUTF8(e(t),!0)[1],n,r),a=0;return f.encodeUTF16toUTF8(e(t),function(t){i.view[a++]=t}),i.limit=a,i},o})},function(t,e,n){var r,i,o;/**\n * @license long.js (c) 2013 Daniel Wirtz <dcode@dcode.io>\n * Released under the Apache License, Version 2.0\n * see: https://github.com/dcodeIO/long.js for details\n */\n!function(n,a){i=[],r=a,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(){\"use strict\";function t(t,e,n){this.low=0|t,this.high=0|e,this.unsigned=!!n}function e(t){return!0===(t&&t.__isLong__)}function n(t,e){var n,r,o;return e?(t>>>=0,(o=0<=t&&t<256)&&(r=u[t])?r:(n=i(t,(0|t)<0?-1:0,!0),o&&(u[t]=n),n)):(t|=0,(o=-128<=t&&t<128)&&(r=s[t])?r:(n=i(t,t<0?-1:0,!1),o&&(s[t]=n),n))}function r(t,e){if(isNaN(t)||!isFinite(t))return e?v:p;if(e){if(t<0)return v;if(t>=l)return _}else{if(t<=-h)return w;if(t+1>=h)return b}return t<0?r(-t,e).neg():i(t%f|0,t/f|0,e)}function i(e,n,r){return new t(e,n,r)}function o(t,e,n){if(0===t.length)throw Error(\"empty string\");if(\"NaN\"===t||\"Infinity\"===t||\"+Infinity\"===t||\"-Infinity\"===t)return p;if(\"number\"==typeof e?(n=e,e=!1):e=!!e,(n=n||10)<2||36<n)throw RangeError(\"radix\");var i;if((i=t.indexOf(\"-\"))>0)throw Error(\"interior hyphen\");if(0===i)return o(t.substring(1),e,n).neg();for(var a=r(c(n,8)),s=p,u=0;u<t.length;u+=8){var f=Math.min(8,t.length-u),l=parseInt(t.substring(u,u+f),n);if(f<8){var h=r(c(n,f));s=s.mul(h).add(r(l))}else s=s.mul(a),s=s.add(r(l))}return s.unsigned=e,s}function a(e){return e instanceof t?e:\"number\"==typeof e?r(e):\"string\"==typeof e?o(e):i(e.low,e.high,e.unsigned)}t.prototype.__isLong__,Object.defineProperty(t.prototype,\"__isLong__\",{value:!0,enumerable:!1,configurable:!1}),t.isLong=e;var s={},u={};t.fromInt=n,t.fromNumber=r,t.fromBits=i;var c=Math.pow;t.fromString=o,t.fromValue=a;var f=4294967296,l=f*f,h=l/2,d=n(1<<24),p=n(0);t.ZERO=p;var v=n(0,!0);t.UZERO=v;var g=n(1);t.ONE=g;var m=n(1,!0);t.UONE=m;var y=n(-1);t.NEG_ONE=y;var b=i(-1,2147483647,!1);t.MAX_VALUE=b;var _=i(-1,-1,!0);t.MAX_UNSIGNED_VALUE=_;var w=i(0,-2147483648,!1);t.MIN_VALUE=w;var E=t.prototype;return E.toInt=function(){return this.unsigned?this.low>>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},E.toString=function(t){if((t=t||10)<2||36<t)throw RangeError(\"radix\");if(this.isZero())return\"0\";if(this.isNegative()){if(this.eq(w)){var e=r(t),n=this.div(e),i=n.mul(e).sub(this);return n.toString(t)+i.toInt().toString(t)}return\"-\"+this.neg().toString(t)}for(var o=r(c(t,6),this.unsigned),a=this,s=\"\";;){var u=a.div(o),f=a.sub(u.mul(o)).toInt()>>>0,l=f.toString(t);if(a=u,a.isZero())return l+s;for(;l.length<6;)l=\"0\"+l;s=\"\"+l+s}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq(w)?64:this.neg().getNumBitsAbs();for(var t=0!=this.high?this.high:this.low,e=31;e>0&&0==(t&1<<e);e--);return 0!=this.high?e+33:e+1},E.isZero=function(){return 0===this.high&&0===this.low},E.isNegative=function(){return!this.unsigned&&this.high<0},E.isPositive=function(){return this.unsigned||this.high>=0},E.isOdd=function(){return 1==(1&this.low)},E.isEven=function(){return 0==(1&this.low)},E.equals=function(t){return e(t)||(t=a(t)),(this.unsigned===t.unsigned||this.high>>>31!=1||t.high>>>31!=1)&&(this.high===t.high&&this.low===t.low)},E.eq=E.equals,E.notEquals=function(t){return!this.eq(t)},E.neq=E.notEquals,E.lessThan=function(t){return this.comp(t)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(t){return this.comp(t)<=0},E.lte=E.lessThanOrEqual,E.greaterThan=function(t){return this.comp(t)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(t){return this.comp(t)>=0},E.gte=E.greaterThanOrEqual,E.compare=function(t){if(e(t)||(t=a(t)),this.eq(t))return 0;var n=this.isNegative(),r=t.isNegative();return n&&!r?-1:!n&&r?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq(w)?w:this.not().add(g)},E.neg=E.negate,E.add=function(t){e(t)||(t=a(t));var n=this.high>>>16,r=65535&this.high,o=this.low>>>16,s=65535&this.low,u=t.high>>>16,c=65535&t.high,f=t.low>>>16,l=65535&t.low,h=0,d=0,p=0,v=0;return v+=s+l,p+=v>>>16,v&=65535,p+=o+f,d+=p>>>16,p&=65535,d+=r+c,h+=d>>>16,d&=65535,h+=n+u,h&=65535,i(p<<16|v,h<<16|d,this.unsigned)},E.subtract=function(t){return e(t)||(t=a(t)),this.add(t.neg())},E.sub=E.subtract,E.multiply=function(t){if(this.isZero())return p;if(e(t)||(t=a(t)),t.isZero())return p;if(this.eq(w))return t.isOdd()?w:p;if(t.eq(w))return this.isOdd()?w:p;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(d)&&t.lt(d))return r(this.toNumber()*t.toNumber(),this.unsigned);var n=this.high>>>16,o=65535&this.high,s=this.low>>>16,u=65535&this.low,c=t.high>>>16,f=65535&t.high,l=t.low>>>16,h=65535&t.low,v=0,g=0,m=0,y=0;return y+=u*h,m+=y>>>16,y&=65535,m+=s*h,g+=m>>>16,m&=65535,m+=u*l,g+=m>>>16,m&=65535,g+=o*h,v+=g>>>16,g&=65535,g+=s*l,v+=g>>>16,g&=65535,g+=u*f,v+=g>>>16,g&=65535,v+=n*h+o*l+s*f+u*c,v&=65535,i(m<<16|y,v<<16|g,this.unsigned)},E.mul=E.multiply,E.divide=function(t){if(e(t)||(t=a(t)),t.isZero())throw Error(\"division by zero\");if(this.isZero())return this.unsigned?v:p;var n,i,o;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return v;if(t.gt(this.shru(1)))return m;o=v}else{if(this.eq(w)){if(t.eq(g)||t.eq(y))return w;if(t.eq(w))return g;return n=this.shr(1).div(t).shl(1),n.eq(p)?t.isNegative()?g:y:(i=this.sub(t.mul(n)),o=n.add(i.div(t)))}if(t.eq(w))return this.unsigned?v:p;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();o=p}for(i=this;i.gte(t);){n=Math.max(1,Math.floor(i.toNumber()/t.toNumber()));for(var s=Math.ceil(Math.log(n)/Math.LN2),u=s<=48?1:c(2,s-48),f=r(n),l=f.mul(t);l.isNegative()||l.gt(i);)n-=u,f=r(n,this.unsigned),l=f.mul(t);f.isZero()&&(f=g),o=o.add(f),i=i.sub(l)}return o},E.div=E.divide,E.modulo=function(t){return e(t)||(t=a(t)),this.sub(this.div(t).mul(t))},E.mod=E.modulo,E.not=function(){return i(~this.low,~this.high,this.unsigned)},E.and=function(t){return e(t)||(t=a(t)),i(this.low&t.low,this.high&t.high,this.unsigned)},E.or=function(t){return e(t)||(t=a(t)),i(this.low|t.low,this.high|t.high,this.unsigned)},E.xor=function(t){return e(t)||(t=a(t)),i(this.low^t.low,this.high^t.high,this.unsigned)},E.shiftLeft=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?i(this.low<<t,this.high<<t|this.low>>>32-t,this.unsigned):i(0,this.low<<t-32,this.unsigned)},E.shl=E.shiftLeft,E.shiftRight=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?i(this.low>>>t|this.high<<32-t,this.high>>t,this.unsigned):i(this.high>>t-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(t){if(e(t)&&(t=t.toInt()),0===(t&=63))return this;var n=this.high;if(t<32){return i(this.low>>>t|n<<32-t,n>>>t,this.unsigned)}return 32===t?i(n,0,this.unsigned):i(n>>>t-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?i(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:i(this.low,this.high,!0)},E.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var t=this.high,e=this.low;return[255&e,e>>>8&255,e>>>16&255,e>>>24&255,255&t,t>>>8&255,t>>>16&255,t>>>24&255]},E.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e]},t})},function(t,e){},function(t,e,n){\"use strict\";function r(){}function i(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(t,e,n,r,o){if(\"function\"!=typeof n)throw new TypeError(\"The listener must be a function\");var a=new i(n,r||t,o),s=d?d+e:e;return t._events[s]?t._events[s].fn?t._events[s]=[t._events[s],a]:t._events[s].push(a):(t._events[s]=a,t._eventsCount++),t}function a(t,e){0==--t._eventsCount?t._events=new r:delete t._events[e]}function s(){this._events=new r,this._eventsCount=0}var u=n(1),c=u(n(59)),f=u(n(257)),l=u(n(22)),h=Object.prototype.hasOwnProperty,d=\"~\";Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(d=!1)),s.prototype.eventNames=function(){var t,e,n=[];if(0===this._eventsCount)return n;for(e in t=this._events)h.call(t,e)&&n.push(d?(0,c.default)(e).call(e,1):e);return f.default?(0,l.default)(n).call(n,(0,f.default)(t)):n},s.prototype.listeners=function(t){var e=d?d+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var r=0,i=n.length,o=new Array(i);r<i;r++)o[r]=n[r].fn;return o},s.prototype.listenerCount=function(t){var e=d?d+t:t,n=this._events[e];return n?n.fn?1:n.length:0},s.prototype.emit=function(t,e,n,r,i,o){var a=d?d+t:t;if(!this._events[a])return!1;var s,u,c=this._events[a],f=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),f){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,e),!0;case 3:return c.fn.call(c.context,e,n),!0;case 4:return c.fn.call(c.context,e,n,r),!0;case 5:return c.fn.call(c.context,e,n,r,i),!0;case 6:return c.fn.call(c.context,e,n,r,i,o),!0}for(u=1,s=new Array(f-1);u<f;u++)s[u-1]=arguments[u];c.fn.apply(c.context,s)}else{var l,h=c.length;for(u=0;u<h;u++)switch(c[u].once&&this.removeListener(t,c[u].fn,void 0,!0),f){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,e);break;case 3:c[u].fn.call(c[u].context,e,n);break;case 4:c[u].fn.call(c[u].context,e,n,r);break;default:if(!s)for(l=1,s=new Array(f-1);l<f;l++)s[l-1]=arguments[l];c[u].fn.apply(c[u].context,s)}}return!0},s.prototype.on=function(t,e,n){return o(this,t,e,n,!1)},s.prototype.once=function(t,e,n){return o(this,t,e,n,!0)},s.prototype.removeListener=function(t,e,n,r){var i=d?d+t:t;if(!this._events[i])return this;if(!e)return a(this,i),this;var o=this._events[i];if(o.fn)o.fn!==e||r&&!o.once||n&&o.context!==n||a(this,i);else{for(var s=0,u=[],c=o.length;s<c;s++)(o[s].fn!==e||r&&!o[s].once||n&&o[s].context!==n)&&u.push(o[s]);u.length?this._events[i]=1===u.length?u[0]:u:a(this,i)}return this},s.prototype.removeAllListeners=function(t){var e;return t?(e=d?d+t:t,this._events[e]&&a(this,e)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=d,s.EventEmitter=s,t.exports=s},function(t,e,n){t.exports=n(609)},function(t,e,n){var r=function(t){\"use strict\";function e(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}function n(t,e,n,r){var o=e&&e.prototype instanceof i?e:i,a=Object.create(o.prototype),s=new d(r||[]);return a._invoke=c(t,n,s),a}function r(t,e,n){try{return{type:\"normal\",arg:t.call(e,n)}}catch(t){return{type:\"throw\",arg:t}}}function i(){}function o(){}function a(){}function s(t){[\"next\",\"throw\",\"return\"].forEach(function(n){e(t,n,function(t){return this._invoke(n,t)})})}function u(t,e){function n(i,o,a,s){var u=r(t[i],t,o);if(\"throw\"!==u.type){var c=u.arg,f=c.value;return f&&\"object\"==typeof f&&y.call(f,\"__await\")?e.resolve(f.__await).then(function(t){n(\"next\",t,a,s)},function(t){n(\"throw\",t,a,s)}):e.resolve(f).then(function(t){c.value=t,a(c)},function(t){return n(\"throw\",t,a,s)})}s(u.arg)}function i(t,r){function i(){return new e(function(e,i){n(t,r,e,i)})}return o=o?o.then(i,i):i()}var o;this._invoke=i}function c(t,e,n){var i=O;return function(o,a){if(i===S)throw new Error(\"Generator is already running\");if(i===A){if(\"throw\"===o)throw a;return v()}for(n.method=o,n.arg=a;;){var s=n.delegate;if(s){var u=f(s,n);if(u){if(u===x)continue;return u}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(i===O)throw i=A,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);i=S;var c=r(t,e,n);if(\"normal\"===c.type){if(i=n.done?A:T,c.arg===x)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(i=A,n.method=\"throw\",n.arg=c.arg)}}}function f(t,e){var n=t.iterator[e.method];if(n===g){if(e.delegate=null,\"throw\"===e.method){if(t.iterator.return&&(e.method=\"return\",e.arg=g,f(t,e),\"throw\"===e.method))return x;e.method=\"throw\",e.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return x}var i=r(n,t.iterator,e.arg);if(\"throw\"===i.type)return e.method=\"throw\",e.arg=i.arg,e.delegate=null,x;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,\"return\"!==e.method&&(e.method=\"next\",e.arg=g),e.delegate=null,x):o:(e.method=\"throw\",e.arg=new TypeError(\"iterator result is not an object\"),e.delegate=null,x)}function l(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function h(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function d(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(l,this),this.reset(!0)}function p(t){if(t){var e=t[_];if(e)return e.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,r=function e(){for(;++n<t.length;)if(y.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=g,e.done=!0,e};return r.next=r}}return{next:v}}function v(){return{value:g,done:!0}}var g,m=Object.prototype,y=m.hasOwnProperty,b=\"function\"==typeof Symbol?Symbol:{},_=b.iterator||\"@@iterator\",w=b.asyncIterator||\"@@asyncIterator\",E=b.toStringTag||\"@@toStringTag\";try{e({},\"\")}catch(t){e=function(t,e,n){return t[e]=n}}t.wrap=n;var O=\"suspendedStart\",T=\"suspendedYield\",S=\"executing\",A=\"completed\",x={},I={};I[_]=function(){return this};var j=Object.getPrototypeOf,C=j&&j(j(p([])));C&&C!==m&&y.call(C,_)&&(I=C);var N=a.prototype=i.prototype=Object.create(I);return o.prototype=N.constructor=a,a.constructor=o,o.displayName=e(a,E,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===o||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,a):(t.__proto__=a,e(t,E,\"GeneratorFunction\")),t.prototype=Object.create(N),t},t.awrap=function(t){return{__await:t}},s(u.prototype),u.prototype[w]=function(){return this},t.AsyncIterator=u,t.async=function(e,r,i,o,a){void 0===a&&(a=Promise);var s=new u(n(e,r,i,o),a);return t.isGeneratorFunction(r)?s:s.next().then(function(t){return t.done?t.value:s.next()})},s(N),e(N,E,\"Generator\"),N[_]=function(){return this},N.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},t.values=p,d.prototype={constructor:d,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=g,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=g,this.tryEntries.forEach(h),!t)for(var e in this)\"t\"===e.charAt(0)&&y.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=g)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){function e(e,r){return o.type=\"throw\",o.arg=t,n.next=e,r&&(n.method=\"next\",n.arg=g),!!r}if(this.done)throw t;for(var n=this,r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r],o=i.completion;if(\"root\"===i.tryLoc)return e(\"end\");if(i.tryLoc<=this.prev){var a=y.call(i,\"catchLoc\"),s=y.call(i,\"finallyLoc\");if(a&&s){if(this.prev<i.catchLoc)return e(i.catchLoc,!0);if(this.prev<i.finallyLoc)return e(i.finallyLoc)}else if(a){if(this.prev<i.catchLoc)return e(i.catchLoc,!0)}else{if(!s)throw new Error(\"try statement without catch or finally\");if(this.prev<i.finallyLoc)return e(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&y.call(r,\"finallyLoc\")&&this.prev<r.finallyLoc){var i=r;break}}i&&(\"break\"===t||\"continue\"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=t,o.arg=e,i?(this.method=\"next\",this.next=i.finallyLoc,x):this.complete(o)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),x},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),h(n),x}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if(\"throw\"===r.type){var i=r.arg;h(n)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,e,n){return this.delegate={iterator:p(t),resultName:e,nextLoc:n},\"next\"===this.method&&(this.arg=g),x}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(r)}},function(t,e){function n(t,e,n,r,i,o,a){try{var s=t[o](a),u=s.value}catch(t){return void n(t)}s.done?e(u):Promise.resolve(u).then(r,i)}function r(t){return function(){var e=this,r=arguments;return new Promise(function(i,o){function a(t){n(u,i,o,a,s,\"next\",t)}function s(t){n(u,i,o,a,s,\"throw\",t)}var u=t.apply(e,r);a(void 0)})}}t.exports=r},function(t,e,n){function r(t){return i(t)||o(t)||a(t)||s()}var i=n(612),o=n(261),a=n(262),s=n(613);t.exports=r},function(t,e,n){function r(t){if(Array.isArray(t))return i(t)}var i=n(260);t.exports=r},function(t,e){function n(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}t.exports=n},function(t,e){function n(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}t.exports=n},function(t,e,n){function r(t,e){if(null==t)return{};var n,r,o=i(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var i=n(616);t.exports=r},function(t,e){function n(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r<o.length;r++)n=o[r],e.indexOf(n)>=0||(i[n]=t[n]);return i}t.exports=n},function(t,e){function n(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}t.exports=n},function(t,e){function n(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}t.exports=n},function(t,e,n){function r(t){return(a(t)?i:o)(t)}var i=n(620),o=n(623),a=n(268);t.exports=r},function(t,e,n){function r(t){return o(i(t))}var i=n(621),o=n(263);t.exports=r},function(t,e){function n(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}t.exports=n},function(t,e){function n(t,e){return t+r(i()*(e-t+1))}var r=Math.floor,i=Math.random;t.exports=n},function(t,e,n){function r(t){return i(o(t))}var i=n(263),o=n(264);t.exports=r},function(t,e,n){function r(t,e){return i(e,function(e){return t[e]})}var i=n(625);t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}t.exports=n},function(t,e,n){function r(t){return a(t)?i(t):o(t)}var i=n(627),o=n(640),a=n(643);t.exports=r},function(t,e,n){function r(t,e){var n=a(t),r=!n&&o(t),f=!n&&!r&&s(t),h=!n&&!r&&!f&&c(t),d=n||r||f||h,p=d?i(t.length,String):[],v=p.length;for(var g in t)!e&&!l.call(t,g)||d&&(\"length\"==g||f&&(\"offset\"==g||\"parent\"==g)||h&&(\"buffer\"==g||\"byteLength\"==g||\"byteOffset\"==g)||u(g,v))||p.push(g);return p}var i=n(628),o=n(629),a=n(268),s=n(633),u=n(635),c=n(636),f=Object.prototype,l=f.hasOwnProperty;t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}t.exports=n},function(t,e,n){var r=n(630),i=n(118),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(t){return i(t)&&a.call(t,\"callee\")&&!s.call(t,\"callee\")};t.exports=u},function(t,e,n){function r(t){return o(t)&&i(t)==a}var i=n(117),o=n(118),a=\"[object Arguments]\";t.exports=r},function(t,e,n){function r(t){var e=a.call(t,u),n=t[u];try{t[u]=void 0;var r=!0}catch(t){}var i=s.call(t);return r&&(e?t[u]=n:delete t[u]),i}var i=n(265),o=Object.prototype,a=o.hasOwnProperty,s=o.toString,u=i?i.toStringTag:void 0;t.exports=r},function(t,e){function n(t){return i.call(t)}var r=Object.prototype,i=r.toString;t.exports=n},function(t,e,n){(function(t){var r=n(266),i=n(634),o=\"object\"==typeof e&&e&&!e.nodeType&&e,a=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===o,u=s?r.Buffer:void 0,c=u?u.isBuffer:void 0,f=c||i;t.exports=f}).call(e,n(269)(t))},function(t,e){function n(){return!1}t.exports=n},function(t,e){function n(t,e){var n=typeof t;return!!(e=null==e?r:e)&&(\"number\"==n||\"symbol\"!=n&&i.test(t))&&t>-1&&t%1==0&&t<e}var r=9007199254740991,i=/^(?:0|[1-9]\\d*)$/;t.exports=n},function(t,e,n){var r=n(637),i=n(638),o=n(639),a=o&&o.isTypedArray,s=a?i(a):r;t.exports=s},function(t,e,n){function r(t){return a(t)&&o(t.length)&&!!s[i(t)]}var i=n(117),o=n(270),a=n(118),s={};s[\"[object Float32Array]\"]=s[\"[object Float64Array]\"]=s[\"[object Int8Array]\"]=s[\"[object Int16Array]\"]=s[\"[object Int32Array]\"]=s[\"[object Uint8Array]\"]=s[\"[object Uint8ClampedArray]\"]=s[\"[object Uint16Array]\"]=s[\"[object Uint32Array]\"]=!0,s[\"[object Arguments]\"]=s[\"[object Array]\"]=s[\"[object ArrayBuffer]\"]=s[\"[object Boolean]\"]=s[\"[object DataView]\"]=s[\"[object Date]\"]=s[\"[object Error]\"]=s[\"[object Function]\"]=s[\"[object Map]\"]=s[\"[object Number]\"]=s[\"[object Object]\"]=s[\"[object RegExp]\"]=s[\"[object Set]\"]=s[\"[object String]\"]=s[\"[object WeakMap]\"]=!1,t.exports=r},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){(function(t){var r=n(267),i=\"object\"==typeof e&&e&&!e.nodeType&&e,o=i&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i,s=a&&r.process,u=function(){try{var t=o&&o.require&&o.require(\"util\").types;return t||s&&s.binding&&s.binding(\"util\")}catch(t){}}();t.exports=u}).call(e,n(269)(t))},function(t,e,n){function r(t){if(!i(t))return o(t);var e=[];for(var n in Object(t))s.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}var i=n(641),o=n(642),a=Object.prototype,s=a.hasOwnProperty;t.exports=r},function(t,e){function n(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||r)}var r=Object.prototype;t.exports=n},function(t,e,n){var r=n(271),i=r(Object.keys,Object);t.exports=i},function(t,e,n){function r(t){return null!=t&&o(t.length)&&!i(t)}var i=n(644),o=n(270);t.exports=r},function(t,e,n){function r(t){if(!o(t))return!1;var e=i(t);return e==s||e==u||e==a||e==c}var i=n(117),o=n(645),a=\"[object AsyncFunction]\",s=\"[object Function]\",u=\"[object GeneratorFunction]\",c=\"[object Proxy]\";t.exports=r},function(t,e){function n(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}t.exports=n},function(t,e,n){function r(t){return i(t)||o(t)||a(t)||s()}var i=n(647),o=n(261),a=n(262),s=n(648);t.exports=r},function(t,e){function n(t){if(Array.isArray(t))return t}t.exports=n},function(t,e){function n(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}t.exports=n},function(t,e){function n(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function r(t,e,r){return e&&n(t.prototype,e),r&&n(t,r),t}t.exports=r},function(t,e){function n(t,e,n,r,i){var o={};return Object.keys(r).forEach(function(t){o[t]=r[t]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,(\"value\"in o||o.initializer)&&(o.writable=!0),o=n.slice().reverse().reduce(function(n,r){return r(t,e,n)||n},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(t,e,o),o=null),o}t.exports=n},function(t,e,n){!function(){var n={VERSION:\"2.4.0\",Result:{SUCCEEDED:1,NOTRANSITION:2,CANCELLED:3,PENDING:4},Error:{INVALID_TRANSITION:100,PENDING_TRANSITION:200,INVALID_CALLBACK:300},WILDCARD:\"*\",ASYNC:\"async\",create:function(t,e){var r=\"string\"==typeof t.initial?{state:t.initial}:t.initial,i=t.terminal||t.final,o=e||t.target||{},a=t.events||[],s=t.callbacks||{},u={},c={},f=function(t){var e=Array.isArray(t.from)?t.from:t.from?[t.from]:[n.WILDCARD];u[t.name]=u[t.name]||{};for(var r=0;r<e.length;r++)c[e[r]]=c[e[r]]||[],c[e[r]].push(t.name),u[t.name][e[r]]=t.to||e[r];t.to&&(c[t.to]=c[t.to]||[])};r&&(r.event=r.event||\"startup\",f({name:r.event,from:\"none\",to:r.state}));for(var l=0;l<a.length;l++)f(a[l]);for(var h in u)u.hasOwnProperty(h)&&(o[h]=n.buildEvent(h,u[h]));for(var h in s)s.hasOwnProperty(h)&&(o[h]=s[h]);return o.current=\"none\",o.is=function(t){return Array.isArray(t)?t.indexOf(this.current)>=0:this.current===t},o.can=function(t){return!this.transition&&void 0!==u[t]&&(u[t].hasOwnProperty(this.current)||u[t].hasOwnProperty(n.WILDCARD))},o.cannot=function(t){return!this.can(t)},o.transitions=function(){return(c[this.current]||[]).concat(c[n.WILDCARD]||[])},o.isFinished=function(){return this.is(i)},o.error=t.error||function(t,e,n,r,i,o,a){throw a||o},o.states=function(){return Object.keys(c).sort()},r&&!r.defer&&o[r.event](),o},doCallback:function(t,e,r,i,o,a){if(e)try{return e.apply(t,[r,i,o].concat(a))}catch(e){return t.error(r,i,o,a,n.Error.INVALID_CALLBACK,\"an exception occurred in a caller-provided callback function\",e)}},beforeAnyEvent:function(t,e,r,i,o){return n.doCallback(t,t.onbeforeevent,e,r,i,o)},afterAnyEvent:function(t,e,r,i,o){return n.doCallback(t,t.onafterevent||t.onevent,e,r,i,o)},leaveAnyState:function(t,e,r,i,o){return n.doCallback(t,t.onleavestate,e,r,i,o)},enterAnyState:function(t,e,r,i,o){return n.doCallback(t,t.onenterstate||t.onstate,e,r,i,o)},changeState:function(t,e,r,i,o){return n.doCallback(t,t.onchangestate,e,r,i,o)},beforeThisEvent:function(t,e,r,i,o){return n.doCallback(t,t[\"onbefore\"+e],e,r,i,o)},afterThisEvent:function(t,e,r,i,o){return n.doCallback(t,t[\"onafter\"+e]||t[\"on\"+e],e,r,i,o)},leaveThisState:function(t,e,r,i,o){return n.doCallback(t,t[\"onleave\"+r],e,r,i,o)},enterThisState:function(t,e,r,i,o){return n.doCallback(t,t[\"onenter\"+i]||t[\"on\"+i],e,r,i,o)},beforeEvent:function(t,e,r,i,o){if(!1===n.beforeThisEvent(t,e,r,i,o)||!1===n.beforeAnyEvent(t,e,r,i,o))return!1},afterEvent:function(t,e,r,i,o){n.afterThisEvent(t,e,r,i,o),n.afterAnyEvent(t,e,r,i,o)},leaveState:function(t,e,r,i,o){var a=n.leaveThisState(t,e,r,i,o),s=n.leaveAnyState(t,e,r,i,o);return!1!==a&&!1!==s&&(n.ASYNC===a||n.ASYNC===s?n.ASYNC:void 0)},enterState:function(t,e,r,i,o){n.enterThisState(t,e,r,i,o),n.enterAnyState(t,e,r,i,o)},buildEvent:function(t,e){return function(){var r=this.current,i=e[r]||(e[n.WILDCARD]!=n.WILDCARD?e[n.WILDCARD]:r)||r,o=Array.prototype.slice.call(arguments);if(this.transition)return this.error(t,r,i,o,n.Error.PENDING_TRANSITION,\"event \"+t+\" inappropriate because previous transition did not complete\");if(this.cannot(t))return this.error(t,r,i,o,n.Error.INVALID_TRANSITION,\"event \"+t+\" inappropriate in current state \"+this.current);if(!1===n.beforeEvent(this,t,r,i,o))return n.Result.CANCELLED;if(r===i)return n.afterEvent(this,t,r,i,o),n.Result.NOTRANSITION;var a=this;this.transition=function(){return a.transition=null,a.current=i,n.enterState(a,t,r,i,o),n.changeState(a,t,r,i,o),n.afterEvent(a,t,r,i,o),n.Result.SUCCEEDED},this.transition.cancel=function(){a.transition=null,n.afterEvent(a,t,r,i,o)};var s=n.leaveState(this,t,r,i,o);return!1===s?(this.transition=null,n.Result.CANCELLED):n.ASYNC===s?n.Result.PENDING:this.transition?this.transition():void 0}}};void 0!==t&&t.exports&&(e=t.exports=n),e.StateMachine=n}()},function(t,e){function n(e){\"@babel/helpers - typeof\";return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?t.exports=n=function(t){return typeof t}:t.exports=n=function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n(e)}t.exports=n},function(t,e,n){function r(t){if(!a(t)||i(t)!=s)return!1;var e=o(t);if(null===e)return!0;var n=l.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&f.call(n)==h}var i=n(117),o=n(654),a=n(118),s=\"[object Object]\",u=Function.prototype,c=Object.prototype,f=u.toString,l=c.hasOwnProperty,h=f.call(Object);t.exports=r},function(t,e,n){var r=n(271),i=r(Object.getPrototypeOf,Object);t.exports=i},function(t,e,n){\"use strict\";var r,i,o,a=n(1),s=a(n(656)),u=a(n(245)),c=a(n(259)),f=a(n(22)),l=a(n(256)),h=a(n(35)),d=a(n(114)),p=a(n(91));!function(a,s){\"object\"===(0,p.default)(e)&&void 0!==t?s(e,n(149)):(i=[e,n(149)],r=s,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o))}(0,function(t,e){function n(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function r(t){return i(t)||o(t)||a()}function i(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}function o(t){if((0,s.default)(Object(t))||\"[object Arguments]\"===Object.prototype.toString.call(t))return(0,u.default)(t)}function a(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}if(!e.Protocals)throw new Error(\"LeanCloud Realtime SDK not installed\");var p=e.Protocals.CommandType,v=e.Protocals.GenericCommand,g=e.Protocals.AckCommand,m=function(t){return console.warn(t.message)},y=function(t){function r(n,r,i){var o;return o=t.call(this)||this,o._appId=n,o.id=r,o._connection=i,o._eventemitter=new e.EventEmitter,o._querys=new c.default,o}n(r,t);var i=r.prototype;return i._send=function(t){for(var e,n,r=arguments.length,i=new Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o];return(n=this._connection).send.apply(n,(0,f.default)(e=[(0,l.default)(t,{appId:this._appId,installationId:this.id,service:1})]).call(e,i))},i._open=function(){return this._send(new v({cmd:p.login}))},i.close=function(){var t=this._eventemitter;return t.emit(\"beforeclose\"),this._send(new v({cmd:p.logout})).then(function(){return t.emit(\"close\")})},i.register=function(t){this._querys.add(t)},i.deregister=function(t){var e=this;this._querys.delete(t),setTimeout(function(){e._querys.size||e.close().catch(m)},0)},i._dispatchCommand=function(t){return t.cmd!==p.data?(this.emit(\"unhandledmessage\",t),e.Promise.resolve()):this._dispatchDataCommand(t)},i._dispatchDataCommand=function(t){var e=t.dataMessage,n=e.ids,r=e.msg;this.emit(\"message\",(0,h.default)(r).call(r,function(t){var e=t.data;return JSON.parse(e)}));var i=new v({cmd:p.ack,ackMessage:new g({ids:n})});return this._send(i,!1).catch(m)},r}(e.EventEmitter),b=function(t){return[function(e){return t(),e},function(e){throw t(),e}]},_=function(t){t._liveQueryClients={},t.createLiveQueryClient=function(n){var i;if(void 0!==t._liveQueryClients[n])return e.Promise.resolve(t._liveQueryClients[n]);var o=(i=t._open().then(function(e){var r=new y(t._options.appId,n,e);return e.on(\"reconnect\",function(){return r._open().then(function(){return r.emit(\"reconnect\")},function(t){return r.emit(\"reconnecterror\",t)})}),r._eventemitter.on(\"beforeclose\",function(){delete t._liveQueryClients[r.id]},t),r._eventemitter.on(\"close\",function(){t._deregister(r)},t),r._open().then(function(){return t._liveQueryClients[r.id]=r,t._register(r),r})})).then.apply(i,r(b(function(){t._deregisterPending&&t._deregisterPending(o)})));return t._liveQueryClients[n]=o,t._registerPending&&t._registerPending(o),o}},w=function(t,e){if(!t.installationId||1!==t.service)return!0;var n=e._liveQueryClients[t.installationId];return n?n._dispatchCommand(t).catch(function(t){return console.warn(t)}):console.warn(\"Unexpected message received without any live client match: %O\",t),!1},E={name:\"leancloud-realtime-plugin-live-query\",onRealtimeCreate:_,beforeCommandDispatch:w};t.LiveQueryPlugin=E,(0,d.default)(t,\"__esModule\",{value:!0})})},function(t,e,n){t.exports=n(657)},function(t,e,n){t.exports=n(658)},function(t,e,n){var r=n(659);t.exports=r},function(t,e,n){var r=n(660);t.exports=r},function(t,e,n){var r=n(661);n(44),t.exports=r},function(t,e,n){n(41),n(65);var r=n(662);t.exports=r},function(t,e,n){var r=n(51),i=n(12),o=n(9),a=n(50),s=o(\"iterator\"),u=Object;t.exports=function(t){var e=u(t);return void 0!==e[s]||\"@@iterator\"in e||i(a,r(e))}}])});\n//# sourceMappingURL=av-live-query-core-min.js.map"
  },
  {
    "path": "miniprogram/libs/leancloud-adapters-weapp.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics$1 = function(d, b) {\r\n    extendStatics$1 = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics$1(d, b);\r\n};\r\n\r\nfunction __extends$1(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics$1(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\n\nvar PROVIDER = \"lc_weapp\";\nvar PLATFORM = \"weixin\";\nfunction getLoginCode() {\n    return new Promise(function (resolve, reject) {\n        wx.login({\n            success: function (res) {\n                return res.code ? resolve(res.code) : reject(new Error(res.errMsg));\n            },\n            fail: function (_a) {\n                var errMsg = _a.errMsg;\n                return reject(new Error(errMsg));\n            },\n        });\n    });\n}\nvar getAuthInfo = function (_a) {\n    var _b = _a === void 0 ? {} : _a, _c = _b.platform, platform = _c === void 0 ? PLATFORM : _c, _d = _b.preferUnionId, preferUnionId = _d === void 0 ? false : _d, _e = _b.asMainAccount, asMainAccount = _e === void 0 ? false : _e;\n    return __awaiter(this, void 0, void 0, function () {\n        var code, authData;\n        return __generator(this, function (_f) {\n            switch (_f.label) {\n                case 0: return [4 /*yield*/, getLoginCode()];\n                case 1:\n                    code = _f.sent();\n                    authData = { code: code };\n                    if (preferUnionId) {\n                        authData.platform = platform;\n                        authData.main_account = asMainAccount;\n                    }\n                    return [2 /*return*/, {\n                            authData: authData,\n                            platform: platform,\n                            provider: PROVIDER,\n                        }];\n            }\n        });\n    });\n};\n\nvar storage = {\n    getItem: function (key) {\n        return wx.getStorageSync(key);\n    },\n    setItem: function (key, value) {\n        return wx.setStorageSync(key, value);\n    },\n    removeItem: function (key) {\n        return wx.removeStorageSync(key);\n    },\n    clear: function () {\n        return wx.clearStorageSync();\n    },\n};\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar AbortError = /** @class */ (function (_super) {\n    __extends(AbortError, _super);\n    function AbortError() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.name = \"AbortError\";\n        return _this;\n    }\n    return AbortError;\n}(Error));\n\nvar request = function (url, options) {\n    if (options === void 0) { options = {}; }\n    var method = options.method, data = options.data, headers = options.headers, signal = options.signal;\n    if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n        return Promise.reject(new AbortError(\"Request aborted\"));\n    }\n    return new Promise(function (resolve, reject) {\n        var task = wx.request({\n            url: url,\n            method: method,\n            data: data,\n            header: headers,\n            complete: function (res) {\n                signal === null || signal === void 0 ? void 0 : signal.removeEventListener(\"abort\", abortListener);\n                if (!res.statusCode) {\n                    reject(new Error(res.errMsg));\n                    return;\n                }\n                resolve({\n                    ok: !(res.statusCode >= 400),\n                    status: res.statusCode,\n                    headers: res.header,\n                    data: res.data,\n                });\n            },\n        });\n        var abortListener = function () {\n            reject(new AbortError(\"Request aborted\"));\n            task.abort();\n        };\n        signal === null || signal === void 0 ? void 0 : signal.addEventListener(\"abort\", abortListener);\n    });\n};\nvar upload = function (url, file, options) {\n    if (options === void 0) { options = {}; }\n    var headers = options.headers, data = options.data, onprogress = options.onprogress, signal = options.signal;\n    if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n        return Promise.reject(new AbortError(\"Request aborted\"));\n    }\n    if (!(file && file.data && file.data.uri)) {\n        return Promise.reject(new TypeError(\"File data must be an object like { uri: localPath }.\"));\n    }\n    return new Promise(function (resolve, reject) {\n        var task = wx.uploadFile({\n            url: url,\n            header: headers,\n            filePath: file.data.uri,\n            name: file.field,\n            formData: data,\n            success: function (response) {\n                var status = response.statusCode, data = response.data, rest = __rest(response, [\"statusCode\", \"data\"]);\n                resolve(__assign(__assign({}, rest), { data: typeof data === \"string\" ? JSON.parse(data) : data, status: status, ok: !(status >= 400) }));\n            },\n            fail: function (response) {\n                reject(new Error(response.errMsg));\n            },\n            complete: function () {\n                signal === null || signal === void 0 ? void 0 : signal.removeEventListener(\"abort\", abortListener);\n            },\n        });\n        var abortListener = function () {\n            reject(new AbortError(\"Request aborted\"));\n            task.abort();\n        };\n        signal === null || signal === void 0 ? void 0 : signal.addEventListener(\"abort\", abortListener);\n        if (onprogress) {\n            task.onProgressUpdate(function (event) {\n                return onprogress({\n                    loaded: event.totalBytesSent,\n                    total: event.totalBytesExpectedToSend,\n                    percent: event.progress,\n                });\n            });\n        }\n    });\n};\n\n/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event);\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    );\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            );\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true;\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault();\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    });\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n    // Define accessors\n    const keys = Object.keys(event);\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key));\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget;\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation();\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        data.immediateStopped = true;\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation();\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this));\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true;\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this));\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value;\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event;\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto);\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event);\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    });\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n            const isFunc = typeof descriptor.value === \"function\";\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            );\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto);\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n        wrappers.set(proto, wrapper);\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event));\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget);\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this);\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next;\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null; // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this);\n\n            // Traverse to the tail while removing old value.\n            let prev = null;\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next;\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next);\n                    } else {\n                        listeners.delete(eventName);\n                    }\n                } else {\n                    prev = node;\n                }\n\n                node = node.next;\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                };\n                if (prev === null) {\n                    listeners.set(eventName, newNode);\n                } else {\n                    prev.next = newNode;\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this);\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    });\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map());\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i];\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this);\n        const optionsIsObj = isObject(options);\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        };\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName);\n        if (node === undefined) {\n            listeners.set(eventName, newNode);\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null;\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node;\n            node = node.next;\n        }\n\n        // Add it.\n        prev.next = newNode;\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this);\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n\n        let prev = null;\n        let node = listeners.get(eventName);\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n                return\n            }\n\n            prev = node;\n            node = node.next;\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this);\n        const eventName = event.type;\n        let node = listeners.get(eventName);\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event);\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null;\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n            } else {\n                prev = node;\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            );\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent);\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err);\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent);\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next;\n        }\n        setPassiveListener(wrappedEvent, null);\n        setEventPhase(wrappedEvent, 0);\n        setCurrentTarget(wrappedEvent, null);\n\n        return !wrappedEvent.defaultPrevented\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nvar WS = /** @class */ (function (_super) {\n    __extends$1(WS, _super);\n    function WS(url, protocol) {\n        var _this = _super.call(this) || this;\n        _this._readyState = WS.CLOSED;\n        if (!url) {\n            throw new TypeError(\"Failed to construct 'WebSocket': url required\");\n        }\n        _this._url = url;\n        _this._protocol = protocol;\n        return _this;\n    }\n    Object.defineProperty(WS.prototype, \"url\", {\n        get: function () {\n            return this._url;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(WS.prototype, \"protocol\", {\n        get: function () {\n            return this._protocol;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(WS.prototype, \"readyState\", {\n        get: function () {\n            return this._readyState;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    WS.CONNECTING = 0;\n    WS.OPEN = 1;\n    WS.CLOSING = 2;\n    WS.CLOSED = 3;\n    return WS;\n}(EventTarget(\"open\", \"error\", \"message\", \"close\")));\nvar WechatWS = /** @class */ (function (_super) {\n    __extends$1(WechatWS, _super);\n    function WechatWS(url, protocol) {\n        var _this = _super.call(this, url, protocol) || this;\n        if (protocol &&\n            !(wx.canIUse && wx.canIUse(\"connectSocket.object.protocols\"))) {\n            throw new Error(\"subprotocol not supported in weapp\");\n        }\n        _this._readyState = WS.CONNECTING;\n        var errorHandler = function (event) {\n            _this._readyState = WS.CLOSED;\n            _this.dispatchEvent({\n                type: \"error\",\n                message: event.errMsg,\n            });\n        };\n        var socketTask = wx.connectSocket({\n            url: url,\n            protocols: _this._protocol === undefined || Array.isArray(_this._protocol)\n                ? _this._protocol\n                : [_this._protocol],\n            fail: function (error) { return setTimeout(function () { return errorHandler(error); }, 0); },\n        });\n        _this._socketTask = socketTask;\n        socketTask.onOpen(function () {\n            _this._readyState = WS.OPEN;\n            _this.dispatchEvent({\n                type: \"open\",\n            });\n        });\n        socketTask.onError(errorHandler);\n        socketTask.onMessage(function (event) {\n            var data = event.data;\n            _this.dispatchEvent({\n                data: data,\n                type: \"message\",\n            });\n        });\n        socketTask.onClose(function (event) {\n            _this._readyState = WS.CLOSED;\n            var code = event.code, reason = event.reason;\n            _this.dispatchEvent({\n                code: code,\n                reason: reason,\n                type: \"close\",\n            });\n        });\n        return _this;\n    }\n    WechatWS.prototype.close = function () {\n        if (this.readyState === WS.CLOSED)\n            return;\n        if (this.readyState === WS.CONNECTING) {\n            console.warn(\"close WebSocket which is connecting might not work\");\n        }\n        this._socketTask.close({});\n    };\n    WechatWS.prototype.send = function (data) {\n        if (this.readyState !== WS.OPEN) {\n            throw new Error(\"INVALID_STATE_ERR\");\n        }\n        if (!(typeof data === \"string\" || data instanceof ArrayBuffer)) {\n            throw new TypeError(\"only String/ArrayBuffer supported\");\n        }\n        this._socketTask.send({\n            data: data,\n        });\n    };\n    return WechatWS;\n}(WS));\nvar WebSocket = WechatWS;\n\nvar platformInfo = {\n    name: \"Weapp\",\n};\n\nexports.WebSocket = WebSocket;\nexports.getAuthInfo = getAuthInfo;\nexports.platformInfo = platformInfo;\nexports.request = request;\nexports.storage = storage;\nexports.upload = upload;\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "miniprogram/models/Cast.js",
    "content": "/**\n * 演职员\n */\nexport default class Cast {\n    \n    id = 0       // ID\n    avatar = ''  // 头像\n    name = ''    // 名字\n    type = ''    // 导演？演员？\n    role = ''    // 角色名\n\n    /**\n     * 构造器\n     * @param {Object} props \n     * @param {Number} props.id ID\n     * @param {String} props.type ['Director', 'Actor']\n     * @param {String} props.avatar 头像\n     * @param {String} props.name 名字\n     * @param {String} props.role 角色名\n     */\n    constructor(props) {\n        this.id = props.id\n        this.type = props.type\n        this.avatar = props.avatar\n        this.name = props.name\n        this.role = props.role\n    }\n\n    /**\n     * 获取演职员实例\n     * @param {String} json 从时光网转换\n     */\n    static fromMtime(json) {\n        const item = JSON.parse(json)\n        return new Cast({\n            id: item.id,\n            type: item.type || 'Actor',\n            avatar: item.image,\n            name: item.name,\n            role: item.personate,\n        })\n    }\n\n    /**\n     * 从豆瓣网获取演职员信息\n     * @param {String} json\n     */\n    static fromDouban(json) {\n        const item = JSON.parse(json)\n        return new Cast({\n            id: item.id,\n            type: item.type || 'Actor',\n            avatar: item?.avatar?.large,\n            name: item.name,\n            role: '',\n        })\n    }\n\n}\n"
  },
  {
    "path": "miniprogram/models/Comment.js",
    "content": "/**\n * 影片短评\n */\nimport { formatTime } from '../utils/util';\n\nexport default class Comment {\n    id = 0         // ID\n    nickname = ''  // 昵称\n    avatar = ''    // 头像\n    rating = 0     // 评分\n    time = ''      // 评论时间\n    content = ''   // 评论内容\n\n    constructor(props) {\n        this.id = props.id\n        this.nickname = props.nickname\n        this.avatar = props.avatar\n        this.rating = props.rating\n        this.time = props.time\n        this.content = props.content\n    }\n\n    static fromMtime(obj) {\n        return new Comment({\n            id: obj.tweetId,\n            nickname: obj.ca,\n            avatar: obj.caimg,\n            rating: obj.cr,\n            time: obj.cd ? formatTime(new Date(obj.cd)) : '',\n            content: obj.ce,\n        })\n    }\n\n    static fromDouban(obj) {\n        return new Comment({\n            id: obj.id,\n            nickname: obj.user.name,\n            avatar: obj.user.avatar,\n            rating: obj.rating && obj.rating.value * 2,\n            time: obj.create_time,\n            content: obj.comment,\n        })\n    }\n}"
  },
  {
    "path": "miniprogram/packages/admin/pages/app/app.js",
    "content": "import { compareVersions } from '../../../../utils/util'\nconst db = wx.cloud.database()\n\nPage({\n  data: {\n    app: null,\n    version: '1.0.0',\n  },\n\n  async onLoad () {\n    // FIXME collection app 不存在时异常\n    const { data: [app] } = await db.collection('app')\n      .orderBy('created_at', 'desc')\n      .limit(1)\n      .get()\n    if (app) {\n      this.setData({\n        app,\n        version: app.version,\n      })\n    }\n  },\n\n  async submit (e) {\n    const { version } = e.detail.value\n    if (!version) {\n      wx.showModal({\n        title: '提示',\n        content: '请输入版本号',\n      })\n      return\n    }\n    \n    const { app } = this.data\n    if (compareVersions(version, app.version) < 0) {\n      const couldUpdate = await new Promise((resolve) => {\n        wx.showModal({\n          title: '警告',\n          content: `线上版本为 v${app.version}，确定降低版本为 v${version} 吗？`,\n          success: ({ confirm }) => resolve(confirm),\n        })\n      })\n      if (!couldUpdate) return\n    }\n\n    if (compareVersions(version, app.version) === 0) {\n      wx.showModal({\n        title: '提示',\n        content: '与线上版本一致，无需修改',\n        showCancel: false,\n      })\n      return\n    }\n\n    await db.collection('app')\n      .add({\n        data: {\n          created_at: db.serverDate(),\n          version,\n        }\n      })\n    wx.showToast({\n      icon: 'none',\n      title: '更新版本成功',\n    })\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/app/app.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/admin/pages/app/app.wxml",
    "content": "<view class=\"container\">\n  <form class=\"form\" bindsubmit=\"submit\">\n    <view class=\"item\">\n      <view class=\"item__label\">version</view>\n      <input type=\"text\" class=\"item__input\" placeholder=\"1.0.0\"\n        name=\"version\"\n        model:value=\"{{app.version}}\"\n      />\n    </view>\n    <view class=\"fixed-bottom\">\n      <button class=\"btn-submit\" form-type=\"submit\">Update</button>\n      <view class=\"iphonex-bottom-holder\"><!-- iPhone X 下巴占位 --></view>\n    </view>\n  </form>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/app/app.wxss",
    "content": ".form {\n  background-color: #fff;\n  padding: 30rpx;\n}\n\n.item__label {\n  font-size: 30rpx;\n  color: #999;\n}\n.item__label::first-letter {\n  text-transform: uppercase;\n}\n.item__input {\n  margin-top: 12rpx;\n  border: 1px solid #ddd;\n  border-radius: 8rpx;\n  padding: 10rpx 20rpx;\n}\n\n.fixed-bottom {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  padding: 30rpx;\n  text-align: center;\n}\n\n.btn-submit {\n  background-color: var(--color-primary);\n  border: none;\n  border-radius: 12rpx;\n}\n.btn-submit::after {\n  content: none;\n}"
  },
  {
    "path": "miniprogram/packages/admin/pages/douban/douban.js",
    "content": "import wxCloud from '../../../../utils/wxCloud'\n\nPage({\n  async handleTap (e) {\n    const { action } = e.currentTarget.dataset\n    await wxCloud('douban', {\n      action\n    })\n    wx.showToast({\n      title: '请求并存储成功'\n    })\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/douban/douban.json",
    "content": "{\n  \"navigationBarTitleText\": \"豆瓣\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/admin/pages/douban/douban.wxml",
    "content": "<view class=\"container\">\n  <button data-action=\"cron\" bindtap=\"handleTap\">每日卡片</button>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/douban/douban.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/packages/admin/pages/index/index.js",
    "content": "Page({\n  data: {\n    list: [\n      { title: 'APP', url: '../app/app' },\n      { title: '豆瓣', url: '../douban/douban' }\n    ]\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/index/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"云函数管理\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/admin/pages/index/index.wxml",
    "content": "<view class=\"container\">\n  <block wx:for=\"{{list}}\" wx:key=\"index\">\n    <navigator class=\"item\" url=\"{{item.url}}\">{{item.title}}</navigator>\n  </block>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/admin/pages/index/index.wxss",
    "content": ".item {\n  margin: 30rpx 30rpx 0;\n  height: 90rpx;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background-color: #fff;\n  border-radius: 10rpx;\n  box-shadow: 0 0 20rpx 0 rgba(0,0,0,0.1);\n}"
  },
  {
    "path": "miniprogram/packages/article/pages/categories/categories.js",
    "content": "Page({\n\n  data: {\n    /** @type {Array<Categorie>} */\n    categories: [],\n    list: [],\n    loaded: false,\n  },\n\n  onLoad(options) {\n    this.getData()\n  },\n\n  /**\n   * 获取数据\n   */\n  async getData () {\n    const data = [\n      {\n        name: '榜单',\n        icon: 'https://i.loli.net/2019/12/30/xyh67CYXlOeEoSp.png',\n        children: [\n          {\n            name: '一周口碑',\n            url: '/packages/douban/pages/collection/collection?type=movie_weekly_best'\n          },\n          {\n            name: 'TOP250',\n            url: '/packages/douban/pages/collection/collection?type=movie_top250'\n          },\n          {\n            name: '华语口碑',\n            url: '/packages/douban/pages/collection/collection?type=tv_chinese_best_weekly'\n          },\n          {\n            name: '全球口碑',\n            url: '/packages/douban/pages/collection/collection?type=tv_global_best_weekly'\n          },\n          {\n            name: '华语电影',\n            url: '/packages/douban/pages/collection/collection?type=ECFYHQBWQ'\n          },\n          {\n            name: '外语电影',\n            url: '/packages/douban/pages/collection/collection?type=ECFQHXCTQ'\n          },\n          {\n            name: '冷门佳片',\n            url: '/packages/douban/pages/collection/collection?type=ECOUHS3TY'\n          },\n          {\n            name: '经典科幻',\n            url: '/packages/douban/pages/collection/collection?type=movie_scifi'\n          },\n          {\n            name: '经典喜剧',\n            url: '/packages/douban/pages/collection/collection?type=movie_comedy'\n          },\n          {\n            name: '经典动作',\n            url: '/packages/douban/pages/collection/collection?type=movie_action'\n          },\n          {\n            name: '经典爱情',\n            url: '/packages/douban/pages/collection/collection?type=movie_love'\n          }\n        ]\n      }\n    ];\n    this.modifyData(data);\n  },\n\n  /**\n   * 调整数据\n   * @param {Array<Categorie>} categories\n   */\n  modifyData(categories) {\n    for (let item of categories) {\n      if (item.children.length < 6) {\n        for (let i = 0, length = (6 - item.children.length); i < length; i++) {\n          item.children.push(\" \");\n        }\n      } else if ((item.children.length - 6) % 4 !== 0) {\n        for (let i = 0, length = (4 - (item.children.length - 6) % 4); i < length; i++) {\n          item.children.push(\" \");\n        }\n      }\n    }\n    this.setData({\n      list: categories,\n      loaded: true\n    });\n  },\n\n  toList(e) {\n    const {item} = e.currentTarget.dataset;\n    if(item!=\" \") {\n      if (item.url) {\n        wx.navigateTo({\n          url: item.url\n        });\n      }\n    }\n  }\n})\n\n/**\n * @typedef {{\n * _id: string;\n * id: number;\n * name: string;\n * icon?: string;\n * pid: number;\n * children?: Array<Categorie>\n * }} Categorie 分类\n */\n"
  },
  {
    "path": "miniprogram/packages/article/pages/categories/categories.json",
    "content": "{\n  \"navigationBarTitleText\": \"分类查找\"\n}"
  },
  {
    "path": "miniprogram/packages/article/pages/categories/categories.wxml",
    "content": "<view class='container page-category'>\n  <view class=\"category\" wx:for=\"{{list}}\" wx:key=\"index\">\n    <view class='category-item category-item--big'>\n      <image class='category-item__icon' src='{{item.icon}}' mode='widthFix' />\n      <text class=\"category-item__title\">{{item.name}}</text>\n    </view>\n    <block wx:for='{{item.children}}' wx:key='index'>\n      <view class='category-item category-item--small {{(item==\" \")?\"\":\"btn-bg\"}}' data-item='{{item}}' bindtap='toList'>\n        <text class='category-item__name single-line'>{{item.name}}</text>\n      </view>\n    </block>\n  </view>\n  <view wx:for='{{categories}}' class='category' wx:key='id'>\n    <view class='category-item category-item--big'>\n      <image class='category-item__icon' src='{{item.icon}}' mode='widthFix' />\n      <text class=\"category-item__title\">{{item.name}}</text>\n    </view>\n    <block wx:for='{{item.children}}' wx:key='*this'>\n      <view class='category-item category-item--small {{(item==\" \")?\"\":\"btn-bg\"}}' data-item='{{item}}' bindtap='toList'>\n        <text class='category-item__name single-line'>{{item.name}}</text>\n      </view>\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/article/pages/categories/categories.wxss",
    "content": ".page-category {\n  padding: 12.5rpx;\n}\n\n.category {\n  display: grid;\n  zoom: 1;\n  overflow: hidden;\n  grid-template-columns: repeat(4, 1fr);\n  grid-auto-rows: 88rpx;\n  margin: 12.5rpx;\n  border-left: 1rpx solid #ddd;\n  border-top: 1rpx solid #ddd;\n}\n.category-item {\n  box-sizing: border-box;\n  background-color: #fff;\n  border-right: 1rpx solid #ddd;\n  border-bottom: 1rpx solid #ddd;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n}\n.category-item--big {\n  grid-row-start: span 2;\n  color: #6f93a2;\n}\n.category-item__title {\n  line-height: 1.8em;\n}\n.category-item__icon {\n  width: 40%;\n  height: 40%;\n}\n.category-item__name {\n  max-width: 100%;\n}\n"
  },
  {
    "path": "miniprogram/packages/article/pages/classification/index.wxml",
    "content": "<view class='container page-category'>\n  <view wx:for='{{categories}}' class='category' wx:key='id'>\n    <view class='category-item category-item--big'>\n      <image class='category-item__icon' src='{{item.icon}}' mode='widthFix' />\n      <text class=\"category-item__title\">{{item.name}}</text>\n    </view>\n    <block wx:for='{{item.children}}' wx:key='*this'>\n      <view class='category-item category-item--small {{(item==\" \")?\"\":\"btn-bg\"}}' data-item='{{item}}' bindtap='toList'>\n        <text class='category-item__name single-line'>{{item.name}}</text>\n      </view>\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/article/pages/classification/index.wxss",
    "content": ".page-category {\n  padding: 12.5rpx;\n}\n\n.category {\n  display: grid;\n  zoom: 1;\n  overflow: hidden;\n  grid-template-columns: repeat(4, 1fr);\n  grid-auto-rows: 88rpx;\n  margin: 12.5rpx;\n  border-left: 1rpx solid #ddd;\n  border-top: 1rpx solid #ddd;\n}\n.category-item {\n  box-sizing: border-box;\n  background-color: #fff;\n  border-right: 1rpx solid #ddd;\n  border-bottom: 1rpx solid #ddd;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n}\n.category-item--big {\n  grid-row-start: span 2;\n  color: #6f93a2;\n}\n.category-item__title {\n  line-height: 1.8em;\n}\n.category-item__icon {\n  width: 40%;\n  height: 40%;\n}\n.category-item__name {\n  max-width: 100%;\n}\n"
  },
  {
    "path": "miniprogram/packages/article/pages/details/detail.js",
    "content": "// 文章详情\nimport { Honye } from '../../../../utils/apis'\nimport WxParse from '../../../../templates/wxParse/wxParse'\nimport { $markShare } from '../../../../templates/index'\nimport wxCloud from '../../../../utils/wxCloud'\n\nPage({\n\n    data: {\n        detail: null,\n        checked: false\n    },\n\n    /** 生命周期函数--监听页面加载 */\n    onLoad(options) {\n        const id = Number(options.id)\n        this.setData({\n            articleID: id,\n        })\n        this.getDetail(id)\n    },\n\n    /**\n     * 获取详情\n     * @param {String} id 文章 ID\n     */\n    getDetail(id) {\n        wx.showLoading({\n            title: 'loading...',\n        })\n        Promise.all([\n            Honye.get(`${Honye.ARTICLE_DETAIL}/${id}`),\n            wxCloud('getArticleDetails', { id }),\n        ]).then(([res1, res2]) => {\n            this.setData({\n                detail: res1,\n                checked: res2.data,\n            }, () => {\n                WxParse.wxParse('article', 'html', res1.content, this)\n            })\n            wx.hideLoading()\n        })\n    },\n\n    /** 💓 / 💔 */\n    handleFavChange(e) {\n        wxCloud('favArticle', {\n            id: this.data.articleID,\n        }).then( res => {\n            const { checked } = this.data;\n            this.setData({\n                checked: !checked\n            })\n            wx.showToast({\n                title: res.message,\n            })\n        })\n    },\n\n    /** 评论 */\n    handleComment(e) {\n        wx.showToast({\n            title: '评论',\n        })\n    },\n\n    /** 分享 */\n    handleShare(e) {\n        $markShare.show({\n            titleText: '',\n            buttons: [\n                {\n                    iconPath: '/assets/images/weixin_icon.png',\n                    title: '微信好友',\n                    openType: 'share'\n                },\n                {\n                    iconPath: '/assets/images/weixin_circle_icon.png',\n                    title: '微信朋友圈'\n                },\n                {\n                    iconPath: '/assets/images/qq_zone_icon.png',\n                    title: 'QQ空间'\n                },\n                {\n                    iconPath: '/assets/images/copy_link_icon.png',\n                    title: '复制链接'\n                }\n            ],\n            buttonClicked(index, item) {\n                if (!item.openType)\n                    if (index == 5) {\n                        wx.setClipboardData({\n                            data: 'https://github.com/Hongye567/weapp-mark',\n                            success: res => {\n                                wx.showToast({\n                                    title: '已复制到剪贴板',\n                                })\n                            }\n                        })\n                    } else {\n                        wx.showModal({\n                            content: item.title,\n                        })\n                    }\n                return true\n            }\n        })\n    }\n})"
  },
  {
    "path": "miniprogram/packages/article/pages/details/detail.json",
    "content": "{\n  \"navigationBarTitleText\": \"影单详情\",\n  \"disableScroll\": true,\n  \"usingComponents\": {\n    \"comp-btnFav\": \"/components/btn-fav/FavButton\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/article/pages/details/detail.wxml",
    "content": "<!--pages/article/detail.wxml 影单详情-->\n<import src=\"/templates/wxParse/wxParse.wxml\"/>\n<import src='/templates/share/share.wxml' />\n\n<template is='com-share' data='{{...$mark.share}}'/>\n\n<view class='container page-article'>\n  <scroll-view class='scroll' scroll-y enable-back-to-top>\n  <view class='bg-title'>\n    <image class='bg-img' src='{{detail.image}}' mode='widthFix' />\n    <view class='gradient'>\n      <text class='title'>{{detail.title}}</text>\n    </view> \n  </view>\n\n  <!-- 撰稿人信息 hidden -->\n  <view class='writer' hidden>\n    <view>\n      <image class='avatar' src='{{detail.writer.avatar}}' />\n      <view class='personal'>\n        <text class='name'>红叶秋鸣</text>\n        <text class='motto'>影，乐赏俞乐，悲赏愈悲</text>\n      </view>\n    </view>\n    <view class='footer'>\n      <text>Mark.撰稿人</text>\n    </view>\n  </view>\n\n  <view class='content'>\n    <template is=\"wxParse\" data=\"{{wxParseData:article.nodes}}\"/>\n  </view>\n  </scroll-view>\n\n  <view class='bottom-actions'>\n    <view class='flex-1' capture-bind:tap='handleFavChange'>\n      <comp-btnFav checked='{{checked}}' width='1.2em' height='1.2em'\n        iconNormal='/assets/images/movie_list_detail_like_unchecked.png'\n        iconChecked='/assets/images/movie_list_detail_like_checked.png'\n      />\n      <text>12</text>\n    </view>\n    <view class='flex-1' bindtap='handleComment'>\n      <image class='icon' src='/assets/images/movie_list_comment_icon.png' mode='widthFix' />\n      <text>12</text>\n    </view>\n    <view class='flex-1' bindtap='handleShare'>\n      <image class='icon' src='/assets/images/movie_list_detail_share.png' mode='widthFix' />\n      <text>12</text>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/article/pages/details/detail.wxss",
    "content": "/* pages/article/detail.wxss */\n@import '/templates/share/share';\n\npage {\n  height: 100%;\n}\n.page-article>scroll-view {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n.page-article .bg-title {\n  width: 100%;\n  position: relative;\n  display: flex;\n}\n.page-article .bg-title>image{\n  width: 100%;\n  height: 370rpx;\n}\n.page-article .bg-title .gradient {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  z-index: 1;\n  display: flex;\n  align-items: flex-end;\n  background: -webkit-gradient(linear, left 0, left 165%, color-stop(0,transparent), color-stop(1,#000000));  \n  background: -moz-linear-gradient(top, transparent, #000000 165%);  \n}\n.page-article .bg-title .title {\n  color: #fff;\n  font-weight: bold;\n  padding: 1em;\n}\n\n.page-article .writer {\n  background-color: #fff;\n  margin: 60rpx 30rpx;\n  border-radius: 10rpx;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  padding: 1em 1em 0;\n  box-shadow: 2rpx 2rpx #eee;\n}\n.page-article .writer>view {\n  display: flex;\n}\n.page-article .writer>view image {\n  width: 125rpx;\n  height: 125rpx;\n  border: 1px solid #eee;\n  border-radius: 50%;\n  margin-right: 1em;\n}\n.page-article .writer>view .personal {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.page-article .writer>view .personal .name {\n  font-weight: bold;\n}\n.page-article .writer>view .personal .motto {\n  color: #ACB1B2;\n  font-size: .9em;\n}\n.page-article .writer .footer {\n  border-top: 1px solid #eee;\n  display: flex;\n  justify-content: center;\n  margin-top: 1.5em;\n  overflow: visible;\n}\n.page-article .writer .footer>text {\n  font-size: .8em;\n  position: relative;\n  top: -.9em;\n  background-color: #fff;\n  padding: 0 .3em;\n  color: #ACB1B2;\n}\n\n.page-article .content:not(.wxParse-div) {\n    padding: 0 30rpx 30rpx;  \n}\n.page-article .content .wxParse-img {\n  width: 100% !important;\n}\n\n/* 底部操作按钮 */\n.bottom-actions {\n  width: 100%;\n  height: 50px;\n  display: flex;\n  background-color: #fff;\n  position: relative;\n}\n.bottom-actions::before {\n  content: ' ';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: .5px;\n  background-color: #ccc;\n}\n.flex-1 {\n  flex: 1;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n.flex-1 .icon {\n  width: 1.2em;\n  height: 1.2em;\n}\n.flex-1>text {\n  font-size: .8em;\n  vertical-align: bottom;\n  line-height: 1em;\n  color: #496069;\n  margin-top: .2em;\n}"
  },
  {
    "path": "miniprogram/packages/article/pages/movie-list-detail/movie-list-detail.js",
    "content": "import { getHotMovies } from '../../../../apis/douban'\n\nPage({\n  data: {\n    info: {},\n    movieList: [],\n  },\n  onLoad() {\n    this.getMovielistInfo()\n    this.getMovieList()\n  },\n  /** 获取影单信息 */\n  getMovielistInfo() {\n    const info = {\n      title: '一眼一万年',\n      cover: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2570039912.jpg',\n      author: '猫猫不爱鱼',\n      updateAt: '2019.04.30',\n      intro: '一眼一瞬间，一眼一万年，我的青春有你的陪伴，足矣。一眼一瞬间，一眼一万年，我的青春有你的陪伴，足矣。',\n      isLiked: false,\n    }\n    this.setData({ info })\n    wx.setNavigationBarTitle({\n      title: info.title,\n    })\n  },\n  /** 获取影单影视列表 */\n  async getMovieList() {\n    const res = await getHotMovies()\n    const subjects = res.subject_collection_items || []\n    this.setData({\n      movieList: subjects,\n    })\n  },\n  /** 去影视详情 */\n  toMovieDetail(e) {\n    const { id, title } = e.currentTarget.dataset\n    wx.navigateTo({\n      url: `/packages/movie/pages/details/details?id=${id}&title=${title}`\n    })\n  },\n  /** 喜欢/取消喜欢 */\n  handleLikeTap(e) {\n    const { isLiked } = this.data.info\n    this.setData({\n      'info.isLiked': !isLiked,\n    })\n  },\n  onShareAppMessage() {\n    const { info } = this.data\n    return {\n      title: info.intro,\n    }\n  },\n})"
  },
  {
    "path": "miniprogram/packages/article/pages/movie-list-detail/movie-list-detail.json",
    "content": "{\n  \"navigationBarTitleText\": \"影单\",\n  \"backgroundColor\": \"#ffffff\",\n  \"disableScroll\": true\n}"
  },
  {
    "path": "miniprogram/packages/article/pages/movie-list-detail/movie-list-detail.wxml",
    "content": "<import src=\"/templates/movie/movieRow\" />\n<view class=\"container\">\n  <image class=\"bg-blur\" src=\"{{info.cover}}\" mode=\"top\" />\n  <view class=\"info\">\n    <view class=\"info__top\">\n      <image class=\"info__img\" src=\"{{info.cover}}\" mode=\"aspectFit\" />\n      <view class=\"info__top-right\">\n        <view class=\"info__name\">{{info.title}}</view>\n        <view class=\"info__top-right-middle\">\n          <view class=\"author\">\n            <image class=\"author__avatar\" src=\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2570039912.jpg\" mode=\"aspectFill\" />\n            <view class=\"author__name\">{{info.author}}</view>\n          </view>\n          <view class=\"info__date\">{{info.updateAt}}更新</view>\n        </view>\n        <view class=\"info__btns\">\n          <view class=\"icon-button\" bindtap=\"handleLikeTap\">\n            <image class=\"icon-button__icon\" mode=\"aspectFit\"\n              src=\"{{info.isLiked ? '/assets/images/icon-liked.png' : '/assets/images/movielist/icon-unlike.png'}}\"\n            />\n            <text>喜欢</text>\n          </view>\n          <button class=\"icon-button\" open-type=\"share\">\n            <image class=\"icon-button__icon\" src=\"/assets/images/movielist/icon-share.png\" mode=\"aspectFit\" />\n            <text>分享</text>\n          </button>\n        </view>\n      </view>\n    </view>\n    <view class=\"info__intro\">{{info.intro}}</view>\n  </view>\n  <view class=\"movie-list\">\n    <view class=\"movie-list__wrap\" scroll-y>\n      <view wx:for=\"{{movieList}}\" wx:key=\"id\"\n        data-id=\"{{item.id}}\" data-title=\"{{item.title}}\"\n        bindtap=\"toMovieDetail\"\n      >\n        <template is=\"item-movie_row\" data=\"{{...item}}\"></template>\n      </view>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/article/pages/movie-list-detail/movie-list-detail.wxss",
    "content": "@import '/templates/movie/movieRow';\n\npage {\n  background-color: #fff;\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n}\n\n.bg-blur {\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  height: 60vh;\n  filter: blur(12rpx);\n}\n.bg-blur::after {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(71, 71, 71, 0.65);\n  opacity: 0.8;\n}\n\n.info {\n  color: #fff;\n  padding: 48rpx 24rpx;\n  font-weight: 400;\n}\n.info__top {\n  display: flex;\n  flex-direction: row;\n}\n.info__img {\n  width: 150rpx;\n  height: 200rpx;\n}\n.info__top-right {\n  flex: 1;\n  margin-left: 20rpx;\n}\n.info__name {\n  font-size: 32rpx;\n  font-weight: 400;\n}\n.info__top-right-middle {\n  margin-top: 23rpx;\n  display: flex;\n  align-items: center;\n}\n.info__date {\n  font-size: 22rpx;\n  font-weight: 400;\n  margin-left: 32rpx;\n}\n.info__btns {\n  margin-top: 50rpx;\n  display: flex;\n  align-items: center;\n}\n.info__intro {\n  font-size: 26rpx;\n  margin-top: 18rpx;\n}\n\n.author {\n  display: flex;\n  align-items: center;\n}\n.author__avatar {\n  background-color: #ddd;\n  width: 32rpx;\n  height: 32rpx;\n  border-radius: 16rpx;\n}\n.author__name {\n  font-size: 22rpx;\n  margin-left: 12rpx;\n  font-weight: 400;\n}\n\n.icon-button {\n  display: flex;\n  align-items: center;\n  font-size: 26rpx;\n  font-weight: 400;\n  color: #fff;\n  background-color: transparent;\n  line-height: normal;\n  padding: 0;\n}\n.icon-button::after {\n  content: none;\n}\n.icon-button__icon {\n  width: 36rpx;\n  height: 36rpx;\n  margin-right: 8rpx;\n}\n.icon-button + .icon-button {\n  margin-left: 40rpx;\n}\n\n.movie-list {\n  flex: 1;\n  background-color: #fff;\n  border-radius: 40rpx 40rpx 0 0;\n  overflow: hidden;\n}\n.movie-list__wrap {\n  height: 100%;\n  border-radius: 40rpx 40rpx 0 0;\n  overflow-y: scroll;\n}"
  },
  {
    "path": "miniprogram/packages/douban/pages/collection/collection.js",
    "content": "import { getCollectionList } from '../../../../apis/douban.js'\n\nPage({\n  data: {\n    _type: '',\n    _page: 1,\n    _perPage: 20,\n    collection: null,\n    list: [],\n    total: 0,\n    hasMore: true,\n    loading: false,\n  },\n\n  /**\n   * \n   * @param {object} options\n   * @param {string} options.type\n   */\n  onLoad (options) {\n    this.data._type = options.type\n    this.getList()\n  },\n\n  async getList () {\n    const { _type, _page, _perPage, list } = this.data\n    this.setData({ loading: true })\n    wx.showNavigationBarLoading()\n    const res = await getCollectionList({\n      type: _type,\n      start: _perPage * (_page - 1),\n      count: _perPage,\n    })\n    const collection = res.subject_collection\n    const _list = res.subject_collection_items || []\n    this.data._page += 1\n    wx.setNavigationBarTitle({\n      title: collection.title,\n    })\n    this.setData({\n      collection: collection,\n      loading: false,\n      list: _page > 1 ? [...list, ..._list] : _list,\n      total: res.total,\n      hasMore: _page * _perPage < res.total,\n    })\n    wx.hideNavigationBarLoading()\n  },\n\n  onReachBottom () {\n    const { loading, hasMore } = this.data\n    if (!loading && hasMore) {\n      this.getList()\n    }\n  },\n\n  handleMovieTap (e) {\n    const { item } = e.currentTarget.dataset\n    wx.navigateTo({\n      url: `/packages/movie/pages/details/details?id=${item.id}&type=${item.type}&title=${item.title}`,\n    })\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/douban/pages/collection/collection.json",
    "content": "{\n  \"navigationBarTitleText\": \"\",\n  \"usingComponents\": {\n    \"rating\": \"/components/rating/rating\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/douban/pages/collection/collection.wxml",
    "content": "<import src='/templates/loading/loading' />\n\n<view class=\"container\">\n  <view class=\"head\">\n    <image class=\"head_bg\" src=\"{{collection.header_bg_image}}\" mode=\"aspectFill\" />\n    <image class=\"head_fg\" src=\"{{collection.header_fg_image}}\" mode=\"aspectFill\" />\n  </view>\n  <view class=\"list\" wx:if=\"{{total > 0}}\">\n    <view class=\"count\">共{{total}}部</view>\n    <view class=\"item\" wx:for=\"{{list}}\" wx:key=\"index\">\n      <view class=\"item__position\">No.{{index + 1}}</view>\n      <view class=\"movie\" data-item=\"{{item}}\" bindtap=\"handleMovieTap\">\n        <view class=\"movie__cover\">\n          <image class=\"img\" src=\"{{item.cover_url}}\" mode=\"widthFix\" />\n        </view>\n        <view class=\"movie__content\">\n          <view class=\"movie__title\">{{item.title}}</view>\n          <view class=\"movie__rating\">\n            <rating value=\"{{item.rating.value}}\" max=\"{{item.rating.max}}\" />\n            <view>{{item.rating.value}}</view>\n          </view>\n          <view class=\"movie__subtitle\">{{item.card_subtitle}}</view>\n          <view class=\"movie__mark\"></view>\n        </view>\n      </view>\n    </view>\n    <template is='loading-more' wx:if=\"{{loading}}\" />\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/douban/pages/collection/collection.wxss",
    "content": ".head {\n  width: 100vw;\n  height: 374rpx;\n  position: relative;\n  overflow: hidden;\n}\n.head_bg {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.head_fg {\n  position: absolute;\n  z-index: 1;\n  display: block;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.count {\n  color: #666;\n  font-size: 28rpx;\n  padding: 26rpx 30rpx 0;\n  background-color: #fff;\n}\n\n.item {\n  margin-bottom: 20rpx;\n  background-color: #fff;\n  padding-top: 20rpx;\n}\n.item__position {\n  margin-left: 30rpx;\n  display: inline-flex;\n  background-color: #ccc;\n  color: #fff;\n  border-radius: 6rpx;\n  padding: 4rpx 10rpx;\n  font-size: 28rpx;\n  line-height: 1;\n  font-weight: 400;\n}\n.item:nth-child(2) .item__position {\n  background-color: #f55;\n}\n.item:nth-child(3) .item__position {\n  background-color: #f48052;\n}\n.item:nth-child(4) .item__position {\n  background-color: #f7c946;\n}\n\n.movie {\n  display: flex;\n  padding: 20rpx 30rpx;\n}\n\n.movie__cover .img {\n  width: 150rpx;\n  min-height: 200rpx;\n  border-radius: 8rpx;\n  background-color: #eee;\n}\n.movie__content {\n  margin-left: 20rpx;\n}\n.movie__title {\n  font-weight: bold;\n}\n.movie__rating {\n  margin-top: 10rpx;\n  display: flex;\n  align-items: center;\n  font-size: 22rpx;\n  line-height: 1;\n  color: #666;\n}\n.movie__rating .com-rating {\n  margin-right: 10rpx;\n  font-size: 26rpx;\n}\n.movie__subtitle {\n  margin-top: 6rpx;\n  color: #999;\n  font-size: 28rpx;\n}"
  },
  {
    "path": "miniprogram/packages/douban/pages/login-phone/login-phone.js",
    "content": "import { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../../store/index';\nimport { replayRequest, setLoginIng } from '../../../../apis/douban';\nimport { getCaptcha, verifyCaptcha } from '../../../../apis/douban/accounts';\nimport { apiSyncDouban } from '../../../../apis/vercel';\nimport { emitter, events } from '../../../../utils/events';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    phone: '',\n    code: '',\n    captchaData: null,\n    captcha: '',\n  },\n\n  storeBindings: {\n    store,\n    actions: {\n      updateDouban: 'douban/update',\n    },\n  },\n\n  onUnload() {\n    setLoginIng(false);\n  },\n\n  async handlePhoneConfirm() {\n    const { phone, captchaData, captcha } = this.data;\n    const params = { number: phone };\n    if (captchaData) {\n      params.captcha_id = captchaData.captcha_id;\n      params.captcha_solution = captcha;\n    }\n    await getCaptcha(params)\n      .catch((err) => {\n        if (err.message === 'captcha_required') {\n          this.setData({\n            captchaData: err.payload,\n          });\n        }\n        wx.showToast({\n          icon: 'none',\n          title: err.description,\n        });\n        return Promise.reject(err);\n      });\n    wx.showToast({\n      icon: 'none',\n      title: '验证码已发送',\n    });\n  },\n\n  async submit (e) {\n    const { value } = e.detail;\n    const params = {\n      openid: store.user.info.openid,\n      unionid: store.user.info.unionid,\n      number: value.phone,\n      code: value.code,\n    };\n    const { captchaData, captcha } = this.data;\n    if (captchaData) {\n      params.captcha_id = captchaData.captcha_id;\n      params.captcha_solution = captcha;\n    }\n\n    const res = await verifyCaptcha(params)\n      .catch((err) => {\n        if (err.message === 'captcha_required') {\n          this.setData({\n            captchaData: err.payload,\n          });\n        }\n        wx.showToast({\n          icon: 'none',\n          title: err.description,\n        });\n        return Promise.reject(err);\n      });\n      const { access_token, refresh_token, account_info } = res;\n      const { openid, unionid } = store.user.info;\n      apiSyncDouban({\n        openid,\n        unionid,\n        account_info,\n        access_token,\n        refresh_token\n      });\n      this.updateDouban({\n        accessToken: access_token,\n        refreshToken: refresh_token,\n        user: account_info,\n      });\n      replayRequest()\n      emitter.emit(events.LOGIN_SUCCESS);\n      wx.showToast({\n        icon: 'none',\n        title: '登录成功',\n      });\n      wx.navigateBack();\n  },\n});\n"
  },
  {
    "path": "miniprogram/packages/douban/pages/login-phone/login-phone.json",
    "content": "{\n  \"navigationBarTitleText\": \"豆瓣登录\",\n  \"backgroundColor\": \"#ffffff\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/douban/pages/login-phone/login-phone.wxml",
    "content": "<view class=\"container\">\n  <form class=\"form\" bindsubmit=\"submit\">\n    <view class=\"title\">短信登录/注册</view>\n    <view class=\"input-list\">\n      <input class=\"form-item input\" placeholder=\"手机号\"\n        name=\"phone\"\n        type=\"number\"\n        model:value=\"{{phone}}\"\n      />\n      <view class=\"form-item flex align-center\">\n        <input class=\"flex-1 input\" placeholder=\"验证码\"\n          name=\"code\"\n          type=\"number\"\n          model:value=\"{{code}}\"\n        />\n        <button class=\"button-nostyle btn-code\" bind:tap=\"handlePhoneConfirm\">获取验证码</button>\n      </view>\n      <label class=\"form-item flex align-center\" wx:if=\"{{captchaData}}\">\n        <input class=\"flex-1 input\" placeholder=\"图形验证码\"\n          name=\"captcha\"\n          model:value=\"{{captcha}}\"\n        />\n        <image class=\"captcha__code\" src=\"{{captchaData.captcha_image_url}}\" mode=\"heightFix\" />\n      </label>\n    </view>\n    <button class=\"btn-submit btn-opacity\" form-type=\"submit\" disabled=\"{{!(phone && code)}}\">登录豆瓣</button>\n  </form>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/douban/pages/login-phone/login-phone.wxss",
    "content": "page {\n  background-color: #fff;\n}\n\n.form {\n  padding-top: 80rpx;\n}\n\n.title {\n  font-size: 50rpx;\n  font-weight: bold;\n  text-align: center;\n}\n\n.input-list {\n  margin: 30rpx;\n  margin-top: 60rpx;\n  border: 1px solid #eee;\n  border-radius: 8rpx;\n}\n.form-item:not(:first-child) {\n  border-top: 1px solid #eee;\n}\n\n.input {\n  padding: 20rpx;\n}\n.input:not(:first-child) {\n  border-top: 1px solid #eee;\n}\n\n.btn-code {\n  padding: 10rpx 20rpx 10rpx 10rpx;\n  color: #39b344;\n}\n\n.captcha__code {\n  flex-shrink: 0;\n  width: 220rpx;\n  align-self: stretch;\n}\n\n.btn-submit {\n  margin: 30rpx;\n  margin-top: 80rpx;\n  background-color: #39b344;\n  color: #fff;\n  border: none;\n  border-radius: 8rpx;\n}\n.btn-submit::after {\n  content: none;\n}\n.btn-submit[disabled]:not([type]) {\n  background-color: #39b344;\n  color: #fff;\n  opacity: 0.5;\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/cover-page/cover-page.js",
    "content": "Page({\n  data: {\n    movielistList: [],\n  },\n\n  /** 显示影单弹窗 */\n  showMovieListPopup () {\n    this.getMovielistList()\n    this.selectComponent('#movielist').show()\n  },\n\n  /** 影单列表 */\n  async getMovielistList () {\n    const list = Array(10).fill({}).map((item, index) => ({\n      id: index,\n      title: '阳光掉进回忆里',\n      cover: 'https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1756402567.jpg',\n      count: 10,\n    }));\n    this.setData({\n      movielistList: list,\n    })\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/example/pages/cover-page/cover-page.json",
    "content": "{\n  \"navigationBarTitleText\": \"Cover Page\",\n  \"usingComponents\": {\n    \"cover-page\": \"/components/cover-page/cover-page\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/cover-page/cover-page.wxml",
    "content": "<view class=\"page\">\n  <button bindtap=\"showMovieListPopup\">影单</button>\n\n  <cover-page id=\"movielist\"\n    title=\"Cover Page\"\n    distance=\"{{100}}\"\n  >\n    <view>\n      <block wx:for=\"{{movielistList}}\" wx:key=\"id\">\n        <view class=\"movielist-item\" bindtap=\"addToMovieList\">\n          <image class=\"movielist-item__img\" src=\"{{item.cover}}\" mode=\"aspectFit\" />\n          <view class=\"movielist-item__info\">\n            <view class=\"movielist-item__name\">{{item.title}}</view>\n            <view class=\"movielist-item__count\">{{item.count}}部门</view>\n          </view>\n        </view>\n      </block>\n    </view>\n  </cover-page>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/example/pages/cover-page/cover-page.wxss",
    "content": ".movielist-content {\n  /* height: 644rpx; */\n  max-height: 60vh;\n}\n\n.movielist-item {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  padding: 24rpx;\n}\n.movielist-item__img {\n  width: 88rpx;\n  height: 118rpx;\n  margin-right: 16rpx;\n}\n.movielist-item__info {\n  flex: 1;\n  align-self: stretch;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.movielist-item__name {\n  color: #333;\n  font-size: 28rpx;\n}\n.movielist-item__count {\n  color: #999;\n  font-size: 22rpx;\n  margin-top: 12rpx;\n}\n"
  },
  {
    "path": "miniprogram/packages/example/pages/icons/icons.js",
    "content": "Page({\n  data: {\n    icons: [\n      { class: 'icon-daimabeifen' },\n      { class: 'icon-dot' },\n      { class: 'icon-ios-git-merge' },\n      { class: 'icon-license' },\n      { class: 'icon-star' },\n      { class: 'icon-github' },\n    ],\n  },\n\n  handleIconTap(e) {\n    const { class: className } = e.currentTarget.dataset\n    wx.setClipboardData({\n      data: `iconfont ${className}`,\n      success: () => {\n        wx.showToast({\n          title: '类名已复制',\n        })\n      },\n    })\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/example/pages/icons/icons.json",
    "content": "{\n  \"navigationBarTitleText\": \"Icons\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/icons/icons.wxml",
    "content": "<view class=\"container\">\n  <view class=\"grid\">\n    <block wx:for=\"{{icons}}\" wx:key=\"class\">\n      <view class=\"btn-opacity grid-item\"\n        data-class=\"{{item.class}}\"\n        bindtap=\"handleIconTap\"\n      >\n        <text class=\"iconfont {{item.class}}\" />\n        <view class=\"icon-class\">{{item.class}}</view>\n      </view>\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/example/pages/icons/icons.wxss",
    "content": "page {\n  background-color: #fff;\n}\n\n.grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n}\n\n.grid-item {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  box-sizing: border-box;\n  border-right: 0.5px solid #bbb;\n  border-bottom: 0.5px solid #bbb;\n  padding: 20rpx;\n}\n.grid-item:nth-child(3n) {\n  border-right: none;\n}\n\n.grid-item .iconfont {\n  font-size: 46rpx;\n}\n\n.icon-class {\n  font-size: 24rpx;\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/index/index.js",
    "content": "Page({\n  data: {\n    pages: [\n      { title: '瀑布流', url: '../waterfall/waterfall' },\n      { title: 'Icons', url: '../icons/icons' },\n      { title: 'CoverPage', url: '../cover-page/cover-page' },\n      { title: 'TabBar', url: '../tab-bar/tab-bar' },\n    ],\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/example/pages/index/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"Example\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/index/index.wxml",
    "content": "<view class=\"container\">\n  <block wx:for=\"{{pages}}\" wx:key=\"index\">\n    <navigator class=\"nav-item\" url=\"{{item.url}}\">{{item.title}}</navigator>\n  </block>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/example/pages/index/index.wxss",
    "content": ".nav-item {\n  margin: 30rpx 30rpx 0;\n  background-color: #fff;\n  border-radius: 10rpx;\n  padding: 20rpx;\n  box-shadow: 10rpx 10rpx 10rpx 0 rgba(0,0,0,0.1);\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/tab-bar/tab-bar.js",
    "content": "Page({\n  data: {\n\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/example/pages/tab-bar/tab-bar.json",
    "content": "{\n  \"navigationBarTitleText\": \"TabBar\",\n  \"usingComponents\": {\n    \"tab-bar\": \"/components/tab-bar/index\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/tab-bar/tab-bar.wxml",
    "content": "<view class=\"container\">\n  <tab-bar />\n</view>"
  },
  {
    "path": "miniprogram/packages/example/pages/tab-bar/tab-bar.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/components/unsplash/unsplash.js",
    "content": "Component({\n  properties: {\n    data: {\n      type: Object,\n      value: null,\n    },\n  },\n\n  data: {\n    text: '',\n  },\n\n  lifetimes: {\n    attached() {\n      this.setData({\n        text: Array(Number.parseInt(20 * Math.random() + 1)).fill('军').join(''),\n      })\n    },\n  },\n\n  methods: {\n    handleImgLoad(e) {\n      this.createSelectorQuery()\n        .select('.unsplash')\n        .boundingClientRect((res) => {\n          this.triggerEvent('load', res)\n        })\n        .exec()\n    },\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/components/unsplash/unsplash.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/components/unsplash/unsplash.wxml",
    "content": "<view class=\"unsplash\">\n  <image class=\"unsplash__img\" src=\"{{data.url}}\" mode=\"widthFix\"\n    bindload=\"handleImgLoad\"\n  />\n  <view class=\"unsplash__info\">{{text}}</view>\n</view>"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/components/unsplash/unsplash.wxss",
    "content": ".unsplash {\n  background-color: #fff;\n  border-radius: 10rpx;\n  overflow: hidden;\n  box-shadow: 0 0 20rpx rgba(0,0,0,0.1);\n}\n.unsplash__img {\n  display: block;\n  width: 100%;\n}\n.unsplash__info {\n  overflow : hidden;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  padding: 10rpx 20rpx;\n}\n"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/waterfall.js",
    "content": "Page({\n  data: {\n    list: []\n  },\n\n  onLoad () {\n    this.setupList();\n  },\n\n  async setupList () {\n    const list = Array(15).fill({});\n    const promises = [];\n    for (let i = 0; i < list.length; ++i) {\n      const url =`https://source.unsplash.com/featured?${i}`;\n      promises.push(new Promise((resolve, reject) => {\n        wx.getImageInfo({\n          src: url,\n          success: (res) => {\n            resolve({\n              image: {\n                url: res.path,\n                type: res.type,\n                width: res.width,\n                height: res.height\n              },\n              width: 0,\n              height: 0\n            });\n          },\n          fail: err => reject(err)\n        });\n      }));\n    }\n    Promise.all(promises)\n      .then((list) => {\n        this.setData({\n          list\n        });\n      });\n  },\n\n  handleImgLoad (e) {\n    const { width, height } = e.detail;\n    const { index } = e.currentTarget.dataset;\n    this.setData({\n      [`list[${index}].width`]: width,\n      [`list[${index}].height`]: height\n    });\n  },\n\n  handlePreview (e) {\n    const { url } = e.currentTarget.dataset;\n    wx.previewImage({\n      urls: [url],\n      current: url\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/waterfall.json",
    "content": "{\n  \"navigationBarTitleText\": \"瀑布流\",\n  \"usingComponents\": {\n    \"unsplash\": \"./components/unsplash/unsplash\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/waterfall.wxml",
    "content": "<wxs module=\"wxs\">\n  function getSpanCount (width, height) {\n    var padding = 20;\n    var columns = 2;\n    /** grid-gap in css */\n    var vGap = 10;\n    /** (screenWidth - leftPadding - rightPadding - gridGap) / columns */\n    // var cssWidth = (750 - padding * 2 - vGap * (columns - 1)) / columns;\n    var cssWidth = width;\n    /** grid-auto-rows in css. 越小精度越高 */\n    var autoRaws = 0.5;\n    // var cssHeight = height / width * cssWidth;\n    var cssHeight = height;\n    return Math.ceil((cssHeight + vGap) / (autoRaws + vGap));\n  }\n  module.exports = {\n    getSpanCount: getSpanCount\n  };\n</wxs>\n<view class=\"container\">\n  <view class=\"list\">\n    <block wx:for=\"{{list}}\" wx:key=\"index\">\n      <view class=\"item\"\n        style=\"grid-row: auto / span {{wxs.getSpanCount(item.width, item.height)}};\"\n      >\n        <unsplash class=\"unsplash\"\n          data=\"{{item.image}}\"\n          data-index=\"{{index}}\"\n          data-url=\"{{item.image.url}}\"\n          bind:load=\"handleImgLoad\"\n          bindtap=\"handlePreview\"\n        />\n      </view>\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/example/pages/waterfall/waterfall.wxss",
    "content": ".list {\n  display: grid;\n  padding: 20rpx;\n  grid-template-columns: repeat(2, 1fr);\n  /* 每项间隙 */\n  grid-gap: 10px 10px;\n  grid-auto-flow: row dense;\n  grid-auto-rows: 0.5px;\n}\n\n.item {\n  width: 100%;\n  grid-row: auto;\n}\n\n.img {\n  width: 100%;\n  height: 100%;\n}"
  },
  {
    "path": "miniprogram/packages/github/components/event-item/event-item.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    event: {\n      type: Object,\n      value: null\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/event-item/event-item.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/github/components/event-item/event-item.wxml",
    "content": "<wxs module=\"wxs\" src=\"./event-item.wxs\" />\n\n<view class=\"event\">\n  <image class=\"event__avatar\" src=\"{{event.actor.avatar_url}}\" mode=\"aspectFill\" />\n  <view>\n    <!-- case ForkEvent -->\n    <view class=\"event__title\" wx:if=\"{{event.type === 'ForkEvent'}}\">\n      <navigator class=\"event__actor\">{{event.actor.display_login}}</navigator>\n      <text space=\"nbsp\"> forked </text>\n      <navigator class=\"event__repo\" hover-class=\"hover-opacity\"\n        url=\"../../pages/repository/repository?owner={{event.payload.forkee.owner.login}}&repo={{event.payload.forkee.name}}\"\n      >\n        {{event.payload.forkee.full_name}}\n      </navigator>\n      <text space=\"nbsp\"> from </text>\n      <navigator class=\"event__repo\" hover-class=\"hover-opacity\"\n        url=\"../../pages/repository/repository?owner={{wxs.splitRepoName(event.repo.name).owner}}&repo={{wxs.splitRepoName(event.repo.name).repo}}\"\n      >\n        {{event.repo.name}}\n      </navigator>\n    </view>\n    <view class=\"event__title\" wx:else>\n      <navigator class=\"event__actor\">{{event.actor.display_login}}</navigator>\n      <text space=\"nbsp\"> {{wxs.getDisplayAction(event)}} </text>\n      <navigator class=\"event__repo btn-opacity\" hover-class=\"hover-opacity\"\n        url=\"../../pages/repository/repository?owner={{wxs.splitRepoName(event.repo.name).owner}}&repo={{wxs.splitRepoName(event.repo.name).repo}}\"\n      >{{event.repo.name}}</navigator>\n    </view>\n    <view class=\"event__time\">{{wxs.getDisplayTime(event)}}</view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/github/components/event-item/event-item.wxs",
    "content": "function getDisplayAction (event) {\n  if (!event) {\n    return '';\n  }\n  var type = event.type;\n  if (type === 'WatchEvent') {\n    return event.payload.action;\n  }\n  if (type === 'IssuesEvent') {\n    return event.payload.action + ' issue';\n  }\n  if (type === 'IssueCommentEvent') {\n    return event.payload.action + ' issue comment';\n  }\n  if (type === 'ForkEvent') {\n    return 'forked';\n  }\n  if (type === 'CreateEvent') {\n    return 'created a ' + event.payload.ref_type;\n  }\n  return '';\n}\n\nfunction getDisplayTime (event) {\n  if (!event) {\n    return '';\n  }\n  /** @type {Date} */\n  var createdAt = getDate(event.created_at);\n  /** @type {Date} */\n  var now = getDate();\n  var diff = now.getTime() - createdAt.getTime();\n  var m = 60 * 1000;\n  if (diff < m) {\n    return '1 minutes ago';\n  }\n  var h = 60 * m;\n  if (diff < h) {\n    return Math.round(diff / m) + ' minutes ago';\n  }\n  var d = 24 * h;\n  if (diff < d) {\n    return Math.round(diff / h) + ' hours ago';\n  }\n  if (diff / d < 4) {\n    return Math.round(diff / d) + ' days ago';\n  }\n  return event.created_at.substring(0, 10);\n}\n\n/**\n * @param {string} name\n */\nfunction splitRepoName (name) {\n  if (!name) {\n    return null;\n  }\n  var arr = name.split('/');\n  return {\n    owner: arr[0],\n    repo: arr[1]\n  };\n}\n\nmodule.exports = {\n  getDisplayAction: getDisplayAction,\n  getDisplayTime: getDisplayTime,\n  splitRepoName: splitRepoName\n};\n"
  },
  {
    "path": "miniprogram/packages/github/components/event-item/event-item.wxss",
    "content": ".event {\n  display: flex;\n  padding: 20rpx 30rpx;\n  background-color: #fff;\n}\n.event__avatar {\n  margin-right: 16rpx;\n  width: 60rpx;\n  height: 60rpx;\n  border-radius: 30rpx;\n  flex-shrink: 0;\n}\n.event__title {\n  margin-top: -0.2em;\n  display: flex;\n  flex-wrap: wrap;\n  line-height: 1.4;\n}\n.event__actor,\n.event__repo {\n  color: #0366d6;\n}\n.event__time {\n  font-size: 24rpx;\n}\n\n\n.event {\n  position: relative;\n}\n.event:after {\n  content: '';\n  position: absolute;\n  z-index: 1;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  height: 1px;\n  background-color: #ddd;\n  transform-origin: 0 100%;\n  transform: scaleY(0.5);\n}\n"
  },
  {
    "path": "miniprogram/packages/github/components/lang-item/lang-item.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n\n  properties: {\n    data: {\n      type: Object,\n      value: null\n    },\n    indexes: {\n      type: Array,\n      value: []\n    }\n  },\n\n  data: {\n    stared: false\n  },\n\n  observers: {\n    data (data) {\n      this.setData({\n        stared: !!data?.stared\n      });\n    }\n  },\n\n  methods: {\n    handleStar () {\n      const { data, stared, indexes } = this.data;\n      const value = !stared;\n      data.stared = value;\n      this.setData({\n        stared: value\n      });\n\n      const pages = getCurrentPages() || [];\n      const page = pages[pages.length - 1];\n      page?.onLangStar?.({\n        detail: {\n          value: { data, stared: value, indexes }\n        }\n      });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/lang-item/lang-item.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/github/components/lang-item/lang-item.wxml",
    "content": "<view class=\"lang-item\">\n  <view class=\"lang-item__name\">{{data.name}}</view>\n  <view class=\"btn-opacity btn-star {{stared && 'stared'}}\" style=\"--lang-color:{{data.color}};\"\n    catch:tap=\"handleStar\"\n  >\n    <text class=\"iconfont icon-star\"></text>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/github/components/lang-item/lang-item.wxss",
    "content": ".lang-item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding-right: 70rpx;\n}\n\n.btn-star {\n  font-size: 30rpx;\n  width: 60rpx;\n  height: 60rpx;\n  border-radius: 30rpx;\n  background-color: #eee;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  color: #ded8d8;\n  box-shadow: 2rpx 2rpx 10rpx #eee;\n  transition: all .2s;\n}\n.btn-star.stared {\n  color: #f7efe4;\n  background-color: var(--lang-color);\n}\n"
  },
  {
    "path": "miniprogram/packages/github/components/notification-item/notification-item.js",
    "content": "Component({\n  options: {\n    addGlobalClass: true\n  },\n  properties: {\n    data: {\n      type: Object,\n      value: null\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/notification-item/notification-item.json",
    "content": "{\n  \"component\": true\n}"
  },
  {
    "path": "miniprogram/packages/github/components/notification-item/notification-item.wxml",
    "content": "<view class=\"notification-item\">\n  <view class=\"notification-item__icon\">\n    <text class=\"iconfont icon-ios-git-merge\"></text>\n  </view>\n  <view class=\"notification-item__content\">\n    <view class=\"notification-item__repo\">\n      <view class=\"repo-name\">Honye/weapp-mark</view>\n      <view class=\"issue\">#8</view>\n    </view>\n    <view class=\"notification-item__msg\">saddasdasdsadasdsadasd</view>\n    <view class=\"notification-item__note\">\n      <view class=\"avatar-group\"></view>\n      <view class=\"notification-item__reason\">mention</view>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/github/components/notification-item/notification-item.wxss",
    "content": ".notification-item {\n  display: flex;\n}\n\n.notification-item__icon {\n  color: #6f42c1;\n}\n\n.notification-item__repo {\n  display: flex;\n  align-items: center;\n  color: #6a737d;\n}\n\n.notification-item__note {\n  display: flex;\n  align-items: center;\n  color: #586069;\n}\n\n.avatar-group {\n  margin-right: 8rpx;\n  width: 50rpx;\n  height: 50rpx;\n  border-radius: 50rpx;\n  background-color: #eee;\n}"
  },
  {
    "path": "miniprogram/packages/github/components/page-events/page-events.js",
    "content": "import { getEvents } from '../../../../apis/github';\n\nComponent({\n  options: {\n    addGlobalClass: true,\n    multipleSlots: true\n  },\n\n  data: {\n    _page: 1,\n    _perPage: 20,\n    events: []\n  },\n\n  lifetimes: {\n    attached () {\n      this.getEventList();\n    }\n  },\n\n  methods: {\n    async getEventList () {\n      const { _page, _perPage } = this.data;\n      const res = await getEvents({\n        username: 'Honye',\n        per_page: _perPage,\n        page: _page\n      });\n      this.setData({\n        events: res\n      });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-events/page-events.json",
    "content": "{\n  \"usingComponents\": {\n    \"event-item\": \"../event-item/event-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/components/page-events/page-events.wxml",
    "content": "<scroll-view class=\"page\" scroll-y enable-back-to-top>\n  <block wx:for=\"{{events}}\" wx:key=\"id\">\n    <event-item event=\"{{item}}\" />\n  </block>\n  <slot name=\"tabbar\"></slot>\n</scroll-view>\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-events/page-events.wxss",
    "content": ".page {\n  height: 100vh;\n  box-sizing: border-box;\n  background-color: #fff;\n}\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-trending/page-trending.js",
    "content": "import wxCloud from '../../../../utils/wxCloud';\n\nComponent({\n  options: {\n    addGlobalClass: true,\n    multipleSlots: true\n  },\n\n  data: {\n    spokenLanguages: [\n      { title: 'Any', value: '' },\n      { title: 'Chinese', value: 'zh' },\n      { title: 'English', value: 'en' }\n    ],\n    spokenLanguageIndex: -1,\n    languages: [\n      { title: 'Any', value: '' },\n      { title: 'JavaScript', value: 'javascript' },\n      { title: 'Python', value: 'python' },\n      { title: 'Dart', value: 'dart' }\n    ],\n    languageIndex: -1,\n    language: '',\n    dateRanges: [\n      { title: 'Today', value: 'daily' },\n      { title: 'This week', value: 'weekly' },\n      { title: 'This month', value: 'monthly' }\n    ],\n    dateRangeIndex: 0,\n    list: [],\n    loading: false,\n    sticky: true\n  },\n\n  lifetimes: {\n    attached () {\n      this.getTrendingList();\n    }\n  },\n\n  methods: {\n    onPageScroll (e) {\n      const { scrollTop } = e.detail;\n      if (scrollTop < this.scrollTop && !this.data.sticky) {\n        this.setData({\n          sticky: true\n        });\n      } else if (scrollTop > this.scrollTop && scrollTop > 0 && this.data.sticky) {\n        this.setData({\n          sticky: false\n        });\n      }\n      this.scrollTop = scrollTop;\n    },\n\n    async getTrendingList () {\n      const {\n        languages, languageIndex, language,\n        dateRanges, dateRangeIndex,\n        spokenLanguages, spokenLanguageIndex\n      } = this.data;\n      wx.showNavigationBarLoading();\n      this.setData({ loading: true });\n      try {\n        const res = await wxCloud('trending', {\n          language: language || languages[languageIndex]?.value,\n          since: dateRanges[dateRangeIndex]?.value,\n          spoken_language_code: spokenLanguages[spokenLanguageIndex]?.value\n        });\n        wx.pageScrollTo({ scrollTop: 0 });\n        this.setData({\n          list: res,\n          loading: false\n        });\n      } catch (e) {\n        this.setData({\n          loading: false\n        });\n      }\n      wx.hideNavigationBarLoading();\n    },\n\n    handlePickerChange (e) {\n      const { name } = e.currentTarget.dataset;\n      const { value } = e.detail;\n      switch (name) {\n        case 'spokenLanguage':\n          this.setData(\n            { spokenLanguageIndex: value },\n            () => this.getTrendingList()\n          );\n          break;\n        case 'language':\n          this.setData(\n            { languageIndex: value },\n            () => this.getTrendingList()\n          );\n          break;\n        case 'dateRange':\n          this.setData(\n            { dateRangeIndex: value },\n            () => this.getTrendingList()\n          );\n          break;\n        default:\n      }\n    },\n\n    toChooseLanguage (e) {\n      wx.navigateTo({\n        url: '../languages/languages',\n        events: {\n          choose: ({ value }) => {\n            this.setData(\n              { language: value.name },\n              () => this.getTrendingList()\n            );\n          },\n          onChange: ({ stared = [] }) => {\n            const defaultOne = { title: 'Any', value: '' };\n            const staredLanguages = stared.map((item) => ({\n              title: item.name,\n              value: item.name\n            }));\n            this.setData({\n              languages: [defaultOne, ...staredLanguages]\n            });\n          }\n        }\n      });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-trending/page-trending.json",
    "content": "{\n  \"usingComponents\": {\n    \"repo\": \"../repo-item/repo-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/components/page-trending/page-trending.wxml",
    "content": "<import src='/templates/loading/loading' />\n\n<scroll-view class=\"page\" scroll-y enable-back-to-top bindscroll=\"onPageScroll\">\n  <view>\n    <view class=\"sticky {{sticky && 'show-search'}}\" wx:for=\"{{[1,2]}}\" wx:key=\"index\">\n      <navigator url=\"/packages/github/pages/search/search\" class=\"search-bar-wrap\">\n        <view class=\"search-bar\">\n          <input class=\"search-bar__input\" placeholder=\"Search GitHub\" disabled />\n        </view>\n      </navigator>\n      <view class=\"filterbar\">\n        <view class=\"btn-opacity\" bindtap=\"toChooseLanguage\">Repositories</view>\n        <view>\n          <picker class=\"inline-picker\" mode=\"selector\"\n            header-text=\"Spoken Language\"\n            range=\"{{spokenLanguages}}\"\n            range-key=\"title\"\n            value=\"{{spokenLanguageIndex > -1 ? spokenLanguageIndex : 0}}\"\n            data-name=\"spokenLanguage\"\n            bindchange=\"handlePickerChange\"\n          >\n            <view class=\"sort btn-opacity\">\n              <text>{{spokenLanguages[spokenLanguageIndex].value && spokenLanguages[spokenLanguageIndex].title || 'Spoken Language'}}</text>\n              <view class=\"arrow-down\" />\n            </view>\n          </picker>\n          <picker class=\"inline-picker\" mode=\"selector\"\n            header-text=\"Language\"\n            range=\"{{languages}}\"\n            range-key=\"title\"\n            value=\"{{languageIndex > -1 ? languageIndex : 0}}\"\n            data-name=\"language\"\n            bindchange=\"handlePickerChange\"\n          >\n            <view class=\"sort btn-opacity\">\n              <text>{{languages[languageIndex].value && languages[languageIndex].title\n                || language\n                || 'Language'}}</text>\n              <view class=\"arrow-down\" />\n            </view>\n          </picker>\n          <picker class=\"inline-picker\" mode=\"selector\"\n            header-text=\"Date range\"\n            range=\"{{dateRanges}}\"\n            range-key=\"title\"\n            value=\"{{dateRangeIndex}}\"\n            data-name=\"dateRange\"\n            bindchange=\"handlePickerChange\"\n          >\n            <view class=\"sort btn-opacity\">\n              <text>{{dateRanges[dateRangeIndex].title || 'Today'}}</text>\n              <view class=\"arrow-down\" />\n            </view>\n          </picker>\n        </view>\n      </view>\n    </view>\n  </view>\n  <view class=\"list\">\n    <block wx:for=\"{{list}}\" wx:key=\"index\">\n      <view class=\"list-item\">\n        <repo class=\"repo-item\" repo=\"{{item}}\" />\n      </view>\n    </block>\n  </view>\n  <template is='loading-more' wx:if=\"{{loading}}\" />\n  <slot name=\"tabbar\"></slot>\n</scroll-view>"
  },
  {
    "path": "miniprogram/packages/github/components/page-trending/page-trending.wxss",
    "content": ".page {\n  height: 100vh;\n  box-sizing: border-box;\n  background-color: #fff;\n}\n\n.sticky {\n  position: fixed;\n  z-index: 10;\n  top: -106rpx; /* (66 + 20 * 2) */\n  left: 0;\n  right: 0;\n  transition: top .3s;\n  background-color: #fff;\n}\n.sticky:nth-child(2n) {\n  position: sticky;\n  opacity: 0;\n}\n.sticky.show-search {\n  top: 0;\n}\n.search-bar {\n  background-color: #fff;\n  padding: 20rpx 30rpx;\n}\n.search-bar__input {\n  flex: 1;\n  background-color: #eee;\n  border-radius: 8rpx;\n  font-size: 28rpx;\n  height: 66rpx;\n  display: flex;\n  align-items: center;\n  padding: 0 18rpx;\n}\n\n.filterbar {\n  width: 100%;\n  height: 3em;\n  background-color: #fff;\n  display: flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #ccc;\n  padding: 0 30rpx;\n  box-sizing: border-box;\n  justify-content: space-between;\n  transition: top .3s;\n}\n\n.inline-picker {\n  display: inline-block;\n}\n.inline-picker + .inline-picker {\n  margin-left: 20rpx;\n}\n\n.sort {\n  display: inline-flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #ccc;\n  line-height: 32rpx;\n  box-sizing: content-box;\n  border: 2rpx solid #ccc;\n  border-radius: 18rpx;\n  padding: 0 10rpx;\n}\n\n.sort .arrow-down {\n  margin-left: 8rpx;\n  width: 11rpx;\n  height: 11rpx;\n  border-color: #ccc;\n}\n\n.list-item {\n  position: relative;\n}\n\n.list-item::after {\n  content: \"\";\n  position: absolute;\n  z-index: 1;\n  bottom: 0;\n  left: 20rpx;\n  right: 0;\n  height: 1px;\n  background-color: #B7B7B9;\n  transform: scaleY(0.5) translateY(50%);\n  transform-origin: 0 50%;\n}\n.list-item:last-child::after {\n  content: none;\n}"
  },
  {
    "path": "miniprogram/packages/github/components/page-user/page-user.js",
    "content": "import { getSelfInfo } from '../../../../apis/github';\nimport wxCloud from '../../../../utils/wxCloud';\n\nComponent({\n  options: {\n    addGlobalClass: true,\n    multipleSlots: true\n  },\n\n  data: {\n    user: null,\n    homeInfo: null\n  },\n\n  lifetimes: {\n    async attached () {\n      this.getUserInfo();\n    }\n  },\n\n  methods: {\n    async getUserInfo () {\n      getSelfInfo()\n        .then((res) => {\n          this.setData({\n            user: res\n          });\n        });\n      const info = await wxCloud('github', {\n        action: 'homePage',\n        data: {\n          user: 'honye'\n        }\n      });\n      this.setData({\n        homeInfo: info\n      });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-user/page-user.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/github/components/page-user/page-user.wxml",
    "content": "<scroll-view class=\"page\" scroll-y enable-back-to-top enhanced>\n  <view class=\"info\">\n    <view class=\"user\">\n      <image class=\"avatar\" src=\"{{user.avatar_url}}\" mode=\"aspectFill\" />\n      <view>\n        <view class=\"fullname\" wx:if=\"{{user.name}}\">{{user.name}}</view>\n        <view class=\"username\">{{user.login}}</view>\n      </view>\n    </view>\n    <view class=\"joined\">{{user.created_at}}</view>\n    <view class=\"bio\">{{user.bio}}</view>\n  </view>\n  <view class=\"counts\">\n    <view class=\"counter\">\n      <view class=\"counter-numer\">{{user.public_repos + user.owned_private_repos}}</view>\n      <view class=\"counter-name\">Repositories</view>\n    </view>\n    <navigator class=\"counter\" url=\"../../pages/starred/starred\">\n      <view class=\"counter-numer\">{{homeInfo.stars || 0}}</view>\n      <view class=\"counter-name\">Stars</view>\n    </navigator>\n    <view class=\"counter\">\n      <view class=\"counter-numer\">{{user.followers}}</view>\n      <view class=\"counter-name\">Followers</view>\n    </view>\n    <view class=\"counter\">\n      <view class=\"counter-numer\">{{user.following}}</view>\n      <view class=\"counter-name\">Following</view>\n    </view>\n  </view>\n  <slot name=\"tabbar\"></slot>\n</scroll-view>\n"
  },
  {
    "path": "miniprogram/packages/github/components/page-user/page-user.wxss",
    "content": ".page {\n  height: 100vh;\n  box-sizing: border-box;\n}\n\n.info {\n  padding: 40rpx 30rpx;\n  background-color: #fff;\n}\n\n.user {\n  display: flex;\n  align-items: center;\n}\n\n.avatar {\n  margin-right: 30rpx;\n  width: 120rpx;\n  height: 120rpx;\n  border-radius: 50%;\n}\n\n.fullname {\n  font-weight: bold;\n  font-size: 36rpx;\n}\n\n.username {\n  font-size: 30rpx;\n  color: #586069;\n}\n\n.joined {\n  margin-top: 10rpx;\n  color: #999;\n  font-size: 28rpx;\n}\n\n.bio {\n  margin-top: 10rpx;\n  font-weight: 400;\n  line-height: 1.2;\n}\n\n.counts {\n  display: flex;\n  background-color: #fff;\n  position: relative;\n}\n.counts::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  border-top: 1px solid rgba(0,0,0,0.3);\n  transform-origin: 0 0;\n  transform: scaleY(0.5);\n}\n.counter {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 20rpx 0;\n  line-height: 1;\n}\n.counter-number {\n  font-size: 34rpx;\n  font-weight: bold;\n}\n.counter-name {\n  margin-top: 10rpx;\n  font-size: 26rpx;\n  color: #555;\n}"
  },
  {
    "path": "miniprogram/packages/github/components/repo-item/repo-item.js",
    "content": "import colors from '../../../../utils/github-colors';\n\nComponent({\n  options: {\n    addGlobalClass: true\n  },\n  properties: {\n    repo: {\n      type: Object,\n      value: {}\n    }\n  },\n  data: {\n    colors\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/components/repo-item/repo-item.json",
    "content": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/github/components/repo-item/repo-item.wxml",
    "content": "<wxs module=\"wxs\" src=\"../../../../utils/utils.wxs\" />\n<navigator class=\"component repo-item\"\n  url=\"/packages/github/pages/repository/repository?owner={{repo.owner.login}}&repo={{repo.name}}&branch={{repo.default_branch}}\"\n>\n  <view class=\"user\">\n    <image class=\"avatar\" src=\"{{repo.owner.avatar_url}}\" mode=\"aspectFit\" />\n    <view class=\"nickname\">{{repo.owner.login}}</view>\n  </view>\n  <view class=\"repo-name\">{{repo.name}}</view>\n  <view class=\"desc\" wx:if=\"{{repo.description}}\">{{repo.description}}</view>\n  <view class=\"info\">\n    <view class=\"stars\">\n      <text class=\"iconfont icon-star\"></text>\n      <view class=\"stars__value\">{{wxs.milliFormat(repo.stargazers_count)}}</view>\n    </view>\n    <view class=\"language\" wx:if=\"{{repo.language}}\">\n      <text class=\"iconfont icon-dot\" style=\"color:{{colors[repo.language].color}}\"></text>\n      <view class=\"language__value\">{{repo.language}}</view>\n    </view>\n  </view>\n</navigator>\n"
  },
  {
    "path": "miniprogram/packages/github/components/repo-item/repo-item.wxss",
    "content": ".component {\n  background-color: #fff;\n  padding: 30rpx 60rpx 30rpx 35rpx;\n}\n\n.user {\n  display: flex;\n  align-items: center;\n}\n\n.avatar {\n  margin-right: 18rpx;\n  width: 46rpx;\n  height: 46rpx;\n  border-radius: 46rpx;\n  background-color: #eee;\n}\n\n.nickname {\n  font-size: 20rpx;\n  color: #222;\n}\n\n.repo-name {\n  margin-top: 16rpx;\n  font-size: 30rpx;\n  line-height: 1;\n  font-weight: bold;\n  color: #050505;\n}\n\n.desc {\n  margin-top: 18rpx;\n  font-size: 28rpx;\n  line-height: 38rpx;\n  overflow-wrap: break-word;\n  word-break: break-all;\n  color: #070707;\n}\n\n.info {\n  margin-top: 18rpx;\n}\n\n.stars {\n  display: inline-flex;\n  align-items: center;\n  font-size: 28rpx;\n  line-height: 1;\n  vertical-align: middle;\n  color: #4B4D58;\n}\n\n.stars .icon-star {\n  margin-right: 10rpx;\n  color: #C79D0F;\n}\n\n.language {\n  margin-left: 30rpx;\n  display: inline-flex;\n  align-items: center;\n  font-size: 28rpx;\n  line-height: 1;\n  vertical-align: middle;\n  color: #4B4D58;\n}\n\n.language .icon-dot {\n  margin-right: 10rpx;\n  font-size: 20rpx;\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/events/events.js",
    "content": "import { getEvents } from '../../../../apis/github';\n\nPage({\n  data: {\n    _page: 1,\n    _perPage: 20,\n    events: []\n  },\n\n  onLoad (options) {\n    this.getEventList();\n  },\n\n  async getEventList () {\n    const { _page, _perPage } = this.data;\n    const res = await getEvents({\n      username: 'Honye',\n      per_page: _perPage,\n      page: _page\n    });\n    this.setData({\n      events: res\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/events/events.json",
    "content": "{\n  \"navigationBarTitleText\": \"Events\",\n  \"usingComponents\": {\n    \"event-item\": \"../../components/event-item/event-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/events/events.wxml",
    "content": "<view class=\"container\">\n  <block wx:for=\"{{events}}\" wx:key=\"id\">\n    <event-item event=\"{{item}}\" />\n  </block>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/github/pages/events/events.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/packages/github/pages/home/home.js",
    "content": "Page({\n  data: {\n    pages: [\n      {\n        \"text\": \"News\",\n        \"iconPath\": \"/assets/images/github/tab-news.svg\",\n        \"selectedIconPath\": \"/assets/images/github/tab-news-selected.svg\",\n        \"component\": \"page-events\",\n        \"attached\": false\n      },\n      {\n        \"text\": \"Expore\",\n        \"iconPath\": \"/assets/images/github/tab-explore.svg\",\n        \"selectedIconPath\": \"/assets/images/github/tab-explore-selected.svg\",\n        \"component\": \"page-trending\",\n        \"attached\": false\n      },\n      {\n        \"text\": \"User\",\n        \"iconPath\": \"/assets/images/github/tab-user.svg\",\n        \"selectedIconPath\": \"/assets/images/github/tab-user-selected.svg\",\n        \"component\": \"page-user\",\n        \"attached\": false\n      }\n    ],\n    current: 0,\n    duration: 300\n  },\n\n  onLoad (options) {\n    this.lazyLoadComponent();\n  },\n\n  lazyLoadComponent () {\n    const { current, pages } = this.data;\n    const currentComponent = pages[current];\n    if (!currentComponent.attached) {\n      this.setData({\n        [`pages[${current}].attached`]: true\n      });\n    }\n  },\n\n  handleSwiperChange (e) {\n    /**\n     * @type {{\n     * current: number;\n     * }}\n     */\n    const { current } = e.detail;\n    this.setData({\n      current\n    }, () => this.lazyLoadComponent());\n  },\n\n  switchTab (e) {\n    /**\n     * @type {{\n     * index: number;\n     * }}\n     */\n    const { index } = e.detail;\n    this.setData({\n      duration: 0\n    }, () => {\n      this.setData({\n        current: index\n      }, () => this.lazyLoadComponent());\n    });\n  },\n\n  handleSwipeFinish (e) {\n    this.setData({\n      duration: 500\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/home/home.json",
    "content": "{\n  \"navigationBarTitleText\": \"GitMark\",\n  \"disableScroll\": true,\n  \"usingComponents\": {\n    \"tab-bar\": \"/components/tab-bar/index\",\n    \"page-events\": \"../../components/page-events/page-events\",\n    \"page-trending\": \"../../components/page-trending/page-trending\",\n    \"page-user\": \"../../components/page-user/page-user\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/home/home.wxml",
    "content": "<swiper class=\"swiper\" circular=\"{{false}}\" current=\"{{current}}\" duration=\"{{duration}}\"\n  bindchange=\"handleSwiperChange\"\n  bindanimationfinish=\"handleSwipeFinish\"\n>\n  <block wx:for=\"{{pages}}\" wx:key=\"index\">\n    <swiper-item class=\"swiper-item\">\n      <template wx:if=\"{{item.attached}}\" is=\"{{item.component}}\" data=\"{{tabs: pages}}\" />\n    </swiper-item>\n  </block>\n</swiper>\n<tab-bar list=\"{{pages}}\" bind:change=\"switchTab\" selected=\"{{current}}\" />\n\n<template name=\"page-events\">\n  <page-events>\n    <view slot=\"tabbar\" style=\"opacity:0\">\n      <tab-bar list=\"{{tabs}}\" placeholder></tab-bar>\n    </view>\n  </page-events>\n</template>\n<template name=\"page-trending\">\n  <page-trending>\n    <view slot=\"tabbar\" style=\"opacity:0\">\n      <tab-bar list=\"{{tabs}}\" placeholder></tab-bar>\n    </view>\n  </page-trending>\n</template>\n<template name=\"page-user\">\n  <page-user>\n    <view slot=\"tabbar\" style=\"opacity:0\">\n      <tab-bar list=\"{{tabs}}\" placeholder></tab-bar>\n    </view>\n  </page-user>\n</template>\n"
  },
  {
    "path": "miniprogram/packages/github/pages/home/home.wxss",
    "content": ".swiper {\n  height: 100vh;\n}\n\n.swiper-item {\n  height: 100vh;\n}\n"
  },
  {
    "path": "miniprogram/packages/github/pages/languages/languages.js",
    "content": "import languages from '../../../../utils/github-colors';\n\nPage({\n  data: {\n    /**\n     * @type {Array<{\n     * alpha: string;\n     * anchor: string;\n     * subItems: Array<{\n     *   name: string;\n     *   color: string;\n     * }>\n     * }>}\n     */\n    list: [],\n    changed: false\n  },\n\n  onLoad () {\n    this.setLanguages();\n  },\n\n  onUnload () {\n    // 如果 stared 改变了就通知上一页改变后的 stared 列表\n    const { _changed, list } = this.data;\n    if (_changed) {\n      const first = list[0];\n      let stared = [];\n      if (first.anchor === 'star') {\n        stared = first.subItems;\n      }\n      this.getOpenerEventChannel()?.emit?.('onChange', { stared });\n    }\n  },\n\n  setLanguages () {\n    const list = Object.keys(languages)\n      .map((key) => {\n        return {\n          alpha: key.charAt(0).toUpperCase(),\n          data: {\n            name: key,\n            ...languages[key]\n          }\n        }\n      })\n      .sort((c1, c2) => {\n        const isNaN1 = isNaN(Number(c1.alpha));\n        const isNaN2 = isNaN(Number(c2.alpha));\n        // 不考虑中文和特殊字符\n        if (isNaN1 && isNaN2) {\n          // case 都是字母\n          return c1 - c2;\n        }\n        if (!isNaN1 && !isNaN2) {\n          // case 都是数字\n          return c1 - c2;\n        }\n        // 其中一个是数字、一个是字母\n        if (isNaN1) {\n          return -1;\n        } else {\n          return 1;\n        }\n      });\n    \n    const map = new Map();\n    for (const lang of list) {\n      const alpha = isNaN(lang.alpha) ? lang.alpha : '#';\n      if (!map.has(alpha)) {\n        map.set(alpha, []);\n      }\n      map.get(alpha).push(lang.data);\n    }\n    const res = [];\n    for (const [alpha, items] of map) {\n      res.push({\n        alpha,\n        anchor: alpha === '#' ? 'shaf' : alpha,\n        subItems: items\n      });\n    }\n    this.setData({ list: res });\n  },\n\n  handleChoose (e) {\n    const eventChannel = this.getOpenerEventChannel();\n    eventChannel?.emit?.('choose', { value: e.detail.item });\n    wx.navigateBack();\n  },\n\n  onLangStar (e) {\n    this.data._changed = true;\n    const { data, stared, indexes } = e.detail.value;\n    const { list } = this.data;\n    const firstItem = list[0];\n    list[indexes[0]].subItems[indexes[1]].stared = stared;\n    if (stared) {\n      if (firstItem.anchor === 'star') {\n        firstItem.subItems.push(data);\n      } else {\n        list.unshift({\n          alpha: '✩',\n          anchor: 'star',\n          subItems: [data]\n        });\n      }\n    } else {\n      if (firstItem.anchor === 'star') {\n        const { subItems } = firstItem;\n        if (subItems.length === 1) {\n          list.splice(0, 1);\n        } else {\n          const index = firstItem.subItems.findIndex((item) => item.name === data.name);\n          subItems.splice(index, 1);\n        }\n      }\n    }\n    this.setData({ list });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/languages/languages.json",
    "content": "{\n  \"navigationBarTitleText\": \"Languages\",\n  \"usingComponents\": {\n    \"index-list\": \"/components/index-list/index-list\",\n    \"lang-item\": \"../../components/lang-item/lang-item\"\n  }\n}\n"
  },
  {
    "path": "miniprogram/packages/github/pages/languages/languages.wxml",
    "content": "<index-list list=\"{{list}}\" bindchoose=\"handleChoose\"\n  generic:content=\"lang-item\"\n>\n</index-list>"
  },
  {
    "path": "miniprogram/packages/github/pages/languages/languages.wxss",
    "content": "page {\n  background-color: #fff;\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/notifications/notifications.js",
    "content": "import * as GitHubApis from '../../../../apis/github';\n\nPage({\n  data: {\n    list: []\n  },\n\n  onLoad () {\n\n    this.getStarredList();\n\n    this.getAllNotifications();\n\n    GitHubApis.getRepoReadme({\n      owner: 'honye',\n      repo: 'weapp-mark'\n    })\n      .then((res) => {\n        console.log('repository readme', res);\n      });\n  },\n\n  getAllNotifications () {\n    GitHubApis.getNotifications({\n      all: true,\n      since: new Date('2020/05/19').toISOString(),\n      per_page: 10,\n      page: 1\n    })\n      .then((res) => {\n        console.log('GitHub notifications', res);\n      })\n      .catch((err) => {\n        console.error(err);\n      });\n  },\n\n  async getStarredList () {\n    const resp = await GitHubApis.getStarredList({\n      sort: 'created',\n      direction: 'desc',\n      per_page: 2,\n      page: 1\n    });\n    console.log('Starred list==', resp);\n    this.setData({\n      list: resp\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/notifications/notifications.json",
    "content": "{\n  \"navigationBarTitleText\": \"Notifications\",\n  \"usingComponents\": {\n    \"notification-item\": \"../../components/notification-item/notification-item\",\n    \"repo-item\": \"../../components/repo-item/repo-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/notifications/notifications.wxml",
    "content": "<view class=\"container\">\n  <block wx:for=\"{{[1,2,3]}}\" wx:key=\"index\">\n    <notification-item />\n  </block>\n  <block wx:for=\"{{list}}\" wx:key=\"index\">\n    <repo-item repo=\"{{item}}\" />\n  </block>\n</view>"
  },
  {
    "path": "miniprogram/packages/github/pages/notifications/notifications.wxss",
    "content": ".repo-item {\n  position: relative;\n}\n\n.repo-item::after {\n  content: \"\";\n  position: absolute;\n  bottom: 0;\n  left: 20rpx;\n  right: 0;\n  height: 1px;\n  background-color: #B7B7B9;\n  transform: scaleY(0.5) translateY(50%);\n  transform-origin: 0 50%;\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/repository/repository.js",
    "content": "import { getRepoReadme, getRepoInfo } from '../../../../apis/github';\nimport towxml from '../../../../components/towxml/index';\n\nPage({\n  options: {\n    pureDataPattern: /^_/\n  },\n\n  data: {\n    _owner: '',\n    _repo: '',\n    _branch: '',\n    nodes: null\n  },\n\n  /**\n   * @param {object} options\n   * @param {string} options.owner\n   * @param {string} options.repo\n   * @param {string} options.branch\n   */\n  onLoad (options) {\n    console.log(options);\n    this.data._owner = options.owner;\n    this.data._repo = options.repo;\n    if (options.branch) this.data._branch = options.branch;\n    wx.setNavigationBarTitle({\n      title: options.repo\n    });\n    this.getReadme();\n  },\n\n  async getReadme () {\n    const { _owner, _repo, _branch } = this.data;\n    // Trending 爬取不到默认分支名\n    const promises = [\n      getRepoReadme({\n        owner: _owner,\n        repo: _repo,\n        ref: _branch || undefined,\n        media: 'raw'\n      })\n    ];\n    if (!_branch) {\n      promises.push(\n        getRepoInfo({\n          owner: _owner,\n          repo: _repo\n        })\n      );\n    } else {\n      promises.push(\n        Promise.resolve({ default_branch: _branch })\n      );\n    }\n\n    const [markdown, repoinfo] = await Promise.all(promises);\n    const nodes = towxml(markdown, 'markdown', {\n      base: `https://raw.githubusercontent.com/${_owner}/${_repo}/${repoinfo.default_branch}/`,\n      events: {\n\t\t\t\ttap: (e) => {\n          const { data } = e.currentTarget.dataset;\n          const { tag, attr } = data;\n          switch (tag) {\n            case 'img':\n              wx.previewImage({\n                urls: [attr.src],\n                current: attr.src\n              });\n              break;\n            case 'navigator': {\n              const href = attr.href;\n              if (href.startsWith('https://')) {\n                wx.setClipboardData({\n                  data: href,\n                  success: () => {\n                    wx.showToast({\n                      icon: 'none',\n                      title: '链接已复制'\n                    });\n                  }\n                });\n              }\n              break;\n            }\n            default:\n          }\n        }\n\t\t\t}\n    });\n    this.setData({\n      nodes\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/repository/repository.json",
    "content": "{\n  \"navigationBarTitleText\": \"\",\n  \"usingComponents\": {\n    \"towxml\": \"/components/towxml/towxml\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/repository/repository.wxml",
    "content": "<view class=\"container\">\n  <towxml nodes=\"{{nodes}}\" />\n</view>"
  },
  {
    "path": "miniprogram/packages/github/pages/repository/repository.wxss",
    "content": ""
  },
  {
    "path": "miniprogram/packages/github/pages/search/search.js",
    "content": "import { searchRepositories } from '../../../../apis/github';\n\nPage({\n  data: {\n    keyword: '',\n    result: [],\n    _page: 1,\n    _perPage: 20,\n    hasMore: true,\n    loading: false\n  },\n\n  onReachBottom () {\n    const { loading, hasMore } = this.data;\n    if (!loading && hasMore) {\n      this.search();\n    }\n  },\n\n  async search () {\n    const { keyword } = this.data;\n    if (!keyword) return;\n    wx.showNavigationBarLoading();\n    this.setData({ loading: true });\n    const { result, _page, _perPage } = this.data;\n    const ret = await searchRepositories({\n      q: keyword,\n      page: _page,\n      per_page: _perPage\n    });\n    const items = ret.items;\n    if (_page === 1) {\n      wx.pageScrollTo({ scrollTop: 0 });\n    }\n    this.setData({\n      result: _page === 1 ? items : [...result, ...items],\n      hasMore: items.length >= _perPage,\n      loading: false\n    });\n    this.data._page += 1;\n    wx.hideNavigationBarLoading();\n  },\n\n  handleSearch (e) {\n    this.data._page = 1;\n    this.search();\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/search/search.json",
    "content": "{\n  \"navigationBarTitleText\": \"搜索\",\n  \"usingComponents\": {\n    \"repo\": \"../../components/repo-item/repo-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/search/search.wxml",
    "content": "<import src='/templates/loading/loading' />\n\n<view class=\"container\">\n  <view class=\"search-bar\">\n    <input class=\"search-bar__input\" placeholder=\"Search GitHub\"\n      name=\"keyword\"\n      confirm-type=\"search\"\n      model:value=\"{{keyword}}\"\n      bindconfirm=\"handleSearch\"\n    />\n    <button class=\"button-nostyle btn-opacity search-bar__btn\" bindtap=\"handleSearch\">Search</button>\n  </view>\n  <view>\n    <block wx:for=\"{{result}}\" wx:key=\"id\">\n      <view class=\"repo\">\n        <repo repo=\"{{item}}\" />\n      </view>\n    </block>\n  </view>\n  <template is='loading-more' wx:if=\"{{loading}}\" />\n</view>\n"
  },
  {
    "path": "miniprogram/packages/github/pages/search/search.wxss",
    "content": ".search-bar {\n  position: sticky;\n  top: 0;\n  left: 0;\n  right: 0;\n  background-color: #fff;\n  display: flex;\n  align-items: stretch;\n  padding: 20rpx 30rpx;\n}\n.search-bar__input {\n  flex: 1;\n  background-color: #eee;\n  border-radius: 8rpx;\n  font-size: 28rpx;\n  padding: 10rpx 18rpx;\n}\n.search-bar__btn {\n  margin-left: 20rpx;\n  background-color: var(--color-primary);\n  font-size: 26rpx;\n  padding: .3em .5em;\n  border-radius: 8rpx;\n  display: inline-flex;\n  align-items: center;\n}\n\n.repo {\n  position: relative;\n}\n.repo::after {\n  content: \"\";\n  position: absolute;\n  z-index: 1;\n  bottom: 0;\n  left: 30rpx;\n  right: 0;\n  height: 1px;\n  background-color: #B7B7B9;\n  transform-origin: 0 100%;\n  transform: scaleY(0.5) translateY(50%);\n}\n.repo:last-child::after {\n  content: none;\n}\n"
  },
  {
    "path": "miniprogram/packages/github/pages/starred/starred.js",
    "content": "import * as GitHubApis from '../../../../apis/github';\n\nPage({\n  options: {\n    pureDataPattern: /^_/\n  },\n\n  data: {\n    list: [],\n    _page: 1,\n    loading: false,\n    hasMore: true\n  },\n\n  onLoad () {\n    this.getStarredList();\n  },\n\n  onReachBottom () {\n    this.getStarredList();\n  },\n\n  async getStarredList () {\n    wx.showNavigationBarLoading();\n    this.setData({ loading: true });\n    const perPage = 15;\n    const { _page, list } = this.data;\n    const resp = await GitHubApis.getStarredList({\n      sort: 'created',\n      direction: 'desc',\n      per_page: perPage,\n      page: _page\n    });\n    this.setData({\n      list: _page === 1 ? resp : [...list, ...resp],\n      _page: _page + 1,\n      hasMore: (resp || []).length >= perPage,\n      loading: false\n    });\n    wx.hideNavigationBarLoading();\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/starred/starred.json",
    "content": "{\n  \"navigationBarTitleText\": \"Starred\",\n  \"usingComponents\": {\n    \"repo-item\": \"../../components/repo-item/repo-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/starred/starred.wxml",
    "content": "<view class=\"container\">\n  <block wx:for=\"{{list}}\" wx:key=\"index\">\n    <repo-item repo=\"{{item}}\" />\n  </block>\n</view>"
  },
  {
    "path": "miniprogram/packages/github/pages/starred/starred.wxss",
    "content": ".repo-item {\n  position: relative;\n}\n\n.repo-item::after {\n  content: \"\";\n  position: absolute;\n  bottom: 0;\n  left: 20rpx;\n  right: 0;\n  height: 1px;\n  background-color: #B7B7B9;\n  transform: scaleY(0.5) translateY(50%);\n  transform-origin: 0 50%;\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/trending/trending.js",
    "content": "import wxCloud from '../../../../utils/wxCloud';\n\nPage({\n  data: {\n    spokenLanguages: [\n      { title: 'Any', value: '' },\n      { title: 'Chinese', value: 'zh' },\n      { title: 'English', value: 'en' }\n    ],\n    spokenLanguageIndex: -1,\n    languages: [\n      { title: 'Any', value: '' },\n      { title: 'JavaScript', value: 'javascript' },\n      { title: 'Python', value: 'python' }\n    ],\n    languageIndex: -1,\n    language: '',\n    dateRanges: [\n      { title: 'Today', value: 'daily' },\n      { title: 'This week', value: 'weekly' },\n      { title: 'This month', value: 'monthly' }\n    ],\n    dateRangeIndex: 0,\n    list: [],\n    loading: false,\n    sticky: false\n  },\n\n  onLoad () {\n    // this.getTrendingList();\n  },\n\n  onPageScroll (e) {\n    const { scrollTop } = e;\n    if (scrollTop < this.scrollTop && !this.data.sticky) {\n      this.setData({\n        sticky: true\n      });\n    } else if (scrollTop > this.scrollTop && this.data.sticky) {\n      this.setData({\n        sticky: false\n      });\n    }\n    this.scrollTop = scrollTop;\n  },\n\n  async getTrendingList () {\n    const {\n      languages, languageIndex, language,\n      dateRanges, dateRangeIndex,\n      spokenLanguages, spokenLanguageIndex\n    } = this.data;\n    wx.showNavigationBarLoading();\n    this.setData({ loading: true });\n    try {\n      const res = await wxCloud('trending', {\n        language: language || languages[languageIndex]?.value,\n        since: dateRanges[dateRangeIndex]?.value,\n        spoken_language_code: spokenLanguages[spokenLanguageIndex]?.value\n      });\n      wx.pageScrollTo({ scrollTop: 0 });\n      this.setData({\n        list: res,\n        loading: false\n      });\n    } catch (e) {\n      this.setData({\n        loading: false\n      });\n    }\n    wx.hideNavigationBarLoading();\n  },\n\n  handlePickerChange (e) {\n    const { name } = e.currentTarget.dataset;\n    const { value } = e.detail;\n    switch (name) {\n      case 'spokenLanguage':\n        this.setData(\n          { spokenLanguageIndex: value },\n          () => this.getTrendingList()\n        );\n        break;\n      case 'language':\n        this.setData(\n          { languageIndex: value },\n          () => this.getTrendingList()\n        );\n        break;\n      case 'dateRange':\n        this.setData(\n          { dateRangeIndex: value },\n          () => this.getTrendingList()\n        );\n        break;\n      default:\n    }\n  },\n\n  toChooseLanguage (e) {\n    wx.navigateTo({\n      url: '../languages/languages',\n      events: {\n        choose: ({ value }) => {\n          this.setData(\n            { language: value.name },\n            () => this.getTrendingList()\n          );\n        },\n        onChange: ({ stared = [] }) => {\n          const defaultOne = { title: 'Any', value: '' };\n          const staredLanguages = stared.map((item) => ({\n            title: item.name,\n            value: item.name\n          }));\n          this.setData({\n            languages: [defaultOne, ...staredLanguages]\n          });\n        }\n      }\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/github/pages/trending/trending.json",
    "content": "{\n  \"navigationBarTitleText\": \"Trending\",\n  \"usingComponents\": {\n    \"repo\": \"../../components/repo-item/repo-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/github/pages/trending/trending.wxml",
    "content": "<import src='/templates/loading/loading' />\n\n<view class=\"container\">\n  <view class=\"sticky {{sticky && 'show-search'}}\">\n    <navigator url=\"../search/search\">\n      <view class=\"search-bar\">\n        <input class=\"search-bar__input\" placeholder=\"Search GitHub\" disabled />\n      </view>\n    </navigator>\n    <view class=\"filterbar\">\n      <view class=\"btn-opacity\" bindtap=\"toChooseLanguage\">Repositories</view>\n      <view>\n        <picker class=\"inline-picker\" mode=\"selector\"\n          header-text=\"Spoken Language\"\n          range=\"{{spokenLanguages}}\"\n          range-key=\"title\"\n          value=\"{{spokenLanguageIndex > -1 ? spokenLanguageIndex : 0}}\"\n          data-name=\"spokenLanguage\"\n          bindchange=\"handlePickerChange\"\n        >\n          <view class=\"sort btn-opacity\">\n            <text>{{spokenLanguages[spokenLanguageIndex].value && spokenLanguages[spokenLanguageIndex].title || 'Spoken Language'}}</text>\n            <view class=\"arrow-down\" />\n          </view>\n        </picker>\n        <picker class=\"inline-picker\" mode=\"selector\"\n          header-text=\"Language\"\n          range=\"{{languages}}\"\n          range-key=\"title\"\n          value=\"{{languageIndex > -1 ? languageIndex : 0}}\"\n          data-name=\"language\"\n          bindchange=\"handlePickerChange\"\n        >\n          <view class=\"sort btn-opacity\">\n            <text>{{languages[languageIndex].value && languages[languageIndex].title\n              || language\n              || 'Language'}}</text>\n            <view class=\"arrow-down\" />\n          </view>\n        </picker>\n        <picker class=\"inline-picker\" mode=\"selector\"\n          header-text=\"Date range\"\n          range=\"{{dateRanges}}\"\n          range-key=\"title\"\n          value=\"{{dateRangeIndex}}\"\n          data-name=\"dateRange\"\n          bindchange=\"handlePickerChange\"\n        >\n          <view class=\"sort btn-opacity\">\n            <text>{{dateRanges[dateRangeIndex].title || 'Today'}}</text>\n            <view class=\"arrow-down\" />\n          </view>\n        </picker>\n      </view>\n    </view>\n  </view>\n  <block wx:for=\"{{list}}\" wx:key=\"index\">\n    <repo repo=\"{{item}}\" />\n  </block>\n  <template is='loading-more' wx:if=\"{{loading}}\" />\n</view>"
  },
  {
    "path": "miniprogram/packages/github/pages/trending/trending.wxss",
    "content": ".sticky {\n  position: sticky;\n  z-index: 10;\n  top: -106rpx; /* (66 + 20 * 2) */\n  left: 0;\n  right: 0;\n  transition: top .3s;\n  background-color: #fff;\n}\n.sticky.show-search {\n  top: 0;\n}\n\n.search-bar {\n  background-color: #fff;\n  padding: 20rpx 30rpx;\n}\n.search-bar__input {\n  flex: 1;\n  background-color: #eee;\n  border-radius: 8rpx;\n  font-size: 28rpx;\n  height: 66rpx;\n  display: flex;\n  align-items: center;\n  padding: 0 18rpx;\n}\n\n.filterbar {\n  width: 100%;\n  height: 3em;\n  background-color: #fff;\n  display: flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #ccc;\n  padding: 0 30rpx;\n  box-sizing: border-box;\n  justify-content: space-between;\n  transition: top .3s;\n}\n\n.inline-picker {\n  display: inline-block;\n}\n.inline-picker + .inline-picker {\n  margin-left: 20rpx;\n}\n\n.sort {\n  display: inline-flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #ccc;\n  line-height: 32rpx;\n  box-sizing: content-box;\n  border: 2rpx solid #ccc;\n  border-radius: 18rpx;\n  padding: 0 10rpx;\n}\n\n.sort .arrow-down {\n  margin-left: 8rpx;\n  width: 11rpx;\n  height: 11rpx;\n  border-color: #ccc;\n}\n\n.repo-item {\n  position: relative;\n}\n\n.repo-item::after {\n  content: \"\";\n  position: absolute;\n  bottom: 0;\n  left: 20rpx;\n  right: 0;\n  height: 1px;\n  background-color: #B7B7B9;\n  transform: scaleY(0.5) translateY(50%);\n  transform-origin: 0 50%;\n}"
  },
  {
    "path": "miniprogram/packages/movie/components/comment-item/comment-item.js",
    "content": "Component({\n  properties: {\n    avatar: { type: String, value: '' },\n    nickname: { type: String, value: '' },\n    rating: { type: Number, value: 0 },\n    time: { type: String, value: '' },\n    content: { type: String, value: '' },\n  },\n  data: {\n    expanded: false\n  },\n  methods: {\n    expand() {\n      this.setData({ expanded: true })\n    },\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/movie/components/comment-item/comment-item.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/movie/components/comment-item/comment-item.wxml",
    "content": "<import src='/templates/rating/rating' />\n\n<view class='item-comment'>\n  <image class='user-header' src='{{avatar}}' />\n  <view class='comment-right'>\n    <view class='name-rating'>\n      <text class='username'>{{nickname}}</text>\n      <template wx:if=\"{{rating}}\" is='rating' data='{{rating: rating, max: 10}}' />\n    </view>\n    <text class='date'>{{time}}</text>\n    <text\n      class='comment-content {{expanded ? \"comment-content--full\" : \"\"}}'\n      bind:tap='expand'\n    >{{content}}</text>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/movie/components/comment-item/comment-item.wxss",
    "content": ".comment-content.comment-content--full {\n  display: block;\n}\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/cards/card.js",
    "content": "// 每日卡片\nimport { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../../store/index';\nimport { $markShare } from '../../../../templates/index';\nimport wxCloud from '../../../../utils/wxCloud';\nimport { apiGetCards } from '../../../../apis/vercel';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    cards: [{}],\n    current: 0,\n    userInfo: null,\n    visible: false,\n    painterData: null,\n    shareCardImg: ''\n  },\n\n  storeBindings: {\n    store,\n    fields: {\n      user: () => store.user\n    }\n  },\n\n  /**\n   * @param {object} options\n   * @param {string} [options._id]\n   */\n  onLoad(options) {\n    if (options._id) {\n      this.getCard(options._id);\n    } else {\n      this.getCards();\n    }\n  },\n\n  handleShareTap (e) {\n    this.setShareMenu();\n  },\n\n  setShareMenu () {\n    this.showShareMenu();\n    this.setCanvasData();\n  },\n\n  /** 获取卡片 */\n  async getCards () {\n    const cards = await apiGetCards();\n    this.setData({ cards });\n  },\n\n  async getCard(_id) {\n    const res = await wxCloud('getCard', { _id });\n    this.setData({ cards: [res] });\n  },\n\n  /** 用户点击右上角分享 */\n  onShareAppMessage () {\n    const { cards, current } = this.data\n    return {\n      title: cards[current].quote,\n      path: `/packages/movie/pages/cards/card?current=${current}`,\n      imageUrl: cards[current].image,\n    }\n  },\n\n  /** 切换卡片 */\n  onChange (event) {\n    this.setData({\n      current: event.detail.current,\n    })\n  },\n\n  setCanvasData () {\n    const { cards, current } = this.data;\n    const currentCard = cards[current];\n    this.setData({\n      painterData: {\n        width: '675rpx',\n        height: '1000rpx',\n        views: [\n          {\n            type: 'image',\n            id: 'img-head',\n            url: currentCard.image.replace(/\\.webp$/, '.jpg'),\n            css: {\n              top: '0rpx',\n              left: '0rpx',\n              width: '675rpx',\n              // height: 'auto',\n              // maxHeight: '510rpx',\n              height: '510rpx'\n            }\n          },\n          {\n            type: 'text',\n            id: 'text-word',\n            text: currentCard.content,\n            css: {\n              top: ['24rpx', 'img-head', 1],\n              left: '24rpx',\n              width: '627rpx',\n              fontSize: '28rpx',\n              lineHeight: '44.8rpx'\n            }\n          },\n          {\n            type: 'text',\n            text: `——${currentCard.source}`,\n            css: {\n              top: ['50rpx', 'text-word', 1],\n              left: '24rpx',\n              right: '24rpx',\n              fontSize: '28rpx',\n              textALign: 'right'\n            }\n          },\n          ...(store.user.info.avatar\n            ? [{\n              type: 'image',\n              id: 'img-avatar',\n              url: store.user.info.avatar,\n              css: {\n                left: '24rpx',\n                bottom: '30rpx',\n                width: '30rpx',\n                height: '30rpx',\n                borderRadius: '30rpx'\n              }\n            }]\n            : []\n          ),\n          ...(store.user.info.name\n            ? [{\n              type: 'text',\n              text: store.user.info.name,\n              css: {\n                left: ['12rpx', 'img-avatar', 1],\n                top: ['0rpx', 'img-avatar', 0],\n                fontSize: '22rpx',\n                lineHeight: '30rpx',\n                color: '#999'\n              }\n            }]\n            : []\n          ),\n          {\n            type: 'image',\n            url: '/assets/images/iMark.jpg',\n            css: {\n              right: '30rpx',\n              bottom: '30rpx',\n              width: '100rpx',\n              height: '100rpx',\n              borderRadius: '50rpx'\n            }\n          }\n        ]\n      }\n    });\n  },\n\n  /** 分享 */\n  showShareMenu (e) {\n    this.setData({\n      visible: true\n    });\n    $markShare.show({\n      titleText: '',\n      buttons: [\n        {\n          key: 'forward',\n          iconPath: '/assets/images/weixin_icon.png',\n          title: '微信好友',\n          openType: 'share'\n        },\n        {\n          key: 'moment',\n          iconPath: '/assets/images/weixin_circle_icon.png',\n          title: '微信朋友圈'\n        },\n        {\n          key: 'save',\n          iconPath: '/assets/images/save_pic_icon.png',\n          title: '保存图片'\n        },\n        {\n          key: 'make',\n          iconPath: '/assets/images/card_icon_made.svg',\n          title: '制作卡片'\n        }\n      ],\n      buttonClicked: (index, item) => {\n        switch (item.key) {\n          case 'forward': break;\n          case 'moment':\n          case 'save':\n            this.saveCardImg();\n            break;\n          default:\n            wx.showModal({\n              content: '正在开发中...',\n              showCancel: false\n            });\n        }\n        return true\n      },\n      cancel: () => {\n        this.setData({\n          visible: false,\n          shareCardImg: ''\n        });\n      }\n    })\n  },\n\n  /**\n   * 喜欢/取消喜欢\n   * @param {WechatMiniprogram.BaseEvent<,{ id: string }>} e\n   */\n  async favOrCancel (e) {\n    const { id } = e.currentTarget.dataset;\n    await wxCloud('favCard', { id });\n    const { cards, current } = this.data;\n    const checked = !cards[current].like_state;\n    cards[current].like_state = Number(checked);\n    cards[current].like_count = checked ? ++cards[current].like_count : --cards[current].like_count;\n    this.setData({ cards });\n  },\n\n  onPaintSuccess (e) {\n    this.setData({\n      shareCardImg: e.detail.path\n    });\n  },\n\n  saveCardImg () {\n    const { shareCardImg } = this.data;\n    const save = () => {\n      wx.saveImageToPhotosAlbum({\n        filePath: shareCardImg,\n        success: () => {\n          wx.showToast({\n            title: '保存成功'\n          });\n          wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n        }\n      });\n    };\n    wx.getSetting({\n      success: ({ authSetting }) => {\n        if (Object.prototype.hasOwnProperty.call(authSetting, 'scope.writePhotosAlbum')) {\n          if (authSetting['scope.writePhotosAlbum']) {\n            save();\n          } else {\n            wx.showModal({\n              title: '提示',\n              content: '需要授权才能保存图片',\n              cancelText: '放弃',\n              confirmText: '去授权',\n              success: ({ confirm }) => {\n                if (confirm) {\n                  wx.openSetting({\n                    withSubscriptions: true,\n                  });\n                } else {\n                  this.setData({\n                    visible: false\n                  });\n                }\n              }\n            });\n          }\n        } else {\n          save();\n        }\n      }\n    })\n  },\n})\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/cards/card.json",
    "content": "{\n  \"backgroundColor\": \"#f4f4f4\",\n  \"navigationBarTitleText\": \"每日卡片\",\n  \"disableScroll\": true,\n  \"usingComponents\": {\n    \"comp-btnFav\": \"/components/btn-fav/FavButton\",\n    \"painter\": \"/components/painter/painter\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/cards/card.wxml",
    "content": "<import src='/templates/share/share.wxml' />\n\n<template is='com-share' data='{{...$mark.share}}'/>\n\n<view class=\"container\">\n<swiper\n  bindchange='onChange'>\n  <block wx:for='{{cards}}' wx:key='date'>\n    <swiper-item>\n      <navigator class='card {{current === index && \"current\"}} {{!item.movie_id && \"disabled\"}}'\n        hover-class='none'\n        url='/packages/movie/pages/details/details?id={{item.movie_id}}'\n      >\n        <view class='card-body'>\n          <image class='card-img'\n          src='{{item.image}}'\n          mode='aspectFill'>\n          </image>\n          <view class='card-text'>\n            <text wx:if='{{item.content}}'>{{item.content}}\\n\\n</text>\n            <text wx:else class='place-text'></text>\n            <view class='source'>\n              <text  wx:if='{{item.source}}'>——{{item.source}}</text>\n              <text wx:else class='place-source'></text>\n            </view>\n          </view>\n          <view class='card-footer'>\n            <view class='flex-center-v'></view>\n            <view class='flex-center-v actions'>\n              <!-- // TODO 完成卡片收藏 -->\n              <!-- <view class='flex-center-v actions-item'\n                data-id=\"{{cards[current]._id}}\"\n                catchtap=\"favOrCancel\"\n              >\n                <view style=\"font-size:18rpx;\">\n                  <comp-btnFav checked='{{!!(cards[current].like_state)}}' />\n                </view>\n                <text class='text'>{{cards[current].like_count || 0}}</text>\n              </view> -->\n              <button class='button-nostyle flex-center-v actions-item'\n                catchtap=\"handleShareTap\"\n              >\n                <image class='icon' src='/assets/images/icon-share.png' mode='aspectFit' />\n              </button>\n            </view>\n          </view>\n        </view>\n      </navigator>\n    </swiper-item>\n  </block>\n</swiper>\n  <view class=\"share-card\">\n    <painter class=\"share-card__canvas\"\n      id=\"shareCanvas\"\n      palette=\"{{painterData}}\"\n      bind:imgOK=\"onPaintSuccess\"\n    />\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/movie/pages/cards/card.wxss",
    "content": "/* pages/card/card.wxss */\n@import '/templates/share/share';\n\npage {\n  background-color: #ffffff;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n}\n\nswiper {\n  flex: 1;\n}\nswiper-item {\n  display: flex;\n  flex-direction: column;\n  width: 90% !important;\n  left: 5%;\n  overflow: visible;\n}\n.card {\n  flex: 1;\n  margin: 80rpx 0 126rpx;\n  border-radius: 5px;\n  overflow: hidden;\n  box-shadow: 3px 3px 3px #bbb;\n  background-color: #fff;\n  transform: scaleX(0.95) scaleY(0.9);\n  opacity: 0.8;\n  transition: all 0.2s ease-in 0s;\n  position: relative;\n}\n.card.current {\n  transform: none;\n  opacity: 1;\n}\n.card.disabled {\n  pointer-events: none;\n}\n.card .card-body {\n  height: 100%;\n}\n.card .card-img {\n  display: block;\n  width: 100%; /** 750rpx * 0.9 */\n  /** height: 379.375rpx; */ /** 原图尺寸 1080 x 607，750rpx * 0.9 * (607 / 1080) */\n  aspect-ratio: 4 / 3;\n  background-color: #f7f7f7;\n}\n.card .card-text {\n  display: flex;\n  flex-direction: column;\n  padding: 24rpx;\n  font-size: 28rpx;\n}\n.card .card-text .place-text {\n  height: 3em;\n  background-color: #f7f7f7;\n}\n.card .source {\n  text-align: end;\n  min-height: 1em;\n  display: flex;\n  justify-content: flex-end;\n  font-size: 28rpx;\n}\n.card .source .place-source{\n  width: 7em;\n  height: 1em;\n  background-color: #f7f7f7;\n  margin-top: 2em;\n}\n.card .card-footer {\n  position: absolute;\n  bottom: 30rpx;\n  left: 24rpx;\n  right: 24rpx;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n.card .card-footer .actions .icon {\n  width: 36rpx;\n  height: 36rpx;\n}\n.card .card-footer .actions .text {\n  margin-left: 8rpx;\n  min-width: 1em;\n}\n.card .card-footer .actions .actions-item {\n  color: #999;\n  font-size: 26rpx;\n  box-sizing: border-box;\n  padding: 20rpx;\n  margin: -20rpx;\n}\n.card .card-footer .actions .actions-item:not(:first-child) {\n  box-sizing: border-box;\n  padding: 30rpx;\n  margin: -30rpx;\n  margin-left: 30rpx;\n}\n\n.action {\n  padding: 30rpx 60rpx;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n}\n.action .look {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  background-color: #e5e6e7;\n  height: 2em;\n  border-radius: 1em;\n  padding: 0 1em;\n}\n.action .icon {\n  width: 1em;\n  height: 1em;\n  margin-right: 0.5em;\n}\n.action .action-right {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.action .count {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  font-size: 0.7rem;\n  color: #818c91;\n}\n.action .count:not(:first-child) {\n  margin-left: 50rpx;\n}\n.action .icon-big {\n  width: 2em;\n  height: 2em;\n}\n\n.share-card {\n  position: absolute;\n  top: 80rpx;\n  left: 50%;\n  width: 675rpx;\n  transform: translate3d(-50%,0,0);\n}\n\n.share-card__canvas {\n  position: fixed;\n  top: -9999rpx;\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/details/details.js",
    "content": "// @ts-check\nimport { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../../store/index';\nimport {\n  getDetail,\n  getInterests,\n  getPhotos,\n  markMovie,\n  unmarkMovie,\n  doingMovie,\n  getCelebrities,\n} from '../../../../apis/douban.js';\nimport Comment from '../../../../models/Comment'\nimport { apiSubmitPages } from '../../../../apis/vercel';\nimport { emitter, events } from '../../../../utils/events';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    id: '',\n    details: /** @type {DouBan.MovieDetail} */ ({}),\n    /** @type {DouBan.Actor[]} */\n    directorList: [],\n    /** @type {DouBan.Actor[]} */\n    actorList: [],\n    crewCount: 0,\n    /** @type {{ image: string; url: string }[]} */\n    trailers: [],  // 预告片\n    pubdates: '',\n    comments_count: 0,\n    /** @type {Comment[]} */\n    comments: [],\n    /** @type {DouBan.Photo[]} */\n    photos: [],\n    loaded: false,\n    isFold: true,\n    /** @type {{ id: number; title: string; cover: string; count: number; }[]} */\n    movielistList: []\n  },\n\n  storeBindings: {\n    store,\n    fields: ['app']\n  },\n\n  /**\n   * @param {object} options\n   * @param {string} options.id\n   * @param {string} [options.title]\n   * @param {'movie'|'tv'} [options.type = 'movie']\n   */\n  onLoad (options) {\n    options = Object.assign({}, { type: 'movie' }, options);\n    if (options.title) {\n      const title = decodeURIComponent(options.title)\n      wx.setNavigationBarTitle({ title })\n    }\n    this.setData({\n      id: options.id,\n      type: options.type\n    })\n\n    this.getDetails(options.id, options.type);\n    this.getCelebrities(options.id, options.type);\n    this.getComments(options.id, options.type);\n    this.getPhotos(options.id, options.type);\n  },\n  \n  /**\n   * 获取影视详情（豆瓣）\n   * @param {string} id\n   * @param {'movie'|'tv'} [type = 'movie']\n   */\n  async getDetails (id, type = 'movie') {\n    wx.showLoading({\n      title: 'loading...',\n    });\n\n    const res = await getDetail({ id, type });\n    const casts = res.actors.map(item => item.name);\n    const [trailer] = res.trailers || [];\n    const trailers = trailer && [{\n      image: trailer.cover_url,\n      url: trailer.video_url\n    }];\n    wx.hideLoading();\n    wx.setNavigationBarTitle({\n      title: res.title\n    });\n    this.setData({\n      details: res,\n      casts: casts.join('/'),\n      loaded: true,\n      comments_count: res.comment_count,\n      trailers\n    });\n    this.submitSearchPage();\n  },\n\n  /**\n   * 获取影人列表\n   * @param {string} id\n   * @param {'movie'|'tv'} [type = 'movie']\n   */\n  async getCelebrities (id, type = 'movie') {\n    const { directors, actors, total } = await getCelebrities({ id, type });\n    this.setData({\n      directorList: directors,\n      actorList: actors,\n      crewCount: total,\n    });\n  },\n\n  /**\n   * 获取影视短评\n   * @param {string} id\n   * @param {'movie'|'tv'} [type = 'movie']\n   */\n  async getComments (id, type = 'movie') {\n    const res = await getInterests({\n      id,\n      start: 0,\n      count: 10,\n      type\n    });\n    const comments = res.interests.map(item => Comment.fromDouban(item));\n    this.setData({\n      comments\n    });\n  },\n\n  /** 想看/已看/在看 */\n  async handleAction (e) {\n    if (!store.douban.accessToken) {\n      // case 未登录豆瓣\n      wx.navigateTo({\n        url: '/packages/douban/pages/login-phone/login-phone'\n      });\n      return;\n    }\n\n    /** @type {{ action: DouBan.InterestStatus }} */\n    const { action } = e.currentTarget.dataset;\n    const { id, details } = this.data;\n\n    if (action === 'done') {\n      wx.navigateTo({\n        url: `../mark/mark?movieID=${id}&type=${details.type}`,\n        events: {\n          change: ({ status, rating, create_time }) => {\n            this.setData({\n              'details.interest.status': status,\n              'details.interest.rating': rating,\n              'details.interest.create_time': create_time\n            });\n            emitter.emit(events.TAB_MOVIES_UPDATE, { status });\n            wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n          }\n        }\n      });\n      return;\n    }\n\n    const { interest } = details;\n    if (interest && action === interest.status) {\n      // 取消标记\n      wx.showModal({\n        title: '提醒',\n        content: '确认删除标记吗？',\n        confirmText: '删除',\n        cancelText: '再想想',\n        success: async ({ confirm }) => {\n          if (confirm) {\n            wx.showLoading({ title: '' });\n            const res = await unmarkMovie({ movieID: id, type: details.type });\n            wx.hideLoading();\n            this.setData({\n              'details.interest.status': res.status\n            });\n            emitter.emit(events.TAB_MOVIES_UPDATE, { status: res.status });\n            wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n          }\n        }\n      });\n      return;\n    }\n\n    wx.showLoading({ title: '' });\n    let res;\n    switch (action) {\n      case 'mark':\n        res = await markMovie({ movieID: id, type: details.type });\n        break;\n      case 'doing':\n        res = await doingMovie({ movieID: id, type: details.type });\n        break;\n      default:\n    }\n    wx.hideLoading();\n    this.setData({\n      'details.interest.status': res.status\n    });\n    emitter.emit(events.TAB_MOVIES_UPDATE, { status: res.status });\n    wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n  },\n\n  /**\n   * 剧照\n   * @param {'movie'|'tv'} [type = 'movie']\n   */\n  async getPhotos (id, type = 'movie') {\n    const res = await getPhotos({\n      id,\n      start: 0,\n      count: 12,\n      type\n    });\n    this.setData({\n      photos: res.photos\n    });\n  },\n\n  /**\n   * 折叠开关\n   */\n  foldToggle() {\n    const {isFold} = this.data;\n    if (!isFold) return;\n\n    this.setData({\n      isFold: !isFold\n    })\n  },\n\n  /**\n   * 剧照预览\n   */\n  onImagePre(e) {\n    const { img } = e.currentTarget.dataset;\n    const { photos } = this.data;\n    const urls = photos.map(item => item.image.large.url)\n    wx.previewImage({\n      current: img.large.url,\n      urls\n    })\n  },\n\n  handlePreviewImage (e) {\n    const { img } = e.currentTarget.dataset;\n    if (!img) return;\n    wx.previewImage({\n      current: img,\n      urls: [img]\n    });\n  },\n\n  /** 复制页面路径 */\n  handleCopyPath () {\n    const pages = getCurrentPages();\n    const { route, options } = pages[pages.length - 1];\n    const query = Object.keys(options).map((key) => `${key}=${options[key]}`).join('&');\n    wx.setClipboardData({\n      data: `${route}?${query}`,\n      success: () => {\n        wx.showToast({\n          icon: 'none',\n          title: '复制成功'\n        });\n      }\n    });\n  },\n\n  /** 显示影单弹窗 */\n  showMovieListPopup() {\n    this.getMovielistList();\n    this.selectComponent('#movielist').show();\n  },\n\n  createList() {\n    wx.showModal({\n      content: '正在开发中...',\n      showCancel: false\n    });\n  },\n\n  /** 加入影单 */\n  addToMovieList() {\n    wx.showToast({\n      icon: 'none',\n      title: '成功加入影单',\n    })\n    this.selectComponent('#movielist').hide();\n  },\n\n  onShareAppMessage() {\n    const { details } = this.data\n    return {\n      title: details.title,\n    }\n  },\n\n  /** 影单列表 */\n  async getMovielistList () {\n    // const list = Array(6).fill({}).map((item, index) => ({\n    //   id: index,\n    //   title: '阳光掉进回忆里',\n    //   cover: 'https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1756402567.jpg',\n    //   count: 10\n    // }));\n    // this.setData({\n    //   movielistList: list\n    // });\n  },\n\n  handleOnlineTap () {\n    this.selectComponent('#onlineSource').show();\n  },\n\n  /** 复制播放地址 */\n  handleSourceCopy (e) {\n    const {url} = e.currentTarget.dataset;\n    wx.setClipboardData({\n      data: url,\n      success: () => {\n        wx.showToast({\n          icon: 'none',\n          title: '已复制链接'\n        });\n        wx.showModal({\n          content: `播放地址已复制到剪贴板 \\n 前往浏览器粘贴访问`,\n          showCancel: false\n        })\n      }\n    })\n  },\n\n  submitSearchPage () {\n    const { details } = this.data;\n    const pages = getCurrentPages();\n    console.log({\n      path: pages[pages.length - 1].route,\n      query: `id=${details.id}&title=${details.title}`\n    });\n    apiSubmitPages({\n      pages: [\n        {\n          path: pages[pages.length - 1].route,\n          query: `id=${details.id}&title=${details.title}`\n        }\n      ]\n    });\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/details/details.json",
    "content": "{\n  \"navigationBarTitleText\": \"详情\",\n  \"disableScroll\": false,\n  \"usingComponents\": {\n    \"cover-page\": \"/components/cover-page/cover-page\",\n    \"comment-item\": \"../../components/comment-item/comment-item\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/details/details.wxml",
    "content": "<import src='/templates/rating/rating' />\n<import src='/templates/casts/casts' />\n<wxs src='../../../../utils/WxUtil.wxs' module='WxUtil' />\n<wxs src=\"./details.wxs\" module=\"wxs\" />\n\n<view wx:if='{{loaded}}' class='container page-detail'>\n    <view class='block'>\n      <view class='clip-img'\n        data-img=\"{{details.cover_url}}\"\n        bindtap=\"handlePreviewImage\"\n      >\n        <image src='{{details.cover_url}}' mode='widthFix' />\n      </view>\n      <view class='brief'>\n        <image class='img-mv' src='{{details.cover_url}}' mode='widthFix' />\n        <view class='.brief-info'>\n          <view wx:if='{{details.title}}' class=\"relative text-32 whitespace-nowrap\">\n            <view class='title'>{{details.title}}<text wx:if='{{details.original_title && details.original_title !== details.title}}'>（{{details.original_title}}）</text></view>\n            <text class='absolute top-0 opacity-0' user-select>{{details.title}}<text wx:if='{{details.original_title && details.original_title !== details.title}}'>（{{details.original_title}}）</text></text>\n          </view>\n          <!-- 概述 -->\n          <view class='brief-time'>\n            <text>{{details.pubdate}} / {{details.countries[0]}} / {{WxUtil.arr2str(details.genres,\" \")}} / {{details.directors[0].name}}(导演) / {{casts}}</text>\n          </view>\n          <view class='rating'>\n            <view>\n              <template is=\"rating\" data=\"{{rating: details.rating.value ,max: details.rating.max}}\" />\n              <text wx:if=\"{{details.rating}}\">{{details.rating.value}}（豆瓣评分）</text>\n            </view>\n          </view>\n          <view class='flex-align-center'>\n            <button class='button-nostyle flex-align-center button' bindtap=\"showMovieListPopup\">\n              <image class='icon' src='/assets/images/icon-addtolist.png' />\n              <text>加入影单</text>\n            </button>\n            <button class='button-nostyle flex-align-center button' form-type='submit' open-type='share'>\n              <image class='icon' src='/assets/images/icon-share.png' />\n              <text>分享</text>\n            </button>\n            <button class='button-nostyle flex-align-center button' bindtap=\"handleCopyPath\">\n              <image class='icon' src='/assets/images/icon-copy.svg' />\n              <text>路径</text>\n            </button>\n          </view>\n        </view>\n      </view>\n    </view>\n    <view class=\"block actions\" wx:if=\"{{!(details.interest && details.interest.status === 'done')}}\">\n      <view class=\"action {{details.interest.status === 'mark' && 'active'}}\"\n        data-action=\"mark\"\n        bindtap=\"handleAction\"\n      >\n        <image class=\"action__icon\" src=\"../../images/icon-mark.svg\" mode=\"aspectFit\" />\n        <view>想看</view>\n      </view>\n      <view class=\"action {{details.interest.status === 'done' && 'active'}}\"\n        data-action=\"done\"\n        bindtap=\"handleAction\"\n      >\n        <image class=\"action__icon\" src=\"../../images/icon-done.svg\" mode=\"aspectFit\" />\n        <view>已看</view>\n      </view>\n      <view class=\"action {{details.interest.status === 'doing' && 'active'}}\"\n        data-action=\"doing\"\n        bindtap=\"handleAction\"\n      >\n        <image class=\"action__icon\" src=\"../../images/icon-doing.svg\" mode=\"aspectFit\" />\n        <view>在看</view>\n      </view>\n    </view>\n    <view class=\"block watched\" wx:else>\n      <view class=\"watched__title\">已看过</view>\n      <view class=\"watched__rating\">\n        <template is=\"rating\" data=\"{{rating: details.interest.rating.value ,max: details.interest.rating.max}}\" />\n      </view>\n      <view class=\"watched__date\">{{wxs.cutDateString(details.interest.create_time)}}</view>\n      <view class=\"watched__icon\" hover-class=\"btn-opacity\"\n        data-action=\"done\"\n        bindtap=\"handleAction\"\n      >\n        <image src=\"../../images/edit.svg\" mode=\"aspectFit\" />\n      </view>\n    </view>\n    <!-- 播放源 -->\n    <view class='block play-source' wx:if='{{app.hasPublished && details.linewatches.length > 0}}'>\n      <view bindtap=\"handleOnlineTap\">\n        <view class='source-container'>\n          <view>\n            <i class=\"fa fa-play-circle\" aria-hidden=\"true\"></i>\n            <text>在线观看</text>\n          </view>\n          <view>\n            <text class='sources'>{{details.linewatches.length}}个播放源</text>\n            <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\n          </view>\n        </view>\n      </view>\n    </view>\n    <!-- 剧情简介 -->\n    <view class='block brief-summary'>\n      <text class='subtitle'>{{details.title}}的剧情简介\\n</text>\n      <view bind:tap=\"foldToggle\">\n        <text class='summary {{isFold && \"isFold\"}}'>{{details.intro}}</text>\n        <view wx:if='{{isFold}}' class='fold {{!isFold && \"active\"}}'>展开</view>\n      </view>\n    </view>\n    <!-- 影人 -->\n    <view wx:if=\"{{crewCount}}\" class='block casts'>\n      <text class='subtitle'>影人</text>\n      <scroll-view scroll-x>\n        <!-- <block wx:for='{{details.directors}}' wx:key='id'>\n          <template is='item-casts' data='{{item,isDirec:true}}' />\n        </block>\n        <block wx:for='{{details.casts}}' wx:key='id'>\n          <template is='item-casts' data='{{item,isDirec:false}}' />\n        </block> -->\n        <block wx:for='{{directorList}}' wx:key='id'>\n          <template is='item-cast' data='{{item}}' />\n        </block>\n        <block wx:for=\"{{actorList}}\" wx:key=\"id\">\n          <template is='item-cast' data='{{item}}' />\n        </block>\n        <template is='item-casts-all' data=\"{{crewCount}}\" />\n      </scroll-view>\n    </view>\n    <!-- 预告及剧照 -->\n    <view class='block photos' wx:if=\"{{trailers.length || photos.length}}\">\n      <navigator class='subtitle' hover-class=\"btn-opacity\"\n        url=\"../photos/photos?id={{id}}&title={{details.title}}&type={{details.type}}\"\n      >\n        <view>预告片 / 剧照</view>\n        <view>\n          <text>全部</text>\n          <view class=\"arrow-right\"></view>\n        </view>\n      </navigator>\n      <scroll-view scroll-x>\n        <navigator class=\"trailer\" wx:if=\"{{app.hasPublished && trailers && trailers.length}}\"\n          url=\"../trailers/trailers?id={{id}}&resource={{trailers[0].url}}&trailer={{trailers[0].id}}\"\n        >\n          <image class=\"image\" src=\"{{trailers[0].image}}\" />\n          <view class=\"front\">\n            <view class=\"icon\"><image src=\"/assets/images/white_play_icon.png\" mode=\"widthFix\" /></view>\n          </view>\n        </navigator>\n        <block wx:for='{{photos}}' wx:key='id'>\n          <view class='trailer' style=\"width:auto\" data-img='{{item.image}}' bindtap='onImagePre'>\n            <image class='image' style=\"height:240rpx;width:{{240 * (item.image.normal.width / item.image.normal.height)}}rpx\" src='{{item.image.normal.url}}' />\n          </view>\n        </block>\n      </scroll-view>\n    </view>\n    <view class=\"ad-container\">\n      <view class=\"ad-wrapper\">\n        <ad unit-id=\"adunit-e4aa5a1a9c05d2ee\"></ad>\n      </view>\n    </view>\n    <!-- 短评 -->\n    <view class='block comments'>\n      <text class='subtitle'>短评({{comments_count}})</text>\n      <block wx:for='{{comments}}' wx:key='id'>\n        <comment-item\n          avatar='{{item.avatar}}'\n          nickname='{{item.nickname}}'\n          rating='{{item.rating}}'\n          time='{{item.time}}'\n          content='{{item.content}}'\n        />\n      </block>\n    </view>\n    <cover-page id=\"movielist\" title=\"加入影单\">\n      <view>\n        <view class=\"movielist-create\" bindtap=\"createList\">\n          <image class=\"movielist-create__img\" src=\"../../images/img-add.png\" mode=\"aspectFit\" />\n          <view class=\"movielist-create__text\">新建影单</view>\n        </view>\n        <block wx:for=\"{{movielistList}}\" wx:key=\"id\">\n          <view class=\"movielist-item\" bindtap=\"addToMovieList\">\n            <image class=\"movielist-item__img\" src=\"{{item.cover}}\" mode=\"aspectFit\" />\n            <view class=\"movielist-item__info\">\n              <view class=\"movielist-item__name\">{{item.title}}</view>\n              <view class=\"movielist-item__count\">{{item.count}}部门</view>\n            </view>\n          </view>\n        </block>\n      </view>\n    </cover-page>\n    <!-- 播放源 -->\n    <cover-page id=\"onlineSource\" title=\"在线观看地址\">\n      <view class=\"online-source\">\n        <view class=\"flex align-center justify-between source-item\" wx:for=\"{{details.linewatches}}\" wx:key=\"index\"\n          data-url=\"{{item.url}}\"\n          bindtap=\"handleSourceCopy\"\n        >\n          <view class=\"flex align-center\">\n            <image class=\"source-item__logo\" src=\"{{item.source.pic}}\" mode=\"aspectFill\" />\n            <view class=\"source-item__name\">{{item.source.name}}</view>\n          </view>\n          <view class=\"flex align-center\">\n            <view wx:if=\"{{item.free}}\" class=\"source-item__charge\">免费观看</view>\n            <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\n          </view>\n        </view>\n      </view>\n      <view class=\"iphonex-bottom-holder\"><!-- iPhone X 下巴占位 --></view>\n    </cover-page>\n</view>"
  },
  {
    "path": "miniprogram/packages/movie/pages/details/details.wxs",
    "content": "function cutDateString (dateString) {\n  return dateString.substring(0, 10).replace(getRegExp('-', 'g'), '.');\n}\n\nmodule.exports = {\n  cutDateString: cutDateString\n}\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/details/details.wxss",
    "content": "/* pages/movies/movieDetails.wxss */\n@import '/templates/rating/rating';\n@import '/templates/casts/casts';\n\n.relative { position: relative; }\n.absolute { position: absolute; }\n.opacity-0 { color: transparent; }\n.top-0 { top: 0; }\n.text-32 { font-size: 32rpx; }\n.whitespace-nowrap { white-space: nowrap; }\n\nimage {\n  width: 100%;\n  height: 100%;\n}\n\n.container {\n  font-size: 28rpx;\n  background-color: #fff;\n}\n\n.clip-img {\n  height: 850rpx;\n  overflow: hidden;\n  clip-path: polygon(0% 0%, 0% 100%, 100% 80%, 100% 0%);\n  box-shadow: 0 2rpx 10rpx 0rpx rgba(0,0,0,0.7);\n}\n.clip-img > image {\n  display: block;\n}\n\n.block {\n  background: #fff;\n}\n.brief {\n  position: relative;\n  z-index: 2;\n  margin-top: -88rpx;\n  display: flex;\n  align-items: flex-end;\n}\n.brief .img-mv {\n  width: 210rpx;\n  height: 280rpx;\n  margin: 0rpx 30rpx;\n  border-radius: 8rpx;\n  box-shadow: 0px 4px 12px 0px rgba(71,71,71,0.59);\n}\n.brief .brief-info {\n  flex: 1;\n  color: #333;\n  padding-right: 30rpx;\n  overflow: hidden;\n}\n.brief-info .title {\n  color: #333;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.brief-info .brief-time {\n  margin-top: 11rpx;\n  font-size: 22rpx;\n  color: #999;\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  word-break: break-all;\n  text-overflow: ellipsis;\n  -webkit-line-clamp: 2; \n}\n.brief-info .button {\n  font-size: 26rpx;\n  color: #999;\n}\n.brief-info .button + .button {\n  margin-left: 44rpx;\n}\n.brief-info .rating {\n  margin-top: 10rpx;\n}\n.brief-info .rating > view {\n  font-size: 22rpx;\n  color: #999;\n  margin-bottom: 24rpx;\n  display: flex;\n  align-items: center;\n}\n.com-rating .rating-on {\n  color: #ffe200;\n}\n.flex-align-center {\n  display: flex;\n  align-items: center;\n}\n.flex-align-center .icon {\n  width: 32rpx;\n  height: 34rpx;\n  margin-right: 14rpx;\n}\n\n.actions {\n  margin-top: 42rpx;\n  display: flex;\n  align-items: center;\n  justify-content: space-around;\n}\n.action {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 160rpx;\n  height: 60rpx;\n  border-radius: 30rpx;\n  box-sizing: border-box;\n  border: 2rpx solid #474747;\n}\n.action.active {\n  background-color: #FFE200;\n  border: none;\n}\n.action__icon {\n  margin-right: 10rpx;\n  width: 36rpx;\n  height: 36rpx;\n}\n\n.watched {\n  margin: 40rpx 24rpx 0;\n  height: 60rpx;\n  display: flex;\n  align-items: center;\n  background-color: #F6F6F6;\n  border-radius: 4rpx;\n  box-sizing: border-box;\n  padding: 24rpx;\n}\n.watched__title {\n  font-size: 26rpx;\n  color: #999;\n}\n.watched__rating {\n  margin-left: 16rpx;\n  display: flex;\n  align-items: center;\n}\n.watched__rating .com-rating {\n  font-size: 26rpx;\n  line-height: 1;\n  letter-spacing: 8rpx;\n}\n.watched__date {\n  margin-left: 84rpx;\n  font-size: 26rpx;\n  color: #999;\n}\n.watched__icon {\n  margin-left: auto;\n  width: 36rpx;\n  height: 36rpx;\n}\n\n.page-detail .play-source {\n  padding-top: 2em;\n}\n.page-detail .play-source .source-container {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  height: 2.4em;\n  margin-left: 30rpx;\n  padding-right: 30rpx;\n  border-bottom: 1px solid #ddd;\n}\n.page-detail .play-source .source-container .fa-play-circle {\n  color: #9B9B9B;\n  margin-right: .5em;\n}\n.page-detail .play-source .source-container .sources {\n  color: #9E9E9E;\n}\n.page-detail .play-source .source-container .fa-angle-right {\n  color: #CCCCCC;\n  margin-left: .3em;\n  font-size: 1.2em;\n}\n\n.page-detail .brief-summary {\n  padding: 30rpx;\n}\n.subtitle {\n  color: #333;\n  line-height: 2.8em;\n  font-size: 28rpx;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n.summary {\n  font-size: 26rpx;\n  color: #999;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  word-break: break-all;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.summary.isFold {\n  -webkit-line-clamp: 5; \n}\n.fold {\n  color: #999;\n  font-size: 26rpx;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: .3em 0;\n}\n.fold::after {\n  content: ' ';\n  height: .5em;\n  width: .5em;\n  border-right: 1px solid #888;\n  border-bottom: 1px solid #888;\n  border-top: 1px solid transparent;\n  border-left: 1px solid transparent;\n  margin-left: .5em;\n  margin-top: -0.35em;\n  transform: rotate(45deg);\n}\n.fold.active::after {\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid #888;\n  border-left: 1px solid #888;\n  margin-top: 0.35em;\n}\n/* 影人 start */\n.page-detail .casts .subtitle {\n  margin-left: 30rpx;\n}\n.casts>scroll-view {\n  white-space: nowrap;\n}\n.casts>scroll-view .casts-item {\n  margin-right: 15rpx;\n}\n.casts>scroll-view .casts-item:first-child {\n  margin-left: 30rpx;\n}\n.casts>scroll-view .casts-item:last-child {\n  margin-right: 30rpx;\n}\n\n/* 预告片/剧照 */\n.photos .subtitle {\n  margin: 0 30rpx;\n}\n.photos>scroll-view {\n  white-space: nowrap;\n}\n.trailer {\n  width: 400rpx;\n  height: 240rpx;\n  border-radius: 8rpx;\n  overflow: hidden;\n  position: relative;\n  display: inline-block;\n}\n.trailer:first-child {\n  margin-left: 30rpx;\n}\n.trailer:not(:last-child) {\n  margin-right: 20rpx;\n}\n.trailer:last-child {\n  margin-right: 30rpx;\n}\n.front {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  top: 0;\n  left: 0;\n}\n.front>.icon {\n  width: 88rpx;\n  height: 88rpx;\n  display: flex;\n  justify-content: center;\n  align-content: center;\n}\n\n/* 短评 start */\n.page-detail .comments {\n  padding: 30rpx;\n}\n.comments .item-comment {\n  margin-bottom: 1em;\n}\n.item-comment {\n  display: flex;\n  flex-direction: row;\n}\n.item-comment .user-header {\n  width: 75rpx;\n  height: 75rpx;\n  background-color: #f7f7f7;\n  overflow: hidden;\n  border-radius: 50%;\n}\n.item-comment .comment-right {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  margin-left: 30rpx;\n}\n.item-comment .comment-right .name-rating .username{\n  margin-right: 0.2em;\n}\n.item-comment .comment-right .date {\n  color: #bbb;\n  font-size: 0.85em;\n}\n.item-comment .comment-content {\n  overflow: hidden;\n  word-break: break-all;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 6;\n}\n\n.page-detail .more {\n  color: #5D6BEE;\n  margin-left: 30rpx;\n}\n\n#movielist .cover-page__scroll {\n  height: 644rpx;\n  max-height: 60vh;\n  overflow-y: scroll;\n}\n\n.movielist-create {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  background-color: #fff;\n  padding: 24rpx;\n}\n.movielist-create__img {\n  width: 88rpx;\n  height: 88rpx;\n  margin-right: 17rpx;\n}\n.movielist-create__text {\n  color: #999;\n  font-size: 28rpx;\n}\n\n.movielist-item {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  padding: 24rpx;\n}\n.movielist-item__img {\n  width: 88rpx;\n  height: 118rpx;\n  margin-right: 16rpx;\n}\n.movielist-item__info {\n  flex: 1;\n  align-self: stretch;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.movielist-item__name {\n  color: #333;\n  font-size: 28rpx;\n}\n.movielist-item__count {\n  color: #999;\n  font-size: 22rpx;\n  margin-top: 12rpx;\n}\n\n#onlineSource .action-sheet-wrapper,\n#onlineSource .action-sheet__title {\n  background-color: #f7f7f7;\n}\n\n.online-source {\n  min-height: 300rpx;\n}\n\n.source-item {\n  margin: 20rpx 30rpx;\n  height: 120rpx;\n  background-color: #fff;\n  box-sizing: border-box;\n  padding: 20rpx;\n  border-radius: 60rpx;\n  box-shadow: 2rpx 2rpx 20rpx rgba(0,0,0,0.05);\n}\n.source-item__logo {\n  width: 80rpx;\n  height: 80rpx;\n  border-radius: 80rpx;\n  border: 1px solid rgba(0,0,0,0.1);\n}\n.source-item__name {\n  margin-left: 20rpx;\n  font-weight: bold;\n}\n.source-item__charge {\n  color: #666;\n  font-size: 28rpx;\n}\n.source-item .fa-angle-right {\n  margin-left: 20rpx;\n  font-size: 50rpx;\n  color: #666;\n}\n\n.ad-container {\n  margin-block: 10rpx;\n}\n.ad-wrapper {\n  margin: 0 20rpx;\n  border-radius: 12rpx;\n  overflow: hidden;\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/intheaters/in_theaters.js",
    "content": "// pages/intheaters/in_theaters.js\nimport { getShowingMovies, getSoonMovies } from '../../../../apis/douban.js';\n\nlet pageNo1 = 0;\nlet pageNo2 = 0;\n\nPage({\n\n  data: {\n    tabs: ['热映', '待映'],\n    currentNav: 0,\n    loading: true,\n    loadmore1: true,\n    loadmore2: true,\n    movies: [],\n    commingMovies: [],\n  },\n\n  onLoad (options) {\n    this.getInTheater();\n  },\n\n  onUnload () {\n    pageNo1 = 0;\n    pageNo2 = 0;\n  },\n\n  /** 影院热映 */\n  async getInTheater () {\n    const res = await getShowingMovies({\n      start: pageNo1 * 20,\n      count: 20\n    });\n    const items = (res.subject_collection_items || []).map((subject) => ({\n      cover_url: subject.cover.url,\n      ...subject\n    }));\n    this.setData({\n      movies: pageNo1 === 0 ? items : [...this.data.movies, ...items],\n      loadmore1: items.length >= 20,\n      loading1: false\n    });\n  },\n\n  /** Swiper页发生变化 */\n  onSwiperChange (e) {\n    const { current } = e.detail;\n    this.setData({\n      currentNav: current\n    });\n    if (this.data.commingMovies.length <= 0) {\n      this.getComming();\n    }\n  },\n\n  /** 点击改变Swiper */\n  changeSwiper (e) {\n    const { nav } = e.currentTarget.dataset;\n    const { currentNav } = this.data;\n    if (currentNav != nav) {\n      this.setData({\n        currentNav: nav\n      });\n    }\n  },\n\n  /** 进入详情 */\n  toDetail (event) {\n    const { id, title } = event.currentTarget.dataset;\n    wx.navigateTo({\n      url: `/packages/movie/pages/details/details?title=${title}&id=${id}`,\n    })\n  },\n\n  /** 即将上映 */\n  async getComming () {\n    const res = await getSoonMovies({\n      start: pageNo2 * 20,\n      count: 20\n    });\n    const items = (res.subject_collection_items || []).map((subject) => ({\n      cover_url: subject.cover.url,\n      ...subject\n    }));\n    this.setData({\n      commingMovies: pageNo2 === 0 ? items : [...this.data.commingMovies, ...items],\n      loadmore2: items.length >= 20,\n      loading2: false\n    });\n  },\n\n  /**\n   * Scroll触底事件\n   */\n  onScrolTolLower (e) {\n    const { nav } = e.currentTarget.dataset;\n    if (nav == 'comming' && this.data.loadmore2 && !this.data.loading2) {\n      this.setData({ loading2: true });\n      pageNo2++;\n      this.getComming();\n    } else if (nav == 'theater' && this.data.loadmore1 && !this.data.loading1) {\n      this.setData({ loading1: true });\n      pageNo1++;\n      this.getInTheater();\n    }\n  },\n\n  onShareAppMessage () {\n    // enable share\n  }\n})"
  },
  {
    "path": "miniprogram/packages/movie/pages/intheaters/in_theaters.json",
    "content": "{\n  \"disableScroll\": true\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/intheaters/in_theaters.wxml",
    "content": "<!--pages/intheaters/in_theaters.wxml-->\n<import src='/templates/movie/movieRow' />\n<import src='/templates/loading/loading' />\n\n<view class='container page-theatre'>\n  <view class='tabs'>\n    <view wx:for='{{tabs}}' wx:key='index' class='tabs-item{{currentNav==index?\" is-active\":\"\"}}'\n      bindtap='changeSwiper' data-nav='{{index}}'>\n      <view class='tabs-item__content'>{{item}}</view>\n    </view>\n  </view>\n  <!-- <view class='navbar'>\n    <view class='{{currentNav==0?\"active\":\"\"}}' bindtap='changeSwiper' data-nav='{{0}}'>热映</view>\n    <view class='divider'></view>\n    <view class='{{currentNav==1?\"active\":\"\"}}' bindtap='changeSwiper' data-nav='{{1}}'>待映</view>\n  </view> -->\n  <swiper class='swiper' bindchange='onSwiperChange' current='{{currentNav}}'>\n    <swiper-item>\n      <scroll-view class='content-container' scroll-y bindscrolltolower='onScrolTolLower' data-nav='theater' enable-back-to-top>\n        <view class='boss'>敬请期待</view>\n        <block wx:for='{{movies}}' wx:key=\"id\">\n          <view data-title=\"{{item.title}}\" data-id=\"{{item.id}}\"\n            bindtap=\"toDetail\">\n            <template \n              is=\"item-movie_row\" \n              data=\"{{...item}}\">\n            </template>\n          </view>\n        </block>\n        <template is='loading-more' wx:if='{{loadmore1}}' />\n        </scroll-view>\n    </swiper-item>\n    <swiper-item>\n      <scroll-view class='content-container' scroll-y bindscrolltolower='onScrolTolLower' data-nav='comming' enable-back-to-top>\n        <view class='boss'>敬请期待</view>\n        <block wx:for='{{commingMovies}}' wx:key=\"id\">\n          <view data-title=\"{{item.title}}\" data-id=\"{{item.id}}\"\n            bindtap=\"toDetail\">\n            <template \n              is=\"item-movie_row\" \n              data=\"{{...item}}\">\n            </template>\n          </view>\n        </block>\n        <template is='loading-more' wx:if='{{loadmore2}}' />\n        </scroll-view>\n    </swiper-item>\n  </swiper>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/intheaters/in_theaters.wxss",
    "content": "/* pages/intheaters/in_theaters.wxss */\n@import '/templates/rating/rating';\n@import '/templates/movie/movieRow';\n\npage {\n  height: 100%;\n}\n.page-theatre {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n}\n\n.page-theatre .navbar {\n  position: absolute;\n  width: 100%;\n  top: 0;\n  height: 3em;\n  background-color: #DEDEDE;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  border-bottom: .5px solid #ccc;\n}\n.page-theatre .navbar > view {\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: #496069;\n}\n.page-theatre .navbar > view.active {\n  border-bottom: 2px solid #3f3f3f;\n  color: #3f3f3f;\n}\n.page-theatre .navbar .divider {\n  margin: 0 1em;\n  width: 1px;\n  height: 1.5em;\n  background-color: #ccc;\n}\n\n.page-theatre .swiper {\n  flex: 1;\n}\n.page-theatre .swiper .content-container {\n  width: 100%;\n  height: 100%;\n}\n.page-theatre .swiper .content-container .boss {\n  height: 74rpx;\n  text-align: center;\n  color: #999;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.page-theatre .swiper .content-container .content-item {\n  height: 30vh;\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/mark/mark.js",
    "content": "import { getDetail, doneMovie, unmarkMovie } from '../../../../apis/douban.js';\n\nPage({\n  data: {\n    movieID: '',\n    type: 'movie',\n    max: 5,\n    rating: 0,\n    date: (new Date()).toISOString().substring(0, 10)\n  },\n\n  /**\n   * @param {object} options\n   * @param {string} options.movieID\n   * @param {'movie'|'tv'} [options.type = 'movie']\n   * @typedef {{\n   * change?: (interest: import('../../../../apis/douban').DouBan.Interest) => void\n   * }} ChannelEvents\n   */\n  onLoad (options) {\n    this.setData(Object.assign({}, { type: 'movie' }, options));\n    this.getDetail(options.movieID, options.type);\n  },\n\n  async getDetail (movieID, type = 'movie') {\n    const res = await getDetail({\n      id: movieID,\n      type\n    });\n    const interest = res.interest;\n    if (interest) {\n      this.setData({\n        max: interest.rating.max,\n        rating: interest.rating.value,\n        date: interest.create_time.substr(0, 10)\n      });\n    }\n  },\n\n  async submit (e) {\n    const { rating, date } = e.detail.value;\n    const { movieID, type } = this.data;\n    const interest = await doneMovie({\n      type,\n      movieID,\n      rating,\n      date\n    });\n    this.change(interest);\n    wx.navigateBack();\n  },\n\n  async deleteMark (e) {\n    wx.showModal({\n      title: '提醒',\n      content: '确认删除标记吗？',\n      confirmText: '删除',\n      cancelText: '再想想',\n      success: async ({ confirm }) => {\n        if (confirm) {\n          const { movieID, type } = this.data;\n          wx.showLoading();\n          const interest = await unmarkMovie({ movieID, type });\n          wx.hideLoading();\n          this.change(interest);\n          wx.navigateBack();\n        }\n      }\n    });\n  },\n\n  /**\n   * @param {import('../../../../apis/douban').DouBan.Interest} interest \n   */\n  change (interest) {\n    const eventChannel = this.getOpenerEventChannel();\n    eventChannel.emit?.('change', interest);\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/mark/mark.json",
    "content": "{\n  \"navigationBarTitleText\": \"看过\",\n  \"usingComponents\": {\n    \"rating\": \"/components/rating/rating\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/mark/mark.wxml",
    "content": "<wxs module=\"wxs\">\n  function formatDate (dateString) {\n    return dateString.replace(getRegExp('-', 'g'), '.');\n  }\n  module.exports = {\n    formatDate: formatDate\n  }\n</wxs>\n<view class=\"container\">\n  <form class=\"form\" bindsubmit=\"submit\">\n    <view class=\"input-item\">\n      <view class=\"input-item__title\">点击星星进行评分</view>\n      <view class=\"input-item__input\">\n        <rating class=\"rating\" name=\"rating\" max=\"{{max}}\" value=\"{{rating}}\" />\n      </view>\n    </view>\n    <view class=\"input-item\">\n      <view class=\"input-item__title\">选择观影时间</view>\n      <view class=\"input-item__input\">\n        <picker class=\"date-picker\" mode=\"date\" header-text=\"观影时间\"\n          name=\"date\"\n          model:value=\"{{date}}\"\n        >\n          <view class=\"date-picker__content\">\n            <view>{{wxs.formatDate(date)}}</view>\n            <image class=\"btn-opacity date-picker__icon\" src=\"../../images/edit.svg\" mode=\"aspectFit\" />\n          </view>\n        </picker>\n      </view>\n    </view>\n    <button class=\"btn\" hover-class=\"btn-hover\" form-type=\"submit\">确定</button>\n  </form>\n  <button class=\"btn-text\" hover-class=\"btn-opacity\" bindtap=\"deleteMark\">删除标记</button>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/mark/mark.wxss",
    "content": ".container {\n  padding-top: 40rpx;\n}\n\n.input-item:not(:first-child) {\n  margin-top: 80rpx;\n}\n.input-item__title {\n  font-size: 26rpx;\n  color: #999;\n  text-align: center;\n}\n.input-item__input {\n  margin-top: 17rpx;\n  text-align: center;\n}\n\n.btn {\n  margin: 30rpx;\n  margin-top: 213rpx;\n  line-height: 88rpx;\n  height: 88rpx;\n  border-radius: 44rpx;\n  border: none;\n  background-color: #FFE200;\n  color: #333;\n  font-size: 32rpx;\n  --tap-background-color: #ffe833;\n  --tap-color: #5c5c5c;\n}\n.btn::after {\n  content: initial;\n}\n.btn-hover {\n  background-color: var(--tap-background-color);\n  color: var(--tap-color);\n}\n\n.btn-text {\n  position: absolute;\n  bottom: 159rpx;\n  left: 50%;\n  transform: translateX(-50%);\n  font-size: 26rpx;\n  color: #999;\n  background-color: transparent;\n}\n.btn-text::after {\n  content: initial;\n}\n\n.rating {\n  font-size: 80rpx;\n  line-height: 1;\n}\n\n.date-picker {\n  margin-top: 23rpx;\n  display: inline-block;\n}\n.date-picker__content {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 32rpx;\n  color: #999;\n}\n.date-picker__icon {\n  margin-left: 30rpx;\n  width: 32rpx;\n  height: 32rpx;\n}\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/photos/photos.js",
    "content": "import { getPhotos } from '../../../../apis/douban.js';\n\nPage({\n  data: {\n    id: '',\n    type: 'movie',\n    /** @type {import('../../../../apis/douban.js').DouBan.Photo[]} */\n    photos: [],\n    start: 0,\n    count: 24\n  },\n\n  /**\n   * \n   * @param {object} options\n   * @param {string} options.id 影视类目ID\n   * @param {string} [options.title] 影视类目名\n   * @param {'movie'|'tv'} [options.type = 'movie']\n   */\n  onLoad (options) {\n    options = Object.assign({}, { type: 'movie' }, options);\n    this.data.id = options.id;\n    this.data.type = options.type;\n    if (options.title) {\n      wx.setNavigationBarTitle({\n        title: `《${options.title}》的剧照`\n      });\n    }\n    this.getPhotoList();\n    wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n  },\n\n  onReachBottom () {\n    const { count } = this.data;\n    this.data.start += count;\n    this.getPhotoList();\n  },\n\n  async getPhotoList () {\n    const { id, type, start, count, photos } = this.data;\n    const res = await getPhotos({\n      id,\n      start,\n      count,\n      type\n    });\n    const list = res.photos || [];\n    this.setData({\n      photos: start ? [...photos, ...list] : list\n    });\n    const _count = res.count;\n    if (start === 0 && _count < count) {\n      this.onReachBottom();\n    }\n  },\n\n  handlePreview (e) {\n    /**\n     * @type {{ index: number }}\n     */\n    const { index } = e.currentTarget.dataset;\n    const { photos } = this.data;\n    const url = photos[index].image.large.url;\n    wx.previewImage({\n      urls: [url],\n      current: url\n    });\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/photos/photos.json",
    "content": "{\n  \"navigationBarTitleText\": \"剧照\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/photos/photos.wxml",
    "content": "<wxs module=\"wxs\">\n  function getSpanCount (width, height) {\n    /** (screenWidth - leftPadding - rightPadding - gridGap) / 2 */\n    var cssWidth = (750 - 20 * 2 - 20) / 2;\n    /** grid-auto-rows in css. 越小精度越高 */\n    var autoRaws = 2;\n    /** grid-gap in css */\n    var gap = 20;\n    var cssHeight = height / width * cssWidth;\n    return parseInt((cssHeight + gap) / (autoRaws + gap));\n  }\n  module.exports = {\n    getSpanCount: getSpanCount\n  };\n</wxs>\n\n<view class=\"container\">\n  <view class=\"photos\">\n    <block wx:for=\"{{photos}}\" wx:key=\"id\">\n      <image class=\"image\"\n        data-index=\"{{index}}\"\n        bindtap=\"handlePreview\"\n        src=\"{{item.image.small.url}}\"\n        style=\"grid-row: auto / span {{wxs.getSpanCount(item.image.small.width, item.image.small.height)}};\"\n      />\n    </block>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/movie/pages/photos/photos.wxss",
    "content": ".photos {\n  display: grid;\n  padding: 20rpx;\n  grid-template-columns: repeat(2, 1fr);\n  grid-gap: 20rpx;\n  grid-auto-flow: row dense;\n  grid-auto-rows: 2rpx;\n}\n\n.image {\n  width: 100%;\n  background-color: #eee;\n  grid-row: auto / span 50;\n  border-radius: 10rpx;\n}\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/trailers/trailers.js",
    "content": "import { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../../store/index';\nimport { getTrailers } from '../../../../apis/douban.js';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    currUrl: '',\n    trailerId: '',\n    trailers: []\n  },\n\n  storeBindings: {\n    store,\n    fields: ['app']\n  },\n\n  /**\n   * @param {object} options\n   * @param {string} options.trailer 预告片 ID\n   */\n  async onLoad (options) {\n    wx.setNavigationBarTitle({\n      title: '中国预告片（中文字幕）',\n    });\n    const { id, resource, trailer } = options;\n    this.setData({\n      currUrl: resource,\n      trailerId: trailer,\n    });\n\n    const { trailers } = await getTrailers({ id });\n    this.setData({ trailers });\n    const activedTrailer = (trailers || []).find(item => String(item.id) === String(trailer));\n    if (activedTrailer) {\n      wx.setNavigationBarTitle({\n        title: activedTrailer.title,\n      });\n    }\n  },\n\n  onShareAppMessage () {\n    // nothing\n  },\n\n  /** 改变当前预告 */\n  changeTrailer (e) {\n    const { trailers } = this.data;\n    const { index } = e.currentTarget.dataset;\n    const trailer = trailers[index];\n    this.setData({\n      currUrl: trailer.video_url,\n      trailerId: trailer.id,\n    });\n    wx.setNavigationBarTitle({\n      title: trailer.title,\n    });\n  },\n\n  /**\n   * 视频播放结束\n   */\n  videoEnded () {\n    const {trailers, currUrl} = this.data;\n    for(let i=0; i<trailers.length; i++) {\n      if (currUrl == trailers[i].video_url && i<trailers.length-1) {\n        this.setData({ currUrl: trailers[i + 1].video_url})\n      }\n    }\n  }\n})"
  },
  {
    "path": "miniprogram/packages/movie/pages/trailers/trailers.json",
    "content": "{\n  \"disableScroll\": true\n}"
  },
  {
    "path": "miniprogram/packages/movie/pages/trailers/trailers.wxml",
    "content": "<view class='container page-trailers'>\n  <video class=\"video\"\n    wx:if=\"{{app.hasPublished}}\"\n    autoplay\n    src=\"{{currUrl}}\"\n    bindended='videoEnded'\n    ad-unit-id=\"adunit-dadacb30174d719e\"\n  />\n  <scroll-view class=\"trailer-list\" scroll-y>\n    <block wx:for='{{trailers}}' wx:key='id'>\n      <view\n        class=\"trailer button {{trailerId === item.id ? 'active' : ''}}\"\n        data-index=\"{{index}}\"\n        bindtap=\"changeTrailer\"\n      >\n        <image class=\"image\" src='{{item.cover_url}}' mode=\"aspectFill\" />\n        <view class='title'>{{item.title}}</view>\n      </view>\n    </block>\n  </scroll-view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/movie/pages/trailers/trailers.wxss",
    "content": "/* pages/trailers/trailers.wxss */\n.page-trailers {\n  height: 100vh;\n}\n\n.video {\n  width: 100%;\n  height: 450rpx;\n}\n\n.trailer-list {\n  width: 100%;\n  height: calc(100vh - 450rpx);\n}\n\n.trailer {\n  display: flex;\n  padding: 15rpx 25rpx;\n  border-bottom: .5px solid #ddd;\n}\n.trailer .image {\n  width: 250rpx;\n  height: 178rpx;\n  box-sizing: border-box;\n  position: relative;\n}\n.trailer .title {\n  flex: 1;\n  margin-left: 25rpx;\n}\n.trailer.active .image::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  border: 1px solid #F59624;\n}\n.trailer.active .title {\n  color: #F59624;\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/encode/encode.js",
    "content": "import { Base64 } from '../../../../utils/Base64';\n\nComponent({\n  data: {\n    options: [\n      { label: 'URL 编码', value: 'urlencode' },\n      { label: 'Base64', value: 'base64' }\n    ],\n    type: 0,\n    input: '',\n    output: ''\n  },\n  methods: {\n    encode() {\n      let { options, type, input } = this.data;\n      type = options[type].value\n      if (type === 'urlencode') {\n        this.setData({\n          output: encodeURIComponent(input)\n        });\n      } else if (type === 'base64') {\n        this.setData({\n          output: Base64.encode(input)\n        });\n      }\n    },\n    decode() {\n      let { options, type, input } = this.data;\n      type = options[type].value\n      if (type === 'urlencode') {\n        this.setData({\n          output: decodeURIComponent(input)\n        });\n      } else if (type === 'base64') {\n        this.setData({\n          output: Base64.decode(input)\n        });\n      }\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/tools/pages/encode/encode.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/encode/encode.wxml",
    "content": "<view class=\"container\">\n  <textarea class=\"textarea\" model:value=\"{{input}}\" placeholder=\"输入\" />\n  <picker\n    model:value=\"{{type}}\"\n    mode=\"selector\"\n    range=\"{{options}}\"\n    range-key=\"label\"\n  >\n    <button class=\"picker\" type=\"primary\">{{options[type].label}}</button>\n  </picker>\n  <textarea class=\"textarea\" model:value=\"{{output}}\" placeholder=\"输出\" />\n  <view class=\"flex\">\n    <button class=\"btn\" type=\"primary\" bind:tap=\"encode\">编码</button>\n    <button class=\"btn\" type=\"primary\" bind:tap=\"decode\">解码</button>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/tools/pages/encode/encode.wxss",
    "content": ".container {\n  padding: 32rpx;\n}\n.textarea {\n  display: block;\n  width: auto;\n  background: #fff;\n  padding: 1em;\n  border-radius: 12rpx;\n}\n.picker {\n  margin: 40rpx 0;\n}\n.flex {\n  margin-top: 40rpx;\n  display: flex;\n  column-gap: 32rpx;\n}\n.btn {\n  flex: 1;\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/index/index.js",
    "content": "Component({\n  methods: {\n    async scan() {\n      const { result } = await wx.scanCode();\n      const { confirm } = await wx.showModal({\n        content: result,\n        cancelText: '复制',\n        confirmText: '知道了'\n      });\n      if (!confirm) {\n        await wx.setClipboardData({ data: result });\n        wx.showToast({ icon: 'none', title: '复制成功' });\n      }\n    }\n  }\n});"
  },
  {
    "path": "miniprogram/packages/tools/pages/index/index.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/index/index.wxml",
    "content": "<view class=\"grid\">\n  <view class=\"item\" bind:tap=\"scan\">扫码</view>\n  <navigator class=\"item\" url=\"/packages/tools/pages/encode/encode\">编码/解码</navigator>\n  <navigator class=\"item\" url=\"/packages/tools/pages/random/random\">随机数</navigator>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/tools/pages/index/index.wxss",
    "content": ".grid {\n  display: grid;\n  grid-template-columns: 1fr;\n  padding: 32rpx;\n  row-gap: 20rpx;\n}\n.item {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 4em;\n  background: #fff;\n  box-shadow: 1px 1px 20rpx rgba(0, 0, 0, 0.1);\n  border-radius: 12rpx;\n  font-weight: bold;\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/random/random.js",
    "content": "Component({\n  data: {\n    min: '',\n    max: '',\n    num: ''\n  },\n  methods: {\n    generate() {\n      let { min, max } = this.data;\n      min = Number(min);\n      max = Number(max);\n      this.setData({\n        num: Math.floor(Math.random() * max)\n      });\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/tools/pages/random/random.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/packages/tools/pages/random/random.wxml",
    "content": "<view class=\"container\">\n  <textarea class=\"textarea\" model:value=\"{{min}}\" placeholder=\"最小数\" />\n  <textarea class=\"textarea\" model:value=\"{{max}}\" placeholder=\"最大数\" />\n  <textarea class=\"textarea\" model:value=\"{{num}}\" />\n  <button class=\"btn\" type=\"primary\" bind:tap=\"generate\">生成</button>\n</view>"
  },
  {
    "path": "miniprogram/packages/tools/pages/random/random.wxss",
    "content": ".container {\n  padding: 32rpx;\n}\n\n.textarea {\n  display: block;\n  width: auto;\n  background: #fff;\n  padding: 1em;\n  border-radius: 12rpx;\n}\n.textarea + .textarea {\n  margin-top: 20rpx;\n}\n.btn {\n  margin-top: 40rpx;\n  width: 100%;\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/achievement/achievement.js",
    "content": "Component({\n  methods: {\n    onLoad() {\n      wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n    }\n  }\n});\n"
  },
  {
    "path": "miniprogram/packages/user/pages/achievement/achievement.json",
    "content": "{\n  \"navigationBarTitleText\": \"成就\"\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/achievement/achievement.wxml",
    "content": "<view class=\"container\">\n  <image class=\"img\" src=\"/assets/images/developing.svg\" />\n  <view class=\"holder\">规划中，敬请期待</view>\n</view>"
  },
  {
    "path": "miniprogram/packages/user/pages/achievement/achievement.wxss",
    "content": ".img {\n  margin: 160rpx auto;\n  display: block;\n  width: 240rpx;\n  height: 166.504rpx;\n}\n.holder {\n  font-size: 30rpx;\n  text-align: center;\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/evaluate/evaluate.js",
    "content": "// pages/evaluate/evaluate.js\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n  \n  },\n\n  handleChange(e) {\n    this.setData({\n      rating: e.detail.value\n    })\n  },\n})"
  },
  {
    "path": "miniprogram/packages/user/pages/evaluate/evaluate.json",
    "content": "{\n  \"usingComponents\": {\n    \"com-rating\": \"/components/rating/rating\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/evaluate/evaluate.wxml",
    "content": "<!--pages/evaluate/evaluate.wxml-->\n<view class='container page-evalute'>\n  <view class='action'>\n    <com-rating max=\"5\" value='{{0}}' bindchange='handleChange' />\n    <text>{{!rating?'轻点星形来评分':\n      rating===5?'谢谢您的认可！':\n      rating>3?'我会努力的！':'抱歉，让您失望了！'}}</text>\n  </view>\n  <view class='tips'>\n    <text>如果您有什么问题或者建议可以电邮我\n      hongye.jun@qq.com</text>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/user/pages/evaluate/evaluate.wxss",
    "content": "/* pages/evaluate/evaluate.wxss */\n.page-evalute .action {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin-top: 30%;\n}\n.page-evalute .action com-rating {\n  font-size: 2.5em;\n}\n.page-evalute .action>text:last-child {\n  margin-top: 2em;\n  font-size: 1.2em;\n}\n\n.tips {\n  padding: 50rpx 20rpx;\n  display: flex;\n  justify-content: center;\n  color: #496069;\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/favCards/index.js",
    "content": "// liked cards\nimport wxCloud from '../../../../utils/wxCloud';\n\nPage({\n\n  data: {\n    cards: null,\n  },\n\n  onLoad(options) {\n    // this.getFavCards();\n  },\n\n  /** get the cards user liked */\n  async getFavCards() {\n    const res = await wxCloud('getFavCards');\n    this.setData({ cards: res.list || [] });\n  },\n});\n"
  },
  {
    "path": "miniprogram/packages/user/pages/favCards/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"我喜欢的卡片\"\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/favCards/index.wxml",
    "content": "<!-- the cards I liked -->\n<import src='/templates/loading/loading' />\n\n<view class='container page-favcards'>\n  <block wx:for='{{cards}}' wx:key='_id'>\n    <navigator class='item-favcard' url=\"{{'/packages/movie/pages/cards/card?_id='+item._id}}\">\n      <image class='favcard-img' src='{{item.image}}' mode='widthFix' />\n      <text class='favcard-quote dLine'>{{item.quote}}</text>\n      <text class='favcard-source'>--{{item.source}}</text>\n    </navigator>\n  </block>\n  <template is='loading-none' wx:if='{{cards && !cards.length}}' />\n</view>"
  },
  {
    "path": "miniprogram/packages/user/pages/favCards/index.wxss",
    "content": "/* pages/favCards/index.wxss */\n\n.page-favcards {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  padding: 10rpx;\n}\n\n.item-favcard {\n  width: 345rpx;\n  height: 360rpx;\n  overflow: hidden;\n  margin: 10rpx;\n  border-radius: 10rpx;\n  box-shadow: 2rpx 2rpx #ccc;\n  display: flex;\n  flex-direction: column;\n  background-color: #fff;\n}\n.item-favcard .favcard-img {\n  width: 100%;\n  height: 350rpx;\n  max-height: 216rpx;\n  background-color: #eee;\n}\n.item-favcard text {\n  padding: .3em;\n  box-sizing: border-box;\n  font-size: .8em;\n}\n.item-favcard .favcard-source {\n  width: 100%;\n  text-align: end;\n}\n\n.dLine{\n  display: -webkit-box; \n  word-break: break-all; \n  text-overflow: ellipsis; \n  overflow: hidden; \n  -webkit-box-orient: vertical; \n  -webkit-line-clamp:2; \n}"
  },
  {
    "path": "miniprogram/packages/user/pages/favMovieList/index.js",
    "content": "import wxCloud from '../../../../utils/wxCloud'\n\nPage({\n\n    data: {\n        tabs: ['我的', '喜欢'],\n        currentNav: 0,\n        list: null,\n    },\n\n    onLoad(options) {\n        this.getFavArticles()\n    },\n\n    /** 获取喜欢的影单 */\n    getFavArticles() {\n        // wxCloud('getFavArticles').then( res => {\n        //     this.setData({\n        //         list: res.data,\n        //     })\n        // })\n    },\n    \n    /** 取消喜欢 */\n    onFavChange(e) {\n        const { index, id } = e.currentTarget.dataset\n        const { checked } = e.detail\n        let { list } = this.data\n        if (checked) {\n            wxCloud('favArticle', { id }).then( res => {\n                list.splice(index, 1)\n                this.setData({ list })\n                wx.showToast({\n                    title: res.message,\n                })\n            })\n        }\n    },\n\n    handleTabChange(e) {\n        const { value } = e.detail\n        console.log('tab change', value)\n    },\n\n    handleTabItemTap(e) {\n        const { value } = e.detail\n        console.log('tab item tap', value)\n    },\n\n    /** 改变 Tab */\n    changeTab(e) {\n        const { nav } = e.currentTarget.dataset;\n        const { currentNav } = this.data;\n        if (currentNav != nav) {\n            this.setData({\n                currentNav: nav\n            });\n        }\n    },\n\n    showMoreAction() {\n        const buttons = [\"编辑\", \"分享\", \"删除\"]\n        wx.showActionSheet({\n            itemList: buttons,\n            success(res) {\n                switch(buttons[res.tapIndex]) {\n                    case '编辑':\n                        wx.navigateTo({\n                            url: '/packages/article/pages/movie-list-detail/movie-list-detail',\n                        })\n                        break\n                    case '分享':\n                        break\n                    case '删除':\n                        break\n                    default:\n                }\n            },\n        })\n    },\n})"
  },
  {
    "path": "miniprogram/packages/user/pages/favMovieList/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"我喜欢的影单\",\n  \"usingComponents\": {\n    \"tabs\": \"/components/Tabs/Tabs\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/favMovieList/index.wxml",
    "content": "<!-- 喜欢的影单 -->\n<import src='/templates/loading/loading' />\n\n<view class='container'>\n    <tabs tabs=\"{{tabs}}\" bind:change=\"handleTabChange\" bind:itemtap=\"handleTabItemTap\" />\n    <view class='list-container' wx:for='{{list}}' wx:key='id'>\n        <navigator class=\"list-item\" url='/packages/article/pages/details/detail?id={{item.id}}'>\n            <image class=\"list-item__img\" src=\"{{item.image}}\" mode=\"aspectFill\" />\n            <view class=\"list-item__content\">\n                <view class=\"list-item__name\">{{item.title}}</view>\n                <view class=\"list-item__count\">{{item.likeCount}}</view>\n                <view class=\"list-item__more\">\n                    <view class=\"userinfo\">\n                        <image class=\"userinfo__avatar\" src=\"{{item.image}}\" mode=\"aspectFill\" />\n                        <text class=\"userinfo__name\">猫猫不爱鱼</text>\n                    </view>\n                    <text class=\"list-item__date\">2019.04.03创建</text>\n                </view>\n            </view>\n            <image class=\"list-item__action\" src=\"/assets/images/icon-more.png\" mode=\"aspectFit\" catch:tap=\"showMoreAction\" />\n        </navigator>\n    </view>\n    <!-- <template is='loading-none' wx:if='{{list && !list.length}}' /> -->\n    <view class='empty-view' wx:if='{{list && !list.length}}'>\n      <image src='/assets/images/bg-empty.png' mode='aspectFit' />\n      <view>你的网络被挟持了，快刷新一下拯救他啦~</view>\n    </view>\n</view>"
  },
  {
    "path": "miniprogram/packages/user/pages/favMovieList/index.wxss",
    "content": "/* pages/favMovieList/index.wxss */\n.container {\n  padding-top: 84rpx;\n}\n\n.list-container {\n  padding: 10rpx;\n}\n\n.list-item {\n  background-color: #fff;\n  padding: 24rpx;\n  display: flex;\n  flex-direction: row;\n}\n.list-item__img {\n  width: 132rpx;\n  height: 178rpx;\n  border-radius: 5rpx;\n  background-color: #ededed;\n}\n.list-item__content {\n  flex: 1;\n  margin-left: 16rpx;\n  padding: 16rpx;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.list-item__name {\n  font-size: 28rpx;\n  color: #333333;\n}\n.list-item__count {\n  font-size: 22rpx;\n  color: #999999;\n}\n.list-item__more {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.list-item__date {\n  color: #999999;\n  font-size: 22rpx;\n  margin-left: 32rpx;\n}\n.list-item__action {\n  width: 36rpx;\n  height: 36rpx;\n  align-self: center;\n}\n\n.userinfo {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.userinfo__avatar {\n  width: 32rpx;\n  height: 32rpx;\n  border-radius: 32rpx;\n  background-color: #ededed;\n  margin-right: 12rpx;\n}\n.userinfo__name {\n  color: #999999;\n  font-size: 22rpx;\n}\n\n\n.empty-view {\n  min-height: 100vh;\n  background-color: #fff;\n  color: #999;\n  font-size: 26rpx;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding-top: 188rpx;\n  box-sizing: border-box;\n}\n.empty-view > image {\n  margin-bottom: 36rpx;\n  width: 440rpx;\n  height: 400rpx;\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/userinfo/userinfo.js",
    "content": "import { $wuxActionSheet } from '../../../../templates/index';\nimport { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../../store/index';\nimport wxCloud from '../../../../utils/wxCloud';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    userInfo: {}\n  },\n\n  storeBindings: {\n    store,\n    fields: {\n      info: () => store.user.info,\n      douban: () => store.douban,\n      thirdAuthor: () => {\n        return {\n          douban: {\n            title: '豆瓣',\n            authorized: !!(store.douban.accessToken)\n          }\n        }\n      }\n    },\n    actions: {\n      updateUserInfo: 'user/updateUserInfo'\n    }\n  },\n\n  async onChooseAvatar(e) {\n    const { data } = await wxCloud('login', {\n      wxUserInfo: {\n        data: e.detail\n      },\n    });\n    store['user/updateUserInfo'](data);\n  },\n\n  async onNicknameConfirm(e) {\n    const { value } = e.detail;\n    const { data } = await wxCloud('login', {\n      wxUserInfo: {\n        data: { nickName: value }\n      }\n    });\n    store['user/updateUserInfo'](data);\n  },\n\n  handleThirdSwitch (e) {\n    const { key } = e.currentTarget.dataset;\n    const { value } = e.detail;\n    switch (key) {\n      case 'douban':\n        this.handleDoubanSwitch(value);\n        break;\n    }\n  },\n\n  async handleDoubanSwitch(checked) {\n    if (checked) {\n      wx.navigateTo({\n        url: '/packages/douban/pages/login-phone/login-phone',\n      });\n      return;\n    }\n\n    const { confirm } = await wx.showModal({\n      title: '提示',\n      content: '确定要退出豆瓣登录吗？（已经和微信关联的数据并不会丢失）',\n      cancelText: '再想想',\n      confirmText: '决定了',\n      confirmColor: '#ffe200',\n    });\n    if (confirm) {\n      await wxCloud('douban', { action: 'logout' });\n      store['douban/logout']();\n      return;\n    }\n    this.setData({\n      'thirdAuthor.douban.authorized': this.data.thirdAuthor.douban.authorized,\n    });\n  },\n})"
  },
  {
    "path": "miniprogram/packages/user/pages/userinfo/userinfo.json",
    "content": "{\n  \"navigationBarTitleText\": \"账号设置\"\n}"
  },
  {
    "path": "miniprogram/packages/user/pages/userinfo/userinfo.wxml",
    "content": "<!--pages/userinfo/userinfo.wxml-->\n<import src='/templates/actionsheet/actionsheet' />\n\n<template is='temp-actionsheet' data='{{...$wux.actionSheet}}' />\n\n<view class='container page-userinfo'>\n  <view class='top'>\n    <button\n      class='button-nostyle row-cell btn-bg'\n      open-type='chooseAvatar'\n      bind:chooseavatar='onChooseAvatar'\n    >\n      <text>头像</text>\n      <view class='avatar'>\n        <image src='{{info.avatar}}' />\n        <image class='icon' src='/assets/images/change_head_img_icon.png' mode='widthFix' />\n      </view>\n    </button>\n    <view class='row-cell btn-bg'>\n      <text>昵称</text>\n      <view class=\"nickname\">\n        <input\n          type='nickname'\n          value='{{info.name}}'\n          always-embed\n          bind:confirm='onNicknameConfirm'\n        />\n      </view>\n    </view>\n  </view>\n  <view class='tips'>绑定第三方账号后可以直接登录</view>\n  <view class='bottom'>\n    <block wx:for='{{thirdAuthor}}' wx:key='index'>\n      <view class='row-cell'>\n        <text>{{item.title}}</text>\n        <switch\n          color='#ffe200'\n          checked='{{item.authorized}}'\n          data-key=\"{{index}}\"\n          bindchange=\"handleThirdSwitch\"\n        />\n      </view>\n    </block>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/packages/user/pages/userinfo/userinfo.wxss",
    "content": "@import '/templates/actionsheet/actionsheet';\n\n.page-userinfo .top {\n  margin-top: 1em;\n}\n.top,.bottom {\n  border-top: .5px solid #ddd;\n  border-bottom: .5px solid #ddd;\n}\n.row-cell {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20rpx 25rpx;\n  background-color: #fff;\n  color: #333;\n}\n.row-cell:not(:last-child) {\n  border-bottom: .5px solid #ddd;\n}\n.row-cell>view {\n  display: flex;\n  align-items: center;\n}\n.avatar {\n  width: 100rpx;\n  height: 100rpx;\n  position: relative;\n  padding: 0 5rpx 5rpx 0;\n}\n.avatar>image {\n  width: 100%;\n  height: 100%;\n  border-radius: 50%;\n}\n.avatar>image.icon {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  width: 45%;\n  height: 45%;\n}\n.nickname {\n  text-align: right;\n}\n.icon {\n  width: .5em;\n  height: .5em;\n  margin-left: 1em;\n}\n.tips {\n  padding: 25rpx;\n}\n\n.modal {\n  position: fixed;\n  z-index: 500;\n  opacity: 0;\n  transition: opacity .3s ease-in-out;\n}\n.modal__mask {\n  content: \"\";\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  pointer-events: none;\n}\n.modal__content {\n  position: fixed;\n  z-index: 1;\n  transform: translate3d(0,0,0);\n  transition: transform .3s ease-in-out;\n}\n.modal--bottom .modal__content{\n  bottom: 0;\n  left: 0;\n  right: 0;\n  transform: translate3d(0, 100%, 0);\n}\n.modal.visible {\n  opacity: 1;\n}\n.modal.visible .modal__mask {\n  pointer-events: all;\n}\n.modal.visible .modal__content {\n  transform: translate3d(0, 0, 0);\n}\n"
  },
  {
    "path": "miniprogram/packages/wallpaper/apis/wallpaper/index.js",
    "content": "import { request } from '../../../../utils/request';\n\nexport const fetchCategories = async () => {\n  const { ok, data } = await request({\n    url: 'https://mmovie.imarkr.com/360/bizhi/labels'\n  });\n  return ok ? data : Promise.reject(data);\n}\n\n/**\n * @param {object} data\n * @param {number} data.lid\n * @param {number} data.size\n * @param {number} data.page\n */\nexport const fetchListByCategory = async (data) => {\n  const resp = await request({\n    url: 'https://mmovie.imarkr.com/360/bizhi/list',\n    data\n  });\n  return resp.ok ? resp.data : Promise.reject(resp.data);\n}\n"
  },
  {
    "path": "miniprogram/packages/wallpaper/pages/categories/categories.js",
    "content": "import { fetchCategories, fetchListByCategory } from '../../apis/wallpaper/index'\n\nComponent({\n  data: {\n    categories: null,\n    wallpapers: [],\n    lid: 357,\n    page: 1,\n    loading: false,\n    hasMore: true\n  },\n\n  attached() {\n    this.getCategories()\n    this.getWallpapers()\n  },\n\n  methods: {\n    onLoad() {\n      wx.createInterstitialAd({ adUnitId: 'adunit-56316cd90de2e91c' }).show();\n    },\n    async getCategories() {\n      const res = await fetchCategories()\n      this.setData({\n        categories: res\n      })\n    },\n    async getWallpapers() {\n      const { lid, page, wallpapers } = this.data\n      this.setData({ loading: true })\n      const res = await fetchListByCategory({ lid, page, size: 19 })\n        .finally(() => {\n          this.setData({ loading: false })\n        })\n      const list = res.list || []\n      const i = parseInt(Math.random() * 20)\n      list.splice(i, 0, { type: 'ad', id: `ad-${page}` });\n      this.setData({\n        wallpapers: page > 1 ? [...wallpapers, ...list] : list,\n        page: page + 1,\n        hasMore: res.has_more\n      })\n    },\n    onCategoryTap(e) {\n      const { item } = e.currentTarget.dataset\n      Object.assign(this.data, {\n        lid: item.id,\n        page: 1\n      })\n      this.getWallpapers()\n    },\n    onImgTap(e) {\n      const { item } = e.currentTarget.dataset\n      wx.previewImage({\n        urls: [item.img]\n      })\n    },\n    onImgLongPress(e) {\n      const { item } = e.currentTarget.dataset\n      wx.downloadFile({\n        url: item.img,\n        success: ({ tempFilePath }) => {\n          wx.showShareImageMenu({\n            path: tempFilePath\n          })\n        }\n      })\n    },\n\n    onLoadMore() {\n      this.getWallpapers()\n    }\n  }\n})\n"
  },
  {
    "path": "miniprogram/packages/wallpaper/pages/categories/categories.json",
    "content": "{\n  \"navigationBarTitleText\": \"壁纸\",\n  \"usingComponents\": {\n    \"load-more\": \"/components/load-more/load-more\"\n  }\n}"
  },
  {
    "path": "miniprogram/packages/wallpaper/pages/categories/categories.wxml",
    "content": "<view wx:if=\"{{wallpapers && wallpapers.length}}\" class='container'>\n  <view class='categories'>\n    <view\n      wx:for='{{categories}}'\n      wx:key='id'\n      wx:for-index='id'\n      class='category-item'\n      data-item='{{item}}'\n      bind:tap='onCategoryTap'\n    >\n      <image\n        class='category-item-bg'\n        mode='aspectFill'\n        src='{{item.img}}'\n      />\n      <view>{{item.name}}</view>\n    </view>\n  </view>\n  <view class='imgs'>\n    <block wx:for=\"{{wallpapers}}\" wx:key=\"id\">\n      <view wx:if=\"{{item.type === 'ad'}}\" class=\"img-item\">\n        <ad-custom unit-id=\"adunit-f844ca212ba92679\" />\n      </view>\n      <image\n        wx:else\n        class='img-item'\n        mode='aspectFill'\n        src='{{item.img}}'\n        data-item='{{item}}'\n        lazy-load\n        bind:tap='onImgTap'\n        bindlongpress='onImgLongPress'\n      />\n    </block>\n  </view>\n  <load-more\n    wx:if='{{hasMore}}'\n    loading='{{loading}}'\n    bind:loadmore='onLoadMore'\n  />\n</view>"
  },
  {
    "path": "miniprogram/packages/wallpaper/pages/categories/categories.wxss",
    "content": ".categories {\n  position: sticky;\n  z-index: 1000;\n  top: 0;\n  display: flex;\n  height: 4.375rem;\n  width: 100vw;\n  gap: 0.5rem;\n  box-sizing: border-box;\n  padding: 0.5rem 1rem;\n  background: #fff;\n  box-shadow: 0 1px 10rpx rgba(0, 0, 0, 0.2);\n  overflow-x: scroll;\n}\n.category-item {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  min-width: 10em;\n  justify-content: center;\n  align-items: center;\n  font-size: 1.125rem;\n  height: 3em;\n  border-radius: 0.375rem;\n  font-weight: bold;\n  color: #fff;\n}\n.category-item-bg {\n  position: absolute;\n  z-index: -2;\n  width: 100%;\n  height: 100%;\n  border-radius: inherit;\n}\n.category-item::before {\n  content: '';\n  position: absolute;\n  z-index: -1;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.2);\n  border-radius: inherit;\n}\n\n.imgs {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.5rem;\n  padding: 20rpx;\n}\n.img-item {\n  display: block;\n  width: 100%;\n  aspect-ratio: 1.618 / 1;\n  overflow: hidden;\n}"
  },
  {
    "path": "miniprogram/pages/about/about.js",
    "content": "import { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport md from 'markdown-ast';\nimport { store } from '../../store/index';\n\nconst music = {\n  src: 'http://music.163.com/song/media/outer/url?id=1404596131.mp3',\n  title: 'See you again',\n  cover: 'http://p2.music.126.net/JIc9X91OSH-7fUZqVfQXAQ==/7731765766799133.jpg',\n  singer: 'Wiz Khalifa / Charlie Puth',\n  epname: 'Furious 7 (Original Motion Picture Soundtrack)',\n  url: 'https://music.163.com/#/song?id=30953009'\n};\nconst audioManager = wx.getBackgroundAudioManager();\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    music,\n    datas: {\n      image: 'https://img9.doubanio.com/view/photo/r/public/p2635531435.webp'\n    },\n    playing: false,\n    nodes: []\n  },\n\n  storeBindings: {\n    store,\n    fields: {\n      app: () => store.app\n    }\n  },\n\n  onLoad (options) {\n    this.initAudio();\n    this.initAudioListener();\n\n    const nodes = md(store.app.intro);\n    this.setData({ nodes });\n  },\n\n  onShow (options) {\n    this.setData({\n      playing: !audioManager.paused\n    });\n  },\n\n  /** 播放背景音乐 */\n  initAudio () {\n    if (!audioManager.src && !audioManager.paused) {\n      // case 背景音乐未初始化且不是用户主动关闭时初始化音乐\n      audioManager.src = music.src;\n      audioManager.title = music.title;\n      audioManager.coverImgUrl = music.cover;\n      audioManager.epname = music.epname;\n      audioManager.webUrl = music.url;\n    }\n  },\n\n  /** 播放/暂停 */\n  audioToggle () {\n    if (!audioManager.src) {\n      audioManager.src = music.src; // 自动播放\n    } else if (audioManager.paused) {\n      audioManager.play();\n    } else {\n      audioManager.pause();\n    }\n  },\n\n  /** 初始化音乐播放/暂停/停止监听 */\n  initAudioListener () {\n    audioManager.onPlay(() => {\n      this.setData({\n        playing: true\n      });\n    });\n    audioManager.onPause(() => {\n      this.setData({\n        playing: false\n      });\n    });\n    audioManager.onStop(() => {\n      this.setData({\n        playing: false\n      });\n    });\n    audioManager.onEnded(() => {\n      this.setData({\n        playing: false\n      });\n    });\n  },\n\n  toWebview (e) {\n    const { url } = e.currentTarget.dataset\n    wx.navigateTo({\n      url: `/pages/webview/index?url=${url}`,\n    })\n  }\n})\n"
  },
  {
    "path": "miniprogram/pages/about/about.json",
    "content": "{\n  \"usingComponents\": {\n    \"pre-image\": \"/components/pre-image/PreImage\"\n  }\n}"
  },
  {
    "path": "miniprogram/pages/about/about.wxml",
    "content": "<view class='container self-honye'>\n  <view class='banner'>\n    <pre-image \n      src='{{app.cover}}' \n      mode='widthFix'\n      height='100%'\n      place-img='/assets/images/bg-default.jpg'\n    />\n  </view>\n\n  <view class='advert'>\n    <block wx:for=\"{{nodes}}\">\n      <text wx:if=\"{{item.type === 'text'}}\">{{item.text}}</text>\n      <text\n        wx:if=\"{{item.type === 'link'}}\"\n        class=\"link\"\n        bindtap=\"toWebview\"\n        data-url=\"{{item.url}}\"\n      >{{item.block[0].text}}</text>\n      <view wx:if=\"{{item.type === 'break'}}\"></view>\n    </block>\n  </view>\n</view>\n\n<view class=\"music-dish\" bind:tap=\"audioToggle\">\n  <image class=\"music-cover {{playing && 'active'}}\" src=\"{{music.cover}}\" mode=\"aspectFill\" />\n</view>\n\n<view class=\"ad-container\">\n  <view class=\"ad-wrapper\">\n    <ad unit-id=\"adunit-e4aa5a1a9c05d2ee\"></ad>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/pages/about/about.wxss",
    "content": ".self-honye .banner {\n  margin: 20rpx;\n  box-sizing: border-box;\n  background-color: #eee;\n  line-height: 0;\n  border-radius: 10rpx;\n  overflow: hidden;\n  height: 375rpx;\n  box-shadow: 4px 4px 20px 1px #ddd;\n}\n.self-honye .banner>image {\n  width: 100%;\n  height: 100%;\n}\n.self-honye .advert {\n  background-color: #fff;\n  margin: 0 20rpx 20rpx;\n  border-radius: 10rpx;\n  padding: 20rpx;\n  font-size: .9em;\n  line-height: 1.8em;\n  box-shadow: 4rpx 4rpx 10rpx 1rpx #ddd;\n}\n.self-honye .advert view:not(:first-child) {\n  margin-top: 10rpx;\n}\n\n.self-honye .advert {\n  color: #333;\n}\n\n@keyframes roate {\n  0% {\n    transform: rotate(0deg);\n  }\n  25% {\n    transform: rotate(90deg);\n  }\n  50% {\n    transform: rotate(180deg);\n  }\n  75% {\n    transform: rotate(270deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n.link {\n    color: #0366d6;\n}\n\n.music-dish {\n  position: fixed;\n  right: 30rpx;\n  top: 30rpx;\n  height: 1.8em;\n  width: 1.8em;\n  border-radius: 50%;\n  overflow: hidden;\n  box-shadow: 2rpx 2rpx 10rpx 0 rgba(0, 0, 0, 0.2);\n}\n\n.music-cover {\n  width: 100%;\n  height: 100%;\n  animation: roate 5s linear infinite;\n  animation-play-state: paused;\n}\n.music-cover.active {\n  animation-play-state: running;\n}\n\n.ad-container {\n  margin-bottom: 10rpx;\n  margin-bottom: max(env(safe-area-inset-bottom), 10rpx);\n  margin-bottom: max(constant(safe-area-inset-bottom), 10rpx);\n}\n.ad-wrapper {\n  margin: 0 20rpx;\n  border-radius: 12rpx;\n  overflow: hidden;\n}"
  },
  {
    "path": "miniprogram/pages/first/first.js",
    "content": "\nPage({\n\n  data: {\n    rating: 7.5,\n    max: 10,\n    path: '',\n  },\n\n  handleChange: function(e) {\n    console.log(\"事件\", e.detail);\n    this.setData({\n      rating: e.detail.value\n    })\n  },\n\n  onReady: function(e) {\n    // 使用 wx.createContext 获取绘图上下文 context\n    var context = wx.createCanvasContext('firstCanvas')\n\n    context.drawImage(\n      'http://oz126ti4w.bkt.clouddn.com/image/2017110711091269781.jpg',\n      0,0,350,200\n    )\n    context.fillText('隐约雷鸣 阴霾天空 但盼风雨来 能留你在此↵隐约雷鸣 阴霾天空 即使无风雨 我亦留此地',10,220)\n    context.setStrokeStyle(\"#00ff00\")\n    context.setLineWidth(5)\n    context.rect(0, 0, 200, 200)\n    context.stroke()\n    context.setStrokeStyle(\"#ff0000\")\n    context.setLineWidth(2)\n    context.moveTo(160, 100)\n    context.arc(100, 100, 60, 0, 2 * Math.PI, true)\n    context.moveTo(140, 100)\n    context.arc(100, 100, 40, 0, Math.PI, false)\n    context.moveTo(85, 80)\n    context.arc(80, 80, 5, 0, 2 * Math.PI, true)\n    context.moveTo(125, 80)\n    context.arc(120, 80, 5, 0, 2 * Math.PI, true)\n    context.stroke()\n    context.draw()\n  },\n\n  saveCanvas() {\n    wx.canvasToTempFilePath({\n      canvasId: 'firstCanvas',\n      success: res => {\n        console.log('成功', res);\n        this.setData({\n          path: res.tempFilePath\n        })\n        wx.saveImageToPhotosAlbum({\n          filePath: res.tempFilePath,\n          success: res => {\n            console.log(\"保存成功\", res);\n          },\n          fail: err => {\n            console.log(\"保存失败\", err)\n          }\n        })\n      },\n      fail: err => {\n        console.log(\"失败\", err);\n      }\n    })\n  },\n\n  onClick(event) {\n    console.log(event)\n    const { max } = this.data;\n    const { index } = event.currentTarget.dataset;\n    this.setData({\n      rating: (index+1) * (max/5)\n    })\n  },\n\n  toMini() {\n    wx.navigateToMiniProgram({\n      appId: 'wx5363d9bd45509430',\n    })\n  }\n\n})"
  },
  {
    "path": "miniprogram/pages/first/first.json",
    "content": "{\n  \"usingComponents\": {\n    \"com-rating\": \"/components/rating/rating\"\n  }\n}"
  },
  {
    "path": "miniprogram/pages/first/first.wxml",
    "content": "<!-- 尝试 -->\n<import src='/templates/rating/rating' />\n<wxs src='../../utils/WxUtil.wxs' module='wxUtil' />\n\n<view class='container page-first'>\n  <view>template 模板</view>\n  <view class='rating-temp'>\n    <template is='rating' data='{{rating,max}}' />\n  </view>\n\n  <view>component 自定义组件</view>\n  <view class='rating-comp'>\n    <com-rating max=\"10\" value='{{6.5}}' bindchange='handleChange' />\n    <text class='rate-show'>{{rating}}分</text>\n  </view>\n,\n  <canvas class='canvas' canvas-id='firstCanvas'></canvas>\n\n  <button bindtap='saveCanvas'>生成图片</button>\n\n  <image src='{{path}}' mode='widthFix' />\n\n  <button bindtap='toMini'>Mark with LeanCloud</button>\n\n</view>"
  },
  {
    "path": "miniprogram/pages/first/first.wxss",
    "content": "/* pages/first/first.wxss */\n@import '/templates/rating/rating.wxss';\n\n.page-first {\n  padding: 20rpx;\n}\n\n.rating-temp {\n  font-size: 1.5em;\n}\n.rating-comp {\n  font-size: 2em;\n}\n.rating-comp .rate-show {\n  margin-left: 1em;\n  font-size: .8em;\n}\n\n.canvas {\n  width: 100%;\n  height: 700rpx;\n  background-color: #C3E1ED;\n}\n"
  },
  {
    "path": "miniprogram/pages/marked/marked.js",
    "content": "// pages/marked/marked.js\nconst WxParse = require('../../templates/wxParse/wxParse.js');\n\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n    currentNav: 0\n  },\n\n  /**\n   * 生命周期函数--监听页面加载\n   */\n  onLoad: function (options) {\n    this.getHTML();\n  },\n\n  /**\n   * 生命周期函数--监听页面初次渲染完成\n   */\n  onReady: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面显示\n   */\n  onShow: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面隐藏\n   */\n  onHide: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面卸载\n   */\n  onUnload: function () {\n\n  },\n\n  /**\n   * 页面相关事件处理函数--监听用户下拉动作\n   */\n  onPullDownRefresh: function () {\n\n  },\n\n  /**\n   * 页面上拉触底事件的处理函数\n   */\n  onReachBottom: function () {\n\n  },\n\n  /**\n   * 用户点击右上角分享\n   */\n  onShareAppMessage: function () {\n\n  },\n\n  onNavChange: function (e) {\n    const { nav } = e.currentTarget.dataset,\n      { currentNav } = this.data;\n    if (nav === currentNav) {\n      this.setData({\n        currentNav: 0\n      })\n    } else {\n      this.setData({\n        currentNav: nav\n      })\n    }\n  },\n\n  getHTML: function() {\n    const that = this;\n    wx.request({\n      url: 'https://hongye567.github.io/2017/06/22/React-Native-集成极光推送-jpush-react-native/#more',\n      header: {\n        'content-type': 'text/html; charset=utf-8'\n      },\n      success: res => {\n        console.log(\"HTML\", res);\n        WxParse.wxParse('article', 'html', res.data, that, 5);\n      }\n    })\n  }\n})"
  },
  {
    "path": "miniprogram/pages/marked/marked.json",
    "content": "{\n  \"disableScroll\": true\n}"
  },
  {
    "path": "miniprogram/pages/marked/marked.wxml",
    "content": "<!--pages/marked/marked.wxml-->\n<import src='/templates/wxParse/wxParse' />\n\n<view class='container page-marked'>\n  <view class='nav-bar'>\n    <view class='nav-top' bindtap='onNavChange' data-nav='{{1}}'></view>\n    <view class='menu {{currentNav===1?\"active\":\"\"}}'></view>\n  </view>\n  <view class='content'>\n    <scroll-view class='list-content'\n      scroll-y='{{currentNav===0}}'>\n      <view style='height: 1000rpx;background: green'></view>\n      <view style='height: 1000rpx;background: yellow'></view>\n      <template is=\"wxParse\" data=\"{{wxParseData:article.nodes}}\" />\n    </scroll-view>\n    <view class='bg {{currentNav===1?\"active\":\"\"}}'></view>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/pages/marked/marked.wxss",
    "content": "/* pages/marked/marked.wxss */\n@import '/templates/wxParse/wxParse';\n\n.container.page-marked {\n  height: 100vh;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.page-marked .nav-top {\n  height: 3em;\n  background-color: #fff;\n  border-bottom: 1px solid #ccc;\n}\n.nav-bar .menu {\n  position: absolute;\n  width: 100%;\n  height: 450rpx;\n  z-index: 5;\n  background-color: aquamarine;\n  display: none;\n}\n.nav-bar .menu.active {\n  display: flex;\n}\n/*下拉菜单 end*/\n.page-marked .content{\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.list-content {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n}\n/*内容列表 end*/\n.page-marked .bg {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(1, 1, 1, .5);\n  display: none;\n}\n.page-marked .bg.active {\n  display: flex;\n}\n/*透明遮罩层 end*/"
  },
  {
    "path": "miniprogram/pages/search/search.js",
    "content": "// pages/search/search.js\nimport { search } from '../../apis/douban.js';\n\nconst count = 20;  // 每页加载数据数目\nPage({\n\n  /** 页面的初始数据 */\n  data: {\n    inputVal: \"\",\n    paragraph: '&emsp;人生就是一列开往坟墓的列车，路途上会有很多站，很难有人可以自始至终陪着走完。当陪你的人下车时，即使不舍也该心存感激，然后挥手道别。',\n    result: null,\n    loading: false,\n    pageNo: 0,\n    hasMore: true,\n    history: [],\n    hot: ['复仇者联盟4', '我们与恶的距离', '黑豹'],\n  },\n\n  onLoad(options) {\n    const history = wx.getStorageSync('search_history') || []\n    this.setData({\n      history,\n    })\n  },\n\n  clearInput() {\n    this.setData({\n      inputVal: \"\",\n      result: null\n    });\n  },\n\n  inputTyping(e) {\n    this.setData({\n      inputVal: e.detail.value\n    });\n  },\n\n  /** 用户确认搜索 */\n  inputConfirm() {\n    const { inputVal } = this.data;\n    if(inputVal.indexOf('hy:')===0) {\n      this.hiddenCommand()\n    } else {\n      this.setData({\n        scrollTop: 0,\n        pageNo: 0,\n        hasMore: true\n      }, () => {\n        this.searchMovie()\n      })\n    }\n  },\n\n  /** 搜索 */\n  async searchMovie (e) {\n    const { inputVal, pageNo, result } = this.data\n    this.setData({\n      loading: true\n    })\n    wx.showLoading({\n      title: 'loading...',\n    })\n    const res = await search({\n      q: inputVal,\n      start: count * pageNo,\n      count\n    });\n    wx.hideLoading();\n    this.setData({\n      result: pageNo ? [...result, ...res.items] : res.items,\n      loading: false,\n      pageNo: pageNo + 1,\n      hasMore: res.total > count * (pageNo + 1)\n    });\n    this.setHistory();\n  },\n\n  /** 快速搜索 */\n  quickSearch(e) {\n    const { keywords } = e.currentTarget.dataset\n    this.setData({\n      inputVal: keywords,\n      pageNo: 0,\n    }, this.searchMovie)\n  },\n\n  /** 取消返回 */\n  goBack() {\n    wx.navigateBack()\n  },\n\n  /** 触底加载更多 */\n  loadMore(e) {\n    const { loading, hasMore } = this.data;\n    if (!loading && hasMore) {\n      this.searchMovie()\n    }\n  },\n\n  /** 隐藏命令 */\n  hiddenCommand() {\n    const { inputVal } = this.data;\n    const command = inputVal.split('hy:')[1].trim().toUpperCase();\n    switch(command) {\n      case 'OPEN MARK':  // 打开 Mark 小程序\n        wx.navigateToMiniProgram({\n          appId: 'wx5363d9bd45509430',\n        })\n        break;\n      case 'OPEN TEST':  // 打开测试页\n        wx.navigateTo({\n          url: '/pages/first/first',\n        })\n        break;\n      case 'EXAMPLE':\n        wx.navigateTo({\n          url: '/packages/example/pages/index/index'\n        });\n        break;\n      case 'CLOUD':\n        wx.navigateTo({\n          url: '/packages/admin/pages/index/index'\n        });\n        break;\n      default:\n        wx.showToast({\n          title: '命令错误！',\n        })\n        break;\n    }\n  },\n\n  /** 搜索历史存储 */\n  setHistory() {\n    let { history, inputVal } = this.data\n    let arr = history.slice(0, 3)\n    arr.unshift(inputVal)\n    history = [...(new Set(arr))]\n    this.setData({\n      history,\n    })\n    wx.setStorage({\n      key: 'search_history',\n      data: history,\n    })\n  },\n\n  clearHistory() {\n    wx.removeStorage({ key: 'search_history' })\n    this.setData({\n      history: [],\n    })\n  },\n\n})"
  },
  {
    "path": "miniprogram/pages/search/search.json",
    "content": "{\n  \"navigationBarTitleText\": \"搜索\",\n  \"disableScroll\": true\n}"
  },
  {
    "path": "miniprogram/pages/search/search.wxml",
    "content": "<import src='/templates/movie/movieRow' />\n\n<view class='container page-search'>\n  <view>\n    <view class=\"search-bar\">\n      <image class='icon' src='/assets/images/icon-search.png' mode='widthFix' />\n      <input type=\"text\"\n        placeholder=\"输入影名/演员\" value=\"{{inputVal}}\" \n        focus bindinput=\"inputTyping\" confirm-type='search'\n        bindconfirm='inputConfirm'\n      />\n      <block wx:if=\"{{inputVal.length > 0}}\">\n        <button class=\"button-nostyle\" bindtap=\"clearInput\">\n          <icon type=\"clear\" size=\"14\" />\n        </button>\n      </block>\n    </view>\n  </view>\n  <view class='content'>\n    <scroll-view scroll-y bindscrolltolower='loadMore'\n      enable-back-to-top scroll-top='{{scrollTop}}' scroll-with-animation\n    >\n      <view wx:if='{{!result}}' class='paragraph'>\n        <view wx:if=\"{{history && history.length}}\" class='search-block'>\n          <view class='block-header'>\n            <text class='block-title'>最近搜索</text>\n            <image class='icon' src='/assets/images/icon-delete.png' bindtap=\"clearHistory\" />\n          </view>\n          <view class='block-body'>\n            <button wx:for='{{history}}' wx:key='index' class='button--round' data-keywords='{{item}}' bindtap='quickSearch'>{{item}}</button>\n          </view>\n        </view>\n        <view class='search-block'>\n          <view class='block-header'>\n            <text class='block-title'>热门搜索</text>\n          </view>\n          <view class='block-body'>\n            <button wx:for='{{hot}}' wx:key='index' class='button--round' data-keywords='{{item}}' bindtap='quickSearch'>{{item}}</button>\n          </view>\n        </view>\n      </view>\n      <view wx:elif='{{result.length>0}}'>\n        <block wx:for='{{result}}' wx:key='id'>\n          <view class=\"doulist\" wx:if=\"{{item.target_type === 'doulist_cards'}}\">\n            <block wx:for=\"{{item.target.doulists}}\" wx:key=\"id\" wx:for-item=\"doulist\">\n              <navigator class=\"doulist-item\" url=\"/packages/douban/pages/collection/collection?type={{doulist.id}}\">\n                <view class=\"doulist-item__img\">\n                  <image class=\"img\" src=\"{{doulist.cover_url}}\" mode=\"aspectFill\" />\n                  <view class=\"label\">{{doulist.image_label}}</view>\n                </view>\n                <view class=\"doulist-item__title\">{{doulist.title}}</view>\n              </navigator>\n            </block>\n          </view>\n          <navigator wx:elif=\"{{item.target_type === 'movie' || item.target_type === 'tv'}}\"\n            url='/packages/movie/pages/details/details?title={{item.target.title}}&id={{item.target.id}}&type={{item.target_type}}'\n          >\n            <template is=\"item-movie_row\" data=\"{{...item.target}}\" />\n          </navigator>\n        </block>\n      </view>\n      <view wx:else class='none'>\n        <image src='/assets/images/search_empty_icon.png' mode='widthFix' />\n        <text>抱歉，未找到相关影视</text>\n        <text>输入电影名/导演/演员/编剧搜索</text>\n      </view>\n    </scroll-view>\n  </view>\n</view>"
  },
  {
    "path": "miniprogram/pages/search/search.wxss",
    "content": "/* pages/search/search.wxss */\n@import '/templates/movie/movieRow';\n\npage,\n.page-search {\n  height: 100%;\n}\n\n.search-bar {\n  margin: 12rpx 24rpx;\n  height: 88rpx;\n  border-radius: 44rpx;\n  background: #fff;\n  padding: 8px 30rpx;\n  display: flex;\n  align-items: center;\n  box-sizing: border-box;\n  font-size: 26rpx;\n  color: #333;\n  box-shadow: 2rpx 4rpx 10rpx 0rpx rgba(0,0,0,0.15);\n}\n.search-bar .icon {\n  width: 48rpx;\n  height: 48rpx;\n  margin-right: 16rpx;\n}\n.search-bar > input {\n  flex: 1;\n}\n.search-bar .button-nostyle {\n  font-size: 0;\n}\n\n.page-search .content {\n  flex: 1;\n  display: flex;\n  overflow: hidden;\n}\n.content scroll-view {\n  height: 100%;\n}\n.search-block {\n  margin: 24rpx;\n}\n.search-block + .search-block {\n  margin-top: 41rpx;\n}\n.search-block .block-header {\n  display: flex;\n  justify-content: space-between;\n  color: #999;\n  font-size: 26rpx;\n}\n.block-header .icon {\n  width: 32rpx;\n  height: 32rpx;\n}\n.button--round {\n  display: inline-block;\n  border: 2rpx solid #ccc;\n  height: 52rpx;\n  line-height: 52rpx;\n  border-radius: 32rpx;\n  font-size: 26rpx;\n  color: #999;\n  padding: 0 20rpx;\n  margin-top: 15rpx;\n}\n.button--round::after {\n  content: none;\n}\n.button--round + .button--round {\n  margin-left: 24rpx;\n}\n\n.content .paragraph {\n  display: flex;\n  flex-direction: column;\n}\n.page-search .content .none {\n  display: flex;\n  flex-direction: column;\n  padding: 75rpx;\n  align-items: center;\n}\n.page-search .content .none>image {\n  width: 3em;\n  height: 3em;\n  margin-bottom: 1em;\n}\n.page-search .content .none>text:last-child {\n  background-color: #EBEBEB;\n  line-height: 2.8em;\n  margin-top: 2em;\n  color: #384D56;\n  text-align: center;\n  width: 100%;\n  font-size: .9em;\n  border-radius: 5px;\n}\n\n.doulist {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 24rpx;\n  background-color: #fff;\n}\n.doulist-item {\n  width: 341rpx;\n  background-color: #f8f8f8;\n  border-radius: 6rpx;\n  box-sizing: border-box;\n  padding: 20rpx;\n  display: flex;\n  align-items: center;\n}\n.doulist-item:nth-child(2n) {\n  margin-left: 20rpx;\n}\n.doulist-item__img {\n  width: 100rpx;\n  height: 100rpx;\n  border-radius: 8rpx;\n  overflow: hidden;\n  position: relative;\n  flex-shrink: 0;\n}\n.doulist-item__img .img {\n  width: 100%;\n  height: 100%;\n}\n.doulist-item__img .label {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  background-color: rgba(0,0,0,0.5);\n  color: #fff;\n  font-size: 16rpx;\n  padding: 4rpx 10rpx;\n  border-radius: 0 8rpx 0 0;\n}\n.doulist-item__title {\n  margin-left: 10rpx;\n  font-size: 28rpx;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}"
  },
  {
    "path": "miniprogram/pages/setting/setting.js",
    "content": "// 设置\nimport Storage from './../../utils/storage';\n\nconst app = getApp();\nconst templMsgId = 'sJz8Heo9GSqMwhnJFlpEHbm-rmIhUlhOkEOoSvY6BwE';\n\nPage({\n\n  data: {\n    notice: true,\n    storageSize: 0\n  },\n\n  onLoad (options) {\n    const storageInfo = wx.getStorageInfoSync();\n    wx.getSetting({\n      withSubscriptions: true,\n      success: ({ subscriptionsSetting = {} }) => {\n        const { mainSwitch, itemSettings } = subscriptionsSetting;\n        this.setData({\n          notice: Boolean(mainSwitch && itemSettings && itemSettings[templMsgId]),\n          storageSize: storageInfo.currentSize\n        });\n      }\n    });\n  },\n\n  /**\n   * 通知开关\n   */\n  async switchNotice (event) {\n    const { value } = event.detail;\n    let notice = false;\n    if (value) {\n      // case switch to subscribe message\n      const subscription = await new Promise((resolve, reject) => {\n        wx.requestSubscribeMessage({\n          tmplIds: [templMsgId],\n          success: (res) => resolve(res),\n          fail: (err) => reject(err)\n        });\n      });\n      notice = subscription[templMsgId] === 'accept';\n    }\n    \n    app.globalData.setting = { ...app.globalData.setting, notice };\n    this.setData({ notice });\n  },\n\n  /**\n   * 清除缓存\n   */\n  clearCache () {\n    Storage.clear()\n    wx.showToast({\n      title: '已清除',\n      icon: 'success'\n    })\n  }\n\n})"
  },
  {
    "path": "miniprogram/pages/setting/setting.json",
    "content": "{\n  \"navigationBarTitleText\": \"设置\"\n}"
  },
  {
    "path": "miniprogram/pages/setting/setting.wxml",
    "content": "<import src='/templates/cell/cell' />\n\n<view class='subtitle'>\n  <text>消息设置</text>\n</view>\n<view>\n  <view class='row-cell'>\n    <view class='row-left'>\n      <image class='row-icon' src='/assets/images/notify_switch_icon.png' mode='widthFix'></image>\n      <text>接受消息提醒</text>\n    </view>\n    <view class='row-right'>\n      <switch color='#ffe200' bindchange='switchNotice' checked='{{notice}}'></switch>\n    </view>\n  </view>\n  <view class='tips'>\n    <text>小程序是建立在微信基础上，若关闭了微信通知则接受不到通知。</text>\n  </view>\n  <view class='row-cell' bindtap='clearCache'>\n    <view class='row-left'>\n      <image class='row-icon' src='/assets/images/clear_cache_icon.png' mode='widthFix'></image>\n      <text>清除缓存</text>\n    </view>\n    <view class='row-right'>\n      <text>{{storageSize}}kb</text>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "miniprogram/pages/setting/setting.wxss",
    "content": "/* pages/setting/setting.wxss */\n.subtitle {\n  font-size: 0.8em;\n  padding: 15rpx 30rpx;\n  color: #ababab;\n}\n\n.row-cell {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 30rpx;\n  color: #496069;\n  border-top: 0.1px solid #ccc;\n  border-bottom: 0.1px solid #ccc;\n  background-color: #fff;\n  box-sizing: border-box;\n}\n.row-cell .row-left,\n.row-cell .row-right {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.row-cell .row-icon {\n  width: 1.5em;\n  margin-right: 1em;\n}\n.row-cell .row-icon .iconfont {\n  font-size: 1.5em;\n}\n\n.tips {\n  padding: 30rpx;\n  font-size: 0.9em;\n}"
  },
  {
    "path": "miniprogram/pages/splash/splash.js",
    "content": "// 启动屏\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n  \n  },\n\n  /**\n   * 生命周期函数--监听页面加载\n   */\n  onLoad: function (options) {\n    setTimeout(() => {\n      wx.switchTab({\n        url: '/pages/tabs/discovery/discovery',\n      })\n    },1500)\n  },\n\n})"
  },
  {
    "path": "miniprogram/pages/splash/splash.json",
    "content": "{}"
  },
  {
    "path": "miniprogram/pages/splash/splash.wxml",
    "content": "<!-- 启动闪屏 -->\n<view class='container'>\n  <image src='/assets/images/login_bg.jpg' mode='aspectFill' />\n</view>\n"
  },
  {
    "path": "miniprogram/pages/splash/splash.wxss",
    "content": "/* 启动屏 */\n\npage {\n  height: 100%;\n}\n\nimage {\n  width: 100%;\n  height: 100%;\n  -webkit-animation: fadeOut ease 1.5s forwards;\n  animation: fadeOut ease 1.5s forwards;\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0.1;\n  }\n}\n"
  },
  {
    "path": "miniprogram/pages/tabs/discovery/discovery.js",
    "content": "// import wxCloud from '../../../utils/wxCloud';\nimport { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../store/index';\nimport { getHotMovies } from '../../../apis/douban';\nimport { apiGetBanners } from '../../../apis/vercel';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {\n    circles: [\n      { url: '/packages/article/pages/categories/categories', image: '/assets/images/discovery/icon_classification.png', title: '分类查找' },\n      { url: '/packages/movie/pages/cards/card', image: '/assets/images/discovery/icon_daily.png', title: '每日电影卡片' },\n      { url: '/packages/movie/pages/intheaters/in_theaters', image: '/assets/images/discovery/icon_mood.png', title: '影院热映' },\n    ],\n    cardCur: 0,\n    swiperHide: false,\n    banners: [],\n    nowDay: new Date().getDate(),\n    intheaters: null,\n    movieStart: 0,\n    movieHasMore: true,\n    movieLoading: false\n  },\n\n  storeBindings: {\n    store,\n    fields: ['app']\n  },\n\n  onLoad (options) {\n    wx.getSystemInfo({\n      success: (res) => {\n        this.setData({\n          swiperHeight: res.windowWidth*3/5\n        })\n      },\n    });\n    this.getData();\n    // wxCloud('wxacode')\n    //   .then((res) => {\n    //     console.log('app code ===', res);\n    //   });\n  },\n\n  onShow () {\n    try {\n      this.selectComponent('#tabBar').setData({ selected: 0 });\n    } catch (e) {}\n  },\n\n  handleSwitchTab (e) {\n    const { index, list } = e.detail;\n    wx.switchTab({\n      url: list[index].pagePath\n    });\n  },\n\n  /**\n   * 获取数据\n   */\n  getData () {\n    this.getBanners();\n    this.getHotMovies();\n  },\n\n  /** 获取轮播数据 */\n  async getBanners () {\n    const banners = await apiGetBanners();\n    this.setData({ banners });\n  },\n\n  /** 豆瓣热门 */\n  async getHotMovies () {\n    const { movieStart, intheaters } = this.data;\n    this.setData({ movieLoading: true });\n    const res = await getHotMovies({\n      start: movieStart\n    });\n    const list = res.subject_collection_items || [];\n    this.setData({\n      intheaters: movieStart === 0 ? list : [...intheaters, ...list],\n      movieStart: movieStart + res.count,\n      movieHasMore: res.start + res.count < res.total,\n      movieLoading: false\n    });\n  },\n\n  loadMoreHot () {\n    const { movieLoading, movieHasMore } = this.data;\n    if (!movieLoading && movieHasMore) {\n      this.getHotMovies();\n    }\n  },\n\n  onBannerTap(event) {\n    const { banners } = this.data\n    const { index }=event.currentTarget.dataset\n    const urls = [];\n    for(let item of banners) {\n      urls.push(item.image)\n    }\n    wx.previewImage({\n      current: urls[index],\n      urls,\n    });\n  },\n\n  toDropDown: function() {\n    wx.navigateTo({\n      url: './../marked/marked',\n    })\n  },\n\n  onShareAppMessage (opt) {\n    return {\n      title: \"好用得不得了\",\n      imageUrl: \"http://xpic.588ku.com/figure/00/00/00/08/56/5355a15b1f68dfd.jpg!/fw/800\"\n    }\n  },\n\n  // cardSwiper\n  cardSwiper(e) {\n    this.setData({\n      cardCur: e.detail.current\n    })\n  },\n\n  hideSwiperBg() {\n    this.setData({\n      swiperHide: true,\n    })\n  },\n\n  showSwiperBg() {\n    this.setData({\n      swiperHide: false,\n    })\n  }\n})\n"
  },
  {
    "path": "miniprogram/pages/tabs/discovery/discovery.json",
    "content": "{\n  \"backgroundColor\": \"#ffffff\",\n  \"usingComponents\": {\n    \"tab-bar\": \"/components/tab-bar/index\",\n    \"comp-preImg\": \"/components/pre-image/PreImage\",\n    \"wallpaper-categories\": \"/packages/wallpaper/pages/categories/categories\"\n  }\n}"
  },
  {
    "path": "miniprogram/pages/tabs/discovery/discovery.wxml",
    "content": "<!--发现-->\n<import src=\"/templates/circle/circle.wxml\"/>\n\n<view class='container page-discovery'>\n  <block wx:if='{{app.hasPublished}}'>\n    <navigator url='/pages/search/search' hover-class='none'>\n      <view class='search-bar'>\n        <view class='search-radius btn-opacity'>\n          <image class='icon' src='/assets/images/icon-search.png' mode='aspectFit' />\n          <text>搜索</text>\n        </view>\n      </view>\n    </navigator>\n    <view class='content'>\n      <scroll-view scroll-y enable-back-to-top>\n        <swiper class='banner card-swiper'\n          indicator-dots\n          autoplay\n          indicator-active-color=\"#fff\"\n          circular\n          bindtransition=\"hideSwiperBg\"\n          bindanimationfinish=\"showSwiperBg\"\n          bindchange=\"cardSwiper\">\n          <swiper-item wx:for=\"{{banners}}\" wx:key=\"id\" class=\"{{cardCur==index?'cur':''}}\">\n            <view class='swiper-item'>\n              <image data-index='{{index}}' src=\"{{item.image}}\" class=\"slide-image\"  bindtap='onBannerTap'/>\n            </view>\n          </swiper-item>\n        </swiper>\n  \n        <view class=\"kind-container\">\n          <navigator wx:for='{{circles}}' wx:key='index' class='item-container' hover-class='hover-bg'\n            url='{{item.url}}'\n          >\n            <template is=\"circle\" \n              data=\"{{ imgUrl: item.image, title: item.title }}\"\n            />\n          </navigator>\n        </view>\n  \n        <view class=\"intheaters\" wx:if=\"{{intheaters === null || (intheaters && intheaters.length)}}\">\n          <navigator class=\"intheaters__header\" hover-class=\"hover-opacity\"\n            url=\"/packages/movie/pages/intheaters/in_theaters\"\n          >\n            <view class=\"intheaters__header-title\">豆瓣热门</view>\n            <image class=\"intheaters__header-arrow\" src=\"/assets/images/discovery/icon-arrow.png\" mode=\"aspectFit\" />\n          </navigator>\n          <scroll-view class=\"intheaters__movies\" scroll-x\n            lower-threshold=\"{{200}}\"\n            bindscrolltolower=\"loadMoreHot\"\n          >\n            <block wx:for=\"{{intheaters || ['','','','']}}\" wx:key=\"id\">\n              <navigator class=\"movie-item\"\n                url=\"{{item && '/packages/movie/pages/details/details?title=' + item.title + '&id=' + item.id}}\"\n              >\n                <image class=\"movie-item__img\" src=\"{{item.cover.url}}\" mode=\"aspectFill\" />\n                <view class=\"movie-item__info\">\n                  <block wx:if=\"{{item}}\">\n                    <view class=\"movie-item__name\">{{item.title}}</view>\n                    <view class=\"movie-item__rate\">{{item.rating.value > 0 ? item.rating.value + '分（豆瓣）' : '暂无评分'}}</view>\n                  </block>\n                  <block wx:else>\n                    <view class=\"movie-item__name skeleton\">  </view>\n                  </block>\n                </view>\n              </navigator>\n            </block>\n          </scroll-view>\n        </view>\n        <tab-bar id=\"tabBar\" bind:change=\"handleSwitchTab\" placeholder />\n      </scroll-view>\n    </view>\n  </block>\n  <wallpaper-categories wx:else />\n</view>"
  },
  {
    "path": "miniprogram/pages/tabs/discovery/discovery.wxss",
    "content": "/* pages/discovery/discovery.wxss */\n@import \"/templates/circle/circle.wxss\";\n@import '/templates/bing/bing.wxss';\n\npage {\n  height: 100%;\n  background-color: #fff;\n}\n.page-discovery .search-bar {\n  padding: 24rpx 48rpx;\n  background: #fff;\n}\n.search-bar .search-radius {\n  display: flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #999;\n  padding: 0 28rpx;\n  height: 72rpx;\n  border-radius: 72rpx;\n  box-shadow:2px 2px 10px 0px rgba(0,0,0,0.15);\n}\n.search-bar .search-radius .icon {\n  width: 48rpx;\n  height: 48rpx;\n}\n.search-bar .search-radius text {\n  margin-left: 15rpx;\n}\n\n.page-discovery .content {\n  display: flex;\n  flex: 1;\n}\n\n/*================== swiper ================*/\n.banner {\n  height: 300rpx;\n  position: relative;\n}\n\n/* .banner::after {\n  content: '';\n  display: block;\n  position: absolute;\n  z-index: -1;\n  left: 0;\n  right: 0;\n  width: 500rpx;\n  height: 300rpx;\n  bottom: -2rpx;\n  margin: 0 auto;\n  background: #ffe200;\n  border-radius: 10rpx;\n  filter: blur(5rpx);\n} */\n\n.slide-image {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n.card-swiper swiper-item {\n  width: 654rpx !important;\n  left: 48rpx;\n  box-sizing: border-box;\n  /* padding: 30rpx 0rpx 10rpx; */\n}\n\n.card-swiper swiper-item .swiper-item {\n  width: 100%;\n  display: block;\n  height: 100%;\n  border-radius: 10rpx;\n  transform: scaleX(0.95) scaleY(0.9);\n  transition: all 0.2s ease-in 0s;\n  overflow: hidden;\n  position: relative;\n}\n\n.card-swiper swiper-item.cur .swiper-item {\n  transform: none;\n  transition: all 0.2s ease-in 0s;\n}\n/*================== swiper end ================*/\n\n.kind-container {\n  display: flex;\n  flex-direction: row;\n  margin-top: 20rpx;\n  padding: 0 30rpx;\n}\n.item-container {\n  flex: 1;\n}\n.article-item-container {\n  margin-top: 15rpx;\n  border-bottom: .5px solid #ddd;\n}\n\n/*================== 影院热映 start =====================*/\n.intheaters__header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 20rpx 30rpx;\n}\n\n.intheaters__header-title {\n  font-size: 32rpx;\n}\n\n.intheaters__header-arrow {\n  width: 18rpx;\n  height: 28rpx;\n}\n\n.intheaters__movies {\n  white-space: nowrap;\n}\n\n.movie-item {\n  display: inline-block;\n  width: 210rpx;\n  background-color: #fff;\n  margin-right: 20rpx;\n}\n\n.movie-item:first-child {\n  margin-left: 30rpx;\n}\n\n.movie-item:last-child {\n  margin-right: 30rpx;\n}\n\n.movie-item__img {\n  display: block;\n  width: 210rpx;\n  height: 280rpx;\n  border-radius: 8rpx;\n  font-size: 0;\n  background-color: #eee;\n}\n\n.movie-item__info {\n  padding-top: 20rpx;\n}\n\n.movie-item__name {\n  color: #999;\n  font-size: 22rpx;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.movie-item__name.skeleton {\n  width: 5em;\n  height: 1.4em;\n  border-radius: 4rpx;\n  background-color: #eee;\n}\n\n.movie-item__rate {\n  color: #999;\n  font-size: 18rpx;\n}\n/*============= 影院热映 end ===============*/\n"
  },
  {
    "path": "miniprogram/pages/tabs/index/index.js",
    "content": "import { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../store/index';\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  data: {},\n\n  storeBindings: {\n    store,\n    fields: {\n      user: () => store.user,\n      app: () => store.app\n    }\n  },\n\n  onShow () {\n    this.selectComponent('#tabBar').setData({ selected: 2 });\n  },\n\n  handleSwitchTab (e) {\n    const { index, list } = e.detail;\n    wx.switchTab({\n      url: list[index].pagePath\n    });\n  },\n\n  /** 进入个人资料 */\n  handleUserTap (e) {\n    if (store.user.info && store.user.info.name) {\n      wx.navigateTo({\n        url: '/packages/user/pages/userinfo/userinfo'\n      });\n    } else {\n      wx.navigateTo({\n        url: '/packages/douban/pages/login-phone/login-phone'\n      });\n    }\n  },\n\n  toGitMark () {\n    wx.navigateTo({\n      url: '/packages/wallpaper/pages/categories/categories'\n    });\n  },\n\n  /** 去设置 */\n  toSetting() {\n    wx.navigateTo({\n      url: '/pages/setting/setting',\n    })\n  },\n\n  /** 关于 */\n  toAbout() {\n    wx.navigateTo({\n      url: '/pages/about/about',\n    })\n  },\n\n  /** 转发 */\n  onShareAppMessage(opt) {\n    return {\n      title: \"好用得不得了\",\n      path: \"/pages/tabs/discovery/discovery\",\n      imageUrl: \"http://xpic.588ku.com/figure/00/00/00/08/56/5355a15b1f68dfd.jpg!/fw/800\"\n    };\n  },\n\n  /** 我喜欢的影单 */\n  toFavMovieList() {\n    wx.navigateTo({\n      url: '/packages/user/pages/favMovieList/index',\n    })\n  },\n\n  /** 我喜欢的卡片 */\n  toFavCards() {\n    wx.navigateTo({\n      url: '/packages/user/pages/favCards/index',\n    })\n  },\n\n  /** 作出评价 */\n  toEvalute () {\n    wx.navigateTo({\n      url: '/packages/github/pages/trending/trending'\n    });\n    // wx.navigateTo({\n    //   url: '/packages/user/pages/evaluate/evaluate',\n    // })\n  },\n\n  navigate (e) {\n    const { url } = e.currentTarget.dataset;\n    wx.navigateTo({ url });\n  }\n\n})\n"
  },
  {
    "path": "miniprogram/pages/tabs/index/index.json",
    "content": "{\n  \"navigationBarBackgroundColor\": \"#ffe200\",\n  \"backgroundColorTop\": \"#ffe200\",\n  \"backgroundColorBottom\": \"#ffffff\",\n  \"usingComponents\": {\n    \"tab-bar\": \"/components/tab-bar/index\"\n  }\n}"
  },
  {
    "path": "miniprogram/pages/tabs/index/index.wxml",
    "content": "<!--index.wxml-->\n<import src='/templates/cell/cell' />\n\n<view class=\"container page-user\">\n  <view class='page-header'>\n    <view class='bg'></view>\n    <view class=\"userinfo\">\n      <button class=\"button-nostyle cell-left\" bindtap=\"handleUserTap\">\n        <view class=\"userinfo-avatar btn-opacity\">\n          <image class=\"img\" wx:if=\"{{user.info && user.info.avatar}}\" src=\"{{user.info.avatar}}\" mode=\"aspectFill\" />\n          <open-data wx:else type='userAvatarUrl' />\n        </view>\n        <view class='userinfo__right'>\n          <view class=\"userinfo-nickname\">{{user.info.name || '匿名用户'}}</view>\n          <view class='userinfo__extra'>这里什么都没有，快去标记啦</view>\n        </view>\n      </button>\n      <view class='actions'>\n        <view class='actions-item btn-opacity' bindtap='toFavMovieList'>\n          <image class='actions-item__icon' src='/assets/images/mine/icon-movielist.png' mode='aspectFit'></image>\n          <view class='actions-item__name'>影单</view>\n        </view>\n        <view class='actions-item btn-opacity' bindtap='toFavCards'>\n          <image class='actions-item__icon' src='/assets/images/mine/icon-card.png' mode='aspectFit'></image>\n          <view class='actions-item__name'>卡片</view>\n        </view>\n        <view class='actions-item btn-opacity'\n          data-url=\"/packages/user/pages/achievement/achievement\"\n          bindtap=\"navigate\"\n        >\n          <image class='actions-item__icon' src='/assets/images/mine/icon-achievement.png' mode='aspectFit'></image>\n          <view class='actions-item__name'>成就</view>\n        </view>\n      </view>\n    </view>\n  </view>\n\n  <view class='row-list'>\n    <!-- <template is='row-cell' data='{{iconPath:\"/assets/images/mine/icon-record.png\",title:\"影视档案\",bindTap:\"toEvalute\"}}' /> -->\n    <template is='row-cell' data='{{iconPath:\"/assets/images/mine/icon-setting.png\",title:\"设置\",bindTap:\"toSetting\"}}' />\n    <button class='contactBtn' open-type='contact' hover-class='none'>\n      <template is='row-cell' data='{{iconPath:\"/assets/images/mine/icon-contact.png\",title:\"在线客服\"}}' />\n    </button>\n    <button class='contactBtn' open-type='feedback' hover-class='none'>\n      <template is='row-cell' data='{{iconPath:\"/assets/images/mine/icon-feedback.png\",title:\"意见反馈\"}}' />\n    </button>\n    <template is=\"row-cell\" data=\"{{iconPath:'/assets/images/mine/icon-lab.svg',title:'壁纸',bindTap:'toGitMark'}}\" />\n    <template is='row-cell' data='{{iconPath:\"/assets/images/mine/icon-about.png\",title:\"关于\",subtitle:\"v\"+app.version,bindTap:\"toAbout\"}}' />\n  </view>\n</view>\n<tab-bar id=\"tabBar\" bind:change=\"handleSwitchTab\" placeholder />\n"
  },
  {
    "path": "miniprogram/pages/tabs/index/index.wxss",
    "content": "/**index.wxss**/\n@import '/templates/cell/cell';\n\npage {\n  background: #fff;\n}\n.page-user {\n  overflow-x: hidden;\n}\n\n.page-header {\n  position: relative;\n  box-sizing: border-box;\n  padding: 40rpx 24rpx 24rpx;\n}\n.page-header .bg {\n  position: absolute;\n  z-index: -1;\n  top: 0;\n  left: -30rpx;\n  right: -30rpx;\n  height: 310rpx;\n  background: #FFE200;\n  border-radius:100% / 0% 0% 50% 50%;\n}\n.userinfo {\n  border-radius: 16rpx;\n  padding: 30rpx;\n  background-color: #fff;\n  box-shadow: 0 4rpx 18rpx 0 #FFE200;\n}\n.userinfo .cell-left {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.userinfo .cell-left .userinfo-avatar {\n  width: 128rpx;\n  height: 128rpx;\n  background-color: #f7f7f7;\n  border-radius: 50%;\n  overflow: hidden;\n  box-shadow: 0 0 8rpx #FFE200;\n}\n.userinfo .cell-left .userinfo-avatar .img {\n  width: 100%;\n  height: 100%;\n}\n\n.userinfo__right {\n  margin-left: 18rpx;\n}\n.userinfo-nickname {\n  font-size: 32rpx;\n  color: #333;\n}\n.userinfo__extra {\n  color: #999;\n  font-size: 26rpx;\n}\n\n.actions {\n  display: flex;\n  align-items: center;\n  margin-top: 48rpx;\n}\n.actions-item {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n.actions-item__icon {\n  width: 64rpx;\n  height: 60rpx;\n}\n.actions-item__name {\n  color: #999;\n  font-size: 26rpx;\n  line-height: 1;\n  margin-top: 16rpx;\n}\n\n.page-user .contactBtn {\n   width:100%;\n   border:none;\n   border-radius: 0;\n   padding:0;\n   margin:0;\n   font-size: 1em;\n   position: static;\n   line-height: normal;\n}\n.page-user .contactBtn::after {\n  content: none;\n}\n"
  },
  {
    "path": "miniprogram/pages/tabs/movies/movies.js",
    "content": "import { storeBindingsBehavior } from 'mobx-miniprogram-bindings';\nimport { store } from '../../../store/index';\nimport { $markDropmenu } from '../../../templates/index.js';\nimport { getUserInterests } from '../../../apis/douban.js';\nimport { emitter, events } from '../../../utils/events';\n\nvar app = getApp();\nlet pageNo = 0;\nconst pageSize = 18;\n\nPage({\n  behaviors: [storeBindingsBehavior],\n\n  scrollTop: 0,\n\n  data: {\n    /** @type {Array<{ key: DouBan.InterestStatus; title: string; }>} */\n    tabs: [\n      { key: 'mark', title: '想看' },\n      { key: 'done', title: '已看' },\n      { key: 'doing', title: '在看' }\n    ],\n    currentNav: 0,\n    loading: true,\n    loadmore: true,\n    movies: [],\n    total: 0,\n    /** 可在线播放的数量 */\n    linewatchCount: 0,\n    isGrid: app.globalData.setting.wantSee?app.globalData.setting.wantSee.layout === 'grid':false,\n    sortId: app.globalData.setting.wantSee ? app.globalData.setting.wantSee.sort : 'addTime',\n    sticky: true\n  },\n\n  storeBindings: {\n    store,\n    fields: {\n      douban: () => store.douban\n    }\n  },\n\n  onLoad(options) {\n    this.getMovies()\n    this.setData({\n      isGrid: app.globalData.setting.wantSee ? app.globalData.setting.wantSee.layout === 'grid' : false,\n      sortId: app.globalData.setting.wantSee ? app.globalData.setting.wantSee.sort : 'addTime'\n    })\n    this.showDoubanTip();\n    emitter.on(events.LOGIN_SUCCESS, this.getMovies);\n    emitter.on(events.TAB_MOVIES_UPDATE, this.getMovies);\n  },\n\n  onShow() {\n    this.selectComponent('#tabBar').setData({ selected: 1 });\n  },\n\n  /** 页面隐藏 */\n  onHide(options) {\n    this.dropMenu && this.dropMenu();\n  },\n\n  onUnload() {\n    emitter.off(events.TAB_MOVIES_UPDATE, this.getMovies);\n    emitter.off(events.LOGIN_SUCCESS, this.getMovies);\n  },\n\n  /** 页面相关事件处理函数--监听用户下拉动作 */\n  onPullDownRefresh() {\n    pageNo = 0;\n    this.getMovies()\n  },\n\n  /** 页面上拉触底事件的处理函数 */\n  onReachBottom() {\n    if(this.data.loadmore) {\n      pageNo++;\n      this.setData({\n        loading: true\n      });\n      this.getMovies()\n    }\n  },\n\n  showDoubanTip () {\n    if (!store.douban.accessToken) {\n      wx.showModal({\n        title: '提示',\n        content: '列表默认展示的是开发者的信息，可去个人中心登录豆瓣账号以展示自己的信息',\n        confirmText: '立即登录',\n        cancelText: '稍后登录',\n        confirmColor: '#ffe200',\n        success: ({ confirm }) => {\n          if (confirm) {\n            wx.navigateTo({\n              url: '/packages/douban/pages/login-phone/login-phone'\n            });\n          }\n        }\n      });\n    }\n  },\n\n  handleSwitchTab (e) {\n    const { index, list } = e.detail;\n    wx.switchTab({\n      url: list[index].pagePath\n    });\n  },\n\n  async getMovies() {\n    const { tabs, currentNav, linewatchCount } = this.data;\n    wx.showNavigationBarLoading();\n    const res = await getUserInterests(\n      store.douban.user?.id ?? '158948115',\n      {\n        type: 'movie',\n        status: tabs[currentNav].key,\n        start: pageNo * pageSize,\n        count: pageSize\n      }\n    );\n    wx.stopPullDownRefresh();\n    const list = res.interests || [];\n    const lineCount = list.filter((item) => item.subject && item.subject.has_linewatch).length;\n    this.setData({\n      loading: false,\n      movies: pageNo ? [...this.data.movies, ...list] : list,\n      total: res.total,\n      linewatchCount: pageNo ? linewatchCount + lineCount : lineCount,\n      loadmore: list.length >= pageSize\n    });\n    wx.hideNavigationBarLoading();\n  },\n\n  /** 改变 Tab */\n  changeTab(e) {\n    const { nav } = e.currentTarget.dataset;\n    const { currentNav } = this.data;\n    if (currentNav != nav) {\n      pageNo = 0;\n      wx.pageScrollTo({\n        scrollTop: 0\n      });\n      this.setData({\n        currentNav: nav\n      }, () => {\n        this.getMovies();\n      });\n    }\n  },\n\n  bindViewTap(event) {\n    const { id, title, type } = event.currentTarget.dataset;\n    wx.navigateTo({\n      url: `/packages/movie/pages/details/details?title=${title}&id=${id}&type=${type}`,\n    })\n  },\n\n  /** 改变布局方式 */\n  changeLayout() {\n    const { isGrid } = this.data;\n    let { wantSee } = app.globalData.setting;\n    wantSee = { ...wantSee, layout: isGrid ? 'linear' : 'grid'}\n    wx.setStorage({\n      key: 'setting',\n      data: { ...app.globalData.setting, wantSee },\n    })\n    this.dropMenu && this.dropMenu(); // 如果排序菜单已打开则关闭\n    this.setData({ \n      isGrid: !isGrid\n    }, () => {\n      app.globalData.setting = { ...app.globalData.setting, wantSee };\n    });\n  },\n\n  /** 改变排序方式 */\n  changeSort() {\n    this.dropMenu = this.dropMenu ? this.dropMenu() : $markDropmenu.show({\n      titleText: '',\n      buttons: [\n        { id:'addTime', title: '最近添加' },\n        { id:'filmTime', title: '上映日期' },\n        { id:'rating', title: '豆瓣评分' },\n        { id:'filmName', title: '电影名称' },\n      ],\n      choosedId: this.data.sortId,\n      onChange: (index, item) => {\n        this.setData({\n          sortId: item.id\n        }, () => {\n          let { wantSee } = app.globalData.setting;\n          wantSee = { ...wantSee, sort: item.id };\n          wx.setStorage({\n            key: 'setting',\n            data: { ...app.globalData.setting, wantSee },\n          })\n        })\n        return true;\n      },\n      cancel: () => {\n        this.dropMenu = null;\n      }\n    });\n  },\n\n  onPageScroll(e) {\n    const { scrollTop } = e\n    if (scrollTop < this.scrollTop && !this.data.sticky) {\n      this.setData({\n        sticky: true,\n      })\n    } else if (scrollTop > this.scrollTop && this.data.sticky) {\n      this.setData({\n        sticky: false,\n      })\n    }\n    this.scrollTop = scrollTop\n  },\n})"
  },
  {
    "path": "miniprogram/pages/tabs/movies/movies.json",
    "content": "{\n  \"enablePullDownRefresh\": false,\n  \"usingComponents\": {\n    \"tab-bar\": \"/components/tab-bar/index\"\n  }\n}"
  },
  {
    "path": "miniprogram/pages/tabs/movies/movies.wxml",
    "content": "<!--电影列表-->\n<import src='/templates/movie/movieRow' />\n<import src='/templates/loading/loading' />\n<import src='/templates/dropmenu/dropmenu' />\n\n<template is='temp-dropmenu' data='{{...$mark.dropMenu}}' />\n<view class='container page-movie'>\n  <!-- Tabs -->\n  <view class='tabs'>\n    <view wx:for='{{tabs}}' wx:key='key' class='tabs-item{{currentNav==index?\" is-active\":\"\"}}'\n      bindtap='changeTab' data-nav='{{index}}'>\n      <view class='tabs-item__content'>{{item.title}}</view>\n    </view>\n  </view>\n  <view class='topbar {{sticky && \"sticky\"}}'>\n    <view class='layout btn-opacity' bindtap='changeLayout'>\n      <!-- <image src='{{isGrid?\"/assets/images/list_mode_icon.png\":\"/assets/images/gird_mode_icon.png\"}}' mode='widthFix' /> -->\n      <text>共{{total}}部，{{linewatchCount}}部可播放</text>\n    </view>\n    <view>\n      <view class='sort btn-opacity' bindtap='changeSort'>\n        <text>排序</text>\n        <view class='arrow-down' />\n      </view>\n      <view class='sort btn-opacity' bindtap='changeSort'>\n        <text>筛选</text>\n        <view class='arrow-down' />\n      </view>\n    </view>\n  </view>\n\n  <view class='content'>\n    <view wx:if='{{isGrid}}' class='movie-container'>\n      <block wx:for='{{movies}}' wx:key='id'>\n        <view data-title=\"{{item.subject.title}}\"\n          data-id=\"{{item.subject.id}}\"\n          data-type=\"{{item.subject.type}}\"\n          bindtap=\"bindViewTap\">\n          <template \n            is=\"item-movie_grid\" \n            data=\"{{...item.subject}}\">\n          </template>\n        </view>\n      </block>\n    </view>\n    \n    <block wx:for='{{movies}}' wx:key='id' wx:if='{{!isGrid}}'>\n      <view data-title=\"{{item.subject.title}}\"\n          data-id=\"{{item.subject.id}}\"\n          data-type=\"{{item.subject.type}}\"\n          bindtap=\"bindViewTap\">\n        <template \n          is=\"item-movie_row\" \n          data=\"{{...item.subject}}\">\n        </template>\n      </view>\n    </block>\n\n    <template is='loading-more' wx:if=\"{{loading}}\" />\n  </view>\n</view>\n<tab-bar id=\"tabBar\" bind:change=\"handleSwitchTab\" placeholder />\n"
  },
  {
    "path": "miniprogram/pages/tabs/movies/movies.wxss",
    "content": "/* pages/movies/movies.wxss */\n@import '/templates/movie/movieRow';\n@import '/templates/dropmenu/dropmenu';\n\n.page-movie {\n  padding-top: 74rpx;\n  height: 100%;\n}\n.page-movie .tabs {\n  /* border-bottom: 0.5px solid #eee; */\n}\n.page-movie .tabs::after {\n  content: '';\n  position: absolute;\n  z-index: 1;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 1px;\n  background: #eee;\n  transform: scaleY(0.5);\n}\n\n.page-movie .topbar {\n  /* position: fixed; */\n  position: sticky;\n  width: 100%;\n  height: 3em;\n  top: calc(74rpx - 3em);\n  z-index: 12;\n  background-color: #fff;\n  display: flex;\n  align-items: center;\n  padding: 0 30rpx;\n  box-sizing: border-box;\n  justify-content: space-between;\n  transition: top .3s;\n}\n.page-movie .topbar.sticky {\n  top: 74rpx;\n}\n.page-movie .topbar .layout > image {\n  width: 1.5em;\n  height: .8em;\n}\n.layout,\n.sort {\n  display: inline-flex;\n  align-items: center;\n  font-size: 22rpx;\n  color: #ccc;\n}\n.sort {\n  line-height: 32rpx;\n  box-sizing: content-box;\n  border: 2rpx solid #ccc;\n  border-radius: 18rpx;\n  padding: 0 10rpx;\n}\n.sort + .sort {\n  margin-left: 20rpx;\n}\n.sort .arrow-down {\n  margin-left: 8rpx;\n  width: 11rpx;\n  height: 11rpx;\n  border-color: #ccc;\n}\n.sort>image {\n  width: .8em;\n  height: .8em;\n  margin-left: .3em;\n}\n\n.content {\n  position: relative;\n  overflow: hidden;\n  height: 100%;\n}\n.page-movie .movie-container {\n  padding: 10rpx;\n  box-sizing: border-box;\n  display: flex;\n  flex-wrap: wrap;\n}\n.page-movie .movie-container>view {\n  width: 33.33%;\n  display: -ms-inline-grid;\n  border: 10rpx solid transparent;\n  box-sizing: border-box;\n}\n"
  },
  {
    "path": "miniprogram/pages/test/test.js",
    "content": "// miniprogram/pages/test/test.js\nimport wxCloud from '../../utils/wxCloud.js'\n\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面加载\n   */\n  onLoad: function (options) {\n    \n  },\n\n  handleSubscribeTap() {\n    wx.requestSubscribeMessage({\n      tmplIds: ['sJz8Heo9GSqMwhnJFlpEHbm-rmIhUlhOkEOoSvY6BwE'],\n      fail(err) {\n        console.error(err)\n      }\n    })\n  },\n\n  handleTempTap() {\n    wxCloud('subscribeMessage').then(res => {\n      console.log('调用成功', res)\n    }).catch(err => {\n      console.error('调用失败')\n      console.error(err)\n    })\n  },\n\n  /**\n   * 生命周期函数--监听页面初次渲染完成\n   */\n  onReady: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面显示\n   */\n  onShow: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面隐藏\n   */\n  onHide: function () {\n\n  },\n\n  /**\n   * 生命周期函数--监听页面卸载\n   */\n  onUnload: function () {\n\n  },\n\n  /**\n   * 页面相关事件处理函数--监听用户下拉动作\n   */\n  onPullDownRefresh: function () {\n\n  },\n\n  /**\n   * 页面上拉触底事件的处理函数\n   */\n  onReachBottom: function () {\n\n  },\n\n  /**\n   * 用户点击右上角分享\n   */\n  onShareAppMessage: function () {\n\n  }\n})"
  },
  {
    "path": "miniprogram/pages/test/test.json",
    "content": "{\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "miniprogram/pages/test/test.wxml",
    "content": "<view class=\"container\">\n  <button bindtap=\"handleSubscribeTap\">订阅</button>\n  <button bindtap=\"handleTempTap\">发送模版消息</button>\n</view>"
  },
  {
    "path": "miniprogram/pages/test/test.wxss",
    "content": "/* miniprogram/pages/test/test.wxss */"
  },
  {
    "path": "miniprogram/pages/webview/index.js",
    "content": "// webview\nPage({\n\n    data: {\n        url: '',\n    },\n\n    /** 生命周期函数--监听页面加载 */\n    onLoad(options) {\n        this.setData({\n            url: options.url,\n        })\n    },\n\n    /** 页面相关事件处理函数--监听用户下拉动作 */\n    onPullDownRefresh() {\n\n    },\n\n    /**  用户点击右上角分享 */\n    onShareAppMessage(options) {\n        console.log(options.webViewUrl)\n    },\n})"
  },
  {
    "path": "miniprogram/pages/webview/index.json",
    "content": "{\n  \"navigationBarTitleText\": \"iMark\"\n}"
  },
  {
    "path": "miniprogram/pages/webview/index.wxml",
    "content": "<!--pages/webview/index.wxml-->\n<web-view src='{{url}}'></web-view>\n"
  },
  {
    "path": "miniprogram/pages/webview/index.wxss",
    "content": "/* pages/webview/index.wxss */"
  },
  {
    "path": "miniprogram/sitemap.json",
    "content": "{\n  \"desc\": \"发现好电影，Mark 电影，by Honye\",\n  \"rules\": [\n    {\n      \"action\": \"disallow\",\n      \"page\": \"pages/splash/splash\"\n    },\n    {\n      \"action\": \"allow\",\n      \"page\": \"*\"\n    }\n  ]\n}"
  },
  {
    "path": "miniprogram/store/app.js",
    "content": "export default {\n  version: '1.1.18',\n  hasPublished: false,\n\n  update (data = {}) {\n    for (const key in data) {\n      this[key] = data[key];\n    }\n  }\n}\n"
  },
  {
    "path": "miniprogram/store/douban.js",
    "content": "export default {\n  accessToken: '',\n  refreshToken: '',\n  /** @type {Douban.AccountInfo | null} */\n  user: null,\n  \n  update (data = {}) {\n    for (const key in data) {\n      this[key] = data[key];\n    }\n  },\n\n  /**\n   * // FIXME async 函数时更新存在问题，视图先更新，状态后变化\n   */\n  logout() {\n    this.accessToken = '';\n    this.refreshToken = '';\n    this.user = null;\n  },\n}\n"
  },
  {
    "path": "miniprogram/store/index.js",
    "content": "import { observable, action } from 'mobx-miniprogram';\nimport app from './app';\nimport user from './user';\nimport douban from './douban';\n\n/**\n * @template {Record<string, any>} T\n * @param {T} modules { moduleA: any, moduleB: any }\n * @returns {T}\n */\nconst scopeModule = (modules) => {\n  Object.keys(modules).forEach((key, index) => {\n    const value = modules[key];\n    if (Object.prototype.toString.call(value) === '[object Object]') {\n      Object.keys(value).forEach((mKey) => {\n        const mValue = value[mKey];\n        if (typeof mValue === 'function') {\n          modules[`${key}/${mKey}`] = action(function (...args) {\n            mValue.call(value, ...args);\n            this[key] = Object.assign({}, value);\n          });\n          delete value[mKey];\n        }\n      });\n    }\n  });\n  return modules;\n};\n\nexport const store = observable(scopeModule({\n  app,\n  user,\n  douban\n}));\n\n// export const store = observable({\n//   app: {\n//     version: '1.0.14',\n//     hasPublished: false\n//   },\n//   'app/update': action(function (data = {}) {\n//     this.app = Object.assign({}, this.app, data);\n//   }),\n\n//   user: {\n//     info: null\n//   },\n//   'user/updateUserInfo': action(function (userInfo) {\n//     this.user = Object.assign({}, this.user, { info: userInfo });\n//   }),\n\n//   douban: {\n//     accessToken: '',\n//     refreshToken: '',\n//     /**\n//      * @type {{\n//      * name: string;\n//      * weixin_binded: boolean;\n//      * phone: string;\n//      * avatar: { medium: string; median: string; large: string; raw: string; small: string; icon: string; };\n//      * id: string;\n//      * uid: string;\n//      * }|null}\n//      */\n//     user: null\n//   },\n//   'douban/update': action(function (data = {}) {\n//     this.douban = Object.assign({}, this.douban, data);\n//   })\n// });\n"
  },
  {
    "path": "miniprogram/store/user.js",
    "content": "export default {\n  /** @type {UserInfo} */\n  info: null,\n\n  updateUserInfo (userInfo) {\n    this.info = userInfo;\n  }\n}\n\n/**\n * @typedef {{\n * avatarUrl?: string;\n * gender: 0|1;\n * nickName?: string;\n * oepnid: string;\n * unionid: string;\n * }} UserInfo\n */\n"
  },
  {
    "path": "miniprogram/style/animate.wxss",
    "content": "@-webkit-keyframes refresh-spin {\n    0% {\n        -webkit-transform: translateZ(0) rotate(0)\n    }\n\n    to {\n        -webkit-transform: translateZ(0) rotate(180deg)\n    }\n}\n\n@keyframes refresh-spin {\n    0% {\n        transform: translateZ(0) rotate(0)\n    }\n\n    to {\n        transform: translateZ(0) rotate(180deg)\n    }\n}\n\n@-webkit-keyframes refresh-spin-back {\n    0% {\n        -webkit-transform: translateZ(0) rotate(180deg)\n    }\n\n    to {\n        -webkit-transform: translateZ(0) rotate(0)\n    }\n}\n\n@keyframes refresh-spin-back {\n    0% {\n        transform: translateZ(0) rotate(180deg)\n    }\n\n    to {\n        transform: translateZ(0) rotate(0)\n    }\n}\n\n@-webkit-keyframes refresh-spin-rotate {\n    100% {\n        -webkit-transform: rotate(360deg);\n    }\n}\n\n@keyframes refresh-spin-rotate {\n    100% {\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n\n@-webkit-keyframes slideUp {\n    0% {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0)\n    }\n\n    to {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n}\n\n@keyframes slideUp {\n    0% {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0)\n    }\n\n    to {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n}\n\n.weui-animate-slide-up {\n    -webkit-animation: slideUp ease .3s forwards;\n    animation: slideUp ease .3s forwards\n}\n\n@-webkit-keyframes slideRight {\n    0% {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0)\n    }\n\n    to {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n}\n\n@keyframes slideRight {\n    0% {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0)\n    }\n\n    to {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n}\n\n.weui-animate-slide-right {\n    -webkit-animation: slideRight ease .3s forwards;\n    animation: slideRight ease .3s forwards\n}\n\n@-webkit-keyframes slideDown {\n    0% {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0)\n    }\n}\n\n@keyframes slideDown {\n    0% {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0)\n    }\n}\n\n.weui-animate-slide-down {\n    -webkit-animation: slideDown ease .3s forwards;\n    animation: slideDown ease .3s forwards\n}\n\n@-webkit-keyframes slideLeft {\n    0% {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n\n    to {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0)\n    }\n}\n\n@keyframes slideLeft {\n    0% {\n        -webkit-transform: translateZ(0);\n        transform: translateZ(0)\n    }\n\n    to {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0)\n    }\n}\n\n.weui-animate-slide-left {\n    -webkit-animation: slideLeft ease .3s forwards;\n    animation: slideLeft ease .3s forwards\n}\n\n@-webkit-keyframes fadeIn {\n    0% {\n        opacity: 0\n    }\n\n    to {\n        opacity: 1\n    }\n}\n\n@keyframes fadeIn {\n    0% {\n        opacity: 0\n    }\n\n    to {\n        opacity: 1\n    }\n}\n\n.weui-animate-fade-in {\n    -webkit-animation:fadeIn ease .3s forwards;\n    animation:fadeIn ease .3s forwards;\n}\n\n@-webkit-keyframes fadeOut {\n    0% {\n        opacity: 1\n    }\n\n    to {\n        opacity: 0\n    }\n}\n\n@keyframes fadeOut {\n    0% {\n        opacity: 1\n    }\n\n    to {\n        opacity: 0\n    }\n}\n\n.weui-animate-fade-out {\n    -webkit-animation: fadeOut ease .3s forwards;\n    animation: fadeOut ease .3s forwards\n}\n\n@-webkit-keyframes notify-downin {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translate3d(0, -50px, 0);\n\t\ttransform: translate3d(0, -50px, 0)\n\t}\n\n\tto {\n\t\topacity: 1;\n\t\t-webkit-transform: translateZ(0);\n\t\ttransform: translateZ(0)\n\t}\n}\n\n@keyframes notify-downin {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translate3d(0, -50px, 0);\n\t\ttransform: translate3d(0, -50px, 0)\n\t}\n\n\tto {\n\t\topacity: 1;\n\t\t-webkit-transform: translateZ(0);\n\t\ttransform: translateZ(0)\n\t}\n}\n\n.weui-animate-notify-downin {\n    -webkit-animation: notify-downin .3s linear forwards;\n    animation: notify-downin .3s linear forwards\n}\n\n@-webkit-keyframes notify-upout {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateZ(0);\n\t\ttransform: translateZ(0)\n\t}\n\n\tto {\n\t\topacity: 0;\n\t\t-webkit-transform: translate3d(0, -50px, 0);\n\t\ttransform: translate3d(0, -50px, 0)\n\t}\n}\n\n@keyframes notify-upout {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateZ(0);\n\t\ttransform: translateZ(0)\n\t}\n\n\tto {\n\t\topacity: 0;\n\t\t-webkit-transform: translate3d(0, -50px, 0);\n\t\ttransform: translate3d(0, -50px, 0)\n\t}\n}\n\n.weui-animate-notify-upout {\n    -webkit-animation: notify-upout .3s linear forwards;\n    animation: notify-upout .3s linear forwards\n}\n\n@-webkit-keyframes notification-in {\n    0% {\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes notification-in {\n    0% {\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.notification.notification-in {\n    -webkit-animation: notification-in .4s;\n    animation: notification-in .4s;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n}\n\n@-webkit-keyframes dropUp {\n    0% {\n        -webkit-transform: translate3d(0);\n        transform: translate3d(0)\n    }\n\n    to {\n        -webkit-transform: translateY(-100%);\n        transform: translateY(-100%)\n    }\n}\n\n@keyframes dropUp {\n    0% {\n        -webkit-transform: translate3d(0);\n        transform: translate3d(0)\n    }\n\n    to {\n        -webkit-transform: translateY(-100%);\n        transform: translateY(-100%)\n    }\n}\n\n@-webkit-keyframes dropDown {\n    0% {\n        -webkit-transform: translateY(-100%);\n        transform: translateY(-100%)\n    }\n\n    to {\n        -webkit-transform: translate3d(0);\n        transform: translate3d(0)\n    }\n}\n\n@keyframes dropDown {\n    0% {\n        -webkit-transform: translateY(-100%);\n        transform: translateY(-100%)\n    }\n\n    to {\n        -webkit-transform: translate3d(0);\n        transform: translate3d(0)\n    }\n}\n\n.weui-animate-drop-up {\n    -webkit-animation: dropUp ease .3s forwards;\n    animation: dropUp ease .3s forwards\n}\n.weui-animate-drop-down {\n    -webkit-animation: dropDown ease .3s forwards;\n    animation: dropDown ease .3s forwards\n}"
  },
  {
    "path": "miniprogram/style/common.wxss",
    "content": "/* 公用样式 */\npage {\n  --color-primary: #FFE200;\n}\n\npage {\n  background-color: #f7f7f7;\n  min-height: 100%;\n  /* font-size: 28rpx; */\n}\n\nview[hidden] {\n  display: none !important;\n}\n\nimage {\n  height: auto;\n}\n\n.container {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  box-sizing: border-box;\n  color: #3f3f3f;\n}\n\n.arrow-right,\n.arrow-down {\n  display: inline-block;\n  width: 18rpx;\n  height: 18rpx;\n  border-right: 1rpx solid #c7c7c7;\n  border-top: 1rpx solid #c7c7c7;\n  text-align: end;\n}\n.arrow-right {\n  transform: rotate(45deg);\n}\n.arrow-down {\n  transform: rotate(135deg);\n  /* margin-top: -35%; */\n  margin-top: -6rpx;\n}\n.flex-center-v {\n  display: flex;\n  align-items: center;\n}\n\n/*============ 按钮 ===========*/\n/* 无默认样式按钮 */\n.button-nostyle {\n  margin: initial;\n  padding: initial;\n  font-size: initial;\n  line-height: initial;\n  color: initial;\n  background: initial;\n  overflow: initial;\n  text-align: initial;\n  text-decoration: initial;\n  border-radius: initial;\n  box-sizing: initial;\n  -webkit-tap-highlight-color: initial;\n}\n.button-nostyle::after {\n    content: initial;\n}\n\n.hover-opacity,\n.btn-opacity:active {\n  opacity: 0.7;\n}\n.hover-bg,\n.btn-bg:active {\n  background-color: #eee;\n}\n\n.single-line {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n::-webkit-scrollbar {\n  width: 0;\n  height: 0;\n  color: transparent;\n}\n\n/********** Tabs **************/\n.tabs {\n  position: fixed;\n  z-index: 99;\n  top: 0;\n  left: 0;\n  right: 0;\n  display: flex;\n  white-space: nowrap;\n  padding: 16rpx 0;\n  background: #fff;\n}\n.tabs .tabs-item {\n  display: inline-block;\n  flex: 1;\n  text-align: center;\n}\n.tabs-item .tabs-item__content {\n  display: inline-block;\n  font-size: 36rpx;\n  line-height: 1;\n  color: #999;\n  font-weight: 400;\n  position: relative;\n  z-index: 1;\n  transition: all .3s;\n}\n.tabs-item.is-active .tabs-item__content {\n  color: #333;\n  font-size: 42rpx;\n}\n.tabs-item.is-active .tabs-item__content::before {\n  content: '';\n  display: block;\n  position: absolute;\n  z-index: -1;\n  height: 8rpx;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: #FFE200;\n}\n\n/* iPhone X 系列下巴占位 */\n.iphonex-bottom-holder {\n  padding-bottom: env(safe-area-inset-bottom);\n  padding-bottom: constant(safe-area-inset-bottom);\n}\n@supports (padding-bottom: env(safe-area-inset-bottom)) {\n  .iphonex-bottom-holder {\n    padding-bottom: env(safe-area-inset-bottom);\n  }\n}\n@supports (padding-bottom: constant(safe-area-inset-bottom)) {\n  .iphonex-bottom-holder {\n    padding-bottom: constant(safe-area-inset-bottom);\n  }\n}\n\n.flex {\n  display: flex;\n}\n\n.align-center {\n  align-items: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n.flex-1 {\n  flex: 1;\n}\n"
  },
  {
    "path": "miniprogram/style/font-awesome.min.wxss",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n@font-face {\n\tfont-family: 'FontAwesome';\n\tsrc: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),\n\t\turl('FontAwesome.ttf') format('truetype');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n .fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\f19c\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\f1c5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\f1c6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\\f1d0\"}.fa-ge:before,.fa-empire:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\f1d8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-hotel:before,.fa-bed:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-tv:before,.fa-television:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-edge:before{content:\"\\f282\"}.fa-credit-card-alt:before{content:\"\\f283\"}.fa-codiepie:before{content:\"\\f284\"}.fa-modx:before{content:\"\\f285\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-usb:before{content:\"\\f287\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-scribd:before{content:\"\\f28a\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-pause-circle-o:before{content:\"\\f28c\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stop-circle-o:before{content:\"\\f28e\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-hashtag:before{content:\"\\f292\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-percent:before{content:\"\\f295\"}.fa-gitlab:before{content:\"\\f296\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpforms:before{content:\"\\f298\"}.fa-envira:before{content:\"\\f299\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-wheelchair-alt:before{content:\"\\f29b\"}.fa-question-circle-o:before{content:\"\\f29c\"}.fa-blind:before{content:\"\\f29d\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-braille:before{content:\"\\f2a1\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\\f2a4\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-signing:before,.fa-sign-language:before{content:\"\\f2a7\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\f2b3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-handshake-o:before{content:\"\\f2b5\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-o:before{content:\"\\f2b7\"}.fa-linode:before{content:\"\\f2b8\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-book-o:before{content:\"\\f2ba\"}.fa-vcard:before,.fa-address-card:before{content:\"\\f2bb\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\\f2bc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-circle-o:before{content:\"\\f2be\"}.fa-user-o:before{content:\"\\f2c0\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\f2c3\"}.fa-quora:before{content:\"\\f2c4\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-shower:before{content:\"\\f2cc\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\\f2cd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f2d3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\f2d4\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-grav:before{content:\"\\f2d6\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-eercast:before{content:\"\\f2da\"}.fa-microchip:before{content:\"\\f2db\"}.fa-snowflake-o:before{content:\"\\f2dc\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-meetup:before{content:\"\\f2e0\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}\n"
  },
  {
    "path": "miniprogram/style/iconfont.wxss",
    "content": "@font-face {font-family: \"iconfont\";\n  src: url('//at.alicdn.com/t/font_2025841_1ugnyjgxoct.eot?t=1616236746554'); /* IE9 */\n  src: url('//at.alicdn.com/t/font_2025841_1ugnyjgxoct.eot?t=1616236746554#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),\n  url('//at.alicdn.com/t/font_2025841_1ugnyjgxoct.woff?t=1616236746554') format('woff'),\n  url('//at.alicdn.com/t/font_2025841_1ugnyjgxoct.ttf?t=1616236746554') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */\n  url('//at.alicdn.com/t/font_2025841_1ugnyjgxoct.svg?t=1616236746554#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: inherit;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-daimabeifen:before {\n  content: \"\\e634\";\n}\n\n.icon-dot:before {\n  content: \"\\e63a\";\n}\n\n.icon-ios-git-merge:before {\n  content: \"\\e6c2\";\n}\n\n.icon-license:before {\n  content: \"\\e65a\";\n}\n\n.icon-star:before {\n  content: \"\\e650\";\n}\n\n.icon-github:before {\n  content: \"\\e677\";\n}\n"
  },
  {
    "path": "miniprogram/style/weui.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\npage{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}icon{vertical-align:middle}.weui-cells{position:relative;margin-top:1.17647059em;background-color:#fff;line-height:1.41176471;font-size:17px}.weui-cells:before{top:0;border-top:1rpx solid #d9d9d9}.weui-cells:after,.weui-cells:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-cells:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells_after-title{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;padding-left:15px;padding-right:15px;font-size:14px}.weui-cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-cell:first-child:before{display:none}.weui-cell_active{background-color:#ececec}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_access{color:inherit}.weui-cell__ft_in-access{padding-right:13px;position:relative}.weui-cell__ft_in-access:after{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:active{background-color:#ececec}.weui-cell_link:first-child:before{display:block}.weui-icon-radio{margin-left:3.2px;margin-right:3.2px}.weui-icon-checkbox_circle,.weui-icon-checkbox_success{margin-left:4.6px;margin-right:4.6px}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999px}.weui-check__hd_in-checkbox{padding-right:.35em}.weui-cell__ft_in-radio{padding-left:.35em}.weui-cell_input{padding-top:0;padding-bottom:0}.weui-label{width:105px;word-wrap:break-word;word-break:break-all}.weui-input{height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em}.weui-toptips{position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-textarea{display:block;width:100%}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn,.weui-textarea-counter_warn{color:#e64340}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1rpx solid #d9d9d9}.weui-form-preview:after,.weui-form-preview:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-form-preview:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-form-preview__value{font-size:14px}.weui-form-preview__value_in-hd{font-size:26px}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:\" \";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:after{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center}.weui-form-preview__btn:after{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_active{background-color:#eee}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-select{position:relative;padding-left:15px;padding-right:30px;height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em;border-right:1rpx solid #d9d9d9}.weui-select:before{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select_in-select-after{padding-left:0}.weui-cell__bd_in-select-before,.weui-cell__hd_in-select-after{padding-left:15px}.weui-cell_vcode{padding-right:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:2.58823529em;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:2.58823529em;font-size:17px;color:#3cc51f;white-space:nowrap}.weui-vcode-btn:active{color:#52a341}.weui-cell_switch{padding-top:6px;padding-bottom:6px}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px}.weui-uploader__img{display:block;width:79px;height:79px}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:\" \";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file-content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:\" \";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0}.weui-article{padding:20px 15px;font-size:15px}.weui-article__section{margin-bottom:1.5em}.weui-article__h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article__h2{font-size:16px;font-weight:400;margin-bottom:.34em}.weui-article__h3{font-weight:400;font-size:15px;margin-bottom:.34em}.weui-article__p{margin:0 0 .8em}.weui-msg{padding-top:36px;text-align:center}.weui-msg__link{display:inline;color:#586c94}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn{margin-top:15px}.weui-btn:first-child{margin-top:0}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree__text{color:#999}.weui-agree__link{display:inline;color:#586c94}.weui-agree__checkbox{position:absolute;left:-9999px}.weui-agree__checkbox-icon{position:relative;top:2px;display:inline-block;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:11px;height:11px}.weui-agree__checkbox-icon-check{position:absolute;top:1px;left:1px}.weui-footer{color:#999;font-size:14px;text-align:center}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px;color:#586c94}.weui-footer__link:before{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #c7c7c7;color:#c7c7c7;left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-grids{border-top:1rpx solid #d9d9d9;border-left:1rpx solid #d9d9d9;overflow:hidden}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box;border-right:1rpx solid #d9d9d9;border-bottom:1rpx solid #d9d9d9}.weui-grid_active{background-color:#ececec}.weui-grid__icon{display:block;width:28px;height:28px;margin:0 auto}.weui-grid__label{margin-top:5px;display:block;text-align:center;color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-loading{margin:0 5px;width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:a 1s steps(12) infinite;animation:a 1s steps(12) infinite;background:transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;background-size:100%}.weui-loading.weui-loading_transparent{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E\")}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#e64340;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore__tips_in-line{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore__tips_in-dot{position:relative;padding:0 .16em;width:4px;height:1.6em}.weui-loadmore__tips_in-dot:before{content:\" \";position:absolute;top:50%;left:50%;margin-top:-1px;margin-left:-2px;width:4px;height:4px;border-radius:50%;background-color:#e5e5e5}.weui-panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1rpx solid #e5e5e5}.weui-panel:after,.weui-panel:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1rpx solid #e5e5e5}.weui-panel__hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui-panel__hd:after{content:\" \";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box:first-child:before{display:none}.weui-media-box__title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box__title_in-text{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box__thumb{width:100%;height:100%;vertical-align:top}.weui-media-box__hd_in-appmsg{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box__bd_in-appmsg{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-cells_in-small-appmsg{margin-top:0}.weui-cells_in-small-appmsg:before{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__opr{margin-left:15px;font-size:0}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;border-bottom:1rpx solid #ccc}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:0}.weui-navbar__item.weui-bar__item_on{color:#1aad19}.weui-navbar__slider{position:absolute;content:\" \";left:0;bottom:0;width:6em;height:3px;background-color:#1aad19;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-navbar__title{display:inline-block;font-size:15px;max-width:8em;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-top:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4;border-top:1rpx solid #d7d6dc;border-bottom:1rpx solid #d7d6dc}.weui-icon-search{margin-right:8px;font-size:inherit}.weui-icon-search_in-box{position:absolute;left:10px;top:7px}.weui-search-bar__text{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;border-radius:5px;background:#fff;border:1rpx solid #e6e6ea}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__input{height:28px;line-height:28px;font-size:14px}.weui-icon-clear{position:absolute;top:0;right:0;padding:7px 8px;font-size:0}.weui-search-bar__label{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff;line-height:28px}.weui-search-bar__cancel-btn{margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}"
  },
  {
    "path": "miniprogram/templates/actionsheet/actionsheet.js",
    "content": "import Component from '../component'\n\nexport default {\n\t/**\n\t * 默认参数\n\t */\n  setDefaults() {\n    return {\n      theme: `ios`,\n      className: undefined,\n      titleText: undefined,\n      buttons: [],\n      buttonClicked() {},\n      cancelText: `取消`,\n      cancel() {},\n      // destructiveText: '删除', \n      // destructiveButtonClicked() {}, \n    }\n  },\n\n  /**\n   * @typedef {Object} ButtonOption\n   * @property {string} text - 按钮文字\n   * @property {string} [className] - 按钮的类名\n   * @property {'contact'|'share'|'getPhoneNumber'|'getUserInfo'|'launchApp'|'openSetting'|'feedback'} [openType] - 按钮的 open-type 属性\n   */\n\n\t/**\n\t * 上拉菜单组件\n\t * @param {Object} opts 配置项\n     * @param {String} opts.theme 菜单皮肤\n\t * @param {String} opts.className 自定义类名\n\t * @param {String} opts.titleText 标题\n\t * @param {ButtonOption[]} opts.buttons 按钮\n\t * @param {(index: number, button: ButtonOption) => void|boolean} opts.buttonClicked 按钮点击事件\n\t * @param {(\n   *  e: (WechatMiniprogram.ButtonGetUserInfo|WechatMiniprogram.ButtonGetPhoneNumber)&WechatMiniprogram.BaseEvent<,{index:number;}>,\n   *  index: number,\n   *  button: ButtonOption\n   * ) => void|boolean} opts.bindGetOpenInfo open-type 响应事件\n\t * @param {String} opts.cancelText 取消按钮的文本\n\t * @param {Function} opts.cancel 取消按钮点击事件\n\t * @param {String} opts.destructiveText 删除按钮的文本\n\t * @param {Function} opts.destructiveButtonClicked 删除按钮点击事件\n\t */\n  show(opts = {}) {\n    const options = Object.assign({\n      animateCss: undefined,\n      visible: !1,\n    }, this.setDefaults(), opts)\n\n    // 实例化组件\n    const component = new Component({\n      scope: `$wux.actionSheet`,\n      data: options,\n      methods: {\n        /**\n         * 隐藏\n         */\n        removeSheet(callback) {\n          if (this.removed) return !1\n          this.removed = !0\n          this.setHidden([`weui-animate-slide-down`, `weui-animate-fade-out`])\n          typeof callback === `function` && callback(options.buttons)\n        },\n        /**\n         * 显示\n         */\n        showSheet() {\n          if (this.removed) return !1\n          this.setVisible([`weui-animate-slide-up`, `weui-animate-fade-in`])\n        },\n        /**\n         * 按钮点击事件\n         * @param {WechatMiniprogram.BaseEvent<, {index: number; }>} e\n         */\n        buttonClicked(e) {\n          const index = e.currentTarget.dataset.index\n          if (options.buttonClicked(index, options.buttons[index]) === true) {\n            this.removeSheet()\n          }\n        },\n\n        /**\n         * @param {WechatMiniprogram.BaseEvent<,{ index: number; }>} e\n         */\n        bindGetOpenInfo (e) {\n          const { index } = e.currentTarget.dataset;\n          if (options.bindGetOpenInfo(e, index, options.buttons[index]) === true) {\n            this.removeSheet();\n          }\n        },\n\n        /**\n         * 删除按钮点击事件\n         */\n        destructiveButtonClicked() {\n          if (options.destructiveButtonClicked() === true) {\n            this.removeSheet()\n          }\n        },\n        /**\n         * 取消按钮点击事件\n         */\n        cancel() {\n          this.removeSheet(options.cancel)\n        },\n      },\n    })\n\n    component.showSheet()\n\n    return component.cancel\n  },\n}"
  },
  {
    "path": "miniprogram/templates/actionsheet/actionsheet.wxml",
    "content": "<template name=\"temp-actionsheet\">\n\t<view class=\"action-sheet-backdrop {{ className }} {{ animateCss[1] }}\" wx:if=\"{{ visible }}\" catchtap=\"{{ cancel }}\">\n\t\t<view class=\"action-sheet-wrapper {{ animateCss[0] }}\">\n\t\t\t<view class=\"action-sheet\">\n\t\t\t\t<view class=\"action-sheet-group action-sheet-options\">\n\t\t\t\t\t<view class=\"action-sheet-title\" wx:if=\"{{ titleText }}\">{{ titleText }}</view>\n\t\t\t\t\t<block wx:for=\"{{ buttons }}\" wx:key=\"\">\n\t\t\t\t\t\t<button class=\"button action-sheet-option {{ item.className }}\" data-index=\"{{ index }}\"\n\t\t\t\t\t\t\topen-type=\"{{item.openType}}\"\n\t\t\t\t\t\t\tcatchtap=\"{{ buttonClicked }}\"\n\t\t\t\t\t\t\tbindgetphonenumber=\"{{ bindGetOpenInfo }}\"\n\t\t\t\t\t\t\tbindgetuserinfo=\"{{ bindGetOpenInfo }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ item.text }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</block>\n\t\t\t\t\t<button class=\"button destructive action-sheet-destructive\" wx:if=\"{{ destructiveText }}\" catchtap=\"{{ destructiveButtonClicked }}\">{{ destructiveText }}</button>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"action-sheet-group action-sheet-cancel\" wx:if=\"{{ cancelText }}\">\n\t\t\t\t\t<button class=\"button\" catchtap=\"{{ cancel }}\">{{ cancelText }}</button>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>"
  },
  {
    "path": "miniprogram/templates/actionsheet/actionsheet.wxss",
    "content": ".action-sheet-backdrop {\n    position: fixed;\n    z-index: 11;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0,0,0,.4);\n}\n\n.action-sheet-wrapper {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    max-width: 500px;\n    margin: auto;\n}\n\n.action-sheet {\n    z-index: 11;\n    background-color: #efeff4;\n    border-radius: 24rpx 24rpx 0 0;\n    overflow: hidden;\n}\n\n.action-sheet .button {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 0;\n    border-radius: 0;\n    min-height: 48px;\n    text-overflow: ellipsis;\n    background-color: #fff;\n}\n\n.action-sheet .button {\n    font-size: 18px;\n    line-height: 48px;\n}\n\n.action-sheet .button.button-hover, \n.action-sheet .button.button-hover {\n    box-shadow: none;\n    border-color: #d1d3d6;\n    background: #e4e5e7;\n}\n\n.action-sheet .button.destructive {\n    color: #ff3b30 !important;\n}\n\n.action-sheet-title {\n    padding: 16px;\n    color: #8f8f8f;\n    text-align: center;\n    font-size: 13px;\n}\n\n.action-sheet-group {\n    margin-bottom: 8px;\n    border-radius: 4px;\n    background-color: #fff;\n    overflow: hidden;\n}\n\n.action-sheet-group .button {\n    border-top: none;\n}\n\n.action-sheet-group .button:after {\n\ttransform: none;\n\ttransform-origin: none;\n\tborder: none;\n    border-radius: 0;\n    content: \" \";\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    height: 1px;\n    border-top: 1px solid #d9d9d9;\n    color: #d9d9d9;\n    transform-origin: 0 0;\n    transform: scaleY(.5);\n}\n\n.action-sheet-group .button:first-child:last-child:after {\n    border-width: 0;\n}\n\n.action-sheet-group {\n    border-radius: 0;\n    margin-bottom: 6px;\n}\n\n.action-sheet-cancel {\n    margin-bottom: 0;\n}\n\n@supports (padding-bottom: env(safe-area-inset-bottom)) {\n    .action-sheet-cancel .button {\n        padding-bottom: env(safe-area-inset-bottom);\n    }\n}\n\n@supports (padding-bottom: constant(safe-area-inset-bottom)) {\n    .action-sheet-cancel .button {\n        padding-bottom: constant(safe-area-inset-bottom);\n    }\n}"
  },
  {
    "path": "miniprogram/templates/bing/bing.js",
    "content": "// 必应壁纸\n'use strict';\nimport { getPreDate } from './../../../utils/util.js';\n\nexport default class Bing {\n\n  constructor() {\n    const pages = getCurrentPages();\n    this.page = pages[pages.length-1]\n    this.setData = this.page.setData.bind(this.page)\n    this._init()\n  }\n\n  _init() {\n    let bings = [];\n    for (let i = 0; i < 10; i++) {\n      let bing = {};\n      bing.title = getPreDate(i);\n      bing.image = `https://bing.ioliu.cn/v1?d=${i}`;\n      bings.push(bing);\n    }\n    this.setData({ bings });\n    this._initMethod()\n  }\n\n  /**\n   * 将方法挂载到 page 上\n   */\n  _initMethod() {\n    this.page['$mark.onPreImg'] = (e) => {\n      const { url } = e.currentTarget.dataset,\n        { bings } = this.page.data;\n      let urls = [];\n      for (let item of bings) {\n        urls.push(item.image)\n      }\n      wx.previewImage({\n        current: url,\n        urls\n      })\n    }\n  }\n\n}"
  },
  {
    "path": "miniprogram/templates/bing/bing.wxml",
    "content": "<!-- 必应壁纸 -->\n\n<template name='temp-bing'>\n  <view class='container'>\n    <block wx:for=\"{{bings}}\"\n      wx:key='index'\n    >\n      <template is='item-bing' data='{{...item}}' />\n    </block>\n  </view>\n</template>\n\n<template name='item-bing'>\n  <view class='item-bing-wrapper'>\n    <view class='item-img' bindtap='$mark.onPreImg' data-url='{{image}}'>\n      <comp-preImg src=\"{{image}}\" height=\"370rpx\" mode=\"aspectFill\" />  \n    </view>\n    <view class='item-title single-line'>{{title}}</view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/bing/bing.wxss",
    "content": "\n.item-bing-wrapper {\n  background-color: #fff;\n}\n\n.item-bing-wrapper .item-img, .item-bing-wrapper .item-img>image {\n  width: 100%;\n  height: 370rpx;\n}\n\n.item-bing-wrapper .item-title {\n  width: 100%;\n  line-height: 2em;\n  text-align: center;\n}"
  },
  {
    "path": "miniprogram/templates/casts/casts.wxml",
    "content": "<template name='item-casts'>\n  <view class='casts-item'>\n    <view class='item-container'>\n      <image class='avatar' src='{{item.avatars.medium}}' />\n      <view class='item-casts-name'>\n        <text class='single-line'>{{item.name}}</text>\n        <text class='single-line'>{{isDirec?\"导演\":\"饰\"}}</text>\n      </view>\n    </view>\n  </view>\n</template>\n\n<template name='item-cast'>\n  <view class='casts-item'>\n    <view class='item-container'>\n      <image class='avatar' src='{{item.avatar.large}}' mode=\"aspectFill\" />\n      <view class='item-casts-name'>\n        <text class='single-line'>{{item.name}}</text>\n        <text class='single-line'>{{item.character}}</text>\n      </view>\n    </view>\n  </view>\n</template>\n\n<template name='item-casts-all'>\n  <view class='casts-item'>\n    <view class='item-all'>\n      <text>全部</text>\n      <text>{{crewCount || '00'}}人</text>\n    </view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/casts/casts.wxss",
    "content": ".casts-item {\n  display: inline-block;\n  vertical-align: top;\n}\n.casts-item .item-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 210rpx;\n  overflow: hidden;\n}\n.casts-item .item-container>.avatar,\n.casts-item .item-container .item-all {\n  width: 100%;\n  height: 280rpx;\n  border-radius: 8rpx;\n  background-color: #eee;\n}\n.casts-item .item-container>view.item-casts-name {\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  overflow: hidden;\n  font-size: 22rpx;\n  color: #999;\n}\n.casts-item .item-container>view.item-casts-name text {\n  width: 100%;\n  text-align: center;\n}\n.casts-item .item-container>view.item-casts-name text:last-child {\n  color: #7C858A;\n  font-size: 18rpx;\n}\n\n.item-all {\n  background: #F2F1F7;\n  width: 210rpx;\n  height: 280rpx;\n  border-radius: 8rpx;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-size: .8em;\n  line-height: 1.8em;\n  color: #999;\n}\n.item-all> text:last-child {\n  border-top: .5px solid #ccc;\n}"
  },
  {
    "path": "miniprogram/templates/cell/cell.wxml",
    "content": "<!--  -->\n<template name='row-cell'>\n  <view class='row-cell {{disabled?\"\":\"btn-bg\"}}' bindtap='{{bindTap}}'>\n    <view class='row-left'>\n      <image class='row-icon' src='{{iconPath}}' mode='widthFix'></image>\n      <text>{{title}}</text>\n    </view>\n    <view class='row-right'>\n      <text class='row-subtitle'>{{subtitle||\"\"}}</text>\n      <view class='arrow-right'></view>\n    </view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/cell/cell.wxss",
    "content": "/*  */\n.row-cell {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 28rpx 30rpx;\n  color: #333;\n  font-size: 28rpx;\n  background-color: #fff;\n  box-sizing: border-box;\n}\n.row-cell .row-left,\n.row-cell .row-right {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.row-cell .row-icon {\n  width: 1.3em;\n  height: 1.3em;\n  margin-right: 0.5em;\n}\n.row-right .row-subtitle {\n  color: #999;\n  margin-right: 0.5em;\n}"
  },
  {
    "path": "miniprogram/templates/circle/circle.wxml",
    "content": "<template name=\"circle\">\n  <view class=\"circle-container btn-bg\">\n    <view class=\"circle-border\">\n      <image \n        wx:if=\"{{imgUrl}}\" \n        class=\"icon-img\" \n        src=\"{{imgUrl}}\"\n        mode=\"widthFix\" />\n      <text class=\"circle-date\">{{date}}</text>\n    </view>\n    <text class=\"title\">{{title}}</text>\n  </view>\n</template>\n\n<template name=\"commingItem\">\n  <view class='item-article'>\n    <comp-preImg extra-class='img-big' src='{{image}}' mode='widthFix' height='450rpx' />\n    <view class='com-desc'>\n      <text class='com-title'>{{title}}</text>\n      <view class='count-like'>\n        <image\n          class='icon-like'\n          src=\"/assets/images/writer_article_like_icon.png\"\n          mode='aspectFit'>\n        </image>\n        <text>{{likeCount}}</text>\n      </view>\n    </view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/circle/circle.wxss",
    "content": ".icon-img {\n  width: 100%;\n  /* height: 35%; */\n  border-width: 2px;\n  border-color: #f00;\n}\n.title {\n  font-size: 26rpx;\n}\n.circle-border {\n  width: 88rpx;\n  height: 88rpx;\n  border: 2rpx solid #496069;\n  border-radius: 50%;\n  margin: 20rpx 20rpx 10rpx;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.circle-container {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding-bottom: 20rpx;\n  background-color: #fff;\n}\n.circle-date {\n  font-weight: bold;\n  font-size: 1.6rem;\n  color: #496069;\n}\n/* circle end */\n\n.img-big {\n  display: block;\n  width: 100%;\n  height: 450rpx;\n  background-color: #eee;\n}\n.item-article {\n  background-color: #fff;\n}\n.com-desc {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n.com-title {\n  padding: 10rpx 10rpx 5rpx;\n  text-align: center;\n}\n.count-like {\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n  color: #818C91;\n  padding: 5rpx 10rpx 10rpx;\n}\n.icon-like {\n  width: 1em;\n  height: 1em;\n  margin-right: 0.5em;\n}"
  },
  {
    "path": "miniprogram/templates/component.js",
    "content": "/**\n * 模块化组件\n */\nclass Component {\n    /**\n     * @param {Object} options 配置项\n     * @param {string} options.scope 组件的命名空间\n     * @param {Record<string, any>} [options.data] 组件的动态数据\n     * @param {Record<string, AnyFunction>} [options.methods] 组件的事件函数\n     */\n    constructor(options = {}) {\n        Object.assign(this, { options });\n        this.__init();\n    }\n\n    /**\n     * 初始化\n     */\n    __init() {\n        this.page = getCurrentPages()[getCurrentPages().length - 1]\n        /** @type {WechatMiniprogram.Component.InstanceMethods['setData']} */\n        const setData = this.page.setData.bind(this.page)\n\n        // 检查版本库是否高于或等于 1.5.0，setData 方法才有回调函数，否则采用 setTimeout 模拟\n        const checkSDKVersion = () => {\n            let has = false\n\n            try {\n                const res = wx.getSystemInfoSync()\n                const SDKVersion = res.SDKVersion.split('.')\n                has = Number(SDKVersion[0]) > 1 || Number(SDKVersion[1]) >= 5\n            } catch (e) {\n                // getSystemInfoSync happened error\n            }\n\n            return has\n        }\n\n        // 重写 setData 方法，支持回调，兼容低版本\n        this.setData = (obj = {}, cb = () => ({})) => {\n            const fn = () => {\n                if (typeof cb === 'function') {\n                    cb()\n                }\n            }\n\n            if (checkSDKVersion()) {\n                setData(obj, fn)\n            } else {\n                setData(obj)\n                setTimeout(fn, 0)\n            }\n        }\n\n        this.__initState()\n    }\n\n    /**\n     * 初始化组件状态\n     */\n    __initState() {\n        this.options.data && this.__initData()\n        this.options.methods && this.__initMethods()\n    }\n\n    /**\n     * 绑定组件动态数据\n     */\n    __initData() {\n        const scope = this.options.scope\n        const data = this.options.data\n\n        this._data = {}\n\n        // 筛选非函数类型，更改参数中函数的 this 指向\n        if (!this.isEmptyObject(data)) {\n            for (let key in data) {\n                if (Object.prototype.hasOwnProperty.call(data, key)) {\n                    if (typeof data[key] === `function`) {\n                        data[key] = data[key].bind(this)\n                    } else {\n                        this._data[key] = data[key]\n                    }\n                }\n            }\n        }\n\n        // 将数据同步到 page.data 上面方便渲染组件\n        this.page.setData({\n            [`${scope}`]: this._data,\n        })\n    }\n\n    /**\n     * 绑定组件事件函数\n     */\n    __initMethods() {\n        const scope = this.options.scope\n        const methods = this.options.methods\n\n        // 筛选函数类型\n        if (!this.isEmptyObject(methods)) {\n            for (let key in methods) {\n                if (Object.prototype.hasOwnProperty.call(methods, key) && typeof methods[key] === `function`) {\n                    this[key] = methods[key] = methods[key].bind(this)\n\n                    // 将 methods 内的方法重命名并挂载到 page 上面，否则 template 内找不到事件\n                    this.page[`${scope}.${key}`] = methods[key]\n\n                    // 将方法名同步至 page.data 上面，方便在模板内使用 {{ method }} 方式绑定事件\n                    this.setData({\n                        [`${scope}.${key}`]: `${scope}.${key}`,\n                    })\n                }\n            }\n        }\n    }\n\n    /**\n     * 获取组件的 data 数据\n     */\n    getComponentData() {\n        let data = this.page.data\n        let name = this.options.scope && this.options.scope.split(`.`)\n\n        name.forEach((n, i) => {\n            data = data[n]\n        })\n\n        return data\n    }\n\n    /**\n     * 判断 object 是否为空\n     */\n    isEmptyObject(e) {\n        for (let t in e)\n            return !1\n        return !0\n    }\n\n    /**\n     * 设置元素显示\n     */\n    setVisible(className = `weui-animate-fade-in`) {\n        this.setData({\n            [`${this.options.scope}.animateCss`]: className,\n            [`${this.options.scope}.visible`]: !0,\n        })\n    }\n\n    /**\n     * 设置元素隐藏\n     */\n    setHidden(className = `weui-animate-fade-out`, timer = 300) {\n        this.setData({\n            [`${this.options.scope}.animateCss`]: className,\n        })\n        setTimeout(() => {\n            this.setData({\n                [`${this.options.scope}.visible`]: !1,\n            })\n        }, timer)\n    }\n}\n\nexport default Component"
  },
  {
    "path": "miniprogram/templates/dropmenu/dropmenu.js",
    "content": "import Component from '../component';\n\nexport default {\n\n  setDefaults() {\n    return {\n      className: undefined,\n      buttons: [],\n      choosedId: undefined,\n      onChange(){},\n      cancel() {}\n    }\n  },\n\n  show(opts={}) {\n    const options = Object.assign({\n      animateCss: undefined,\n      visible: !1,\n    }, this.setDefaults(), opts, {\n      choosedId: opts.choosedId || opts.buttons[0].id\n    })\n\n    const component = new Component({\n      scope: `$mark.dropMenu`,\n      data: options,\n      methods: {\n        /**\n         * 隐藏\n         */\n        removeShare(callback) {\n          if(this.removed) return !1\n          this.removed = !0\n          this.setHidden([`weui-animate-drop-up`, `weui-animate-fade-out`])\n          typeof callback === `function` && callback(options.buttons)\n        },\n        /**\n         * 显示\n         */\n        showShare() {\n          if(this.removed) return !1\n          this.setVisible([`weui-animate-drop-down`, `weui-animate-fade-in`])\n        },\n        /**\n         * 按钮点击事件\n         */\n        onChange(e) {\n          const {index} = e.currentTarget.dataset\n          if (options.onChange(index, options.buttons[index])===true) {\n            this.cancel()\n          }\n        },\n        /**\n         * 取消\n         */\n        cancel() {\n          this.removeShare(options.cancel)\n          return null;\n        },\n      },\n    })\n\n    component.showShare()\n\n    return component.cancel\n  },\n\n}"
  },
  {
    "path": "miniprogram/templates/dropmenu/dropmenu.wxml",
    "content": "<!-- 分享上拉菜单 -->\n\n<template name='temp-dropmenu'>\n  <view class='dropdown-menu-backdrop {{animateCss[1]}}' wx:if='{{visible}}' catchtap='{{cancel}}' catchtouchmove='none'>\n    <view class='dropdown-menu-wrapper {{animateCss[0]}}'>\n      <view class='dropdown-menu'>\n        <block wx:for='{{buttons}}' wx:key='id'>\n          <view class='item-container' catch:tap='{{onChange}}' data-index='{{index}}'>\n            <view class='icon'>\n              <image hidden='{{choosedId!=item.id}}' src='/assets/images/movie_sort_check_icon.png' mode='widthFix' />\n            </view>\n            <text>{{item.title}}</text>\n          </view>\n        </block>\n      </view>\n    </view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/dropmenu/dropmenu.wxss",
    "content": "\n.dropdown-menu-backdrop {\n    position: fixed;\n    top: calc(74rpx + 3em);\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0,0,0,.4);\n}\n.dropdown-menu-wrapper {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    max-width: 500px;\n    margin: auto;\n    z-index: 12;\n}\n.dropdown-menu {\n    width: auto;\n    z-index: 11;\n    overflow: hidden;\n    background-color: #fff;\n    font-size: .8em;\n}\n.dropdown-menu .item-container {\n  display: flex;\n  align-items: center;\n  padding: 20rpx 20rpx;\n}\n.dropdown-menu .item-container:not(:last-child) {\n  border-bottom: .5px solid #ddd;\n}\n.item-container .icon {\n  width: 1.3em;\n  height: 1.3em;\n  margin-right: .5em;\n  display: flex;\n  align-items: center;\n}\n.item-container .icon>image {\n  width: 100%;\n  height: 100%;\n}\n"
  },
  {
    "path": "miniprogram/templates/index.js",
    "content": "import $markShare from './share/share.js';\nimport $wuxActionSheet from './actionsheet/actionsheet.js';\nimport $markDropmenu from './dropmenu/dropmenu.js';\n\nexport {\n  $markShare,\n  $wuxActionSheet,\n  $markDropmenu,\n}"
  },
  {
    "path": "miniprogram/templates/loading/loading.wxml",
    "content": "<!-- 加载动画 -->\n<template name='loading-more'>\n  <view class=\"weui-loadmore\">\n    <view class=\"weui-loading\"></view>\n    <view class=\"weui-loadmore__tips\">正在加载</view>\n  </view>\n</template>\n\n<template name='loading-none'>\n  <view class=\"weui-loadmore weui-loadmore_line\">\n    <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line\">暂无数据</view>\n  </view>\n</template>\n\n<template name='loading-dot'>\n  <view class=\"weui-loadmore weui-loadmore_line weui-loadmore_dot\">\n    <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line weui-loadmore__tips_in-dot\"></view>\n  </view>\n</template>\n        "
  },
  {
    "path": "miniprogram/templates/loading/loading.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n\n.weui-loading {\n  margin: 0 5px;\n  width: 20px;\n  height: 20px;\n  display: inline-block;\n  vertical-align: middle;\n  -webkit-animation: a 1s steps(12) infinite;\n  animation: a 1s steps(12) infinite;\n  background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;\n  background-size: 100%;\n}\n\n.weui-loading.weui-loading_transparent {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E\");\n}\n\n@-webkit-keyframes a {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(1turn);\n    transform: rotate(1turn);\n  }\n}\n\n@keyframes a {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(1turn);\n    transform: rotate(1turn);\n  }\n}\n"
  },
  {
    "path": "miniprogram/templates/login/login.js",
    "content": "let _compData = {\n  '__lgpanel__.isHide': true,\n  '__lgpanel__.phoneNum': '',\n  '__lgpanel__.verifyCode': '',\n  '__lgpanel__.verifyText': '获取验证码',\n  '__lgpanel__.phoneClass': '',\n  '__lgpanel__.vcodeClass': ''\n}\nlet _compEvent = {\n  __lgpanel_timer: null,\n  __lgpanel_countDown: 60,\n  __lgpanel_close: function () {\n    clearInterval(this.__lgpanel_timer)\n    this.__lgpanel_countDown = 60\n    this.setData(_compData)\n  },\n  __lgpanel_sendCode: function () {\n    if (this.__lgpanel_countDown < 60) {\n      return\n    }\n    this.setData({\n      '__lgpanel__.verifyText': this.__lgpanel_countDown + 's'\n    })\n    this.__lgpanel_timer = setInterval(() => {\n      this.__lgpanel_countDown--\n      if (this.__lgpanel_countDown <= 0) {\n        clearInterval(this.__lgpanel_timer)\n        this.__lgpanel_countDown = 60\n        this.setData({\n          '__lgpanel__.verifyText': '重新获取'\n        })\n        return\n      }\n      this.setData({\n        '__lgpanel__.verifyText': this.__lgpanel_countDown + 's'\n      })\n    }, 1000)\n    typeof this.loginPannel._configs.sendCode == \"function\" &&\n      this.loginPannel._configs.sendCode()\n  }\n}\n// 小程序最新版把原型链干掉了。。。换种写法\nlet loginPannel = {\n  show: function (data) {\n    this.__page.setData({ '__lgpanel__.isHide': false })\n    if (data) {\n      Object.assign(this._configs, data)\n    }\n  }\n}\nfunction LoginPannel() {\n  // 定义组件的一些回调\n  this._configs = {\n    sendCode: null,\n    closeCode: null,\n    login: null\n  }\n  // 拿到当前页面对象\n  let pages = getCurrentPages()\n  let curPage = pages[pages.length - 1]\n  // 把组件的事件“合并到”页面对象上\n  Object.assign(curPage, _compEvent)\n  this.__page = curPage\n  Object.assign(curPage, loginPannel) // 小程序最新版把原型链干掉了。。。换种写法\n  // 附加到page上，方便访问\n  curPage.loginPannel = this\n  // 把组件的数据“注入”到页面的data对象中\n  curPage.setData(_compData)\n  return this\n}"
  },
  {
    "path": "miniprogram/templates/login/login.wxml",
    "content": "<template name=\"loginPannel\">\n  <view class=\"login-pannel\" hidden=\"{{ isHide }}\" >\n    <view catchtap=\"__lgpanel_close\" class=\"close-btn\"></view>\n    <view class=\"form-area\">\n      <view class=\"login-inline phone {{ phoneClass }}\">\n        <input placeholder=\"请填写手机号码\" maxlength=\"11\" type=\"number\" bindinput=\"__lgpanel_phoneInput\" bindfocus=\"__lgpanel_phoneFocus\" bindblur=\"__lgpanel_phoneBlur\" />\n        <text catchtap=\"__lgpanel_sendCode\" class=\"verify-btn\">{{ verifyText }}</text>\n      </view>\n      <view class=\"login-inline vcode {{ vcodeClass }}\">\n        <input placeholder=\"请填写验证码\" maxlength=\"4\" type=\"number\" bindinput=\"__lgpanel_vcodeInput\" bindfocus=\"__lgpanel_vcodeFocus\" bindblur=\"__lgpanel_vcodeBlur\" />\n      </view>\n    </view>\n    <text catchtap=\"__lgpanel_login\" class=\"login-btn\">注册/登录</text>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/movie/movieRow.wxml",
    "content": "<!-- 电影Item 单行 -->\n<import src='../rating/rating' />\n\n<template name=\"item-movie_row\">\n  <view class=\"item-movie_row padding-surround btn-bg\">\n    <image class=\"item-img\" src=\"{{cover_url}}\" mode='widthFix' lazy-load='{{true}}' />\n    <view class=\"item-info\">\n      <text>{{title}}</text>\n      <text class='subtext'>{{year}}</text>\n      <text class='subtext'>{{card_subtitle}}</text>\n      <view>\n        <view wx:if='{{rating.value > 0}}'>\n          <template is='rating' data='{{rating:rating.value, max:rating.max}}'></template>\n          <text class='subtext'>{{rating.value}}分(豆瓣)</text>\n        </view>\n        <text wx:else class='subtext'>暂无评分(豆瓣)</text>\n      </view>\n    </view>\n  </view>\n</template>\n\n<template name='item-movie_grid'>\n  <view class='item-movie_grid btn-opacity'>\n    <view class='item-img'>\n      <image src='{{images.large}}' lazy-load='{{true}}' />\n    </view>\n    <view class='item-title single-line'>{{title}}</view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/movie/movieRow.wxss",
    "content": "/* 电影Item 单行 */\n@import '../rating/rating';\n\n\n.item-movie_row {\n  display: flex;\n  flex-direction: row;\n  background-color: #fff;\n}\n\n.item-movie_row .item-img {\n  width: 150rpx;\n  min-height: 200rpx;\n  height: 200rpx;\n  background-color: #eee;\n  border-radius: 8rpx;\n  flex-shrink: 0;\n}\n\n.item-movie_row .item-info {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  margin-left: 20rpx;\n  font-size: 32rpx;\n}\n\n.item-movie_row .item-info .subtext {\n  font-size: 0.8em;\n  color: #999;\n}\n\n.item-movie_row .item-info .rating {\n  margin-right: 0.5em;\n}\n\n.padding-surround {\n  padding: 24rpx;\n  border-bottom: .5px solid #eee;\n}\n\n.item-movie_grid {\n  border: .5px solid #ddd;\n  background-color: #fff;\n}\n\n.item-movie_grid .item-img,\n.item-movie_grid .item-img>image {\n  width: 100%;\n  height: 321.6rpx;\n}\n\n.item-movie_grid .item-title {\n  width: 100%;\n  line-height: 2em;\n  text-align: center;\n}\n"
  },
  {
    "path": "miniprogram/templates/rating/rating.wxml",
    "content": "<template name=\"rating\">\n  <view class='com-rating'>\n    <block wx:for='{{[1,2,3,4,5]}}' wx:key='*this'>\n      <view class='rating-off' bindtap=\"onClick\" data-index=\"{{index}}\">\n        <view class='rating-on' \n          style='width:{{rating >= (max/5)*item ? 1 : rating < (max/5)*(item-1) ? 0 : (rating*10)%(max/5*10)/(max/5*10)}}em'\n        ><i class='fa fa-star'></i></view>\n        <view class='rating-off'><i class='fa fa-star'></i></view>\n      </view>\n    </block>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/rating/rating.wxss",
    "content": "/*  */\n.com-rating {\n  display: inline-block;\n  font-size: 1.2em;\n  letter-spacing: .3em;\n  position: relative;\n}\n.com-rating .rating-on,\n.com-rating .rating-off {\n  display: inline-block;\n}\n.com-rating .rating-on {\n  color: #ffe200;\n  position: absolute;\n  overflow: hidden;\n  padding: 0;\n  margin: 0;\n}\n.com-rating .rating-off {\n  color: #ccc;\n  padding: 0;\n  margin: 0;\n}\n"
  },
  {
    "path": "miniprogram/templates/share/share.js",
    "content": "import Component from '../component';\n\nexport default {\n\n  setDefaults() {\n    return {\n      className: undefined,\n      titleText: undefined,\n      buttons: [],\n      buttonClicked(){},\n      cancelText: `取消`,\n      cancel() {}\n    }\n  },\n\n  show(opts={}) {\n    const options = Object.assign({\n      animateCss: undefined,\n      visible: !1,\n    }, this.setDefaults(), opts)\n\n    const component = new Component({\n      scope: `$mark.share`,\n      data: options,\n      methods: {\n        /**\n         * 隐藏\n         */\n        removeShare(callback) {\n          if(this.removed) return !1\n          this.removed = !0\n          this.setHidden([`weui-animate-slide-down`, `weui-animate-fade-out`])\n          typeof callback === `function` && callback(options.buttons)\n        },\n        /**\n         * 显示\n         */\n        showShare() {\n          if(this.removed) return !1\n          this.setVisible([`weui-animate-slide-up`, `weui-animate-fade-in`])\n        },\n        /**\n         * 按钮点击事件\n         */\n        buttonClicked(e) {\n          const {index} = e.currentTarget.dataset\n          if(options.buttonClicked(index, options.buttons[index])===true) {\n            this.removeShare()\n          }\n        },\n        /**\n         * 取消按钮点击事件\n         */\n        cancel() {\n          this.removeShare(options.cancel)\n        },\n      },\n    })\n\n    component.showShare()\n\n    return component.cancel\n  },\n\n}"
  },
  {
    "path": "miniprogram/templates/share/share.wxml",
    "content": "<!-- 分享上拉菜单 -->\n\n<template name='com-share'>\n  <view class='action-sheet-backdrop {{animateCss[1]}}' wx:if='{{visible}}' bindtap='{{cancel}}'>\n    <view class='action-sheet-wrapper {{animateCss[0]}}'>\n      <view class='action-sheet' catch:tap='none'>\n        <view class='title' wx:if='{{titleText}}'>{{titleText}}</view>\n        <view class='grid'>\n          <block wx:for='{{buttons}}' wx:key='index'>\n            <button class='button btn-opacity' open-type='{{item.openType}}' plain='{{true}}' data-index='{{index}}' catchtap='{{buttonClicked}}'>\n              <view class='icon'>\n                <image src='{{item.iconPath}}' mode='widthFix' />\n              </view>\n              <view class='single-line'>{{item.title}}</view>\n            </button>\n          </block>\n        </view>\n        <view class='title btn-opacity cancel' catchtap='{{cancel}}'>{{cancelText}}</view>\n      </view>\n    </view>\n  </view>\n</template>"
  },
  {
    "path": "miniprogram/templates/share/share.wxss",
    "content": "\n.action-sheet-backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0,0,0,.4);\n}\n.action-sheet-wrapper {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    max-width: 500px;\n    margin: auto;\n    z-index: 12;\n}\n.action-sheet {\n    width: auto;\n    z-index: 11;\n    overflow: hidden;\n    background-color: #efeff4;\n    font-size: .8em;\n    border-radius: 24rpx 24rpx 0 0;\n    padding-bottom: env(safe-area-inset-bottom);\n    padding-bottom: constant(safe-area-inset-bottom);\n}\n.action-sheet .title {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: .8em;\n  border-bottom: .5px solid #e3e3e3;\n  color: #818c91;\n}\n.action-sheet .grid {\n  padding: 20rpx;\n  display: flex;\n  flex-wrap: wrap;\n}\n.grid .button {\n  width: 177.5rpx;\n  padding: 10rpx;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n  border: none;\n  font-size: inherit;\n  line-height: inherit;\n  margin: 0;\n}\n.grid .button::after {\n  content: none;\n}\n.button .icon {\n  width: 100%;\n  height: 90rpx;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.icon > image {\n  width: 50%;\n  height: 50%;\n}\n.button > view {\n  width: 100%;\n  text-align: center;\n  color: #818c91;\n  padding: .25em 0;\n}\n.action-sheet .cancel {\n  border-top: .5px solid #e3e3e3;\n  font-size: 30rpx;\n  color: #333;\n}\n@supports (padding-bottom: env(safe-area-inset-bottom)) {\n  .action-sheet .cancel{\n    padding-bottom: calc(0.8em + env(safe-area-inset-bottom));\n  }\n}\n@supports (padding-bottom: constant(safe-area-inset-bottom)) {\n  .action-sheet .cancel{\n    padding-bottom: calc(0.8em + constant(safe-area-inset-bottom));\n  }\n}"
  },
  {
    "path": "miniprogram/templates/wxParse/html2json.js",
    "content": "/**\n * html2Json 改造来自: https://github.com/Jxck/html2json\n * \n * \n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */\n\nvar __placeImgeUrlHttps = \"https\";\nvar __emojisReg = '';\nvar __emojisBaseSrc = '';\nvar __emojis = {};\nvar wxDiscode = require('./wxDiscode.js');\nvar HTMLParser = require('./htmlparser.js');\n// Empty Elements - HTML 5\nvar empty = makeMap(\"area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr\");\n// Block Elements - HTML 5\nvar block = makeMap(\"br,a,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video\");\n\n// Inline Elements - HTML 5\nvar inline = makeMap(\"abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var\");\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar closeSelf = makeMap(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr\");\n\n// Attributes that have their values filled in disabled=\"disabled\"\nvar fillAttrs = makeMap(\"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected\");\n\n// Special Elements (can contain anything)\nvar special = makeMap(\"wxxxcode-style,script,style,view,scroll-view,block\");\nfunction makeMap(str) {\n    var obj = {}, items = str.split(\",\");\n    for (var i = 0; i < items.length; i++)\n        obj[items[i]] = true;\n    return obj;\n}\n\nfunction q(v) {\n    return '\"' + v + '\"';\n}\n\nfunction removeDOCTYPE(html) {\n    return html\n        .replace(/<\\?xml.*\\?>\\n/, '')\n        .replace(/<.*!doctype.*\\>\\n/, '')\n        .replace(/<.*!DOCTYPE.*\\>\\n/, '');\n}\n\nfunction trimHtml(html) {\n  return html\n        .replace(/\\r?\\n+/g, '')\n        .replace(/<!--.*?-->/ig, '')\n        .replace(/\\/\\*.*?\\*\\//ig, '')\n        .replace(/[ ]+</ig, '<')\n}\n\n\nfunction html2json(html, bindName) {\n    //处理字符串\n    html = removeDOCTYPE(html);\n    html = trimHtml(html);\n    html = wxDiscode.strDiscode(html);\n    //生成node节点\n    var bufArray = [];\n    var results = {\n        node: bindName,\n        nodes: [],\n        images:[],\n        imageUrls:[]\n    };\n    var index = 0;\n    HTMLParser(html, {\n        start: function (tag, attrs, unary) {\n            //debug(tag, attrs, unary);\n            // node for this element\n            var node = {\n                node: 'element',\n                tag: tag,\n            };\n\n            if (bufArray.length === 0) {\n                node.index = index.toString()\n                index += 1\n            } else {\n                var parent = bufArray[0];\n                if (parent.nodes === undefined) {\n                    parent.nodes = [];\n                }\n                node.index = parent.index + '.' + parent.nodes.length\n            }\n\n            if (block[tag]) {\n                node.tagType = \"block\";\n            } else if (inline[tag]) {\n                node.tagType = \"inline\";\n            } else if (closeSelf[tag]) {\n                node.tagType = \"closeSelf\";\n            }\n\n            if (attrs.length !== 0) {\n                node.attr = attrs.reduce(function (pre, attr) {\n                    var name = attr.name;\n                    var value = attr.value;\n                    if (name == 'class') {\n                        // console.dir(value);\n                        //  value = value.join(\"\")\n                        node.classStr = value;\n                    }\n                    // has multi attibutes\n                    // make it array of attribute\n                    if (name == 'style') {\n                        // console.dir(value);\n                        //  value = value.join(\"\")\n                        node.styleStr = value;\n                    }\n                    if (value.match(/ /)) {\n                        value = value.split(' ');\n                    }\n                    \n\n                    // if attr already exists\n                    // merge it\n                    if (pre[name]) {\n                        if (Array.isArray(pre[name])) {\n                            // already array, push to last\n                            pre[name].push(value);\n                        } else {\n                            // single value, make it array\n                            pre[name] = [pre[name], value];\n                        }\n                    } else {\n                        // not exist, put it\n                        pre[name] = value;\n                    }\n\n                    return pre;\n                }, {});\n            }\n\n            //对img添加额外数据\n            if (node.tag === 'img') {\n                node.imgIndex = results.images.length;\n                var imgUrl = node.attr.src;\n                if (imgUrl[0] == '') {\n                    imgUrl.splice(0, 1);\n                }\n                imgUrl = wxDiscode.urlToHttpUrl(imgUrl, __placeImgeUrlHttps);\n                node.attr.src = imgUrl;\n                node.from = bindName;\n                results.images.push(node);\n                results.imageUrls.push(imgUrl);\n            }\n            \n            // 处理font标签样式属性\n            if (node.tag === 'font') {\n                var fontSize = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large'];\n                var styleAttrs = {\n                    'color': 'color',\n                    'face': 'font-family',\n                    'size': 'font-size'\n                };\n                if (!node.attr.style) node.attr.style = [];\n                if (!node.styleStr) node.styleStr = '';\n                for (var key in styleAttrs) {\n                    if (node.attr[key]) {\n                        var value = key === 'size' ? fontSize[node.attr[key]-1] : node.attr[key];\n                        node.attr.style.push(styleAttrs[key]);\n                        node.attr.style.push(value);\n                        node.styleStr += styleAttrs[key] + ': ' + value + ';';\n                    }\n                }\n            }\n\n            //临时记录source资源\n            if(node.tag === 'source'){\n                results.source = node.attr.src;\n            }\n            \n            if (unary) {\n                // if this tag dosen't have end tag\n                // like <img src=\"hoge.png\"/>\n                // add to parents\n                var parent = bufArray[0] || results;\n                if (parent.nodes === undefined) {\n                    parent.nodes = [];\n                }\n                parent.nodes.push(node);\n            } else {\n                bufArray.unshift(node);\n            }\n        },\n        end: function (tag) {\n            //debug(tag);\n            // merge into parent tag\n            var node = bufArray.shift();\n            if (node.tag !== tag) console.error('invalid state: mismatch end tag');\n\n            //当有缓存source资源时于于video补上src资源\n            if(node.tag === 'video' && results.source){\n                node.attr.src = results.source;\n                delete results.source;\n            }\n            \n            if (bufArray.length === 0) {\n                results.nodes.push(node);\n            } else {\n                var parent = bufArray[0];\n                if (parent.nodes === undefined) {\n                    parent.nodes = [];\n                }\n                parent.nodes.push(node);\n            }\n        },\n        chars: function (text) {\n            //debug(text);\n            var node = {\n                node: 'text',\n                text: text,\n                textArray:transEmojiStr(text)\n            };\n            \n            if (bufArray.length === 0) {\n                node.index = index.toString()\n                index += 1\n                results.nodes.push(node);\n            } else {\n                var parent = bufArray[0];\n                if (parent.nodes === undefined) {\n                    parent.nodes = [];\n                }\n                node.index = parent.index + '.' + parent.nodes.length\n                parent.nodes.push(node);\n            }\n        },\n        comment: function (text) {\n            //debug(text);\n            // var node = {\n            //     node: 'comment',\n            //     text: text,\n            // };\n            // var parent = bufArray[0];\n            // if (parent.nodes === undefined) {\n            //     parent.nodes = [];\n            // }\n            // parent.nodes.push(node);\n        },\n    });\n    return results;\n};\n\nfunction transEmojiStr(str){\n  // var eReg = new RegExp(\"[\"+__reg+' '+\"]\");\n//   str = str.replace(/\\[([^\\[\\]]+)\\]/g,':$1:')\n  \n  var emojiObjs = [];\n  //如果正则表达式为空\n  if(__emojisReg.length == 0 || !__emojis){\n      var emojiObj = {}\n      emojiObj.node = \"text\";\n      emojiObj.text = str;\n      array = [emojiObj];\n      return array;\n  }\n  //这个地方需要调整\n  str = str.replace(/\\[([^\\[\\]]+)\\]/g,':$1:')\n  var eReg = new RegExp(\"[:]\");\n  var array = str.split(eReg);\n  for(var i = 0; i < array.length; i++){\n    var ele = array[i];\n    var emojiObj = {};\n    if(__emojis[ele]){\n      emojiObj.node = \"element\";\n      emojiObj.tag = \"emoji\";\n      emojiObj.text = __emojis[ele];\n      emojiObj.baseSrc= __emojisBaseSrc;\n    }else{\n      emojiObj.node = \"text\";\n      emojiObj.text = ele;\n    }\n    emojiObjs.push(emojiObj);\n  }\n  \n  return emojiObjs;\n}\n\nfunction emojisInit(reg='',baseSrc=\"/wxParse/emojis/\",emojis){\n    __emojisReg = reg;\n    __emojisBaseSrc=baseSrc;\n    __emojis=emojis;\n}\n\nmodule.exports = {\n    html2json: html2json,\n    emojisInit:emojisInit\n};\n\n"
  },
  {
    "path": "miniprogram/templates/wxParse/htmlparser.js",
    "content": "/**\n * \n * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser\n * \n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */\n// Regular Expressions for parsing tags and attributes\nvar startTag = /^<([-A-Za-z0-9_]+)((?:\\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/,\n\tendTag = /^<\\/([-A-Za-z0-9_]+)[^>]*>/,\n\tattr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g;\n\n// Empty Elements - HTML 5\nvar empty = makeMap(\"area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr\");\n\n// Block Elements - HTML 5\nvar block = makeMap(\"a,address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video\");\n\n// Inline Elements - HTML 5\nvar inline = makeMap(\"abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var\");\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar closeSelf = makeMap(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr\");\n\n// Attributes that have their values filled in disabled=\"disabled\"\nvar fillAttrs = makeMap(\"checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected\");\n\n// Special Elements (can contain anything)\nvar special = makeMap(\"wxxxcode-style,script,style,view,scroll-view,block\");\n\nfunction HTMLParser(html, handler) {\n\tvar index, chars, match, stack = [], last = html;\n\tstack.last = function () {\n\t\treturn this[this.length - 1];\n\t};\n\n\twhile (html) {\n\t\tchars = true;\n\n\t\t// Make sure we're not in a script or style element\n\t\tif (!stack.last() || !special[stack.last()]) {\n\n\t\t\t// Comment\n\t\t\tif (html.indexOf(\"<!--\") == 0) {\n\t\t\t\tindex = html.indexOf(\"-->\");\n\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tif (handler.comment)\n\t\t\t\t\t\thandler.comment(html.substring(4, index));\n\t\t\t\t\thtml = html.substring(index + 3);\n\t\t\t\t\tchars = false;\n\t\t\t\t}\n\n\t\t\t\t// end tag\n\t\t\t} else if (html.indexOf(\"</\") == 0) {\n\t\t\t\tmatch = html.match(endTag);\n\n\t\t\t\tif (match) {\n\t\t\t\t\thtml = html.substring(match[0].length);\n\t\t\t\t\tmatch[0].replace(endTag, parseEndTag);\n\t\t\t\t\tchars = false;\n\t\t\t\t}\n\n\t\t\t\t// start tag\n\t\t\t} else if (html.indexOf(\"<\") == 0) {\n\t\t\t\tmatch = html.match(startTag);\n\n\t\t\t\tif (match) {\n\t\t\t\t\thtml = html.substring(match[0].length);\n\t\t\t\t\tmatch[0].replace(startTag, parseStartTag);\n\t\t\t\t\tchars = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (chars) {\n\t\t\t\tindex = html.indexOf(\"<\");\n\t\t\t\tvar text = ''\n\t\t\t\twhile (index === 0) {\n                                  text += \"<\";\n                                  html = html.substring(1);\n                                  index = html.indexOf(\"<\");\n\t\t\t\t}\n\t\t\t\ttext += index < 0 ? html : html.substring(0, index);\n\t\t\t\thtml = index < 0 ? \"\" : html.substring(index);\n\n\t\t\t\tif (handler.chars)\n\t\t\t\t\thandler.chars(text);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\thtml = html.replace(new RegExp(\"([\\\\s\\\\S]*?)<\\/\" + stack.last() + \"[^>]*>\"), function (all, text) {\n\t\t\t\ttext = text.replace(/<!--([\\s\\S]*?)-->|<!\\[CDATA\\[([\\s\\S]*?)]]>/g, \"$1$2\");\n\t\t\t\tif (handler.chars)\n\t\t\t\t\thandler.chars(text);\n\n\t\t\t\treturn \"\";\n\t\t\t});\n\n\n\t\t\tparseEndTag(\"\", stack.last());\n\t\t}\n\n\t\tif (html == last)\n\t\t\tthrow \"Parse Error: \" + html;\n\t\tlast = html;\n\t}\n\n\t// Clean up any remaining tags\n\tparseEndTag();\n\n\tfunction parseStartTag(tag, tagName, rest, unary) {\n\t\ttagName = tagName.toLowerCase();\n\n\t\tif (block[tagName]) {\n\t\t\twhile (stack.last() && inline[stack.last()]) {\n\t\t\t\tparseEndTag(\"\", stack.last());\n\t\t\t}\n\t\t}\n\n\t\tif (closeSelf[tagName] && stack.last() == tagName) {\n\t\t\tparseEndTag(\"\", tagName);\n\t\t}\n\n\t\tunary = empty[tagName] || !!unary;\n\n\t\tif (!unary)\n\t\t\tstack.push(tagName);\n\n\t\tif (handler.start) {\n\t\t\tvar attrs = [];\n\n\t\t\trest.replace(attr, function (match, name) {\n\t\t\t\tvar value = arguments[2] ? arguments[2] :\n\t\t\t\t\targuments[3] ? arguments[3] :\n\t\t\t\t\t\targuments[4] ? arguments[4] :\n\t\t\t\t\t\t\tfillAttrs[name] ? name : \"\";\n\n\t\t\t\tattrs.push({\n\t\t\t\t\tname: name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tescaped: value.replace(/(^|[^\\\\])\"/g, '$1\\\\\\\"') //\"\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (handler.start) {\n\t\t\t\thandler.start(tagName, attrs, unary);\n\t\t\t}\n\n\t\t}\n\t}\n\n\tfunction parseEndTag(tag, tagName) {\n\t\t// If no tag name is provided, clean shop\n\t\tif (!tagName)\n\t\t\tvar pos = 0;\n\n\t\t// Find the closest opened tag of the same type\n\t\telse {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t\tfor (var pos = stack.length - 1; pos >= 0; pos--)\n\t\t\t\tif (stack[pos] == tagName)\n\t\t\t\t\tbreak;\n\t\t}\n\t\tif (pos >= 0) {\n\t\t\t// Close all the open elements, up the stack\n\t\t\tfor (var i = stack.length - 1; i >= pos; i--)\n\t\t\t\tif (handler.end)\n\t\t\t\t\thandler.end(stack[i]);\n\n\t\t\t// Remove the open elements from the stack\n\t\t\tstack.length = pos;\n\t\t}\n\t}\n};\n\n\nfunction makeMap(str) {\n\tvar obj = {}, items = str.split(\",\");\n\tfor (var i = 0; i < items.length; i++)\n\t\tobj[items[i]] = true;\n\treturn obj;\n}\n\nmodule.exports = HTMLParser;\n"
  },
  {
    "path": "miniprogram/templates/wxParse/showdown.js",
    "content": "/**\n * \n * showdown: https://github.com/showdownjs/showdown\n * \n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */\n\nfunction getDefaultOpts(simple) {\n  'use strict';\n\n  var defaultOptions = {\n    omitExtraWLInCodeBlocks: {\n      defaultValue: false,\n      describe: 'Omit the default extra whiteline added to code blocks',\n      type: 'boolean'\n    },\n    noHeaderId: {\n      defaultValue: false,\n      describe: 'Turn on/off generated header id',\n      type: 'boolean'\n    },\n    prefixHeaderId: {\n      defaultValue: false,\n      describe: 'Specify a prefix to generated header ids',\n      type: 'string'\n    },\n    headerLevelStart: {\n      defaultValue: false,\n      describe: 'The header blocks level start',\n      type: 'integer'\n    },\n    parseImgDimensions: {\n      defaultValue: false,\n      describe: 'Turn on/off image dimension parsing',\n      type: 'boolean'\n    },\n    simplifiedAutoLink: {\n      defaultValue: false,\n      describe: 'Turn on/off GFM autolink style',\n      type: 'boolean'\n    },\n    literalMidWordUnderscores: {\n      defaultValue: false,\n      describe: 'Parse midword underscores as literal underscores',\n      type: 'boolean'\n    },\n    strikethrough: {\n      defaultValue: false,\n      describe: 'Turn on/off strikethrough support',\n      type: 'boolean'\n    },\n    tables: {\n      defaultValue: false,\n      describe: 'Turn on/off tables support',\n      type: 'boolean'\n    },\n    tablesHeaderId: {\n      defaultValue: false,\n      describe: 'Add an id to table headers',\n      type: 'boolean'\n    },\n    ghCodeBlocks: {\n      defaultValue: true,\n      describe: 'Turn on/off GFM fenced code blocks support',\n      type: 'boolean'\n    },\n    tasklists: {\n      defaultValue: false,\n      describe: 'Turn on/off GFM tasklist support',\n      type: 'boolean'\n    },\n    smoothLivePreview: {\n      defaultValue: false,\n      describe: 'Prevents weird effects in live previews due to incomplete input',\n      type: 'boolean'\n    },\n    smartIndentationFix: {\n      defaultValue: false,\n      description: 'Tries to smartly fix identation in es6 strings',\n      type: 'boolean'\n    }\n  };\n  if (simple === false) {\n    return JSON.parse(JSON.stringify(defaultOptions));\n  }\n  var ret = {};\n  for (var opt in defaultOptions) {\n    if (defaultOptions.hasOwnProperty(opt)) {\n      ret[opt] = defaultOptions[opt].defaultValue;\n    }\n  }\n  return ret;\n}\n\n/**\n * Created by Tivie on 06-01-2015.\n */\n\n// Private properties\nvar showdown = {},\n    parsers = {},\n    extensions = {},\n    globalOptions = getDefaultOpts(true),\n    flavor = {\n      github: {\n        omitExtraWLInCodeBlocks:   true,\n        prefixHeaderId:            'user-content-',\n        simplifiedAutoLink:        true,\n        literalMidWordUnderscores: true,\n        strikethrough:             true,\n        tables:                    true,\n        tablesHeaderId:            true,\n        ghCodeBlocks:              true,\n        tasklists:                 true\n      },\n      vanilla: getDefaultOpts(true)\n    };\n\n/**\n * helper namespace\n * @type {{}}\n */\nshowdown.helper = {};\n\n/**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\nshowdown.extensions = {};\n\n/**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\nshowdown.setOption = function (key, value) {\n  'use strict';\n  globalOptions[key] = value;\n  return this;\n};\n\n/**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\nshowdown.getOption = function (key) {\n  'use strict';\n  return globalOptions[key];\n};\n\n/**\n * Get the global options\n * @static\n * @returns {{}}\n */\nshowdown.getOptions = function () {\n  'use strict';\n  return globalOptions;\n};\n\n/**\n * Reset global options to the default values\n * @static\n */\nshowdown.resetOptions = function () {\n  'use strict';\n  globalOptions = getDefaultOpts(true);\n};\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function (name) {\n  'use strict';\n  if (flavor.hasOwnProperty(name)) {\n    var preset = flavor[name];\n    for (var option in preset) {\n      if (preset.hasOwnProperty(option)) {\n        globalOptions[option] = preset[option];\n      }\n    }\n  }\n};\n\n/**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\nshowdown.getDefaultOptions = function (simple) {\n  'use strict';\n  return getDefaultOpts(simple);\n};\n\n/**\n * Get or set a subParser\n *\n * subParser(name)       - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\nshowdown.subParser = function (name, func) {\n  'use strict';\n  if (showdown.helper.isString(name)) {\n    if (typeof func !== 'undefined') {\n      parsers[name] = func;\n    } else {\n      if (parsers.hasOwnProperty(name)) {\n        return parsers[name];\n      } else {\n        throw Error('SubParser named ' + name + ' not registered!');\n      }\n    }\n  }\n};\n\n/**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.extension = function (name, ext) {\n  'use strict';\n\n  if (!showdown.helper.isString(name)) {\n    throw Error('Extension \\'name\\' must be a string');\n  }\n\n  name = showdown.helper.stdExtName(name);\n\n  // Getter\n  if (showdown.helper.isUndefined(ext)) {\n    if (!extensions.hasOwnProperty(name)) {\n      throw Error('Extension named ' + name + ' is not registered!');\n    }\n    return extensions[name];\n\n    // Setter\n  } else {\n    // Expand extension if it's wrapped in a function\n    if (typeof ext === 'function') {\n      ext = ext();\n    }\n\n    // Ensure extension is an array\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n\n    var validExtension = validate(ext, name);\n\n    if (validExtension.valid) {\n      extensions[name] = ext;\n    } else {\n      throw Error(validExtension.error);\n    }\n  }\n};\n\n/**\n * Gets all extensions registered\n * @returns {{}}\n */\nshowdown.getAllExtensions = function () {\n  'use strict';\n  return extensions;\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function (name) {\n  'use strict';\n  delete extensions[name];\n};\n\n/**\n * Removes all extensions\n */\nshowdown.resetExtensions = function () {\n  'use strict';\n  extensions = {};\n};\n\n/**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\nfunction validate(extension, name) {\n  'use strict';\n\n  var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n    ret = {\n      valid: true,\n      error: ''\n    };\n\n  if (!showdown.helper.isArray(extension)) {\n    extension = [extension];\n  }\n\n  for (var i = 0; i < extension.length; ++i) {\n    var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n        ext = extension[i];\n    if (typeof ext !== 'object') {\n      ret.valid = false;\n      ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n      return ret;\n    }\n\n    if (!showdown.helper.isString(ext.type)) {\n      ret.valid = false;\n      ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n      return ret;\n    }\n\n    var type = ext.type = ext.type.toLowerCase();\n\n    // normalize extension type\n    if (type === 'language') {\n      type = ext.type = 'lang';\n    }\n\n    if (type === 'html') {\n      type = ext.type = 'output';\n    }\n\n    if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n      ret.valid = false;\n      ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n      return ret;\n    }\n\n    if (type === 'listener') {\n      if (showdown.helper.isUndefined(ext.listeners)) {\n        ret.valid = false;\n        ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n        return ret;\n      }\n    } else {\n      if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n        ret.valid = false;\n        ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n        return ret;\n      }\n    }\n\n    if (ext.listeners) {\n      if (typeof ext.listeners !== 'object') {\n        ret.valid = false;\n        ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n        return ret;\n      }\n      for (var ln in ext.listeners) {\n        if (ext.listeners.hasOwnProperty(ln)) {\n          if (typeof ext.listeners[ln] !== 'function') {\n            ret.valid = false;\n            ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln +\n              ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n            return ret;\n          }\n        }\n      }\n    }\n\n    if (ext.filter) {\n      if (typeof ext.filter !== 'function') {\n        ret.valid = false;\n        ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n        return ret;\n      }\n    } else if (ext.regex) {\n      if (showdown.helper.isString(ext.regex)) {\n        ext.regex = new RegExp(ext.regex, 'g');\n      }\n      if (!ext.regex instanceof RegExp) {\n        ret.valid = false;\n        ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n        return ret;\n      }\n      if (showdown.helper.isUndefined(ext.replace)) {\n        ret.valid = false;\n        ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n        return ret;\n      }\n    }\n  }\n  return ret;\n}\n\n/**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\nshowdown.validateExtension = function (ext) {\n  'use strict';\n\n  var validateExtension = validate(ext, null);\n  if (!validateExtension.valid) {\n    console.warn(validateExtension.error);\n    return false;\n  }\n  return true;\n};\n\n/**\n * showdownjs helper functions\n */\n\nif (!showdown.hasOwnProperty('helper')) {\n  showdown.helper = {};\n}\n\n/**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isString = function isString(a) {\n  'use strict';\n  return (typeof a === 'string' || a instanceof String);\n};\n\n/**\n * Check if var is a function\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isFunction = function isFunction(a) {\n  'use strict';\n  var getType = {};\n  return a && getType.toString.call(a) === '[object Function]';\n};\n\n/**\n * ForEach helper function\n * @static\n * @param {*} obj\n * @param {function} callback\n */\nshowdown.helper.forEach = function forEach(obj, callback) {\n  'use strict';\n  if (typeof obj.forEach === 'function') {\n    obj.forEach(callback);\n  } else {\n    for (var i = 0; i < obj.length; i++) {\n      callback(obj[i], i, obj);\n    }\n  }\n};\n\n/**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isArray = function isArray(a) {\n  'use strict';\n  return a.constructor === Array;\n};\n\n/**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\nshowdown.helper.isUndefined = function isUndefined(value) {\n  'use strict';\n  return typeof value === 'undefined';\n};\n\n/**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\nshowdown.helper.stdExtName = function (s) {\n  'use strict';\n  return s.replace(/[_-]||\\s/g, '').toLowerCase();\n};\n\nfunction escapeCharactersCallback(wholeMatch, m1) {\n  'use strict';\n  var charCodeToEscape = m1.charCodeAt(0);\n  return '~E' + charCodeToEscape + 'E';\n}\n\n/**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\nshowdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n\n/**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\nshowdown.helper.escapeCharacters = function escapeCharacters(text, charsToEscape, afterBackslash) {\n  'use strict';\n  // First we have to escape the escape characters so that\n  // we can build a character class out of them\n  var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n  if (afterBackslash) {\n    regexString = '\\\\\\\\' + regexString;\n  }\n\n  var regex = new RegExp(regexString, 'g');\n  text = text.replace(regex, escapeCharactersCallback);\n\n  return text;\n};\n\nvar rgxFindMatchPos = function (str, left, right, flags) {\n  'use strict';\n  var f = flags || '',\n    g = f.indexOf('g') > -1,\n    x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n    l = new RegExp(left, f.replace(/g/g, '')),\n    pos = [],\n    t, s, m, start, end;\n\n  do {\n    t = 0;\n    while ((m = x.exec(str))) {\n      if (l.test(m[0])) {\n        if (!(t++)) {\n          s = x.lastIndex;\n          start = s - m[0].length;\n        }\n      } else if (t) {\n        if (!--t) {\n          end = m.index + m[0].length;\n          var obj = {\n            left: {start: start, end: s},\n            match: {start: s, end: m.index},\n            right: {start: m.index, end: end},\n            wholeMatch: {start: start, end: end}\n          };\n          pos.push(obj);\n          if (!g) {\n            return pos;\n          }\n        }\n      }\n    }\n  } while (t && (x.lastIndex = s));\n\n  return pos;\n};\n\n/**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan <stevenlevithan.com>\n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<<x>\" and \"<x>>\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"<x>\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\"<t<<e>><s>>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<<e>><s>\", \"\"]\n * matchRecursiveRegExp(\"<div id=\\\"x\\\">test</div>\", \"<div\\\\b[^>]*>\", \"</div>\", \"gi\")\n * returns: [\"test\"]\n */\nshowdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n  'use strict';\n\n  var matchPos = rgxFindMatchPos (str, left, right, flags),\n    results = [];\n\n  for (var i = 0; i < matchPos.length; ++i) {\n    results.push([\n      str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n      str.slice(matchPos[i].match.start, matchPos[i].match.end),\n      str.slice(matchPos[i].left.start, matchPos[i].left.end),\n      str.slice(matchPos[i].right.start, matchPos[i].right.end)\n    ]);\n  }\n  return results;\n};\n\n/**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\nshowdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n  'use strict';\n\n  if (!showdown.helper.isFunction(replacement)) {\n    var repStr = replacement;\n    replacement = function () {\n      return repStr;\n    };\n  }\n\n  var matchPos = rgxFindMatchPos(str, left, right, flags),\n      finalStr = str,\n      lng = matchPos.length;\n\n  if (lng > 0) {\n    var bits = [];\n    if (matchPos[0].wholeMatch.start !== 0) {\n      bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n    }\n    for (var i = 0; i < lng; ++i) {\n      bits.push(\n        replacement(\n          str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n          str.slice(matchPos[i].match.start, matchPos[i].match.end),\n          str.slice(matchPos[i].left.start, matchPos[i].left.end),\n          str.slice(matchPos[i].right.start, matchPos[i].right.end)\n        )\n      );\n      if (i < lng - 1) {\n        bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n      }\n    }\n    if (matchPos[lng - 1].wholeMatch.end < str.length) {\n      bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n    }\n    finalStr = bits.join('');\n  }\n  return finalStr;\n};\n\n/**\n * POLYFILLS\n */\nif (showdown.helper.isUndefined(console)) {\n  console = {\n    warn: function (msg) {\n      'use strict';\n      alert(msg);\n    },\n    log: function (msg) {\n      'use strict';\n      alert(msg);\n    },\n    error: function (msg) {\n      'use strict';\n      throw msg;\n    }\n  };\n}\n\n/**\n * Created by Estevao on 31-05-2015.\n */\n\n/**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\nshowdown.Converter = function (converterOptions) {\n  'use strict';\n\n  var\n      /**\n       * Options used by this converter\n       * @private\n       * @type {{}}\n       */\n      options = {},\n\n      /**\n       * Language extensions used by this converter\n       * @private\n       * @type {Array}\n       */\n      langExtensions = [],\n\n      /**\n       * Output modifiers extensions used by this converter\n       * @private\n       * @type {Array}\n       */\n      outputModifiers = [],\n\n      /**\n       * Event listeners\n       * @private\n       * @type {{}}\n       */\n      listeners = {};\n\n  _constructor();\n\n  /**\n   * Converter constructor\n   * @private\n   */\n  function _constructor() {\n    converterOptions = converterOptions || {};\n\n    for (var gOpt in globalOptions) {\n      if (globalOptions.hasOwnProperty(gOpt)) {\n        options[gOpt] = globalOptions[gOpt];\n      }\n    }\n\n    // Merge options\n    if (typeof converterOptions === 'object') {\n      for (var opt in converterOptions) {\n        if (converterOptions.hasOwnProperty(opt)) {\n          options[opt] = converterOptions[opt];\n        }\n      }\n    } else {\n      throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +\n      ' was passed instead.');\n    }\n\n    if (options.extensions) {\n      showdown.helper.forEach(options.extensions, _parseExtension);\n    }\n  }\n\n  /**\n   * Parse extension\n   * @param {*} ext\n   * @param {string} [name='']\n   * @private\n   */\n  function _parseExtension(ext, name) {\n\n    name = name || null;\n    // If it's a string, the extension was previously loaded\n    if (showdown.helper.isString(ext)) {\n      ext = showdown.helper.stdExtName(ext);\n      name = ext;\n\n      // LEGACY_SUPPORT CODE\n      if (showdown.extensions[ext]) {\n        console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +\n          'Please inform the developer that the extension should be updated!');\n        legacyExtensionLoading(showdown.extensions[ext], ext);\n        return;\n      // END LEGACY SUPPORT CODE\n\n      } else if (!showdown.helper.isUndefined(extensions[ext])) {\n        ext = extensions[ext];\n\n      } else {\n        throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n      }\n    }\n\n    if (typeof ext === 'function') {\n      ext = ext();\n    }\n\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n\n    var validExt = validate(ext, name);\n    if (!validExt.valid) {\n      throw Error(validExt.error);\n    }\n\n    for (var i = 0; i < ext.length; ++i) {\n      switch (ext[i].type) {\n\n        case 'lang':\n          langExtensions.push(ext[i]);\n          break;\n\n        case 'output':\n          outputModifiers.push(ext[i]);\n          break;\n      }\n      if (ext[i].hasOwnProperty(listeners)) {\n        for (var ln in ext[i].listeners) {\n          if (ext[i].listeners.hasOwnProperty(ln)) {\n            listen(ln, ext[i].listeners[ln]);\n          }\n        }\n      }\n    }\n\n  }\n\n  /**\n   * LEGACY_SUPPORT\n   * @param {*} ext\n   * @param {string} name\n   */\n  function legacyExtensionLoading(ext, name) {\n    if (typeof ext === 'function') {\n      ext = ext(new showdown.Converter());\n    }\n    if (!showdown.helper.isArray(ext)) {\n      ext = [ext];\n    }\n    var valid = validate(ext, name);\n\n    if (!valid.valid) {\n      throw Error(valid.error);\n    }\n\n    for (var i = 0; i < ext.length; ++i) {\n      switch (ext[i].type) {\n        case 'lang':\n          langExtensions.push(ext[i]);\n          break;\n        case 'output':\n          outputModifiers.push(ext[i]);\n          break;\n        default:// should never reach here\n          throw Error('Extension loader error: Type unrecognized!!!');\n      }\n    }\n  }\n\n  /**\n   * Listen to an event\n   * @param {string} name\n   * @param {function} callback\n   */\n  function listen(name, callback) {\n    if (!showdown.helper.isString(name)) {\n      throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n    }\n\n    if (typeof callback !== 'function') {\n      throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n    }\n\n    if (!listeners.hasOwnProperty(name)) {\n      listeners[name] = [];\n    }\n    listeners[name].push(callback);\n  }\n\n  function rTrimInputText(text) {\n    var rsp = text.match(/^\\s*/)[0].length,\n        rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n    return text.replace(rgx, '');\n  }\n\n  /**\n   * Dispatch an event\n   * @private\n   * @param {string} evtName Event name\n   * @param {string} text Text\n   * @param {{}} options Converter Options\n   * @param {{}} globals\n   * @returns {string}\n   */\n  this._dispatch = function dispatch (evtName, text, options, globals) {\n    if (listeners.hasOwnProperty(evtName)) {\n      for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n        var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n        if (nText && typeof nText !== 'undefined') {\n          text = nText;\n        }\n      }\n    }\n    return text;\n  };\n\n  /**\n   * Listen to an event\n   * @param {string} name\n   * @param {function} callback\n   * @returns {showdown.Converter}\n   */\n  this.listen = function (name, callback) {\n    listen(name, callback);\n    return this;\n  };\n\n  /**\n   * Converts a markdown string into HTML\n   * @param {string} text\n   * @returns {*}\n   */\n  this.makeHtml = function (text) {\n    //check if text is not falsy\n    if (!text) {\n      return text;\n    }\n\n    var globals = {\n      gHtmlBlocks:     [],\n      gHtmlMdBlocks:   [],\n      gHtmlSpans:      [],\n      gUrls:           {},\n      gTitles:         {},\n      gDimensions:     {},\n      gListLevel:      0,\n      hashLinkCounts:  {},\n      langExtensions:  langExtensions,\n      outputModifiers: outputModifiers,\n      converter:       this,\n      ghCodeBlocks:    []\n    };\n\n    // attacklab: Replace ~ with ~T\n    // This lets us use tilde as an escape char to avoid md5 hashes\n    // The choice of character is arbitrary; anything that isn't\n    // magic in Markdown will work.\n    text = text.replace(/~/g, '~T');\n\n    // attacklab: Replace $ with ~D\n    // RegExp interprets $ as a special character\n    // when it's in a replacement string\n    text = text.replace(/\\$/g, '~D');\n\n    // Standardize line endings\n    text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n    text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n\n    if (options.smartIndentationFix) {\n      text = rTrimInputText(text);\n    }\n\n    // Make sure text begins and ends with a couple of newlines:\n    //text = '\\n\\n' + text + '\\n\\n';\n    text = text;\n    // detab\n    text = showdown.subParser('detab')(text, options, globals);\n\n    // stripBlankLines\n    text = showdown.subParser('stripBlankLines')(text, options, globals);\n\n    //run languageExtensions\n    showdown.helper.forEach(langExtensions, function (ext) {\n      text = showdown.subParser('runExtension')(ext, text, options, globals);\n    });\n\n    // run the sub parsers\n    text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n    text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n    text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n    text = showdown.subParser('hashHTMLSpans')(text, options, globals);\n    text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n    text = showdown.subParser('blockGamut')(text, options, globals);\n    text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n    text = showdown.subParser('unescapeSpecialChars')(text, options, globals);\n\n    // attacklab: Restore dollar signs\n    text = text.replace(/~D/g, '$$');\n\n    // attacklab: Restore tildes\n    text = text.replace(/~T/g, '~');\n\n    // Run output modifiers\n    showdown.helper.forEach(outputModifiers, function (ext) {\n      text = showdown.subParser('runExtension')(ext, text, options, globals);\n    });\n    return text;\n  };\n\n  /**\n   * Set an option of this Converter instance\n   * @param {string} key\n   * @param {*} value\n   */\n  this.setOption = function (key, value) {\n    options[key] = value;\n  };\n\n  /**\n   * Get the option of this Converter instance\n   * @param {string} key\n   * @returns {*}\n   */\n  this.getOption = function (key) {\n    return options[key];\n  };\n\n  /**\n   * Get the options of this Converter instance\n   * @returns {{}}\n   */\n  this.getOptions = function () {\n    return options;\n  };\n\n  /**\n   * Add extension to THIS converter\n   * @param {{}} extension\n   * @param {string} [name=null]\n   */\n  this.addExtension = function (extension, name) {\n    name = name || null;\n    _parseExtension(extension, name);\n  };\n\n  /**\n   * Use a global registered extension with THIS converter\n   * @param {string} extensionName Name of the previously registered extension\n   */\n  this.useExtension = function (extensionName) {\n    _parseExtension(extensionName);\n  };\n\n  /**\n   * Set the flavor THIS converter should use\n   * @param {string} name\n   */\n  this.setFlavor = function (name) {\n    if (flavor.hasOwnProperty(name)) {\n      var preset = flavor[name];\n      for (var option in preset) {\n        if (preset.hasOwnProperty(option)) {\n          options[option] = preset[option];\n        }\n      }\n    }\n  };\n\n  /**\n   * Remove an extension from THIS converter.\n   * Note: This is a costly operation. It's better to initialize a new converter\n   * and specify the extensions you wish to use\n   * @param {Array} extension\n   */\n  this.removeExtension = function (extension) {\n    if (!showdown.helper.isArray(extension)) {\n      extension = [extension];\n    }\n    for (var a = 0; a < extension.length; ++a) {\n      var ext = extension[a];\n      for (var i = 0; i < langExtensions.length; ++i) {\n        if (langExtensions[i] === ext) {\n          langExtensions[i].splice(i, 1);\n        }\n      }\n      for (var ii = 0; ii < outputModifiers.length; ++i) {\n        if (outputModifiers[ii] === ext) {\n          outputModifiers[ii].splice(i, 1);\n        }\n      }\n    }\n  };\n\n  /**\n   * Get all extension of THIS converter\n   * @returns {{language: Array, output: Array}}\n   */\n  this.getAllExtensions = function () {\n    return {\n      language: langExtensions,\n      output: outputModifiers\n    };\n  };\n};\n\n/**\n * Turn Markdown link shortcuts into XHTML <a> tags.\n */\nshowdown.subParser('anchors', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n  var writeAnchorTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) {\n    if (showdown.helper.isUndefined(m7)) {\n      m7 = '';\n    }\n    wholeMatch = m1;\n    var linkText = m2,\n        linkId = m3.toLowerCase(),\n        url = m4,\n        title = m7;\n\n    if (!url) {\n      if (!linkId) {\n        // lower-case and turn embedded newlines into spaces\n        linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n      }\n      url = '#' + linkId;\n\n      if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n        url = globals.gUrls[linkId];\n        if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n          title = globals.gTitles[linkId];\n        }\n      } else {\n        if (wholeMatch.search(/\\(\\s*\\)$/m) > -1) {\n          // Special case for explicit empty url\n          url = '';\n        } else {\n          return wholeMatch;\n        }\n      }\n    }\n\n    url = showdown.helper.escapeCharacters(url, '*_', false);\n    var result = '<a href=\"' + url + '\"';\n\n    if (title !== '' && title !== null) {\n      title = title.replace(/\"/g, '&quot;');\n      title = showdown.helper.escapeCharacters(title, '*_', false);\n      result += ' title=\"' + title + '\"';\n    }\n\n    result += '>' + linkText + '</a>';\n\n    return result;\n  };\n\n  // First, handle reference-style links: [link text] [id]\n  /*\n   text = text.replace(/\n   (\t\t\t\t\t\t\t// wrap whole match in $1\n   \\[\n   (\n   (?:\n   \\[[^\\]]*\\]\t\t// allow brackets nested one level\n   |\n   [^\\[]\t\t\t// or anything else\n   )*\n   )\n   \\]\n\n   [ ]?\t\t\t\t\t// one optional space\n   (?:\\n[ ]*)?\t\t\t\t// one optional newline followed by spaces\n\n   \\[\n   (.*?)\t\t\t\t\t// id = $3\n   \\]\n   )()()()()\t\t\t\t\t// pad remaining backreferences\n   /g,_DoAnchors_callback);\n   */\n  text = text.replace(/(\\[((?:\\[[^\\]]*]|[^\\[\\]])*)][ ]?(?:\\n[ ]*)?\\[(.*?)])()()()()/g, writeAnchorTag);\n\n  //\n  // Next, inline-style links: [link text](url \"optional title\")\n  //\n\n  /*\n   text = text.replace(/\n   (\t\t\t\t\t\t// wrap whole match in $1\n   \\[\n   (\n   (?:\n   \\[[^\\]]*\\]\t// allow brackets nested one level\n   |\n   [^\\[\\]]\t\t\t// or anything else\n   )\n   )\n   \\]\n   \\(\t\t\t\t\t\t// literal paren\n   [ \\t]*\n   ()\t\t\t\t\t\t// no id, so leave $3 empty\n   <?(.*?)>?\t\t\t\t// href = $4\n   [ \\t]*\n   (\t\t\t\t\t\t// $5\n   (['\"])\t\t\t\t// quote char = $6\n   (.*?)\t\t\t\t// Title = $7\n   \\6\t\t\t\t\t// matching quote\n   [ \\t]*\t\t\t\t// ignore any spaces/tabs between closing quote and )\n   )?\t\t\t\t\t\t// title is optional\n   \\)\n   )\n   /g,writeAnchorTag);\n   */\n  text = text.replace(/(\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]\\([ \\t]*()<?(.*?(?:\\(.*?\\).*?)?)>?[ \\t]*((['\"])(.*?)\\6[ \\t]*)?\\))/g,\n                      writeAnchorTag);\n\n  //\n  // Last, handle reference-style shortcuts: [link text]\n  // These must come last in case you've also got [link test][1]\n  // or [link test](/foo)\n  //\n\n  /*\n   text = text.replace(/\n   (                // wrap whole match in $1\n   \\[\n   ([^\\[\\]]+)       // link text = $2; can't contain '[' or ']'\n   \\]\n   )()()()()()      // pad rest of backreferences\n   /g, writeAnchorTag);\n   */\n  text = text.replace(/(\\[([^\\[\\]]+)])()()()()()/g, writeAnchorTag);\n\n  text = globals.converter._dispatch('anchors.after', text, options, globals);\n  return text;\n});\n\nshowdown.subParser('autoLinks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n\n  var simpleURLRegex  = /\\b(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+)(?=\\s|$)(?![\"<>])/gi,\n      delimUrlRegex   = /<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)>/gi,\n      simpleMailRegex = /(?:^|[ \\n\\t])([A-Za-z0-9!#$%&'*+-/=?^_`\\{|}~\\.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?:$|[ \\n\\t])/gi,\n      delimMailRegex  = /<(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi;\n\n  text = text.replace(delimUrlRegex, replaceLink);\n  text = text.replace(delimMailRegex, replaceMail);\n  // simpleURLRegex  = /\\b(((https?|ftp|dict):\\/\\/|www\\.)[-.+~:?#@!$&'()*,;=[\\]\\w]+)\\b/gi,\n  // Email addresses: <address@domain.foo>\n\n  if (options.simplifiedAutoLink) {\n    text = text.replace(simpleURLRegex, replaceLink);\n    text = text.replace(simpleMailRegex, replaceMail);\n  }\n\n  function replaceLink(wm, link) {\n    var lnkTxt = link;\n    if (/^www\\./i.test(link)) {\n      link = link.replace(/^www\\./i, 'http://www.');\n    }\n    return '<a href=\"' + link + '\">' + lnkTxt + '</a>';\n  }\n\n  function replaceMail(wholeMatch, m1) {\n    var unescapedStr = showdown.subParser('unescapeSpecialChars')(m1);\n    return showdown.subParser('encodeEmailAddress')(unescapedStr);\n  }\n\n  text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n\n  return text;\n});\n\n/**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('blockGamut', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('blockGamut.before', text, options, globals);\n\n  // we parse blockquotes first so that we can have headings and hrs\n  // inside blockquotes\n  text = showdown.subParser('blockQuotes')(text, options, globals);\n  text = showdown.subParser('headers')(text, options, globals);\n\n  // Do Horizontal Rules:\n  var key = showdown.subParser('hashBlock')('<hr />', options, globals);\n  text = text.replace(/^[ ]{0,2}([ ]?\\*[ ]?){3,}[ \\t]*$/gm, key);\n  text = text.replace(/^[ ]{0,2}([ ]?\\-[ ]?){3,}[ \\t]*$/gm, key);\n  text = text.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \\t]*$/gm, key);\n\n  text = showdown.subParser('lists')(text, options, globals);\n  text = showdown.subParser('codeBlocks')(text, options, globals);\n  text = showdown.subParser('tables')(text, options, globals);\n\n  // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n  // was to escape raw HTML in the original Markdown source. This time,\n  // we're escaping the markup we've just created, so that we don't wrap\n  // <p> tags around block-level tags.\n  text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n  text = showdown.subParser('paragraphs')(text, options, globals);\n\n  text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n  return text;\n});\n\nshowdown.subParser('blockQuotes', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n  /*\n   text = text.replace(/\n   (\t\t\t\t\t\t\t\t// Wrap whole match in $1\n   (\n   ^[ \\t]*>[ \\t]?\t\t\t// '>' at the start of a line\n   .+\\n\t\t\t\t\t// rest of the first line\n   (.+\\n)*\t\t\t\t\t// subsequent consecutive lines\n   \\n*\t\t\t\t\t\t// blanks\n   )+\n   )\n   /gm, function(){...});\n   */\n\n  text = text.replace(/((^[ \\t]{0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+)/gm, function (wholeMatch, m1) {\n    var bq = m1;\n\n    // attacklab: hack around Konqueror 3.5.4 bug:\n    // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n    bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, '~0'); // trim one level of quoting\n\n    // attacklab: clean up hack\n    bq = bq.replace(/~0/g, '');\n\n    bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n    bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n    bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n    bq = bq.replace(/(^|\\n)/g, '$1  ');\n    // These leading spaces screw with <pre> content, so we need to fix that:\n    bq = bq.replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n      var pre = m1;\n      // attacklab: hack around Konqueror 3.5.4 bug:\n      pre = pre.replace(/^  /mg, '~0');\n      pre = pre.replace(/~0/g, '');\n      return pre;\n    });\n\n    return showdown.subParser('hashBlock')('<blockquote>\\n' + bq + '\\n</blockquote>', options, globals);\n  });\n\n  text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n  return text;\n});\n\n/**\n * Process Markdown `<pre><code>` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n  /*\n   text = text.replace(text,\n   /(?:\\n\\n|^)\n   (\t\t\t\t\t\t\t\t// $1 = the code block -- one or more lines, starting with a space/tab\n   (?:\n   (?:[ ]{4}|\\t)\t\t\t// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width\n   .*\\n+\n   )+\n   )\n   (\\n*[ ]{0,3}[^ \\t\\n]|(?=~0))\t// attacklab: g_tab_width\n   /g,function(){...});\n   */\n\n  // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '~0';\n\n  var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=~0))/g;\n  text = text.replace(pattern, function (wholeMatch, m1, m2) {\n    var codeblock = m1,\n        nextChar = m2,\n        end = '\\n';\n\n    codeblock = showdown.subParser('outdent')(codeblock);\n    codeblock = showdown.subParser('encodeCode')(codeblock);\n    codeblock = showdown.subParser('detab')(codeblock);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n    if (options.omitExtraWLInCodeBlocks) {\n      end = '';\n    }\n\n    codeblock = '<pre><code>' + codeblock + end + '</code></pre>';\n\n    return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n  });\n\n  // attacklab: strip sentinel\n  text = text.replace(/~0/, '');\n\n  text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n  return text;\n});\n\n/**\n *\n *   *  Backtick quotes are used for <code></code> spans.\n *\n *   *  You can use multiple backticks as the delimiters if you want to\n *     include literal backticks in the code span. So, this input:\n *\n *         Just type ``foo `bar` baz`` at the prompt.\n *\n *       Will translate to:\n *\n *         <p>Just type <code>foo `bar` baz</code> at the prompt.</p>\n *\n *    There's no arbitrary limit to the number of backticks you\n *    can use as delimters. If you need three consecutive backticks\n *    in your code, use four for delimiters, etc.\n *\n *  *  You can use spaces to get literal backticks at the edges:\n *\n *         ... type `` `bar` `` ...\n *\n *       Turns to:\n *\n *         ... type <code>`bar`</code> ...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n  /*\n   text = text.replace(/\n   (^|[^\\\\])\t\t\t\t\t// Character before opening ` can't be a backslash\n   (`+)\t\t\t\t\t\t// $2 = Opening run of `\n   (\t\t\t\t\t\t\t// $3 = The code block\n   [^\\r]*?\n   [^`]\t\t\t\t\t// attacklab: work around lack of lookbehind\n   )\n   \\2\t\t\t\t\t\t\t// Matching closer\n   (?!`)\n   /gm, function(){...});\n   */\n\n  if (typeof(text) === 'undefined') {\n    text = '';\n  }\n  text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n    function (wholeMatch, m1, m2, m3) {\n      var c = m3;\n      c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n      c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n      c = showdown.subParser('encodeCode')(c);\n      return m1 + '<code>' + c + '</code>';\n    }\n  );\n\n  text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n  return text;\n});\n\n/**\n * Convert all tabs to spaces\n */\nshowdown.subParser('detab', function (text) {\n  'use strict';\n\n  // expand first n-1 tabs\n  text = text.replace(/\\t(?=\\t)/g, '    '); // g_tab_width\n\n  // replace the nth with two sentinels\n  text = text.replace(/\\t/g, '~A~B');\n\n  // use the sentinel to anchor our regex so it doesn't explode\n  text = text.replace(/~B(.+?)~A/g, function (wholeMatch, m1) {\n    var leadingText = m1,\n        numSpaces = 4 - leadingText.length % 4;  // g_tab_width\n\n    // there *must* be a better way to do this:\n    for (var i = 0; i < numSpaces; i++) {\n      leadingText += ' ';\n    }\n\n    return leadingText;\n  });\n\n  // clean up sentinels\n  text = text.replace(/~A/g, '    ');  // g_tab_width\n  text = text.replace(/~B/g, '');\n\n  return text;\n\n});\n\n/**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\nshowdown.subParser('encodeAmpsAndAngles', function (text) {\n  'use strict';\n  // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n  // http://bumppo.net/projects/amputator/\n  text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&amp;');\n\n  // Encode naked <'s\n  text = text.replace(/<(?![a-z\\/?\\$!])/gi, '&lt;');\n\n  return text;\n});\n\n/**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n *    text = escapeCharacters(text,\"\\\\\",true);\n *    text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox.  This function gets called a LOT.\n */\nshowdown.subParser('encodeBackslashEscapes', function (text) {\n  'use strict';\n  text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n  text = text.replace(/\\\\([`*_{}\\[\\]()>#+-.!])/g, showdown.helper.escapeCharactersCallback);\n  return text;\n});\n\n/**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\nshowdown.subParser('encodeCode', function (text) {\n  'use strict';\n\n  // Encode all ampersands; HTML entities are not\n  // entities within a Markdown code span.\n  text = text.replace(/&/g, '&amp;');\n\n  // Do the angle bracket song and dance:\n  text = text.replace(/</g, '&lt;');\n  text = text.replace(/>/g, '&gt;');\n\n  // Now, escape characters that are magic in Markdown:\n  text = showdown.helper.escapeCharacters(text, '*_{}[]\\\\', false);\n\n  // jj the line above breaks this:\n  //---\n  //* Item\n  //   1. Subitem\n  //            special char: *\n  // ---\n\n  return text;\n});\n\n/**\n *  Input: an email address, e.g. \"foo@example.com\"\n *\n *  Output: the email address as a mailto link, with each character\n *    of the address encoded as either a decimal or hex entity, in\n *    the hopes of foiling most address harvesting spam bots. E.g.:\n *\n *    <a href=\"&#x6D;&#97;&#105;&#108;&#x74;&#111;:&#102;&#111;&#111;&#64;&#101;\n *       x&#x61;&#109;&#x70;&#108;&#x65;&#x2E;&#99;&#111;&#109;\">&#102;&#111;&#111;\n *       &#64;&#101;x&#x61;&#109;&#x70;&#108;&#x65;&#x2E;&#99;&#111;&#109;</a>\n *\n *  Based on a filter by Matthew Wickline, posted to the BBEdit-Talk\n *  mailing list: <http://tinyurl.com/yu7ue>\n *\n */\nshowdown.subParser('encodeEmailAddress', function (addr) {\n  'use strict';\n\n  var encode = [\n    function (ch) {\n      return '&#' + ch.charCodeAt(0) + ';';\n    },\n    function (ch) {\n      return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n    },\n    function (ch) {\n      return ch;\n    }\n  ];\n\n  addr = 'mailto:' + addr;\n\n  addr = addr.replace(/./g, function (ch) {\n    if (ch === '@') {\n      // this *must* be encoded. I insist.\n      ch = encode[Math.floor(Math.random() * 2)](ch);\n    } else if (ch !== ':') {\n      // leave ':' alone (to spot mailto: later)\n      var r = Math.random();\n      // roughly 10% raw, 45% hex, 45% dec\n      ch = (\n        r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)\n      );\n    }\n    return ch;\n  });\n\n  addr = '<a href=\"' + addr + '\">' + addr + '</a>';\n  addr = addr.replace(/\">.+:/g, '\">'); // strip the mailto: from the visible part\n\n  return addr;\n});\n\n/**\n * Within tags -- meaning between < and > -- encode [\\ ` * _] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\nshowdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text) {\n  'use strict';\n\n  // Build a regex to find HTML tags and comments.  See Friedl's\n  // \"Mastering Regular Expressions\", 2nd Ed., pp. 200-201.\n  var regex = /(<[a-z\\/!$](\"[^\"]*\"|'[^']*'|[^'\">])*>|<!(--.*?--\\s*)+>)/gi;\n\n  text = text.replace(regex, function (wholeMatch) {\n    var tag = wholeMatch.replace(/(.)<\\/?code>(?=.)/g, '$1`');\n    tag = showdown.helper.escapeCharacters(tag, '\\\\`*_', false);\n    return tag;\n  });\n\n  return text;\n});\n\n/**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n *     def hello_world(x)\n *       puts \"Hello, #{x}\"\n *     end\n * ```\n */\nshowdown.subParser('githubCodeBlocks', function (text, options, globals) {\n  'use strict';\n\n  // early exit if option is not enabled\n  if (!options.ghCodeBlocks) {\n    return text;\n  }\n\n  text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n  text += '~0';\n\n  text = text.replace(/(?:^|\\n)```(.*)\\n([\\s\\S]*?)\\n```/g, function (wholeMatch, language, codeblock) {\n    var end = (options.omitExtraWLInCodeBlocks) ? '' : '\\n';\n\n    // First parse the github code block\n    codeblock = showdown.subParser('encodeCode')(codeblock);\n    codeblock = showdown.subParser('detab')(codeblock);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n    codeblock = '<pre><code' + (language ? ' class=\"' + language + ' language-' + language + '\"' : '') + '>' + codeblock + end + '</code></pre>';\n\n    codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n    // Since GHCodeblocks can be false positives, we need to\n    // store the primitive text and the parsed text in a global var,\n    // and then return a token\n    return '\\n\\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  });\n\n  // attacklab: strip sentinel\n  text = text.replace(/~0/, '');\n\n  return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n\nshowdown.subParser('hashBlock', function (text, options, globals) {\n  'use strict';\n  text = text.replace(/(^\\n+|\\n+$)/g, '');\n  return '\\n\\n~K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n});\n\nshowdown.subParser('hashElement', function (text, options, globals) {\n  'use strict';\n\n  return function (wholeMatch, m1) {\n    var blockText = m1;\n\n    // Undo double lines\n    blockText = blockText.replace(/\\n\\n/g, '\\n');\n    blockText = blockText.replace(/^\\n/, '');\n\n    // strip trailing blank lines\n    blockText = blockText.replace(/\\n+$/g, '');\n\n    // Replace the element text with a marker (\"~KxK\" where x is its key)\n    blockText = '\\n\\n~K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n    return blockText;\n  };\n});\n\nshowdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n  'use strict';\n\n  var blockTags = [\n      'pre',\n      'div',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'table',\n      'dl',\n      'ol',\n      'ul',\n      'script',\n      'noscript',\n      'form',\n      'fieldset',\n      'iframe',\n      'math',\n      'style',\n      'section',\n      'header',\n      'footer',\n      'nav',\n      'article',\n      'aside',\n      'address',\n      'audio',\n      'canvas',\n      'figure',\n      'hgroup',\n      'output',\n      'video',\n      'p'\n    ],\n    repFunc = function (wholeMatch, match, left, right) {\n      var txt = wholeMatch;\n      // check if this html element is marked as markdown\n      // if so, it's contents should be parsed as markdown\n      if (left.search(/\\bmarkdown\\b/) !== -1) {\n        txt = left + globals.converter.makeHtml(match) + right;\n      }\n      return '\\n\\n~K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n    };\n\n  for (var i = 0; i < blockTags.length; ++i) {\n    text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\\\t){0,3}<' + blockTags[i] + '\\\\b[^>]*>', '</' + blockTags[i] + '>', 'gim');\n  }\n\n  // HR SPECIAL CASE\n  text = text.replace(/(\\n[ ]{0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n    showdown.subParser('hashElement')(text, options, globals));\n\n  // Special case for standalone HTML comments:\n  text = text.replace(/(<!--[\\s\\S]*?-->)/g,\n    showdown.subParser('hashElement')(text, options, globals));\n\n  // PHP and ASP-style processor instructions (<?...?> and <%...%>)\n  text = text.replace(/(?:\\n\\n)([ ]{0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n    showdown.subParser('hashElement')(text, options, globals));\n  return text;\n});\n\n/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, config, globals) {\n  'use strict';\n\n  var matches = showdown.helper.matchRecursiveRegExp(text, '<code\\\\b[^>]*>', '</code>', 'gi');\n\n  for (var i = 0; i < matches.length; ++i) {\n    text = text.replace(matches[i][0], '~L' + (globals.gHtmlSpans.push(matches[i][0]) - 1) + 'L');\n  }\n  return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, config, globals) {\n  'use strict';\n\n  for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n    text = text.replace('~L' + i + 'L', globals.gHtmlSpans[i]);\n  }\n\n  return text;\n});\n\n/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, config, globals) {\n  'use strict';\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    // encode html entities\n    var codeblock = left + showdown.subParser('encodeCode')(match) + right;\n    return '\\n\\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  };\n\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\\\t){0,3}<pre\\\\b[^>]*>\\\\s*<code\\\\b[^>]*>', '^(?: |\\\\t){0,3}</code>\\\\s*</pre>', 'gim');\n  return text;\n});\n\nshowdown.subParser('headers', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('headers.before', text, options, globals);\n\n  var prefixHeader = options.prefixHeaderId,\n      headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n  // Set text-style headers:\n  //\tHeader 1\n  //\t========\n  //\n  //\tHeader 2\n  //\t--------\n  //\n      setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n      setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n  text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n    var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n        hLevel = headerLevelStart,\n        hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';\n    return showdown.subParser('hashBlock')(hashBlock, options, globals);\n  });\n\n  text = text.replace(setextRegexH2, function (matchFound, m1) {\n    var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n        hLevel = headerLevelStart + 1,\n      hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>';\n    return showdown.subParser('hashBlock')(hashBlock, options, globals);\n  });\n\n  // atx-style headers:\n  //  # Header 1\n  //  ## Header 2\n  //  ## Header 2 with closing hashes ##\n  //  ...\n  //  ###### Header 6\n  //\n  text = text.replace(/^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm, function (wholeMatch, m1, m2) {\n    var span = showdown.subParser('spanGamut')(m2, options, globals),\n        hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m2) + '\"',\n        hLevel = headerLevelStart - 1 + m1.length,\n        header = '<h' + hLevel + hID + '>' + span + '</h' + hLevel + '>';\n\n    return showdown.subParser('hashBlock')(header, options, globals);\n  });\n\n  function headerId(m) {\n    var title, escapedId = m.replace(/[^\\w]/g, '').toLowerCase();\n\n    if (globals.hashLinkCounts[escapedId]) {\n      title = escapedId + '-' + (globals.hashLinkCounts[escapedId]++);\n    } else {\n      title = escapedId;\n      globals.hashLinkCounts[escapedId] = 1;\n    }\n\n    // Prefix id to prevent causing inadvertent pre-existing style matches.\n    if (prefixHeader === true) {\n      prefixHeader = 'section';\n    }\n\n    if (showdown.helper.isString(prefixHeader)) {\n      return prefixHeader + title;\n    }\n    return title;\n  }\n\n  text = globals.converter._dispatch('headers.after', text, options, globals);\n  return text;\n});\n\n/**\n * Turn Markdown image shortcuts into <img> tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('images.before', text, options, globals);\n\n  var inlineRegExp    = /!\\[(.*?)]\\s?\\([ \\t]*()<?(\\S+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(['\"])(.*?)\\6[ \\t]*)?\\)/g,\n      referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[(.*?)]()()()()()/g;\n\n  function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n    var gUrls   = globals.gUrls,\n        gTitles = globals.gTitles,\n        gDims   = globals.gDimensions;\n\n    linkId = linkId.toLowerCase();\n\n    if (!title) {\n      title = '';\n    }\n\n    if (url === '' || url === null) {\n      if (linkId === '' || linkId === null) {\n        // lower-case and turn embedded newlines into spaces\n        linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n      }\n      url = '#' + linkId;\n\n      if (!showdown.helper.isUndefined(gUrls[linkId])) {\n        url = gUrls[linkId];\n        if (!showdown.helper.isUndefined(gTitles[linkId])) {\n          title = gTitles[linkId];\n        }\n        if (!showdown.helper.isUndefined(gDims[linkId])) {\n          width = gDims[linkId].width;\n          height = gDims[linkId].height;\n        }\n      } else {\n        return wholeMatch;\n      }\n    }\n\n    altText = altText.replace(/\"/g, '&quot;');\n    altText = showdown.helper.escapeCharacters(altText, '*_', false);\n    url = showdown.helper.escapeCharacters(url, '*_', false);\n    var result = '<img src=\"' + url + '\" alt=\"' + altText + '\"';\n\n    if (title) {\n      title = title.replace(/\"/g, '&quot;');\n      title = showdown.helper.escapeCharacters(title, '*_', false);\n      result += ' title=\"' + title + '\"';\n    }\n\n    if (width && height) {\n      width  = (width === '*') ? 'auto' : width;\n      height = (height === '*') ? 'auto' : height;\n\n      result += ' width=\"' + width + '\"';\n      result += ' height=\"' + height + '\"';\n    }\n\n    result += ' />';\n    return result;\n  }\n\n  // First, handle reference-style labeled images: ![alt text][id]\n  text = text.replace(referenceRegExp, writeImageTag);\n\n  // Next, handle inline images:  ![alt text](url =<width>x<height> \"optional title\")\n  text = text.replace(inlineRegExp, writeImageTag);\n\n  text = globals.converter._dispatch('images.after', text, options, globals);\n  return text;\n});\n\nshowdown.subParser('italicsAndBold', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);\n\n  if (options.literalMidWordUnderscores) {\n    //underscores\n    // Since we are consuming a \\s character, we need to add it\n    text = text.replace(/(^|\\s|>|\\b)__(?=\\S)([\\s\\S]+?)__(?=\\b|<|\\s|$)/gm, '$1<strong>$2</strong>');\n    text = text.replace(/(^|\\s|>|\\b)_(?=\\S)([\\s\\S]+?)_(?=\\b|<|\\s|$)/gm, '$1<em>$2</em>');\n    //asterisks\n    text = text.replace(/(\\*\\*)(?=\\S)([^\\r]*?\\S[*]*)\\1/g, '<strong>$2</strong>');\n    text = text.replace(/(\\*)(?=\\S)([^\\r]*?\\S)\\1/g, '<em>$2</em>');\n\n  } else {\n    // <strong> must go first:\n    text = text.replace(/(\\*\\*|__)(?=\\S)([^\\r]*?\\S[*_]*)\\1/g, '<strong>$2</strong>');\n    text = text.replace(/(\\*|_)(?=\\S)([^\\r]*?\\S)\\1/g, '<em>$2</em>');\n  }\n\n  text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n  return text;\n});\n\n/**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\nshowdown.subParser('lists', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('lists.before', text, options, globals);\n  /**\n   * Process the contents of a single ordered or unordered list, splitting it\n   * into individual list items.\n   * @param {string} listStr\n   * @param {boolean} trimTrailing\n   * @returns {string}\n   */\n  function processListItems (listStr, trimTrailing) {\n    // The $g_list_level global keeps track of when we're inside a list.\n    // Each time we enter a list, we increment it; when we leave a list,\n    // we decrement. If it's zero, we're not in a list anymore.\n    //\n    // We do this because when we're not inside a list, we want to treat\n    // something like this:\n    //\n    //    I recommend upgrading to version\n    //    8. Oops, now this line is treated\n    //    as a sub-list.\n    //\n    // As a single paragraph, despite the fact that the second line starts\n    // with a digit-period-space sequence.\n    //\n    // Whereas when we're inside a list (or sub-list), that line will be\n    // treated as the start of a sub-list. What a kludge, huh? This is\n    // an aspect of Markdown's syntax that's hard to parse perfectly\n    // without resorting to mind-reading. Perhaps the solution is to\n    // change the syntax rules such that sub-lists must start with a\n    // starting cardinal number; e.g. \"1.\" or \"a.\".\n    globals.gListLevel++;\n\n    // trim trailing blank lines:\n    listStr = listStr.replace(/\\n{2,}$/, '\\n');\n\n    // attacklab: add sentinel to emulate \\z\n    listStr += '~0';\n\n    var rgx = /(\\n)?(^[ \\t]*)([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(~0|\\2([*+-]|\\d+[.])[ \\t]+))/gm,\n        isParagraphed = (/\\n[ \\t]*\\n(?!~0)/.test(listStr));\n\n    listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n      checked = (checked && checked.trim() !== '');\n      var item = showdown.subParser('outdent')(m4, options, globals),\n          bulletStyle = '';\n\n      // Support for github tasklists\n      if (taskbtn && options.tasklists) {\n        bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n        item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n          var otp = '<input type=\"checkbox\" disabled style=\"margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;\"';\n          if (checked) {\n            otp += ' checked';\n          }\n          otp += '>';\n          return otp;\n        });\n      }\n      // m1 - Leading line or\n      // Has a double return (multi paragraph) or\n      // Has sublist\n      if (m1 || (item.search(/\\n{2,}/) > -1)) {\n        item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n        item = showdown.subParser('blockGamut')(item, options, globals);\n      } else {\n        // Recursion for sub-lists:\n        item = showdown.subParser('lists')(item, options, globals);\n        item = item.replace(/\\n$/, ''); // chomp(item)\n        if (isParagraphed) {\n          item = showdown.subParser('paragraphs')(item, options, globals);\n        } else {\n          item = showdown.subParser('spanGamut')(item, options, globals);\n        }\n      }\n      item =  '\\n<li' + bulletStyle + '>' + item + '</li>\\n';\n      return item;\n    });\n\n    // attacklab: strip sentinel\n    listStr = listStr.replace(/~0/g, '');\n\n    globals.gListLevel--;\n\n    if (trimTrailing) {\n      listStr = listStr.replace(/\\s+$/, '');\n    }\n\n    return listStr;\n  }\n\n  /**\n   * Check and parse consecutive lists (better fix for issue #142)\n   * @param {string} list\n   * @param {string} listType\n   * @param {boolean} trimTrailing\n   * @returns {string}\n   */\n  function parseConsecutiveLists(list, listType, trimTrailing) {\n    // check if we caught 2 or more consecutive lists by mistake\n    // we use the counterRgx, meaning if listType is UL we look for UL and vice versa\n    var counterRxg = (listType === 'ul') ? /^ {0,2}\\d+\\.[ \\t]/gm : /^ {0,2}[*+-][ \\t]/gm,\n      subLists = [],\n      result = '';\n\n    if (list.search(counterRxg) !== -1) {\n      (function parseCL(txt) {\n        var pos = txt.search(counterRxg);\n        if (pos !== -1) {\n          // slice\n          result += '\\n\\n<' + listType + '>' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\\n\\n';\n\n          // invert counterType and listType\n          listType = (listType === 'ul') ? 'ol' : 'ul';\n          counterRxg = (listType === 'ul') ? /^ {0,2}\\d+\\.[ \\t]/gm : /^ {0,2}[*+-][ \\t]/gm;\n\n          //recurse\n          parseCL(txt.slice(pos));\n        } else {\n          result += '\\n\\n<' + listType + '>' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\\n\\n';\n        }\n      })(list);\n      for (var i = 0; i < subLists.length; ++i) {\n\n      }\n    } else {\n      result = '\\n\\n<' + listType + '>' + processListItems(list, !!trimTrailing) + '</' + listType + '>\\n\\n';\n    }\n\n    return result;\n  }\n\n  // attacklab: add sentinel to hack around khtml/safari bug:\n  // http://bugs.webkit.org/show_bug.cgi?id=11231\n  text += '~0';\n\n  // Re-usable pattern to match any entire ul or ol list:\n  var wholeList = /^(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm;\n\n  if (globals.gListLevel) {\n    text = text.replace(wholeList, function (wholeMatch, list, m2) {\n      var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n      return parseConsecutiveLists(list, listType, true);\n    });\n  } else {\n    wholeList = /(\\n\\n|^\\n?)(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm;\n    //wholeList = /(\\n\\n|^\\n?)( {0,3}([*+-]|\\d+\\.)[ \\t]+[\\s\\S]+?)(?=(~0)|(\\n\\n(?!\\t| {2,}| {0,3}([*+-]|\\d+\\.)[ \\t])))/g;\n    text = text.replace(wholeList, function (wholeMatch, m1, list, m3) {\n\n      var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n      return parseConsecutiveLists(list, listType);\n    });\n  }\n\n  // attacklab: strip sentinel\n  text = text.replace(/~0/, '');\n\n  text = globals.converter._dispatch('lists.after', text, options, globals);\n  return text;\n});\n\n/**\n * Remove one level of line-leading tabs or spaces\n */\nshowdown.subParser('outdent', function (text) {\n  'use strict';\n\n  // attacklab: hack around Konqueror 3.5.4 bug:\n  // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n  text = text.replace(/^(\\t|[ ]{1,4})/gm, '~0'); // attacklab: g_tab_width\n\n  // attacklab: clean up hack\n  text = text.replace(/~0/g, '');\n\n  return text;\n});\n\n/**\n *\n */\nshowdown.subParser('paragraphs', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('paragraphs.before', text, options, globals);\n  // Strip leading and trailing lines:\n  text = text.replace(/^\\n+/g, '');\n  text = text.replace(/\\n+$/g, '');\n\n  var grafs = text.split(/\\n{2,}/g),\n      grafsOut = [],\n      end = grafs.length; // Wrap <p> tags\n\n  for (var i = 0; i < end; i++) {\n    var str = grafs[i];\n    // if this is an HTML marker, copy it\n    if (str.search(/~(K|G)(\\d+)\\1/g) >= 0) {\n      grafsOut.push(str);\n    } else {\n      str = showdown.subParser('spanGamut')(str, options, globals);\n      str = str.replace(/^([ \\t]*)/g, '<p>');\n      str += '</p>';\n      grafsOut.push(str);\n    }\n  }\n\n  /** Unhashify HTML blocks */\n  end = grafsOut.length;\n  for (i = 0; i < end; i++) {\n    var blockText = '',\n        grafsOutIt = grafsOut[i],\n        codeFlag = false;\n    // if this is a marker for an html block...\n    while (grafsOutIt.search(/~(K|G)(\\d+)\\1/) >= 0) {\n      var delim = RegExp.$1,\n          num   = RegExp.$2;\n\n      if (delim === 'K') {\n        blockText = globals.gHtmlBlocks[num];\n      } else {\n        // we need to check if ghBlock is a false positive\n        if (codeFlag) {\n          // use encoded version of all text\n          blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text);\n        } else {\n          blockText = globals.ghCodeBlocks[num].codeblock;\n        }\n      }\n      blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n      grafsOutIt = grafsOutIt.replace(/(\\n\\n)?~(K|G)\\d+\\2(\\n\\n)?/, blockText);\n      // Check if grafsOutIt is a pre->code\n      if (/^<pre\\b[^>]*>\\s*<code\\b[^>]*>/.test(grafsOutIt)) {\n        codeFlag = true;\n      }\n    }\n    grafsOut[i] = grafsOutIt;\n  }\n  text = grafsOut.join('\\n\\n');\n  // Strip leading and trailing lines:\n  text = text.replace(/^\\n+/g, '');\n  text = text.replace(/\\n+$/g, '');\n  return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n\n/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n  'use strict';\n\n  if (ext.filter) {\n    text = ext.filter(text, globals.converter, options);\n\n  } else if (ext.regex) {\n    // TODO remove this when old extension loading mechanism is deprecated\n    var re = ext.regex;\n    if (!re instanceof RegExp) {\n      re = new RegExp(re, 'g');\n    }\n    text = text.replace(re, ext.replace);\n  }\n\n  return text;\n});\n\n/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n  text = showdown.subParser('codeSpans')(text, options, globals);\n  text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n  text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n  // Process anchor and image tags. Images must come first,\n  // because ![foo][f] looks like an anchor.\n  text = showdown.subParser('images')(text, options, globals);\n  text = showdown.subParser('anchors')(text, options, globals);\n\n  // Make links out of things like `<http://example.com/>`\n  // Must come after _DoAnchors(), because you can use < and >\n  // delimiters in inline links like [this](<url>).\n  text = showdown.subParser('autoLinks')(text, options, globals);\n  text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);\n  text = showdown.subParser('italicsAndBold')(text, options, globals);\n  text = showdown.subParser('strikethrough')(text, options, globals);\n\n  // Do hard breaks:\n  text = text.replace(/  +\\n/g, ' <br />\\n');\n\n  text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n  return text;\n});\n\nshowdown.subParser('strikethrough', function (text, options, globals) {\n  'use strict';\n\n  if (options.strikethrough) {\n    text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n    text = text.replace(/(?:~T){2}([\\s\\S]+?)(?:~T){2}/g, '<del>$1</del>');\n    text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n  }\n\n  return text;\n});\n\n/**\n * Strip any lines consisting only of spaces and tabs.\n * This makes subsequent regexs easier to write, because we can\n * match consecutive blank lines with /\\n+/ instead of something\n * contorted like /[ \\t]*\\n+/\n */\nshowdown.subParser('stripBlankLines', function (text) {\n  'use strict';\n  return text.replace(/^[ \\t]+$/mg, '');\n});\n\n/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n *\n * ^[ ]{0,3}\\[(.+)\\]: // id = $1  attacklab: g_tab_width - 1\n * [ \\t]*\n * \\n?                  // maybe *one* newline\n * [ \\t]*\n * <?(\\S+?)>?          // url = $2\n * [ \\t]*\n * \\n?                // maybe one newline\n * [ \\t]*\n * (?:\n * (\\n*)              // any lines skipped = $3 attacklab: lookbehind removed\n * [\"(]\n * (.+?)              // title = $4\n * [\")]\n * [ \\t]*\n * )?                 // title is optional\n * (?:\\n+|$)\n * /gm,\n * function(){...});\n *\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n  'use strict';\n\n  var regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*<?(\\S+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=~0))/gm;\n\n  // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '~0';\n\n  text = text.replace(regex, function (wholeMatch, linkId, url, width, height, blankLines, title) {\n    linkId = linkId.toLowerCase();\n    globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url);  // Link IDs are case-insensitive\n\n    if (blankLines) {\n      // Oops, found blank lines, so it's not a title.\n      // Put back the parenthetical statement we stole.\n      return blankLines + title;\n\n    } else {\n      if (title) {\n        globals.gTitles[linkId] = title.replace(/\"|'/g, '&quot;');\n      }\n      if (options.parseImgDimensions && width && height) {\n        globals.gDimensions[linkId] = {\n          width:  width,\n          height: height\n        };\n      }\n    }\n    // Completely remove the definition from the text\n    return '';\n  });\n\n  // attacklab: strip sentinel\n  text = text.replace(/~0/, '');\n\n  return text;\n});\n\nshowdown.subParser('tables', function (text, options, globals) {\n  'use strict';\n\n  if (!options.tables) {\n    return text;\n  }\n\n  var tableRgx = /^[ \\t]{0,3}\\|?.+\\|.+\\n[ \\t]{0,3}\\|?[ \\t]*:?[ \\t]*(?:-|=){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:-|=){2,}[\\s\\S]+?(?:\\n\\n|~0)/gm;\n\n  function parseStyles(sLine) {\n    if (/^:[ \\t]*--*$/.test(sLine)) {\n      return ' style=\"text-align:left;\"';\n    } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n      return ' style=\"text-align:right;\"';\n    } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n      return ' style=\"text-align:center;\"';\n    } else {\n      return '';\n    }\n  }\n\n  function parseHeaders(header, style) {\n    var id = '';\n    header = header.trim();\n    if (options.tableHeaderId) {\n      id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n    }\n    header = showdown.subParser('spanGamut')(header, options, globals);\n\n    return '<th' + id + style + '>' + header + '</th>\\n';\n  }\n\n  function parseCells(cell, style) {\n    var subText = showdown.subParser('spanGamut')(cell, options, globals);\n    return '<td' + style + '>' + subText + '</td>\\n';\n  }\n\n  function buildTable(headers, cells) {\n    var tb = '<table>\\n<thead>\\n<tr>\\n',\n        tblLgn = headers.length;\n\n    for (var i = 0; i < tblLgn; ++i) {\n      tb += headers[i];\n    }\n    tb += '</tr>\\n</thead>\\n<tbody>\\n';\n\n    for (i = 0; i < cells.length; ++i) {\n      tb += '<tr>\\n';\n      for (var ii = 0; ii < tblLgn; ++ii) {\n        tb += cells[i][ii];\n      }\n      tb += '</tr>\\n';\n    }\n    tb += '</tbody>\\n</table>\\n';\n    return tb;\n  }\n\n  text = globals.converter._dispatch('tables.before', text, options, globals);\n\n  text = text.replace(tableRgx, function (rawTable) {\n\n    var i, tableLines = rawTable.split('\\n');\n\n    // strip wrong first and last column if wrapped tables are used\n    for (i = 0; i < tableLines.length; ++i) {\n      if (/^[ \\t]{0,3}\\|/.test(tableLines[i])) {\n        tableLines[i] = tableLines[i].replace(/^[ \\t]{0,3}\\|/, '');\n      }\n      if (/\\|[ \\t]*$/.test(tableLines[i])) {\n        tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n      }\n    }\n\n    var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n        rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n        rawCells = [],\n        headers = [],\n        styles = [],\n        cells = [];\n\n    tableLines.shift();\n    tableLines.shift();\n\n    for (i = 0; i < tableLines.length; ++i) {\n      if (tableLines[i].trim() === '') {\n        continue;\n      }\n      rawCells.push(\n        tableLines[i]\n          .split('|')\n          .map(function (s) {\n            return s.trim();\n          })\n      );\n    }\n\n    if (rawHeaders.length < rawStyles.length) {\n      return rawTable;\n    }\n\n    for (i = 0; i < rawStyles.length; ++i) {\n      styles.push(parseStyles(rawStyles[i]));\n    }\n\n    for (i = 0; i < rawHeaders.length; ++i) {\n      if (showdown.helper.isUndefined(styles[i])) {\n        styles[i] = '';\n      }\n      headers.push(parseHeaders(rawHeaders[i], styles[i]));\n    }\n\n    for (i = 0; i < rawCells.length; ++i) {\n      var row = [];\n      for (var ii = 0; ii < headers.length; ++ii) {\n        if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n        }\n        row.push(parseCells(rawCells[i][ii], styles[ii]));\n      }\n      cells.push(row);\n    }\n\n    return buildTable(headers, cells);\n  });\n\n  text = globals.converter._dispatch('tables.after', text, options, globals);\n\n  return text;\n});\n\n/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text) {\n  'use strict';\n\n  text = text.replace(/~E(\\d+)E/g, function (wholeMatch, m1) {\n    var charCodeToReplace = parseInt(m1);\n    return String.fromCharCode(charCodeToReplace);\n  });\n  return text;\n});\nmodule.exports = showdown;\n"
  },
  {
    "path": "miniprogram/templates/wxParse/wxDiscode.js",
    "content": "// HTML 支持的数学符号\nfunction strNumDiscode(str){\n    str = str.replace(/&forall;/g, '∀');\n    str = str.replace(/&part;/g, '∂');\n    str = str.replace(/&exists;/g, '∃');\n    str = str.replace(/&empty;/g, '∅');\n    str = str.replace(/&nabla;/g, '∇');\n    str = str.replace(/&isin;/g, '∈');\n    str = str.replace(/&notin;/g, '∉');\n    str = str.replace(/&ni;/g, '∋');\n    str = str.replace(/&prod;/g, '∏');\n    str = str.replace(/&sum;/g, '∑');\n    str = str.replace(/&minus;/g, '−');\n    str = str.replace(/&lowast;/g, '∗');\n    str = str.replace(/&radic;/g, '√');\n    str = str.replace(/&prop;/g, '∝');\n    str = str.replace(/&infin;/g, '∞');\n    str = str.replace(/&ang;/g, '∠');\n    str = str.replace(/&and;/g, '∧');\n    str = str.replace(/&or;/g, '∨');\n    str = str.replace(/&cap;/g, '∩');\n    str = str.replace(/&cap;/g, '∪');\n    str = str.replace(/&int;/g, '∫');\n    str = str.replace(/&there4;/g, '∴');\n    str = str.replace(/&sim;/g, '∼');\n    str = str.replace(/&cong;/g, '≅');\n    str = str.replace(/&asymp;/g, '≈');\n    str = str.replace(/&ne;/g, '≠');\n    str = str.replace(/&le;/g, '≤');\n    str = str.replace(/&ge;/g, '≥');\n    str = str.replace(/&sub;/g, '⊂');\n    str = str.replace(/&sup;/g, '⊃');\n    str = str.replace(/&nsub;/g, '⊄');\n    str = str.replace(/&sube;/g, '⊆');\n    str = str.replace(/&supe;/g, '⊇');\n    str = str.replace(/&oplus;/g, '⊕');\n    str = str.replace(/&otimes;/g, '⊗');\n    str = str.replace(/&perp;/g, '⊥');\n    str = str.replace(/&sdot;/g, '⋅');\n    return str;\n}\n\n//HTML 支持的希腊字母\nfunction strGreeceDiscode(str){\n    str = str.replace(/&Alpha;/g, 'Α');\n    str = str.replace(/&Beta;/g, 'Β');\n    str = str.replace(/&Gamma;/g, 'Γ');\n    str = str.replace(/&Delta;/g, 'Δ');\n    str = str.replace(/&Epsilon;/g, 'Ε');\n    str = str.replace(/&Zeta;/g, 'Ζ');\n    str = str.replace(/&Eta;/g, 'Η');\n    str = str.replace(/&Theta;/g, 'Θ');\n    str = str.replace(/&Iota;/g, 'Ι');\n    str = str.replace(/&Kappa;/g, 'Κ');\n    str = str.replace(/&Lambda;/g, 'Λ');\n    str = str.replace(/&Mu;/g, 'Μ');\n    str = str.replace(/&Nu;/g, 'Ν');\n    str = str.replace(/&Xi;/g, 'Ν');\n    str = str.replace(/&Omicron;/g, 'Ο');\n    str = str.replace(/&Pi;/g, 'Π');\n    str = str.replace(/&Rho;/g, 'Ρ');\n    str = str.replace(/&Sigma;/g, 'Σ');\n    str = str.replace(/&Tau;/g, 'Τ');\n    str = str.replace(/&Upsilon;/g, 'Υ');\n    str = str.replace(/&Phi;/g, 'Φ');\n    str = str.replace(/&Chi;/g, 'Χ');\n    str = str.replace(/&Psi;/g, 'Ψ');\n    str = str.replace(/&Omega;/g, 'Ω');\n\n    str = str.replace(/&alpha;/g, 'α');\n    str = str.replace(/&beta;/g, 'β');\n    str = str.replace(/&gamma;/g, 'γ');\n    str = str.replace(/&delta;/g, 'δ');\n    str = str.replace(/&epsilon;/g, 'ε');\n    str = str.replace(/&zeta;/g, 'ζ');\n    str = str.replace(/&eta;/g, 'η');\n    str = str.replace(/&theta;/g, 'θ');\n    str = str.replace(/&iota;/g, 'ι');\n    str = str.replace(/&kappa;/g, 'κ');\n    str = str.replace(/&lambda;/g, 'λ');\n    str = str.replace(/&mu;/g, 'μ');\n    str = str.replace(/&nu;/g, 'ν');\n    str = str.replace(/&xi;/g, 'ξ');\n    str = str.replace(/&omicron;/g, 'ο');\n    str = str.replace(/&pi;/g, 'π');\n    str = str.replace(/&rho;/g, 'ρ');\n    str = str.replace(/&sigmaf;/g, 'ς');\n    str = str.replace(/&sigma;/g, 'σ');\n    str = str.replace(/&tau;/g, 'τ');\n    str = str.replace(/&upsilon;/g, 'υ');\n    str = str.replace(/&phi;/g, 'φ');\n    str = str.replace(/&chi;/g, 'χ');\n    str = str.replace(/&psi;/g, 'ψ');\n    str = str.replace(/&omega;/g, 'ω');\n    str = str.replace(/&thetasym;/g, 'ϑ');\n    str = str.replace(/&upsih;/g, 'ϒ');\n    str = str.replace(/&piv;/g, 'ϖ');\n    str = str.replace(/&middot;/g, '·');\n    return str;\n}\n\n// \n\nfunction strcharacterDiscode(str){\n    // 加入常用解析\n    str = str.replace(/&nbsp;/g, ' ');\n    str = str.replace(/&quot;/g, \"'\");\n    str = str.replace(/&amp;/g, '&');\n    // str = str.replace(/&lt;/g, '‹');\n    // str = str.replace(/&gt;/g, '›');\n\n    str = str.replace(/&lt;/g, '<');\n    str = str.replace(/&gt;/g, '>');\n    str = str.replace(/&#8226;/g, '•');\n\n    return str;\n}\n\n// HTML 支持的其他实体\nfunction strOtherDiscode(str){\n    str = str.replace(/&OElig;/g, 'Œ');\n    str = str.replace(/&oelig;/g, 'œ');\n    str = str.replace(/&Scaron;/g, 'Š');\n    str = str.replace(/&scaron;/g, 'š');\n    str = str.replace(/&Yuml;/g, 'Ÿ');\n    str = str.replace(/&fnof;/g, 'ƒ');\n    str = str.replace(/&circ;/g, 'ˆ');\n    str = str.replace(/&tilde;/g, '˜');\n    str = str.replace(/&ensp;/g, '');\n    str = str.replace(/&emsp;/g, '');\n    str = str.replace(/&thinsp;/g, '');\n    str = str.replace(/&zwnj;/g, '');\n    str = str.replace(/&zwj;/g, '');\n    str = str.replace(/&lrm;/g, '');\n    str = str.replace(/&rlm;/g, '');\n    str = str.replace(/&ndash;/g, '–');\n    str = str.replace(/&mdash;/g, '—');\n    str = str.replace(/&lsquo;/g, '‘');\n    str = str.replace(/&rsquo;/g, '’');\n    str = str.replace(/&sbquo;/g, '‚');\n    str = str.replace(/&ldquo;/g, '“');\n    str = str.replace(/&rdquo;/g, '”');\n    str = str.replace(/&bdquo;/g, '„');\n    str = str.replace(/&dagger;/g, '†');\n    str = str.replace(/&Dagger;/g, '‡');\n    str = str.replace(/&bull;/g, '•');\n    str = str.replace(/&hellip;/g, '…');\n    str = str.replace(/&permil;/g, '‰');\n    str = str.replace(/&prime;/g, '′');\n    str = str.replace(/&Prime;/g, '″');\n    str = str.replace(/&lsaquo;/g, '‹');\n    str = str.replace(/&rsaquo;/g, '›');\n    str = str.replace(/&oline;/g, '‾');\n    str = str.replace(/&euro;/g, '€');\n    str = str.replace(/&trade;/g, '™');\n\n    str = str.replace(/&larr;/g, '←');\n    str = str.replace(/&uarr;/g, '↑');\n    str = str.replace(/&rarr;/g, '→');\n    str = str.replace(/&darr;/g, '↓');\n    str = str.replace(/&harr;/g, '↔');\n    str = str.replace(/&crarr;/g, '↵');\n    str = str.replace(/&lceil;/g, '⌈');\n    str = str.replace(/&rceil;/g, '⌉');\n\n    str = str.replace(/&lfloor;/g, '⌊');\n    str = str.replace(/&rfloor;/g, '⌋');\n    str = str.replace(/&loz;/g, '◊');\n    str = str.replace(/&spades;/g, '♠');\n    str = str.replace(/&clubs;/g, '♣');\n    str = str.replace(/&hearts;/g, '♥');\n\n    str = str.replace(/&diams;/g, '♦');\n    str = str.replace(/&#39;/g, '\\'');\n    return str;\n}\n\nfunction strMoreDiscode(str){\n    str = str.replace(/\\r\\n/g,\"\");  \n    str = str.replace(/\\n/g,\"\");\n\n    str = str.replace(/code/g,\"wxxxcode-style\");\n    return str;\n}\n\nfunction strDiscode(str){\n    str = strNumDiscode(str);\n    str = strGreeceDiscode(str);\n    str = strcharacterDiscode(str);\n    str = strOtherDiscode(str);\n    str = strMoreDiscode(str);\n    return str;\n}\nfunction urlToHttpUrl(url,rep){\n    \n    var patt1 = new RegExp(\"^//\");\n    var result = patt1.test(url);\n    if(result){\n        url = rep+\":\"+url;\n    }\n    return  url;\n}\n\nmodule.exports = {\n    strDiscode:strDiscode,\n    urlToHttpUrl:urlToHttpUrl\n}"
  },
  {
    "path": "miniprogram/templates/wxParse/wxParse.js",
    "content": "/**\n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */\n\n/**\n * utils函数引入\n **/\nimport showdown from './showdown.js';\nimport HtmlToJson from './html2json.js';\n/**\n * 配置及公有属性\n **/\nvar realWindowWidth = 0;\nvar realWindowHeight = 0;\nwx.getSystemInfo({\n  success: function (res) {\n    realWindowWidth = res.windowWidth\n    realWindowHeight = res.windowHeight\n  }\n})\n/**\n * 主函数入口区\n **/\nfunction wxParse(bindName = 'wxParseData', type='html', data='<div class=\"color:red;\">数据不能为空</div>', target,imagePadding) {\n  var that = target;\n  var transData = {};//存放转化后的数据\n  if (type == 'html') {\n    transData = HtmlToJson.html2json(data, bindName);\n    // console.log(JSON.stringify(transData, ' ', ' '));\n  } else if (type == 'md' || type == 'markdown') {\n    var converter = new showdown.Converter();\n    var html = converter.makeHtml(data);\n    transData = HtmlToJson.html2json(html, bindName);\n    // console.log(JSON.stringify(transData, ' ', ' '));\n  }\n  transData.view = {};\n  transData.view.imagePadding = 0;\n  if(typeof(imagePadding) != 'undefined'){\n    transData.view.imagePadding = imagePadding\n  }\n  var bindData = {};\n  bindData[bindName] = transData;\n  that.setData(bindData)\n  that.wxParseImgLoad = wxParseImgLoad;\n  that.wxParseImgTap = wxParseImgTap;\n}\n// 图片点击事件\nfunction wxParseImgTap(e) {\n  var that = this;\n  var nowImgUrl = e.target.dataset.src;\n  var tagFrom = e.target.dataset.from;\n  if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {\n    wx.previewImage({\n      current: nowImgUrl, // 当前显示图片的http链接\n      urls: that.data[tagFrom].imageUrls // 需要预览的图片http链接列表\n    })\n  }\n}\n\n/**\n * 图片视觉宽高计算函数区 \n **/\nfunction wxParseImgLoad(e) {\n  var that = this;\n  var tagFrom = e.target.dataset.from;\n  var idx = e.target.dataset.idx;\n  if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {\n    calMoreImageInfo(e, idx, that, tagFrom)\n  } \n}\n// 假循环获取计算图片视觉最佳宽高\nfunction calMoreImageInfo(e, idx, that, bindName) {\n  var temData = that.data[bindName];\n  if (!temData || temData.images.length == 0) {\n    return;\n  }\n  var temImages = temData.images;\n  //因为无法获取view宽度 需要自定义padding进行计算，稍后处理\n  var recal = wxAutoImageCal(e.detail.width, e.detail.height,that,bindName); \n  // temImages[idx].width = recal.imageWidth;\n  // temImages[idx].height = recal.imageheight; \n  // temData.images = temImages;\n  // var bindData = {};\n  // bindData[bindName] = temData;\n  // that.setData(bindData);\n  var index = temImages[idx].index\n  var key = `${bindName}`\n  for (var i of index.split('.')) key+=`.nodes[${i}]`\n  var keyW = key + '.width'\n  var keyH = key + '.height'\n  that.setData({\n    [keyW]: recal.imageWidth,\n    [keyH]: recal.imageheight,\n  })\n}\n\n// 计算视觉优先的图片宽高\nfunction wxAutoImageCal(originalWidth, originalHeight,that,bindName) {\n  //获取图片的原始长宽\n  var windowWidth = 0, windowHeight = 0;\n  var autoWidth = 0, autoHeight = 0;\n  var results = {};\n  var padding = that.data[bindName].view.imagePadding;\n  windowWidth = realWindowWidth-2*padding;\n  windowHeight = realWindowHeight;\n  //判断按照那种方式进行缩放\n  // console.log(\"windowWidth\" + windowWidth);\n  if (originalWidth > windowWidth) {//在图片width大于手机屏幕width时候\n    autoWidth = windowWidth;\n    // console.log(\"autoWidth\" + autoWidth);\n    autoHeight = (autoWidth * originalHeight) / originalWidth;\n    // console.log(\"autoHeight\" + autoHeight);\n    results.imageWidth = autoWidth;\n    results.imageheight = autoHeight;\n  } else {//否则展示原来的数据\n    results.imageWidth = originalWidth;\n    results.imageheight = originalHeight;\n  }\n  return results;\n}\n\nfunction wxParseTemArray(temArrayName,bindNameReg,total,that){\n  var array = [];\n  var temData = that.data;\n  var obj = null;\n  for(var i = 0; i < total; i++){\n    var simArr = temData[bindNameReg+i].nodes;\n    array.push(simArr);\n  }\n\n  temArrayName = temArrayName || 'wxParseTemArray';\n  obj = JSON.parse('{\"'+ temArrayName +'\":\"\"}');\n  obj[temArrayName] = array;\n  that.setData(obj);\n}\n\n/**\n * 配置emojis\n * \n */\n\nfunction emojisInit(reg='',baseSrc=\"/wxParse/emojis/\",emojis){\n   HtmlToJson.emojisInit(reg,baseSrc,emojis);\n}\n\nmodule.exports = {\n  wxParse: wxParse,\n  wxParseTemArray:wxParseTemArray,\n  emojisInit:emojisInit\n}\n\n\n"
  },
  {
    "path": "miniprogram/templates/wxParse/wxParse.wxml",
    "content": "<!--**\n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */-->\n\n<!--基础元素-->\n<template name=\"wxParseVideo\">\n  <!--增加video标签支持，并循环添加-->\n  <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n    <video class=\"{{item.classStr}} wxParse-{{item.tag}}-video\" src=\"{{item.attr.src}}\"></video>\n  </view>\n</template>\n\n<template name=\"wxParseImg\">\n  <image class=\"{{item.classStr}} wxParse-{{item.tag}}\" data-from=\"{{item.from}}\" data-src=\"{{item.attr.src}}\" data-idx=\"{{item.imgIndex}}\" src=\"{{item.attr.src}}\" mode=\"aspectFit\" bindload=\"wxParseImgLoad\" bindtap=\"wxParseImgTap\" mode=\"widthFix\" style=\"width:{{item.width}}px;\"\n  />\n</template>\n\n<template name=\"WxEmojiView\">\n  <view class=\"WxEmojiView wxParse-inline\" style=\"{{item.styleStr}}\">\n    <block wx:for=\"{{item.textArray}}\" wx:key=\"\">\n      <block class=\"{{item.text == '\\\\n' ? 'wxParse-hide':''}}\" wx:if=\"{{item.node == 'text'}}\">{{item.text}}</block>\n      <block wx:elif=\"{{item.node == 'element'}}\">\n        <image class=\"wxEmoji\" src=\"{{item.baseSrc}}{{item.text}}\" />\n      </block>\n    </block>\n  </view>\n</template>\n\n<template name=\"WxParseBr\">\n  <text>\\n</text>\n</template>\n<!--入口模版-->\n\n<template name=\"wxParse\">\n  <block wx:for=\"{{wxParseData}}\" wx:key=\"\">\n    <template is=\"wxParse0\" data=\"{{item}}\" />\n  </block>\n</template>\n\n\n<!--循环模版-->\n<template name=\"wxParse0\">\n  <!--<template is=\"wxParse1\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse1\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse1\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse1\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n    <block wx:elif=\"{{item.tag == 'table'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse1\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse1\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse1\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n\n\n<!--循环模版-->\n<template name=\"wxParse1\">\n  <!--<template is=\"wxParse2\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse2\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse2\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse2\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse2\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse2\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n\n<!--循环模版-->\n<template name=\"wxParse2\">\n  <!--<template is=\"wxParse3\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse3\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse3\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse3\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse3\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse3\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse3\">\n  <!--<template is=\"wxParse4\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse4\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse4\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse4\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse4\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse4\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse4\">\n  <!--<template is=\"wxParse5\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse5\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse5\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse5\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse5\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse5\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse5\">\n  <!--<template is=\"wxParse6\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse6\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse6\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse6\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse6\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse6\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse6\">\n  <!--<template is=\"wxParse7\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse7\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse7\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse7\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse7\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse7\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n<!--循环模版-->\n<template name=\"wxParse7\">\n  <!--<template is=\"wxParse8\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse8\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse8\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse8\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse8\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse8\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse8\">\n  <!--<template is=\"wxParse9\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse9\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse9\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse9\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse9\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse9\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse9\">\n  <!--<template is=\"wxParse10\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse10\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse10\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse10\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse10\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse10\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse10\">\n  <!--<template is=\"wxParse11\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse11\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse11\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse11\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse11\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse11\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>\n\n<!--循环模版-->\n<template name=\"wxParse11\">\n  <!--<template is=\"wxParse12\" data=\"{{item}}\" />-->\n  <!--判断是否是标签节点-->\n  <block wx:if=\"{{item.node == 'element'}}\">\n    <block wx:if=\"{{item.tag == 'button'}}\">\n      <button type=\"default\" size=\"mini\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse12\" data=\"{{item}}\" />\n        </block>\n      </button>\n    </block>\n    <!--li类型-->\n    <block wx:elif=\"{{item.tag == 'li'}}\">\n      <view class=\"{{item.classStr}} wxParse-li\" style=\"{{item.styleStr}}\">\n        <view class=\"{{item.classStr}} wxParse-li-inner\">\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <view class=\"{{item.classStr}} wxParse-li-circle\"></view>\n          </view>\n          <view class=\"{{item.classStr}} wxParse-li-text\">\n            <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n              <template is=\"wxParse12\" data=\"{{item}}\" />\n            </block>\n          </view>\n        </view>\n      </view>\n    </block>\n\n    <!--video类型-->\n    <block wx:elif=\"{{item.tag == 'video'}}\">\n      <template is=\"wxParseVideo\" data=\"{{item}}\" />\n    </block>\n\n    <!--img类型-->\n    <block wx:elif=\"{{item.tag == 'img'}}\">\n      <template is=\"wxParseImg\" data=\"{{item}}\" />\n    </block>\n\n    <!--a类型-->\n    <block wx:elif=\"{{item.tag == 'a'}}\">\n      <view bindtap=\"wxParseTagATap\" class=\"wxParse-inline {{item.classStr}} wxParse-{{item.tag}}\" data-src=\"{{item.attr.href}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse12\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <block wx:elif=\"{{item.tag == 'br'}}\">\n      <template is=\"WxParseBr\"></template>\n    </block>\n    <!--其他块级标签-->\n    <block wx:elif=\"{{item.tagType == 'block'}}\">\n      <view class=\"{{item.classStr}} wxParse-{{item.tag}}\" style=\"{{item.styleStr}}\">\n        <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n          <template is=\"wxParse12\" data=\"{{item}}\" />\n        </block>\n      </view>\n    </block>\n\n    <!--内联标签-->\n    <view wx:else class=\"{{item.classStr}} wxParse-{{item.tag}} wxParse-{{item.tagType}}\" style=\"{{item.styleStr}}\">\n      <block wx:for=\"{{item.nodes}}\" wx:for-item=\"item\" wx:key=\"\">\n        <template is=\"wxParse12\" data=\"{{item}}\" />\n      </block>\n    </view>\n\n  </block>\n\n  <!--判断是否是文本节点-->\n  <block wx:elif=\"{{item.node == 'text'}}\">\n    <!--如果是，直接进行-->\n    <template is=\"WxEmojiView\" data=\"{{item}}\" />\n  </block>\n\n</template>"
  },
  {
    "path": "miniprogram/templates/wxParse/wxParse.wxss",
    "content": "\n/**\n * author: Di (微信小程序开发工程师)\n * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)\n *               垂直微信小程序开发交流社区\n * \n * github地址: https://github.com/icindy/wxParse\n * \n * for: 微信小程序富文本解析\n * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184\n */\n\n.wxParse{\n    margin: 0 5px;\n    font-family: Helvetica,sans-serif;\n    font-size: 28rpx;\n    color: #666;\n    line-height: 1.8;\n}\nview{\n    word-break:break-all;\n}\n.wxParse-inline{\n    display: inline;\n    margin: 0;\n    padding: 0;\n}\n/*//标题 */\n.wxParse-div{margin: 0;padding: 0;}\n.wxParse-h1{ font-size:2em; margin: .67em 0 }\n.wxParse-h2{ font-size:1.5em; margin: .75em 0 }\n.wxParse-h3{ font-size:1.17em; margin: .83em 0 }\n.wxParse-h4{ margin: 1.12em 0}\n.wxParse-h5 { font-size:.83em; margin: 1.5em 0 }\n.wxParse-h6{ font-size:.75em; margin: 1.67em 0 }\n\n.wxParse-h1 {\n  font-size: 18px;\n  font-weight: 400;\n  margin-bottom: .9em;\n}\n.wxParse-h2 {\n  font-size: 16px;\n  font-weight: 400;\n  margin-bottom: .34em;\n}\n.wxParse-h3 {\n  font-weight: 400;\n  font-size: 15px;\n  margin-bottom: .34em;\n}\n.wxParse-h4 {\n  font-weight: 400;\n  font-size: 14px;\n  margin-bottom: .24em;\n}\n.wxParse-h5 {\n  font-weight: 400;\n  font-size: 13px;\n  margin-bottom: .14em;\n}\n.wxParse-h6 {\n  font-weight: 400;\n  font-size: 12px;\n  margin-bottom: .04em;\n}\n\n.wxParse-h1, .wxParse-h2, .wxParse-h3, .wxParse-h4, .wxParse-h5, .wxParse-h6, .wxParse-b, .wxParse-strong  { font-weight: bolder }\n\n.wxParse-i,.wxParse-cite,.wxParse-em,.wxParse-var,.wxParse-address{font-style:italic}\n.wxParse-pre,.wxParse-tt,.wxParse-code,.wxParse-kbd,.wxParse-samp{font-family:monospace}\n.wxParse-pre{white-space:pre}\n.wxParse-big{font-size:1.17em}\n.wxParse-small,.wxParse-sub,.wxParse-sup{font-size:.83em}\n.wxParse-sub{vertical-align:sub}\n.wxParse-sup{vertical-align:super}\n.wxParse-s,.wxParse-strike,.wxParse-del{text-decoration:line-through}\n/*wxparse-自定义个性化的css样式*/\n/*增加video的css样式*/\n.wxParse-strong,.wxParse-s{display: inline}\n.wxParse-a{\n    color: deepskyblue;\n    word-break:break-all;\n    overflow:auto;\n}\n\n.wxParse-video{\n    text-align: center;\n    margin: 10px 0;\n}\n\n.wxParse-video-video{\n    width:100%;\n}\n\n.wxParse-img{\n    /*background-color: #efefef;*/\n    overflow: hidden;\n}\n\n.wxParse-blockquote {\n    margin: 0;\n    padding:10px 0 10px 5px;\n    font-family:Courier, Calibri,\"宋体\";\n    background:#f5f5f5;\n    border-left: 3px solid #dbdbdb;\n}\n\n.wxParse-code,.wxParse-wxxxcode-style{\n    display: inline;\n    background:#f5f5f5;\n}\n.wxParse-ul{\n    margin: 20rpx 10rpx;\n}\n\n.wxParse-li,.wxParse-li-inner{\n    display: flex;\n    align-items: baseline;\n    margin: 10rpx 0;\n}\n.wxParse-li-text{\n    \n    align-items: center;\n    line-height: 20px;\n}\n\n.wxParse-li-circle{\n    display: inline-flex;\n    width: 5px;\n    height: 5px;\n    background-color: #333;\n    margin-right: 5px;\n}\n\n.wxParse-li-square{\n    display: inline-flex;\n    width: 10rpx;\n    height: 10rpx;\n    background-color: #333;\n    margin-right: 5px;\n}\n.wxParse-li-ring{\n    display: inline-flex;\n    width: 10rpx;\n    height: 10rpx;\n    border: 2rpx solid #333;\n    border-radius: 50%;\n    background-color: #fff;\n    margin-right: 5px;\n}\n\n/*.wxParse-table{\n    width: 100%;\n    height: 400px;\n}\n.wxParse-thead,.wxParse-tfoot,.wxParse-tr{\n    display: flex;\n    flex-direction: row;\n}\n.wxParse-th,.wxParse-td{\n    display: flex;\n    width: 580px;\n    overflow: auto;\n}*/\n\n.wxParse-u {\n  text-decoration: underline;\n}\n.wxParse-hide{\n    display: none;\n}\n.WxEmojiView{\n    align-items: center;\n}\n.wxEmoji{\n    width: 16px;\n    height:16px;\n}\n.wxParse-tr{\n\tdisplay: flex;\n\tborder-right:1px solid #e0e0e0;\n\tborder-bottom:1px solid #e0e0e0;\n\tborder-top:1px solid #e0e0e0;\n}\n.wxParse-th,\n.wxParse-td{\n\tflex:1;\n\tpadding:5px;\n\tfont-size:28rpx;\n\tborder-left:1px solid #e0e0e0;\n\tword-break: break-all;\n}\n.wxParse-td:last{\n\tborder-top:1px solid #e0e0e0;\n}\n.wxParse-th{\n\tbackground:#f0f0f0;\n\tborder-top:1px solid #e0e0e0;\n}\n.wxParse-del{\n    display: inline;\n}\n.wxParse-figure {\n  overflow: hidden;\n}\n"
  },
  {
    "path": "miniprogram/utils/Base64.js",
    "content": "/**\n* UTF16和UTF8转换对照表\n* U+00000000 – U+0000007F \t0xxxxxxx\n* U+00000080 – U+000007FF \t110xxxxx 10xxxxxx\n* U+00000800 – U+0000FFFF \t1110xxxx 10xxxxxx 10xxxxxx\n* U+00010000 – U+001FFFFF \t11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n* U+00200000 – U+03FFFFFF \t111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n* U+04000000 – U+7FFFFFFF \t1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n*/\n//外部js引用时这样写：import {Base64} from '/xxx/base64';//路径需要根据实际路径去写\nexport let Base64 = {\n\t// 转码表\n\ttables : [\n\t\t\t'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',\n\t\t\t'I', 'J', 'K', 'L', 'M', 'N', 'O' ,'P',\n\t\t\t'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',\n\t\t\t'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',\n\t\t\t'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',\n\t\t\t'o', 'p', 'q', 'r', 's', 't', 'u', 'v',\n\t\t\t'w', 'x', 'y', 'z', '0', '1', '2', '3',\n\t\t\t'4', '5', '6', '7', '8', '9', '+', '/'\n\t],\n\tUTF16ToUTF8 : function (str) {\n\t\tlet results = [], len = str.length;\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlet code = str.charCodeAt(i);\n\t\t\tif (code > 0x0000 && code <= 0x007F) {\n\t\t\t\t/* 一字节，不考虑0x0000，因为是空字节\n\t\t\t\t   U+00000000 – U+0000007F \t0xxxxxxx\n\t\t\t\t*/\n\t\t\t\tresults.push(str.charAt(i));\n\t\t\t} else if (code >= 0x0080 && code <= 0x07FF) {\n\t\t\t\t/* 二字节\n\t\t\t\t   U+00000080 – U+000007FF \t110xxxxx 10xxxxxx\n\t\t\t\t   110xxxxx\n\t\t\t\t*/\n\t\t\t\tlet byte1 = 0xC0 | ((code >> 6) & 0x1F);\n\t\t\t\t// 10xxxxxx\n\t\t\t\tlet byte2 = 0x80 | (code & 0x3F);\n\t\t\t\tresults.push(\n\t\t\t\t\tString.fromCharCode(byte1), \n\t\t\t\t\tString.fromCharCode(byte2)\n\t\t\t\t);\n\t\t\t} else if (code >= 0x0800 && code <= 0xFFFF) {\n\t\t\t\t/* 三字节\n\t\t\t\t   U+00000800 – U+0000FFFF \t1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\t   1110xxxx\n\t\t\t\t*/\n\t\t\t\tlet byte1 = 0xE0 | ((code >> 12) & 0x0F);\n\t\t\t\t// 10xxxxxx\n\t\t\t\tlet byte2 = 0x80 | ((code >> 6) & 0x3F);\n\t\t\t\t// 10xxxxxx\n\t\t\t\tlet byte3 = 0x80 | (code & 0x3F);\n\t\t\t\tresults.push(\n\t\t\t\t\tString.fromCharCode(byte1), \n\t\t\t\t\tString.fromCharCode(byte2), \n\t\t\t\t\tString.fromCharCode(byte3)\n\t\t\t\t);\n\t\t\t} else if (code >= 0x00010000 && code <= 0x001FFFFF) {\n\t\t\t\t// 四字节\n\t\t\t\t// U+00010000 – U+001FFFFF \t11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t} else if (code >= 0x00200000 && code <= 0x03FFFFFF) {\n\t\t\t\t// 五字节\n\t\t\t\t// U+00200000 – U+03FFFFFF \t111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t} else /** if (code >= 0x04000000 && code <= 0x7FFFFFFF)*/ {\n\t\t\t\t// 六字节\n\t\t\t\t// U+04000000 – U+7FFFFFFF \t1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t}\n\t\t}\n\n\t\treturn results.join('');\n\t},\n\tUTF8ToUTF16 : function (str) {\n\t\tlet results = [], len = str.length;\n\t\tlet i = 0;\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlet code = str.charCodeAt(i);\n\t\t\t// 第一字节判断\n\t\t\tif (((code >> 7) & 0xFF) == 0x0) {\n\t\t\t\t// 一字节\n\t\t\t\t// 0xxxxxxx\n\t\t\t\tresults.push(str.charAt(i));\n\t\t\t} else if (((code >> 5) & 0xFF) == 0x6) {\n\t\t\t\t// 二字节\n\t\t\t\t// 110xxxxx 10xxxxxx\n\t\t\t\tlet code2 = str.charCodeAt(++i);\n\t\t\t\tlet byte1 = (code & 0x1F) << 6;\n\t\t\t\tlet byte2 = code2 & 0x3F;\n\t\t\t\tlet utf16 = byte1 | byte2;\n\t\t\t\tresults.push(Sting.fromCharCode(utf16));\n\t\t\t} else if (((code >> 4) & 0xFF) == 0xE) {\n\t\t\t\t// 三字节\n\t\t\t\t// 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tlet code2 = str.charCodeAt(++i);\n\t\t\t\tlet code3 = str.charCodeAt(++i);\n\t\t\t\tlet byte1 = (code << 4) | ((code2 >> 2) & 0x0F);\n\t\t\t\tlet byte2 = ((code2 & 0x03) << 6) | (code3 & 0x3F);\n\t\t\t\tlet utf16 = ((byte1 & 0x00FF) << 8) | byte2\n\t\t\t\tresults.push(String.fromCharCode(utf16));\n\t\t\t} else if (((code >> 3) & 0xFF) == 0x1E) {\n\t\t\t\t// 四字节\n\t\t\t\t// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t} else if (((code >> 2) & 0xFF) == 0x3E) {\n\t\t\t\t// 五字节\n\t\t\t\t// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t} else /** if (((code >> 1) & 0xFF) == 0x7E)*/ {\n\t\t\t\t// 六字节\n\t\t\t\t// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t}\n\t\t}\n\n\t\treturn results.join('');\n\t},\n\tencode : function (str) {\n\t\tif (!str) {\n\t\t\treturn '';\n\t\t}\n\t\tlet utf8    = this.UTF16ToUTF8(str); // 转成UTF-8\n\t\tlet i = 0; // 遍历索引\n\t\tlet len = utf8.length;\n\t\tlet results = [];\n\t\twhile (i < len) {\n\t\t\tlet c1 = utf8.charCodeAt(i++) & 0xFF;\n\t\t\tresults.push(this.tables[c1 >> 2]);\n\t\t\t// 补2个=\n\t\t\tif (i == len) {\n\t\t\t\tresults.push(this.tables[(c1 & 0x3) << 4]);\n\t\t\t\tresults.push('==');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet c2 = utf8.charCodeAt(i++);\n\t\t\t// 补1个=\n\t\t\tif (i == len) {\n\t\t\t\tresults.push(this.tables[((c1 & 0x3) << 4) | ((c2 >> 4) & 0x0F)]);\n\t\t\t\tresults.push(this.tables[(c2 & 0x0F) << 2]);\n\t\t\t\tresults.push('=');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet c3 = utf8.charCodeAt(i++);\n\t\t\tresults.push(this.tables[((c1 & 0x3) << 4) | ((c2 >> 4) & 0x0F)]);\n\t\t\tresults.push(this.tables[((c2 & 0x0F) << 2) | ((c3 & 0xC0) >> 6)]);\n\t\t\tresults.push(this.tables[c3 & 0x3F]);\n\t\t}\n\n\t\treturn results.join('');\n\t},\n\tdecode : function (str) {\n\t\t//判断是否为空\n\t\tif (!str) {\n\t\t\treturn '';\n\t\t}\n\n\t\tlet len = str.length;\n\t\tlet i   = 0;\n\t\tlet results = [];\n\t\t//循环解出字符数组\n\t\twhile (i < len) {\n\t\t\tlet\tcode1 = this.tables.indexOf(str.charAt(i++));\n\t\t\tlet code2 = this.tables.indexOf(str.charAt(i++));\n\t\t\tlet code3 = this.tables.indexOf(str.charAt(i++));\n\t\t\tlet code4 = this.tables.indexOf(str.charAt(i++));\n\n\t\t\tlet c1 = (code1 << 2) | (code2 >> 4);\n\t\t\tresults.push(String.fromCharCode(c1));\n\n\t\t\tif (code3 != -1) {\n\t\t\t\tlet c2 = ((code2 & 0xF) << 4) | (code3 >> 2);\n\t\t\t\tresults.push(String.fromCharCode(c2));\n\t\t\t}\n\t\t\tif (code4 != -1) {\n\t\t\t\tlet c3 = ((code3 & 0x3) << 6) | code4;\n\t\t\t\tresults.push(String.fromCharCode(c3));\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.UTF8ToUTF16(results.join(''));\n\t}\n};"
  },
  {
    "path": "miniprogram/utils/EventEmitter.js",
    "content": "export class EventEmitter {\n  /** @type {Map<string, ((...args: any[]) => void)[]>} */\n  listeners\n\n  constructor() {\n    this.listeners = new Map();\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {(...args: any[]) => void} listener\n   */\n  on(eventName, listener) {\n    if (this.listeners.has(eventName)) {\n      this.listeners.get(eventName).push(listener);\n    } else {\n      this.listeners.set(eventName, [listener]);\n    }\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {*} args\n   */\n  emit(eventName, ...args) {\n    if (this.listeners.has(eventName)) {\n      for (const fn of this.listeners.get(eventName)) {\n        fn.apply(this, args);\n      }\n    }\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {(...args: any[]) => void} [listener]\n   */\n  off(eventName, listener) {\n    if (!listener) {\n      this.listeners.delete(eventName);\n    } else {\n      const listeners = this.listeners.get(eventName);\n      listeners.splice(listeners.findIndex((item) => item === listener), 1);\n    }\n  }\n}\n"
  },
  {
    "path": "miniprogram/utils/URLSearchParams.js",
    "content": "export class URLSearchParams {\n  map\n\n  constructor(params) {\n    this.map = new Map()\n    for (const k of Object.keys(params)) {\n      this.map.set(k, params[k])\n    }\n  }\n\n  toString() {\n    const arr = []\n    for (const [k, v] of this.map) {\n      arr.push(`${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n    }\n    return arr.join('&')\n  }\n}\n"
  },
  {
    "path": "miniprogram/utils/WxUtil.wxs",
    "content": "// 用于wxml文件\n\nvar stringify = function (obj) {\n  return JSON.stringify(obj);\n}\n\nvar arr2str = function (array, separator) {\n  return array.join(separator);\n}\n\nvar cutPhone = function(phone) {\n  var frontStr = phone.substring(0,3);\n  var endStr = phone.substring(7);\n  return frontStr+'****'+endStr;\n}\n\nvar test = function(arr) {\n  console.log(arr)\n  var length = arr.a;\n  return length;\n}\n\nmodule.exports = {\n  stringify: stringify,\n  arr2str: arr2str,\n  cutPhone: cutPhone,\n  test: test\n}"
  },
  {
    "path": "miniprogram/utils/apis.js",
    "content": "// API \n\nconst HY_HOST = 'https://hongye567.github.io';\nconst DB_HOST = 'https://api.douban.com';\n\nexport const Honye = {\n  // 域名\n  HOST: HY_HOST,\n  // 默认配置\n  CONFIG: `${HY_HOST}/static/json/config`,\n  // 首页轮播图\n  BANNERS: `${HY_HOST}/static/json/banner`,\n  // 首页文章\n  ARTICLES: `${HY_HOST}/static/json/articles`,\n  // 文章详情\n  ARTICLE_DETAIL: `${HY_HOST}/static/json/article/detail`,\n  // 分类类别\n  CLASSIFY: `${HY_HOST}/static/json/classify`,\n  // 每日卡片\n  CARDS: `${HY_HOST}/static/json/cards`,\n  // 关于\n  ABOUT: `${HY_HOST}/static/json/about`,\n}\n\nexport const Douban = {\n  // 域名\n  HOST: DB_HOST,\n  // 豆瓣热映\n  IN_THEATERS: `${DB_HOST}/v2/movie/in_theaters`,\n  // 即将上映\n  COMMING: `${DB_HOST}/v2/movie/coming_soon`,\n  // 影视条目信息\n  DETAILS: `${DB_HOST}/v2/movie/subject`,\n  // 影视搜索\n  SEARCH: `${DB_HOST}/v2/movie/search`,\n}\n\nHonye.get = (path, params) => {\n  return new Promise((resolve, reject) => {\n    wx.request({\n      url: path,\n      success: ({ statusCode, data }) => {\n        if (statusCode >= 200 && statusCode < 300) {\n          resolve(data)\n        } else {\n          reject({\n            ...data,\n            message: data.message || data.msg || '服务器开小差了',\n          })\n        }\n      },\n      fail: err => {\n        reject(err)\n      },\n      complete: res => {\n        wx.hideLoading()\n      }\n    })\n  })\n}\n\nDouban.get = (path, params) => {\n  return new Promise((resolve, reject) => {\n    wx.request({\n      url: path,\n      header: {\n        \"Content-Type\": \"json\"\n      },\n      data: {\n        apikey: '0b2bdeda43b5688921839c8ecb20399b',\n        ...params\n      },\n      success: ({ statusCode, data }) => {\n        if (statusCode >= 200 && statusCode < 300 ) {\n          resolve(data)\n        } else {\n          reject({\n            ...data,\n            message: data.message || data.msg || '服务器开小差了',\n          })\n        }\n      },\n      fail: err => {\n        reject(err)\n      },\n      complete: res => {\n        wx.hideLoading()\n      }\n    })\n  })\n}\n\nconst request = (method, url, params) => {\n  return new Promise((resolve, reject) => {\n    wx.request({\n      url,\n      header: {\n        'Content-Type': 'json',\n      },\n      data: params,\n      success: ({ statusCode, data }) => {\n        if (statusCode >= 200 && statusCode < 300) {\n          resolve(data)\n        } else {\n          reject({\n            ...data,\n            message: data.message || data.msg || '服务器开小差了',\n          })\n        }\n      },\n      fail: (err) => {\n        reject(err)\n      },\n      complete(res) {\n        wx.hideLoading()\n      }\n    })\n  })\n}\n\nconst MTIME_HOST = 'https://api-m.mtime.cn'\n\nconst mRequest = (method, path, params) => {\n  return request(method, `${MTIME_HOST}${path}`, params)\n}\n\n/** 时光网 */\nexport const mtime = {\n  // 域名\n  HOST: MTIME_HOST,\n  /**\n   * 城市列表\n   */\n  getCities() {\n    return mRequest('get', '/Showtime/HotCitiesByCinema.api')\n  },\n  /**\n   * 正在热映\n   * @param {Number} cityId 城市ID\n   */\n  getLocationMovies(cityId = 290) {\n    return mRequest('get', '/Showtime/LocationMovies.api', {\n      locationId: cityId,\n    })\n  },\n  /**\n   * 即将上映\n   * @param {Number} cityId 城市ID\n   */\n  getComingMovies(cityId = 290) {\n    return mRequest('get', '/Movie/MovieComingNew.api', {\n      locationId: cityId,\n    })\n  },\n  /**\n   * 搜索，每页 20 条\n   * @param {Object} params\n   * @param {String} params.keyword 关键词\n   * @param {Number} params.pageIndex 页码\n   * @param {Number} params.type\n   * @param {Number} params.locationId 城市ID\n   */\n  searchMovie(params = {}, keywords, pageIndex = 1, type = 3, cityId = 290) {\n    let defaultParams = {\n      type: 3,\n      locationId: 290,\n      pageIndex: 1,\n    }\n    return mRequest('get', '/Showtime/SearchVoice.api', {\n      ...defaultParams,\n      ...params,\n    })\n  },\n  /**\n   * 影片详情\n   * @param {Number} params.movieId 影片ID\n   * @param {Number} params.locationId 城市ID\n   */\n  getMovieDetail(params) {\n    return mRequest('get', '/movie/detail.api', params)\n  },\n  /**\n   * 影片演职员表\n   * @param {Object} params \n   * @param {Number} params.movieId 影片ID\n   */\n  getMovieCredits(params) {\n    return mRequest('get', '/Movie/MovieCreditsWithTypes.api', params)\n  },\n  /**\n   * 短评\n   * @param {Object} params \n   * @param {Number} params.movieId 影片ID\n   * @param {Number} params.pageIndex 页码，从1起步\n   */\n  getMovieComments(params) {\n    return mRequest('get', '/Showtime/MovieComments.api', params)\n  },\n}\n\nexport default {\n  Honye,\n  Douban,\n  mtime,\n}"
  },
  {
    "path": "miniprogram/utils/crypro.js",
    "content": "import CryptoJS from \"crypto-js\";\n\nconst encryptKey = 'JvQv7SnUUIHLXcOCYPsRcg=='\nconst iv = '0f358c9961014d65'\n\n/**\n * @param {string} message\n * @param {object} cfg\n * @param {string} cfg.key\n * @param {string} cfg.iv\n */\nexport function encrypt(message) {\n  const keyWordArray = CryptoJS.enc.Utf8.parse(encryptKey)\n  const ivWordArray = CryptoJS.enc.Hex.parse(iv)\n  const encrypted = CryptoJS.AES.encrypt(\n    message,\n    keyWordArray,\n    {\n      iv: ivWordArray,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    }\n  )\n  return encrypted.ciphertext.toString(CryptoJS.enc.Hex)\n}\n\nexport function decrypt(message) {\n  const keyWordArray = CryptoJS.enc.Utf8.parse(encryptKey)\n  const ivWordArray = CryptoJS.enc.Hex.parse(iv)\n  const encrypted = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(message))\n  const decrypted = CryptoJS.AES.decrypt(\n    encrypted,\n    keyWordArray,\n    {\n      iv: ivWordArray,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    }\n  )\n  return decrypted.toString(CryptoJS.enc.Utf8)\n}\n"
  },
  {
    "path": "miniprogram/utils/events.js",
    "content": "import { EventEmitter } from './EventEmitter';\n\nexport const emitter = new EventEmitter();\n\nexport const events = {\n  /** Tab 影视列表 - 刷新 */\n  TAB_MOVIES_UPDATE: 'tab_movies_update',\n  /** 登录成功 */\n  LOGIN_SUCCESS: 'login_success',\n};\n"
  },
  {
    "path": "miniprogram/utils/github-colors.js",
    "content": "/**\n * GitHub language colors\n * \n * GitHub: https://github.com/ozh/github-colors\n */\nexport default {\n  \"1C Enterprise\": {\n    \"color\": \"#814CCC\",\n    \"url\": \"https://github.com/trending?l=1C-Enterprise\"\n  },\n  \"4D\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=4D\"\n  },\n  \"ABAP\": {\n    \"color\": \"#E8274B\",\n    \"url\": \"https://github.com/trending?l=ABAP\"\n  },\n  \"ActionScript\": {\n    \"color\": \"#882B0F\",\n    \"url\": \"https://github.com/trending?l=ActionScript\"\n  },\n  \"Ada\": {\n    \"color\": \"#02f88c\",\n    \"url\": \"https://github.com/trending?l=Ada\"\n  },\n  \"Agda\": {\n    \"color\": \"#315665\",\n    \"url\": \"https://github.com/trending?l=Agda\"\n  },\n  \"AGS Script\": {\n    \"color\": \"#B9D9FF\",\n    \"url\": \"https://github.com/trending?l=AGS-Script\"\n  },\n  \"AL\": {\n    \"color\": \"#3AA2B5\",\n    \"url\": \"https://github.com/trending?l=AL\"\n  },\n  \"Alloy\": {\n    \"color\": \"#64C800\",\n    \"url\": \"https://github.com/trending?l=Alloy\"\n  },\n  \"Alpine Abuild\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Alpine-Abuild\"\n  },\n  \"AMPL\": {\n    \"color\": \"#E6EFBB\",\n    \"url\": \"https://github.com/trending?l=AMPL\"\n  },\n  \"AngelScript\": {\n    \"color\": \"#C7D7DC\",\n    \"url\": \"https://github.com/trending?l=AngelScript\"\n  },\n  \"ANTLR\": {\n    \"color\": \"#9DC3FF\",\n    \"url\": \"https://github.com/trending?l=ANTLR\"\n  },\n  \"Apex\": {\n    \"color\": \"#1797c0\",\n    \"url\": \"https://github.com/trending?l=Apex\"\n  },\n  \"API Blueprint\": {\n    \"color\": \"#2ACCA8\",\n    \"url\": \"https://github.com/trending?l=API-Blueprint\"\n  },\n  \"APL\": {\n    \"color\": \"#5A8164\",\n    \"url\": \"https://github.com/trending?l=APL\"\n  },\n  \"Apollo Guidance Computer\": {\n    \"color\": \"#0B3D91\",\n    \"url\": \"https://github.com/trending?l=Apollo-Guidance-Computer\"\n  },\n  \"AppleScript\": {\n    \"color\": \"#101F1F\",\n    \"url\": \"https://github.com/trending?l=AppleScript\"\n  },\n  \"Arc\": {\n    \"color\": \"#aa2afe\",\n    \"url\": \"https://github.com/trending?l=Arc\"\n  },\n  \"ASL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=ASL\"\n  },\n  \"ASP.NET\": {\n    \"color\": \"#9400ff\",\n    \"url\": \"https://github.com/trending?l=ASP.NET\"\n  },\n  \"AspectJ\": {\n    \"color\": \"#a957b0\",\n    \"url\": \"https://github.com/trending?l=AspectJ\"\n  },\n  \"Assembly\": {\n    \"color\": \"#6E4C13\",\n    \"url\": \"https://github.com/trending?l=Assembly\"\n  },\n  \"Asymptote\": {\n    \"color\": \"#ff0000\",\n    \"url\": \"https://github.com/trending?l=Asymptote\"\n  },\n  \"ATS\": {\n    \"color\": \"#1ac620\",\n    \"url\": \"https://github.com/trending?l=ATS\"\n  },\n  \"Augeas\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Augeas\"\n  },\n  \"AutoHotkey\": {\n    \"color\": \"#6594b9\",\n    \"url\": \"https://github.com/trending?l=AutoHotkey\"\n  },\n  \"AutoIt\": {\n    \"color\": \"#1C3552\",\n    \"url\": \"https://github.com/trending?l=AutoIt\"\n  },\n  \"Awk\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Awk\"\n  },\n  \"Ballerina\": {\n    \"color\": \"#FF5000\",\n    \"url\": \"https://github.com/trending?l=Ballerina\"\n  },\n  \"Batchfile\": {\n    \"color\": \"#C1F12E\",\n    \"url\": \"https://github.com/trending?l=Batchfile\"\n  },\n  \"Befunge\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Befunge\"\n  },\n  \"Bison\": {\n    \"color\": \"#6A463F\",\n    \"url\": \"https://github.com/trending?l=Bison\"\n  },\n  \"BitBake\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=BitBake\"\n  },\n  \"Blade\": {\n    \"color\": \"#f7523f\",\n    \"url\": \"https://github.com/trending?l=Blade\"\n  },\n  \"BlitzBasic\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=BlitzBasic\"\n  },\n  \"BlitzMax\": {\n    \"color\": \"#cd6400\",\n    \"url\": \"https://github.com/trending?l=BlitzMax\"\n  },\n  \"Bluespec\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Bluespec\"\n  },\n  \"Boo\": {\n    \"color\": \"#d4bec1\",\n    \"url\": \"https://github.com/trending?l=Boo\"\n  },\n  \"Brainfuck\": {\n    \"color\": \"#2F2530\",\n    \"url\": \"https://github.com/trending?l=Brainfuck\"\n  },\n  \"Brightscript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Brightscript\"\n  },\n  \"Browserslist\": {\n    \"color\": \"#ffd539\",\n    \"url\": \"https://github.com/trending?l=Browserslist\"\n  },\n  \"C\": {\n    \"color\": \"#555555\",\n    \"url\": \"https://github.com/trending?l=C\"\n  },\n  \"C#\": {\n    \"color\": \"#178600\",\n    \"url\": \"https://github.com/trending?l=Csharp\"\n  },\n  \"C++\": {\n    \"color\": \"#f34b7d\",\n    \"url\": \"https://github.com/trending?l=C++\"\n  },\n  \"C2hs Haskell\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=C2hs-Haskell\"\n  },\n  \"Cap'n Proto\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Cap'n-Proto\"\n  },\n  \"CartoCSS\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=CartoCSS\"\n  },\n  \"Ceylon\": {\n    \"color\": \"#dfa535\",\n    \"url\": \"https://github.com/trending?l=Ceylon\"\n  },\n  \"Chapel\": {\n    \"color\": \"#8dc63f\",\n    \"url\": \"https://github.com/trending?l=Chapel\"\n  },\n  \"Charity\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Charity\"\n  },\n  \"ChucK\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=ChucK\"\n  },\n  \"Cirru\": {\n    \"color\": \"#ccccff\",\n    \"url\": \"https://github.com/trending?l=Cirru\"\n  },\n  \"Clarion\": {\n    \"color\": \"#db901e\",\n    \"url\": \"https://github.com/trending?l=Clarion\"\n  },\n  \"Classic ASP\": {\n    \"color\": \"#6a40fd\",\n    \"url\": \"https://github.com/trending?l=Classic-ASP\"\n  },\n  \"Clean\": {\n    \"color\": \"#3F85AF\",\n    \"url\": \"https://github.com/trending?l=Clean\"\n  },\n  \"Click\": {\n    \"color\": \"#E4E6F3\",\n    \"url\": \"https://github.com/trending?l=Click\"\n  },\n  \"CLIPS\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=CLIPS\"\n  },\n  \"Clojure\": {\n    \"color\": \"#db5855\",\n    \"url\": \"https://github.com/trending?l=Clojure\"\n  },\n  \"CMake\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=CMake\"\n  },\n  \"COBOL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=COBOL\"\n  },\n  \"CodeQL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=CodeQL\"\n  },\n  \"CoffeeScript\": {\n    \"color\": \"#244776\",\n    \"url\": \"https://github.com/trending?l=CoffeeScript\"\n  },\n  \"ColdFusion\": {\n    \"color\": \"#ed2cd6\",\n    \"url\": \"https://github.com/trending?l=ColdFusion\"\n  },\n  \"ColdFusion CFC\": {\n    \"color\": \"#ed2cd6\",\n    \"url\": \"https://github.com/trending?l=ColdFusion-CFC\"\n  },\n  \"Common Lisp\": {\n    \"color\": \"#3fb68b\",\n    \"url\": \"https://github.com/trending?l=Common-Lisp\"\n  },\n  \"Common Workflow Language\": {\n    \"color\": \"#B5314C\",\n    \"url\": \"https://github.com/trending?l=Common-Workflow-Language\"\n  },\n  \"Component Pascal\": {\n    \"color\": \"#B0CE4E\",\n    \"url\": \"https://github.com/trending?l=Component-Pascal\"\n  },\n  \"Cool\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Cool\"\n  },\n  \"Coq\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Coq\"\n  },\n  \"Crystal\": {\n    \"color\": \"#000100\",\n    \"url\": \"https://github.com/trending?l=Crystal\"\n  },\n  \"CSON\": {\n    \"color\": \"#244776\",\n    \"url\": \"https://github.com/trending?l=CSON\"\n  },\n  \"Csound\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Csound\"\n  },\n  \"Csound Document\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Csound-Document\"\n  },\n  \"Csound Score\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Csound-Score\"\n  },\n  \"CSS\": {\n    \"color\": \"#563d7c\",\n    \"url\": \"https://github.com/trending?l=CSS\"\n  },\n  \"Cuda\": {\n    \"color\": \"#3A4E3A\",\n    \"url\": \"https://github.com/trending?l=Cuda\"\n  },\n  \"CWeb\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=CWeb\"\n  },\n  \"Cycript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Cycript\"\n  },\n  \"Cython\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Cython\"\n  },\n  \"D\": {\n    \"color\": \"#ba595e\",\n    \"url\": \"https://github.com/trending?l=D\"\n  },\n  \"Dafny\": {\n    \"color\": \"#FFEC25\",\n    \"url\": \"https://github.com/trending?l=Dafny\"\n  },\n  \"Dart\": {\n    \"color\": \"#00B4AB\",\n    \"url\": \"https://github.com/trending?l=Dart\"\n  },\n  \"DataWeave\": {\n    \"color\": \"#003a52\",\n    \"url\": \"https://github.com/trending?l=DataWeave\"\n  },\n  \"Dhall\": {\n    \"color\": \"#dfafff\",\n    \"url\": \"https://github.com/trending?l=Dhall\"\n  },\n  \"DIGITAL Command Language\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=DIGITAL-Command-Language\"\n  },\n  \"DM\": {\n    \"color\": \"#447265\",\n    \"url\": \"https://github.com/trending?l=DM\"\n  },\n  \"Dockerfile\": {\n    \"color\": \"#384d54\",\n    \"url\": \"https://github.com/trending?l=Dockerfile\"\n  },\n  \"Dogescript\": {\n    \"color\": \"#cca760\",\n    \"url\": \"https://github.com/trending?l=Dogescript\"\n  },\n  \"DTrace\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=DTrace\"\n  },\n  \"Dylan\": {\n    \"color\": \"#6c616e\",\n    \"url\": \"https://github.com/trending?l=Dylan\"\n  },\n  \"E\": {\n    \"color\": \"#ccce35\",\n    \"url\": \"https://github.com/trending?l=E\"\n  },\n  \"eC\": {\n    \"color\": \"#913960\",\n    \"url\": \"https://github.com/trending?l=eC\"\n  },\n  \"ECL\": {\n    \"color\": \"#8a1267\",\n    \"url\": \"https://github.com/trending?l=ECL\"\n  },\n  \"ECLiPSe\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=ECLiPSe\"\n  },\n  \"Eiffel\": {\n    \"color\": \"#4d6977\",\n    \"url\": \"https://github.com/trending?l=Eiffel\"\n  },\n  \"EJS\": {\n    \"color\": \"#a91e50\",\n    \"url\": \"https://github.com/trending?l=EJS\"\n  },\n  \"Elixir\": {\n    \"color\": \"#6e4a7e\",\n    \"url\": \"https://github.com/trending?l=Elixir\"\n  },\n  \"Elm\": {\n    \"color\": \"#60B5CC\",\n    \"url\": \"https://github.com/trending?l=Elm\"\n  },\n  \"Emacs Lisp\": {\n    \"color\": \"#c065db\",\n    \"url\": \"https://github.com/trending?l=Emacs-Lisp\"\n  },\n  \"EmberScript\": {\n    \"color\": \"#FFF4F3\",\n    \"url\": \"https://github.com/trending?l=EmberScript\"\n  },\n  \"EQ\": {\n    \"color\": \"#a78649\",\n    \"url\": \"https://github.com/trending?l=EQ\"\n  },\n  \"Erlang\": {\n    \"color\": \"#B83998\",\n    \"url\": \"https://github.com/trending?l=Erlang\"\n  },\n  \"F#\": {\n    \"color\": \"#b845fc\",\n    \"url\": \"https://github.com/trending?l=Fsharp\"\n  },\n  \"F*\": {\n    \"color\": \"#572e30\",\n    \"url\": \"https://github.com/trending?l=F*\"\n  },\n  \"Factor\": {\n    \"color\": \"#636746\",\n    \"url\": \"https://github.com/trending?l=Factor\"\n  },\n  \"Fancy\": {\n    \"color\": \"#7b9db4\",\n    \"url\": \"https://github.com/trending?l=Fancy\"\n  },\n  \"Fantom\": {\n    \"color\": \"#14253c\",\n    \"url\": \"https://github.com/trending?l=Fantom\"\n  },\n  \"Faust\": {\n    \"color\": \"#c37240\",\n    \"url\": \"https://github.com/trending?l=Faust\"\n  },\n  \"Filebench WML\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Filebench-WML\"\n  },\n  \"Filterscript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Filterscript\"\n  },\n  \"fish\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=fish\"\n  },\n  \"FLUX\": {\n    \"color\": \"#88ccff\",\n    \"url\": \"https://github.com/trending?l=FLUX\"\n  },\n  \"Forth\": {\n    \"color\": \"#341708\",\n    \"url\": \"https://github.com/trending?l=Forth\"\n  },\n  \"Fortran\": {\n    \"color\": \"#4d41b1\",\n    \"url\": \"https://github.com/trending?l=Fortran\"\n  },\n  \"Fortran Free Form\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Fortran-Free-Form\"\n  },\n  \"FreeMarker\": {\n    \"color\": \"#0050b2\",\n    \"url\": \"https://github.com/trending?l=FreeMarker\"\n  },\n  \"Frege\": {\n    \"color\": \"#00cafe\",\n    \"url\": \"https://github.com/trending?l=Frege\"\n  },\n  \"Futhark\": {\n    \"color\": \"#5f021f\",\n    \"url\": \"https://github.com/trending?l=Futhark\"\n  },\n  \"G-code\": {\n    \"color\": \"#D08CF2\",\n    \"url\": \"https://github.com/trending?l=G-code\"\n  },\n  \"Game Maker Language\": {\n    \"color\": \"#71b417\",\n    \"url\": \"https://github.com/trending?l=Game-Maker-Language\"\n  },\n  \"GAML\": {\n    \"color\": \"#FFC766\",\n    \"url\": \"https://github.com/trending?l=GAML\"\n  },\n  \"GAMS\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=GAMS\"\n  },\n  \"GAP\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=GAP\"\n  },\n  \"GCC Machine Description\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=GCC-Machine-Description\"\n  },\n  \"GDB\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=GDB\"\n  },\n  \"GDScript\": {\n    \"color\": \"#355570\",\n    \"url\": \"https://github.com/trending?l=GDScript\"\n  },\n  \"Genie\": {\n    \"color\": \"#fb855d\",\n    \"url\": \"https://github.com/trending?l=Genie\"\n  },\n  \"Genshi\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Genshi\"\n  },\n  \"Gentoo Ebuild\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Gentoo-Ebuild\"\n  },\n  \"Gentoo Eclass\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Gentoo-Eclass\"\n  },\n  \"Gherkin\": {\n    \"color\": \"#5B2063\",\n    \"url\": \"https://github.com/trending?l=Gherkin\"\n  },\n  \"GLSL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=GLSL\"\n  },\n  \"Glyph\": {\n    \"color\": \"#c1ac7f\",\n    \"url\": \"https://github.com/trending?l=Glyph\"\n  },\n  \"Gnuplot\": {\n    \"color\": \"#f0a9f0\",\n    \"url\": \"https://github.com/trending?l=Gnuplot\"\n  },\n  \"Go\": {\n    \"color\": \"#00ADD8\",\n    \"url\": \"https://github.com/trending?l=Go\"\n  },\n  \"Golo\": {\n    \"color\": \"#88562A\",\n    \"url\": \"https://github.com/trending?l=Golo\"\n  },\n  \"Gosu\": {\n    \"color\": \"#82937f\",\n    \"url\": \"https://github.com/trending?l=Gosu\"\n  },\n  \"Grace\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Grace\"\n  },\n  \"Grammatical Framework\": {\n    \"color\": \"#ff0000\",\n    \"url\": \"https://github.com/trending?l=Grammatical-Framework\"\n  },\n  \"GraphQL\": {\n    \"color\": \"#e10098\",\n    \"url\": \"https://github.com/trending?l=GraphQL\"\n  },\n  \"Groovy\": {\n    \"color\": \"#e69f56\",\n    \"url\": \"https://github.com/trending?l=Groovy\"\n  },\n  \"Groovy Server Pages\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Groovy-Server-Pages\"\n  },\n  \"Hack\": {\n    \"color\": \"#878787\",\n    \"url\": \"https://github.com/trending?l=Hack\"\n  },\n  \"Haml\": {\n    \"color\": \"#ece2a9\",\n    \"url\": \"https://github.com/trending?l=Haml\"\n  },\n  \"Handlebars\": {\n    \"color\": \"#f7931e\",\n    \"url\": \"https://github.com/trending?l=Handlebars\"\n  },\n  \"Harbour\": {\n    \"color\": \"#0e60e3\",\n    \"url\": \"https://github.com/trending?l=Harbour\"\n  },\n  \"Haskell\": {\n    \"color\": \"#5e5086\",\n    \"url\": \"https://github.com/trending?l=Haskell\"\n  },\n  \"Haxe\": {\n    \"color\": \"#df7900\",\n    \"url\": \"https://github.com/trending?l=Haxe\"\n  },\n  \"HCL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=HCL\"\n  },\n  \"HiveQL\": {\n    \"color\": \"#dce200\",\n    \"url\": \"https://github.com/trending?l=HiveQL\"\n  },\n  \"HLSL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=HLSL\"\n  },\n  \"HolyC\": {\n    \"color\": \"#ffefaf\",\n    \"url\": \"https://github.com/trending?l=HolyC\"\n  },\n  \"HTML\": {\n    \"color\": \"#e34c26\",\n    \"url\": \"https://github.com/trending?l=HTML\"\n  },\n  \"Hy\": {\n    \"color\": \"#7790B2\",\n    \"url\": \"https://github.com/trending?l=Hy\"\n  },\n  \"HyPhy\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=HyPhy\"\n  },\n  \"IDL\": {\n    \"color\": \"#a3522f\",\n    \"url\": \"https://github.com/trending?l=IDL\"\n  },\n  \"Idris\": {\n    \"color\": \"#b30000\",\n    \"url\": \"https://github.com/trending?l=Idris\"\n  },\n  \"IGOR Pro\": {\n    \"color\": \"#0000cc\",\n    \"url\": \"https://github.com/trending?l=IGOR-Pro\"\n  },\n  \"Inform 7\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Inform-7\"\n  },\n  \"Inno Setup\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Inno-Setup\"\n  },\n  \"Io\": {\n    \"color\": \"#a9188d\",\n    \"url\": \"https://github.com/trending?l=Io\"\n  },\n  \"Ioke\": {\n    \"color\": \"#078193\",\n    \"url\": \"https://github.com/trending?l=Ioke\"\n  },\n  \"Isabelle\": {\n    \"color\": \"#FEFE00\",\n    \"url\": \"https://github.com/trending?l=Isabelle\"\n  },\n  \"Isabelle ROOT\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Isabelle-ROOT\"\n  },\n  \"J\": {\n    \"color\": \"#9EEDFF\",\n    \"url\": \"https://github.com/trending?l=J\"\n  },\n  \"Jasmin\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Jasmin\"\n  },\n  \"Java\": {\n    \"color\": \"#b07219\",\n    \"url\": \"https://github.com/trending?l=Java\"\n  },\n  \"Java Server Pages\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Java-Server-Pages\"\n  },\n  \"JavaScript\": {\n    \"color\": \"#f1e05a\",\n    \"url\": \"https://github.com/trending?l=JavaScript\"\n  },\n  \"JavaScript+ERB\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=JavaScript+ERB\"\n  },\n  \"JFlex\": {\n    \"color\": \"#DBCA00\",\n    \"url\": \"https://github.com/trending?l=JFlex\"\n  },\n  \"Jison\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Jison\"\n  },\n  \"Jison Lex\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Jison-Lex\"\n  },\n  \"Jolie\": {\n    \"color\": \"#843179\",\n    \"url\": \"https://github.com/trending?l=Jolie\"\n  },\n  \"JSONiq\": {\n    \"color\": \"#40d47e\",\n    \"url\": \"https://github.com/trending?l=JSONiq\"\n  },\n  \"Jsonnet\": {\n    \"color\": \"#0064bd\",\n    \"url\": \"https://github.com/trending?l=Jsonnet\"\n  },\n  \"JSX\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=JSX\"\n  },\n  \"Julia\": {\n    \"color\": \"#a270ba\",\n    \"url\": \"https://github.com/trending?l=Julia\"\n  },\n  \"Jupyter Notebook\": {\n    \"color\": \"#DA5B0B\",\n    \"url\": \"https://github.com/trending?l=Jupyter-Notebook\"\n  },\n  \"Kaitai Struct\": {\n    \"color\": \"#773b37\",\n    \"url\": \"https://github.com/trending?l=Kaitai-Struct\"\n  },\n  \"Kotlin\": {\n    \"color\": \"#F18E33\",\n    \"url\": \"https://github.com/trending?l=Kotlin\"\n  },\n  \"KRL\": {\n    \"color\": \"#28430A\",\n    \"url\": \"https://github.com/trending?l=KRL\"\n  },\n  \"LabVIEW\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=LabVIEW\"\n  },\n  \"Lark\": {\n    \"color\": \"#0b130f\",\n    \"url\": \"https://github.com/trending?l=Lark\"\n  },\n  \"Lasso\": {\n    \"color\": \"#999999\",\n    \"url\": \"https://github.com/trending?l=Lasso\"\n  },\n  \"Latte\": {\n    \"color\": \"#f2a542\",\n    \"url\": \"https://github.com/trending?l=Latte\"\n  },\n  \"Lean\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Lean\"\n  },\n  \"Less\": {\n    \"color\": \"#1d365d\",\n    \"url\": \"https://github.com/trending?l=Less\"\n  },\n  \"Lex\": {\n    \"color\": \"#DBCA00\",\n    \"url\": \"https://github.com/trending?l=Lex\"\n  },\n  \"LFE\": {\n    \"color\": \"#4C3023\",\n    \"url\": \"https://github.com/trending?l=LFE\"\n  },\n  \"LilyPond\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=LilyPond\"\n  },\n  \"Limbo\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Limbo\"\n  },\n  \"Literate Agda\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Literate-Agda\"\n  },\n  \"Literate CoffeeScript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Literate-CoffeeScript\"\n  },\n  \"Literate Haskell\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Literate-Haskell\"\n  },\n  \"LiveScript\": {\n    \"color\": \"#499886\",\n    \"url\": \"https://github.com/trending?l=LiveScript\"\n  },\n  \"LLVM\": {\n    \"color\": \"#185619\",\n    \"url\": \"https://github.com/trending?l=LLVM\"\n  },\n  \"Logos\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Logos\"\n  },\n  \"Logtalk\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Logtalk\"\n  },\n  \"LOLCODE\": {\n    \"color\": \"#cc9900\",\n    \"url\": \"https://github.com/trending?l=LOLCODE\"\n  },\n  \"LookML\": {\n    \"color\": \"#652B81\",\n    \"url\": \"https://github.com/trending?l=LookML\"\n  },\n  \"LoomScript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=LoomScript\"\n  },\n  \"LSL\": {\n    \"color\": \"#3d9970\",\n    \"url\": \"https://github.com/trending?l=LSL\"\n  },\n  \"Lua\": {\n    \"color\": \"#000080\",\n    \"url\": \"https://github.com/trending?l=Lua\"\n  },\n  \"M\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=M\"\n  },\n  \"M4\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=M4\"\n  },\n  \"M4Sugar\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=M4Sugar\"\n  },\n  \"Macaulay2\": {\n    \"color\": \"#d8ffff\",\n    \"url\": \"https://github.com/trending?l=Macaulay2\"\n  },\n  \"Makefile\": {\n    \"color\": \"#427819\",\n    \"url\": \"https://github.com/trending?l=Makefile\"\n  },\n  \"Mako\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Mako\"\n  },\n  \"Markdown\": {\n    \"color\": \"#083fa1\",\n    \"url\": \"https://github.com/trending?l=Markdown\"\n  },\n  \"Marko\": {\n    \"color\": \"#42bff2\",\n    \"url\": \"https://github.com/trending?l=Marko\"\n  },\n  \"Mask\": {\n    \"color\": \"#f97732\",\n    \"url\": \"https://github.com/trending?l=Mask\"\n  },\n  \"Mathematica\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Mathematica\"\n  },\n  \"MATLAB\": {\n    \"color\": \"#e16737\",\n    \"url\": \"https://github.com/trending?l=MATLAB\"\n  },\n  \"Max\": {\n    \"color\": \"#c4a79c\",\n    \"url\": \"https://github.com/trending?l=Max\"\n  },\n  \"MAXScript\": {\n    \"color\": \"#00a6a6\",\n    \"url\": \"https://github.com/trending?l=MAXScript\"\n  },\n  \"mcfunction\": {\n    \"color\": \"#E22837\",\n    \"url\": \"https://github.com/trending?l=mcfunction\"\n  },\n  \"Mercury\": {\n    \"color\": \"#ff2b2b\",\n    \"url\": \"https://github.com/trending?l=Mercury\"\n  },\n  \"Meson\": {\n    \"color\": \"#007800\",\n    \"url\": \"https://github.com/trending?l=Meson\"\n  },\n  \"Metal\": {\n    \"color\": \"#8f14e9\",\n    \"url\": \"https://github.com/trending?l=Metal\"\n  },\n  \"MiniD\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=MiniD\"\n  },\n  \"Mirah\": {\n    \"color\": \"#c7a938\",\n    \"url\": \"https://github.com/trending?l=Mirah\"\n  },\n  \"mIRC Script\": {\n    \"color\": \"#3d57c3\",\n    \"url\": \"https://github.com/trending?l=mIRC-Script\"\n  },\n  \"MLIR\": {\n    \"color\": \"#5EC8DB\",\n    \"url\": \"https://github.com/trending?l=MLIR\"\n  },\n  \"Modelica\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Modelica\"\n  },\n  \"Modula-2\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Modula-2\"\n  },\n  \"Modula-3\": {\n    \"color\": \"#223388\",\n    \"url\": \"https://github.com/trending?l=Modula-3\"\n  },\n  \"Module Management System\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Module-Management-System\"\n  },\n  \"Monkey\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Monkey\"\n  },\n  \"Moocode\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Moocode\"\n  },\n  \"MoonScript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=MoonScript\"\n  },\n  \"Motorola 68K Assembly\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Motorola-68K-Assembly\"\n  },\n  \"MQL4\": {\n    \"color\": \"#62A8D6\",\n    \"url\": \"https://github.com/trending?l=MQL4\"\n  },\n  \"MQL5\": {\n    \"color\": \"#4A76B8\",\n    \"url\": \"https://github.com/trending?l=MQL5\"\n  },\n  \"MTML\": {\n    \"color\": \"#b7e1f4\",\n    \"url\": \"https://github.com/trending?l=MTML\"\n  },\n  \"MUF\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=MUF\"\n  },\n  \"mupad\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=mupad\"\n  },\n  \"Myghty\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Myghty\"\n  },\n  \"NASL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=NASL\"\n  },\n  \"NCL\": {\n    \"color\": \"#28431f\",\n    \"url\": \"https://github.com/trending?l=NCL\"\n  },\n  \"Nearley\": {\n    \"color\": \"#990000\",\n    \"url\": \"https://github.com/trending?l=Nearley\"\n  },\n  \"Nemerle\": {\n    \"color\": \"#3d3c6e\",\n    \"url\": \"https://github.com/trending?l=Nemerle\"\n  },\n  \"nesC\": {\n    \"color\": \"#94B0C7\",\n    \"url\": \"https://github.com/trending?l=nesC\"\n  },\n  \"NetLinx\": {\n    \"color\": \"#0aa0ff\",\n    \"url\": \"https://github.com/trending?l=NetLinx\"\n  },\n  \"NetLinx+ERB\": {\n    \"color\": \"#747faa\",\n    \"url\": \"https://github.com/trending?l=NetLinx+ERB\"\n  },\n  \"NetLogo\": {\n    \"color\": \"#ff6375\",\n    \"url\": \"https://github.com/trending?l=NetLogo\"\n  },\n  \"NewLisp\": {\n    \"color\": \"#87AED7\",\n    \"url\": \"https://github.com/trending?l=NewLisp\"\n  },\n  \"Nextflow\": {\n    \"color\": \"#3ac486\",\n    \"url\": \"https://github.com/trending?l=Nextflow\"\n  },\n  \"Nim\": {\n    \"color\": \"#ffc200\",\n    \"url\": \"https://github.com/trending?l=Nim\"\n  },\n  \"Nit\": {\n    \"color\": \"#009917\",\n    \"url\": \"https://github.com/trending?l=Nit\"\n  },\n  \"Nix\": {\n    \"color\": \"#7e7eff\",\n    \"url\": \"https://github.com/trending?l=Nix\"\n  },\n  \"NSIS\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=NSIS\"\n  },\n  \"Nu\": {\n    \"color\": \"#c9df40\",\n    \"url\": \"https://github.com/trending?l=Nu\"\n  },\n  \"NumPy\": {\n    \"color\": \"#9C8AF9\",\n    \"url\": \"https://github.com/trending?l=NumPy\"\n  },\n  \"NWScript\": {\n    \"color\": \"#111522\",\n    \"url\": \"https://github.com/trending?l=NWScript\"\n  },\n  \"Objective-C\": {\n    \"color\": \"#438eff\",\n    \"url\": \"https://github.com/trending?l=Objective-C\"\n  },\n  \"Objective-C++\": {\n    \"color\": \"#6866fb\",\n    \"url\": \"https://github.com/trending?l=Objective-C++\"\n  },\n  \"Objective-J\": {\n    \"color\": \"#ff0c5a\",\n    \"url\": \"https://github.com/trending?l=Objective-J\"\n  },\n  \"ObjectScript\": {\n    \"color\": \"#424893\",\n    \"url\": \"https://github.com/trending?l=ObjectScript\"\n  },\n  \"OCaml\": {\n    \"color\": \"#3be133\",\n    \"url\": \"https://github.com/trending?l=OCaml\"\n  },\n  \"Odin\": {\n    \"color\": \"#60AFFE\",\n    \"url\": \"https://github.com/trending?l=Odin\"\n  },\n  \"Omgrofl\": {\n    \"color\": \"#cabbff\",\n    \"url\": \"https://github.com/trending?l=Omgrofl\"\n  },\n  \"ooc\": {\n    \"color\": \"#b0b77e\",\n    \"url\": \"https://github.com/trending?l=ooc\"\n  },\n  \"Opa\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Opa\"\n  },\n  \"Opal\": {\n    \"color\": \"#f7ede0\",\n    \"url\": \"https://github.com/trending?l=Opal\"\n  },\n  \"Open Policy Agent\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Open-Policy-Agent\"\n  },\n  \"OpenCL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=OpenCL\"\n  },\n  \"OpenEdge ABL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=OpenEdge-ABL\"\n  },\n  \"OpenQASM\": {\n    \"color\": \"#AA70FF\",\n    \"url\": \"https://github.com/trending?l=OpenQASM\"\n  },\n  \"OpenRC runscript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=OpenRC-runscript\"\n  },\n  \"OpenSCAD\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=OpenSCAD\"\n  },\n  \"Ox\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Ox\"\n  },\n  \"Oxygene\": {\n    \"color\": \"#cdd0e3\",\n    \"url\": \"https://github.com/trending?l=Oxygene\"\n  },\n  \"Oz\": {\n    \"color\": \"#fab738\",\n    \"url\": \"https://github.com/trending?l=Oz\"\n  },\n  \"P4\": {\n    \"color\": \"#7055b5\",\n    \"url\": \"https://github.com/trending?l=P4\"\n  },\n  \"Pan\": {\n    \"color\": \"#cc0000\",\n    \"url\": \"https://github.com/trending?l=Pan\"\n  },\n  \"Papyrus\": {\n    \"color\": \"#6600cc\",\n    \"url\": \"https://github.com/trending?l=Papyrus\"\n  },\n  \"Parrot\": {\n    \"color\": \"#f3ca0a\",\n    \"url\": \"https://github.com/trending?l=Parrot\"\n  },\n  \"Parrot Assembly\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Parrot-Assembly\"\n  },\n  \"Parrot Internal Representation\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Parrot-Internal-Representation\"\n  },\n  \"Pascal\": {\n    \"color\": \"#E3F171\",\n    \"url\": \"https://github.com/trending?l=Pascal\"\n  },\n  \"Pawn\": {\n    \"color\": \"#dbb284\",\n    \"url\": \"https://github.com/trending?l=Pawn\"\n  },\n  \"Pep8\": {\n    \"color\": \"#C76F5B\",\n    \"url\": \"https://github.com/trending?l=Pep8\"\n  },\n  \"Perl\": {\n    \"color\": \"#0298c3\",\n    \"url\": \"https://github.com/trending?l=Perl\"\n  },\n  \"PHP\": {\n    \"color\": \"#4F5D95\",\n    \"url\": \"https://github.com/trending?l=PHP\"\n  },\n  \"PicoLisp\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=PicoLisp\"\n  },\n  \"PigLatin\": {\n    \"color\": \"#fcd7de\",\n    \"url\": \"https://github.com/trending?l=PigLatin\"\n  },\n  \"Pike\": {\n    \"color\": \"#005390\",\n    \"url\": \"https://github.com/trending?l=Pike\"\n  },\n  \"PLpgSQL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=PLpgSQL\"\n  },\n  \"PLSQL\": {\n    \"color\": \"#dad8d8\",\n    \"url\": \"https://github.com/trending?l=PLSQL\"\n  },\n  \"PogoScript\": {\n    \"color\": \"#d80074\",\n    \"url\": \"https://github.com/trending?l=PogoScript\"\n  },\n  \"Pony\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Pony\"\n  },\n  \"PostScript\": {\n    \"color\": \"#da291c\",\n    \"url\": \"https://github.com/trending?l=PostScript\"\n  },\n  \"POV-Ray SDL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=POV-Ray-SDL\"\n  },\n  \"PowerBuilder\": {\n    \"color\": \"#8f0f8d\",\n    \"url\": \"https://github.com/trending?l=PowerBuilder\"\n  },\n  \"PowerShell\": {\n    \"color\": \"#012456\",\n    \"url\": \"https://github.com/trending?l=PowerShell\"\n  },\n  \"Prisma\": {\n    \"color\": \"#0c344b\",\n    \"url\": \"https://github.com/trending?l=Prisma\"\n  },\n  \"Processing\": {\n    \"color\": \"#0096D8\",\n    \"url\": \"https://github.com/trending?l=Processing\"\n  },\n  \"Prolog\": {\n    \"color\": \"#74283c\",\n    \"url\": \"https://github.com/trending?l=Prolog\"\n  },\n  \"Propeller Spin\": {\n    \"color\": \"#7fa2a7\",\n    \"url\": \"https://github.com/trending?l=Propeller-Spin\"\n  },\n  \"Pug\": {\n    \"color\": \"#a86454\",\n    \"url\": \"https://github.com/trending?l=Pug\"\n  },\n  \"Puppet\": {\n    \"color\": \"#302B6D\",\n    \"url\": \"https://github.com/trending?l=Puppet\"\n  },\n  \"PureBasic\": {\n    \"color\": \"#5a6986\",\n    \"url\": \"https://github.com/trending?l=PureBasic\"\n  },\n  \"PureScript\": {\n    \"color\": \"#1D222D\",\n    \"url\": \"https://github.com/trending?l=PureScript\"\n  },\n  \"Python\": {\n    \"color\": \"#3572A5\",\n    \"url\": \"https://github.com/trending?l=Python\"\n  },\n  \"Python console\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Python-console\"\n  },\n  \"q\": {\n    \"color\": \"#0040cd\",\n    \"url\": \"https://github.com/trending?l=q\"\n  },\n  \"Q#\": {\n    \"color\": \"#fed659\",\n    \"url\": \"https://github.com/trending?l=Qsharp\"\n  },\n  \"QMake\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=QMake\"\n  },\n  \"QML\": {\n    \"color\": \"#44a51c\",\n    \"url\": \"https://github.com/trending?l=QML\"\n  },\n  \"Qt Script\": {\n    \"color\": \"#00b841\",\n    \"url\": \"https://github.com/trending?l=Qt-Script\"\n  },\n  \"Quake\": {\n    \"color\": \"#882233\",\n    \"url\": \"https://github.com/trending?l=Quake\"\n  },\n  \"R\": {\n    \"color\": \"#198CE7\",\n    \"url\": \"https://github.com/trending?l=R\"\n  },\n  \"Racket\": {\n    \"color\": \"#3c5caa\",\n    \"url\": \"https://github.com/trending?l=Racket\"\n  },\n  \"Ragel\": {\n    \"color\": \"#9d5200\",\n    \"url\": \"https://github.com/trending?l=Ragel\"\n  },\n  \"Raku\": {\n    \"color\": \"#0000fb\",\n    \"url\": \"https://github.com/trending?l=Raku\"\n  },\n  \"RAML\": {\n    \"color\": \"#77d9fb\",\n    \"url\": \"https://github.com/trending?l=RAML\"\n  },\n  \"Rascal\": {\n    \"color\": \"#fffaa0\",\n    \"url\": \"https://github.com/trending?l=Rascal\"\n  },\n  \"REALbasic\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=REALbasic\"\n  },\n  \"Reason\": {\n    \"color\": \"#ff5847\",\n    \"url\": \"https://github.com/trending?l=Reason\"\n  },\n  \"Rebol\": {\n    \"color\": \"#358a5b\",\n    \"url\": \"https://github.com/trending?l=Rebol\"\n  },\n  \"Red\": {\n    \"color\": \"#f50000\",\n    \"url\": \"https://github.com/trending?l=Red\"\n  },\n  \"Redcode\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Redcode\"\n  },\n  \"Ren'Py\": {\n    \"color\": \"#ff7f7f\",\n    \"url\": \"https://github.com/trending?l=Ren'Py\"\n  },\n  \"RenderScript\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=RenderScript\"\n  },\n  \"ReScript\": {\n    \"color\": \"#ed5051\",\n    \"url\": \"https://github.com/trending?l=ReScript\"\n  },\n  \"REXX\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=REXX\"\n  },\n  \"Ring\": {\n    \"color\": \"#2D54CB\",\n    \"url\": \"https://github.com/trending?l=Ring\"\n  },\n  \"Riot\": {\n    \"color\": \"#A71E49\",\n    \"url\": \"https://github.com/trending?l=Riot\"\n  },\n  \"RobotFramework\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=RobotFramework\"\n  },\n  \"Roff\": {\n    \"color\": \"#ecdebe\",\n    \"url\": \"https://github.com/trending?l=Roff\"\n  },\n  \"Rouge\": {\n    \"color\": \"#cc0088\",\n    \"url\": \"https://github.com/trending?l=Rouge\"\n  },\n  \"RPC\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=RPC\"\n  },\n  \"Ruby\": {\n    \"color\": \"#701516\",\n    \"url\": \"https://github.com/trending?l=Ruby\"\n  },\n  \"RUNOFF\": {\n    \"color\": \"#665a4e\",\n    \"url\": \"https://github.com/trending?l=RUNOFF\"\n  },\n  \"Rust\": {\n    \"color\": \"#dea584\",\n    \"url\": \"https://github.com/trending?l=Rust\"\n  },\n  \"Sage\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Sage\"\n  },\n  \"SaltStack\": {\n    \"color\": \"#646464\",\n    \"url\": \"https://github.com/trending?l=SaltStack\"\n  },\n  \"SAS\": {\n    \"color\": \"#B34936\",\n    \"url\": \"https://github.com/trending?l=SAS\"\n  },\n  \"Sass\": {\n    \"color\": \"#a53b70\",\n    \"url\": \"https://github.com/trending?l=Sass\"\n  },\n  \"Scala\": {\n    \"color\": \"#c22d40\",\n    \"url\": \"https://github.com/trending?l=Scala\"\n  },\n  \"Scheme\": {\n    \"color\": \"#1e4aec\",\n    \"url\": \"https://github.com/trending?l=Scheme\"\n  },\n  \"Scilab\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Scilab\"\n  },\n  \"SCSS\": {\n    \"color\": \"#c6538c\",\n    \"url\": \"https://github.com/trending?l=SCSS\"\n  },\n  \"sed\": {\n    \"color\": \"#64b970\",\n    \"url\": \"https://github.com/trending?l=sed\"\n  },\n  \"Self\": {\n    \"color\": \"#0579aa\",\n    \"url\": \"https://github.com/trending?l=Self\"\n  },\n  \"ShaderLab\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=ShaderLab\"\n  },\n  \"Shell\": {\n    \"color\": \"#89e051\",\n    \"url\": \"https://github.com/trending?l=Shell\"\n  },\n  \"ShellSession\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=ShellSession\"\n  },\n  \"Shen\": {\n    \"color\": \"#120F14\",\n    \"url\": \"https://github.com/trending?l=Shen\"\n  },\n  \"Sieve\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Sieve\"\n  },\n  \"Slash\": {\n    \"color\": \"#007eff\",\n    \"url\": \"https://github.com/trending?l=Slash\"\n  },\n  \"Slice\": {\n    \"color\": \"#003fa2\",\n    \"url\": \"https://github.com/trending?l=Slice\"\n  },\n  \"Slim\": {\n    \"color\": \"#2b2b2b\",\n    \"url\": \"https://github.com/trending?l=Slim\"\n  },\n  \"Smali\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Smali\"\n  },\n  \"Smalltalk\": {\n    \"color\": \"#596706\",\n    \"url\": \"https://github.com/trending?l=Smalltalk\"\n  },\n  \"Smarty\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Smarty\"\n  },\n  \"SmPL\": {\n    \"color\": \"#c94949\",\n    \"url\": \"https://github.com/trending?l=SmPL\"\n  },\n  \"SMT\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=SMT\"\n  },\n  \"Solidity\": {\n    \"color\": \"#AA6746\",\n    \"url\": \"https://github.com/trending?l=Solidity\"\n  },\n  \"SourcePawn\": {\n    \"color\": \"#f69e1d\",\n    \"url\": \"https://github.com/trending?l=SourcePawn\"\n  },\n  \"SQF\": {\n    \"color\": \"#3F3F3F\",\n    \"url\": \"https://github.com/trending?l=SQF\"\n  },\n  \"SQLPL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=SQLPL\"\n  },\n  \"Squirrel\": {\n    \"color\": \"#800000\",\n    \"url\": \"https://github.com/trending?l=Squirrel\"\n  },\n  \"SRecode Template\": {\n    \"color\": \"#348a34\",\n    \"url\": \"https://github.com/trending?l=SRecode-Template\"\n  },\n  \"Stan\": {\n    \"color\": \"#b2011d\",\n    \"url\": \"https://github.com/trending?l=Stan\"\n  },\n  \"Standard ML\": {\n    \"color\": \"#dc566d\",\n    \"url\": \"https://github.com/trending?l=Standard-ML\"\n  },\n  \"Starlark\": {\n    \"color\": \"#76d275\",\n    \"url\": \"https://github.com/trending?l=Starlark\"\n  },\n  \"Stata\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Stata\"\n  },\n  \"Stylus\": {\n    \"color\": \"#ff6347\",\n    \"url\": \"https://github.com/trending?l=Stylus\"\n  },\n  \"SuperCollider\": {\n    \"color\": \"#46390b\",\n    \"url\": \"https://github.com/trending?l=SuperCollider\"\n  },\n  \"Svelte\": {\n    \"color\": \"#ff3e00\",\n    \"url\": \"https://github.com/trending?l=Svelte\"\n  },\n  \"SVG\": {\n    \"color\": \"#ff9900\",\n    \"url\": \"https://github.com/trending?l=SVG\"\n  },\n  \"Swift\": {\n    \"color\": \"#ffac45\",\n    \"url\": \"https://github.com/trending?l=Swift\"\n  },\n  \"SWIG\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=SWIG\"\n  },\n  \"SystemVerilog\": {\n    \"color\": \"#DAE1C2\",\n    \"url\": \"https://github.com/trending?l=SystemVerilog\"\n  },\n  \"Tcl\": {\n    \"color\": \"#e4cc98\",\n    \"url\": \"https://github.com/trending?l=Tcl\"\n  },\n  \"Tcsh\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Tcsh\"\n  },\n  \"Terra\": {\n    \"color\": \"#00004c\",\n    \"url\": \"https://github.com/trending?l=Terra\"\n  },\n  \"TeX\": {\n    \"color\": \"#3D6117\",\n    \"url\": \"https://github.com/trending?l=TeX\"\n  },\n  \"Thrift\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Thrift\"\n  },\n  \"TI Program\": {\n    \"color\": \"#A0AA87\",\n    \"url\": \"https://github.com/trending?l=TI-Program\"\n  },\n  \"TLA\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=TLA\"\n  },\n  \"TSQL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=TSQL\"\n  },\n  \"TSX\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=TSX\"\n  },\n  \"Turing\": {\n    \"color\": \"#cf142b\",\n    \"url\": \"https://github.com/trending?l=Turing\"\n  },\n  \"Twig\": {\n    \"color\": \"#c1d026\",\n    \"url\": \"https://github.com/trending?l=Twig\"\n  },\n  \"TXL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=TXL\"\n  },\n  \"TypeScript\": {\n    \"color\": \"#2b7489\",\n    \"url\": \"https://github.com/trending?l=TypeScript\"\n  },\n  \"Unified Parallel C\": {\n    \"color\": \"#4e3617\",\n    \"url\": \"https://github.com/trending?l=Unified-Parallel-C\"\n  },\n  \"Unix Assembly\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Unix-Assembly\"\n  },\n  \"Uno\": {\n    \"color\": \"#9933cc\",\n    \"url\": \"https://github.com/trending?l=Uno\"\n  },\n  \"UnrealScript\": {\n    \"color\": \"#a54c4d\",\n    \"url\": \"https://github.com/trending?l=UnrealScript\"\n  },\n  \"UrWeb\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=UrWeb\"\n  },\n  \"V\": {\n    \"color\": \"#4f87c4\",\n    \"url\": \"https://github.com/trending?l=V\"\n  },\n  \"Vala\": {\n    \"color\": \"#fbe5cd\",\n    \"url\": \"https://github.com/trending?l=Vala\"\n  },\n  \"VBA\": {\n    \"color\": \"#867db1\",\n    \"url\": \"https://github.com/trending?l=VBA\"\n  },\n  \"VBScript\": {\n    \"color\": \"#15dcdc\",\n    \"url\": \"https://github.com/trending?l=VBScript\"\n  },\n  \"VCL\": {\n    \"color\": \"#148AA8\",\n    \"url\": \"https://github.com/trending?l=VCL\"\n  },\n  \"Verilog\": {\n    \"color\": \"#b2b7f8\",\n    \"url\": \"https://github.com/trending?l=Verilog\"\n  },\n  \"VHDL\": {\n    \"color\": \"#adb2cb\",\n    \"url\": \"https://github.com/trending?l=VHDL\"\n  },\n  \"Vim script\": {\n    \"color\": \"#199f4b\",\n    \"url\": \"https://github.com/trending?l=Vim-script\"\n  },\n  \"Visual Basic .NET\": {\n    \"color\": \"#945db7\",\n    \"url\": \"https://github.com/trending?l=Visual-Basic-.NET\"\n  },\n  \"Volt\": {\n    \"color\": \"#1F1F1F\",\n    \"url\": \"https://github.com/trending?l=Volt\"\n  },\n  \"Vue\": {\n    \"color\": \"#2c3e50\",\n    \"url\": \"https://github.com/trending?l=Vue\"\n  },\n  \"wdl\": {\n    \"color\": \"#42f1f4\",\n    \"url\": \"https://github.com/trending?l=wdl\"\n  },\n  \"WebAssembly\": {\n    \"color\": \"#04133b\",\n    \"url\": \"https://github.com/trending?l=WebAssembly\"\n  },\n  \"WebIDL\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=WebIDL\"\n  },\n  \"wisp\": {\n    \"color\": \"#7582D1\",\n    \"url\": \"https://github.com/trending?l=wisp\"\n  },\n  \"Wollok\": {\n    \"color\": \"#a23738\",\n    \"url\": \"https://github.com/trending?l=Wollok\"\n  },\n  \"X10\": {\n    \"color\": \"#4B6BEF\",\n    \"url\": \"https://github.com/trending?l=X10\"\n  },\n  \"xBase\": {\n    \"color\": \"#403a40\",\n    \"url\": \"https://github.com/trending?l=xBase\"\n  },\n  \"XC\": {\n    \"color\": \"#99DA07\",\n    \"url\": \"https://github.com/trending?l=XC\"\n  },\n  \"Xojo\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Xojo\"\n  },\n  \"XProc\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=XProc\"\n  },\n  \"XQuery\": {\n    \"color\": \"#5232e7\",\n    \"url\": \"https://github.com/trending?l=XQuery\"\n  },\n  \"XS\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=XS\"\n  },\n  \"XSLT\": {\n    \"color\": \"#EB8CEB\",\n    \"url\": \"https://github.com/trending?l=XSLT\"\n  },\n  \"Xtend\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Xtend\"\n  },\n  \"Yacc\": {\n    \"color\": \"#4B6C4B\",\n    \"url\": \"https://github.com/trending?l=Yacc\"\n  },\n  \"YAML\": {\n    \"color\": \"#cb171e\",\n    \"url\": \"https://github.com/trending?l=YAML\"\n  },\n  \"YARA\": {\n    \"color\": \"#220000\",\n    \"url\": \"https://github.com/trending?l=YARA\"\n  },\n  \"YASnippet\": {\n    \"color\": \"#32AB90\",\n    \"url\": \"https://github.com/trending?l=YASnippet\"\n  },\n  \"ZAP\": {\n    \"color\": \"#0d665e\",\n    \"url\": \"https://github.com/trending?l=ZAP\"\n  },\n  \"Zeek\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Zeek\"\n  },\n  \"ZenScript\": {\n    \"color\": \"#00BCD1\",\n    \"url\": \"https://github.com/trending?l=ZenScript\"\n  },\n  \"Zephir\": {\n    \"color\": \"#118f9e\",\n    \"url\": \"https://github.com/trending?l=Zephir\"\n  },\n  \"Zig\": {\n    \"color\": \"#ec915c\",\n    \"url\": \"https://github.com/trending?l=Zig\"\n  },\n  \"ZIL\": {\n    \"color\": \"#dc75e5\",\n    \"url\": \"https://github.com/trending?l=ZIL\"\n  },\n  \"Zimpl\": {\n    \"color\": null,\n    \"url\": \"https://github.com/trending?l=Zimpl\"\n  }\n}"
  },
  {
    "path": "miniprogram/utils/global.js",
    "content": "// 应用全局 app 属性及方法\n'use strict';\n\n// 获取应用实例\n( () => {\n  const app = getApp();\n\n  /**\n   * 主要用来提供两版显示\n   * 本地版本号大于服务端版本号代表未发布，简版显示应对审核\n   * 本地版本号小余等于服务端版本号代表已发布\n   */\n  const version = {\n    versionCode: 6,\n    versionName: '1.0.4'\n  };\n\n  let globalData = {\n    version,\n    userInfo: null,\n    setting: {},\n    config: {\n      hasPermission: true\n    }\n  }\n\n  Object.assign(app, {\n    globalData\n  })\n  \n})()"
  },
  {
    "path": "miniprogram/utils/request.js",
    "content": "export class RequestController {\n  /** @type {WechatMiniprogram.RequestTask} */\n  task;\n\n  constructor() {\n    return new Proxy(this, {\n      get(target, prop) {\n        if (Object.prototype.hasOwnProperty.call(target, prop)) {\n          return Reflect.get(target, prop);\n        } else {\n          return target.task[prop];\n        }\n      }\n    });\n  }\n}\n\n/**\n * @template T\n * @param {RequestOption<T>} config\n * @returns {Promise<RequestSuccessResult<T>}\n * @example\n *\n * ```\n * const controller = new RequestController();\n * request({\n *   ...config,\n *   controller\n * });\n * // 中断请求任务\n * controller.abort();\n * ```\n */\nexport const request = ({ baseURL, controller, ...config }) => {\n  return new Promise((resolve, reject) => {\n    const requestTask = wx.request(\n      /** @type {WechatMiniprogram.RequestOption<T>} */\n      ({\n        ...config,\n        url: `${baseURL || ''}${config.url}`,\n        success: (res) => {\n          res.ok = res.statusCode >= 200 && res.statusCode < 300;\n          resolve(res);\n        },\n        fail: (err) => reject(err),\n      })\n    );\n    if (controller) {\n      controller.task = requestTask;\n    }\n  });\n};\n"
  },
  {
    "path": "miniprogram/utils/storage.js",
    "content": "// 本地数据存储\n'use strict';\n\nconst { miniProgram } = wx.getAccountInfoSync();\n\n/**\n * @type {Record<WechatMiniprogram.MiniProgram['envVersion'], string>}\n */\nconst prefixes = {\n  develop: 'dev:',\n  trial: 't:',\n  release: ''\n};\nconst prefix = prefixes[miniProgram.envVersion];\n\n/**\n * \n * @param {string} key\n * @param {*} data\n */\nexport const set = (key, data) => {\n  wx.setStorageSync(`${prefix}${key}`, data);\n}\n\n/**\n * \n * @param {string} key \n * @returns \n */\nexport const get = (key) => {\n  return wx.getStorageSync(`${prefix}${key}`);\n}\n\n/**\n * 清空存储\n */\nexport function clear(callback) {\n  wx.clearStorageSync()\n  typeof callback == \"function\" && callback()\n}\n\nexport function getSetting(callback) {\n  wx.getStorage({\n    key: 'setting',\n    success: function(res) {\n      typeof callback == \"function\" && callback(res)\n    },\n  })\n}\n\nexport default {\n  set,\n  get,\n  clear,\n  getSetting\n}\n"
  },
  {
    "path": "miniprogram/utils/svg.js",
    "content": "/**\n * @param {string} xml\n */\nexport function getSVGUri(xml) {\n  return 'data:image/svg+xml;utf8,' +\n    xml.replace(/\\n/g, '').replace(/\\s+/, ' ')\n      .replace(/[#%<>{}]/g, (s) => encodeURIComponent(s))\n}\n"
  },
  {
    "path": "miniprogram/utils/util.js",
    "content": "export function formatTime (date) {\n  var year = date.getFullYear()\n  var month = date.getMonth() + 1\n  var day = date.getDate()\n\n  var hour = date.getHours()\n  var minute = date.getMinutes()\n  var second = date.getSeconds()\n\n\n  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')\n}\n\nfunction formatNumber(n) {\n  n = n.toString()\n  return n[1] ? n : '0' + n\n}\n\nexport const getPreDate = (days) => {\n  var time = Date.now();\n  var preTime = time - days * 24 * 60 * 60 * 1000;\n  var preDate = new Date(preTime);\n  var year = preDate.getFullYear();\n  var month = preDate.getMonth() + 1;\n  var day = preDate.getDate();\n  return [year, month, day].map(formatNumber).join('-');\n}\n\n/**\n * Object参数格式化\n * @param {Object} params 参数\n */\nexport const parseParams = params => {\n  let paramArr = [];\n  for (const key in params) {\n    paramArr.push(`${key}=${params[key]}`);\n  }\n  return paramArr.join('&');\n};\n\nexport function isEmpty (object) {\n  try {\n    for(let item of object) \n      return false;\n  } catch (e) {\n    return true;\n  }\n  return true\n}\n\n/**\n * 比较两个版本号\n * @param {string} v1\n * @param {string} v2\n * @returns {-1|0|1}\n * - -1：v1 < v2\n * - 0：v1 = v2\n * - 1：v1 > v2\n */\nexport const compareVersions = (v1, v2) => {\n  const v1nums = v1.split('.').map((n) => Number(n));\n  const v2nums = v2.split('.').map((n) => Number(n));\n  const [shorts, longs] = v1nums.length > v2nums.length ? [v2nums, v1nums] : [v1nums, v2nums];\n  for (const i in shorts) {\n    if (shorts[i] < longs[i]) {\n      return v1nums.length > v2nums.length ? 1 : -1;\n    }\n    if (shorts[i] > longs[i]) {\n      return v1nums.length > v2nums.length ? -1 : 1;\n    }\n  }\n  return 0;\n};\n\n/**\n * 数字加千位分隔符（,）\n * @param {number} num\n */\nexport const milliFormat = (num) => {\n  return num && num.toString()\n    .replace(/\\d+/, (s) => {\n      return s.replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n    });\n}\n"
  },
  {
    "path": "miniprogram/utils/utils.wxs",
    "content": "function milliFormat (num) {\n  return num && num.toString()\n    .replace(getRegExp('\\d+'), function (s) {\n      return s.replace(getRegExp('(\\d)(?=(\\d{3})+$)', 'g'), '$1,');\n    });\n}\n\nmodule.exports = {\n  milliFormat: milliFormat\n}\n"
  },
  {
    "path": "miniprogram/utils/wxCloud.js",
    "content": "\n// /**\n//  * wx.callFunction 的简单封装\n//  * @param {String} name 云函数名\n//  * @param {Object} data 传递参数\n//  * @param {object} [options] 其余配置项\n//  * @param {boolean} [options.loading] 是否显示加载提示框\n//  * @param {boolean} [options.showError] 是否显示错误提示框\n//  */\n/**\n * @type {CallCloud}\n */\nconst call = (name, data, options) => {\n    const defaultOptions = {\n        showError: true\n    };\n    options = Object.assign({}, defaultOptions, options);\n    const { loading, showError } = options;\n    if (loading) {\n        wx.showLoading({\n            title: 'loading...',\n        })\n    }\n    if (Object.prototype.toString.call(data) === '[object Object]') {\n        Object.keys(data).forEach((key) => {\n            const value = data[key];\n            if (!value && value !== 0 && value !== false) {\n                delete data[key];\n            }\n        });\n    }\n    \n    return wx.cloud.callFunction({\n        name,\n        data,\n    }).then(({ result, errMsg }) => {\n        if (loading) {\n            wx.hideLoading()\n        }\n        if (result) {\n            return result\n        } else {\n            return Promise.reject({\n                message: errMsg,\n            })\n        }\n    }).catch( err => {\n        console.error(`[wxCloud]: call function \"${name}\" occurred error`)\n        if (loading) {\n            wx.hideLoading()\n        }\n        if (showError) {\n            wx.showModal({\n                title: '异常',\n                content: err.message || '未知异常',\n            })\n        }\n        return Promise.reject(err)\n    })\n}\n\nexport const fetch = (options) => {\n    return call('fetch', options)\n}\n\nexport default call\n"
  },
  {
    "path": "mock/mock.config.json",
    "content": "{\"useApiMock\":true,\"apiMockConfig\":{\"globalOpen\":true,\"rules\":[{\"ruleId\":\"5543b6d1-6585-41f5-964e-cabe64d671a2\",\"ruleName\":\"豆瓣热门\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/subject_collection/movie_hot_gaia/items\",\"filterId\":\"f9547a21-c74f-4108-b783-74b53cb3f0b3\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 20,\\n    \\\"subject_collection\\\": {\\n        \\\"subject_type\\\": \\\"\\\",\\n        \\\"subtitle\\\": \\\"\\\",\\n        \\\"background_color_scheme\\\": {\\n            \\\"is_dark\\\": true,\\n            \\\"primary_color_light\\\": \\\"727272\\\",\\n            \\\"secondary_color\\\": \\\"f9f4f4\\\",\\n            \\\"primary_color_dark\\\": \\\"4c4c4c\\\"\\n        },\\n        \\\"sharing_title\\\": \\\"\\\",\\n        \\\"updated_at\\\": null,\\n        \\\"screenshot_title\\\": \\\"分享海报\\\",\\n        \\\"screenshot_url\\\": \\\"douban://partial.douban.com/screenshot/subject_collection/movie_hot_gaia/_content\\\",\\n        \\\"total\\\": 0,\\n        \\\"screenshot_type\\\": \\\"rexxar\\\",\\n        \\\"id\\\": \\\"movie_hot_gaia\\\",\\n        \\\"display\\\": {\\n            \\\"layout\\\": \\\"list\\\"\\n        },\\n        \\\"name\\\": \\\"豆瓣热门\\\",\\n        \\\"show_header_mask\\\": false,\\n        \\\"medium_name\\\": \\\"\\\",\\n        \\\"badge\\\": null,\\n        \\\"description\\\": \\\"\\\",\\n        \\\"short_name\\\": \\\"\\\",\\n        \\\"n_followers\\\": null,\\n        \\\"cover_url\\\": \\\"\\\",\\n        \\\"show_rank\\\": true,\\n        \\\"done_count\\\": 0,\\n        \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject_collection/movie_hot_gaia/\\\",\\n        \\\"subject_count\\\": 0,\\n        \\\"wechat_timeline_share\\\": \\\"url\\\",\\n        \\\"collect_count\\\": 0,\\n        \\\"url\\\": \\\"https://m.douban.com/app_topic/movie_hot_gaia\\\",\\n        \\\"uri\\\": \\\"douban://douban.com/subject_collection/movie_hot_gaia\\\",\\n        \\\"mini_program_page\\\": \\\"\\\",\\n        \\\"icon_fg_image\\\": \\\"\\\",\\n        \\\"more_description\\\": \\\"\\\",\\n        \\\"mini_program_name\\\": \\\"\\\",\\n        \\\"show_filter_playable\\\": true\\n    },\\n    \\\"subject_collection_items\\\": [\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 83179,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 9,\\n                \\\"star_count\\\": 4.5\\n            },\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2634360594.jpg\\\",\\n                \\\"width\\\": 2025,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 动作 科幻 奇幻 / 扎克·施奈德 / 本·阿弗莱克 亨利·卡维尔\\\",\\n            \\\"id\\\": \\\"35076714\\\",\\n            \\\"title\\\": \\\"扎克·施奈德版正义联盟\\\",\\n            \\\"comments\\\": [\\n                {\\n                    \\\"comment\\\": \\\"十年来影视作品中动作戏第一，没有之一。\\\\n文戏在漫改电影中超越《守望者》\\\\n事实证明，四年来的#RTSC运动是很成功的。-- 范电影🐷\\\",\\n                    \\\"rating\\\": {\\n                        \\\"count\\\": 1,\\n                        \\\"max\\\": 5,\\n                        \\\"star_count\\\": 5,\\n                        \\\"value\\\": 5\\n                    },\\n                    \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/movie/35076714/interest/2503007234\\\",\\n                    \\\"is_voted\\\": false,\\n                    \\\"uri\\\": \\\"douban://douban.com/movie/35076714/interest/2503007234\\\",\\n                    \\\"platforms\\\": [],\\n                    \\\"vote_count\\\": 3713,\\n                    \\\"create_time\\\": \\\"2021-03-18 12:21:45\\\",\\n                    \\\"status\\\": \\\"done\\\",\\n                    \\\"user\\\": {\\n                        \\\"loc\\\": null,\\n                        \\\"kind\\\": \\\"user\\\",\\n                        \\\"followed\\\": false,\\n                        \\\"name\\\": \\\"范电影🐷\\\",\\n                        \\\"in_blacklist\\\": false,\\n                        \\\"url\\\": \\\"https://www.douban.com/people/180357870/\\\",\\n                        \\\"gender\\\": \\\"M\\\",\\n                        \\\"reg_time\\\": \\\"2018-06-26 16:41:36\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/user/180357870\\\",\\n                        \\\"remark\\\": \\\"\\\",\\n                        \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up180357870-2.jpg\\\",\\n                        \\\"id\\\": \\\"180357870\\\",\\n                        \\\"type\\\": \\\"user\\\",\\n                        \\\"avatar_side_icon\\\": \\\"\\\",\\n                        \\\"uid\\\": \\\"ZackSnyder\\\"\\n                    },\\n                    \\\"recommend_reason\\\": \\\"\\\",\\n                    \\\"user_done_desc\\\": \\\"\\\",\\n                    \\\"id\\\": \\\"2503007234\\\",\\n                    \\\"wechat_timeline_share\\\": \\\"screenshot\\\"\\n                }\\n            ],\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"本·阿弗莱克\\\",\\n                \\\"亨利·卡维尔\\\",\\n                \\\"盖尔·加朵\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 动作 科幻 奇幻 / 扎克·施奈德 / 本·阿弗莱克 亨利·卡维尔\\\",\\n            \\\"rating_data\\\": {\\n                \\\"stats\\\": [\\n                    0.01045148604703925,\\n                    0.01514028586553732,\\n                    0.08317325871587386,\\n                    0.2551160856084096,\\n                    0.63611888376314\\n                ],\\n                \\\"type_ranks\\\": [\\n                    {\\n                        \\\"type\\\": \\\"科幻片\\\",\\n                        \\\"rank\\\": 0.98\\n                    },\\n                    {\\n                        \\\"type\\\": \\\"动作片\\\",\\n                        \\\"rank\\\": 0.99\\n                    }\\n                ]\\n            },\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35076714/\\\",\\n            \\\"release_date\\\": \\\"03.18\\\",\\n            \\\"original_title\\\": \\\"Zack Snyder's Justice League\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35076714\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"扎克·施奈德\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 60520,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.3,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 动画 奇幻 冒险 / 唐·霍尔 卡洛斯·洛佩斯·埃斯特拉达 保罗·布里格斯 约翰·瑞帕 / 凯莉·玛丽·陈 奥卡菲娜\\\",\\n            \\\"id\\\": \\\"34804147\\\",\\n            \\\"title\\\": \\\"寻龙传说\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"凯莉·玛丽·陈\\\",\\n                \\\"奥卡菲娜\\\",\\n                \\\"嘉玛·陈\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 动画 奇幻 冒险 / 唐·霍尔 / 凯莉·玛丽·陈 奥卡菲娜\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34804147/\\\",\\n            \\\"release_date\\\": \\\"03.05\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2633531206.jpg\\\",\\n                \\\"width\\\": 4950,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 6900\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34804147\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"唐·霍尔\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 318,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.6,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 剧情 / 罗宾·怀特 / 罗宾·怀特 德米安·比齐尔\\\",\\n            \\\"id\\\": \\\"33433405\\\",\\n            \\\"title\\\": \\\"大地\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"罗宾·怀特\\\",\\n                \\\"德米安·比齐尔\\\",\\n                \\\"莎拉·道恩·普莱奇\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 剧情 / 罗宾·怀特 / 罗宾·怀特 德米安·比齐尔\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/33433405/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2628845704.jpg\\\",\\n                \\\"width\\\": 1013,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1500\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/33433405\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"罗宾·怀特\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 346,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.2,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 / 惊悚 / Jon Stevenson / 威尔·惠顿 Brian Landis Folkins\\\",\\n            \\\"id\\\": \\\"35167535\\\",\\n            \\\"title\\\": \\\"租来的朋友\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"威尔·惠顿\\\",\\n                \\\"Brian Landis Folkins\\\",\\n                \\\"Amy Rutledge\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 惊悚 / Jon Stevenson / 威尔·惠顿 Brian Landis Folkins\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35167535/\\\",\\n            \\\"release_date\\\": \\\"09.11\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2616903233.jpg\\\",\\n                \\\"width\\\": 2000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35167535\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"Jon Stevenson\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 319,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.7,\\n                \\\"star_count\\\": 4.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 日本 / 剧情 家庭 / 中野量太 / 二宫和也 妻夫木聪\\\",\\n            \\\"id\\\": \\\"26958479\\\",\\n            \\\"title\\\": \\\"浅田家\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"二宫和也\\\",\\n                \\\"妻夫木聪\\\",\\n                \\\"黑木华\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"日本 / 剧情 家庭 / 中野量太 / 二宫和也 妻夫木聪\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26958479/\\\",\\n            \\\"release_date\\\": \\\"10.02\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2614188527.jpg\\\",\\n                \\\"width\\\": 1200,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1698\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26958479\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"中野量太\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 11325,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.6,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 日本 / 剧情 / 鹏飞 / 吴彦姝 英泽\\\",\\n            \\\"id\\\": \\\"30437716\\\",\\n            \\\"title\\\": \\\"又见奈良\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"吴彦姝\\\",\\n                \\\"英泽\\\",\\n                \\\"国村隼\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 日本 / 剧情 / 鹏飞 / 吴彦姝 英泽\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30437716/\\\",\\n            \\\"release_date\\\": \\\"03.19\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2634228191.jpg\\\",\\n                \\\"width\\\": 1364,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30437716\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"鹏飞\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 82726,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.3,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 德国 / 剧情 / 赵婷 / 弗兰西斯·麦克多蒙德 大卫·斯特雷泽恩\\\",\\n            \\\"id\\\": \\\"30458949\\\",\\n            \\\"title\\\": \\\"无依之地\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"弗兰西斯·麦克多蒙德\\\",\\n                \\\"大卫·斯特雷泽恩\\\",\\n                \\\"德里克·贾尼斯\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 德国 / 剧情 / 赵婷 / 弗兰西斯·麦克多蒙德 大卫·斯特雷泽恩\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30458949/\\\",\\n            \\\"release_date\\\": \\\"09.11\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2630453887.jpg\\\",\\n                \\\"width\\\": 2700,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30458949\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"赵婷\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 45966,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.9,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国台湾 / 剧情 喜剧 / 黄信尧 / 施名帅 郑人硕\\\",\\n            \\\"id\\\": \\\"34902639\\\",\\n            \\\"title\\\": \\\"同学麦娜丝\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"施名帅\\\",\\n                \\\"郑人硕\\\",\\n                \\\"纳豆\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国台湾 / 剧情 喜剧 / 黄信尧 / 施名帅 郑人硕\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34902639/\\\",\\n            \\\"release_date\\\": \\\"11.20\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2623673142.jpg\\\",\\n                \\\"width\\\": 992,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1418\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34902639\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"黄信尧\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 11119,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.5,\\n                \\\"star_count\\\": 4.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 俄罗斯 / 剧情 历史 / 安德烈·康查洛夫斯基 / 朱莉娅·维斯托斯卡亚 弗拉迪斯拉夫·科马罗夫\\\",\\n            \\\"id\\\": \\\"34960094\\\",\\n            \\\"title\\\": \\\"亲爱的同志\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"朱莉娅·维斯托斯卡亚\\\",\\n                \\\"弗拉迪斯拉夫·科马罗夫\\\",\\n                \\\"Andrey Gusev\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"俄罗斯 / 剧情 历史 / 安德烈·康查洛夫斯基 / 朱莉娅·维斯托斯卡亚 弗拉迪斯拉夫·科马罗夫\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34960094/\\\",\\n            \\\"release_date\\\": \\\"09.07\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2630627669.jpg\\\",\\n                \\\"width\\\": 2025,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34960094\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"安德烈·康查洛夫斯基\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 10266,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.3,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 / 剧情 爱情 同性 / 莫娜·法斯特欧德 / 凯瑟琳·沃特斯顿 凡妮莎·柯比\\\",\\n            \\\"id\\\": \\\"30454679\\\",\\n            \\\"title\\\": \\\"打开心世界\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"凯瑟琳·沃特斯顿\\\",\\n                \\\"凡妮莎·柯比\\\",\\n                \\\"克里斯托弗·阿波特\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 剧情 爱情 同性 / 莫娜·法斯特欧德 / 凯瑟琳·沃特斯顿 凡妮莎·柯比\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30454679/\\\",\\n            \\\"release_date\\\": \\\"09.06\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632936000.jpg\\\",\\n                \\\"width\\\": 1200,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1778\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30454679\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"莫娜·法斯特欧德\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 541670,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.5,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 剧情 / 韩延 / 易烊千玺 刘浩存\\\",\\n            \\\"id\\\": \\\"35096844\\\",\\n            \\\"title\\\": \\\"送你一朵小红花\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"易烊千玺\\\",\\n                \\\"刘浩存\\\",\\n                \\\"朱媛媛\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 韩延 / 易烊千玺 刘浩存\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35096844/\\\",\\n            \\\"release_date\\\": \\\"12.31\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2618247457.jpg\\\",\\n                \\\"width\\\": 3264,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4929\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35096844\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"韩延\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 34144,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国台湾 / 剧情 家庭 / 许承杰 / 陈淑芳 谢盈萱\\\",\\n            \\\"id\\\": \\\"34805873\\\",\\n            \\\"title\\\": \\\"孤味\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"陈淑芳\\\",\\n                \\\"谢盈萱\\\",\\n                \\\"徐若瑄\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国台湾 / 剧情 家庭 / 许承杰 / 陈淑芳 谢盈萱\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34805873/\\\",\\n            \\\"release_date\\\": \\\"11.06\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2623646280.jpg\\\",\\n                \\\"width\\\": 2067,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2953\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34805873\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"许承杰\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 80167,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.9,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 剧情 家庭 / 大鹏 / 王吉祥 大鹏\\\",\\n            \\\"id\\\": \\\"35068230\\\",\\n            \\\"title\\\": \\\"吉祥如意\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"王吉祥\\\",\\n                \\\"大鹏\\\",\\n                \\\"刘陆\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 家庭 / 大鹏 / 王吉祥 大鹏\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35068230/\\\",\\n            \\\"release_date\\\": \\\"01.29\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632185061.jpg\\\",\\n                \\\"width\\\": 6198,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 8685\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35068230\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"大鹏\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 46648,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 喜剧 / 宋小宝 / 宋小宝 马丽\\\",\\n            \\\"id\\\": \\\"27594653\\\",\\n            \\\"title\\\": \\\"发财日记\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"宋小宝\\\",\\n                \\\"马丽\\\",\\n                \\\"沙溢\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 喜剧 / 宋小宝 / 宋小宝 马丽\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/27594653/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632091530.jpg\\\",\\n                \\\"width\\\": 1656,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2500\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/27594653\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"宋小宝\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 29988,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 5.4,\\n                \\\"star_count\\\": 2.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 英国 美国 / 喜剧 动画 冒险 / 蒂姆·斯托瑞 / 科洛·莫瑞兹 迈克尔·佩纳\\\",\\n            \\\"id\\\": \\\"3439312\\\",\\n            \\\"title\\\": \\\"猫和老鼠\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"科洛·莫瑞兹\\\",\\n                \\\"迈克尔·佩纳\\\",\\n                \\\"郑肯\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"英国 美国 / 喜剧 动画 冒险 / 蒂姆·斯托瑞 / 科洛·莫瑞兹 迈克尔·佩纳\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/3439312/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632043260.jpg\\\",\\n                \\\"width\\\": 4000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 5823\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/3439312\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"蒂姆·斯托瑞\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 187816,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.3,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 英国 西班牙 / 动作 奇幻 冒险 / 派蒂·杰金斯 / 盖尔·加朵 克里斯·派恩\\\",\\n            \\\"id\\\": \\\"27073752\\\",\\n            \\\"title\\\": \\\"神奇女侠1984\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"盖尔·加朵\\\",\\n                \\\"克里斯·派恩\\\",\\n                \\\"克里斯汀·韦格\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 英国 西班牙 / 动作 奇幻 冒险 / 派蒂·杰金斯 / 盖尔·加朵 克里斯·派恩\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/27073752/\\\",\\n            \\\"release_date\\\": \\\"12.18\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2626959989.jpg\\\",\\n                \\\"width\\\": 2764,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4096\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/27073752\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"派蒂·杰金斯\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 140080,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 中国台湾 / 科幻 犯罪 悬疑 / 程伟豪 / 张震 张钧甯\\\",\\n            \\\"id\\\": \\\"34962956\\\",\\n            \\\"title\\\": \\\"缉魂\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"张震\\\",\\n                \\\"张钧甯\\\",\\n                \\\"孙安可\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 中国台湾 / 科幻 犯罪 悬疑 / 程伟豪 / 张震 张钧甯\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34962956/\\\",\\n            \\\"release_date\\\": \\\"01.15\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2629413230.jpg\\\",\\n                \\\"width\\\": 2622,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3721\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34962956\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"程伟豪\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1549,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.6,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 剧情 犯罪 / 安东尼·罗素 乔·罗素 / 汤姆·赫兰德 席亚拉·博拉沃\\\",\\n            \\\"id\\\": \\\"30310219\\\",\\n            \\\"title\\\": \\\"谢里\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"汤姆·赫兰德\\\",\\n                \\\"席亚拉·博拉沃\\\",\\n                \\\"杰克·莱诺\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 剧情 犯罪 / 安东尼·罗素 / 汤姆·赫兰德 席亚拉·博拉沃\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30310219/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2630607784.jpg\\\",\\n                \\\"width\\\": 2000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30310219\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"安东尼·罗素\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 2893,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.6,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 剧情 喜剧 / 艾米·波勒 / 哈德莉·罗宾逊 艾米·波勒\\\",\\n            \\\"id\\\": \\\"30465068\\\",\\n            \\\"title\\\": \\\"女生要革命\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"哈德莉·罗宾逊\\\",\\n                \\\"艾米·波勒\\\",\\n                \\\"劳伦·蔡\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 剧情 喜剧 / 艾米·波勒 / 哈德莉·罗宾逊 艾米·波勒\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30465068/\\\",\\n            \\\"release_date\\\": \\\"03.03\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2632592932.jpg\\\",\\n                \\\"width\\\": 1500,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2222\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30465068\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"艾米·波勒\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 54703,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.6,\\n                \\\"star_count\\\": 4.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 英国 印度 / 剧情 历史 / 艾伦·索金 / 埃迪·雷德梅恩 艾利克斯·夏普\\\",\\n            \\\"id\\\": \\\"2609258\\\",\\n            \\\"title\\\": \\\"芝加哥七君子审判\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"埃迪·雷德梅恩\\\",\\n                \\\"艾利克斯·夏普\\\",\\n                \\\"萨莎·拜伦·科恩\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 英国 印度 / 剧情 历史 / 艾伦·索金 / 埃迪·雷德梅恩 艾利克斯·夏普\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/2609258/\\\",\\n            \\\"release_date\\\": \\\"09.25\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2620161520.jpg\\\",\\n                \\\"width\\\": 1500,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2222\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/2609258\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"艾伦·索金\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        }\\n    ],\\n    \\\"total\\\": 325,\\n    \\\"start\\\": 0\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"6942d3bd-e497-4cdd-ad9e-1e6508c97101\",\"ruleName\":\"即将上映\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/subject_collection/movie_soon/items\",\"filterId\":\"1514712e-fad3-403d-bad9-670a3364c268\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 20,\\n    \\\"subject_collection\\\": {\\n        \\\"subject_type\\\": \\\"\\\",\\n        \\\"subtitle\\\": \\\"\\\",\\n        \\\"background_color_scheme\\\": {\\n            \\\"is_dark\\\": true,\\n            \\\"primary_color_light\\\": \\\"1886a5\\\",\\n            \\\"secondary_color\\\": \\\"f4f8f9\\\",\\n            \\\"primary_color_dark\\\": \\\"13677f\\\"\\n        },\\n        \\\"sharing_title\\\": \\\"\\\",\\n        \\\"updated_at\\\": null,\\n        \\\"screenshot_title\\\": \\\"分享海报\\\",\\n        \\\"screenshot_url\\\": \\\"douban://partial.douban.com/screenshot/subject_collection/movie_soon/_content\\\",\\n        \\\"total\\\": 0,\\n        \\\"screenshot_type\\\": \\\"rexxar\\\",\\n        \\\"id\\\": \\\"movie_soon\\\",\\n        \\\"name\\\": \\\"院线即将上映\\\",\\n        \\\"show_header_mask\\\": false,\\n        \\\"medium_name\\\": \\\"\\\",\\n        \\\"badge\\\": null,\\n        \\\"description\\\": \\\"\\\",\\n        \\\"short_name\\\": \\\"即将上映\\\",\\n        \\\"n_followers\\\": null,\\n        \\\"cover_url\\\": \\\"\\\",\\n        \\\"show_rank\\\": true,\\n        \\\"done_count\\\": 0,\\n        \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject_collection/movie_soon/\\\",\\n        \\\"subject_count\\\": 0,\\n        \\\"wechat_timeline_share\\\": \\\"url\\\",\\n        \\\"collect_count\\\": 0,\\n        \\\"url\\\": \\\"https://m.douban.com/app_topic/movie_soon\\\",\\n        \\\"uri\\\": \\\"douban://douban.com/subject_collection/movie_soon\\\",\\n        \\\"mini_program_page\\\": \\\"\\\",\\n        \\\"icon_fg_image\\\": \\\"\\\",\\n        \\\"more_description\\\": \\\"\\\",\\n        \\\"mini_program_name\\\": \\\"\\\",\\n        \\\"display\\\": {\\n            \\\"layout\\\": \\\"list\\\"\\n        }\\n    },\\n    \\\"subject_collection_items\\\": [\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2631665376.jpg\\\",\\n                \\\"width\\\": 2500,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3729\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 / 郭凯敏 / 郭凯敏 梁丽\\\",\\n            \\\"id\\\": \\\"30188047\\\",\\n            \\\"title\\\": \\\"扶贫主任\\\",\\n            \\\"wish_count\\\": 363,\\n            \\\"comments\\\": [\\n                {\\n                    \\\"comment\\\": \\\"主旋律电影你拍个95分钟还上院线到底是什么心态啊？不如拍成24集连续剧放cctv8给我奶奶看吧真的-- 徐普通\\\",\\n                    \\\"rating\\\": null,\\n                    \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/movie/30188047/interest/2725917170\\\",\\n                    \\\"is_voted\\\": false,\\n                    \\\"uri\\\": \\\"douban://douban.com/movie/30188047/interest/2725917170\\\",\\n                    \\\"platforms\\\": [],\\n                    \\\"vote_count\\\": 31,\\n                    \\\"create_time\\\": \\\"2021-02-06 00:05:11\\\",\\n                    \\\"status\\\": \\\"done\\\",\\n                    \\\"user\\\": {\\n                        \\\"loc\\\": {\\n                            \\\"id\\\": \\\"108288\\\",\\n                            \\\"name\\\": \\\"北京\\\",\\n                            \\\"uid\\\": \\\"beijing\\\"\\n                        },\\n                        \\\"kind\\\": \\\"user\\\",\\n                        \\\"followed\\\": false,\\n                        \\\"name\\\": \\\"徐普通\\\",\\n                        \\\"in_blacklist\\\": false,\\n                        \\\"url\\\": \\\"https://www.douban.com/people/180979531/\\\",\\n                        \\\"gender\\\": \\\"M\\\",\\n                        \\\"reg_time\\\": \\\"2018-07-10 19:25:53\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/user/180979531\\\",\\n                        \\\"remark\\\": \\\"\\\",\\n                        \\\"avatar\\\": \\\"https://img9.doubanio.com/icon/up180979531-5.jpg\\\",\\n                        \\\"id\\\": \\\"180979531\\\",\\n                        \\\"type\\\": \\\"user\\\",\\n                        \\\"avatar_side_icon\\\": \\\"\\\",\\n                        \\\"uid\\\": \\\"180979531\\\"\\n                    },\\n                    \\\"recommend_reason\\\": \\\"\\\",\\n                    \\\"user_done_desc\\\": \\\"\\\",\\n                    \\\"id\\\": \\\"2725917170\\\",\\n                    \\\"wechat_timeline_share\\\": \\\"screenshot\\\"\\n                }\\n            ],\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"郭凯敏\\\",\\n                \\\"梁丽\\\",\\n                \\\"章格琳\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"02月23日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 郭凯敏 / 郭凯敏 梁丽\\\",\\n            \\\"rating_data\\\": {\\n                \\\"stats\\\": [],\\n                \\\"type_ranks\\\": []\\n            },\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30188047/\\\",\\n            \\\"release_date\\\": \\\"02.23\\\",\\n            \\\"original_title\\\": \\\"\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30188047\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"郭凯敏\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 美国 / 喜剧 动画 冒险 / 蒂姆·斯托瑞 / 科洛·莫瑞兹 迈克尔·佩纳\\\",\\n            \\\"id\\\": \\\"3439312\\\",\\n            \\\"title\\\": \\\"猫和老鼠\\\",\\n            \\\"wish_count\\\": 19989,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"科洛·莫瑞兹\\\",\\n                \\\"迈克尔·佩纳\\\",\\n                \\\"郑肯\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"02月26日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 喜剧 动画 冒险 / 蒂姆·斯托瑞 / 科洛·莫瑞兹 迈克尔·佩纳\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/3439312/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632043260.jpg\\\",\\n                \\\"width\\\": 4000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 5823\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/3439312\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"蒂姆·斯托瑞\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 2782,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.4,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2018\\\",\\n            \\\"card_subtitle\\\": \\\"2018 / 中国大陆 / 剧情 / 仇晟 / 李淳 黄璐\\\",\\n            \\\"id\\\": \\\"26935281\\\",\\n            \\\"title\\\": \\\"郊区的鸟\\\",\\n            \\\"wish_count\\\": 10170,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李淳\\\",\\n                \\\"黄璐\\\",\\n                \\\"龚子涵\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"02月26日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 仇晟 / 李淳 黄璐\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26935281/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2631489608.jpg\\\",\\n                \\\"width\\\": 4488,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 6260\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26935281\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"仇晟\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 402,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.1,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2019\\\",\\n            \\\"card_subtitle\\\": \\\"2019 / 意大利 / 喜剧 / 瑞卡多·米拉尼 / 宝拉·柯特莱西 Stefano Fresi\\\",\\n            \\\"id\\\": \\\"33413559\\\",\\n            \\\"title\\\": \\\"特工妈咪\\\",\\n            \\\"wish_count\\\": 416,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"宝拉·柯特莱西\\\",\\n                \\\"Stefano Fresi\\\",\\n                \\\"托马斯·阿拉纳\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"02月26日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"意大利 / 喜剧 / 瑞卡多·米拉尼 / 宝拉·柯特莱西 Stefano Fresi\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/33413559/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2632599833.jpg\\\",\\n                \\\"width\\\": 3307,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4724\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/33413559\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"瑞卡多·米拉尼\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 / 宁敬武 / 李东学 宋佳伦\\\",\\n            \\\"id\\\": \\\"34927951\\\",\\n            \\\"title\\\": \\\"千顷澄碧的时代\\\",\\n            \\\"wish_count\\\": 317,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李东学\\\",\\n                \\\"宋佳伦\\\",\\n                \\\"苏丽\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"02月26日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 宁敬武 / 李东学 宋佳伦\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34927951/\\\",\\n            \\\"release_date\\\": \\\"02.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2632259526.jpg\\\",\\n                \\\"width\\\": 4702,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 8315\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34927951\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"宁敬武\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2019\\\",\\n            \\\"card_subtitle\\\": \\\"2019 / 中国大陆 / 剧情 喜剧 家庭 / 陈建斌 / 陈建斌 周迅\\\",\\n            \\\"id\\\": \\\"30279836\\\",\\n            \\\"title\\\": \\\"第十一回\\\",\\n            \\\"wish_count\\\": 20333,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"陈建斌\\\",\\n                \\\"周迅\\\",\\n                \\\"大鹏\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月05日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 喜剧 家庭 / 陈建斌 / 陈建斌 周迅\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30279836/\\\",\\n            \\\"release_date\\\": \\\"03.05\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2631634707.jpg\\\",\\n                \\\"width\\\": 2906,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4068\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30279836\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"陈建斌\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"暂无评分\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 悬疑 惊悚 / 马建军 / 尹亚森 曾晨\\\",\\n            \\\"id\\\": \\\"34926613\\\",\\n            \\\"title\\\": \\\"错爱迷踪\\\",\\n            \\\"wish_count\\\": 67,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"尹亚森\\\",\\n                \\\"曾晨\\\",\\n                \\\"马翼\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月05日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 悬疑 惊悚 / 马建军 / 尹亚森 曾晨\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34926613/\\\",\\n            \\\"release_date\\\": \\\"03.05\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2631660672.jpg\\\",\\n                \\\"width\\\": 4429,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 6201\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34926613\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"马建军\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 历史 战争 / 六小浩 / 张林 陈思莹\\\",\\n            \\\"id\\\": \\\"35332838\\\",\\n            \\\"title\\\": \\\"破晓徂徕山\\\",\\n            \\\"wish_count\\\": 46,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"张林\\\",\\n                \\\"陈思莹\\\",\\n                \\\"周思宇\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月09日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 历史 战争 / 六小浩 / 张林 陈思莹\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35332838/\\\",\\n            \\\"release_date\\\": \\\"03.09\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2631706834.jpg\\\",\\n                \\\"width\\\": 1969,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2756\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35332838\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"六小浩\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2019\\\",\\n            \\\"card_subtitle\\\": \\\"2019 / 中国大陆 / 喜剧 爱情 / 黄雷 / 李治廷 张榕容\\\",\\n            \\\"id\\\": \\\"30174652\\\",\\n            \\\"title\\\": \\\"合法伴侣\\\",\\n            \\\"wish_count\\\": 4891,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李治廷\\\",\\n                \\\"张榕容\\\",\\n                \\\"白客\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月12日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 爱情 / 黄雷 / 李治廷 张榕容\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30174652/\\\",\\n            \\\"release_date\\\": \\\"03.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2632416473.jpg\\\",\\n                \\\"width\\\": 5500,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 8338\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30174652\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"黄雷\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"暂无评分\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 / 房祖名 / 陈柏霖 郭采洁\\\",\\n            \\\"id\\\": \\\"27067713\\\",\\n            \\\"title\\\": \\\"北京爱情图鉴\\\",\\n            \\\"wish_count\\\": 1736,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"陈柏霖\\\",\\n                \\\"郭采洁\\\",\\n                \\\"夏侯云姗\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月12日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 房祖名 / 陈柏霖 郭采洁\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/27067713/\\\",\\n            \\\"release_date\\\": \\\"03.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2629057017.jpg\\\",\\n                \\\"width\\\": 1428,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/27067713\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"房祖名\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动作 奇幻 冒险 / 刘炜 / 李晔 王晓彤\\\",\\n            \\\"id\\\": \\\"35356779\\\",\\n            \\\"title\\\": \\\"三只小猪3正义大联萌\\\",\\n            \\\"wish_count\\\": 30,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李晔\\\",\\n                \\\"王晓彤\\\",\\n                \\\"洪海天\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月13日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 动作 奇幻 冒险 / 刘炜 / 李晔 王晓彤\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35356779/\\\",\\n            \\\"release_date\\\": \\\"03.13\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2632449758.jpg\\\",\\n                \\\"width\\\": 1679,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2382\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35356779\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"刘炜\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 576,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.7,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 日本 / 剧情 / 鹏飞 / 吴彦姝 英泽\\\",\\n            \\\"id\\\": \\\"30437716\\\",\\n            \\\"title\\\": \\\"又见奈良\\\",\\n            \\\"wish_count\\\": 10010,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"吴彦姝\\\",\\n                \\\"英泽\\\",\\n                \\\"国村隼\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月19日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 日本 / 剧情 / 鹏飞 / 吴彦姝 英泽\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30437716/\\\",\\n            \\\"release_date\\\": \\\"03.19\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632128061.jpg\\\",\\n                \\\"width\\\": 2046,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30437716\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"鹏飞\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 / 张文 / 杜帅 张文\\\",\\n            \\\"id\\\": \\\"35352612\\\",\\n            \\\"title\\\": \\\"一些往事\\\",\\n            \\\"wish_count\\\": 32,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"杜帅\\\",\\n                \\\"张文\\\",\\n                \\\"王立功\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月19日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 张文 / 杜帅 张文\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35352612/\\\",\\n            \\\"release_date\\\": \\\"03.19\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2632107564.jpg\\\",\\n                \\\"width\\\": 2400,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3360\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35352612\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"张文\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 爱情 / 孙金宝 靳滨林 / 李嘉明 安奕安\\\",\\n            \\\"id\\\": \\\"35351889\\\",\\n            \\\"title\\\": \\\"双水村里枣花香\\\",\\n            \\\"wish_count\\\": 25,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李嘉明\\\",\\n                \\\"安奕安\\\",\\n                \\\"吕一丁\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"03月26日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 爱情 / 孙金宝 / 李嘉明 安奕安\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35351889/\\\",\\n            \\\"release_date\\\": \\\"03.26\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2632093816.jpg\\\",\\n                \\\"width\\\": 1500,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2250\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35351889\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"孙金宝\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 喜剧 爱情 / 刘奋斗 / 廖凡 佟丽娅\\\",\\n            \\\"id\\\": \\\"34670706\\\",\\n            \\\"title\\\": \\\"来都来了\\\",\\n            \\\"wish_count\\\": 3539,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"廖凡\\\",\\n                \\\"佟丽娅\\\",\\n                \\\"范伟\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"04月01日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 喜剧 爱情 / 刘奋斗 / 廖凡 佟丽娅\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34670706/\\\",\\n            \\\"release_date\\\": \\\"04.01\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2629479927.jpg\\\",\\n                \\\"width\\\": 3000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4427\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34670706\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"刘奋斗\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 剧情 / 殷若昕 / 张子枫 肖央\\\",\\n            \\\"id\\\": \\\"35158160\\\",\\n            \\\"title\\\": \\\"我的姐姐\\\",\\n            \\\"wish_count\\\": 10682,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"张子枫\\\",\\n                \\\"肖央\\\",\\n                \\\"朱媛媛\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"04月02日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 殷若昕 / 张子枫 肖央\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35158160/\\\",\\n            \\\"release_date\\\": \\\"04.02\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2630463690.jpg\\\",\\n                \\\"width\\\": 5000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 7478\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35158160\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"殷若昕\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动画 奇幻 冒险 / 思明\\\",\\n            \\\"id\\\": \\\"35154209\\\",\\n            \\\"title\\\": \\\"小美人鱼的奇幻冒险\\\",\\n            \\\"wish_count\\\": 2776,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"04月03日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 动画 奇幻 冒险 / 思明 / \\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35154209/\\\",\\n            \\\"release_date\\\": \\\"04.03\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2631717141.jpg\\\",\\n                \\\"width\\\": 2022,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35154209\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"思明\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 喜剧 动画 冒险 / 丁远大 朱国洋 / 李慧娴 四喜\\\",\\n            \\\"id\\\": \\\"26271902\\\",\\n            \\\"title\\\": \\\"恐龙飞车\\\",\\n            \\\"wish_count\\\": 105,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李慧娴\\\",\\n                \\\"四喜\\\",\\n                \\\"叶佳林\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"04月03日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 动画 冒险 / 丁远大 / 李慧娴 四喜\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26271902/\\\",\\n            \\\"release_date\\\": \\\"04.03\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2625046703.jpg\\\",\\n                \\\"width\\\": 2103,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26271902\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"丁远大\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 喜剧 动画 冒险 / 张天玥\\\",\\n            \\\"id\\\": \\\"34458727\\\",\\n            \\\"title\\\": \\\"奇异世界历险记\\\",\\n            \\\"wish_count\\\": 26,\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"most_recent_release_date\\\": \\\"04月03日\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 动画 冒险 / 张天玥 / \\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34458727/\\\",\\n            \\\"release_date\\\": \\\"04.03\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632089700.jpg\\\",\\n                \\\"width\\\": 1400,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34458727\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"张天玥\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        }\\n    ],\\n    \\\"total\\\": 19,\\n    \\\"start\\\": 0\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"79b601d3-6a66-4856-b62b-3379cf9cd309\",\"ruleName\":\"我的在看\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/user/[0-9]+/interests\",\"filterId\":\"6c7bdd0d-fe02-4cf4-98e8-387aff7d5b99\",\"matchType\":\"regExp\"},{\"propName\":\"url\",\"propRegString\":\"status=doing\",\"filterId\":\"0807f080-5c3e-4693-af19-bb68d7d32c75\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 20,\\n    \\\"start\\\": 0,\\n    \\\"total\\\": 409,\\n    \\\"interests\\\": [\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/34930862/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/34930862/interest/2641791302\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-03-03 07:35:21\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2641791302,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 56648,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 8.7\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-12-11(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2627027305.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2627027305.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/EC4Q5SGKQ?type=rank&category=movie&rank_type=year\\\",\\n                        \\\"rank\\\": 5,\\n                        \\\"title\\\": \\\"2020评分最高纪录片\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 纪录片 运动 / 许慧晶 / 马虎 梁正双\\\",\\n                \\\"id\\\": \\\"34930862\\\",\\n                \\\"genres\\\": [\\n                    \\\"纪录片\\\",\\n                    \\\"运动\\\"\\n                ],\\n                \\\"title\\\": \\\"棒！少年\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"马虎\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"梁正双\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"张锦新\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"孙岭峰\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"郭忠健\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a56437\\\",\\n                    \\\"_base_color\\\": [\\n                        0.06775067750677506,\\n                        0.6648648648648648,\\n                        0.7254901960784313\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.06574923547400613,\\n                        0.5891891891891892,\\n                        0.7254901960784313\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f4d2a\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2627027305.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/34930862/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/34930862/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/34930862\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"许慧晶\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/24750460/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/24750460/interest/2773052102\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-03-03 05:37:36\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2773052102,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 50453,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3,\\n                    \\\"value\\\": 5.8\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-11-09(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2623581295.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2623581295.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2019\\\",\\n                \\\"card_subtitle\\\": \\\"2019 / 美国 / 动作 奇幻 冒险 / 尼尔·马歇尔 / 大卫·哈伯 米拉·乔沃维奇\\\",\\n                \\\"id\\\": \\\"24750460\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"奇幻\\\",\\n                    \\\"冒险\\\"\\n                ],\\n                \\\"title\\\": \\\"地狱男爵：血皇后崛起\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"大卫·哈伯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米拉·乔沃维奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"金大贤\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊恩·麦柯肖恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿利斯泰·皮垂\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"萨莎·莱恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"托马斯·哈登·丘奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"佩内洛普·米契尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"苏菲·奥康内多\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布莱恩·格里森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯蒂娜·克莱伯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿什丽·艾德纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"道格拉斯·泰特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贝恩·科拉科\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿塔纳斯·斯雷布雷夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凡妮莎·艾科尔兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莱拉·莫尔斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a56c1f\\\",\\n                    \\\"_base_color\\\": [\\n                        0.0961199294532628,\\n                        0.8111587982832619,\\n                        0.9137254901960784\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.0803921568627451,\\n                        0.6538461538461537,\\n                        0.5098039215686274\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f5318\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2623581295.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/24750460/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/24750460/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/24750460\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"尼尔·马歇尔\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/24815502/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/24815502/interest/2685451150\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-02-13 09:23:29\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2685451150,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 6454,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4,\\n                    \\\"value\\\": 7.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2013-11-07(德国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2182749627.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2182749627.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2013\\\",\\n                \\\"card_subtitle\\\": \\\"2013 / 德国 / 喜剧 爱情 / 博拉·达格特肯 / 埃利亚斯·穆巴里克 卡洛琳·赫弗斯\\\",\\n                \\\"id\\\": \\\"24815502\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"爱情\\\"\\n                ],\\n                \\\"title\\\": \\\"该死的歌德\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"埃利亚斯·穆巴里克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡洛琳·赫弗斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡蒂娅·里曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"雅娜·帕拉斯克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾瓦拉·胡弗茨\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰拉·哈斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马克斯·冯·德·格罗本\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莱娜·克棱克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉泽姆·埃姆雷\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿拉姆·阿拉米\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"鲁娜·格雷纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"瓦伦蒂娜·帕德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗宾·赖歇尔特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔纳斯·霍登里德尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"厄达尔·伊迪兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"尤斯奇·格拉斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贝恩德·斯特格曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"法里德·邦\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"72543c\\\",\\n                    \\\"_base_color\\\": [\\n                        0.0744336569579288,\\n                        0.4703196347031963,\\n                        0.8588235294117647\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0,\\n                        0.009900990099009866,\\n                        0.396078431372549\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3828\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2182749627.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/24815502/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/24815502/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/24815502\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"博拉·达格特肯\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/27007175/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/27007175/interest/2717849022\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-02-10 13:47:28\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2717849022,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 1928,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3,\\n                    \\\"value\\\": 6.1\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2017-01-21(斯兰丹斯电影节)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2463043120.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2463043120.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc/pics/vendors/bilibili.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2017\\\",\\n                \\\"card_subtitle\\\": \\\"2017 / 美国 / 喜剧 惊悚 冒险 / 比尔·沃特森 / 尼克·图恩 梅拉·罗希特·库姆巴尼\\\",\\n                \\\"id\\\": \\\"27007175\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"惊悚\\\",\\n                    \\\"冒险\\\"\\n                ],\\n                \\\"title\\\": \\\"戴夫造了个迷宫\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"尼克·图恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"梅拉·罗希特·库姆巴尼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"亚当·布斯奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"詹姆斯·乌尔班尼亚克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"弗兰克·凯提\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯科特·纳维\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯蒂芬妮·阿琳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克斯汀·范奈丝\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯科特·克林斯基\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"蒂莫西·诺德温德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·赫宁甘\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"瑞克·欧弗顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡米拉·艾尔内斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"德鲁·尼加\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾蒂安·埃克特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布里特妮·多伊奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰西卡·格拉夫斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"725a30\\\",\\n                    \\\"_base_color\\\": [\\n                        0.10519125683060108,\\n                        0.5754716981132075,\\n                        0.8313725490196079\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f8f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.2626262626262627,\\n                        0.358695652173913,\\n                        0.3607843137254902\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3c20\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2463043120.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/27007175/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/27007175/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/27007175\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"比尔·沃特森\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/30262334/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/30262334/interest/2717685123\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-31 15:06:04\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2717685123,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 2183,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3,\\n                    \\\"value\\\": 6.4\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2019-10-26(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2572182952.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2572182952.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2018\\\",\\n                \\\"card_subtitle\\\": \\\"2018 / 德国 卢森堡 丹麦 / 喜剧 科幻 动画 / 克里斯托弗·劳恩斯坦 沃尔夫冈·劳恩斯坦 肖恩·麦克科马克 / 卡勒姆·马洛尼 德莫特·莫根尼斯\\\",\\n                \\\"id\\\": \\\"30262334\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"科幻\\\",\\n                    \\\"动画\\\"\\n                ],\\n                \\\"title\\\": \\\"三傻闹地球\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"卡勒姆·马洛尼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"德莫特·莫根尼斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"保罗·泰来克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾琳·米森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"苏茜·鲍尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"玛丽·默里\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"威尔·福特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莉·汤普森\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"438aa5\\\",\\n                    \\\"_base_color\\\": [\\n                        0.5456140350877193,\\n                        0.5900621118012421,\\n                        0.6313725490196078\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f8f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.47126436781609193,\\n                        0.19333333333333338,\\n                        0.5882352941176471\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"346a7f\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2572182952.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/30262334/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/30262334/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/30262334\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"克里斯托弗·劳恩斯坦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"沃尔夫冈·劳恩斯坦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·麦克科马克\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 5,\\n                \\\"value\\\": 5\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★★ https://movie.douban.com/subject/6729121/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/6729121/interest/2687058107\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-11 13:53:28\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2687058107,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 57737,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 5,\\n                    \\\"value\\\": 9.5\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2011-09-21(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1178503927.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1178503927.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2011\\\",\\n                \\\"card_subtitle\\\": \\\"2011 / 美国 / 喜剧 家庭 / 杰森·维纳 / 艾德·奥尼尔 索菲娅·维加拉\\\",\\n                \\\"id\\\": \\\"6729121\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"家庭\\\"\\n                ],\\n                \\\"title\\\": \\\"摩登家庭  第三季\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"艾德·奥尼尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"索菲娅·维加拉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朱丽·鲍温\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"泰·布利尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰西·泰勒·弗格森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾瑞克·斯通斯崔特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"里德·尤因\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"萨拉·海蓝德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿芮尔·温特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"诺兰·古德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"里克·罗德里格兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥布里·安德森-埃蒙斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": false,\\n                    \\\"primary_color_light\\\": \\\"f2f0f0\\\",\\n                    \\\"_base_color\\\": [\\n                        0,\\n                        0.008403361344537785,\\n                        0.9333333333333333\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f4f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.033333333333333326,\\n                        0.021276595744680778,\\n                        0.9215686274509803\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"f2f0f0\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1178503927.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/6729121/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/6729121/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/6729121\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"杰森·维纳\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/24733428/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/24733428/interest/2674751702\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-03 21:05:15\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2674751702,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 620258,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 8.8\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-12-25(中国大陆/美国网络)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2626308994.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2626308994.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/ECPE465QY?type=rank&category=movie&rank_type=film_genre\\\",\\n                        \\\"rank\\\": 8,\\n                        \\\"title\\\": \\\"近期热门电影榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 美国 / 动画 奇幻 音乐 / 彼特·道格特 凯普·鲍尔斯 / 杰米·福克斯 蒂娜·菲\\\",\\n                \\\"id\\\": \\\"24733428\\\",\\n                \\\"genres\\\": [\\n                    \\\"动画\\\",\\n                    \\\"奇幻\\\",\\n                    \\\"音乐\\\"\\n                ],\\n                \\\"title\\\": \\\"心灵奇旅\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"杰米·福克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"蒂娜·菲\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"菲利西亚·拉斯海德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿米尔-卡利布·汤普森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"戴维德·迪格斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"格拉汉姆·诺顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"瑞切尔·豪斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾莉丝·布拉加\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"理查德·艾欧阿德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"唐尼尔·罗林斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安吉拉·贝塞特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马戈·霍尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗德莎·琼斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"韦斯·斯塔迪\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"沙基纳·贾弗里\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"福琼·费姆斯特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡鲁姆·格兰特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"泽诺比娅·谢罗夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朱恩·斯奎布\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯茜·卡瓦蒂妮\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗纳尔多·德尔·卡门\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Elisapie Isaac\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰森·佩斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"科拉·尚波米耶\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"4a75a5\\\",\\n                    \\\"_base_color\\\": [\\n                        0.5873983739837398,\\n                        0.5503355704697986,\\n                        0.5843137254901961\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f7f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.07894736842105253,\\n                        0.0964467005076143,\\n                        0.7725490196078432\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"395a7f\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2626308994.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/24733428/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/24733428/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/24733428\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"彼特·道格特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯普·鲍尔斯\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/34858078/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/34858078/interest/2651195631\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-03 14:27:57\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2651195631,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 85795,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4,\\n                    \\\"value\\\": 7.8\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-12-18(韩国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2628425414.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2628425414.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/ECBE5CBEI?type=rank&category=movie&rank_type=tv_genre\\\",\\n                        \\\"rank\\\": 7,\\n                        \\\"title\\\": \\\"近期热门韩剧榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 韩国 / 剧情 惊悚 恐怖 / 李应福 / 宋康 李是英\\\",\\n                \\\"id\\\": \\\"34858078\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"惊悚\\\",\\n                    \\\"恐怖\\\"\\n                ],\\n                \\\"title\\\": \\\"甜蜜家园\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"宋康\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李是英\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李到晛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李阵郁\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朴珪瑛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"高旻示\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"金南熙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"高允贞\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"金甲洙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"金相浩\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"517267\\\",\\n                    \\\"_base_color\\\": [\\n                        0.4444444444444444,\\n                        0.2903225806451613,\\n                        0.12156862745098039\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f9f8\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.11111111111111109,\\n                        0.24590163934426235,\\n                        0.23921568627450981\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"364c45\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2628425414.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/34858078/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/34858078/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/34858078\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"李应福\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/35207868/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/35207868/interest/2673989075\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-03 14:27:35\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2673989075,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 9003,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3,\\n                    \\\"value\\\": 6.3\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-12-30(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2629465650.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2629465650.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 喜剧 运动 / 陈翔 / 陈翔 蘑菇头\\\",\\n                \\\"id\\\": \\\"35207868\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"运动\\\"\\n                ],\\n                \\\"title\\\": \\\"陈翔六点半之民间高手\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"陈翔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"蘑菇头\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"应宝林\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"润土\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"毛台\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"猪小明\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"王炸\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"纪文君\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米线儿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"冷檬\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吴妈\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a5643f\\\",\\n                    \\\"_base_color\\\": [\\n                        0.05942028985507247,\\n                        0.6149732620320856,\\n                        0.7333333333333333\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.06179775280898877,\\n                        0.5028248587570622,\\n                        0.6941176470588235\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f4d31\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2629465650.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/35207868/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/35207868/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/35207868\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"陈翔\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 2,\\n                \\\"value\\\": 2\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★ https://movie.douban.com/subject/27195078/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/27195078/interest/2652621484\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-12-22 13:13:53\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2652621484,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 66615,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 2.5,\\n                    \\\"value\\\": 4.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-09-30(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2619027144.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2619027144.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 动作 / 唐季礼 / 成龙 杨洋\\\",\\n                \\\"id\\\": \\\"27195078\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\"\\n                ],\\n                \\\"title\\\": \\\"急先锋\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"成龙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杨洋\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾伦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"徐若晗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"母其弥雅\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朱正廷\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"楼学贤\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"郭芷妍\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"埃亚德·胡拉尼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杨建平\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"周斌\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"王延龙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"王驹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"唐季礼\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"666e72\\\",\\n                    \\\"_base_color\\\": [\\n                        0.5555555555555555,\\n                        0.10526315789473684,\\n                        0.2235294117647059\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f8f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.11111111111111112,\\n                        0.10526315789473684,\\n                        0.4470588235294118\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"44494c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2619027144.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/27195078/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/27195078/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/27195078\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"唐季礼\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/3150816/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/3150816/interest/2629991533\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-12-05 15:19:42\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2629991533,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 77096,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 6.9\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2009-06-01(英国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p508189927.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p508189927.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2009\\\",\\n                \\\"card_subtitle\\\": \\\"2009 / 英国 / 悬疑 惊悚 / 斯图尔特·哈泽尔丁 / 卢克·梅伯利 科林·萨蒙\\\",\\n                \\\"id\\\": \\\"3150816\\\",\\n                \\\"genres\\\": [\\n                    \\\"悬疑\\\",\\n                    \\\"惊悚\\\"\\n                ],\\n                \\\"title\\\": \\\"终极面试\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"卢克·梅伯利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"科林·萨蒙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉米·米斯特雷\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"嘉玛·陈\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"娜塔莉·考克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"宝拉雅娜·麦金托什\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯·凯里\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"5b7267\\\",\\n                    \\\"_base_color\\\": [\\n                        0.4166666666666667,\\n                        0.2,\\n                        0.0392156862745098\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f9f7\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.08333333333333333,\\n                        0.2857142857142857,\\n                        0.08235294117647059\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"3d4c44\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p508189927.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/3150816/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/3150816/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/3150816\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"斯图尔特·哈泽尔丁\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/34626347/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/34626347/interest/2611947415\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-26 09:49:40\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2611947415,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 48679,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 8.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-09-04(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2611337609.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2611337609.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/ECFA5DI7Q?type=rank&category=movie&rank_type=tv_genre\\\",\\n                        \\\"rank\\\": 6,\\n                        \\\"title\\\": \\\"近期热门美剧榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 美国 / 喜剧 动作 科幻 / 菲利浦·斯格里西亚 塞巴斯蒂安·席尔瓦 / 卡尔·厄本 杰克·奎德\\\",\\n                \\\"id\\\": \\\"34626347\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"动作\\\",\\n                    \\\"科幻\\\"\\n                ],\\n                \\\"title\\\": \\\"黑袍纠察队 第二季\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"卡尔·厄本\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克·奎德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安东尼·斯塔尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾琳·莫里亚蒂\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"多米妮克·麦克艾丽戈特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰西·厄舍\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"拉兹·阿隆索\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"切斯·克劳福\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"托默·卡蓬\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯伦·福原\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"内森·米切尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"蔻碧·米纳菲\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"珊特尔·范圣滕\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"妮卡·埃利奥特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿雅·卡什\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莱拉·罗宾斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔丹娜·拉茹瓦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉姆·比弗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"周豪\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡梅伦·克罗维蒂\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克劳迪娅·多米特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贾森·加里-斯坦福德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·阿什莫\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a50c0c\\\",\\n                    \\\"_base_color\\\": [\\n                        0,\\n                        0.9256756756756758,\\n                        0.5803921568627451\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f4f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0,\\n                        0.39864864864864874,\\n                        0.5803921568627451\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f0909\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2611337609.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/34626347/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/34626347/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/34626347\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"菲利浦·斯格里西亚\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"塞巴斯蒂安·席尔瓦\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/3703650/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/3703650/interest/2530344536\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-22 22:01:05\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2530344536,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 97031,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 8.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2019-07-26(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2558948000.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2558948000.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/3770?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 9,\\n                        \\\"title\\\": \\\"2019评分最高英美新剧\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2019\\\",\\n                \\\"card_subtitle\\\": \\\"2019 / 美国 / 动作 科幻 犯罪 / 菲利浦·斯格里西亚 丹尼尔·艾提奥斯 艾力克·克莱普科 詹妮弗·彭 斯特凡·施瓦茨 马特·沙克曼 弗雷德·托耶 丹·特拉亨伯格 / 卡尔·厄本 艾琳·莫里亚蒂\\\",\\n                \\\"id\\\": \\\"3703650\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"科幻\\\",\\n                    \\\"犯罪\\\"\\n                ],\\n                \\\"title\\\": \\\"黑袍纠察队 第一季\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"卡尔·厄本\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾琳·莫里亚蒂\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克·奎德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安东尼·斯塔尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"多米妮克·麦克艾丽戈特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰西·厄舍\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"切斯·克劳福\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"托默·卡蓬\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯伦·福原\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"内森·米切尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊丽莎白·苏\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"拉兹·阿隆索\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"詹妮弗·艾斯波西多\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"西蒙·佩吉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·本森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安·库萨克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯蒂安·凯耶斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰丝·萨尔盖罗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"妮卡·埃利奥特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿历克斯·哈赛尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米什卡·特博\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔丹娜·拉茹瓦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马尔科姆·巴雷特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布列塔尼·艾伦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉安卡罗·埃斯波西托\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"尼古拉·科雷亚·达姆得\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯科特·汤普森·贝克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"珊特尔·范圣滕\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"大卫·安德鲁\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"大卫·瑞勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布雷丹·贝塞尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·道曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"海利·乔·奥斯蒙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莱拉·罗宾斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"比利·赞恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贾登·马丁\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"保利诺·努内斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯塔·巴科\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"德什伊·帕达亚奇\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"722a25\\\",\\n                    \\\"_base_color\\\": [\\n                        0.010101010101010091,\\n                        0.6700507614213198,\\n                        0.7725490196078432\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f5f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.9959349593495934,\\n                        0.5616438356164384,\\n                        0.28627450980392155\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c1c19\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2558948000.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/3703650/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/3703650/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/3703650\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"菲利浦·斯格里西亚\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹尼尔·艾提奥斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾力克·克莱普科\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"詹妮弗·彭\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯特凡·施瓦茨\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马特·沙克曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"弗雷德·托耶\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹·特拉亨伯格\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/30401849/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/30401849/interest/2611237148\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-22 15:58:34\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2611237148,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 73759,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4,\\n                    \\\"value\\\": 7.7\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-08-19(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2616349563.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2616349563.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/EC3UOBDQY?type=rank&category=movie&rank_type=film_genre\\\",\\n                        \\\"rank\\\": 11,\\n                        \\\"title\\\": \\\"近期热门动画片榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 美国 / 喜剧 动画 奇幻 / 丹·斯坎隆 / 汤姆·赫兰德 克里斯·帕拉特\\\",\\n                \\\"id\\\": \\\"30401849\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"动画\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"1/2的魔法\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"汤姆·赫兰德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯·帕拉特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"茱莉亚·路易斯-德瑞弗斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥克塔维亚·斯宾瑟\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"梅尔·罗德里格斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯尔·柏海莫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丽娜·维特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"黄阿丽\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"格蕾·德丽斯勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"崔茜·尤玛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"维尔摩·瓦尔德拉玛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔治·普萨拉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·拉岑贝格\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a59399\\\",\\n                    \\\"_base_color\\\": [\\n                        0.9444444444444444,\\n                        0.11009174311926606,\\n                        0.8549019607843137\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f4f6\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.6767676767676768,\\n                        0.24812030075187977,\\n                        0.5215686274509804\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f7176\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2616349563.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/30401849/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/30401849/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/30401849\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"丹·斯坎隆\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/25907124/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/25907124/interest/2607035344\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-20 12:48:19\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2607035344,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 503103,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 6.8\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-10-01(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2621219978.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2621219978.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/EC3UOBDQY?type=rank&category=movie&rank_type=film_genre\\\",\\n                        \\\"rank\\\": 6,\\n                        \\\"title\\\": \\\"近期热门动画片榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc/pics/vendors/bilibili.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 剧情 动画 奇幻 / 程腾 李炜 / 郑希 杨凝\\\",\\n                \\\"id\\\": \\\"25907124\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动画\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"姜子牙\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"郑希\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杨凝\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"图特哈蒙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阎么么\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"季冠霖\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"姜广涛\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"564472\\\",\\n                    \\\"_base_color\\\": [\\n                        0.7307692307692308,\\n                        0.40625,\\n                        0.25098039215686274\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f6f4f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.6590909090909091,\\n                        0.2222222222222223,\\n                        0.38823529411764707\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"392d4c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2621219978.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/25907124/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/25907124/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/25907124\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"程腾\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李炜\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/25850442/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/25850442/interest/2602160272\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-18 12:53:12\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2602160272,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 3960,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 6.5\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2018-11-29(美国点映)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2539365148.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2539365148.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2018\\\",\\n                \\\"card_subtitle\\\": \\\"2018 / 美国 / 剧情 冒险 / 安迪·瑟金斯 / 本尼迪克特·康伯巴奇 克里斯蒂安·贝尔\\\",\\n                \\\"id\\\": \\\"25850442\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"冒险\\\"\\n                ],\\n                \\\"title\\\": \\\"森林之子毛克利\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"本尼迪克特·康伯巴奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯蒂安·贝尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯特·布兰切特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安迪·瑟金斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"娜奥米·哈里斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"汤姆·霍兰德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克·莱诺\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗翰·昌德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"埃迪·马森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"彼得·穆兰\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"芙蕾达·平托\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马修·瑞斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"路易斯·阿什伯恩·瑟金斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"724937\\\",\\n                    \\\"_base_color\\\": [\\n                        0.048672566371681436,\\n                        0.5136363636363637,\\n                        0.8627450980392157\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.013888888888888914,\\n                        0.3364485981308411,\\n                        0.4196078431372549\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3025\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2539365148.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/25850442/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/25850442/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/25850442\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"安迪·瑟金斯\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 2,\\n                \\\"value\\\": 2\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★ https://movie.douban.com/subject/1308110/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1308110/interest/2589145415\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-16 13:21:46\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2589145415,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 21034,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3,\\n                    \\\"value\\\": 6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2003-08-15(中国香港)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p1971070670.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1971070670.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2003\\\",\\n                \\\"card_subtitle\\\": \\\"2003 / 中国香港 美国 / 喜剧 动作 奇幻 / 陈嘉上 / 成龙 克莱尔·弗兰妮\\\",\\n                \\\"id\\\": \\\"1308110\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"动作\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"飞龙再生\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"成龙\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克莱尔·弗兰妮\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李·伊万斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"黄秋生\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"钟丽缇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"刘兆铭\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"谢霆锋\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"陈冠希\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"张坚庭\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"586172\\\",\\n                    \\\"_base_color\\\": [\\n                        0.6111111111111112,\\n                        0.22784810126582278,\\n                        0.30980392156862746\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f6f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.04166666666666652,\\n                        0.06504065040650406,\\n                        0.4823529411764706\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"3b404c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p1971070670.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1308110/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1308110/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/1308110\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"陈嘉上\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/1482077/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1482077/interest/2599214673\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-14 11:41:11\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2599214673,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 98309,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 6.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2007-06-02(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p1551671540.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1551671540.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/7492?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 16,\\n                        \\\"title\\\": \\\"澳大利亚动作片榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2007\\\",\\n                \\\"card_subtitle\\\": \\\"2007 / 美国 澳大利亚 / 动作 奇幻 惊悚 / 马克·斯蒂文·约翰逊 / 尼古拉斯·凯奇 伊娃·门德斯\\\",\\n                \\\"id\\\": \\\"1482077\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"奇幻\\\",\\n                    \\\"惊悚\\\"\\n                ],\\n                \\\"title\\\": \\\"灵魂战车\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"尼古拉斯·凯奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊娃·门德斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"彼得·方达\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"山姆·艾里奥特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"韦斯·本特利\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"724727\\\",\\n                    \\\"_base_color\\\": [\\n                        0.07191780821917805,\\n                        0.6576576576576576,\\n                        0.8705882352941177\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.04292929292929291,\\n                        0.5789473684210527,\\n                        0.4470588235294118\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c2f1a\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p1551671540.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1482077/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1482077/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/1482077\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"马克·斯蒂文·约翰逊\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 3,\\n                \\\"value\\\": 3\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★ https://movie.douban.com/subject/1297260/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1297260/interest/2597013680\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-12 12:29:47\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2597013680,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 17410,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4,\\n                    \\\"value\\\": 7.7\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"1999-11-18\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p1898841633.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p1898841633.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/7485?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 9,\\n                        \\\"title\\\": \\\"德国动作片榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"1999\\\",\\n                \\\"card_subtitle\\\": \\\"1999 / 德国 美国 / 喜剧 动作 犯罪 / 莱斯·梅菲尔德 / 马丁·劳伦斯 卢克·威尔逊\\\",\\n                \\\"id\\\": \\\"1297260\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"动作\\\",\\n                    \\\"犯罪\\\"\\n                ],\\n                \\\"title\\\": \\\"笨贼妙探\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"马丁·劳伦斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卢克·威尔逊\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"彼得·格林纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"大卫·查普尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"妮可·阿丽·帕克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"格拉汉姆·贝克尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Robert Miranda\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥莱克·克鲁帕\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"萨韦里奥·格拉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"理查德·C·萨拉菲安\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"塔玛拉·琼斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"胡里奥·奥斯卡·门乔索\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"史蒂夫·兰金\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡门·阿尔根齐亚诺\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·浩克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"弗兰克·梅德拉诺\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"威廉·弗西斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥克塔维亚·斯宾瑟\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯科特·索尔斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯托弗·斯塔普勒顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"埃迪·多诺\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Troy Gilbert\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗伯特·拉萨多\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贾森·克拉维茨\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"James W. Gavin\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安妮·玛丽·霍华德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"简·卡尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Brandon de Paul\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾米·奥博瑞\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"埃里克·罗德尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Joel Hurt Jones\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Damian Foster\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Rocco Salata\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Ty Williams\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗杰·威利\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"574d72\\\",\\n                    \\\"_base_color\\\": [\\n                        0.7111111111111111,\\n                        0.32608695652173914,\\n                        0.1803921568627451\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f6f4f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.7416666666666667,\\n                        0.2469135802469135,\\n                        0.3176470588235294\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"3a334c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p1898841633.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1297260/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1297260/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/1297260\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"莱斯·梅菲尔德\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1,\\n                \\\"max\\\": 5,\\n                \\\"star_count\\\": 4,\\n                \\\"value\\\": 4\\n            },\\n            \\\"sharing_text\\\": \\\"我的评分：★★★★ https://movie.douban.com/subject/1295229/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1295229/interest/2593130407\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-11-08 17:58:29\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"id\\\": 2593130407,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 157956,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4,\\n                    \\\"value\\\": 7.9\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"1999-04-16(葡萄牙)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p1376881286.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1376881286.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\"\\n                ],\\n                \\\"year\\\": \\\"1999\\\",\\n                \\\"card_subtitle\\\": \\\"1999 / 美国 英国 摩洛哥 / 剧情 动作 奇幻 / 斯蒂芬·索莫斯 / 布兰登·费舍 蕾切尔·薇兹\\\",\\n                \\\"id\\\": \\\"1295229\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动作\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"木乃伊\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"布兰登·费舍\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"蕾切尔·薇兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·汉纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿诺德·沃斯洛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯文·J·奥康纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔纳森·海德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥德·菲尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾瑞克·阿瓦利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"史蒂芬·邓纳姆\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里·约翰逊\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"塔克·霍金斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"欧米德·吉亚李利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿隆·伊帕莱\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"博纳德·福克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"帕翠西娅·维拉奎兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡尔·蔡斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Mohammed Afifi\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·克罗宁\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"霍伊·多罗夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"若昂·科斯塔·梅内塞斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"72523c\\\",\\n                    \\\"_base_color\\\": [\\n                        0.06862745098039215,\\n                        0.4722222222222222,\\n                        0.1411764705882353\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.10000000000000002,\\n                        0.5499999999999999,\\n                        0.39215686274509803\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3728\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p1376881286.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1295229/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1295229/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/1295229\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"斯蒂芬·索莫斯\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        }\\n    ]\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"dc33873d-9f93-4731-b865-15c0e6f001e2\",\"ruleName\":\"删除标记\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"movie/[0-9]+/unmark\",\"filterId\":\"3f7baf9e-bf5d-426f-9c4e-fe99d18657bd\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"comment\\\": \\\"\\\",\\n    \\\"status\\\": \\\"unmark\\\",\\n    \\\"id\\\": \\\"3439312\\\"\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"769f0818-88e3-40f1-82c1-4951d10c69c1\",\"ruleName\":\"我的想看\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/user/[0-9]+/interests\",\"filterId\":\"9d105190-f292-4785-8585-5f8e19fff27d\",\"matchType\":\"regExp\"},{\"propName\":\"url\",\"propRegString\":\"status=mark\",\"filterId\":\"19293fea-249e-487f-8365-27a68557d75f\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 20,\\n    \\\"start\\\": 0,\\n    \\\"total\\\": 16,\\n    \\\"interests\\\": [\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/34779692/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/34779692/interest/2732280183\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-02-10 07:56:58\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2732280183,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 79527,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 7.3\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2021-02-12(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2631711326.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2631711326.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/EC3UOBDQY?type=rank&category=movie&rank_type=film_genre\\\",\\n                        \\\"rank\\\": 4,\\n                        \\\"title\\\": \\\"近期热门动画片榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2021\\\",\\n                \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动作 动画 奇幻 / 赵霁 / 杨天翔 张赫\\\",\\n                \\\"id\\\": \\\"34779692\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"动画\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"新神榜：哪吒重生\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"杨天翔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"张赫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"宣晓鸣\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"李诗萌\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朱可儿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凌振赫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"刘若班\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"张遥函\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"张喆\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"高增志\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"郭浩然\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a56c48\\\",\\n                    \\\"_base_color\\\": [\\n                        0.06481481481481481,\\n                        0.5625,\\n                        0.25098039215686274\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.06666666666666667,\\n                        0.6923076923076923,\\n                        0.5098039215686274\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f5337\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2631711326.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/34779692/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/34779692/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/34779692\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"赵霁\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/3041269/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/3041269/interest/2730768977\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-02-09 10:12:31\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2730768977,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 118478,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 7.4\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2011-10-13(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p868781788.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p868781788.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2011\\\",\\n                \\\"card_subtitle\\\": \\\"2011 / 美国 / 科幻 悬疑 惊悚 / 尼尔·博格 / 布莱德利·库珀 艾比·考尼什\\\",\\n                \\\"id\\\": \\\"3041269\\\",\\n                \\\"genres\\\": [\\n                    \\\"科幻\\\",\\n                    \\\"悬疑\\\",\\n                    \\\"惊悚\\\"\\n                ],\\n                \\\"title\\\": \\\"永无止境\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"布莱德利·库珀\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾比·考尼什\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗伯特·德尼罗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安德鲁·霍华德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安娜·弗莱尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"梅天悦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰尼·威特沃斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"565d72\\\",\\n                    \\\"_base_color\\\": [\\n                        0.6296296296296297,\\n                        0.2432432432432433,\\n                        0.1450980392156863\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f6f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.972222222222222,\\n                        0.08000000000000008,\\n                        0.29411764705882354\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"393e4c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p868781788.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/3041269/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/3041269/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/3041269\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"尼尔·博格\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/26908002/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/26908002/interest/2730740458\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-02-09 09:47:55\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2730740458,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 63538,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 7.4\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2017-10-02(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2493581990.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2493581990.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/ECHU473PI?type=rank&category=movie&rank_type=tv_genre\\\",\\n                        \\\"rank\\\": 13,\\n                        \\\"title\\\": \\\"奇幻类美剧榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2017\\\",\\n                \\\"card_subtitle\\\": \\\"2017 / 美国 / 动作 科幻 奇幻 / 布莱恩·辛格 耶利米·S·谢奇克 Craig Siebels / 史蒂芬·莫耶 艾米·阿克\\\",\\n                \\\"id\\\": \\\"26908002\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"科幻\\\",\\n                    \\\"奇幻\\\"\\n                ],\\n                \\\"title\\\": \\\"天赋异禀 第一季\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"史蒂芬·莫耶\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾米·阿克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·蒂尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"娜塔莉·阿琳·林德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"珀西·海恩斯·怀特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"科比·贝尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰米·钟\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布莱尔·雷德福 \\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾玛·杜蒙特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰梅因·里弗斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"海莉·洛维特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"加瑞特·迪拉胡特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰弗里·丹尼尔·菲利普斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莎朗·格拉斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a59f8a\\\",\\n                    \\\"_base_color\\\": [\\n                        0.12719298245614039,\\n                        0.16379310344827588,\\n                        0.9098039215686274\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f8f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.08620689655172416,\\n                        0.29,\\n                        0.7843137254901961\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f7a6a\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2493581990.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/26908002/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/26908002/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/26908002\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"布莱恩·辛格\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"耶利米·S·谢奇克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Craig Siebels\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/26613692/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/26613692/interest/2713599760\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2021-01-28 20:08:29\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2713599760,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 0,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 0.0,\\n                    \\\"value\\\": 0\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2021-03-24(中国台湾)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2634253484.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2634253484.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2021\\\",\\n                \\\"card_subtitle\\\": \\\"2021 / 美国 澳大利亚 / 动作 科幻 冒险 / 亚当·温加德 / 亚历山大·斯卡斯加德 米莉·波比·布朗\\\",\\n                \\\"id\\\": \\\"26613692\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"科幻\\\",\\n                    \\\"冒险\\\"\\n                ],\\n                \\\"title\\\": \\\"哥斯拉大战金刚\\\",\\n                \\\"is_released\\\": false,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"亚历山大·斯卡斯加德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米莉·波比·布朗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丽贝卡·豪尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布莱恩·泰里·亨利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"小栗旬\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾莎·冈萨雷斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"朱利安·迪尼森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"兰斯·莱迪克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯尔·钱德勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"德米安·比齐尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰西卡·亨维克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"哈基姆·凯-卡西姆\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"钱信伊\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"约翰·皮鲁切洛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯·乔克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"康兰·卡萨尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布拉德·麦克默里\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"本杰明·里格比\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"普里西拉·道伊西\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"戴维·卡斯蒂洛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉姆·帕尔默\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹娜·奎里拉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"塔斯尼姆·罗克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔尔·皮尔斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"皮拉·福德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾梅伯·瓦尔斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"肖恩·麦克布莱德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"爱丽丝·兰斯伯里\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔恩·奎斯蒂德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"柯蒂斯·布什\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"迪索·拉莫斯\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a5615a\\\",\\n                    \\\"_base_color\\\": [\\n                        0.01666666666666668,\\n                        0.4545454545454546,\\n                        0.25882352941176473\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f5f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.05476190476190477,\\n                        0.546875,\\n                        0.5019607843137255\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f4b45\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2634253484.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/26613692/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/26613692/\\\",\\n                \\\"release_date\\\": \\\"2021-03-26\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"亚当·温加德\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/3604148/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/3604148/interest/2533850711\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-09-16 19:34:09\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2533850711,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 162827,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 3.5,\\n                    \\\"value\\\": 7.4\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2017-08-29(伦敦恐怖电影节)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2452537144.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2452537144.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/film_genre_42?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 20,\\n                        \\\"title\\\": \\\"评分最高儿童片\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2017\\\",\\n                \\\"card_subtitle\\\": \\\"2017 / 美国 加拿大 / 剧情 儿童 恐怖 / 安德斯·穆斯切蒂 / 比尔·斯卡斯加德 杰登·马泰尔\\\",\\n                \\\"id\\\": \\\"3604148\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"儿童\\\",\\n                    \\\"恐怖\\\"\\n                ],\\n                \\\"title\\\": \\\"小丑回魂\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"比尔·斯卡斯加德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰登·马泰尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰里米·雷·泰勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"索菲娅·莉莉丝\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"菲恩·伍法德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔森·雅各布\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克·迪伦·格雷泽\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"瓦耶特·奥莱夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克逊·罗伯特·斯科特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"尼古拉斯·汉密尔顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰克·辛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"洛根·汤普森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"欧文·泰格\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯蒂夫·博加尔特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斯图尔特·休斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰弗里·庞塞特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"皮普·德怀尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莫莉·阿特金森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"史蒂文·威廉姆斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊丽莎白·桑德斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"梅根·查彭提尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安东尼·尤埃西\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"哈维尔·博泰特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊莎贝尔·内利瑟\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"尼尔·克容\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"726d67\\\",\\n                    \\\"_base_color\\\": [\\n                        0.08333333333333333,\\n                        0.1,\\n                        0.0784313725490196\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.07575757575757573,\\n                        0.31428571428571433,\\n                        0.13725490196078433\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c4844\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2452537144.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/3604148/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/3604148/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/3604148\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"安德斯·穆斯切蒂\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/1829040/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1829040/interest/2525678169\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-09-09 20:17:27\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2525678169,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 2699,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.0,\\n                    \\\"value\\\": 7.6\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2006-07-12\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2375145120.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2375145120.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2006\\\",\\n                \\\"card_subtitle\\\": \\\"2006 / 澳大利亚 美国 / 剧情 奇幻 恐怖 / Mark Haber 罗伯·鲍曼 / 威廉·赫特 威廉姆·H·梅西\\\",\\n                \\\"id\\\": \\\"1829040\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"奇幻\\\",\\n                    \\\"恐怖\\\"\\n                ],\\n                \\\"title\\\": \\\"梦魇幻景录\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"威廉·赫特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"威廉姆·H·梅西\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾恩·贝利\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"6b6f72\\\",\\n                    \\\"_base_color\\\": [\\n                        0.5833333333333334,\\n                        0.0625,\\n                        0.12549019607843137\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f7f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.04166666666666652,\\n                        0.07017543859649122,\\n                        0.2235294117647059\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"474a4c\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2375145120.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1829040/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1829040/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/1829040\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"Mark Haber\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗伯·鲍曼\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/25955745/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/25955745/interest/2477221574\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-08-03 19:44:13\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2477221574,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 2531,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.0,\\n                    \\\"value\\\": 8.3\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2014-08-09(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2575890373.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2575890373.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2014\\\",\\n                \\\"card_subtitle\\\": \\\"2014 / 中国大陆 / 剧情 动作 动画 / 不思凡 / 小连杀 谢添天\\\",\\n                \\\"id\\\": \\\"25955745\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动作\\\",\\n                    \\\"动画\\\"\\n                ],\\n                \\\"title\\\": \\\"妙先生之火泽睽笑人传\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"小连杀\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"谢添天\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"夏磊\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"韦琪\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"冯骏骅\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Vlvi\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"林强\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a56530\\\",\\n                    \\\"_base_color\\\": [\\n                        0.07575757575757576,\\n                        0.7096774193548387,\\n                        0.24313725490196078\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.08914728682170542,\\n                        0.4236453201970443,\\n                        0.796078431372549\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f4e25\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2575890373.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/25955745/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/25955745/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/25955745\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"不思凡\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/27594217/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/27594217/interest/2184698405\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-02-08 12:25:30\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2184698405,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 207044,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 9.1\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2019-01-11(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2569324883.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2569324883.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/ECZE5BCZA?type=rank&category=movie&rank_type=tv_genre\\\",\\n                        \\\"rank\\\": 3,\\n                        \\\"title\\\": \\\"喜剧类英剧榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2019\\\",\\n                \\\"card_subtitle\\\": \\\"2019 / 英国 / 剧情 喜剧 / 本·泰勒 凯特·赫伦 / 阿萨·巴特菲尔德 艾玛·麦基\\\",\\n                \\\"id\\\": \\\"27594217\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"喜剧\\\"\\n                ],\\n                \\\"title\\\": \\\"性爱自修室 第一季\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"阿萨·巴特菲尔德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾玛·麦基\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"舒提·盖特瓦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉莲·安德森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"康纳·斯温德尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯达·威廉姆斯特灵\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿利斯泰·皮垂\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾米·卢·伍德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米卡埃尔·佩斯布兰特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米米·基恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"钱尼尔·库勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"亚历山大·韦斯特伍德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"塔尼娅·雷诺兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯瑞斯·沃肯斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"帕特里夏·艾莉森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"西蒙娜·阿什利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉姆·霍威克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"爱德华·布卢梅尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯·詹克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"拉卡·塔克雷尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"道比·欧帕瑞\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"麦克斯·布斯特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"卡迪姆·拉姆齐\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"汉娜·沃丁厄姆\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"詹姆斯·鲍弗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"萨曼莎·斯毕洛\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莉莉·纽马克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"强尼·艾米斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥利维亚·格兰特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"爱丽丝·休金\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹尼尔·英格斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"多米尼克·阿普尔怀特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安贾纳·瓦桑\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹尼尔·阿德博伊加\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"费米·依鲁福祖\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"提什·库马尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"罗瑞·帕尔弗里\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"726758\\\",\\n                    \\\"_base_color\\\": [\\n                        0.0925925925925926,\\n                        0.225,\\n                        0.1568627450980392\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.019607843137254832,\\n                        0.20238095238095233,\\n                        0.32941176470588235\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c443b\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2569324883.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/27594217/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/27594217/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/27594217\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"本·泰勒\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯特·赫伦\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/33387353/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/33387353/interest/2142708912\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-01-19 19:58:07\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2142708912,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 26311,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 5.0,\\n                    \\\"value\\\": 9.7\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2019-10-28(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2572676219.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2572676219.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2019\\\",\\n                \\\"card_subtitle\\\": \\\"2019 / 英国 / 纪录片 / 弗雷迪·德瓦斯 艾玛·纳珀 查登·亨特 吉尔斯·巴杰 / 大卫·爱登堡\\\",\\n                \\\"id\\\": \\\"33387353\\\",\\n                \\\"genres\\\": [\\n                    \\\"纪录片\\\"\\n                ],\\n                \\\"title\\\": \\\"七个世界，一个星球\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"大卫·爱登堡\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"547269\\\",\\n                    \\\"_base_color\\\": [\\n                        0.4492753623188406,\\n                        0.2674418604651163,\\n                        0.33725490196078434\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f9f8\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.13095238095238107,\\n                        0.11570247933884292,\\n                        0.4745098039215686\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"384c46\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2572676219.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/33387353/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/33387353/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/33387353\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"弗雷迪·德瓦斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾玛·纳珀\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"查登·亨特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉尔斯·巴杰\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/27199850/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/27199850/interest/2141966383\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2020-01-19 08:47:51\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2141966383,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 0,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 0.0,\\n                    \\\"value\\\": 0\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2022-01-21(美国)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2582716554.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2582716554.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"2022\\\",\\n                \\\"card_subtitle\\\": \\\"2022 / 美国 / 动作 科幻 惊悚 / 丹尼尔·伊斯皮诺萨 / 杰瑞德·莱托 阿德里娅·阿霍纳\\\",\\n                \\\"id\\\": \\\"27199850\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"科幻\\\",\\n                    \\\"惊悚\\\"\\n                ],\\n                \\\"title\\\": \\\"暗夜博士：莫比亚斯\\\",\\n                \\\"is_released\\\": false,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"杰瑞德·莱托\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿德里娅·阿霍纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰瑞德·哈里斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"J·K·西蒙斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马特·史密斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"泰瑞斯·吉布森\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"迈克尔·基顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"查理·肖特韦尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里·约翰逊\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿奇·雷诺\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"亚当·柯林斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"露丝·霍洛克斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贝恩·科拉科\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"阿图尔·夏尔马\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"尼克·欧文福特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"通恰伊·古奈什\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"戴维娜·西塔拉姆\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"巴里·艾尔德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"宾利·卡鲁\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"豪尔赫·莱昂·马丁内斯\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"马诺伊·阿南德\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"丹尼尔·厄根\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"黛博拉·洛克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克里斯·雷曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"贾格·帕特尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"伊斯雷尔·鲁兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Ria Fend\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Tom Forbes\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Al Madrigal\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"Adam El Hagar\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"5b7272\\\",\\n                    \\\"_base_color\\\": [\\n                        0.5,\\n                        0.2,\\n                        0.0196078431372549\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f9f9\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.5,\\n                        0.25,\\n                        0.03137254901960784\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"3d4c4c\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2582716554.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/27199850/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/27199850/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/27199850\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"丹尼尔·伊斯皮诺萨\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/24298954/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/24298954/interest/2018029623\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2019-10-28 07:36:21\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2018029623,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 185996,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.0,\\n                    \\\"value\\\": 7.9\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2020-11-27(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2624607255.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2624607255.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/EC7Q5H2QI?type=rank&category=movie&rank_type=film_genre\\\",\\n                        \\\"rank\\\": 3,\\n                        \\\"title\\\": \\\"近期高分电影榜\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img3.doubanio.com/f/frodo/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5/pics/vendors/migu_video.png\\\",\\n                    \\\"https://img1.doubanio.com/f/frodo/9f302f2ad003c8c607cb79b447aca789a01142b2/pics/vendors/youku.png\\\",\\n                    \\\"https://img9.doubanio.com/f/frodo/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01/pics/vendors/iqiyi.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2020\\\",\\n                \\\"card_subtitle\\\": \\\"2020 / 美国 / 喜剧 动画 冒险 / 乔尔·克劳福德 / 尼古拉斯·凯奇 艾玛·斯通\\\",\\n                \\\"id\\\": \\\"24298954\\\",\\n                \\\"genres\\\": [\\n                    \\\"喜剧\\\",\\n                    \\\"动画\\\",\\n                    \\\"冒险\\\"\\n                ],\\n                \\\"title\\\": \\\"疯狂原始人2\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"尼古拉斯·凯奇\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾玛·斯通\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"瑞恩·雷诺兹\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯瑟琳·基纳\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"莱斯利·曼恩\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"彼特·丁拉基\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克拉克·杜克\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"克萝丽丝·利奇曼\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔安娜·林莉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"凯莉·玛丽·陈\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"5b726d\\\",\\n                    \\\"_base_color\\\": [\\n                        0.46428571428571425,\\n                        0.20588235294117646,\\n                        0.26666666666666666\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f4f9f8\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.4705882352941177,\\n                        0.27199999999999996,\\n                        0.49019607843137253\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"3c4c49\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2624607255.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/24298954/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/24298954/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/24298954\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"乔尔·克劳福德\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/1292000/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/1292000/interest/2004816758\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2019-10-19 07:25:43\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 2004816758,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 690708,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 9.0\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"1999-09-10(威尼斯电影节)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1910926158.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910926158.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"top250\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/movie_top250\\\",\\n                        \\\"rank\\\": 51,\\n                        \\\"title\\\": \\\"豆瓣电影Top250\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"1999\\\",\\n                \\\"card_subtitle\\\": \\\"1999 / 美国 德国 意大利 / 剧情 动作 悬疑 / 大卫·芬奇 / 爱德华·诺顿 布拉德·皮特\\\",\\n                \\\"id\\\": \\\"1292000\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动作\\\",\\n                    \\\"悬疑\\\"\\n                ],\\n                \\\"title\\\": \\\"搏击俱乐部\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"爱德华·诺顿\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"布拉德·皮特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"海伦娜·伯翰·卡特\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"扎克·格雷尼尔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"米特·洛夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杰瑞德·莱托\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"艾恩·贝利\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"里奇蒙德·阿奎特 \\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"乔治·马奎尔\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"725851\\\",\\n                    \\\"_base_color\\\": [\\n                        0.03225806451612906,\\n                        0.28837209302325584,\\n                        0.8431372549019608\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f5f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.01666666666666668,\\n                        0.27272727272727276,\\n                        0.43137254901960786\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3a36\\\"\\n                },\\n                \\\"type\\\": \\\"movie\\\",\\n                \\\"has_linewatch\\\": false,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p1910926158.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/1292000/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/1292000/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/movie/1292000\\\",\\n                \\\"subtype\\\": \\\"movie\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"大卫·芬奇\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/30174419/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/30174419/interest/1949002921\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2019-09-12 07:07:05\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 1949002921,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 14389,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 9.3\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2019-07-07(日本)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2558471577.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2558471577.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc/pics/vendors/bilibili.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2019\\\",\\n                \\\"card_subtitle\\\": \\\"2019 / 日本 / 剧情 动画 / 薮田修平 越田知明 左藤洋二 松林唯人 江岛泰男 内田信吾 平向智子 安藤贵史 小林敦 吉川志我津 须之内佑典 黑濑大辅 / 石上静香 上村祐翔\\\",\\n                \\\"id\\\": \\\"30174419\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动画\\\"\\n                ],\\n                \\\"title\\\": \\\"冰海战记\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"石上静香\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"上村祐翔\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"松田健一郎\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"内田直哉\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"小野贤章\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"大塚明夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安元洋贵\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斧笃\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"上田耀司\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"高梁碧\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"生天目仁美\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"浦山迅\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"日野聪\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"竹内良太\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"菅生隆之\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"后藤弘树\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"高桥伸也\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"古川慎\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"市来光弘\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"下山吉光\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"72594d\\\",\\n                    \\\"_base_color\\\": [\\n                        0.053333333333333344,\\n                        0.3205128205128205,\\n                        0.9176470588235294\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.04901960784313728,\\n                        0.2677165354330709,\\n                        0.4980392156862745\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c3b33\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2558471577.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/30174419/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/30174419/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/30174419\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"薮田修平\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"越田知明\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"左藤洋二\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"松林唯人\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"江岛泰男\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"内田信吾\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"平向智子\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安藤贵史\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"小林敦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉川志我津\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"须之内佑典\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"黑濑大辅\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/26703457/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/26703457/interest/1725426342\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2019-03-22 20:22:03\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 1725426342,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 107307,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 9.4\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2016-01-07(中国大陆)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2306966020.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2306966020.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/2016_tv_487?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 4,\\n                        \\\"title\\\": \\\"2016评分最高纪录剧集\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc/pics/vendors/bilibili.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2016\\\",\\n                \\\"card_subtitle\\\": \\\"2016 / 中国大陆 / 纪录片 / 叶君 萧寒 / 王津 亓昊楠\\\",\\n                \\\"id\\\": \\\"26703457\\\",\\n                \\\"genres\\\": [\\n                    \\\"纪录片\\\"\\n                ],\\n                \\\"title\\\": \\\"我在故宫修文物\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"王津\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"亓昊楠\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"屈峰\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"王五胜\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"王有亮\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"杨泽华\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"纪东歌\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"陈杨\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"闵俊嵘\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a59d99\\\",\\n                    \\\"_base_color\\\": [\\n                        0.04444444444444436,\\n                        0.07109004739336482,\\n                        0.8274509803921568\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f6f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.03333333333333314,\\n                        0.02645502645502651,\\n                        0.7411764705882353\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f7876\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2306966020.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/26703457/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/26703457/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/26703457\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"叶君\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"萧寒\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/4116954/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/4116954/interest/1377111709\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2018-05-21 14:41:08\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 1377111709,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 436,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 9.2\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"1970-04-01\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p454174108.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img1.doubanio.com/view/photo/s_ratio_poster/public/p454174108.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [],\\n                \\\"year\\\": \\\"1970\\\",\\n                \\\"card_subtitle\\\": \\\"1970 / 日本 / 动作 动画 运动 / 出崎统 富野由悠季 石黑升 波多正美 吉川惣司 平田敏夫 西牧秀雄 奥田诚治 / 青井辉彦 仲村秀生\\\",\\n                \\\"id\\\": \\\"4116954\\\",\\n                \\\"genres\\\": [\\n                    \\\"动作\\\",\\n                    \\\"动画\\\",\\n                    \\\"运动\\\"\\n                ],\\n                \\\"title\\\": \\\"明日之丈\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"青井辉彦\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"仲村秀生\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"白石冬美\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"a5a19e\\\",\\n                    \\\"_base_color\\\": [\\n                        0.07407407407407436,\\n                        0.04455445544554454,\\n                        0.792156862745098\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.03846153846153838,\\n                        0.08843537414965975,\\n                        0.5764705882352941\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"7f7c79\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p454174108.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/4116954/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/4116954/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/4116954\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"出崎统\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"富野由悠季\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"石黑升\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"波多正美\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"吉川惣司\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"平田敏夫\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"西牧秀雄\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"奥田诚治\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        },\\n        {\\n            \\\"comment\\\": \\\"\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/27157760/ 来自@豆瓣App\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/27157760/interest/1377111346\\\",\\n            \\\"tags\\\": [],\\n            \\\"charts\\\": [],\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 0,\\n            \\\"create_time\\\": \\\"2018-05-21 14:40:20\\\",\\n            \\\"status\\\": \\\"mark\\\",\\n            \\\"id\\\": 1377111346,\\n            \\\"is_private\\\": false,\\n            \\\"subject\\\": {\\n                \\\"rating\\\": {\\n                    \\\"count\\\": 25653,\\n                    \\\"max\\\": 10,\\n                    \\\"star_count\\\": 4.5,\\n                    \\\"value\\\": 8.8\\n                },\\n                \\\"controversy_reason\\\": \\\"\\\",\\n                \\\"pubdate\\\": [\\n                    \\\"2018-04-05(日本)\\\"\\n                ],\\n                \\\"pic\\\": {\\n                    \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2520316571.jpg\\\",\\n                    \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2520316571.jpg\\\"\\n                },\\n                \\\"honor_infos\\\": [\\n                    {\\n                        \\\"kind\\\": \\\"rank\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/subject_collection/2018_tv_28?type=rank&category=movie\\\",\\n                        \\\"rank\\\": 8,\\n                        \\\"title\\\": \\\"2018评分最高动画剧集\\\"\\n                    }\\n                ],\\n                \\\"is_show\\\": false,\\n                \\\"vendor_icons\\\": [\\n                    \\\"https://img9.doubanio.com/f/frodo/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc/pics/vendors/bilibili.png\\\"\\n                ],\\n                \\\"year\\\": \\\"2018\\\",\\n                \\\"card_subtitle\\\": \\\"2018 / 日本 / 剧情 动画 运动 / 森山洋 土屋康郎 和田高明 和田卓也 藤本义孝 藤本次朗 古谷田顺久 山内东生雄 泉保良辅 / 细谷佳正 斋藤志郎\\\",\\n                \\\"id\\\": \\\"27157760\\\",\\n                \\\"genres\\\": [\\n                    \\\"剧情\\\",\\n                    \\\"动画\\\",\\n                    \\\"运动\\\"\\n                ],\\n                \\\"title\\\": \\\"机甲拳击\\\",\\n                \\\"is_released\\\": true,\\n                \\\"actors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"细谷佳正\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"斋藤志郎\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"安元洋贵\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"森奈奈子\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"村濑迪与\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"木下浩之\\\"\\n                    }\\n                ],\\n                \\\"color_scheme\\\": {\\n                    \\\"is_dark\\\": true,\\n                    \\\"primary_color_light\\\": \\\"724540\\\",\\n                    \\\"_base_color\\\": [\\n                        0.016460905349794237,\\n                        0.4378378378378378,\\n                        0.7254901960784313\\n                    ],\\n                    \\\"secondary_color\\\": \\\"f9f5f4\\\",\\n                    \\\"_avg_color\\\": [\\n                        0.013333333333333327,\\n                        0.2873563218390805,\\n                        0.3411764705882353\\n                    ],\\n                    \\\"primary_color_dark\\\": \\\"4c2e2b\\\"\\n                },\\n                \\\"type\\\": \\\"tv\\\",\\n                \\\"has_linewatch\\\": true,\\n                \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2520316571.jpg\\\",\\n                \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/27157760/\\\",\\n                \\\"url\\\": \\\"https://movie.douban.com/subject/27157760/\\\",\\n                \\\"release_date\\\": null,\\n                \\\"uri\\\": \\\"douban://douban.com/tv/27157760\\\",\\n                \\\"subtype\\\": \\\"tv\\\",\\n                \\\"directors\\\": [\\n                    {\\n                        \\\"name\\\": \\\"森山洋\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"土屋康郎\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"和田高明\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"和田卓也\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"藤本义孝\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"藤本次朗\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"古谷田顺久\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"山内东生雄\\\"\\n                    },\\n                    {\\n                        \\\"name\\\": \\\"泉保良辅\\\"\\n                    }\\n                ],\\n                \\\"article_intros\\\": [],\\n                \\\"null_rating_reason\\\": \\\"\\\"\\n            }\\n        }\\n    ]\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"b9f75dd9-7f0c-4c29-b381-515d79db7fcb\",\"ruleName\":\"我的已看\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/user/[0-9]+/interests\",\"filterId\":\"ca00466e-2db8-4248-ad3b-eee67189d25b\",\"matchType\":\"regExp\"},{\"propName\":\"url\",\"propRegString\":\"status=done\",\"filterId\":\"f3847ec1-e263-4dc4-aaf2-8f98d6e6308b\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n\\t\\\"count\\\": 20,\\n\\t\\\"start\\\": 0,\\n\\t\\\"total\\\": 411,\\n\\t\\\"interests\\\": [{\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": null,\\n\\t\\t\\\"sharing_text\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27148168\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/27148168\\\\/interest\\\\/2784560883\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-03-11 14:55:43\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2784560883,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 187718,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.6\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2021-02-14(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2633779065.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2633779065.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2021\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2021 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u5267\\\\u60c5 \\\\u53e4\\\\u88c5 \\\\/ \\\\u9093\\\\u79d1 \\\\/ \\\\u90ed\\\\u9e92\\\\u9e9f \\\\u5b8b\\\\u8f76\\\",\\n\\t\\t\\t\\\"id\\\": \\\"27148168\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u5267\\\\u60c5\\\", \\\"\\\\u53e4\\\\u88c5\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u8d58\\\\u5a7f\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u90ed\\\\u9e92\\\\u9e9f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b8b\\\\u8f76\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u848b\\\\u4f9d\\\\u4f9d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ad8\\\\u66d9\\\\u5149\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6d77\\\\u4e00\\\\u5929\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c1a\\\\u8bed\\\\u8d24\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6731\\\\u73e0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f20\\\\u82e5\\\\u6600\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7530\\\\u96e8\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5cb3\\\\u65f8\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5218\\\\u51a0\\\\u9e9f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51af\\\\u6656\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u738b\\\\u6210\\\\u601d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u53f6\\\\u9879\\\\u660e\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8d75\\\\u67ef\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u66f9\\\\u66e6\\\\u6708\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5218\\\\u5df2\\\\u822a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u94b1\\\\u6ce2\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ec4\\\\u6f84\\\\u6f84\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u5f67\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6234\\\\u5411\\\\u5b87\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u80e1\\\\u4e39\\\\u4e39\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c88\\\\u6d69\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5d14\\\\u9e4f\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"721c1f\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.9929824561403509, 0.753968253968254, 0.49411764705882355],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f4f5\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.996031746031746, 0.6885245901639345, 0.47843137254901963],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c1215\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2633779065.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27148168\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27148168\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/tv\\\\/27148168\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9093\\\\u79d1\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/4848115\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/4848115\\\\/interest\\\\/2783176162\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-03-10 13:58:27\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2783176162,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 273187,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\t\\t\\\"value\\\": 8.9\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2010-10-16(\\\\u65e5\\\\u672c)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p709670262.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p709670262.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"top250\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/movie_top250\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 185,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8c46\\\\u74e3\\\\u7535\\\\u5f71Top250\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5\\\\/pics\\\\/vendors\\\\/migu_video.png\\\", \\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2010\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2010 \\\\/ \\\\u65e5\\\\u672c \\\\/ \\\\u5267\\\\u60c5 \\\\u52a8\\\\u753b \\\\u513f\\\\u7ae5 \\\\/ \\\\u85e4\\\\u68ee\\\\u96c5\\\\u4e5f \\\\/ \\\\u5c71\\\\u53e3\\\\u80dc\\\\u5e73 \\\\u7231\\\\u6cb3\\\\u91cc\\\\u82b1\\\\u5b50\\\",\\n\\t\\t\\t\\\"id\\\": \\\"4848115\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u5267\\\\u60c5\\\", \\\"\\\\u52a8\\\\u753b\\\", \\\"\\\\u513f\\\\u7ae5\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u4f60\\\\u770b\\\\u8d77\\\\u6765\\\\u597d\\\\u50cf\\\\u5f88\\\\u597d\\\\u5403\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c71\\\\u53e3\\\\u80dc\\\\u5e73\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7231\\\\u6cb3\\\\u91cc\\\\u82b1\\\\u5b50\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u52a0\\\\u85e4\\\\u6e05\\\\u53f2\\\\u90ce\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u539f\\\\u7530\\\\u77e5\\\\u4e16\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5ddd\\\\u5c9b\\\\u5f97\\\\u7231\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6298\\\\u7b20\\\\u5bcc\\\\u7f8e\\\\u5b50\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6850\\\\u672c\\\\u62d3\\\\u54c9\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u522b\\\\u6240\\\\u54f2\\\\u4e5f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u77e2\\\\u7530\\\\u7a14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5ddd\\\\u6751\\\\u4e07\\\\u68a8\\\\u963f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ad8\\\\u4e43\\\\u4e3d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c0f\\\\u5ba4\\\\u6b63\\\\u5e78\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c5f\\\\u5ddd\\\\u592e\\\\u751f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5fd7\\\\u6751\\\\u77e5\\\\u5e78\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u80dc\\\\u6cbc\\\\u7eaa\\\\u4e49\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e95\\\\u7530\\\\u56fd\\\\u7537\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5bab\\\\u897f\\\\u8fbe\\\\u4e5f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5bab\\\\u897f\\\\u7f8e\\\\u5948\\\\u5b50\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"3498a5\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.5199004975124378, 0.6836734693877551, 0.3843137254901961],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f9f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.11290322580645158, 0.22962962962962966, 0.5294117647058824],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"28757f\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p709670262.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/4848115\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/4848115\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/4848115\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u85e4\\\\u68ee\\\\u96c5\\\\u4e5f\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/34930862\\\\/interest\\\\/2641791302\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-03-03 07:35:21\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2641791302,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 57291,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\t\\t\\\"value\\\": 8.7\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-12-11(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/EC4Q5SGKQ?type=rank&category=movie&rank_type=year\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 5,\\n\\t\\t\\t\\t\\\"title\\\": \\\"2020\\\\u8bc4\\\\u5206\\\\u6700\\\\u9ad8\\\\u7eaa\\\\u5f55\\\\u7247\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u7eaa\\\\u5f55\\\\u7247 \\\\u8fd0\\\\u52a8 \\\\/ \\\\u8bb8\\\\u6167\\\\u6676 \\\\/ \\\\u9a6c\\\\u864e \\\\u6881\\\\u6b63\\\\u53cc\\\",\\n\\t\\t\\t\\\"id\\\": \\\"34930862\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u7eaa\\\\u5f55\\\\u7247\\\", \\\"\\\\u8fd0\\\\u52a8\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u68d2\\\\uff01\\\\u5c11\\\\u5e74\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u864e\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6881\\\\u6b63\\\\u53cc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f20\\\\u9526\\\\u65b0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b59\\\\u5cad\\\\u5cf0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u90ed\\\\u5fe0\\\\u5065\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"a56437\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.06775067750677506, 0.6648648648648648, 0.7254901960784313],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f6f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.06574923547400613, 0.5891891891891892, 0.7254901960784313],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"7f4d2a\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/34930862\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8bb8\\\\u6167\\\\u6676\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24750460\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/24750460\\\\/interest\\\\/2773052102\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-03-03 05:37:36\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2773052102,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 51209,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\t\\\"value\\\": 5.8\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-11-09(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2623581295.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2623581295.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\", \\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2019\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2019 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u52a8\\\\u4f5c \\\\u5947\\\\u5e7b \\\\u5192\\\\u9669 \\\\/ \\\\u5c3c\\\\u5c14\\\\u00b7\\\\u9a6c\\\\u6b47\\\\u5c14 \\\\/ \\\\u5927\\\\u536b\\\\u00b7\\\\u54c8\\\\u4f2f \\\\u7c73\\\\u62c9\\\\u00b7\\\\u4e54\\\\u6c83\\\\u7ef4\\\\u5947\\\",\\n\\t\\t\\t\\\"id\\\": \\\"24750460\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u52a8\\\\u4f5c\\\", \\\"\\\\u5947\\\\u5e7b\\\", \\\"\\\\u5192\\\\u9669\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u5730\\\\u72f1\\\\u7537\\\\u7235\\\\uff1a\\\\u8840\\\\u7687\\\\u540e\\\\u5d1b\\\\u8d77\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5927\\\\u536b\\\\u00b7\\\\u54c8\\\\u4f2f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7c73\\\\u62c9\\\\u00b7\\\\u4e54\\\\u6c83\\\\u7ef4\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91d1\\\\u5927\\\\u8d24\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4f0a\\\\u6069\\\\u00b7\\\\u9ea6\\\\u67ef\\\\u8096\\\\u6069\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u5229\\\\u65af\\\\u6cf0\\\\u00b7\\\\u76ae\\\\u5782\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8428\\\\u838e\\\\u00b7\\\\u83b1\\\\u6069\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6258\\\\u9a6c\\\\u65af\\\\u00b7\\\\u54c8\\\\u767b\\\\u00b7\\\\u4e18\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4f69\\\\u5185\\\\u6d1b\\\\u666e\\\\u00b7\\\\u7c73\\\\u5951\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u82cf\\\\u83f2\\\\u00b7\\\\u5965\\\\u5eb7\\\\u5185\\\\u591a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5e03\\\\u83b1\\\\u6069\\\\u00b7\\\\u683c\\\\u91cc\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u8482\\\\u5a1c\\\\u00b7\\\\u514b\\\\u83b1\\\\u4f2f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u4ec0\\\\u4e3d\\\\u00b7\\\\u827e\\\\u5fb7\\\\u7eb3\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9053\\\\u683c\\\\u62c9\\\\u65af\\\\u00b7\\\\u6cf0\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8d1d\\\\u6069\\\\u00b7\\\\u79d1\\\\u62c9\\\\u79d1\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u5854\\\\u7eb3\\\\u65af\\\\u00b7\\\\u65af\\\\u96f7\\\\u5e03\\\\u96f7\\\\u592b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51e1\\\\u59ae\\\\u838e\\\\u00b7\\\\u827e\\\\u79d1\\\\u5c14\\\\u5179\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83b1\\\\u62c9\\\\u00b7\\\\u83ab\\\\u5c14\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"a56c1f\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.0961199294532628, 0.8111587982832619, 0.9137254901960784],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f7f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.0803921568627451, 0.6538461538461537, 0.5098039215686274],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"7f5318\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2623581295.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24750460\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24750460\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/24750460\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c3c\\\\u5c14\\\\u00b7\\\\u9a6c\\\\u6b47\\\\u5c14\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24815502\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/24815502\\\\/interest\\\\/2685451150\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-02-13 09:23:29\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2685451150,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 6499,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\t\\\"value\\\": 7.6\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2013-11-07(\\\\u5fb7\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2182749627.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2182749627.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2013\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2013 \\\\/ \\\\u5fb7\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u7231\\\\u60c5 \\\\/ \\\\u535a\\\\u62c9\\\\u00b7\\\\u8fbe\\\\u683c\\\\u7279\\\\u80af \\\\/ \\\\u57c3\\\\u5229\\\\u4e9a\\\\u65af\\\\u00b7\\\\u7a46\\\\u5df4\\\\u91cc\\\\u514b \\\\u5361\\\\u6d1b\\\\u7433\\\\u00b7\\\\u8d6b\\\\u5f17\\\\u65af\\\",\\n\\t\\t\\t\\\"id\\\": \\\"24815502\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u7231\\\\u60c5\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u8be5\\\\u6b7b\\\\u7684\\\\u6b4c\\\\u5fb7\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u57c3\\\\u5229\\\\u4e9a\\\\u65af\\\\u00b7\\\\u7a46\\\\u5df4\\\\u91cc\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u6d1b\\\\u7433\\\\u00b7\\\\u8d6b\\\\u5f17\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u8482\\\\u5a05\\\\u00b7\\\\u91cc\\\\u66fc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u96c5\\\\u5a1c\\\\u00b7\\\\u5e15\\\\u62c9\\\\u65af\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u74e6\\\\u62c9\\\\u00b7\\\\u80e1\\\\u5f17\\\\u8328\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u62c9\\\\u00b7\\\\u54c8\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u514b\\\\u65af\\\\u00b7\\\\u51af\\\\u00b7\\\\u5fb7\\\\u00b7\\\\u683c\\\\u7f57\\\\u672c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83b1\\\\u5a1c\\\\u00b7\\\\u514b\\\\u68f1\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5409\\\\u6cfd\\\\u59c6\\\\u00b7\\\\u57c3\\\\u59c6\\\\u96f7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u62c9\\\\u59c6\\\\u00b7\\\\u963f\\\\u62c9\\\\u7c73\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9c81\\\\u5a1c\\\\u00b7\\\\u683c\\\\u96f7\\\\u7eb3\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u74e6\\\\u4f26\\\\u8482\\\\u5a1c\\\\u00b7\\\\u5e15\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7f57\\\\u5bbe\\\\u00b7\\\\u8d56\\\\u6b47\\\\u5c14\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e54\\\\u7eb3\\\\u65af\\\\u00b7\\\\u970d\\\\u767b\\\\u91cc\\\\u5fb7\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5384\\\\u8fbe\\\\u5c14\\\\u00b7\\\\u4f0a\\\\u8fea\\\\u5179\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c24\\\\u65af\\\\u5947\\\\u00b7\\\\u683c\\\\u62c9\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8d1d\\\\u6069\\\\u5fb7\\\\u00b7\\\\u65af\\\\u7279\\\\u683c\\\\u66fc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6cd5\\\\u91cc\\\\u5fb7\\\\u00b7\\\\u90a6\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"72543c\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.0744336569579288, 0.4703196347031963, 0.8588235294117647],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f7f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.0, 0.009900990099009866, 0.396078431372549],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c3828\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2182749627.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24815502\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24815502\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/24815502\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u535a\\\\u62c9\\\\u00b7\\\\u8fbe\\\\u683c\\\\u7279\\\\u80af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27007175\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/27007175\\\\/interest\\\\/2717849022\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-02-10 13:47:28\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2717849022,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 1931,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\t\\\"value\\\": 6.1\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2017-01-21(\\\\u65af\\\\u5170\\\\u4e39\\\\u65af\\\\u7535\\\\u5f71\\\\u8282)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2463043120.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2463043120.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc\\\\/pics\\\\/vendors\\\\/bilibili.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2017\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2017 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u60ca\\\\u609a \\\\u5192\\\\u9669 \\\\/ \\\\u6bd4\\\\u5c14\\\\u00b7\\\\u6c83\\\\u7279\\\\u68ee \\\\/ \\\\u5c3c\\\\u514b\\\\u00b7\\\\u56fe\\\\u6069 \\\\u6885\\\\u62c9\\\\u00b7\\\\u7f57\\\\u5e0c\\\\u7279\\\\u00b7\\\\u5e93\\\\u59c6\\\\u5df4\\\\u5c3c\\\",\\n\\t\\t\\t\\\"id\\\": \\\"27007175\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u60ca\\\\u609a\\\", \\\"\\\\u5192\\\\u9669\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u6234\\\\u592b\\\\u9020\\\\u4e86\\\\u4e2a\\\\u8ff7\\\\u5bab\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c3c\\\\u514b\\\\u00b7\\\\u56fe\\\\u6069\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6885\\\\u62c9\\\\u00b7\\\\u7f57\\\\u5e0c\\\\u7279\\\\u00b7\\\\u5e93\\\\u59c6\\\\u5df4\\\\u5c3c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e9a\\\\u5f53\\\\u00b7\\\\u5e03\\\\u65af\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8a79\\\\u59c6\\\\u65af\\\\u00b7\\\\u4e4c\\\\u5c14\\\\u73ed\\\\u5c3c\\\\u4e9a\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f17\\\\u5170\\\\u514b\\\\u00b7\\\\u51ef\\\\u63d0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u79d1\\\\u7279\\\\u00b7\\\\u7eb3\\\\u7ef4\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u8482\\\\u82ac\\\\u59ae\\\\u00b7\\\\u963f\\\\u7433\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u65af\\\\u6c40\\\\u00b7\\\\u8303\\\\u5948\\\\u4e1d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u79d1\\\\u7279\\\\u00b7\\\\u514b\\\\u6797\\\\u65af\\\\u57fa\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8482\\\\u83ab\\\\u897f\\\\u00b7\\\\u8bfa\\\\u5fb7\\\\u6e29\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7ea6\\\\u7ff0\\\\u00b7\\\\u8d6b\\\\u5b81\\\\u7518\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u745e\\\\u514b\\\\u00b7\\\\u6b27\\\\u5f17\\\\u987f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u7c73\\\\u62c9\\\\u00b7\\\\u827e\\\\u5c14\\\\u5185\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5fb7\\\\u9c81\\\\u00b7\\\\u5c3c\\\\u52a0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u8482\\\\u5b89\\\\u00b7\\\\u57c3\\\\u514b\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5e03\\\\u91cc\\\\u7279\\\\u59ae\\\\u00b7\\\\u591a\\\\u4f0a\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u897f\\\\u5361\\\\u00b7\\\\u683c\\\\u62c9\\\\u592b\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"725a30\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.10519125683060108, 0.5754716981132075, 0.8313725490196079],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f8f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.2626262626262627, 0.358695652173913, 0.3607843137254902],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c3c20\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2463043120.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27007175\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27007175\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/27007175\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6bd4\\\\u5c14\\\\u00b7\\\\u6c83\\\\u7279\\\\u68ee\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30262334\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/30262334\\\\/interest\\\\/2717685123\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-01-31 15:06:04\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2717685123,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 2188,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.5\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2019-10-26(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2572182952.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2572182952.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5\\\\/pics\\\\/vendors\\\\/migu_video.png\\\", \\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2018\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2018 \\\\/ \\\\u5fb7\\\\u56fd \\\\u5362\\\\u68ee\\\\u5821 \\\\u4e39\\\\u9ea6 \\\\/ \\\\u559c\\\\u5267 \\\\u79d1\\\\u5e7b \\\\u52a8\\\\u753b \\\\/ \\\\u514b\\\\u91cc\\\\u65af\\\\u6258\\\\u5f17\\\\u00b7\\\\u52b3\\\\u6069\\\\u65af\\\\u5766 \\\\u6c83\\\\u5c14\\\\u592b\\\\u5188\\\\u00b7\\\\u52b3\\\\u6069\\\\u65af\\\\u5766 \\\\u8096\\\\u6069\\\\u00b7\\\\u9ea6\\\\u514b\\\\u79d1\\\\u9a6c\\\\u514b \\\\/ \\\\u5361\\\\u52d2\\\\u59c6\\\\u00b7\\\\u9a6c\\\\u6d1b\\\\u5c3c \\\\u5fb7\\\\u83ab\\\\u7279\\\\u00b7\\\\u83ab\\\\u6839\\\\u5c3c\\\\u65af\\\",\\n\\t\\t\\t\\\"id\\\": \\\"30262334\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u79d1\\\\u5e7b\\\", \\\"\\\\u52a8\\\\u753b\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u4e09\\\\u50bb\\\\u95f9\\\\u5730\\\\u7403\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u52d2\\\\u59c6\\\\u00b7\\\\u9a6c\\\\u6d1b\\\\u5c3c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5fb7\\\\u83ab\\\\u7279\\\\u00b7\\\\u83ab\\\\u6839\\\\u5c3c\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4fdd\\\\u7f57\\\\u00b7\\\\u6cf0\\\\u6765\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u7433\\\\u00b7\\\\u7c73\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u82cf\\\\u831c\\\\u00b7\\\\u9c8d\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u739b\\\\u4e3d\\\\u00b7\\\\u9ed8\\\\u91cc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5a01\\\\u5c14\\\\u00b7\\\\u798f\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8389\\\\u00b7\\\\u6c64\\\\u666e\\\\u68ee\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"438aa5\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.5456140350877193, 0.5900621118012421, 0.6313725490196078],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f8f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.47126436781609193, 0.19333333333333338, 0.5882352941176471],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"346a7f\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2572182952.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30262334\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30262334\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/30262334\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u6258\\\\u5f17\\\\u00b7\\\\u52b3\\\\u6069\\\\u65af\\\\u5766\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c83\\\\u5c14\\\\u592b\\\\u5188\\\\u00b7\\\\u52b3\\\\u6069\\\\u65af\\\\u5766\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8096\\\\u6069\\\\u00b7\\\\u9ea6\\\\u514b\\\\u79d1\\\\u9a6c\\\\u514b\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 5.0,\\n\\t\\t\\t\\\"value\\\": 5\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/6729121\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/6729121\\\\/interest\\\\/2687058107\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-01-11 13:53:28\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2687058107,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 57861,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 5.0,\\n\\t\\t\\t\\t\\\"value\\\": 9.5\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2011-09-21(\\\\u7f8e\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1178503927.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p1178503927.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2011\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2011 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u5bb6\\\\u5ead \\\\/ \\\\u6770\\\\u68ee\\\\u00b7\\\\u7ef4\\\\u7eb3 \\\\/ \\\\u827e\\\\u5fb7\\\\u00b7\\\\u5965\\\\u5c3c\\\\u5c14 \\\\u7d22\\\\u83f2\\\\u5a05\\\\u00b7\\\\u7ef4\\\\u52a0\\\\u62c9\\\",\\n\\t\\t\\t\\\"id\\\": \\\"6729121\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u5bb6\\\\u5ead\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u6469\\\\u767b\\\\u5bb6\\\\u5ead  \\\\u7b2c\\\\u4e09\\\\u5b63\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u5fb7\\\\u00b7\\\\u5965\\\\u5c3c\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7d22\\\\u83f2\\\\u5a05\\\\u00b7\\\\u7ef4\\\\u52a0\\\\u62c9\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6731\\\\u4e3d\\\\u00b7\\\\u9c8d\\\\u6e29\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6cf0\\\\u00b7\\\\u5e03\\\\u5229\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u897f\\\\u00b7\\\\u6cf0\\\\u52d2\\\\u00b7\\\\u5f17\\\\u683c\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u745e\\\\u514b\\\\u00b7\\\\u65af\\\\u901a\\\\u65af\\\\u5d14\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91cc\\\\u5fb7\\\\u00b7\\\\u5c24\\\\u56e0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8428\\\\u62c9\\\\u00b7\\\\u6d77\\\\u84dd\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u82ae\\\\u5c14\\\\u00b7\\\\u6e29\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8bfa\\\\u5170\\\\u00b7\\\\u53e4\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91cc\\\\u514b\\\\u00b7\\\\u7f57\\\\u5fb7\\\\u91cc\\\\u683c\\\\u5179\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5965\\\\u5e03\\\\u91cc\\\\u00b7\\\\u5b89\\\\u5fb7\\\\u68ee-\\\\u57c3\\\\u8499\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": false,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"f2f0f0\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.0, 0.008403361344537785, 0.9333333333333333],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f4f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.033333333333333326, 0.021276595744680778, 0.9215686274509803],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"f2f0f0\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1178503927.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/6729121\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/6729121\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/tv\\\\/6729121\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u68ee\\\\u00b7\\\\u7ef4\\\\u7eb3\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24733428\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/24733428\\\\/interest\\\\/2674751702\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-01-03 21:05:15\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2674751702,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 625889,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\t\\t\\\"value\\\": 8.8\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-12-25(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646\\\\/\\\\u7f8e\\\\u56fd\\\\u7f51\\\\u7edc)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2626308994.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2626308994.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/ECPE465QY?type=rank&category=movie&rank_type=film_genre\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 8,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8fd1\\\\u671f\\\\u70ed\\\\u95e8\\\\u7535\\\\u5f71\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u52a8\\\\u753b \\\\u5947\\\\u5e7b \\\\u97f3\\\\u4e50 \\\\/ \\\\u5f7c\\\\u7279\\\\u00b7\\\\u9053\\\\u683c\\\\u7279 \\\\u51ef\\\\u666e\\\\u00b7\\\\u9c8d\\\\u5c14\\\\u65af \\\\/ \\\\u6770\\\\u7c73\\\\u00b7\\\\u798f\\\\u514b\\\\u65af \\\\u8482\\\\u5a1c\\\\u00b7\\\\u83f2\\\",\\n\\t\\t\\t\\\"id\\\": \\\"24733428\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u52a8\\\\u753b\\\", \\\"\\\\u5947\\\\u5e7b\\\", \\\"\\\\u97f3\\\\u4e50\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u5fc3\\\\u7075\\\\u5947\\\\u65c5\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u7c73\\\\u00b7\\\\u798f\\\\u514b\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8482\\\\u5a1c\\\\u00b7\\\\u83f2\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83f2\\\\u5229\\\\u897f\\\\u4e9a\\\\u00b7\\\\u62c9\\\\u65af\\\\u6d77\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u7c73\\\\u5c14-\\\\u5361\\\\u5229\\\\u5e03\\\\u00b7\\\\u6c64\\\\u666e\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6234\\\\u7ef4\\\\u5fb7\\\\u00b7\\\\u8fea\\\\u683c\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u683c\\\\u62c9\\\\u6c49\\\\u59c6\\\\u00b7\\\\u8bfa\\\\u987f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u745e\\\\u5207\\\\u5c14\\\\u00b7\\\\u8c6a\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u8389\\\\u4e1d\\\\u00b7\\\\u5e03\\\\u62c9\\\\u52a0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7406\\\\u67e5\\\\u5fb7\\\\u00b7\\\\u827e\\\\u6b27\\\\u963f\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5510\\\\u5c3c\\\\u5c14\\\\u00b7\\\\u7f57\\\\u6797\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u5409\\\\u62c9\\\\u00b7\\\\u8d1d\\\\u585e\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u6208\\\\u00b7\\\\u970d\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7f57\\\\u5fb7\\\\u838e\\\\u00b7\\\\u743c\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u97e6\\\\u65af\\\\u00b7\\\\u65af\\\\u5854\\\\u8fea\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c99\\\\u57fa\\\\u7eb3\\\\u00b7\\\\u8d3e\\\\u5f17\\\\u91cc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u798f\\\\u743c\\\\u00b7\\\\u8d39\\\\u59c6\\\\u65af\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u9c81\\\\u59c6\\\\u00b7\\\\u683c\\\\u5170\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6cfd\\\\u8bfa\\\\u6bd4\\\\u5a05\\\\u00b7\\\\u8c22\\\\u7f57\\\\u592b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6731\\\\u6069\\\\u00b7\\\\u65af\\\\u594e\\\\u5e03\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u831c\\\\u00b7\\\\u5361\\\\u74e6\\\\u8482\\\\u59ae\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7f57\\\\u7eb3\\\\u5c14\\\\u591a\\\\u00b7\\\\u5fb7\\\\u5c14\\\\u00b7\\\\u5361\\\\u95e8\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"Elisapie Isaac\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u68ee\\\\u00b7\\\\u4f69\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u79d1\\\\u62c9\\\\u00b7\\\\u5c1a\\\\u6ce2\\\\u7c73\\\\u8036\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"4a75a5\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.5873983739837398, 0.5503355704697986, 0.5843137254901961],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f7f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.07894736842105253, 0.0964467005076143, 0.7725490196078432],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"395a7f\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2626308994.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24733428\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/24733428\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/24733428\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f7c\\\\u7279\\\\u00b7\\\\u9053\\\\u683c\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u666e\\\\u00b7\\\\u9c8d\\\\u5c14\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34858078\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/34858078\\\\/interest\\\\/2651195631\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-01-03 14:27:57\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2651195631,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 86958,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\t\\\"value\\\": 7.8\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-12-18(\\\\u97e9\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2628425414.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2628425414.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/ECBE5CBEI?type=rank&category=movie&rank_type=tv_genre\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 7,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8fd1\\\\u671f\\\\u70ed\\\\u95e8\\\\u97e9\\\\u5267\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u97e9\\\\u56fd \\\\/ \\\\u5267\\\\u60c5 \\\\u60ca\\\\u609a \\\\u6050\\\\u6016 \\\\/ \\\\u674e\\\\u5e94\\\\u798f \\\\/ \\\\u5b8b\\\\u5eb7 \\\\u674e\\\\u662f\\\\u82f1\\\",\\n\\t\\t\\t\\\"id\\\": \\\"34858078\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u5267\\\\u60c5\\\", \\\"\\\\u60ca\\\\u609a\\\", \\\"\\\\u6050\\\\u6016\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u751c\\\\u871c\\\\u5bb6\\\\u56ed\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b8b\\\\u5eb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u662f\\\\u82f1\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u5230\\\\u665b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u9635\\\\u90c1\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6734\\\\u73ea\\\\u745b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ad8\\\\u65fb\\\\u793a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91d1\\\\u5357\\\\u7199\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ad8\\\\u5141\\\\u8d1e\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91d1\\\\u7532\\\\u6d19\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u91d1\\\\u76f8\\\\u6d69\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"517267\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.4444444444444444, 0.2903225806451613, 0.12156862745098039],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f9f8\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.11111111111111109, 0.24590163934426235, 0.23921568627450981],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"364c45\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2628425414.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34858078\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34858078\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/tv\\\\/34858078\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u5e94\\\\u798f\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/35207868\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/35207868\\\\/interest\\\\/2673989075\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-01-03 14:27:35\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2673989075,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 9156,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\t\\\"value\\\": 6.3\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-12-30(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2629465650.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2629465650.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u559c\\\\u5267 \\\\u8fd0\\\\u52a8 \\\\/ \\\\u9648\\\\u7fd4 \\\\/ \\\\u9648\\\\u7fd4 \\\\u8611\\\\u83c7\\\\u5934\\\",\\n\\t\\t\\t\\\"id\\\": \\\"35207868\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u8fd0\\\\u52a8\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u9648\\\\u7fd4\\\\u516d\\\\u70b9\\\\u534a\\\\u4e4b\\\\u6c11\\\\u95f4\\\\u9ad8\\\\u624b\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9648\\\\u7fd4\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8611\\\\u83c7\\\\u5934\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5e94\\\\u5b9d\\\\u6797\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6da6\\\\u571f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6bdb\\\\u53f0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u732a\\\\u5c0f\\\\u660e\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u738b\\\\u70b8\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7eaa\\\\u6587\\\\u541b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7c73\\\\u7ebf\\\\u513f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51b7\\\\u6aac\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5434\\\\u5988\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"a5643f\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.05942028985507247, 0.6149732620320856, 0.7333333333333333],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f6f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.06179775280898877, 0.5028248587570622, 0.6941176470588235],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"7f4d31\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2629465650.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/35207868\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/35207868\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/35207868\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9648\\\\u7fd4\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 2.0,\\n\\t\\t\\t\\\"value\\\": 2\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27195078\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/27195078\\\\/interest\\\\/2652621484\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-12-22 13:13:53\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2652621484,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 66877,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 2.5,\\n\\t\\t\\t\\t\\\"value\\\": 4.6\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-09-30(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2619027144.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2619027144.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5\\\\/pics\\\\/vendors\\\\/migu_video.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\", \\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u52a8\\\\u4f5c \\\\/ \\\\u5510\\\\u5b63\\\\u793c \\\\/ \\\\u6210\\\\u9f99 \\\\u6768\\\\u6d0b\\\",\\n\\t\\t\\t\\\"id\\\": \\\"27195078\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u52a8\\\\u4f5c\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u6025\\\\u5148\\\\u950b\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6210\\\\u9f99\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6768\\\\u6d0b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u4f26\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f90\\\\u82e5\\\\u6657\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6bcd\\\\u5176\\\\u5f25\\\\u96c5\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6731\\\\u6b63\\\\u5ef7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u697c\\\\u5b66\\\\u8d24\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u90ed\\\\u82b7\\\\u598d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u57c3\\\\u4e9a\\\\u5fb7\\\\u00b7\\\\u80e1\\\\u62c9\\\\u5c3c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6768\\\\u5efa\\\\u5e73\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5468\\\\u658c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u738b\\\\u5ef6\\\\u9f99\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u738b\\\\u9a79\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5510\\\\u5b63\\\\u793c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"666e72\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.5555555555555555, 0.10526315789473684, 0.2235294117647059],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f8f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.11111111111111112, 0.10526315789473684, 0.4470588235294118],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"44494c\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2619027144.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27195078\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/27195078\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/27195078\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5510\\\\u5b63\\\\u793c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3150816\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/3150816\\\\/interest\\\\/2629991533\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-12-05 15:19:42\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2629991533,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 77175,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.9\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2009-06-01(\\\\u82f1\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p508189927.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p508189927.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2009\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2009 \\\\/ \\\\u82f1\\\\u56fd \\\\/ \\\\u60ac\\\\u7591 \\\\u60ca\\\\u609a \\\\/ \\\\u65af\\\\u56fe\\\\u5c14\\\\u7279\\\\u00b7\\\\u54c8\\\\u6cfd\\\\u5c14\\\\u4e01 \\\\/ \\\\u5362\\\\u514b\\\\u00b7\\\\u6885\\\\u4f2f\\\\u5229 \\\\u79d1\\\\u6797\\\\u00b7\\\\u8428\\\\u8499\\\",\\n\\t\\t\\t\\\"id\\\": \\\"3150816\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u60ac\\\\u7591\\\", \\\"\\\\u60ca\\\\u609a\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u7ec8\\\\u6781\\\\u9762\\\\u8bd5\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5362\\\\u514b\\\\u00b7\\\\u6885\\\\u4f2f\\\\u5229\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u79d1\\\\u6797\\\\u00b7\\\\u8428\\\\u8499\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5409\\\\u7c73\\\\u00b7\\\\u7c73\\\\u65af\\\\u7279\\\\u96f7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5609\\\\u739b\\\\u00b7\\\\u9648\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5a1c\\\\u5854\\\\u8389\\\\u00b7\\\\u8003\\\\u514b\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b9d\\\\u62c9\\\\u96c5\\\\u5a1c\\\\u00b7\\\\u9ea6\\\\u91d1\\\\u6258\\\\u4ec0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u00b7\\\\u51ef\\\\u91cc\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"5b7267\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.4166666666666667, 0.2, 0.0392156862745098],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f9f7\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.08333333333333333, 0.2857142857142857, 0.08235294117647059],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"3d4c44\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p508189927.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3150816\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3150816\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/3150816\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u56fe\\\\u5c14\\\\u7279\\\\u00b7\\\\u54c8\\\\u6cfd\\\\u5c14\\\\u4e01\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34626347\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/34626347\\\\/interest\\\\/2611947415\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-26 09:49:40\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2611947415,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 49118,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\t\\t\\\"value\\\": 8.6\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-09-04(\\\\u7f8e\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2611337609.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2611337609.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/ECFA5DI7Q?type=rank&category=movie&rank_type=tv_genre\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 5,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8fd1\\\\u671f\\\\u70ed\\\\u95e8\\\\u7f8e\\\\u5267\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u52a8\\\\u4f5c \\\\u79d1\\\\u5e7b \\\\/ \\\\u83f2\\\\u5229\\\\u6d66\\\\u00b7\\\\u65af\\\\u683c\\\\u91cc\\\\u897f\\\\u4e9a \\\\u585e\\\\u5df4\\\\u65af\\\\u8482\\\\u5b89\\\\u00b7\\\\u5e2d\\\\u5c14\\\\u74e6 \\\\/ \\\\u5361\\\\u5c14\\\\u00b7\\\\u5384\\\\u672c \\\\u6770\\\\u514b\\\\u00b7\\\\u594e\\\\u5fb7\\\",\\n\\t\\t\\t\\\"id\\\": \\\"34626347\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u52a8\\\\u4f5c\\\", \\\"\\\\u79d1\\\\u5e7b\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u9ed1\\\\u888d\\\\u7ea0\\\\u5bdf\\\\u961f \\\\u7b2c\\\\u4e8c\\\\u5b63\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u5c14\\\\u00b7\\\\u5384\\\\u672c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u514b\\\\u00b7\\\\u594e\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u4e1c\\\\u5c3c\\\\u00b7\\\\u65af\\\\u5854\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u7433\\\\u00b7\\\\u83ab\\\\u91cc\\\\u4e9a\\\\u8482\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u591a\\\\u7c73\\\\u59ae\\\\u514b\\\\u00b7\\\\u9ea6\\\\u514b\\\\u827e\\\\u4e3d\\\\u6208\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u897f\\\\u00b7\\\\u5384\\\\u820d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u62c9\\\\u5179\\\\u00b7\\\\u963f\\\\u9686\\\\u7d22\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5207\\\\u65af\\\\u00b7\\\\u514b\\\\u52b3\\\\u798f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6258\\\\u9ed8\\\\u00b7\\\\u5361\\\\u84ec\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u4f26\\\\u00b7\\\\u798f\\\\u539f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5185\\\\u68ee\\\\u00b7\\\\u7c73\\\\u5207\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u853b\\\\u78a7\\\\u00b7\\\\u7c73\\\\u7eb3\\\\u83f2\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u73ca\\\\u7279\\\\u5c14\\\\u00b7\\\\u8303\\\\u5723\\\\u6ed5\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u59ae\\\\u5361\\\\u00b7\\\\u57c3\\\\u5229\\\\u5965\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u96c5\\\\u00b7\\\\u5361\\\\u4ec0\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83b1\\\\u62c9\\\\u00b7\\\\u7f57\\\\u5bbe\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e54\\\\u4e39\\\\u5a1c\\\\u00b7\\\\u62c9\\\\u8339\\\\u74e6\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5409\\\\u59c6\\\\u00b7\\\\u6bd4\\\\u5f17\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5468\\\\u8c6a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u6885\\\\u4f26\\\\u00b7\\\\u514b\\\\u7f57\\\\u7ef4\\\\u8482\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u52b3\\\\u8fea\\\\u5a05\\\\u00b7\\\\u591a\\\\u7c73\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8d3e\\\\u68ee\\\\u00b7\\\\u52a0\\\\u91cc-\\\\u65af\\\\u5766\\\\u798f\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8096\\\\u6069\\\\u00b7\\\\u963f\\\\u4ec0\\\\u83ab\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"a50c0c\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.0, 0.9256756756756758, 0.5803921568627451],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f4f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.0, 0.39864864864864874, 0.5803921568627451],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"7f0909\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2611337609.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34626347\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34626347\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/tv\\\\/34626347\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83f2\\\\u5229\\\\u6d66\\\\u00b7\\\\u65af\\\\u683c\\\\u91cc\\\\u897f\\\\u4e9a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u585e\\\\u5df4\\\\u65af\\\\u8482\\\\u5b89\\\\u00b7\\\\u5e2d\\\\u5c14\\\\u74e6\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3703650\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/3703650\\\\/interest\\\\/2530344536\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-22 22:01:05\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2530344536,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 97399,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\t\\t\\\"value\\\": 8.6\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2019-07-26(\\\\u7f8e\\\\u56fd)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2558948000.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2558948000.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/3770?type=rank&category=movie\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 9,\\n\\t\\t\\t\\t\\\"title\\\": \\\"2019\\\\u8bc4\\\\u5206\\\\u6700\\\\u9ad8\\\\u82f1\\\\u7f8e\\\\u65b0\\\\u5267\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2019\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2019 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u52a8\\\\u4f5c \\\\u79d1\\\\u5e7b \\\\u72af\\\\u7f6a \\\\/ \\\\u83f2\\\\u5229\\\\u6d66\\\\u00b7\\\\u65af\\\\u683c\\\\u91cc\\\\u897f\\\\u4e9a \\\\u4e39\\\\u5c3c\\\\u5c14\\\\u00b7\\\\u827e\\\\u63d0\\\\u5965\\\\u65af \\\\u827e\\\\u529b\\\\u514b\\\\u00b7\\\\u514b\\\\u83b1\\\\u666e\\\\u79d1 \\\\u8a79\\\\u59ae\\\\u5f17\\\\u00b7\\\\u5f6d \\\\u65af\\\\u7279\\\\u51e1\\\\u00b7\\\\u65bd\\\\u74e6\\\\u8328 \\\\u9a6c\\\\u7279\\\\u00b7\\\\u6c99\\\\u514b\\\\u66fc \\\\u5f17\\\\u96f7\\\\u5fb7\\\\u00b7\\\\u6258\\\\u8036 \\\\u4e39\\\\u00b7\\\\u7279\\\\u62c9\\\\u4ea8\\\\u4f2f\\\\u683c \\\\/ \\\\u5361\\\\u5c14\\\\u00b7\\\\u5384\\\\u672c \\\\u827e\\\\u7433\\\\u00b7\\\\u83ab\\\\u91cc\\\\u4e9a\\\\u8482\\\",\\n\\t\\t\\t\\\"id\\\": \\\"3703650\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u52a8\\\\u4f5c\\\", \\\"\\\\u79d1\\\\u5e7b\\\", \\\"\\\\u72af\\\\u7f6a\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u9ed1\\\\u888d\\\\u7ea0\\\\u5bdf\\\\u961f \\\\u7b2c\\\\u4e00\\\\u5b63\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5361\\\\u5c14\\\\u00b7\\\\u5384\\\\u672c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u7433\\\\u00b7\\\\u83ab\\\\u91cc\\\\u4e9a\\\\u8482\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u514b\\\\u00b7\\\\u594e\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u4e1c\\\\u5c3c\\\\u00b7\\\\u65af\\\\u5854\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u591a\\\\u7c73\\\\u59ae\\\\u514b\\\\u00b7\\\\u9ea6\\\\u514b\\\\u827e\\\\u4e3d\\\\u6208\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u897f\\\\u00b7\\\\u5384\\\\u820d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5207\\\\u65af\\\\u00b7\\\\u514b\\\\u52b3\\\\u798f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6258\\\\u9ed8\\\\u00b7\\\\u5361\\\\u84ec\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u4f26\\\\u00b7\\\\u798f\\\\u539f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5185\\\\u68ee\\\\u00b7\\\\u7c73\\\\u5207\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4f0a\\\\u4e3d\\\\u838e\\\\u767d\\\\u00b7\\\\u82cf\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u62c9\\\\u5179\\\\u00b7\\\\u963f\\\\u9686\\\\u7d22\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8a79\\\\u59ae\\\\u5f17\\\\u00b7\\\\u827e\\\\u65af\\\\u6ce2\\\\u897f\\\\u591a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u897f\\\\u8499\\\\u00b7\\\\u4f69\\\\u5409\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8096\\\\u6069\\\\u00b7\\\\u672c\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u00b7\\\\u5e93\\\\u8428\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u8482\\\\u5b89\\\\u00b7\\\\u51ef\\\\u8036\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u4e1d\\\\u00b7\\\\u8428\\\\u5c14\\\\u76d6\\\\u7f57\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u59ae\\\\u5361\\\\u00b7\\\\u57c3\\\\u5229\\\\u5965\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u963f\\\\u5386\\\\u514b\\\\u65af\\\\u00b7\\\\u54c8\\\\u8d5b\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7c73\\\\u4ec0\\\\u5361\\\\u00b7\\\\u7279\\\\u535a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e54\\\\u4e39\\\\u5a1c\\\\u00b7\\\\u62c9\\\\u8339\\\\u74e6\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u5c14\\\\u79d1\\\\u59c6\\\\u00b7\\\\u5df4\\\\u96f7\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5e03\\\\u5217\\\\u5854\\\\u5c3c\\\\u00b7\\\\u827e\\\\u4f26\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5409\\\\u5b89\\\\u5361\\\\u7f57\\\\u00b7\\\\u57c3\\\\u65af\\\\u6ce2\\\\u897f\\\\u6258\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c3c\\\\u53e4\\\\u62c9\\\\u00b7\\\\u79d1\\\\u96f7\\\\u4e9a\\\\u00b7\\\\u8fbe\\\\u59c6\\\\u5f97\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u79d1\\\\u7279\\\\u00b7\\\\u6c64\\\\u666e\\\\u68ee\\\\u00b7\\\\u8d1d\\\\u514b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u73ca\\\\u7279\\\\u5c14\\\\u00b7\\\\u8303\\\\u5723\\\\u6ed5\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5927\\\\u536b\\\\u00b7\\\\u5b89\\\\u5fb7\\\\u9c81\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5927\\\\u536b\\\\u00b7\\\\u745e\\\\u52d2\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5e03\\\\u96f7\\\\u4e39\\\\u00b7\\\\u8d1d\\\\u585e\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7ea6\\\\u7ff0\\\\u00b7\\\\u9053\\\\u66fc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6d77\\\\u5229\\\\u00b7\\\\u4e54\\\\u00b7\\\\u5965\\\\u65af\\\\u8499\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83b1\\\\u62c9\\\\u00b7\\\\u7f57\\\\u5bbe\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6bd4\\\\u5229\\\\u00b7\\\\u8d5e\\\\u6069\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8d3e\\\\u767b\\\\u00b7\\\\u9a6c\\\\u4e01\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4fdd\\\\u5229\\\\u8bfa\\\\u00b7\\\\u52aa\\\\u5185\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u5854\\\\u00b7\\\\u5df4\\\\u79d1\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5fb7\\\\u4ec0\\\\u4f0a\\\\u00b7\\\\u5e15\\\\u8fbe\\\\u4e9a\\\\u5947\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"722a25\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.010101010101010091, 0.6700507614213198, 0.7725490196078432],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f5f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.9959349593495934, 0.5616438356164384, 0.28627450980392155],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c1c19\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2558948000.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3703650\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/3703650\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/tv\\\\/3703650\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"tv\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u83f2\\\\u5229\\\\u6d66\\\\u00b7\\\\u65af\\\\u683c\\\\u91cc\\\\u897f\\\\u4e9a\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e39\\\\u5c3c\\\\u5c14\\\\u00b7\\\\u827e\\\\u63d0\\\\u5965\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u827e\\\\u529b\\\\u514b\\\\u00b7\\\\u514b\\\\u83b1\\\\u666e\\\\u79d1\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8a79\\\\u59ae\\\\u5f17\\\\u00b7\\\\u5f6d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u65af\\\\u7279\\\\u51e1\\\\u00b7\\\\u65bd\\\\u74e6\\\\u8328\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u7279\\\\u00b7\\\\u6c99\\\\u514b\\\\u66fc\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f17\\\\u96f7\\\\u5fb7\\\\u00b7\\\\u6258\\\\u8036\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e39\\\\u00b7\\\\u7279\\\\u62c9\\\\u4ea8\\\\u4f2f\\\\u683c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30401849\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/30401849\\\\/interest\\\\/2611237148\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-22 15:58:34\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2611237148,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 74275,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\t\\\"value\\\": 7.7\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-08-19(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2616349563.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2616349563.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/EC3UOBDQY?type=rank&category=movie&rank_type=film_genre\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 11,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8fd1\\\\u671f\\\\u70ed\\\\u95e8\\\\u52a8\\\\u753b\\\\u7247\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\", \\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5\\\\/pics\\\\/vendors\\\\/migu_video.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u52a8\\\\u753b \\\\u5947\\\\u5e7b \\\\/ \\\\u4e39\\\\u00b7\\\\u65af\\\\u574e\\\\u9686 \\\\/ \\\\u6c64\\\\u59c6\\\\u00b7\\\\u8d6b\\\\u5170\\\\u5fb7 \\\\u514b\\\\u91cc\\\\u65af\\\\u00b7\\\\u5e15\\\\u62c9\\\\u7279\\\",\\n\\t\\t\\t\\\"id\\\": \\\"30401849\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u52a8\\\\u753b\\\", \\\"\\\\u5947\\\\u5e7b\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"1\\\\/2\\\\u7684\\\\u9b54\\\\u6cd5\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c64\\\\u59c6\\\\u00b7\\\\u8d6b\\\\u5170\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u00b7\\\\u5e15\\\\u62c9\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8331\\\\u8389\\\\u4e9a\\\\u00b7\\\\u8def\\\\u6613\\\\u65af-\\\\u5fb7\\\\u745e\\\\u5f17\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5965\\\\u514b\\\\u5854\\\\u7ef4\\\\u4e9a\\\\u00b7\\\\u65af\\\\u5bbe\\\\u745f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6885\\\\u5c14\\\\u00b7\\\\u7f57\\\\u5fb7\\\\u91cc\\\\u683c\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u5c14\\\\u00b7\\\\u67cf\\\\u6d77\\\\u83ab\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e3d\\\\u5a1c\\\\u00b7\\\\u7ef4\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ec4\\\\u963f\\\\u4e3d\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u683c\\\\u857e\\\\u00b7\\\\u5fb7\\\\u4e3d\\\\u65af\\\\u52d2\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5d14\\\\u831c\\\\u00b7\\\\u5c24\\\\u739b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7ef4\\\\u5c14\\\\u6469\\\\u00b7\\\\u74e6\\\\u5c14\\\\u5fb7\\\\u62c9\\\\u739b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e54\\\\u6cbb\\\\u00b7\\\\u666e\\\\u8428\\\\u62c9\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7ea6\\\\u7ff0\\\\u00b7\\\\u62c9\\\\u5c91\\\\u8d1d\\\\u683c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"a59399\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.9444444444444444, 0.11009174311926606, 0.8549019607843137],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f4f6\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.6767676767676768, 0.24812030075187977, 0.5215686274509804],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"7f7176\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img2.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2616349563.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30401849\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/30401849\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/30401849\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4e39\\\\u00b7\\\\u65af\\\\u574e\\\\u9686\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25907124\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/25907124\\\\/interest\\\\/2607035344\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-20 12:48:19\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2607035344,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 505387,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.8\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2020-10-01(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2621219978.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2621219978.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/EC3UOBDQY?type=rank&category=movie&rank_type=film_genre\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 6,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u8fd1\\\\u671f\\\\u70ed\\\\u95e8\\\\u52a8\\\\u753b\\\\u7247\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\", \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/88a62f5e0cf9981c910e60f4421c3e66aac2c9bc\\\\/pics\\\\/vendors\\\\/bilibili.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u5267\\\\u60c5 \\\\u52a8\\\\u753b \\\\u5947\\\\u5e7b \\\\/ \\\\u7a0b\\\\u817e \\\\u674e\\\\u709c \\\\/ \\\\u90d1\\\\u5e0c \\\\u6768\\\\u51dd\\\",\\n\\t\\t\\t\\\"id\\\": \\\"25907124\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u5267\\\\u60c5\\\", \\\"\\\\u52a8\\\\u753b\\\", \\\"\\\\u5947\\\\u5e7b\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u59dc\\\\u5b50\\\\u7259\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u90d1\\\\u5e0c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6768\\\\u51dd\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u56fe\\\\u7279\\\\u54c8\\\\u8499\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u960e\\\\u4e48\\\\u4e48\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b63\\\\u51a0\\\\u9716\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u59dc\\\\u5e7f\\\\u6d9b\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"564472\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.7307692307692308, 0.40625, 0.25098039215686274],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f6f4f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.6590909090909091, 0.2222222222222223, 0.38823529411764707],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"392d4c\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2621219978.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25907124\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25907124\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/25907124\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7a0b\\\\u817e\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u709c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25850442\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/25850442\\\\/interest\\\\/2602160272\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-18 12:53:12\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2602160272,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 3965,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.5\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2018-11-29(\\\\u7f8e\\\\u56fd\\\\u70b9\\\\u6620)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2539365148.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2539365148.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [],\\n\\t\\t\\t\\\"year\\\": \\\"2018\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2018 \\\\/ \\\\u7f8e\\\\u56fd \\\\/ \\\\u5267\\\\u60c5 \\\\u5192\\\\u9669 \\\\/ \\\\u5b89\\\\u8fea\\\\u00b7\\\\u745f\\\\u91d1\\\\u65af \\\\/ \\\\u672c\\\\u5c3c\\\\u8fea\\\\u514b\\\\u7279\\\\u00b7\\\\u5eb7\\\\u4f2f\\\\u5df4\\\\u5947 \\\\u514b\\\\u91cc\\\\u65af\\\\u8482\\\\u5b89\\\\u00b7\\\\u8d1d\\\\u5c14\\\",\\n\\t\\t\\t\\\"id\\\": \\\"25850442\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u5267\\\\u60c5\\\", \\\"\\\\u5192\\\\u9669\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u68ee\\\\u6797\\\\u4e4b\\\\u5b50\\\\u6bdb\\\\u514b\\\\u5229\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u672c\\\\u5c3c\\\\u8fea\\\\u514b\\\\u7279\\\\u00b7\\\\u5eb7\\\\u4f2f\\\\u5df4\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u91cc\\\\u65af\\\\u8482\\\\u5b89\\\\u00b7\\\\u8d1d\\\\u5c14\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u51ef\\\\u7279\\\\u00b7\\\\u5e03\\\\u5170\\\\u5207\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u8fea\\\\u00b7\\\\u745f\\\\u91d1\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5a1c\\\\u5965\\\\u7c73\\\\u00b7\\\\u54c8\\\\u91cc\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6c64\\\\u59c6\\\\u00b7\\\\u970d\\\\u5170\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6770\\\\u514b\\\\u00b7\\\\u83b1\\\\u8bfa\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u7f57\\\\u7ff0\\\\u00b7\\\\u660c\\\\u5fb7\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u57c3\\\\u8fea\\\\u00b7\\\\u9a6c\\\\u68ee\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f7c\\\\u5f97\\\\u00b7\\\\u7a46\\\\u5170\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8299\\\\u857e\\\\u8fbe\\\\u00b7\\\\u5e73\\\\u6258\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u4fee\\\\u00b7\\\\u745e\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8def\\\\u6613\\\\u65af\\\\u00b7\\\\u963f\\\\u4ec0\\\\u4f2f\\\\u6069\\\\u00b7\\\\u745f\\\\u91d1\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"724937\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.048672566371681436, 0.5136363636363637, 0.8627450980392157],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f6f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.013888888888888914, 0.3364485981308411, 0.4196078431372549],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c3025\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": false,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2539365148.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25850442\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/25850442\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/25850442\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5b89\\\\u8fea\\\\u00b7\\\\u745f\\\\u91d1\\\\u65af\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 2.0,\\n\\t\\t\\t\\\"value\\\": 2\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1308110\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/1308110\\\\/interest\\\\/2589145415\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-16 13:21:46\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2589145415,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 21079,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\t\\\"value\\\": 6.0\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2003-08-15(\\\\u4e2d\\\\u56fd\\\\u9999\\\\u6e2f)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1971070670.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p1971070670.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2003\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2003 \\\\/ \\\\u4e2d\\\\u56fd\\\\u9999\\\\u6e2f \\\\u7f8e\\\\u56fd \\\\/ \\\\u559c\\\\u5267 \\\\u52a8\\\\u4f5c \\\\u5947\\\\u5e7b \\\\/ \\\\u9648\\\\u5609\\\\u4e0a \\\\/ \\\\u6210\\\\u9f99 \\\\u514b\\\\u83b1\\\\u5c14\\\\u00b7\\\\u5f17\\\\u5170\\\\u59ae\\\",\\n\\t\\t\\t\\\"id\\\": \\\"1308110\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u559c\\\\u5267\\\", \\\"\\\\u52a8\\\\u4f5c\\\", \\\"\\\\u5947\\\\u5e7b\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u98de\\\\u9f99\\\\u518d\\\\u751f\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6210\\\\u9f99\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u514b\\\\u83b1\\\\u5c14\\\\u00b7\\\\u5f17\\\\u5170\\\\u59ae\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u674e\\\\u00b7\\\\u4f0a\\\\u4e07\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9ec4\\\\u79cb\\\\u751f\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u949f\\\\u4e3d\\\\u7f07\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5218\\\\u5146\\\\u94ed\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u8c22\\\\u9706\\\\u950b\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9648\\\\u51a0\\\\u5e0c\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f20\\\\u575a\\\\u5ead\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"586172\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.6111111111111112, 0.22784810126582278, 0.30980392156862746],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f4f6f9\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.04166666666666652, 0.06504065040650406, 0.4823529411764706],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"3b404c\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1971070670.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1308110\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1308110\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/1308110\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9648\\\\u5609\\\\u4e0a\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}, {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 3.0,\\n\\t\\t\\t\\\"value\\\": 3\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1482077\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/1482077\\\\/interest\\\\/2599214673\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"charts\\\": [],\\n\\t\\t\\\"platforms\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2020-11-14 11:41:11\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"id\\\": 2599214673,\\n\\t\\t\\\"is_private\\\": false,\\n\\t\\t\\\"subject\\\": {\\n\\t\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\t\\\"count\\\": 98517,\\n\\t\\t\\t\\t\\\"max\\\": 10,\\n\\t\\t\\t\\t\\\"star_count\\\": 3.5,\\n\\t\\t\\t\\t\\\"value\\\": 6.7\\n\\t\\t\\t},\\n\\t\\t\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\t\\t\\\"pubdate\\\": [\\\"2007-06-02(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\t\\t\\\"pic\\\": {\\n\\t\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1551671540.jpg\\\",\\n\\t\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p1551671540.jpg\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"honor_infos\\\": [{\\n\\t\\t\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/7492?type=rank&category=movie\\\",\\n\\t\\t\\t\\t\\\"rank\\\": 16,\\n\\t\\t\\t\\t\\\"title\\\": \\\"\\\\u6fb3\\\\u5927\\\\u5229\\\\u4e9a\\\\u52a8\\\\u4f5c\\\\u7247\\\\u699c\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"is_show\\\": false,\\n\\t\\t\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\", \\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/8286b9b5240f35c7e59e1b1768cd2ccf0467cde5\\\\/pics\\\\/vendors\\\\/migu_video.png\\\", \\\"https://img1.doubanio.com\\\\/f\\\\/frodo\\\\/9f302f2ad003c8c607cb79b447aca789a01142b2\\\\/pics\\\\/vendors\\\\/youku.png\\\"],\\n\\t\\t\\t\\\"year\\\": \\\"2007\\\",\\n\\t\\t\\t\\\"card_subtitle\\\": \\\"2007 \\\\/ \\\\u7f8e\\\\u56fd \\\\u6fb3\\\\u5927\\\\u5229\\\\u4e9a \\\\/ \\\\u52a8\\\\u4f5c \\\\u5947\\\\u5e7b \\\\u60ca\\\\u609a \\\\/ \\\\u9a6c\\\\u514b\\\\u00b7\\\\u65af\\\\u8482\\\\u6587\\\\u00b7\\\\u7ea6\\\\u7ff0\\\\u900a \\\\/ \\\\u5c3c\\\\u53e4\\\\u62c9\\\\u65af\\\\u00b7\\\\u51ef\\\\u5947 \\\\u4f0a\\\\u5a03\\\\u00b7\\\\u95e8\\\\u5fb7\\\\u65af\\\",\\n\\t\\t\\t\\\"id\\\": \\\"1482077\\\",\\n\\t\\t\\t\\\"genres\\\": [\\\"\\\\u52a8\\\\u4f5c\\\", \\\"\\\\u5947\\\\u5e7b\\\", \\\"\\\\u60ca\\\\u609a\\\"],\\n\\t\\t\\t\\\"title\\\": \\\"\\\\u7075\\\\u9b42\\\\u6218\\\\u8f66\\\",\\n\\t\\t\\t\\\"is_released\\\": true,\\n\\t\\t\\t\\\"actors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c3c\\\\u53e4\\\\u62c9\\\\u65af\\\\u00b7\\\\u51ef\\\\u5947\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u4f0a\\\\u5a03\\\\u00b7\\\\u95e8\\\\u5fb7\\\\u65af\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5f7c\\\\u5f97\\\\u00b7\\\\u65b9\\\\u8fbe\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u5c71\\\\u59c6\\\\u00b7\\\\u827e\\\\u91cc\\\\u5965\\\\u7279\\\"\\n\\t\\t\\t}, {\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u97e6\\\\u65af\\\\u00b7\\\\u672c\\\\u7279\\\\u5229\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"color_scheme\\\": {\\n\\t\\t\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\t\\t\\\"primary_color_light\\\": \\\"724727\\\",\\n\\t\\t\\t\\t\\\"_base_color\\\": [0.07191780821917805, 0.6576576576576576, 0.8705882352941177],\\n\\t\\t\\t\\t\\\"secondary_color\\\": \\\"f9f7f4\\\",\\n\\t\\t\\t\\t\\\"_avg_color\\\": [0.04292929292929291, 0.5789473684210527, 0.4470588235294118],\\n\\t\\t\\t\\t\\\"primary_color_dark\\\": \\\"4c2f1a\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"has_linewatch\\\": true,\\n\\t\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p1551671540.jpg\\\",\\n\\t\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1482077\\\\/\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/1482077\\\\/\\\",\\n\\t\\t\\t\\\"release_date\\\": null,\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/1482077\\\",\\n\\t\\t\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\t\\t\\\"directors\\\": [{\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u514b\\\\u00b7\\\\u65af\\\\u8482\\\\u6587\\\\u00b7\\\\u7ea6\\\\u7ff0\\\\u900a\\\"\\n\\t\\t\\t}],\\n\\t\\t\\t\\\"article_intros\\\": [],\\n\\t\\t\\t\\\"null_rating_reason\\\": \\\"\\\"\\n\\t\\t}\\n\\t}]\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"774ece41-f633-4f49-bb29-86987ebb2858\",\"ruleName\":\"标记为看过\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/movie/[0-9]+/done\",\"filterId\":\"b5984354-fdf4-4bb0-b657-d74edc6ac97b\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"comment\\\": \\\"\\\",\\n    \\\"index\\\": 411,\\n    \\\"sharing_text\\\": \\\"https://movie.douban.com/subject/3439312/ 来自@豆瓣App\\\",\\n    \\\"rating\\\": null,\\n    \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject/3439312/interest/2783491146\\\",\\n    \\\"tags\\\": [],\\n    \\\"is_private\\\": false,\\n    \\\"charts\\\": [],\\n    \\\"platforms\\\": [],\\n    \\\"vote_count\\\": 0,\\n    \\\"create_time\\\": \\\"2021-03-10 18:39:40\\\",\\n    \\\"status\\\": \\\"done\\\",\\n    \\\"user\\\": {\\n        \\\"loc\\\": {\\n            \\\"id\\\": \\\"118254\\\",\\n            \\\"name\\\": \\\"武汉\\\",\\n            \\\"uid\\\": \\\"wuhan\\\"\\n        },\\n        \\\"kind\\\": \\\"user\\\",\\n        \\\"name\\\": \\\"Honye\\\",\\n        \\\"reg_time\\\": \\\"2017-03-11 23:09:39\\\",\\n        \\\"url\\\": \\\"https://www.douban.com/people/158948115/\\\",\\n        \\\"uri\\\": \\\"douban://douban.com/user/158948115\\\",\\n        \\\"id\\\": \\\"158948115\\\",\\n        \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up158948115-2.jpg\\\",\\n        \\\"type\\\": \\\"user\\\",\\n        \\\"avatar_side_icon\\\": \\\"\\\",\\n        \\\"uid\\\": \\\"158948115\\\"\\n    },\\n    \\\"popular_tags\\\": [\\n        \\\"2021\\\",\\n        \\\"美国\\\",\\n        \\\"动画\\\",\\n        \\\"美国电影\\\",\\n        \\\"翻拍\\\",\\n        \\\"电影\\\",\\n        \\\"猫和老鼠\\\",\\n        \\\"华纳\\\",\\n        \\\"经典\\\",\\n        \\\"改编\\\"\\n    ],\\n    \\\"quick_mark\\\": false,\\n    \\\"done_index\\\": 431,\\n    \\\"id\\\": 2783491146,\\n    \\\"badges\\\": [],\\n    \\\"subject\\\": {\\n        \\\"rating\\\": {\\n            \\\"count\\\": 25920,\\n            \\\"max\\\": 10,\\n            \\\"star_count\\\": 2.5,\\n            \\\"value\\\": 5.4\\n        },\\n        \\\"controversy_reason\\\": \\\"\\\",\\n        \\\"pubdate\\\": [\\n            \\\"2021-02-26(美国/中国大陆)\\\"\\n        ],\\n        \\\"pic\\\": {\\n            \\\"large\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632043260.jpg\\\",\\n            \\\"normal\\\": \\\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2632043260.jpg\\\"\\n        },\\n        \\\"honor_infos\\\": [],\\n        \\\"is_show\\\": false,\\n        \\\"vendor_icons\\\": [],\\n        \\\"year\\\": \\\"2021\\\",\\n        \\\"card_subtitle\\\": \\\"2021 / 英国 法国 德国 美国 / 喜剧 动画 冒险 / 蒂姆·斯托瑞 / 科洛·莫瑞兹 迈克尔·佩纳\\\",\\n        \\\"id\\\": \\\"3439312\\\",\\n        \\\"genres\\\": [\\n            \\\"喜剧\\\",\\n            \\\"动画\\\",\\n            \\\"冒险\\\"\\n        ],\\n        \\\"title\\\": \\\"猫和老鼠\\\",\\n        \\\"is_released\\\": true,\\n        \\\"actors\\\": [\\n            {\\n                \\\"name\\\": \\\"科洛·莫瑞兹\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"迈克尔·佩纳\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"郑肯\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"科林·乔斯特\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"乔丹·博尔格\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"罗伯·德兰尼\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"克里斯蒂娜·钟\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"布赖恩·斯特帕尼克\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"帕拉维·沙尔达\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"卡米拉·阿维森\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"克丽·麦克莱恩\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"卡米拉·拉瑟福德\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"泰·赫尔利\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"丹尼尔·阿德博伊加\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"乔蕾·科斯\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"丹尼尔·厄根\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"伯纳多·桑托斯\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"乔·伯恩\\\"\\n            },\\n            {\\n                \\\"name\\\": \\\"乔基姆·斯卡利\\\"\\n            }\\n        ],\\n        \\\"color_scheme\\\": {\\n            \\\"is_dark\\\": true,\\n            \\\"primary_color_light\\\": \\\"a57b5a\\\",\\n            \\\"_base_color\\\": [\\n                0.07228915662650602,\\n                0.453551912568306,\\n                0.7176470588235294\\n            ],\\n            \\\"secondary_color\\\": \\\"f9f7f4\\\",\\n            \\\"_avg_color\\\": [\\n                0.065359477124183,\\n                0.3090909090909091,\\n                0.6470588235294118\\n            ],\\n            \\\"primary_color_dark\\\": \\\"7f5e45\\\"\\n        },\\n        \\\"type\\\": \\\"movie\\\",\\n        \\\"has_linewatch\\\": false,\\n        \\\"cover_url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632043260.jpg\\\",\\n        \\\"sharing_url\\\": \\\"https://movie.douban.com/subject/3439312/\\\",\\n        \\\"url\\\": \\\"https://movie.douban.com/subject/3439312/\\\",\\n        \\\"release_date\\\": null,\\n        \\\"uri\\\": \\\"douban://douban.com/movie/3439312\\\",\\n        \\\"subtype\\\": \\\"movie\\\",\\n        \\\"directors\\\": [\\n            {\\n                \\\"name\\\": \\\"蒂姆·斯托瑞\\\"\\n            }\\n        ],\\n        \\\"article_intros\\\": [],\\n        \\\"null_rating_reason\\\": \\\"\\\"\\n    }\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"0f14d844-0cde-4256-ba23-d4abc9983fa7\",\"ruleName\":\"短评列表\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/movie/[0-9]+/interests\",\"filterId\":\"11fe8ed9-c342-435c-8527-28bf038357ec\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 2,\\n    \\\"start\\\": 0,\\n    \\\"total\\\": 924,\\n    \\\"wechat_timeline_share\\\": \\\"screenshot\\\",\\n    \\\"interests\\\": [\\n        {\\n            \\\"comment\\\": \\\"章子怡演哥斯拉还是演金刚。。\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/movie/26613692/interest/1342986246\\\",\\n            \\\"is_voted\\\": false,\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26613692/interest/1342986246\\\",\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 574,\\n            \\\"create_time\\\": \\\"2018-03-17 23:22:10\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"user\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"hongkong\\\",\\n                    \\\"id\\\": \\\"108090\\\",\\n                    \\\"name\\\": \\\"中国香港\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"followed\\\": false,\\n                \\\"name\\\": \\\"熵\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/92068045/\\\",\\n                \\\"gender\\\": \\\"M\\\",\\n                \\\"reg_time\\\": \\\"2014-07-02 18:07:51\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/92068045\\\",\\n                \\\"remark\\\": \\\"\\\",\\n                \\\"in_blacklist\\\": false,\\n                \\\"uid\\\": \\\"92068045\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"92068045\\\",\\n                \\\"avatar\\\": \\\"https://img9.doubanio.com/icon/up92068045-5.jpg\\\"\\n            },\\n            \\\"recommend_reason\\\": \\\"\\\",\\n            \\\"user_done_desc\\\": \\\"\\\",\\n            \\\"id\\\": \\\"1342986246\\\",\\n            \\\"wechat_timeline_share\\\": \\\"screenshot\\\"\\n        },\\n        {\\n            \\\"comment\\\": \\\"金刚大战哥斯拉：正义黎明\\\",\\n            \\\"rating\\\": null,\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/movie/26613692/interest/1110163433\\\",\\n            \\\"is_voted\\\": false,\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26613692/interest/1110163433\\\",\\n            \\\"platforms\\\": [],\\n            \\\"vote_count\\\": 573,\\n            \\\"create_time\\\": \\\"2016-11-17 17:15:34\\\",\\n            \\\"status\\\": \\\"done\\\",\\n            \\\"user\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"quanzhou\\\",\\n                    \\\"id\\\": \\\"118204\\\",\\n                    \\\"name\\\": \\\"泉州\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"followed\\\": false,\\n                \\\"name\\\": \\\"精神病院主任\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/131733366/\\\",\\n                \\\"gender\\\": \\\"M\\\",\\n                \\\"reg_time\\\": \\\"2015-07-20 01:04:38\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/131733366\\\",\\n                \\\"remark\\\": \\\"\\\",\\n                \\\"in_blacklist\\\": false,\\n                \\\"uid\\\": \\\"131733366\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"131733366\\\",\\n                \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up131733366-12.jpg\\\"\\n            },\\n            \\\"recommend_reason\\\": \\\"\\\",\\n            \\\"user_done_desc\\\": \\\"\\\",\\n            \\\"id\\\": \\\"1110163433\\\",\\n            \\\"wechat_timeline_share\\\": \\\"screenshot\\\"\\n        }\\n    ]\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"af8e62ac-a4f2-4bfa-8151-f36d42372bc7\",\"ruleName\":\"影视详情\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/movie/[0-9]+\\\\?\",\"filterId\":\"b2e0f524-a18e-4a72-81a5-39193b79692a\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n\\t\\\"rating\\\": {\\n\\t\\t\\\"count\\\": 57293,\\n\\t\\t\\\"max\\\": 10,\\n\\t\\t\\\"star_count\\\": 4.5,\\n\\t\\t\\\"value\\\": 8.7\\n\\t},\\n\\t\\\"lineticket_url\\\": \\\"\\\",\\n\\t\\\"controversy_reason\\\": \\\"\\\",\\n\\t\\\"pubdate\\\": [\\\"2020-12-11(\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646)\\\"],\\n\\t\\\"last_episode_number\\\": null,\\n\\t\\\"pic\\\": {\\n\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\"\\n\\t},\\n\\t\\\"vendor_count\\\": 1,\\n\\t\\\"body_bg_color\\\": \\\"f9f6f4\\\",\\n\\t\\\"is_tv\\\": false,\\n\\t\\\"head_info\\\": null,\\n\\t\\\"intro\\\": \\\"\\\\u4e00\\\\u7fa4\\\\u6765\\\\u81ea\\\\u5168\\\\u56fd\\\\u5404\\\\u5730\\\\u7684\\\\u56f0\\\\u5883\\\\u5c11\\\\u5e74\\\\uff0c\\\\u88ab\\\\u9009\\\\u8fdb\\\\u5317\\\\u4eac\\\\u5e02\\\\u90ca\\\\u4e00\\\\u4e2a\\\\u7231\\\\u5fc3\\\\u68d2\\\\u7403\\\\u57fa\\\\u5730\\\\uff0c\\\\u7ec4\\\\u6210\\\\u4e86\\\\u4e00\\\\u652f\\\\u7279\\\\u6b8a\\\\u7684\\\\u68d2\\\\u7403\\\\u961f\\\\uff0c\\\\u8ddf\\\\u774070\\\\u5c81\\\\u4f20\\\\u5947\\\\u6559\\\\u7ec3\\\\u201c\\\\u5e08\\\\u7237\\\\u201d\\\\u4ece\\\\u96f6\\\\u5f00\\\\u59cb\\\\u5b66\\\\u4e60\\\\u6253\\\\u68d2\\\\u7403\\\\u3002 \\\\u5c11\\\\u5e74\\\\u9a6c\\\\u864e\\\\u4ee5\\\\u201c\\\\u523a\\\\u5934\\\\u201d\\\\u72b6\\\\u6001\\\\u95ef\\\\u8fdb\\\\u4e86\\\\u57fa\\\\u5730\\\\uff0c\\\\u5929\\\\u5929\\\\u6253\\\\u67b6\\\\u5e72\\\\u4ed7\\\\uff1b\\\\u800c\\\\u201c\\\\u5143\\\\u8001\\\\u7403\\\\u5458\\\\u201d\\\\u5c0f\\\\u53cc\\\\u5fc3\\\\u601d\\\\u7ec6\\\\u817b\\\\u654f\\\\u611f\\\\uff0c\\\\u5bf9\\\\u672a\\\\u6765\\\\u6ee1\\\\u662f\\\\u6000\\\\u7591\\\\u548c\\\\u4e0d\\\\u786e\\\\u5b9a\\\\u3002\\\\u4e0d\\\\u540c\\\\u5bb6\\\\u5ead\\\\u80cc\\\\u666f\\\\u548c\\\\u5fc3\\\\u6027\\\\u4e60\\\\u60ef\\\\u7684\\\\u5c11\\\\u5e74\\\\u5728\\\\u4e00\\\\u8d77\\\\u8bad\\\\u7ec3\\\\u3001\\\\u751f\\\\u6d3b\\\\uff0c\\\\u4e00\\\\u652f\\\\u68d2\\\\u7403\\\\u68cd\\\\uff0c\\\\u628a\\\\u4ed6\\\\u4eec\\\\u5e26\\\\u8fdb\\\\u65e0\\\\u5c3d\\\\u7684\\\\u51b2\\\\u7a81\\\\u548c\\\\u6b22\\\\u4e50\\\\uff0c\\\\u4e5f\\\\u5e26\\\\u7ed9\\\\u4ed6\\\\u4eec\\\\u4e45\\\\u8fdd\\\\u7684\\\\u70ed\\\\u8840\\\\u4e0e\\\\u68a6\\\\u60f3\\\\u3002 \\\\u51e0\\\\u4e2a\\\\u6708\\\\u540e\\\\uff0c\\\\u4ed6\\\\u4eec\\\\u5c06\\\\u98de\\\\u5f80\\\\u7f8e\\\\u56fd\\\\uff0c\\\\u4ee3\\\\u8868\\\\u4e2d\\\\u56fd\\\\u767b\\\\u4e0a\\\\u4e16\\\\u754c\\\\u5c11\\\\u68d2\\\\u7684\\\\u9876\\\\u7ea7\\\\u8d5b\\\\u573a\\\\uff0c\\\\u4f46\\\\u57fa\\\\u5730\\\\u7684\\\\u7403\\\\u573a\\\\u548c\\\\u5bbf\\\\u820d\\\\u5374\\\\u9762\\\\u4e34\\\\u62c6\\\\u8fc1\\\\u2026\\\\u2026 \\\\u5c11\\\\u5e74\\\\u4eec\\\\u80fd\\\\u5426\\\\u9006\\\\u98ce\\\\u6325\\\\u68d2\\\\uff0c\\\\u53eb\\\\u677f\\\\u81ea\\\\u5df1\\\\u7684\\\\u547d\\\\u8fd0\\\\uff1f\\\",\\n\\t\\\"ticket_price_info\\\": \\\"\\\",\\n\\t\\\"vendor_icons\\\": [\\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\"],\\n\\t\\\"year\\\": \\\"2020\\\",\\n\\t\\\"card_subtitle\\\": \\\"2020 \\\\/ \\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646 \\\\/ \\\\u7eaa\\\\u5f55\\\\u7247 \\\\u8fd0\\\\u52a8 \\\\/ \\\\u8bb8\\\\u6167\\\\u6676 \\\\/ \\\\u9a6c\\\\u864e \\\\u6881\\\\u6b63\\\\u53cc\\\",\\n\\t\\\"forum_info\\\": null,\\n\\t\\\"webisode\\\": null,\\n\\t\\\"id\\\": \\\"34930862\\\",\\n\\t\\\"is_restrictive\\\": false,\\n\\t\\\"gallery_topic_count\\\": 0,\\n\\t\\\"languages\\\": [\\\"\\\\u6c49\\\\u8bed\\\\u666e\\\\u901a\\\\u8bdd\\\"],\\n\\t\\\"genres\\\": [\\\"\\\\u7eaa\\\\u5f55\\\\u7247\\\", \\\"\\\\u8fd0\\\\u52a8\\\"],\\n\\t\\\"can_interact\\\": true,\\n\\t\\\"review_count\\\": 492,\\n\\t\\\"title\\\": \\\"\\\\u68d2\\\\uff01\\\\u5c11\\\\u5e74\\\",\\n\\t\\\"has_linewatch\\\": true,\\n\\t\\\"ugc_tabs\\\": [{\\n\\t\\t\\\"source\\\": \\\"reviews\\\",\\n\\t\\t\\\"type\\\": \\\"review\\\",\\n\\t\\t\\\"title\\\": \\\"\\\\u5f71\\\\u8bc4\\\"\\n\\t}, {\\n\\t\\t\\\"source\\\": \\\"forum_topics\\\",\\n\\t\\t\\\"type\\\": \\\"forum\\\",\\n\\t\\t\\\"title\\\": \\\"\\\\u8ba8\\\\u8bba\\\"\\n\\t}],\\n\\t\\\"forum_topic_count\\\": 157,\\n\\t\\\"webview_info\\\": {},\\n\\t\\\"is_released\\\": true,\\n\\t\\\"vendors\\\": [{\\n\\t\\t\\\"app_uri\\\": \\\"iqiyi:\\\\/\\\\/skynet.douban.com\\\",\\n\\t\\t\\\"grey_icon\\\": \\\"https://img3.doubanio.com\\\\/f\\\\/frodo\\\\/4e4fdeaa34319e8ad48533489b7857dfea5bd31c\\\\/pics\\\\/vendors\\\\/iqiyi_grey.png\\\",\\n\\t\\t\\\"title\\\": \\\"\\\\u7231\\\\u5947\\\\u827a\\\",\\n\\t\\t\\\"promote_desc\\\": \\\"\\\",\\n\\t\\t\\\"app_bundle_id\\\": \\\"com.qiyi.video\\\",\\n\\t\\t\\\"click_tracking\\\": \\\"\\\",\\n\\t\\t\\\"labels\\\": [],\\n\\t\\t\\\"uri\\\": \\\"iqiyi:\\\\/\\\\/mobile\\\\/player?aid=7580166448963700&tvid=7580166448963700&ftype=27&subtype=333\\\",\\n\\t\\t\\\"id\\\": \\\"iqiyi\\\",\\n\\t\\t\\\"episodes_info\\\": \\\"\\\",\\n\\t\\t\\\"url\\\": \\\"http:\\\\/\\\\/www.iqiyi.com\\\\/v_21qpuwqny8o.html?vfm=m_331_dbdy&fv=4904d94982104144a1548dd9040df241\\\",\\n\\t\\t\\\"book_type_cn\\\": \\\"\\\",\\n\\t\\t\\\"book_type\\\": \\\"\\\",\\n\\t\\t\\\"payments\\\": [{\\n\\t\\t\\t\\\"price\\\": \\\"\\\",\\n\\t\\t\\t\\\"description\\\": \\\"\\\",\\n\\t\\t\\t\\\"method\\\": \\\"VIP\\\\u514d\\\\u8d39\\\\u89c2\\\\u770b\\\"\\n\\t\\t}],\\n\\t\\t\\\"payment_desc\\\": \\\"VIP\\\\u514d\\\\u8d39\\\\u89c2\\\\u770b\\\",\\n\\t\\t\\\"pre_release_desc\\\": \\\"\\\",\\n\\t\\t\\\"icon\\\": \\\"https://img9.doubanio.com\\\\/f\\\\/frodo\\\\/634a77c4a77d80a2a4f49ed7aaf0bc076fec7d01\\\\/pics\\\\/vendors\\\\/iqiyi.png\\\",\\n\\t\\t\\\"is_ad\\\": false,\\n\\t\\t\\\"impression_tracking\\\": \\\"\\\",\\n\\t\\t\\\"subject_id\\\": \\\"34930862\\\"\\n\\t}],\\n\\t\\\"actors\\\": [{\\n\\t\\t\\\"name\\\": \\\"\\\\u9a6c\\\\u864e\\\",\\n\\t\\t\\\"roles\\\": [\\\"\\\\u6f14\\\\u5458\\\"],\\n\\t\\t\\\"title\\\": \\\"\\\\u9a6c\\\\u864e\\\\uff08\\\\u540c\\\\u540d\\\\uff09\\\\u4e2d\\\\u56fd,\\\\u5b81\\\\u590f,\\\\u897f\\\\u5409\\\\u5f71\\\\u89c6\\\\u6f14\\\\u5458\\\",\\n\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/celebrity\\\\/1440498\\\\/\\\",\\n\\t\\t\\\"abstract\\\": \\\"\\\\u9a6c\\\\u864e\\\\uff0c\\\\u5f3a\\\\u68d2\\\\u5929\\\\u4f7f\\\\u7231\\\\u5fc3\\\\u68d2\\\\u7403\\\\u57fa\\\\u5730\\\\u7684\\\\u961f\\\\u5458\\\\uff0c\\\\u7eaa\\\\u5f55\\\\u7247\\\\u300a\\\\u68d2\\\\uff01\\\\u5c11\\\\u5e74\\\\u300b\\\\u7684\\\\u4e3b\\\\u89d2\\\\u4e4b\\\\u4e00\\\\u3002\\\\u51fa\\\\u751f\\\\u4e8e\\\\u5b81\\\\u590f\\\\u56de\\\\u65cf\\\\u81ea\\\\u6cbb\\\\u533a\\\\uff0c\\\\u51fa\\\\u751f\\\\u540e\\\\u4e09\\\\u4e2a...\\\",\\n\\t\\t\\\"author\\\": null,\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/celebrity\\\\/1440498?subject_id=35132955\\\",\\n\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594109634.27.jpg\\\",\\n\\t\\t\\\"avatar\\\": {\\n\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594109634.27.jpg\\\",\\n\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594109634.27.jpg\\\"\\n\\t\\t},\\n\\t\\t\\\"type\\\": \\\"celebrity\\\",\\n\\t\\t\\\"id\\\": \\\"1440498\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/celebrity\\\\/1440498\\\\/\\\"\\n\\t}, {\\n\\t\\t\\\"name\\\": \\\"\\\\u6881\\\\u6b63\\\\u53cc\\\",\\n\\t\\t\\\"roles\\\": [\\\"\\\\u6f14\\\\u5458\\\"],\\n\\t\\t\\\"title\\\": \\\"\\\\u6881\\\\u6b63\\\\u53cc\\\\uff08\\\\u540c\\\\u540d\\\\uff09\\\\u6cb3\\\\u5317\\\\u7701\\\\uff0c\\\\u4fdd\\\\u5b9a\\\\u5e02\\\\u5f71\\\\u89c6\\\\u6f14\\\\u5458\\\",\\n\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/celebrity\\\\/1440499\\\\/\\\",\\n\\t\\t\\\"abstract\\\": \\\"\\\\u7eaa\\\\u5f55\\\\u7247\\\\u300a\\\\u68d2\\\\uff01\\\\u5c11\\\\u5e74\\\\u300b\\\\u4e3b\\\\u8981\\\\u62cd\\\\u6444\\\\u5bf9\\\\u8c61\\\\uff0c\\\\u5317\\\\u4eac\\\\u5f3a\\\\u68d2\\\\u5929\\\\u4f7f\\\\u57fa\\\\u5730\\\\u6210\\\\u5458\\\\u4e4b\\\\u4e00\\\\u3002 \\\\u5728\\\\u7eaa\\\\u5f55\\\\u7247\\\\u4e2d\\\\uff0c\\\\u5c0f\\\\u53cc\\\\u5fe7\\\\u90c1\\\\u7075\\\\u52a8\\\\u7684\\\\u795e\\\\u60c5\\\\u548c\\\\u8d85\\\\u8fc7...\\\",\\n\\t\\t\\\"author\\\": null,\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/celebrity\\\\/1440499?subject_id=35133125\\\",\\n\\t\\t\\\"cover_url\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110865.1.jpg\\\",\\n\\t\\t\\\"avatar\\\": {\\n\\t\\t\\t\\\"large\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110865.1.jpg\\\",\\n\\t\\t\\t\\\"normal\\\": \\\"https://img3.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110865.1.jpg\\\"\\n\\t\\t},\\n\\t\\t\\\"type\\\": \\\"celebrity\\\",\\n\\t\\t\\\"id\\\": \\\"1440499\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/celebrity\\\\/1440499\\\\/\\\"\\n\\t}, {\\n\\t\\t\\\"name\\\": \\\"\\\\u5f20\\\\u9526\\\\u65b0\\\",\\n\\t\\t\\\"roles\\\": [\\\"\\\\u6f14\\\\u5458\\\"],\\n\\t\\t\\\"title\\\": \\\"\\\\u5f20\\\\u9526\\\\u65b0\\\\uff08\\\\u540c\\\\u540d\\\\uff09\\\\u5f71\\\\u89c6\\\\u6f14\\\\u5458\\\",\\n\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/celebrity\\\\/1440500\\\\/\\\",\\n\\t\\t\\\"abstract\\\": \\\"\\\",\\n\\t\\t\\\"author\\\": null,\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/celebrity\\\\/1440500?subject_id=35133126\\\",\\n\\t\\t\\\"cover_url\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110887.48.jpg\\\",\\n\\t\\t\\\"avatar\\\": {\\n\\t\\t\\t\\\"large\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110887.48.jpg\\\",\\n\\t\\t\\t\\\"normal\\\": \\\"https://img1.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1594110887.48.jpg\\\"\\n\\t\\t},\\n\\t\\t\\\"type\\\": \\\"celebrity\\\",\\n\\t\\t\\\"id\\\": \\\"1440500\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/celebrity\\\\/1440500\\\\/\\\"\\n\\t}],\\n\\t\\\"interest\\\": {\\n\\t\\t\\\"comment\\\": \\\"\\\",\\n\\t\\t\\\"rating\\\": {\\n\\t\\t\\t\\\"count\\\": 1,\\n\\t\\t\\t\\\"max\\\": 5,\\n\\t\\t\\t\\\"star_count\\\": 4.0,\\n\\t\\t\\t\\\"value\\\": 4\\n\\t\\t},\\n\\t\\t\\\"sharing_text\\\": \\\"\\\\u6211\\\\u7684\\\\u8bc4\\\\u5206\\\\uff1a\\\\u2605\\\\u2605\\\\u2605\\\\u2605 https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/ \\\\u6765\\\\u81ea@\\\\u8c46\\\\u74e3App\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/subject\\\\/34930862\\\\/interest\\\\/2641791302\\\",\\n\\t\\t\\\"tags\\\": [],\\n\\t\\t\\\"vote_count\\\": 0,\\n\\t\\t\\\"create_time\\\": \\\"2021-03-03 07:35:21\\\",\\n\\t\\t\\\"status\\\": \\\"done\\\",\\n\\t\\t\\\"user\\\": {\\n\\t\\t\\t\\\"loc\\\": {\\n\\t\\t\\t\\t\\\"id\\\": \\\"118254\\\",\\n\\t\\t\\t\\t\\\"name\\\": \\\"\\\\u6b66\\\\u6c49\\\",\\n\\t\\t\\t\\t\\\"uid\\\": \\\"wuhan\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"kind\\\": \\\"user\\\",\\n\\t\\t\\t\\\"name\\\": \\\"Honye\\\",\\n\\t\\t\\t\\\"reg_time\\\": \\\"2017-03-11 23:09:39\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/people\\\\/158948115\\\\/\\\",\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/user\\\\/158948115\\\",\\n\\t\\t\\t\\\"id\\\": \\\"158948115\\\",\\n\\t\\t\\t\\\"avatar\\\": \\\"https://img2.doubanio.com\\\\/icon\\\\/up158948115-2.jpg\\\",\\n\\t\\t\\t\\\"type\\\": \\\"user\\\",\\n\\t\\t\\t\\\"avatar_side_icon\\\": \\\"\\\",\\n\\t\\t\\t\\\"uid\\\": \\\"158948115\\\"\\n\\t\\t},\\n\\t\\t\\\"done_index\\\": 430,\\n\\t\\t\\\"id\\\": 2641791302,\\n\\t\\t\\\"is_private\\\": false\\n\\t},\\n\\t\\\"episodes_count\\\": 0,\\n\\t\\\"color_scheme\\\": {\\n\\t\\t\\\"is_dark\\\": true,\\n\\t\\t\\\"primary_color_light\\\": \\\"a56437\\\",\\n\\t\\t\\\"_base_color\\\": [0.06775067750677506, 0.6648648648648648, 0.7254901960784313],\\n\\t\\t\\\"secondary_color\\\": \\\"f9f6f4\\\",\\n\\t\\t\\\"_avg_color\\\": [0.06574923547400613, 0.5891891891891892, 0.7254901960784313],\\n\\t\\t\\\"primary_color_dark\\\": \\\"7f4d2a\\\"\\n\\t},\\n\\t\\\"type\\\": \\\"movie\\\",\\n\\t\\\"mini_program_name\\\": \\\"gh_c9bfaa84f27b\\\",\\n\\t\\\"null_rating_reason\\\": \\\"\\\",\\n\\t\\\"linewatches\\\": [],\\n\\t\\\"info_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/\\\\/h5\\\\/movie\\\\/34930862\\\\/desc\\\",\\n\\t\\\"tags\\\": [{\\n\\t\\t\\\"name\\\": \\\"\\\\u793e\\\\u4f1a\\\\u7eaa\\\\u5f55\\\\u7247\\\",\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/channel\\\\/30307615\\\"\\n\\t}],\\n\\t\\\"durations\\\": [\\\"108\\\\u5206\\\\u949f\\\"],\\n\\t\\\"comment_count\\\": 21981,\\n\\t\\\"cover\\\": {\\n\\t\\t\\\"description\\\": \\\"\\\",\\n\\t\\t\\\"author\\\": {\\n\\t\\t\\t\\\"loc\\\": {\\n\\t\\t\\t\\t\\\"id\\\": \\\"128156\\\",\\n\\t\\t\\t\\t\\\"name\\\": \\\"Praha\\\",\\n\\t\\t\\t\\t\\\"uid\\\": \\\"praha\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"kind\\\": \\\"user\\\",\\n\\t\\t\\t\\\"name\\\": \\\"\\\\u6bcf\\\\u5929\\\\u8fd0\\\\u52a8\\\\u4e00\\\\u5c0f\\\\u65f6\\\",\\n\\t\\t\\t\\\"reg_time\\\": \\\"2018-06-04 17:59:56\\\",\\n\\t\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/people\\\\/179495030\\\\/\\\",\\n\\t\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/user\\\\/179495030\\\",\\n\\t\\t\\t\\\"id\\\": \\\"179495030\\\",\\n\\t\\t\\t\\\"avatar\\\": \\\"https://img9.doubanio.com\\\\/icon\\\\/up179495030-45.jpg\\\",\\n\\t\\t\\t\\\"type\\\": \\\"user\\\",\\n\\t\\t\\t\\\"avatar_side_icon\\\": \\\"\\\",\\n\\t\\t\\t\\\"uid\\\": \\\"179495030\\\"\\n\\t\\t},\\n\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/photos\\\\/photo\\\\/2627027305\\\\/\\\",\\n\\t\\t\\\"image\\\": {\\n\\t\\t\\t\\\"large\\\": {\\n\\t\\t\\t\\t\\\"url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/l\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\t\\t\\\"width\\\": 1066,\\n\\t\\t\\t\\t\\\"height\\\": 1600,\\n\\t\\t\\t\\t\\\"size\\\": 0\\n\\t\\t\\t},\\n\\t\\t\\t\\\"raw\\\": null,\\n\\t\\t\\t\\\"small\\\": {\\n\\t\\t\\t\\t\\\"url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/s\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\t\\t\\\"width\\\": 400,\\n\\t\\t\\t\\t\\\"height\\\": 600,\\n\\t\\t\\t\\t\\\"size\\\": 0\\n\\t\\t\\t},\\n\\t\\t\\t\\\"is_animated\\\": false,\\n\\t\\t\\t\\\"normal\\\": {\\n\\t\\t\\t\\t\\\"url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\t\\t\\t\\\"width\\\": 400,\\n\\t\\t\\t\\t\\\"height\\\": 600,\\n\\t\\t\\t\\t\\\"size\\\": 0\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/photo\\\\/2627027305\\\",\\n\\t\\t\\\"create_time\\\": \\\"2020-11-27 11:46:10\\\",\\n\\t\\t\\\"position\\\": 0,\\n\\t\\t\\\"owner_uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/34930862\\\",\\n\\t\\t\\\"type\\\": \\\"photo\\\",\\n\\t\\t\\\"id\\\": \\\"2627027305\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/photo\\\\/2627027305\\\\/\\\"\\n\\t},\\n\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/photo\\\\/m_ratio_poster\\\\/public\\\\/p2627027305.jpg\\\",\\n\\t\\\"restrictive_icon_url\\\": \\\"\\\",\\n\\t\\\"header_bg_color\\\": \\\"7f4d2a\\\",\\n\\t\\\"is_douban_intro\\\": false,\\n\\t\\\"honor_infos\\\": [{\\n\\t\\t\\\"kind\\\": \\\"rank\\\",\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/subject_collection\\\\/EC4Q5SGKQ?type=rank&category=movie&rank_type=year\\\",\\n\\t\\t\\\"rank\\\": 5,\\n\\t\\t\\\"title\\\": \\\"2020\\\\u8bc4\\\\u5206\\\\u6700\\\\u9ad8\\\\u7eaa\\\\u5f55\\\\u7247\\\"\\n\\t}],\\n\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/\\\",\\n\\t\\\"subject_collections\\\": [],\\n\\t\\\"wechat_timeline_share\\\": \\\"screenshot\\\",\\n\\t\\\"countries\\\": [\\\"\\\\u4e2d\\\\u56fd\\\\u5927\\\\u9646\\\"],\\n\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/subject\\\\/34930862\\\\/\\\",\\n\\t\\\"release_date\\\": null,\\n\\t\\\"original_title\\\": \\\"\\\",\\n\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/34930862\\\",\\n\\t\\\"pre_playable_date\\\": null,\\n\\t\\\"mini_program_page\\\": \\\"pages\\\\/subject\\\\/subject?type=movie&id=34930862\\\",\\n\\t\\\"episodes_info\\\": \\\"\\\",\\n\\t\\\"subtype\\\": \\\"movie\\\",\\n\\t\\\"directors\\\": [{\\n\\t\\t\\\"name\\\": \\\"\\\\u8bb8\\\\u6167\\\\u6676\\\",\\n\\t\\t\\\"roles\\\": [\\\"\\\\u5bfc\\\\u6f14\\\", \\\"\\\\u7f16\\\\u5267\\\", \\\"\\\\u6444\\\\u5f71\\\"],\\n\\t\\t\\\"title\\\": \\\"\\\\u8bb8\\\\u6167\\\\u6676\\\\uff08\\\\u540c\\\\u540d\\\\uff09\\\\u4e2d\\\\u56fd,\\\\u5c71\\\\u897f\\\\u5f71\\\\u89c6\\\\u6f14\\\\u5458\\\",\\n\\t\\t\\\"url\\\": \\\"https:\\\\/\\\\/movie.douban.com\\\\/celebrity\\\\/1331788\\\\/\\\",\\n\\t\\t\\\"abstract\\\": \\\"\\\\u5c71\\\\u897f\\\\u4eba\\\\uff0c\\\\u66fe\\\\u5c31\\\\u804c\\\\u4e8e\\\\u5357\\\\u65b9\\\\u5468\\\\u672b\\\\u7535\\\\u89c6\\\\u90e8\\\\uff0c\\\\u9999\\\\u6e2f\\\\u51e4\\\\u51f0\\\\u536b\\\\u89c6\\\\u4e2d\\\\u6587\\\\u53f0\\\\u3002\\\\u5341\\\\u5e74\\\\u72ec\\\\u7acb\\\\u7eaa\\\\u5f55\\\\u7247\\\\u521b\\\\u4f5c\\\\u7ecf\\\\u5386\\\\u3002\\\\u5bfc\\\\u6f14\\\\u4f5c\\\\u54c1\\\\u66fe\\\\u8363\\\\u83b7\\\\u7b2c20\\\\u5c4a...\\\",\\n\\t\\t\\\"author\\\": null,\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/celebrity\\\\/1331788?subject_id=27542711\\\",\\n\\t\\t\\\"cover_url\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1551090839.64.jpg\\\",\\n\\t\\t\\\"avatar\\\": {\\n\\t\\t\\t\\\"large\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1551090839.64.jpg\\\",\\n\\t\\t\\t\\\"normal\\\": \\\"https://img9.doubanio.com\\\\/view\\\\/celebrity\\\\/s_ratio_celebrity\\\\/public\\\\/p1551090839.64.jpg\\\"\\n\\t\\t},\\n\\t\\t\\\"type\\\": \\\"celebrity\\\",\\n\\t\\t\\\"id\\\": \\\"1331788\\\",\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/celebrity\\\\/1331788\\\\/\\\"\\n\\t}],\\n\\t\\\"is_show\\\": false,\\n\\t\\\"in_blacklist\\\": false,\\n\\t\\\"pre_release_desc\\\": \\\"\\\",\\n\\t\\\"video\\\": null,\\n\\t\\\"aka\\\": [\\\"Tough Out\\\"],\\n\\t\\\"webisode_count\\\": 0,\\n\\t\\\"trailer\\\": {\\n\\t\\t\\\"sharing_url\\\": \\\"https:\\\\/\\\\/www.douban.com\\\\/doubanapp\\\\/dispatch?uri=\\\\/movie\\\\/34930862\\\\/trailer%3Ftrailer_id%3D269432%26trailer_type%3DA\\\",\\n\\t\\t\\\"video_url\\\": \\\"https:\\\\/\\\\/vt1.doubanio.com\\\\/202103161024\\\\/5e3c4d0e4c6653f6821d65bcca2e1e2d\\\\/view\\\\/movie\\\\/M\\\\/402690432.mp4\\\",\\n\\t\\t\\\"title\\\": \\\"\\\\u9884\\\\u544a\\\\u7247 (\\\\u4e2d\\\\u6587\\\\u5b57\\\\u5e55)\\\",\\n\\t\\t\\\"uri\\\": \\\"douban:\\\\/\\\\/douban.com\\\\/movie\\\\/34930862\\\\/trailer?trailer_id=269432&trailer_type=A\\\",\\n\\t\\t\\\"cover_url\\\": \\\"https://img2.doubanio.com\\\\/img\\\\/trailer\\\\/medium\\\\/2627846763.jpg?\\\",\\n\\t\\t\\\"term_num\\\": 0,\\n\\t\\t\\\"n_comments\\\": 32,\\n\\t\\t\\\"create_time\\\": \\\"2020-12-08\\\",\\n\\t\\t\\\"subject_title\\\": \\\"\\\\u68d2\\\\uff01\\\\u5c11\\\\u5e74\\\",\\n\\t\\t\\\"file_size\\\": 30176292,\\n\\t\\t\\\"runtime\\\": \\\"01:59\\\",\\n\\t\\t\\\"type\\\": \\\"A\\\",\\n\\t\\t\\\"id\\\": \\\"269432\\\",\\n\\t\\t\\\"desc\\\": \\\"\\\"\\n\\t}\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"43f55759-622f-46d2-b199-27a52ed2fbf1\",\"ruleName\":\"剧照列表\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/movie/[0-9]+/photos\",\"filterId\":\"0248c2c0-8430-478b-a9aa-eecc90a57c5d\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 10,\\n    \\\"c\\\": 77,\\n    \\\"f\\\": 26,\\n    \\\"o\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"photos\\\": [\\n        {\\n            \\\"read_count\\\": 7380,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/l/public/p2614495620.jpg\\\",\\n                    \\\"width\\\": 960,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 742\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/s/public/p2614495620.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 463\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m/public/p2614495620.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 463\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2020-07-19 10:36:24\\\",\\n            \\\"collections_count\\\": 1,\\n            \\\"reshares_count\\\": 3,\\n            \\\"id\\\": \\\"2614495620\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"131659\\\",\\n                    \\\"id\\\": \\\"131659\\\",\\n                    \\\"name\\\": \\\"Monaco\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"皮皮鸦\\\",\\n                \\\"reg_time\\\": \\\"2011-08-09 23:25:00\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/53681823/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/53681823\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img1.doubanio.com/icon/up53681823-7.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"53681823\\\",\\n                \\\"uid\\\": \\\"zzkang\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2614495620/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2614495620/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2614495620\\\",\\n            \\\"likers_count\\\": 19,\\n            \\\"reactions_count\\\": 19,\\n            \\\"comments_count\\\": 75,\\n            \\\"position\\\": 2\\n        },\\n        {\\n            \\\"read_count\\\": 302,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/l/public/p2627586754.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 689\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/s/public/p2627586754.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 258\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m/public/p2627586754.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 258\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2020-12-04 18:11:09\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2627586754\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": null,\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"人㐾\\\",\\n                \\\"reg_time\\\": \\\"2018-12-25 20:12:54\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/189165798/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/189165798\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up189165798-3.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"189165798\\\",\\n                \\\"uid\\\": \\\"189165798\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"来源此视频：《华纳2021年大片将同步影院上线流媒体\\\\r\\\\n史无前例！ 17部电影和档期曝光》http://vfx.mtime.cn/Video/2020/12/04/mp4/201204085908440110_1080.mp4（复制链接可查看）\\\\r\\\\n为华纳官方曝光的LOGO\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2627586754/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2627586754/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2627586754\\\",\\n            \\\"likers_count\\\": 6,\\n            \\\"reactions_count\\\": 6,\\n            \\\"comments_count\\\": 1,\\n            \\\"position\\\": 96\\n        },\\n        {\\n            \\\"read_count\\\": 270,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/l/public/p2631366120.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 759\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/s/public/p2631366120.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 284\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m/public/p2631366120.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 284\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2021-01-25 01:38:07\\\",\\n            \\\"collections_count\\\": 3,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2631366120\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"beijing\\\",\\n                    \\\"id\\\": \\\"108288\\\",\\n                    \\\"name\\\": \\\"北京\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"Houson\\\",\\n                \\\"reg_time\\\": \\\"2009-06-20 17:16:32\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/4446419/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/4446419\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img3.doubanio.com/icon/up4446419-11.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"4446419\\\",\\n                \\\"uid\\\": \\\"houson\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2631366120/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2631366120/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2631366120\\\",\\n            \\\"likers_count\\\": 3,\\n            \\\"reactions_count\\\": 3,\\n            \\\"comments_count\\\": 4,\\n            \\\"position\\\": 91\\n        },\\n        {\\n            \\\"read_count\\\": 253,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/l/public/p2631366115.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 657\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/s/public/p2631366115.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 246\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m/public/p2631366115.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 246\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2021-01-25 01:38:03\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2631366115\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"beijing\\\",\\n                    \\\"id\\\": \\\"108288\\\",\\n                    \\\"name\\\": \\\"北京\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"Houson\\\",\\n                \\\"reg_time\\\": \\\"2009-06-20 17:16:32\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/4446419/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/4446419\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img3.doubanio.com/icon/up4446419-11.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"4446419\\\",\\n                \\\"uid\\\": \\\"houson\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2631366115/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2631366115/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2631366115\\\",\\n            \\\"likers_count\\\": 1,\\n            \\\"reactions_count\\\": 1,\\n            \\\"comments_count\\\": 10,\\n            \\\"position\\\": 92\\n        },\\n        {\\n            \\\"read_count\\\": 92,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/l/public/p2628002113.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 664\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/s/public/p2628002113.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 249\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m/public/p2628002113.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 249\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2020-12-10 18:09:06\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2628002113\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": null,\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"人㐾\\\",\\n                \\\"reg_time\\\": \\\"2018-12-25 20:12:54\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/189165798/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/189165798\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up189165798-3.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"189165798\\\",\\n                \\\"uid\\\": \\\"189165798\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"官方logo\\\\r\\\\n\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2628002113/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2628002113/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2628002113\\\",\\n            \\\"likers_count\\\": 0,\\n            \\\"reactions_count\\\": 0,\\n            \\\"comments_count\\\": 0,\\n            \\\"position\\\": 95\\n        },\\n        {\\n            \\\"read_count\\\": 2509,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/l/public/p2571538999.jpg\\\",\\n                    \\\"width\\\": 580,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 442\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/s/public/p2571538999.jpg\\\",\\n                    \\\"width\\\": 580,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 442\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m/public/p2571538999.jpg\\\",\\n                    \\\"width\\\": 580,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 442\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2019-10-15 22:06:55\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2571538999\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": null,\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"龙造寺肥前守\\\",\\n                \\\"reg_time\\\": \\\"2019-09-04 17:45:14\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/203338639/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/203338639\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img9.doubanio.com/icon/up203338639-4.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"203338639\\\",\\n                \\\"uid\\\": \\\"203338639\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"官方宣传图片\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2571538999/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2571538999/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2571538999\\\",\\n            \\\"likers_count\\\": 0,\\n            \\\"reactions_count\\\": 0,\\n            \\\"comments_count\\\": 11,\\n            \\\"position\\\": 129\\n        },\\n        {\\n            \\\"read_count\\\": 1983,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/l/public/p2565647671.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 666\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/s/public/p2565647671.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 250\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m/public/p2565647671.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 250\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2019-08-14 20:13:57\\\",\\n            \\\"collections_count\\\": 2,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2565647671\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"131659\\\",\\n                    \\\"id\\\": \\\"131659\\\",\\n                    \\\"name\\\": \\\"Monaco\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"皮皮鸦\\\",\\n                \\\"reg_time\\\": \\\"2011-08-09 23:25:00\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/53681823/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/53681823\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img1.doubanio.com/icon/up53681823-7.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"53681823\\\",\\n                \\\"uid\\\": \\\"zzkang\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2565647671/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2565647671/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2565647671\\\",\\n            \\\"likers_count\\\": 8,\\n            \\\"reactions_count\\\": 8,\\n            \\\"comments_count\\\": 27,\\n            \\\"position\\\": 130\\n        },\\n        {\\n            \\\"read_count\\\": 300,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/l/public/p2631368016.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 900\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/s/public/p2631368016.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 337\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m/public/p2631368016.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 337\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2021-01-25 03:14:52\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 1,\\n            \\\"id\\\": \\\"2631368016\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"beijing\\\",\\n                    \\\"id\\\": \\\"108288\\\",\\n                    \\\"name\\\": \\\"北京\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"Houson\\\",\\n                \\\"reg_time\\\": \\\"2009-06-20 17:16:32\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/4446419/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/4446419\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img3.doubanio.com/icon/up4446419-11.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"4446419\\\",\\n                \\\"uid\\\": \\\"houson\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2631368016/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2631368016/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2631368016\\\",\\n            \\\"likers_count\\\": 1,\\n            \\\"reactions_count\\\": 1,\\n            \\\"comments_count\\\": 14,\\n            \\\"position\\\": 1\\n        },\\n        {\\n            \\\"read_count\\\": 207,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/l/public/p2631374503.jpg\\\",\\n                    \\\"width\\\": 1410,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 586\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/s/public/p2631374503.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 249\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m/public/p2631374503.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 249\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2021-01-25 09:28:17\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 0,\\n            \\\"id\\\": \\\"2631374503\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"beijing\\\",\\n                    \\\"id\\\": \\\"108288\\\",\\n                    \\\"name\\\": \\\"北京\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"阿历克斯\\\",\\n                \\\"reg_time\\\": \\\"2011-09-29 21:35:28\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/54716077/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/54716077\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img2.doubanio.com/icon/up54716077-13.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"54716077\\\",\\n                \\\"uid\\\": \\\"54716077\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2631374503/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2631374503/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2631374503\\\",\\n            \\\"likers_count\\\": 1,\\n            \\\"reactions_count\\\": 1,\\n            \\\"comments_count\\\": 5,\\n            \\\"position\\\": 59\\n        },\\n        {\\n            \\\"read_count\\\": 220,\\n            \\\"image\\\": {\\n                \\\"large\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/l/public/p2631368027.jpg\\\",\\n                    \\\"width\\\": 1600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 900\\n                },\\n                \\\"raw\\\": null,\\n                \\\"small\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/s/public/p2631368027.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 337\\n                },\\n                \\\"normal\\\": {\\n                    \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m/public/p2631368027.jpg\\\",\\n                    \\\"width\\\": 600,\\n                    \\\"size\\\": 0,\\n                    \\\"height\\\": 337\\n                },\\n                \\\"is_animated\\\": false\\n            },\\n            \\\"create_time\\\": \\\"2021-01-25 03:15:37\\\",\\n            \\\"collections_count\\\": 0,\\n            \\\"reshares_count\\\": 1,\\n            \\\"id\\\": \\\"2631368027\\\",\\n            \\\"author\\\": {\\n                \\\"loc\\\": {\\n                    \\\"uid\\\": \\\"beijing\\\",\\n                    \\\"id\\\": \\\"108288\\\",\\n                    \\\"name\\\": \\\"北京\\\"\\n                },\\n                \\\"kind\\\": \\\"user\\\",\\n                \\\"name\\\": \\\"Houson\\\",\\n                \\\"reg_time\\\": \\\"2009-06-20 17:16:32\\\",\\n                \\\"url\\\": \\\"https://www.douban.com/people/4446419/\\\",\\n                \\\"uri\\\": \\\"douban://douban.com/user/4446419\\\",\\n                \\\"avatar_side_icon\\\": \\\"\\\",\\n                \\\"avatar\\\": \\\"https://img3.doubanio.com/icon/up4446419-11.jpg\\\",\\n                \\\"type\\\": \\\"user\\\",\\n                \\\"id\\\": \\\"4446419\\\",\\n                \\\"uid\\\": \\\"houson\\\"\\n            },\\n            \\\"is_collected\\\": false,\\n            \\\"subtype\\\": \\\"photo\\\",\\n            \\\"type\\\": \\\"photo\\\",\\n            \\\"owner_uri\\\": \\\"douban://douban.com/movie/26613692\\\",\\n            \\\"status\\\": null,\\n            \\\"reaction_type\\\": 0,\\n            \\\"description\\\": \\\"\\\",\\n            \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/photo/2631368027/\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/photos/photo/2631368027/\\\",\\n            \\\"reply_limit\\\": \\\"A\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/photo/2631368027\\\",\\n            \\\"likers_count\\\": 0,\\n            \\\"reactions_count\\\": 0,\\n            \\\"comments_count\\\": 17,\\n            \\\"position\\\": 0\\n        }\\n    ],\\n    \\\"w\\\": 42,\\n    \\\"total\\\": 157,\\n    \\\"start\\\": 0\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}},{\"ruleId\":\"93a84afa-cc4c-440f-a58f-1100f806ba25\",\"ruleName\":\"影院热映\",\"apiName\":\"request\",\"enable\":true,\"verifyFail\":false,\"filterList\":[{\"propName\":\"url\",\"propRegString\":\"/subject_collection/movie_showing/items\",\"filterId\":\"612b1af6-32a6-4dbd-b2b3-76ae5fb96e29\",\"matchType\":\"regExp\"}],\"returnConfig\":{\"returnType\":\"succ\",\"generateType\":\"manual\",\"manual\":{\"succ\":{\"resStr\":\"{\\n  \\\"data\\\": {\\n    \\\"count\\\": 20,\\n    \\\"subject_collection\\\": {\\n        \\\"subject_type\\\": \\\"\\\",\\n        \\\"subtitle\\\": \\\"\\\",\\n        \\\"background_color_scheme\\\": {\\n            \\\"is_dark\\\": true,\\n            \\\"primary_color_light\\\": \\\"6f6672\\\",\\n            \\\"secondary_color\\\": \\\"f8f4f9\\\",\\n            \\\"primary_color_dark\\\": \\\"4a444c\\\"\\n        },\\n        \\\"sharing_title\\\": \\\"\\\",\\n        \\\"updated_at\\\": null,\\n        \\\"screenshot_title\\\": \\\"分享海报\\\",\\n        \\\"screenshot_url\\\": \\\"douban://partial.douban.com/screenshot/subject_collection/movie_showing/_content\\\",\\n        \\\"total\\\": 0,\\n        \\\"screenshot_type\\\": \\\"rexxar\\\",\\n        \\\"id\\\": \\\"movie_showing\\\",\\n        \\\"name\\\": \\\"影院热映\\\",\\n        \\\"show_header_mask\\\": false,\\n        \\\"medium_name\\\": \\\"\\\",\\n        \\\"badge\\\": null,\\n        \\\"description\\\": \\\"\\\",\\n        \\\"short_name\\\": \\\"\\\",\\n        \\\"n_followers\\\": null,\\n        \\\"cover_url\\\": \\\"\\\",\\n        \\\"show_rank\\\": true,\\n        \\\"done_count\\\": 0,\\n        \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/subject_collection/movie_showing/\\\",\\n        \\\"subject_count\\\": 0,\\n        \\\"wechat_timeline_share\\\": \\\"url\\\",\\n        \\\"collect_count\\\": 0,\\n        \\\"url\\\": \\\"https://m.douban.com/app_topic/movie_showing\\\",\\n        \\\"uri\\\": \\\"douban://douban.com/subject_collection/movie_showing\\\",\\n        \\\"mini_program_page\\\": \\\"\\\",\\n        \\\"icon_fg_image\\\": \\\"\\\",\\n        \\\"more_description\\\": \\\"\\\",\\n        \\\"mini_program_name\\\": \\\"\\\",\\n        \\\"display\\\": {\\n            \\\"layout\\\": \\\"grid\\\"\\n        }\\n    },\\n    \\\"subject_collection_items\\\": [\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 328802,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.2,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2629056068.jpg\\\",\\n                \\\"width\\\": 3000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4292\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 喜剧 / 贾玲 / 贾玲 张小斐\\\",\\n            \\\"id\\\": \\\"34841067\\\",\\n            \\\"title\\\": \\\"你好，李焕英\\\",\\n            \\\"comments\\\": [\\n                {\\n                    \\\"comment\\\": \\\"沈腾的戏份约等于欢乐颂男主，其他不评论-- 蛋黄已跑路\\\",\\n                    \\\"rating\\\": {\\n                        \\\"count\\\": 1,\\n                        \\\"max\\\": 5,\\n                        \\\"star_count\\\": 3,\\n                        \\\"value\\\": 3\\n                    },\\n                    \\\"sharing_url\\\": \\\"https://www.douban.com/doubanapp/dispatch?uri=/movie/34841067/interest/2734718957\\\",\\n                    \\\"is_voted\\\": false,\\n                    \\\"uri\\\": \\\"douban://douban.com/movie/34841067/interest/2734718957\\\",\\n                    \\\"platforms\\\": [],\\n                    \\\"vote_count\\\": 6813,\\n                    \\\"create_time\\\": \\\"2021-02-12 10:39:37\\\",\\n                    \\\"status\\\": \\\"done\\\",\\n                    \\\"user\\\": {\\n                        \\\"loc\\\": {\\n                            \\\"id\\\": \\\"108288\\\",\\n                            \\\"name\\\": \\\"北京\\\",\\n                            \\\"uid\\\": \\\"beijing\\\"\\n                        },\\n                        \\\"kind\\\": \\\"user\\\",\\n                        \\\"followed\\\": false,\\n                        \\\"name\\\": \\\"蛋黄已跑路\\\",\\n                        \\\"in_blacklist\\\": false,\\n                        \\\"url\\\": \\\"https://www.douban.com/people/157383058/\\\",\\n                        \\\"gender\\\": \\\"U\\\",\\n                        \\\"reg_time\\\": \\\"2017-02-05 22:14:17\\\",\\n                        \\\"uri\\\": \\\"douban://douban.com/user/157383058\\\",\\n                        \\\"remark\\\": \\\"\\\",\\n                        \\\"avatar\\\": \\\"https://img1.doubanio.com/icon/up157383058-19.jpg\\\",\\n                        \\\"id\\\": \\\"157383058\\\",\\n                        \\\"type\\\": \\\"user\\\",\\n                        \\\"avatar_side_icon\\\": \\\"\\\",\\n                        \\\"uid\\\": \\\"157383058\\\"\\n                    },\\n                    \\\"recommend_reason\\\": \\\"\\\",\\n                    \\\"user_done_desc\\\": \\\"\\\",\\n                    \\\"id\\\": \\\"2734718957\\\",\\n                    \\\"wechat_timeline_share\\\": \\\"screenshot\\\"\\n                }\\n            ],\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"贾玲\\\",\\n                \\\"张小斐\\\",\\n                \\\"沈腾\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 / 贾玲 / 贾玲 张小斐\\\",\\n            \\\"rating_data\\\": {\\n                \\\"stats\\\": [\\n                    0.004910857264866019,\\n                    0.017152414504821894,\\n                    0.1705989110707804,\\n                    0.46386249599658375,\\n                    0.34347532116294793\\n                ],\\n                \\\"type_ranks\\\": [\\n                    {\\n                        \\\"type\\\": \\\"喜剧片\\\",\\n                        \\\"rank\\\": 0.93\\n                    }\\n                ]\\n            },\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34841067/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"original_title\\\": \\\"\\\",\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34841067\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"贾玲\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 471822,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 5.7,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 日本 / 喜剧 悬疑 / 陈思诚 / 王宝强 刘昊然\\\",\\n            \\\"id\\\": \\\"27619748\\\",\\n            \\\"title\\\": \\\"唐人街探案3\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"王宝强\\\",\\n                \\\"刘昊然\\\",\\n                \\\"妻夫木聪\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 日本 / 喜剧 悬疑 / 陈思诚 / 王宝强 刘昊然\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/27619748/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2622388983.jpg\\\",\\n                \\\"width\\\": 2143,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 3000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/27619748\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"陈思诚\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 154365,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.1,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动作 奇幻 冒险 / 路阳 / 雷佳音 杨幂\\\",\\n            \\\"id\\\": \\\"26826330\\\",\\n            \\\"title\\\": \\\"刺杀小说家\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"雷佳音\\\",\\n                \\\"杨幂\\\",\\n                \\\"董子健\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 动作 奇幻 冒险 / 路阳 / 雷佳音 杨幂\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26826330/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2628440875.jpg\\\",\\n                \\\"width\\\": 780,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1196\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26826330\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"路阳\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 48294,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.3,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 喜剧 犯罪 / 饶晓志 / 刘德华 肖央\\\",\\n            \\\"id\\\": \\\"34880302\\\",\\n            \\\"title\\\": \\\"人潮汹涌\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"刘德华\\\",\\n                \\\"肖央\\\",\\n                \\\"万茜\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 犯罪 / 饶晓志 / 刘德华 肖央\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34880302/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2632862664.jpg\\\",\\n                \\\"width\\\": 1429,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34880302\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"饶晓志\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 48122,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 奇幻 / 李蔚然 / 陈坤 周迅\\\",\\n            \\\"id\\\": \\\"26935283\\\",\\n            \\\"title\\\": \\\"侍神令\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"陈坤\\\",\\n                \\\"周迅\\\",\\n                \\\"陈伟霆\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 奇幻 / 李蔚然 / 陈坤 周迅\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26935283/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2629260713.jpg\\\",\\n                \\\"width\\\": 3571,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4990\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26935283\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"李蔚然\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 31033,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.4,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动作 动画 奇幻 / 赵霁 / 杨天翔 张赫\\\",\\n            \\\"id\\\": \\\"34779692\\\",\\n            \\\"title\\\": \\\"新神榜：哪吒重生\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"杨天翔\\\",\\n                \\\"张赫\\\",\\n                \\\"宣晓鸣\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 动作 动画 奇幻 / 赵霁 / 杨天翔 张赫\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34779692/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2631711326.jpg\\\",\\n                \\\"width\\\": 4370,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 6201\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34779692\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"赵霁\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 43441,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 剧情 家庭 / 大鹏 / 王吉祥 大鹏\\\",\\n            \\\"id\\\": \\\"35068230\\\",\\n            \\\"title\\\": \\\"吉祥如意\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"王吉祥\\\",\\n                \\\"大鹏\\\",\\n                \\\"刘陆\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 家庭 / 大鹏 / 王吉祥 大鹏\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35068230/\\\",\\n            \\\"release_date\\\": \\\"01.29\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2632185061.jpg\\\",\\n                \\\"width\\\": 6198,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 8685\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35068230\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"大鹏\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 7559,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.8,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 喜剧 科幻 动画 / 丁亮 邵和麒 / 张伟 张秉君\\\",\\n            \\\"id\\\": \\\"34825886\\\",\\n            \\\"title\\\": \\\"熊出没·狂野大陆\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"张伟\\\",\\n                \\\"张秉君\\\",\\n                \\\"谭笑\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 科幻 动画 / 丁亮 / 张伟 张秉君\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34825886/\\\",\\n            \\\"release_date\\\": \\\"02.12\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2631708261.jpg\\\",\\n                \\\"width\\\": 4370,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 6201\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34825886\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"丁亮\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 433128,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.5,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 / 剧情 / 韩延 / 易烊千玺 刘浩存\\\",\\n            \\\"id\\\": \\\"35096844\\\",\\n            \\\"title\\\": \\\"送你一朵小红花\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"易烊千玺\\\",\\n                \\\"刘浩存\\\",\\n                \\\"朱媛媛\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 剧情 / 韩延 / 易烊千玺 刘浩存\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35096844/\\\",\\n            \\\"release_date\\\": \\\"12.31\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2618247457.jpg\\\",\\n                \\\"width\\\": 3264,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 4929\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35096844\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"韩延\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 586387,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 8.9,\\n                \\\"star_count\\\": 4.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 美国 / 动画 奇幻 音乐 / 彼特·道格特 凯普·鲍尔斯 / 杰米·福克斯 蒂娜·菲\\\",\\n            \\\"id\\\": \\\"24733428\\\",\\n            \\\"title\\\": \\\"心灵奇旅\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"杰米·福克斯\\\",\\n                \\\"蒂娜·菲\\\",\\n                \\\"菲利西亚·拉斯海德\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"美国 / 动画 奇幻 音乐 / 彼特·道格特 / 杰米·福克斯 蒂娜·菲\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/24733428/\\\",\\n            \\\"release_date\\\": \\\"12.25\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2626308994.jpg\\\",\\n                \\\"width\\\": 6611,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 9435\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/24733428\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"彼特·道格特\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 322488,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.9,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 中国大陆 中国香港 / 动作 犯罪 / 邱礼涛 / 刘德华 刘青云\\\",\\n            \\\"id\\\": \\\"30171424\\\",\\n            \\\"title\\\": \\\"拆弹专家2\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"刘德华\\\",\\n                \\\"刘青云\\\",\\n                \\\"倪妮\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 中国香港 / 动作 犯罪 / 邱礼涛 / 刘德华 刘青云\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30171424/\\\",\\n            \\\"release_date\\\": \\\"12.24\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img3.doubanio.com/view/photo/m_ratio_poster/public/p2621379901.jpg\\\",\\n                \\\"width\\\": 1429,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2000\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30171424\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"邱礼涛\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 1601,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.1,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [\\n                \\\"可播放\\\"\\n            ],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 英国 / 动画 奇幻 冒险 / 布莱尔·西蒙斯 周沁 / 郭盛 苏俣\\\",\\n            \\\"id\\\": \\\"30262631\\\",\\n            \\\"title\\\": \\\"海底小纵队：火焰之环\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"郭盛\\\",\\n                \\\"苏俣\\\",\\n                \\\"方宇\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": true,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 英国 / 动画 奇幻 冒险 / 布莱尔·西蒙斯 / 郭盛 苏俣\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30262631/\\\",\\n            \\\"release_date\\\": \\\"01.08\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img2.doubanio.com/view/photo/m_ratio_poster/public/p2626707853.jpg\\\",\\n                \\\"width\\\": 1630,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2500\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30262631\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"布莱尔·西蒙斯\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 动作 奇幻 冒险 / 刘炜 / 李晔 王晓彤\\\",\\n            \\\"id\\\": \\\"35356779\\\",\\n            \\\"title\\\": \\\"三只小猪3正义大联萌\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"李晔\\\",\\n                \\\"王晓彤\\\",\\n                \\\"洪海天\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 动作 奇幻 冒险 / 刘炜 / 李晔 王晓彤\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/35356779/\\\",\\n            \\\"release_date\\\": \\\"03.13\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2632449758.jpg\\\",\\n                \\\"width\\\": 1679,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 2382\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/35356779\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"刘炜\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"尚未上映\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 10800,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.7,\\n                \\\"star_count\\\": 3.5\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 美国 中国香港 / 喜剧 动画 奇幻 / 克里斯·艾伯翰斯 / 成龙 牛骏峰\\\",\\n            \\\"id\\\": \\\"27662747\\\",\\n            \\\"title\\\": \\\"许愿神龙\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"成龙\\\",\\n                \\\"牛骏峰\\\",\\n                \\\"薇薇安\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 美国 中国香港 / 喜剧 动画 奇幻 / 克里斯·艾伯翰斯 / 成龙 牛骏峰\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/27662747/\\\",\\n            \\\"release_date\\\": \\\"01.15\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2626260539.jpg\\\",\\n                \\\"width\\\": 5000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 7053\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/27662747\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"克里斯·艾伯翰斯\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 2481,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 6.1,\\n                \\\"star_count\\\": 3\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2018\\\",\\n            \\\"card_subtitle\\\": \\\"2018 / 匈牙利 法国 / 剧情 / 拉斯洛·奈迈施 / 弗拉德·伊凡诺夫 苏珊娜·伍艾斯特\\\",\\n            \\\"id\\\": \\\"26675554\\\",\\n            \\\"title\\\": \\\"日暮\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"弗拉德·伊凡诺夫\\\",\\n                \\\"苏珊娜·伍艾斯特\\\",\\n                \\\"伊夫林·多布斯\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"匈牙利 法国 / 剧情 / 拉斯洛·奈迈施 / 弗拉德·伊凡诺夫 苏珊娜·伍艾斯特\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/26675554/\\\",\\n            \\\"release_date\\\": \\\"02.09\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2631709827.jpg\\\",\\n                \\\"width\\\": 1080,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1600\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/26675554\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"拉斯洛·奈迈施\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": null,\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2021\\\",\\n            \\\"card_subtitle\\\": \\\"2021 / 中国大陆 / 喜剧 动画 家庭\\\",\\n            \\\"id\\\": \\\"30487738\\\",\\n            \\\"title\\\": \\\"魔法鼠乐园\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"中国大陆 / 喜剧 动画 家庭 / \\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/30487738/\\\",\\n            \\\"release_date\\\": \\\"01.23\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2627401805.jpg\\\",\\n                \\\"width\\\": 1286,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1800\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/30487738\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"暂无评分\\\"\\n        },\\n        {\\n            \\\"original_price\\\": null,\\n            \\\"rating\\\": {\\n                \\\"count\\\": 17537,\\n                \\\"max\\\": 10,\\n                \\\"value\\\": 7.5,\\n                \\\"star_count\\\": 4\\n            },\\n            \\\"actions\\\": [],\\n            \\\"year\\\": \\\"2020\\\",\\n            \\\"card_subtitle\\\": \\\"2020 / 日本 / 动画 奇幻 冒险 / 今井一晓 / 水田山葵 大原惠美\\\",\\n            \\\"id\\\": \\\"34454004\\\",\\n            \\\"title\\\": \\\"哆啦A梦：大雄的新恐龙\\\",\\n            \\\"label\\\": null,\\n            \\\"actors\\\": [\\n                \\\"水田山葵\\\",\\n                \\\"大原惠美\\\",\\n                \\\"嘉数由美\\\"\\n            ],\\n            \\\"interest\\\": null,\\n            \\\"type\\\": \\\"movie\\\",\\n            \\\"description\\\": \\\"\\\",\\n            \\\"has_linewatch\\\": false,\\n            \\\"price\\\": null,\\n            \\\"date\\\": null,\\n            \\\"info\\\": \\\"日本 / 动画 奇幻 冒险 / 今井一晓 / 水田山葵 大原惠美\\\",\\n            \\\"url\\\": \\\"https://movie.douban.com/subject/34454004/\\\",\\n            \\\"release_date\\\": \\\"12.11\\\",\\n            \\\"cover\\\": {\\n                \\\"url\\\": \\\"https://img9.doubanio.com/view/photo/m_ratio_poster/public/p2624375776.jpg\\\",\\n                \\\"width\\\": 1000,\\n                \\\"shape\\\": \\\"rectangle\\\",\\n                \\\"height\\\": 1412\\n            },\\n            \\\"uri\\\": \\\"douban://douban.com/movie/34454004\\\",\\n            \\\"subtype\\\": \\\"\\\",\\n            \\\"directors\\\": [\\n                \\\"今井一晓\\\"\\n            ],\\n            \\\"reviewer_name\\\": \\\"\\\",\\n            \\\"null_rating_reason\\\": \\\"\\\"\\n        }\\n    ],\\n    \\\"total\\\": 17,\\n    \\\"start\\\": 0\\n},\\n  \\\"statusCode\\\": 200,\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"resStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}},\"template\":{\"succ\":{\"templateStr\":\"{\\n  \\\"data\\\": \\\"\\\",\\n  \\\"statusCode\\\": \\\"\\\",\\n  \\\"header\\\": \\\"\\\"\\n}\"},\"fail\":{\"templateStr\":\"{\\n  \\\"errMsg\\\": \\\"request:fail 填写错误信息\\\"\\n}\"}}}}]}}"
  },
  {
    "path": "package.json",
    "content": "{\n  \"scripts\": {\n    \"release:beta\": \"node scripts/release.cjs\",\n    \"test\": \"NODE_OPTIONS=--experimental-vm-modules jest\"\n  },\n  \"devDependencies\": {\n    \"@types/crypto-js\": \"^4.2.2\",\n    \"@types/jest\": \"^27.5.0\",\n    \"@typescript-eslint/eslint-plugin\": \"^4.31.1\",\n    \"@typescript-eslint/parser\": \"^4.31.1\",\n    \"babel-eslint\": \"^10.1.0\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"jest\": \"^28.1.0\",\n    \"miniprogram-api-typings\": \"^3.4.4\",\n    \"miniprogram-ci\": \"^1.8.18\",\n    \"prettier\": \"2.6.2\",\n    \"typescript\": \"^4.4.3\"\n  },\n  \"name\": \"weapp-mark\",\n  \"version\": \"1.1.9\",\n  \"description\": \"iMark mark anything!\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"repository\": \"https://github.com/Honye/weapp-mark.git\",\n  \"author\": \"Honye <hongye.jun@qq.com>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"crypto-js\": \"^4.2.0\",\n    \"markdown-ast\": \"^0.3.0\",\n    \"mobx-miniprogram\": \"^4.13.2\",\n    \"mobx-miniprogram-bindings\": \"^1.2.1\"\n  },\n  \"packageManager\": \"pnpm@7.9.0\"\n}\n"
  },
  {
    "path": "project.config.json",
    "content": "{\n  \"description\": \"项目配置文件，详见文档：https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html\",\n  \"packOptions\": {\n    \"ignore\": [],\n    \"include\": []\n  },\n  \"setting\": {\n    \"urlCheck\": false,\n    \"es6\": true,\n    \"enhance\": true,\n    \"postcss\": true,\n    \"preloadBackgroundData\": false,\n    \"minified\": true,\n    \"newFeature\": true,\n    \"coverView\": true,\n    \"nodeModules\": true,\n    \"autoAudits\": false,\n    \"showShadowRootInWxmlPanel\": true,\n    \"scopeDataCheck\": false,\n    \"uglifyFileName\": false,\n    \"checkInvalidKey\": true,\n    \"checkSiteMap\": true,\n    \"uploadWithSourceMap\": true,\n    \"compileHotReLoad\": false,\n    \"useMultiFrameRuntime\": true,\n    \"useApiHook\": true,\n    \"useApiHostProcess\": true,\n    \"babelSetting\": {\n      \"ignore\": [],\n      \"disablePlugins\": [],\n      \"outputPath\": \"\"\n    },\n    \"useIsolateContext\": false,\n    \"userConfirmedBundleSwitch\": false,\n    \"packNpmManually\": true,\n    \"packNpmRelationList\": [\n      {\n        \"packageJsonPath\": \"./package.json\",\n        \"miniprogramNpmDistDir\": \"./miniprogram/\"\n      }\n    ],\n    \"minifyWXSS\": true,\n    \"disableUseStrict\": false,\n    \"minifyWXML\": true,\n    \"showES6CompileOption\": false,\n    \"useCompilerPlugins\": false,\n    \"ignoreUploadUnusedFiles\": true,\n    \"useStaticServer\": true,\n    \"condition\": false\n  },\n  \"compileType\": \"miniprogram\",\n  \"libVersion\": \"2.23.4\",\n  \"appid\": \"wx5363d9bd45509430\",\n  \"projectname\": \"iMark\",\n  \"miniprogramRoot\": \"miniprogram/\",\n  \"cloudfunctionRoot\": \"cloudfunctions/\",\n  \"simulatorType\": \"wechat\",\n  \"simulatorPluginLibVersion\": {},\n  \"cloudfunctionTemplateRoot\": \"cloudfunctionTemplate/\",\n  \"condition\": {\n    \"plugin\": {\n      \"list\": []\n    },\n    \"game\": {\n      \"list\": []\n    },\n    \"gamePlugin\": {\n      \"list\": []\n    },\n    \"miniprogram\": {\n      \"list\": []\n    }\n  },\n  \"srcMiniprogramRoot\": \"miniprogram/\",\n  \"editorSetting\": {\n    \"tabIndent\": \"insertSpaces\",\n    \"tabSize\": 2\n  }\n}"
  },
  {
    "path": "scripts/release.cjs",
    "content": "const path = require('path');\nconst ci = require('miniprogram-ci');\n\nconst paths = (() => {\n  const root = path.resolve(__dirname, '../');\n  const privateKey = path.join(root, 'private.key');\n  const pkgJson = path.join(root, 'package.json');\n  const miniprogram = path.join(root, 'miniprogram/');\n  const zip = path.join(root, 'dist/miniprogram.imark.zip');\n\n  return { root, privateKey, pkgJson, miniprogram, zip };\n})();\n\nconst package = require(paths.pkgJson);\n\nconst project = new ci.Project({\n  appid: 'wx5363d9bd45509430',\n  type: \"miniProgram\",\n  projectPath: paths.root,\n  privateKeyPath: paths.privateKey,\n  ignores: ['node_modules/**/*'],\n});\n\n/**\n * @type {import('miniprogram-ci/dist/@types/types').MiniProgramCI.ICompileSettings}\n */\nconst settings = {\n  es6: true,\n  es7: true,\n  minify: true,\n  autoPrefixWXSS: true,\n};\n\nfunction packNpm () {\n  return ci.packNpmManually({\n    packageJsonPath: paths.pkgJson,\n    miniprogramNpmDistDir: paths.miniprogram,\n  });\n}\n\nfunction preview () {\n  return ci.preview({\n    project,\n    setting: settings,\n    desc: 'CI Preview',\n    qrcodeFormat: 'terminal',\n  });\n}\n\nfunction upload () {\n  return ci.upload({\n    project,\n    version: package.version,\n    setting: settings,\n    robot: 1,\n    desc: 'Uploaded via CI',\n  });\n}\n\nfunction outputZip () {\n  return ci.getCompiledResult({\n    project,\n    version: package.version,\n    setting: settings,\n    desc: 'CI compiled zip',\n  }, paths.zip);\n}\n\n(async () => {\n  await packNpm();\n  await upload();\n})();\n"
  },
  {
    "path": "test/EventEmitter.spec.js",
    "content": "import { EventEmitter } from '../miniprogram/utils/EventEmitter';\n\ndescribe('event listener', () => {\n  const eventEmitter = new EventEmitter();\n  const listener = () => {\n    expect(true).toBe(true);\n  };\n  test('listen', () => {\n    eventEmitter.on('name', listener);\n    eventEmitter.emit('name');\n  });\n  test('off listener', () => {\n    eventEmitter.off('name', listener);\n    expect(eventEmitter.#listeners.get('name')).toEqual(expect.not.arrayContaining([listener]));\n  });\n});\n\ntest('event listener bind this', () => {\n  const eventEmitter = new EventEmitter();\n  const obj = {\n    a: 'a',\n    fn() {\n      expect(this.a).toBe('a');\n    },\n  };\n  eventEmitter.on('name', obj.fn.bind(obj));\n  eventEmitter.emit('name');\n  eventEmitter.off('name', obj.fn);\n});\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"strictNullChecks\": true,\n    \"noImplicitAny\": true,\n    \"module\": \"CommonJS\",\n    \"target\": \"ES2020\",\n    \"allowJs\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"experimentalDecorators\": true,\n    \"noImplicitThis\": true,\n    \"noImplicitReturns\": true,\n    \"alwaysStrict\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"strict\": true,\n    \"strictPropertyInitialization\": true,\n    \"lib\": [\"ES2020\"],\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"noEmit\": true,\n    \"downlevelIteration\": true,\n    \"typeRoots\": [\"./@types\", \"./node_modules/@types\"],\n    \"types\": [\"jest\"]\n  }\n}\n"
  }
]