Full Code of guMcrey/version-rocket for AI

main ea358a871636 cached
25 files
233.3 KB
92.2k tokens
7 symbols
1 requests
Download .txt
Showing preview only (252K chars total). Download the full file or copy to clipboard to get everything.
Repository: guMcrey/version-rocket
Branch: main
Commit: ea358a871636
Files: 25
Total size: 233.3 KB

Directory structure:
gitextract_zilyrdgy/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.en-US.md
├── CHANGELOG.zh-CN.md
├── LICENSE.md
├── README.md
├── README.zh-CN.md
├── babel.config.js
├── components/
│   ├── images.d.ts
│   ├── version-tip-dialog.css
│   ├── versionTipDialog.ts
│   └── versionTipTheme.ts
├── index.ts
├── jest.config.ts
├── package.json
├── scripts/
│   ├── createVersionFile.js
│   ├── sendMessageToLark.js
│   └── sendMessageToWeCom.js
├── tests/
│   ├── index.mock.ts
│   └── index.test.ts
├── tsconfig.json
└── utils/
    └── index.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# https://editorconfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 80
trim_trailing_whitespace = true

[*.md]
max_line_length = 0
trim_trailing_whitespace = false

[COMMIT_EDITMSG]
max_line_length = 0

================================================
FILE: .gitattributes
================================================
*.js eol=lf
*.json eol=lf
*.ts eol=lf

================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on:
  push:
    branches: ['main']
  pull_request:
    branches: ['main']

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      - name: Run a multi-line script
        run: |
          npm ci
          npm run build
          npm run test:coverage
          # npm run codecov

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}


================================================
FILE: .gitignore
================================================
.history
node_modules
coverage
components/*.js
components/version*.d.ts
utils/*.js
utils/*.d.ts
index.js
index.d.ts
*.tgz

================================================
FILE: .npmignore
================================================
.github
.history
tests
assets/*.jpg
assets/*.gif
.editorconfig
.gitattributes
.gitignore
CHANGELOG.zh-CN.md
coverage
tsconfig.json
jest.config.ts

================================================
FILE: CHANGELOG.en-US.md
================================================
#### Release cycle

- Revision number: hotfix fixed
- Minor Version Number: Releases a backward compatible version with new features
- Major version number: Contains breaking updates and new features, not in the release cycle

---

## 1.7.4

`2024-10-15`

[#52](https://github.com/guMcrey/version-rocket/issues/52) (Thanks to [wjp980108](https://github.com/wjp980108) for the feedback)
- 🪲 Fix the `config.check-origin-specified-files-url` 


## 1.7.3

`2024-09-19`

[#50](https://github.com/guMcrey/version-rocket/issues/50) (Thanks to [Jolie](https://github.com/newives) for the feedback)
- 🪲 Fix the syntax error of the expression `[...new Set(config.checkOriginSpecifiedFilesUrl)] || []` in TypeScript.

## 1.7.2

`2024-08-09`

[#43](https://github.com/guMcrey/version-rocket/issues/43) (Thanks to [Banana-energy](https://github.com/Banana-energy) for the suggestion)
- 🪲 Fixed the issue where the worker value was not cleared when `unCheckVersion({closeWorker: true})` was called, causing it to not work properly when reassigned.

## 1.7.1

`2023-11-02`

[#35](https://github.com/guMcrey/version-rocket/issues/35) (Thank you for the suggestion, [fickleness-youth](https://github.com/fickleness-youth))
- 💄 Optimization: The fetch request parameter for real-time checking of updates in a specified file address's content can be enhanced by adding `{method: "HEAD", cache: "no-cache"}`. This configuration instructs the server to only return the response headers without the actual response body, allowing for faster retrieval of ETag or Last-Modified information.

## 1.7.0

`2023-07-03`

- 🆕 Another method for real-time detection of web application version: By leveraging the browser's cache negotiation mechanism, it checks whether the content of the specified file address has been updated to determine if a new version is available.
  - Added `checkOriginSpecifiedFilesUrl` configuration option: After setting this property, the version will be monitored by "checking whether the specified file has been updated" instead of "managing the version number". Pass in a list of file addresses to be monitored, usually the index.html file under a domain name (string array type).
  - Added `checkOriginSpecifiedFilesUrlMode` configuration option: Supports two modes: 'one' / 'all'. 'one' means that if the content of one of the file addresses in the list changes, it will prompt for an update; 'all' means that it will prompt for an update only when the content of all file addresses in the list changes. (Only effective when checkOriginSpecifiedFilesUrl is configured)
  - Added `enable` configuration option: Whether to enable version monitoring. With this configuration option, version monitoring can be enabled only in specified environments (default is true).
  - Added `clearIntervalOnDialog` configuration option: Whether to clear the timer when the new version prompt dialog appears.
- 💄 update README.md and README.zh-CN.md

## 1.6.7

`2023-06-06`

- 💄 update .npmignore file list

## 1.6.6

`2023-06-06`

- 🪲 fix .npmignore file filtering out jest.config.ts file

## 1.6.5

`2023-06-06`

- 🪲 fix .npmignore file filtering out utils folder

## 1.6.3

`2023-06-05`

- 💄 optimize the size of npm packages, and filter files that do not need to be packaged through .npmignore files

## 1.6.2

`2023-02-13`

- 🆕 lark-message-config added `headerBgColor` variable, support set card header's background color, default is turquoise. available values: blue、wathet、turquoise(default)、green、yellow、orange、red、carmine、violet、purple、indigo、grey
- 💄 update README.md and README.zh-CN.md

## 1.6.1

`2023-02-05`

[#22](https://github.com/guMcrey/version-rocket/issues/22)
- 🆕 generate-version-file added the `EXTERNAL_PATH` environment variable, which supports passing in the path of a file. It is recommended to use it when a large amount of additional information needs to be written into `version.json`. When `EXTERNAL` and `EXTERNAL_PATH` are set at the same time, the priority is lower than that of `EXTERNAL`
- 💄 update README.md and README.zh-CN.md

## 1.6.0

`2023-02-04`

[#22](https://github.com/guMcrey/version-rocket/issues/22)
- 🆕 generate-version-file add EXTERNAL env,can be used to display richer content when customizing the popup UI. Such as current version updates or other information
- 💄 update README.md and README.zh-CN.md

## 1.5.0

`2023-01-17`

[#15](https://github.com/guMcrey/version-rocket/issues/15)
- 🆕 the checkVersion method adds immediate to support immediate version monitoring when visiting the home page, and then polling at custom longer intervals (reducing the number of requests to the server)
- 🆕 new version monitoring pop-up window allows closing function: cancelButtonText is used to customize button text; CancelMode enumerates the frequency of the next update after canceling the update; CancelUpdateAndStopWorker is used to set whether to close the worker at the same time when canceling the update
- 🆕 new callback functions for version monitoring: onRefresh for confirming refresh; onCancel for canceling the callback after refresh
- 💄 update README.md and README.zh-CN.md API

## 1.4.0

`2022-12-03`

- 🆕 add unCheckVersion function, to support that real-time monitor of the version to be terminated when need. [#15](https://github.com/guMcrey/version-rocket/issues/15)
- 🪲 fix checkVersion function be called multiple, will create multiple worker processes.
- 💄 update README.md and README.zh-CN.md


## 1.3.2

`2022-11-08`

- 🪲 fix setDeployInfoInMainCard is true in send-lark-message.config, remark no display [#12](https://github.com/guMcrey/version-rocket/issues/12)

## 1.3.1

`2022-11-07`

- 💄 send-lark-message.config add new field setDeployInfoInMainCard to support deploy info display in main card [#12](https://github.com/guMcrey/version-rocket/issues/12)

## 1.3.0

`2022-08-21`

- 🆕 Supports sending deployment messages to enterprise WeChat bots [#8](https://github.com/guMcrey/version-rocket/issues/8)
- 💄 Update README.md and README.zh-CN.md documentation

## 1.2.4

`2022-07-28`
- 🆕 Send lark message supports incoming runtime fields [#3](https://github.com/guMcrey/version-rocket/issues/3)

## 1.2.1

`2022-07-15`

- 🆕 Support custom version update pop-up theme [#1](https://github.com/guMcrey/version-rocket/issues/1)

================================================
FILE: CHANGELOG.zh-CN.md
================================================
#### 发布周期

- 修订版本号:hotfix 修复
- 次版本号:发布带有新特性的向下兼容的版本
- 主版本号:含有破坏性更新和新特性,不在发布周期内

---

## 1.7.4

`2024-10-15`

[#52](https://github.com/guMcrey/version-rocket/issues/52) (感谢 [wjp980108](https://github.com/wjp980108) 同学的反馈)
- 🪲 Fix the warning message when the `config.check-origin-specified-files-url` field is not provided.


## 1.7.3

`2024-09-19`

[#50](https://github.com/guMcrey/version-rocket/issues/50) (感谢 [Jolie](https://github.com/newives) 同学的反馈)
- 🪲 修复 `[...new Set(config.checkOriginSpecifiedFilesUrl)] || []` 表达式在 Typescript 中的语法错误

## 1.7.2

`2024-08-09`

[#43](https://github.com/guMcrey/version-rocket/issues/43) (感谢 [Banana-energy](https://github.com/Banana-energy) 同学的建议)
- 🪲 修复 `unCheckVersion({closeWorker: true})` 时 worker 值未被清空导致再次赋值时不生效的问题

## 1.7.1

`2023-11-02`

[#35](https://github.com/guMcrey/version-rocket/issues/35) (感谢 [fickleness-youth](https://github.com/fickleness-youth) 同学的建议)
- 💄 优化: Web 应用版本实时检测方法**指定文件地址内容是否有更新**的 fetch 请求参数, 通过添加 `{method: "HEAD", cache: "no-cache"}` 来让服务器将只返回响应头信息而不返回实际的响应体,因此可以更快地获取到 ETag 或 Last-Modified 等响应头信息

## 1.7.0

`2023-07-03`

- 🆕 支持 Web 应用版本实时检测的另一种方法: 通过浏览器的协商缓存原理, 检测**指定文件地址内容是否有更新**来判断是否有新版本可用
    - 新增 `checkOriginSpecifiedFilesUrl` 配置项: 设置该属性后将使用 “通过检测指定文件是否有更新” 而不是 “通过管理版本号” 来监测版本, 传入希望监测的文件地址列表, 通常情况为某个域名下的 index.html 文件 (字符串数组类型)
    - 新增 `checkOriginSpecifiedFilesUrlMode` 配置项: 支持两种模式 'one' / 'all'. 'one' 表示列表中文件地址只要有一个内容发生改变即提示更新; 'all' 表示列表中文件地址都发生改变时才提示更新. (当 checkOriginSpecifiedFilesUrl 配置后才生效
    - 新增 `enable` 配置项: 是否启用版本监测, 通过该配置项可以设置版本监测只在指定环境下开启 (默认 true)
    - 新增 `clearIntervalOnDialog` 配置项: 当发现新版本提示弹窗出现后, 是否清空定时器
- 💄 更新 README.md 和 README.zh-CN.md 文档

## 1.6.7

`2023-06-06`

- 💄 更新 .npmignore 文件列表

## 1.6.6

`2023-06-06`

- 🪲 修复 .npmignore 文件过滤掉了 jest.config.ts 文件

## 1.6.5

`2023-06-06`

- 🪲 修复 .npmignore 文件过滤掉了 utils 文件夹

## 1.6.3

`2023-06-05`

- 💄 优化 npm 包体积, 通过 .npmignore 文件过滤不需要打包的文件

## 1.6.2

`2023-02-13`

- 🆕 lark-message-config 新增 `headerBgColor` 变量,支持自定义消息卡片头部背景色, 以方便区分部署成功或失败的消息推送. 取值范围: blue、wathet、turquoise(默认)、green、yellow、orange、red、carmine、violet、purple、indigo、grey
- 💄 更新 README.md 和 README.zh-CN.md 文档

## 1.6.1

`2023-02-05`

[#22](https://github.com/guMcrey/version-rocket/issues/22)
- 🆕 generate-version-file 新增 `EXTERNAL_PATH` 环境变量,支持传入文本文件路径,推荐在需要将大量额外信息写入 `version.json` 中时使用. 当同时设置了 `EXTERNAL` 和 `EXTERNAL_PATH` 时,优先级低于 `EXTERNAL`。
- 💄 更新 README.md 和 README.zh-CN.md 文档


## 1.6.0

`2023-02-04`

[#22](https://github.com/guMcrey/version-rocket/issues/22)
- 🆕 generate-version-file 新增 `EXTERNAL` 环境变量,可用于在自定义弹窗 UI 时展示更丰富内容。如当前版本更新内容或其他信息
- 💄 更新 README.md 和 README.zh-CN.md 文档

## 1.5.0

`2023-01-17`

[#15](https://github.com/guMcrey/version-rocket/issues/15)
- 🆕 checkVersion 方法新增 immediate, 以支持首页访问时, 立即触发版本监测, 之后按自定义的较长时间间隔轮询 (减少请求服务器次数)
- 🆕 新增版本监测弹窗允许关闭功能: cancelButtonText 用于自定义按钮文案; cancelMode 枚举取消更新后, 下一次更新的频率; cancelUpdateAndStopWorker 用于设置是否在取消更新时同时关闭 worker
- 🆕 新增版本监测回调函数: onRefresh 用于确认刷新后的回调; onCancel 用于取消刷新后的回调
- 💄 更新 README.md 和 README.zh-CN.md 文档 API 部分

## 1.4.0

`2022-12-03`

- 🆕 新增 unCheckVersion 函数, 以支持在需要时终止版本实时监测 [#15](https://github.com/guMcrey/version-rocket/issues/15)
- 🪲 修复 checkVersion 函数在重复调用时, 创建多个 worker 进程
- 💄 更新 README.md 和 README.zh-CN.md 文档

## 1.3.2

`2022-11-08`

- 🪲 修复 send-lark-message.config 中 setDeployInfoInMainCard 为真时, remark 未显示 [#12](https://github.com/guMcrey/version-rocket/issues/12)

## 1.3.1

`2022-11-07`

- 💄 send-lark-message.config 新增字段 setDeployInfoInMainCard 以支持 Deploy 信息显示在主卡片中 [#12](https://github.com/guMcrey/version-rocket/issues/12)

## 1.3.0

`2022-08-21`

- 🆕 支持发送部署消息至企业微信机器人 [#8](https://github.com/guMcrey/version-rocket/issues/8)
- 💄 更新 README.md 和 README.zh-CN.md 文档

## 1.2.4

`2022-07-28`
- 🆕 发送 lark 消息支持传入运行时字段 [#3](https://github.com/guMcrey/version-rocket/issues/3)

## 1.2.1

`2022-07-15`

- 🆕 支持自定义版本更新弹窗主题 [#1](https://github.com/guMcrey/version-rocket/issues/1)


================================================
FILE: LICENSE.md
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# 🔔 version-rocket 🚀

English | [简体中文](./README.zh-CN.md)

> A tool library for web application version detection and deployment notification.

[![](https://img.shields.io/npm/v/version-rocket)](https://www.npmjs.com/package/version-rocket)
[![](https://img.shields.io/npm/dm/version-rocket.svg)](https://npmcharts.com/compare/version-rocket?minimal=true)
[![](https://codecov.io/gh/guMcrey/version-rocket/main/graph/badge.svg)](https://codecov.io/gh/guMcrey/version-rocket)
[![](https://github.com/guMcrey/version-rocket/actions/workflows/main.yml/badge.svg)](https://github.com/guMcrey/version-rocket/actions/)
[![](https://img.shields.io/npm/l/version-rocket)](https://www.npmjs.com/package/version-rocket)

**Catalogue**
- [About](#about)
- [Features](#features)
- [Implementation Principle](#implementation-principle)
- [Install](#install)
- [Quick Start](#quick-start)
  - [Web application version real-time detection](#web-application-version-real-time-detection)
    - [Personalize the theme](#personalize-the-theme)
    - [Screenshot](#screenshot)
  - [Automatically send deployment messages to Lark or Wecom group chat](#automatically-send-deployment-messages-to-lark-or-wecom-group-chat)
    - [Lark](#lark)
      - [Set dynamic text](#set-dynamic-text)
      - [Custom message card](#custom-message-card)
      - [Screenshot](#screenshot-1)
    - [WeCom](#wecom)
      - [Set dynamic text](#set-dynamic-text-1)
      - [Custom message card](#custom-message-card-1)
      - [Screenshot](#screenshot-2)
- [API](#api)
- [Test](#test)
- [Links](#links)
- [License](#license)
- [Other interesting open source projects](#other-interesting-open-source-projects)

---

## About

**version-rocket** contains two functional modules: **Web application version real-time detection**, **Automatic deployment message to lark or WeCom group chat**
> You can use a module separately according to the needs, or use it together

When is it suitable to use the **web application version real-time detection**?
  -The scene: This kind of situation often happens. When the user opens a web application in the browser for a long time and has not refresh the page. When the application has a new version update or the problem repair, the user will not know that there is a new version of the release, which will lead to the user. Continue to use old versions to affect user experience and back-end data accuracy.
  - **version-rocket** will detect the application version in real time. When a new version is found, the display version updates the pop-up window, prompting the user to refresh the page to update the application.

When is it suitable to use **to automatically send deployment messages to Lark or WeCom group chat**?
  -The scene: There may be such a situation in team cooperation. As a front-end engineer, you need to verbally communicate with team members after each deployment. There are no deployment records to follow.
  - **version-rocket** Use the `Webhook` method. After the application deployment is successful, through group chat robots, the news of" successful deployment "will be automatically pushed to the group chat.

*If you have the push needs of other platforms, you can mention issues*

## Features

- Support all modern browsers
- Real-time detection of available versions is provided in two ways: 1. through managing version numbers; 2. by detecting updates in specified file contents
  - Managing version numbers supports any version format, such as 1.1.0, 1.1.1.0, 1.1.0-beta, etc.
  - Detecting updates in specified file contents supports any file on a remote server `v1.7.0`
- Support personalized version popup text and theme, also support custom UI
- Sync deployment message to Lark or WeCom group chat after successful deploy
- Card text and templates for deployment messages support customization, and support the dynamically generated fields.
- Support TypeScript
- [Npm package support](https://www.npmjs.com/package/version-rocket)
- Support Node 14+ 🐰

## Implementation Principle

- **Web application version real-time detection:**
  1. Through version number management: **version-rocket** compares the version in the user's current browser with the version file on the remote server. We use the `Web Worker API` based on JavaScript to perform monitoring polling, which does not affect the browser rendering process.
  2. By detecting updates in specified file contents: **version-rocket** uses the browser's conditional cache mechanism to determine whether the specified file content has changed. We use the `Web Worker API` based on JavaScript to perform monitoring polling, which does not affect the browser rendering process. `v1.7.0`

- **Automatically send deployment messages to Lark or WeCom group chat:** **version-rocket** call the webhook method provided by collaborative office software to trigger group chat robots send messages.

## Install

[![version-rocket](https://nodei.co/npm/version-rocket.png)](https://www.npmjs.com/package/version-rocket)

```bash
# Choose a package manager you prefer

# npm
npm install version-rocket --save

# yarn
yarn add version-rocket

# pnpm
pnpm install version-rocket

```

### Quick Start

### Web application version real-time detection: Through version number management

Step 1: Import `checkVersion()`, and use it

```javascript
// Entry file: such as App.vue or App.jsx, etc

import { checkVersion } from 'version-rocket'
// It is recommended to use the version field in package.json, or you can customize versions
import { version } from '../package.json'

checkVersion({
  localPackageVersion: version,
  originVersionFileUrl: `${location.origin}/version.json`,
  // Refer to API for more configuration options
})

// To terminate version detection, call the unCheckVersion method during the destruction life cycle. For details, see the API
unCheckVersion({closeDialog: false})
 
```

Step 2: after executing the `generate-version-file` custom command, generate the `version.json` file, used to deploy to a remote server

- `VERSION` (optional): when **custom version** is required, it is passed in. The default value is package.json version field

- File output directory (optional): **user defined version.json output directory**, which is the dist directory by default

- `EXTERNAL` (optional): when you want to save more information to `version.json`, such as the modified content of the current version or other things that need to be displayed on the pop-up (used in onVersionUpdate custom UI) `v1.6.0`

- `EXTERNAL_PATH` (optional):Accepts a file path, recommended when a lot of extra information needs to be written to `version.json`. When both `EXTERNAL` and `EXTERNAL_PATH` are set, the priority is lower than `EXTERNAL`(used in onVersionUpdate custom UI)`v1.6.1`

**VERSION usage**

```javascript
// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux system
    "generate:version": "VERSION=1.1.0-beta generate-version-file dist public"
    // Windows system: install cross-env first
    // npm install cross-env -D
     "generate:version": "cross-env VERSION=1.1.0-beta generate-version-file dist public"
    ...
  },
  ...
}

```

**EXTERNAL `v1.6.0` and EXTERNAL_PATH `v1.6.1` usage**

JSON format please use this tool to escape [click here](https://codebeautify.org/json-encode-online)

```javascript
// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux (simple text)
    "generate:version": "EXTERNAL='some text' generate-version-file dist public"
    // Mac or Linux (JSON text)
    "generate:version": "EXTERNAL='{\"update\":\"fix bugs\",\"content\":\"some tips\"}' generate-version-file dist public"
    // Mac or Linux (JSON file, e.g. version-external.json)
    "generate:version": "EXTERNAL_PATH=version-external.json generate-version-file dist public"
    // Windows (simple text)
    "generate:version": "set EXTERNAL=some text && generate-version-file dist public"
    // Windows (JSON text)
    "generate:version": "set EXTERNAL={\"update\":\"fix bugs\",\"content\":\"some tips\"} && generate-version-file dist public"
    // Windows (JSON file, e.g. version-external.json)
    "generate:version": "set EXTERNAL_PATH=version-external.json && generate-version-file dist public"
    ...
  },
  ...
}

```

```javascript
// version-external.json

{
    "update": [
        "fix some bugs",
        "improve home page",
        "update docs"
    ],
    "content": "please update to latest version"
}
```

<details>
<summary>⚠️ Notice:</summary>
If your project is connected to CDN, it is strongly recommended that you set the `version.json` file is set to always no caching (configure in nginx or turn off the function of CDN ignoring the parameter cache)

``` shell
// nginx example

server {
  ...
  location / {
    ...
    if ($request_filename ~* .*\/version\.(json)$) {
      add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
    }
    ...
  }
  ...
}
```
</details>

*Complete the above two steps, the version monitoring function (through version number management) can be used normally 🎉🎉*

### Web application version real-time detection: By detecting updates in specified file contents `v1.7.0`

> ⚠️ Friendly reminder: This method does not support displaying "current version changes or other information that needs to be shown in the prompt window". If you have such a requirement, please use the "version management" method.

import `checkVersion()`, and use it

```javascript
// Entry file: such as App.vue or App.jsx, etc
import { checkVersion } from 'version-rocket'

// Call checkVersion in the lifecycle hook
checkVersion({
  // The list of files to be monitored usually includes the index.html file under a certain domain
  checkOriginSpecifiedFilesUrl: [`${location.origin}/index.html`],
  // The validation mode for the list of monitored files: 'one' (default) or 'all'
  checkOriginSpecifiedFilesUrlMode: 'one',
  // Whether to enable version monitoring (default true)
  enable: process.env.NODE_ENV !== 'development'
})

// If you need to terminate version checking, call the unCheckVersion method in the destroy lifecycle. For more details, see the API documentation
unCheckVersion({closeDialog: false})
 
```

*After completing the above steps, the version monitoring feature (by detecting updates in specified file contents) can be used normally 🎉🎉*

#### Personalize the theme

```javascript

// Entry file: such as App.vue or App.jsx, etc
import { checkVersion } from 'version-rocket'
// It is recommended to use the version field in package.json, or you can customize versions
import { version } from '../package.json'

checkVersion(
  {
    localPackageVersion: version,
    originVersionFileUrl: `${location.origin}/version.json`,
  },
  {
    title: 'Title',
    description: 'Description',
    primaryColor: '#758bfd',
    rocketColor: '#ff8600',
    buttonText: 'Button Text',
  }
)

```

Or set prompt picture

``` javascript

// Entry file: such as App.vue or App.jsx, etc

import { checkVersion } from 'version-rocket'
// It is recommended to use the version field in package.json, or you can customize versions
import { version } from '../package.json'

checkVersion(
  {
    localPackageVersion: version,
    originVersionFileUrl: `${location.origin}/version.json`,
  },
  {
    imageUrl: 'https://avatars.githubusercontent.com/u/26329117',
  }
)

```

#### Screenshot

<p align="center">
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/available-version-tips.gif?raw=true" width="410"/>
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/custom-themes.jpg?raw=true" width="410" />
</p>

---

### Automatically send deployment messages to Lark or WeCom group chat

#### Lark

Step 1: 
- **Create the `lark-message-config.json`** file in the project root directory to set the text of the message card
- **execute the send-lark-message** custom command
  - `MESSAGE_PATH` (optional): passed if you need to customize the file path or filename (this parameter is useful if you need to differentiate the deployment environment). By default, the lark-message-config.json file in the root directory is used 
  - `PACKAGE_JSON_PATH` (optional): passed if you need to customize the path to the package.json file (this parameter may be useful for deployments of monorepo projects). The default is to get the package.json file in the root path

```javascript 

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux system
    "send-lark-message:test": "MESSAGE_PATH=./lark-message-staging-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-lark-message"
    // Windows system: install cross-env first
    // npm install cross-env -D
    "send-lark-message:test": "cross-env MESSAGE_PATH=./lark-message-staging-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-lark-message"
    ...
  },
  ...
}

```

Step 2: Set `lark-message-config.json`

``` javascript

// lark-message-config.json
{
  // optional: card header's background color, default is turquoise, v1.6.2
  // available values: blue | wathet | turquoise | green | yellow | orange | red | carmine | violet | purple | indigo | grey
  "headerBgColor": "red",
  // card title
  "title": "TEST FE Deployed Successfully",
  // project name label
  "projectNameLabel": "Project name label",
  // deploy project name
  "projectName": "TEST",
  // project branch label
  "branchLabel": "Branch label",
  // deploy branch name
  "branch": "Staging",
  // version label
  "versionLabel": "Version label",
  // version
  "version": "1.1.1.0",
  // project access url label
  "accessUrlLabel": "Access URL label",
  // project access url
  "accessUrl": "https://test.com",
  // remind group chat members label
  "isNotifyAllLabel": "Is notify all label",
  // remind group chat members: true/false
  "isNotifyAll": true,
  // lark robot webhook url
  "larkWebHook": "https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxxxxx",
  // deploy type description
  "deployToolsText": "Deploy tools text",
  // deploy type
  "deployTools": "Jenkins",
  // the deploy time zone that you want to display, default "Asia/Shanghai"
  "expectConvertToTimezone": "America/New_York"
  // more information want to show
  "remark": "Trigger by bob, fix xxx bug"
}

```

#### Set dynamic text

If your card copy will be generated according to conditions, you can pass in `MESSAGE_JSON` field is self-defined, such as version, title, etc

*Note: `MESSAGE_JSON` needs to be escaped*

```javascript

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux system
    "send-lark-message:test": "MESSAGE_JSON='{\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true}' send-lark-message"
    // Windows system
    "send-lark-message:test": "set MESSAGE_JSON={\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true} && send-lark-message"
    ...
  },
  ...
}

```

Or after export variables, quote in package.json (not support Windows)

```javascript

// ci file

sh "npm run build"
sh "export messageJSON='{\"title\": \"This is a title\"}'"


// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    "send-lark-message:test": "MESSAGE_JSON=${messageJSON} send-lark-message"
    ...
  },
  ...
}

```

#### Custom message card

```javascript

// lark-message-config.json

{
    // Message card content
    "message": {
        "msg_type": "text",
        "content": {
            "text": "New message reminder"
        }
    },
    // Lark robot's webhook link
    "larkWebHook": "https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxxxxx"
}

```

#### Screenshot

<p align="left">
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/custom-message-text.jpg?raw=true" width="400" />
  &emsp;
  <img src="./assets/deploy-failed-message.jpg?raw=true" width="400" />
</p>

#### WeCom

Step 1: 
- **Create the `message-config.json`** file in the project root directory to set the text of the message card
- **execute the send-wecom-message** custom command
  - `MESSAGE_PATH` (optional): passed when you need to customize the file path or filename (this parameter is useful if you need to differentiate the deployment environment). The default is to use the message-config.json file in the root directory 
  - `PACKAGE_JSON_PATH` (optional): passed when a custom path to the package.json file is required (this parameter may be useful for deployments of monorepo projects). The default is to get the package.json file in the root path

```javascript 

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux system
    "send-wecom-message:test": "MESSAGE_PATH=./message-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-wecom-message"
    // Windows system: install cross-env first
    // npm install cross-env -D
    "send-wecom-message:test": "cross-env MESSAGE_PATH=./message-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-wecom-message"
    ...
  },
  ...
}

```

Step 2: Set `message-config.json`

``` javascript

{
  // card title
  "title": "TEST FE Deployed Successfully",
  // project name label
  "projectNameLabel": "Project name label",
  // deploy project name
  "projectName": "TEST",
  // project branch label
  "branchLabel": "Branch label",
  // deploy branch name
  "branch": "Staging",
  // version label
  "versionLabel": "Version label",
  // version
  "version": "1.1.1.0",
  // project access url label
  "accessUrlLabel": "Access URL label",
  // project access url
  "accessUrl": "https://test.com",
  // remind group chat members label
  "isNotifyAllLabel": "Is notify all label",
  // remind group chat members: true/false
  "isNotifyAll": true,
  // WeCom robot webhook url
  "webHook": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxx",
  // deploy type description
  "deployToolsText": "Deploy tools text",
  // deploy type
  "deployTools": "Jenkins",
  // the deploy time zone that you want to display, default "Asia/Shanghai"
  "expectConvertToTimezone": "America/New_York"
  // more information want to show
  "remark": "Trigger by bob, fix xxx bug"
}

```

#### Set dynamic text

If your card copy will be generated according to conditions, you can pass in `MESSAGE_JSON` field is self-defined, such as version, title, etc

*Note: `MESSAGE_JSON ` needs to be escaped*

```javascript

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac or Linux system
    "send-wecom-message:test": "MESSAGE_JSON='{\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true}' send-wecom-message"
    // Windows system
    "send-wecom-message:test": "set MESSAGE_JSON={\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true} && send-wecom-message"
    ...
  },
  ...
}
```

Or after export variables, quote in package.json (not support Windows)

```javascript

// ci file
sh "npm run build"
sh "export messageJSON='{\"title\": \"This is a title\"}'"

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    "send-wecom-message:test": "MESSAGE_JSON=${messageJSON} send-wecom-message"
    ...
  },
  ...
}

```

#### Custom message card

```javascript

// message-config.json

{
    // message card template content
    "message": {
        "msgtype": "text",
        "text": {
            "content": "This is a custom message"
        }
    }
    // webhook link for the WeCom bot
    "webHook": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxx"
}
```

#### Screenshot

<img src="https://github.com/guMcrey/version-rocket/blob/main/assets/wecom-message.jpg?raw=true" width="500" />

---

## API

**checkVersion Function**
> Enable real-time app version detection

| Params | Type | Description | Default | Required |
| --- | --- | --- | --- | --- |
| config | object | Version monitoring configuration item |  | Yes |
| config.originVersionFileUrl | string |  The path to the version.json file on the remote server | | Yes |
| config.localPackageVersion | string | The version of the current application usually takes the version field of package.json for comparison with the version.json file of the remote server |  | Yes |
| config.pollingTime | number | Time interval for polling monitoring, in ms | 5000 | No |
| config.immediate | boolean | On the first visit, version monitoring will be triggered immediately, and then polling will be conducted at a customized time interval **`v1.5.0`** | false | No |
| config.checkOriginSpecifiedFilesUrl | array | Setting this property will use 'detecting updates in specified file contents' instead of 'version number management' to monitor versions. Pass in the list of file addresses to be monitored, usually the index.html file under a certain domain (Automatic deduplication) **`v1.7.0`** |  | false |
| config.checkOriginSpecifiedFilesUrlMode | 'one' / 'all' | 'one' means that if the content of any file address in the list changes, a prompt for an update will be displayed; 'all' means that a prompt for an update will only be displayed when the content of all file addresses in the list changes. (This only takes effect when checkOriginSpecifiedFilesUrl is configured) **`v1.7.0`** | 'one' | false |
| config.enable | boolean | Whether to enable version monitoring. This configuration item can be used to enable version monitoring only in specified environments **`v1.7.0`** | true | 否 |
| config.clearIntervalOnDialog | boolean | When the prompt dialog for a new version appears, clear the timer **`v1.7.0`** | false | 否 |
| config.onVersionUpdate | function(data) | Callback function for custom version hint UI (if you want to customize the popup UI, you can get the return value through the callback function to control the appearance of the popup) |  | No |
| config.onRefresh | function(data) | Confirm update: the callback function of the custom refresh event, where data is the latest version **`v1.5.0`** |  | No |
| config.onCancel | function(data) | Cancel update: the callback function of the custom cancel event, where data is the latest version **`v1.5.0`** |  | No |
| options | object | Configuration items for popup text and themes (not customize the popup UI, but use it if you need to modify the text and themes) | | No |
| options.title | string | Popup title | Update | No |
| options.description | string | Popup description | V xxx is available | No |
| options.buttonText | string | Popup button text | Refresh | No |
| options.cancelButtonText | string | Text to close pop-up button (add this option, if you want the pop-up to be allowed to be close) **`v1.5.0`** |  | No |
| options.cancelMode | ignore-current-version / ignore-today / ignore-current-window | Close pop-up mode (It takes effect when cancelButtonText is set) **`v1.5.0`** | ignore-current-version | No |
| options.cancelUpdateAndStopWorker | boolean | When the popup is cancelled, the worker is also stopped (It takes effect when cancelButtonText is set) **`v1.5.0`** | false | 否 |
| options.imageUrl | string | Popup image |  | No |
| options.rocketColor | string | The popup picture's theme color of the rocket, after setting Options.imageUrl is invalid | | No |
| options.primaryColor | string | The theme color of the popup, it will affect the hint image background color and button background color, after setting imageUrl is invalid | | No |
| options.buttonStyle | string | The CSS configuration of pop-up buttons can override the default button style | | No |

**unCheckVersion Function**
> Terminate the `worker` process created after calling `checkVersion`

| Params | Type | Description | Default | Required |
| --- | --- | --- | --- | --- |
| closeDialog | boolean | Whether to close the version update prompt pop-up window | - | Yes |
| closeWorker | boolean | Whether to close the worker | true | No |

## Test

```shell
npm run test
```

## Links
- [Timezone List](https://jp.cybozu.help/general/zh/admin/list_systemadmin/list_localization/timezone.html)
- [JSON Escape](https://codebeautify.org/json-encode-online)
- [Lark Card Builder](https://open.larksuite.com/tool/cardbuilder?from=howtoguide)
- [WeCom Chat Bot Doc](https://developer.work.weixin.qq.com/document/path/91770)

## License

version-rocket is open source software with [Apache License 2.0](./LICENSE.md)

## Other interesting open source projects

**[web-authn-completed-app](https://github.com/guMcrey/web-authn-completed-app)**

💻 [Online preview](https://web-authn.x-dev.club)

> A complete application based on WebAuthn API, which allows **websites to authenticate users with the built-in authenticator** in the browser/system (such as Apple TouchID and Windows Hello or biometric sensor of mobile devices). It will **replace passwords**, which is the future of online authentication.



================================================
FILE: README.zh-CN.md
================================================
# 🔔 version-rocket 🚀

简体中文 | [English](./README.md)

> 一个用于 web 应用版本检测和部署通知的工具库。

[![](https://img.shields.io/npm/v/version-rocket)](https://www.npmjs.com/package/version-rocket)
[![](https://img.shields.io/npm/dm/version-rocket.svg)](https://npmcharts.com/compare/version-rocket?minimal=true)
[![](https://codecov.io/gh/guMcrey/version-rocket/main/graph/badge.svg)](https://codecov.io/gh/guMcrey/version-rocket)
[![](https://github.com/guMcrey/version-rocket/actions/workflows/main.yml/badge.svg)](https://github.com/guMcrey/version-rocket/actions/)
[![](https://img.shields.io/npm/l/version-rocket)](https://www.npmjs.com/package/version-rocket)

目录
- [简介](#简介)
- [功能特点](#功能特点)
- [实现原理](#实现原理)
- [安装](#安装)
- [快速开始](#快速开始)
  - [Web 应用版本实时检测](#web-应用版本实时检测)
    - [个性化设置主题](#个性化设置主题)
    - [效果截图](#效果截图)
  - [自动发送部署消息到飞书 (Lark) 或企业微信 (WeCom) 群聊](#自动发送部署消息到飞书-lark-或企业微信-wecom-群聊)
    - [飞书 (Lark)](#飞书-lark)
      - [设置动态文案](#设置动态文案)
      - [自定义消息卡片](#自定义消息卡片)
      - [效果截图](#效果截图-1)
    - [企业微信 (WeCom)](#企业微信-wecom)
      - [设置动态文案](#设置动态文案-1)
      - [自定义消息卡片](#自定义消息卡片-1)
      - [效果截图](#效果截图-2)
- [API](#api)
- [测试](#测试)
- [相关链接](#相关链接)
- [许可证](#许可证)
- [其他有趣的开源项目](#其他有趣的开源项目)

---

## 简介

**version-rocket** 包含两个功能模块: **Web 应用版本实时检测**、**自动发送部署消息到飞书 (Lark) 或企业微信 (WeCom) 群聊。**
> 你可以根据需求单独使用某个模块, 或一起使用

什么时候适合使用 **Web 应用版本实时检测**?
  - 场景: 经常会发生这样的情况, 当用户在浏览器中打开某 web 应用很长时间且未刷新页面, 在应用有新版本更新或问题修复时, 用户会无法及时知晓有新版发布, 导致用户继续使用旧的版本, 影响用户体验和后端数据准确性。
  - **version-rocket** 会实时检测应用版本, 当发现新版本时, 展示版本更新提示弹窗, 提示用户刷新页面来更新应用。

什么时候适合使用 **自动发送部署消息到飞书 (Lark) 或企业微信 (WeCom) 群聊**?
  - 场景: 在团队合作中可能会有这样的情况, 你作为前端工程师, 在联调测试或部署上线时, 每次部署后都需要跟团队成员口头传达已经部署成功, 增加了沟通成本, 不够自动化, 也没有部署记录以有迹可循。
  - **version-rocket** 利用 `WebHook` 方式, 在应用部署成功后, 通过群聊机器人, 自动帮你推送“部署成功”的消息到群聊中。 

*如果有其他平台的推送需求, 可以提 issue*

## 功能特点

- 支持所有现代浏览器
- **可用版本实时检测**提供两种方式: 1. 通过**管理版本号**; 2. 通过检测**指定文件内容是否有更新**
  1. 通过管理版本号: 支持任意版本格式, 例如: 1.1.0、1.1.1.0、1.1.0-beta 等等
  2. 通过检测指定文件内容是否有更新: 支持任意远程服务器中的文件 `v1.7.0`
- 支持**个性化设置**版本提示弹窗的文案和**主题**, 也支持自定义 UI
- 部署成功后,将**部署消息同步给群聊机器人**, 目前支持飞书 (Lark) 和企业微信 (WeCom)
- 部署信息卡片的文案和消息模版支持自定义, 并支持动态生成的字段传入
- 支持 TypeScript
- 支持 Node 14+ 🐰

## 实现原理

- **Web 应用版本实时检测:** 
  1. 通过管理版本号: **version-rocket** 将用户当前浏览器中的版本与远程服务器中的版本文件进行比较。我们使用基于 javascript 的 `Web Worker API` 来做监测轮询,不会影响浏览器渲染进程。
  2. 通过检测指定文件内容是否有更新: **version-rocket** 将依赖浏览器的协商缓存原理来判断指定的文件内容是否发生了改变。我们使用基于 javascript 的 `Web Worker API` 来做监测轮询,不会影响浏览器渲染进程。`v1.7.0`

- **自动发送部署消息到飞书 (Lark) 或企业微信 (WeCom) 群聊:** **version-rocket** 调用协同办公软件提供的 WebHook 方式, 触发群聊机器人发送消息。

## 安装

[![version-rocket](https://nodei.co/npm/version-rocket.png)](https://www.npmjs.com/package/version-rocket)

```bash
# 选择一个你喜欢的包管理器

# npm
npm install version-rocket --save

# yarn
yarn add version-rocket

# pnpm
pnpm install version-rocket

```

### 快速开始

### Web 应用版本实时检测: 通过管理版本号

第一步: 导入 `checkVersion()`, 并调用

```javascript
// 入口文件: 如 App.vue 或 App.jsx 等

import { checkVersion } from 'version-rocket'
// 推荐使用 package.json 中的 version 字段, 也可自定义 version
import { version } from '../package.json'

// 在生命周期钩子中调用 checkVersion
checkVersion({
  localPackageVersion: version,
  originVersionFileUrl: `${location.origin}/version.json`,
  // 更多配置选项请参考 API
})

// 如需终止版本检测时, 在销毁生命周期中, 调用 unCheckVersion 方法进行终止, 详情参见 API
unCheckVersion({closeDialog: false})
 
```

第二步: 执行 `generate-version-file` 自定义命令后,在 dist 目录生成 `version.json` 文件, 用于部署到远程服务器
- `VERSION` (参数可选): 需要**自定义 version** 时传入, 默认取 package.json 的 version 字段
- 文件输出目录 (参数可选): 需要**自定义 version.json 输出目录**时传入, 默认为 dist 目录
- `EXTERNAL` (参数可选):希望将更多信息存到 `version.json` 中时传入,如当前版本的修改内容或其他需要展示在提示弹窗上时 (用于 onVersionUpdate 自定义 UI 时)`v1.6.0`
- `EXTERNAL_PATH` (参数可选):接收一个文件路径, 推荐在需要将大量额外信息写入 `version.json` 中时使用. 当同时设置了 `EXTERNAL` 和 `EXTERNAL_PATH` 时,优先级低于 `EXTERNAL` (用于 onVersionUpdate 自定义 UI 时)`v1.6.1`

**VERSION 环境变量设置方式**

```javascript
// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac 或 Linux 系统
    "generate:version": "VERSION=1.1.0-beta generate-version-file dist public"
    // Windows 系统先安装 cross-env
    // npm install cross-env -D
    "generate:version": "cross-env VERSION=1.1.0-beta generate-version-file dist public"
    ...
  },
  ...
}

```

**EXTERNAL `v1.6.0` 和 EXTERNAL_PATH `v1.6.1` 环境变量设置方式**

JSON 格式可以通过 [这里](https://codebeautify.org/json-encode-online) 转义后再使用

```javascript
// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac 或 Linux 系统 (简单文本)
    "generate:version": "EXTERNAL='some text' generate-version-file dist public"
    // Mac 或 Linux 系统 (JSON 文本)
    "generate:version": "EXTERNAL='{\"update\":\"fix bugs\",\"content\":\"some tips\"}' generate-version-file dist public"
    // Mac 或 Linux 系统 (JSON 文件, 如 version-external.json)
    "generate:version": "EXTERNAL_PATH=version-external.json generate-version-file dist public"
    // Windows 系统 (简单文本)
    "generate:version": "set EXTERNAL=some text && generate-version-file dist public"
    // Windows 系统 (JSON 文本)
    "generate:version": "set EXTERNAL={\"update\":\"fix bugs\",\"content\":\"some tips\"} && generate-version-file dist public"
    // Windows 系统 (JSON 文件, 如 version-external.json)
    "generate:version": "set EXTERNAL_PATH=version-external.json && generate-version-file dist public"
    ...
  },
  ...
}

```

```javascript
// version-external.json 示例

{
    "update": [
        "fix some bugs",
        "improve home page",
        "update docs"
    ],
    "content": "please update to latest version"
}
```

<details>
<summary>⚠️ 注意事项</summary>
如果你的项目接入了 CDN, 强烈建议你将 version.json 文件设置为强制不缓存 (在 nginx 中配置或关闭 CDN 忽略参数缓存的功能)

``` shell
// nginx 配置示例

server {
  ...
  location / {
    ...
    if ($request_filename ~* .*\/version\.(json)$) {
      add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
    }
    ...
  }
  ...
}
```
</details>

*完成以上两个步骤, 版本监测功能(通过管理版本号)可以正常使用了 🎉🎉*

### Web 应用版本实时检测: 通过检测指定文件内容是否有更新 `v1.7.0`

> ⚠️ 温馨提示: 该方式不支持 "当前版本的修改内容或其他需要展示在提示弹窗上"的内容 (如有这样的需求, 请使用 “管理版本号” 的方式)

导入 `checkVersion()`, 并调用

```javascript
// 入口文件: 如 App.vue 或 App.jsx 等
import { checkVersion } from 'version-rocket'

// 在生命周期钩子中调用 checkVersion
checkVersion({
  // 要监听的文件列表, 一般监测某个域名下的 index.html 文件
  checkOriginSpecifiedFilesUrl: [`${location.origin}/index.html`],
  // 监听的文件列表的校验模式: 'one'(默认) | 'all'
  checkOriginSpecifiedFilesUrlMode: 'one',
  // 是否启用版本监测 (默认 true)
  enable: process.env.NODE_ENV !== 'development'
})

// 如需终止版本检测时, 在销毁生命周期中, 调用 unCheckVersion 方法进行终止, 详情参见 API
unCheckVersion({closeDialog: false})
 
```

*完成以上步骤, 版本监测功能(通过检测指定文件内容是否有更新)可以正常使用了 🎉🎉*

#### 个性化设置主题

```javascript

// 入口文件: 如 App.vue 或 App.jsx 等

import { checkVersion } from 'version-rocket'
// 推荐使用 package.json 中的 version 字段, 也可自定义 version
import { version } from '../package.json'

checkVersion(
  {
    localPackageVersion: version,
    originVersionFileUrl: `${location.origin}/version.json`,
  },
  {
    title: 'Title',
    description: 'Description',
    primaryColor: '#758bfd',
    rocketColor: '#ff8600',
    buttonText: 'Button Text',
  }
)

```

或设置提示图片

``` javascript

// 入口文件: 如 App.vue 或 App.jsx 等

import { checkVersion } from 'version-rocket'
// 推荐使用 package.json 中的 version 字段, 也可自定义 version
import { version } from '../package.json'

checkVersion(
  {
    localPackageVersion: version,
    originVersionFileUrl: `${location.origin}/version.json`,
  },
  {
    imageUrl: 'https://avatars.githubusercontent.com/u/26329117',
  }
)

```

#### 效果截图

<p align="center">
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/available-version-tips.gif?raw=true" width="500"/>
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/custom-themes.jpg?raw=true" width="500" />
</p>

---

### 自动发送部署消息到飞书 (Lark) 或企业微信 (WeCom) 群聊

#### 飞书 (Lark)

第一步: 
- 在项目根目录下**创建 lark-message-config.json**文件,用于设置消息卡片的文案
- **执行 send-lark-message**自定义命令
  - `MESSAGE_PATH` (参数可选): 需要自定义文件路径或文件名时传入 (此参数对有区分部署环境的需求时, 非常有用)。默认使用根目录下的 lark-message-config.json 文件 
  - `PACKAGE_JSON_PATH` (参数可选): 需要自定义 package.json 文件路径时传入 (此参数对于 monorepo 项目的部署时, 可能有用)。默认获取根路径下的 package.json 文件

```javascript 

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
     // Mac 或 Linux 系统
    "send-lark-message:test": "MESSAGE_PATH=./lark-message-staging-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-lark-message"
    // Windows 系统先安装 cross-env
    // npm install cross-env -D
    "send-lark-message:test": "cross-env MESSAGE_PATH=./lark-message-staging-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-lark-message"
    ...
  },
  ...
}

```

第二步: 配置 `lark-message-config.json` 文件

``` javascript

// lark-message-config.json

{
  // 可选: 消息卡片头部背景色, 用于设置标题背景颜色, 默认 turquoise, v1.6.2
  // 取值范围: blue | wathet | turquoise | green | yellow | orange | red | carmine | violet | purple | indigo | grey
  "headerBgColor": "red",
  // 消息卡片标题
  "title": "TEST FE Deployed Successfully",
  // 项目名称标签
  "projectNameLabel": "Project name label",
  // 项目名称
  "projectName": "TEST",
  // 项目分支标签
  "branchLabel": "Branch label",
  // 项目分支, 可用于区别部署环境
  "branch": "Staging",
  // 版本标签
  "versionLabel": "Version label",
  // 版本
  "version": "1.1.1.0",
  // 项目可访问地址标签
  "accessUrlLabel": "Access URL label",
  // 项目可访问地址
  "accessUrl": "https://test.com",
  // 是否@所有人标签
  "isNotifyAllLabel": "Is notify all label",
  // 是否@所有人: true / false
  "isNotifyAll": true,
  // Lark 机器人的 webhook 链接
  "larkWebHook": "https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxxxxx",
  // 可选: 部署工具描述
  "deployToolsText": "Deploy tools text",
  // 可选: 部署所使用的方式或平台
  "deployTools": "Jenkins",
  // 可选: 部署时间想要转换成的时区,默认 "Asia/Shanghai" (当你的项目要部署的目标服务器与你所在时区不同, 可以设置此字段来转换时区)
  "expectConvertToTimezone": "America/New_York"
  // 可选: 想要展示除模版之外的更多信息
  "remark": "Trigger by bob, fix xxx bug"
}

```

#### 设置动态文案

如果你的卡片文案会根据条件来生成时, 可以传入 `MESSAGE_JSON` 字段来自定义, 如 version, title 等.

*注意: `MESSAGE_JSON` 的值需要做转义*

```javascript

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac 或 Linux 系统
    "send-lark-message:test": "MESSAGE_JSON='{\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true}' send-lark-message"
    // Windows 系统
    "send-lark-message:test": "set MESSAGE_JSON={\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true} && send-lark-message"
    ...
  },
  ...
}

```

或 export 变量后, 在 package.json 中引用 (不支持 Windows)

```javascript

// ci file

sh "npm run build"
sh "export messageJSON='{\"title\": \"This is a title\"}'"


// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    "send-lark-message:test": "MESSAGE_JSON=${messageJSON} send-lark-message"
    ...
  },
  ...
}

```

#### 自定义消息卡片

```javascript

// lark-message-config.json

{
    // 消息卡片内容
    "message": {
        "msg_type": "text",
        "content": {
            "text": "New message reminder"
        }
    },
    // Lark 机器人的 webhook 链接
    "larkWebHook": "https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxxxxx"
}

```

#### 效果截图

<p align="left">
  <img src="https://github.com/guMcrey/version-rocket/blob/main/assets/custom-message-text.jpg?raw=true" width="400" />
  &emsp;
  <img src="./assets/deploy-failed-message.jpg?raw=true" width="400" />
</p>

#### 企业微信 (WeCom)

第一步: 
- 在项目根目录下**创建 message-config.json**文件,用于设置消息卡片的文案
- **执行 send-wecom-message**自定义命令
  - `MESSAGE_PATH` (参数可选): 需要自定义文件路径或文件名时传入 (此参数对有区分部署环境的需求时, 非常有用)。默认使用根目录下的 message-config.json 文件 
  - `PACKAGE_JSON_PATH` (参数可选): 需要自定义 package.json 文件路径时传入 (此参数对于 monorepo 项目的部署时, 可能有用)。默认获取根路径下的 package.json 文件

```javascript 

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac 或 Linux 系统
    "send-wecom-message:test": "MESSAGE_PATH=./message-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-wecom-message"
    // Windows 系统先安装 cross-env
    // npm install cross-env -D
    "send-wecom-message:test": "cross-env MESSAGE_PATH=./message-config.json PACKAGE_JSON_PATH=./packages/test/package.json send-wecom-message"
    ...
  },
  ...
}

```

第二步: 配置 `message-config.json` 文件

``` javascript

{
    // 消息卡片标题
    "title": "TEST FE Deployed Successfully",
    // 可选: 项目名称标签, 默认 Project Name
    "projectNameLabel": "Project name label",
    // 项目名称
    "projectName": "TEST",
    // 可选: 项目分支标签, 默认 Branch
    "branchLabel": "Branch label",
    // 项目分支, 可用于区别部署环境
    "branch": "Staging",
    // 可选: 版本标签, 默认 Version
    "versionLabel": "Version label",
    // 版本
    "version": "1.1.1.0",
    // 可选: 项目可访问地址标签, 默认 URL
    "accessUrlLabel": "Access URL label",
    // 项目可访问地址
    "accessUrl": "https://test.com",
    // 是否@所有人: true / false
    "isNotifyAll": true,
    // 企业微信机器人的 webhook 链接
    "webHook": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxx",
    // 可选: 部署工具描述
    "deployToolsText": "Deploy tools text",
    // 可选: 部署时间想要转换成的时区,默认 "Asia/Shanghai" (当你的项目要部署的目标服务器与你所在时区不同, 可以设置此字段来转换时区)
    "expectConvertToTimezone": "America/New_York"
    // 可选: 想要展示除模版之外的更多信息
    "remark": "Trigger by bob, fix xxx bug"
}

```

#### 设置动态文案

如果你的卡片文案会根据条件来生成时, 可以传入 `MESSAGE_JSON` 字段来自定义, 如 version, title 等.

*注意: `MESSAGE_JSON` 的值需要做转义*

```javascript

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    // Mac 或 Linux 系统
    "send-wecom-message:test": "MESSAGE_JSON='{\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true}' send-wecom-message"
    // Windows 系统
    "send-wecom-message:test": "set MESSAGE_JSON={\"title\":\"This is a dynamically generated title\",\"version\":\"1.1.0-beta\",\"accessUrl\":\"http://test.example.com\",\"isNotifyAll\":true} && send-wecom-message"
    ...
  },
  ...
}
```

或 export 变量后, 在 `package.json` 中引用 (不支持 Windows)

```javascript

// ci file
sh "npm run build"
sh "export messageJSON='{\"title\": \"This is a title\"}'"

// package.json

{
  "name": "test",
  "description": "test",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    ...
    "send-wecom-message:test": "MESSAGE_JSON=${messageJSON} send-wecom-message"
    ...
  },
  ...
}

```

#### 自定义消息卡片

```javascript

// message-config.json

{
    // 消息卡片内容
    "message": {
        "msgtype": "text",
        "text": {
            "content": "This is a custom message"
        }
    }
    // 企业微信机器人的 webhook 链接
    "webHook": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxx"
}
```

#### 效果截图

<img src="https://github.com/guMcrey/version-rocket/blob/main/assets/wecom-message.jpg?raw=true" width="500" />

## API

**checkVersion 方法**
> 开启应用版本实时检测功能

| 参数 | 类型 | 描述 | 默认值 | 必需 |
| --- | --- | --- | --- | --- |
| config | object | 版本监测配置项 |  | 是 |
| config.originVersionFileUrl | string |  远程服务器上的 version.json 文件路径 |  | 否 **`v1.7.0`** |
| config.localPackageVersion | string | 当前应用版本号, 通常取 package.json 的 version 字段, 用于与远程服务器的 version.json 文件比较 |  | 否 **`v1.7.0`** |
| config.pollingTime | number | 轮询监测的时间间隔, 单位 ms | 5000 | 否 |
| config.immediate | boolean | 第一次访问时, 立即触发版本监测, 之后按自定义时间间隔轮询 **`v1.5.0`** | false | 否 |
| config.checkOriginSpecifiedFilesUrl | array | 设置该属性后将使用 “通过检测指定文件是否有更新” 而不是 “通过管理版本号” 来监测版本, 传入希望监测的文件地址列表, 通常情况为某个域名下的 index.html 文件 (自动去重) **`v1.7.0`** |  | 否  |
| config.checkOriginSpecifiedFilesUrlMode | 'one' / 'all' | 'one' 表示列表中文件地址只要有一个内容发生改变即提示更新; 'all' 表示列表中文件地址都发生改变时才提示更新. (当 checkOriginSpecifiedFilesUrl 配置后才生效) **`v1.7.0`** | 'one' | 否 |
| config.enable | boolean | 是否启用版本监测, 通过该配置项可以设置版本监测只在指定环境下开启 **`v1.7.0`** | true | 否 |
| config.clearIntervalOnDialog | boolean | 当发现新版本提示弹窗出现后, 清空定时器 **`v1.7.0`** | false | 否 |
| config.onVersionUpdate | function(data) | 自定义版本提示 UI 的回调函数 (如果你想自定义弹窗 UI, 通过回调函数可以拿到返回值来控制弹窗的显隐 ) |  | 否 |
| config.onRefresh | function(data) | 确认更新: 自定义 refresh 事件的回调函数, data 为最新版本号 **`v1.5.0`** |  | 否 |
| config.onCancel | function(data) | 取消更新: 自定义 cancel 事件的回调函数, data 为最新版本号 **`v1.5.0`** |  | 否 |
| options | object | 弹窗文案和主题的配置项 (不自定义弹窗 UI, 但有修改文案和主题的需求时使用) |  | 否 |
| options.title | string | 弹窗的标题 | Update | 否 |
| options.description | string | 弹窗的描述 | V xxx is available | 否 |
| options.buttonText | string | 弹窗按钮的文案 | Refresh | 否 |
| options.cancelButtonText | string | 关闭弹窗按钮的文案 (如果你希望弹窗允许被关闭, 请添加此选项) **`v1.5.0`** |  | 否 |
| options.cancelMode | ignore-current-version (当前版本不再提示, 通过管理版本号监测版本更新的默认配置, 该配置只支持管理版本号的方式) / ignore-today (今天不再提示) / ignore-current-window (当前窗口不再提示, 通过监测指定文件内容是否有更新方式的默认配置) | 关闭弹窗的模式 (当 cancelButtonText 设置后生效) **`v1.5.0`** | ignore-current-version | 否 |
| options.cancelUpdateAndStopWorker | boolean | 关闭弹窗时, 也关闭 worker (当 cancelButtonText 设置后生效) **`v1.5.0`** | false | 否 |
| options.imageUrl | string | 弹窗的提示图片 |  | 否 |
| options.rocketColor | string | 弹窗提示图片中火箭的主题色, 设置后 options.imageUrl 无效 |  | 否 |
| options.primaryColor | string | 弹窗的主题色, 会作用到提示图片背景色和按钮背景色, 设置后 imageUrl 无效 | | 否 |
| options.buttonStyle | string | 弹窗按钮的 css 配置, 可以覆盖掉默认的按钮样式 |  | 否 |

**unCheckVersion 方法**
> 终止在调用 `checkVersion` 后创建的 `worker` 进程

| 参数 | 类型 | 描述 | 默认值 | 必需 |
| --- | --- | --- | --- | --- |
| closeDialog | boolean | 是否关闭版本更新提示弹窗 | false | 是 |
| closeWorker | boolean | 是否停止 worker 轮询 | true | 否 |

## 测试

```shell
npm run test
```

## 相关链接

- [时区参照表](https://jp.cybozu.help/general/zh/admin/list_systemadmin/list_localization/timezone.html)
- [JSON 在线转义工具](https://codebeautify.org/json-encode-online)
- [Lark 消息卡片搭建工具](https://open.larksuite.com/tool/cardbuilder?from=howtoguide)
- [企业微信群聊机器人文档](https://developer.work.weixin.qq.com/document/path/91770)

## 许可证

version-rocket 是开源软件, 许可证为 [Apache License 2.0](./LICENSE.md)

## 其他有趣的开源项目

**[web-authn-completed-app](https://github.com/guMcrey/web-authn-completed-app)**

💻 [在线体验](https://web-authn.x-dev.club)

> 一个基于 WebAuthn API 实现的完整应用, 它允许**网站使用浏览器/系统内置的认证器**(如 Apple TouchID 和 Windows Hello 或移动设备的生物识别传感器)对用户进行**身份认证**. 它将会**代替密码**, 是在线身份认证的未来.




================================================
FILE: babel.config.js
================================================
module.exports = {
    presets: [
        ['@babel/preset-env', { targets: { node: 'current' } }],
        '@babel/preset-typescript',
    ],
};

================================================
FILE: components/images.d.ts
================================================
declare module '*.png'
declare module '*.svg'


================================================
FILE: components/version-tip-dialog.css
================================================
  #version-rocket .version-area {
    box-sizing: border-box;
    position: fixed;
    right: 20px;
    bottom: 20px;
    z-index: 99999;
    background-color: #fff;
    border: 1px solid #ebeef5;
    width: 140px;
    box-shadow: 0 10px 20px 0 rgba(0,0,0,0.12);
    border-radius: 12px;
    animation: fadeInUp 1s ease;
    animation-iteration-count: 1;
  }
  #version-rocket .version-img {
    margin-top: -70px;
    width: 100%;
    height: 100%;
  }
  #version-rocket .version-content {
    padding: 6px 12px 9px;
    text-align: center;
    background-color: #fff;
    font-family: inherit;
    border-radius: 12px;
  }
  #version-rocket .version-title {
    font-size: 13px;
    font-weight: 600;
    color: #101010;
    line-height: 13px;
  }
  #version-rocket .version-subtitle {
    margin-top: 8px;
    font-size: 12px;
    color: rgba(0,0,0,0.7);
    line-height: 13px;
  }
  #version-rocket .refresh-button {
    margin-top: 12px;
    width: 100%;
    background-color: #fd8079;
    border-color: #fd8079;
    transition: 0.2s;
    animation: refreshAnimation 2s linear infinite;
    color: #fff;
    padding: 5px 0;
    font-size: 15px;
    border-radius: 15px;
    font-weight: 500;
    cursor: pointer;
  }
  #version-rocket .refresh-button:hover {
    background-color: rgba(253,128,121,0.9);
  }
  #version-rocket .cancel-button {
    margin-top: 5px;
    font-size: 12px;
    font-weight: 500;
    color: #888;
    text-decoration: underline;
    cursor: pointer;
  }
  #version-rocket .cancel-button:hover {
    color: #999;
  }
  @-moz-keyframes refreshAnimation {
    0% {
      transform: scale(0.9);
    }
    50% {
      transform: scale(1.05);
    }
    100% {
      transform: scale(0.9);
    }
  }
  @-webkit-keyframes refreshAnimation {
    0% {
      transform: scale(0.9);
    }
    50% {
      transform: scale(1.05);
    }
    100% {
      transform: scale(0.9);
    }
  }
  @-o-keyframes refreshAnimation {
    0% {
      transform: scale(0.9);
    }
    50% {
      transform: scale(1.05);
    }
    100% {
      transform: scale(0.9);
    }
  }
  @keyframes refreshAnimation {
    0% {
      transform: scale(0.9);
    }
    50% {
      transform: scale(1.05);
    }
    100% {
      transform: scale(0.9);
    }
  }
  @-moz-keyframes fadeInUp {
    from {
      opacity: 0;
      transform: translate3d(0, 100%, 0);
    }
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0);
    }
  }
  @-webkit-keyframes fadeInUp {
    from {
      opacity: 0;
      transform: translate3d(0, 100%, 0);
    }
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0);
    }
  }
  @-o-keyframes fadeInUp {
    from {
      opacity: 0;
      transform: translate3d(0, 100%, 0);
    }
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0);
    }
  }
  @keyframes fadeInUp {
    from {
      opacity: 0;
      transform: translate3d(0, 100%, 0);
    }
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0);
    }
  }  

================================================
FILE: components/versionTipDialog.ts
================================================
import versionBg from './../assets/version-bg.png'
import './version-tip-dialog.css'
import {setVersionTipTheme} from './versionTipTheme'
import {unCheckVersion} from '../index'

const defaultParams = {
  title: 'Update',
  description: 'is available',
  buttonText: 'Refresh',
}

export const versionTipDialog = (params: {
  title?: string
  description?: string
  buttonText?: string
  cancelButtonText?: string
  cancelMode?: string
  imageUrl?: string
  rocketColor?: string
  primaryColor?: string
  buttonStyle?: string
  newVersion?: string
  needRefresh?: boolean
  onRefresh?: (event: any) => void
  onCancel?: (event: any) => void
}) => {
  const dialogElement = document.querySelector('#version-rocket')
  if (dialogElement) return
  const template = `
   <div id="version-rocket">
        <div class="version-area">
            ${
              params.primaryColor || params.rocketColor
                ? `<div class="version-img">${setVersionTipTheme(
                    params.primaryColor,
                    params.rocketColor
                  )}</div>`
                : `<img class="version-img" src="${
                    params.imageUrl || versionBg
                  }" alt="version" />`
            } 
            <div class="version-content">
                <div class="version-title">
                  ${params.title || defaultParams.title}
                </div>
                <div class="version-subtitle">
                  ${
                    params.description ||
                    (params.newVersion
                      ? `V ${params.newVersion} ${defaultParams.description}`
                      : `A new version ${defaultParams.description}`)
                  }
                </div>
                <div style="${
                  params.primaryColor
                    ? `background-color: ${params.primaryColor};`
                    : ''
                } ${params.buttonStyle || ''}"  class="refresh-button">
                  ${params.buttonText || defaultParams.buttonText}
                </div>
                ${
                  params.cancelButtonText
                    ? `<div class="cancel-button">
                    ${params.cancelButtonText}
                  </div>`
                    : ''
                }
            </div>
        </div>
   </div>`
  let rootNode = document.createElement('div')
  rootNode.innerHTML = template
  document.body.appendChild(rootNode)

  // refresh
  const refreshBtnNode = document.querySelector(
    '#version-rocket .refresh-button'
  ) as HTMLElement
  refreshBtnNode.onclick = () => {
    if (typeof params?.onRefresh === 'function') {
      params.onRefresh({
        newVersion: params.newVersion,
        needRefresh: params.needRefresh || false,
      })
    } else {
      window.location.reload()
    }
  }

  // cancel
  const cancelBtnNode = document.querySelector(
    '#version-rocket .cancel-button'
  ) as HTMLElement
  if (!cancelBtnNode) return

  cancelBtnNode.onclick = () => {
    if (typeof params?.onCancel === 'function') {
      params.onCancel({
        newVersion: params.newVersion,
        needRefresh: params.needRefresh || false,
      })
      return
    }

    const cancelMode = params?.cancelMode || 'ignore-current-version'
    switch (cancelMode) {
      case 'ignore-current-version':
        localStorage.setItem(
          'version-rocket:cancelled',
          params.newVersion || ''
        )
        break
      case 'ignore-today':
        localStorage.setItem(
          'version-rocket:cancelled',
          new Date().toLocaleDateString()
        )
        break
      case 'ignore-current-window':
        sessionStorage.setItem('version-rocket:cancelled', 'true')
        break
      default:
        break
    }

    unCheckVersion({closeDialog: true, closeWorker: false})
  }
}


================================================
FILE: components/versionTipTheme.ts
================================================
export const setVersionTipTheme = (
  primaryColor = '#FA8D88',
  rocketColor = '#FE7D66'
) => {
  return `<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 2009 2108" version="1.1" xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <title>version-rokect</title>
    <defs>
        <!-- 1. background -->
        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-1">
            <stop stop-color="${primaryColor}" offset="0%"></stop>
            <stop stop-color="${primaryColor}" offset="100%"></stop>
        </linearGradient>
    </defs>
    <g id="page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="version-rokect" transform="translate(0.000000, -0.000000)" fill-rule="nonzero">
            <g id="bg" transform="translate(18.451214, 78.361595)" fill="url(#linearGradient-1)">
                <path
                    d="M679.108786,0.0184053537 L679.008786,1.25840535 C680.628786,1.23840535 682.258786,1.21840535 683.908786,1.19840535 C684.218786,1.66840535 684.828786,2.61840535 685.138786,3.08840535 C687.348786,3.02840535 689.488786,3.46840535 691.158786,5.02840535 C691.638786,5.13507202 692.130144,5.22149177 692.62474,5.30599109 L693.368045,5.43359054 C694.855453,5.69507202 696.335453,6.02173869 697.588786,6.90840535 C703.968786,8.77840535 710.108786,11.2284054 715.978786,14.3484054 C717.778786,15.9084054 719.718786,17.2984054 721.858786,18.3684054 C724.418786,20.5484054 727.468786,22.2084054 729.508786,24.9584054 C730.398786,25.3684054 731.298786,25.7784054 732.218786,26.1784054 L732.218786,27.9584054 L732.218786,27.9584054 C732.410036,27.9584054 732.673005,27.9555929 732.953376,27.9520772 L733.521228,27.9447335 C733.800661,27.9412179 734.061286,27.9384054 734.248786,27.9384054 C734.248786,28.4384054 734.228786,29.4484054 734.228786,29.9484054 C734.628786,29.9684054 735.428786,30.0084054 735.828786,30.0184054 C737.778786,33.9884054 741.488786,36.6984054 743.348786,40.7084054 C743.938786,41.6184054 744.558786,42.5184054 745.188786,43.3984054 C745.548786,43.3684054 746.248786,43.2884054 746.598786,43.2584054 C746.728786,44.4984054 746.878786,45.7384054 747.048786,46.9784054 C747.908786,48.1484054 748.648786,49.3984054 749.488786,50.5884054 C750.548786,52.4384054 750.948786,54.5284054 751.288786,56.6184054 C752.604171,57.0722515 752.88997,58.2361568 753.106583,59.4364754 L753.202631,59.9768032 C753.235251,60.156216 753.269555,60.3341746 753.308786,60.5084054 C754.562579,61.3215088 754.826265,62.6470023 754.963083,64.0209848 L755.005174,64.4801385 C755.064815,65.1696539 755.116717,65.8584054 755.268786,66.4884054 C756.311286,67.3959054 756.656286,68.6746554 756.936599,69.9660616 L757.046774,70.4824491 C757.101636,70.7401304 757.157286,70.9964054 757.218786,71.2484054 C757.678786,71.2184054 758.598786,71.1584054 759.058786,71.1384054 C759.068786,71.6484054 759.088786,72.6784054 759.098786,73.1884054 C760.888786,73.1184054 762.688786,73.0384054 764.498786,72.9584054 C767.058786,70.5484054 770.758786,71.2984054 773.958786,71.0784054 L773.838786,69.9484054 C777.658786,69.2284054 781.548786,69.0684054 785.428786,68.9884054 C786.448246,67.2975945 788.259853,67.1524375 790.116576,67.1453449 L790.601471,67.1457011 C791.571343,67.1489751 792.535813,67.1565135 793.388786,66.9684054 C795.861367,65.4238892 798.861679,65.3111317 801.833273,65.2529977 L802.681038,65.2366847 C803.809067,65.2137435 804.925238,65.1796957 805.998786,65.0584054 L805.838786,63.9784054 C809.858786,63.3184054 813.928786,62.9884054 818.018786,63.0684054 L817.828786,61.9584054 C821.848786,61.3684054 825.918786,61.1084054 829.988786,61.0884054 L829.838786,59.9684054 C833.668786,59.3384054 837.548786,59.1484054 841.428786,59.0084054 C844.286059,57.4493144 847.730522,57.2832814 851.169462,57.2449944 L852.151355,57.2364383 C853.785884,57.2243282 855.406362,57.2138599 856.948786,57.0684054 L856.898786,56.0084054 C862.488786,55.0284054 868.188786,55.1284054 873.848786,55.0384054 C873.898786,54.7684054 874.008786,54.2284054 874.058786,53.9684054 C880.428786,53.1684054 886.858786,52.9884054 893.278786,53.1484054 C893.098786,52.8484054 892.738786,52.2584054 892.558786,51.9584054 C900.018786,51.2184054 907.508786,50.9484054 915.008786,51.0984054 L914.748786,49.9084054 C925.818786,49.7284054 936.888786,48.7084054 947.998786,49.1084054 L947.868786,47.9284054 C975.958786,46.8784054 1004.16879,46.9384054 1032.24879,47.8784054 C1032.24545,47.975072 1032.2399,48.105072 1032.2336,48.2461831 L1032.21397,48.6806276 C1032.20768,48.8217387 1032.20212,48.9517387 1032.19879,49.0484054 C1044.20879,48.6784054 1056.16879,49.8984054 1068.15879,49.9284054 L1068.15879,51.0884054 C1070.13379,51.1828498 1072.16589,51.1600103 1074.21264,51.1362706 L1075.44212,51.1228498 C1080.36434,51.0761831 1085.32212,51.1584054 1089.72879,52.9784054 C1095.90879,53.1284054 1102.07879,53.2584054 1108.21879,54.0484054 L1108.10879,55.0984054 C1113.82879,55.1284054 1119.57879,55.0684054 1125.25879,55.9584054 L1125.09879,57.0784054 C1129.76879,57.0284054 1134.40879,57.7784054 1139.07879,57.9884054 C1139.08545,58.0784054 1139.09434,58.1984054 1139.10397,58.3284054 L1139.1336,58.7284054 C1139.14323,58.8584054 1139.15212,58.9784054 1139.15879,59.0684054 C1143.20879,59.0184054 1147.24879,59.3284054 1151.25879,59.9684054 L1151.09879,61.0884054 C1155.48879,61.0684054 1159.85879,61.5284054 1164.21879,62.0484054 L1164.10879,63.0484054 C1167.83879,63.0484054 1171.56879,63.3884054 1175.25879,63.9784054 L1175.11879,65.0484054 C1178.49879,65.1284054 1181.87879,65.4584054 1185.22879,65.9684054 C1185.21879,66.2284054 1185.19879,66.7484054 1185.17879,67.0184054 C1188.54879,67.0584054 1191.91879,67.3684054 1195.24879,67.9484054 L1195.14879,69.0384054 C1198.51879,69.1684054 1201.88879,69.4984054 1205.23879,69.9584054 L1205.11879,70.9984054 C1207.83879,71.1584054 1210.54879,71.4984054 1213.25879,71.9584054 L1213.14879,73.0384054 C1216.52879,73.1284054 1219.89879,73.4584054 1223.25879,73.9684054 L1223.11879,75.0084054 C1225.95879,75.3284054 1229.36879,74.8384054 1231.56879,77.0884054 C1234.21879,77.5984054 1237.74879,76.5284054 1239.68879,78.9184054 C1242.15879,79.2384054 1244.64879,79.5984054 1247.12879,80.0484054 L1247.00879,81.1384054 C1249.75879,81.2684054 1252.49879,81.5784054 1255.24879,81.9584054 L1255.12879,83.0184054 C1255.73151,83.1274963 1256.39226,83.1488186 1257.06193,83.1693971 L1257.50916,83.1839609 C1259.1499,83.2439609 1260.77879,83.415072 1261.67879,84.9684054 C1264.18879,85.2884054 1266.70879,85.6084054 1269.23879,85.9684054 L1269.16879,86.9584054 C1271.17879,87.2684054 1273.19879,87.6184054 1275.22879,87.9684054 L1275.16879,89.0184054 C1277.96879,89.4084054 1281.25879,89.0284054 1283.58879,90.9884054 C1285.57879,91.5284054 1287.99879,91.4384054 1289.56879,93.0384054 C1291.42879,93.3884054 1293.31879,93.6984054 1295.21879,93.9784054 L1295.17879,94.9184054 C1297.35879,95.3184054 1299.87879,95.3384054 1301.55879,97.0384054 C1303.42879,97.3884054 1305.31879,97.6984054 1307.22879,97.9784054 L1307.16879,98.9384054 C1309.37879,99.2684054 1311.84879,99.3084054 1313.55879,100.988405 C1315.59879,101.428405 1317.98879,101.358405 1319.55879,102.998405 C1321.04879,103.308405 1322.91879,103.198405 1323.58879,104.938405 C1326.24879,105.288405 1328.91879,105.668405 1331.57879,106.198405 C1333.65959,107.933605 1336.27434,108.699397 1338.8781,109.413971 L1339.74487,109.651525 C1340.46559,109.850005 1341.18079,110.052405 1341.87879,110.278405 C1346.67879,113.268405 1352.29879,114.408405 1357.54879,116.368405 C1360.73879,118.028405 1364.09879,119.348405 1367.56879,120.338405 C1370.53879,122.268405 1374.14879,122.978405 1377.11879,124.998405 C1383.74879,126.158405 1389.00879,130.898405 1395.55879,132.338405 C1402.88879,135.588405 1409.80879,140.038405 1417.53879,142.328405 C1418.39263,143.136098 1419.4595,143.594678 1420.55276,144.01821 L1421.21039,144.270636 C1421.32003,144.312843 1421.42956,144.355328 1421.53879,144.398405 C1422.80879,145.568405 1424.53879,145.808405 1426.16879,146.228405 C1426.45879,146.658405 1427.03879,147.508405 1427.33879,147.928405 C1428.04879,147.938405 1429.48879,147.968405 1430.20879,147.988405 C1430.46879,148.458405 1430.98879,149.408405 1431.24879,149.878405 C1431.88879,149.948405 1433.16879,150.078405 1433.81879,150.148405 C1437.72879,152.558405 1441.87879,154.578405 1446.14879,156.298405 C1446.45879,156.708405 1447.05879,157.508405 1447.36879,157.918405 C1448.06879,157.938405 1449.47879,157.968405 1450.17879,157.988405 C1450.45879,158.468405 1451.00879,159.428405 1451.27879,159.908405 C1451.84879,159.958405 1452.98879,160.068405 1453.55879,160.128405 C1454.50879,161.838405 1456.53879,161.818405 1458.22879,162.218405 C1458.49879,162.648405 1459.01879,163.488405 1459.28879,163.918405 C1459.88879,163.958405 1461.08879,164.038405 1461.69879,164.078405 C1462.02879,166.098405 1464.00879,165.928405 1465.58879,166.268405 C1467.35754,168.087155 1469.5755,169.253562 1471.83742,170.35112 L1472.74357,170.787855 C1473.80123,171.296322 1474.8567,171.806739 1475.86879,172.378405 C1477.07879,173.068405 1478.28879,173.758405 1479.53879,174.468405 C1480.82879,175.548405 1482.45879,175.948405 1484.09879,176.308405 C1484.11879,176.618405 1484.17879,177.248405 1484.19879,177.568405 C1486.16879,178.528405 1488.16879,179.468405 1490.20879,180.318405 C1490.48879,180.718405 1491.04879,181.528405 1491.31879,181.928405 C1492.01879,181.958405 1493.41879,182.008405 1494.11879,182.038405 C1494.13879,182.418405 1494.17879,183.178405 1494.19879,183.558405 C1496.18879,184.408405 1498.15879,185.338405 1500.15879,186.238405 C1500.44879,186.648405 1501.03879,187.478405 1501.32879,187.898405 C1501.89879,187.958405 1503.01879,188.078405 1503.57879,188.148405 C1505.20879,190.288405 1507.73879,191.308405 1510.17879,192.248405 C1510.45879,192.658405 1511.02879,193.478405 1511.30879,193.888405 C1511.87879,193.958405 1513.02879,194.078405 1513.59879,194.138405 C1515.22879,196.228405 1517.58879,197.448405 1520.05879,198.308405 C1521.04879,199.188405 1522.07879,200.068405 1523.11879,200.958405 C1524.79879,201.558405 1526.57879,202.178405 1527.56879,203.818405 C1528.20879,203.878405 1529.47879,204.008405 1530.11879,204.068405 C1530.13879,204.428405 1530.17879,205.148405 1530.19879,205.498405 C1531.55879,205.898405 1532.74879,206.668405 1533.64879,207.798405 C1534.26879,207.878405 1535.50879,208.018405 1536.11879,208.088405 C1536.13879,208.438405 1536.17879,209.148405 1536.19879,209.508405 C1537.54879,209.898405 1538.77879,210.658405 1539.65879,211.808405 C1540.27879,211.878405 1541.49879,212.018405 1542.10879,212.088405 C1542.13879,212.448405 1542.18879,213.188405 1542.20879,213.548405 C1544.13879,214.518405 1546.07879,215.468405 1548.03879,216.398405 C1548.08879,216.678405 1548.18879,217.238405 1548.23879,217.508405 C1549.57879,217.888405 1550.76879,218.658405 1551.60879,219.808405 C1552.23879,219.878405 1553.47879,220.018405 1554.10879,220.088405 C1554.13879,220.438405 1554.20879,221.138405 1554.24879,221.498405 C1559.22879,224.518405 1563.99879,227.918405 1568.69879,231.388405 C1569.86879,232.375072 1571.10434,233.280628 1572.3536,234.169146 L1573.85597,235.231291 C1575.85905,236.647516 1577.84412,238.085739 1579.59879,239.808405 C1580.24879,239.878405 1581.55879,240.018405 1582.20879,240.078405 C1582.17879,240.548405 1582.10879,241.488405 1582.06879,241.948405 C1582.51879,241.958405 1583.40879,241.968405 1583.85879,241.978405 C1585.05879,243.268405 1586.29879,244.548405 1587.51879,245.858405 C1588.19879,245.908405 1589.55879,246.018405 1590.23879,246.068405 C1590.18879,246.558405 1590.07879,247.528405 1590.01879,248.008405 C1590.46879,248.008405 1591.35879,247.998405 1591.79879,247.988405 C1593.50247,250.068405 1595.63217,251.64281 1597.8003,253.176067 L1598.80229,253.882493 C1599.47023,254.353752 1600.13615,254.827879 1600.78879,255.318405 C1603.24879,257.558405 1606.13879,259.278405 1608.67879,261.458405 C1611.93879,264.208405 1615.24879,266.898405 1618.67879,269.448405 C1620.12521,270.419834 1621.40328,271.606824 1622.6592,272.817593 L1623.41126,273.545373 C1625.41593,275.485548 1627.43879,277.388405 1630.07879,278.468405 C1630.10879,278.728405 1630.18879,279.248405 1630.22879,279.518405 C1634.83879,282.178405 1638.11879,286.598405 1642.64879,289.458405 C1643.27879,290.148405 1643.93879,290.838405 1644.62879,291.528405 C1647.80879,293.648405 1650.31879,296.548405 1653.23879,298.998405 C1654.68879,300.358405 1656.26879,301.598405 1658.06879,302.488405 C1658.09879,302.778405 1658.15879,303.348405 1658.18879,303.638405 C1659.51879,304.498405 1660.77879,305.488405 1662.15879,306.338405 C1662.20879,306.618405 1662.30879,307.178405 1662.35879,307.458405 C1670.58879,313.868405 1677.69879,321.838405 1685.21879,328.998405 C1686.64879,330.418405 1688.24879,331.668405 1690.14879,332.468405 C1690.12879,332.868405 1690.08879,333.688405 1690.06879,334.098405 C1690.59879,334.068405 1691.67879,334.018405 1692.20879,333.988405 C1692.17879,334.518405 1692.10879,335.578405 1692.06879,336.108405 C1692.59879,336.078405 1693.65879,336.018405 1694.18879,335.978405 C1694.18129,336.177155 1694.17097,336.447624 1694.15996,336.736023 L1694.13761,337.320788 C1694.1266,337.609187 1694.11629,337.879655 1694.10879,338.078405 C1694.30379,338.070905 1694.57332,338.060593 1694.86201,338.049577 L1695.44853,338.027233 C1695.73816,338.016218 1696.01004,338.005905 1696.20879,337.998405 C1696.16879,338.528405 1696.10879,339.578405 1696.07879,340.108405 C1696.60879,340.078405 1697.65879,340.018405 1698.18879,339.978405 C1698.16879,340.508405 1698.12879,341.558405 1698.11879,342.078405 C1698.63879,342.058405 1699.67879,342.018405 1700.20879,341.998405 C1700.17879,342.528405 1700.10879,343.578405 1700.07879,344.108405 C1700.60879,344.078405 1701.66879,344.008405 1702.19879,343.978405 C1702.18754,344.177155 1702.17347,344.450437 1702.15871,344.742351 L1702.12886,345.33446 C1702.1141,345.626374 1702.10004,345.899655 1702.08879,346.098405 C1702.48879,346.088405 1703.29879,346.068405 1703.69879,346.058405 C1706.65636,350.819617 1710.62477,354.802721 1714.67283,358.725773 L1716.95212,360.93089 C1720.49165,364.365944 1723.95848,367.858102 1726.72879,371.888405 C1727.09879,371.928405 1727.83879,371.998405 1728.19879,372.028405 C1728.19879,372.215905 1728.19738,372.473718 1728.19562,372.749108 L1728.19195,373.307702 C1728.19019,373.583093 1728.18879,373.840905 1728.18879,374.028405 C1728.69879,374.018405 1729.72879,373.978405 1730.24879,373.968405 C1730.21879,374.498405 1730.17879,375.568405 1730.15879,376.108405 C1730.66879,376.078405 1731.69879,376.018405 1732.21879,375.988405 C1732.17879,376.538405 1732.08879,377.638405 1732.04879,378.198405 C1732.48879,378.138405 1733.34879,378.038405 1733.78879,377.978405 C1735.65879,383.178405 1740.71879,386.258405 1744.08879,390.448405 C1744.11879,390.838405 1744.17879,391.628405 1744.21879,392.028405 C1744.71879,392.008405 1745.73879,391.978405 1746.23879,391.968405 C1746.22879,392.508405 1746.18879,393.598405 1746.16879,394.138405 C1746.65879,394.098405 1747.63879,394.008405 1748.11879,393.958405 C1748.17879,394.638405 1748.27879,395.998405 1748.33879,396.668405 C1750.82879,398.718405 1753.40879,400.878405 1754.70879,403.928405 C1755.08879,403.948405 1755.85879,403.978405 1756.23879,403.998405 C1756.21879,404.528405 1756.19879,405.608405 1756.17879,406.138405 C1756.66879,406.098405 1757.63879,406.008405 1758.11879,405.958405 C1758.17879,406.638405 1758.27879,407.988405 1758.33879,408.668405 C1760.83879,410.558405 1762.89879,412.948405 1764.79879,415.448405 C1767.17879,419.138405 1770.58879,422.078405 1772.71879,425.918405 C1772.80879,425.928405 1772.93101,425.941739 1773.06434,425.956183 L1773.47656,426.000628 C1773.61101,426.015072 1773.73545,426.028405 1773.82879,426.038405 C1774.40833,428.049769 1775.67124,429.661339 1776.99311,431.231282 L1777.52352,431.857888 C1777.96569,432.379624 1778.40515,432.902042 1778.81879,433.438405 C1779.61379,434.402155 1780.35535,435.406687 1781.08408,436.421941 L1782.53646,438.457839 C1783.26613,439.47403 1784.01004,440.480905 1784.80879,441.448405 C1786.91879,444.018405 1788.71879,446.838405 1790.78879,449.458405 C1792.94879,452.148405 1795.05879,454.908405 1796.72879,457.948405 C1797.09879,457.958405 1797.83879,457.978405 1798.20879,457.978405 C1798.23879,458.638405 1798.29879,459.948405 1798.33879,460.598405 C1799.54879,461.808405 1800.70879,463.088405 1801.86879,464.398405 C1803.26879,467.528405 1805.97879,469.808405 1807.30879,472.988405 C1808.61879,474.498405 1809.89879,476.078405 1810.71879,477.948405 C1811.00879,477.958405 1811.59879,477.988405 1811.88879,478.008405 C1812.36879,480.598405 1814.06879,482.588405 1815.84879,484.438405 C1816.90879,486.618405 1818.25879,488.648405 1819.80879,490.538405 C1820.69879,492.868405 1822.20879,494.848405 1824.10879,496.478405 C1824.16879,497.018405 1824.28879,498.108405 1824.35879,498.648405 C1825.59879,499.918405 1826.83879,501.188405 1828.10879,502.458405 C1828.17879,502.998405 1828.31879,504.058405 1828.38879,504.588405 C1829.59937,505.469582 1830.27418,506.764461 1830.89913,508.098835 L1831.16532,508.672037 C1831.20965,508.76761 1831.25408,508.863111 1831.29879,508.958405 C1833.83879,511.938405 1835.39879,515.608405 1838.03879,518.538405 C1838.14879,519.038405 1838.36879,520.038405 1838.47879,520.538405 C1839.82879,521.748405 1840.64879,523.348405 1841.25879,525.058405 C1842.15879,526.118405 1843.10879,527.178405 1844.07879,528.228405 C1844.13879,528.868405 1844.25879,530.168405 1844.30879,530.818405 C1844.72879,531.088405 1845.57879,531.628405 1845.99879,531.898405 C1846.72879,534.378405 1848.02879,536.628405 1849.81879,538.518405 C1850.38879,539.858405 1851.02879,541.208405 1851.75879,542.498405 C1853.96879,545.718405 1855.26879,549.488405 1857.82879,552.488405 C1858.38879,553.838405 1859.01879,555.198405 1859.76879,556.488405 C1861.95879,559.758405 1863.22879,563.598405 1865.96879,566.508405 C1866.27879,567.968405 1866.11879,569.868405 1867.87879,570.418405 C1868.34879,571.898405 1868.97879,573.348405 1869.98879,574.568405 C1870.11879,575.068405 1870.35879,576.058405 1870.48879,576.558405 C1872.01349,578.231347 1873.03993,580.238129 1874.02885,582.265721 L1874.52231,583.279802 C1874.76962,583.78626 1875.01937,584.290758 1875.27879,584.788405 C1875.97879,586.078405 1876.62879,587.398405 1877.32879,588.728405 C1877.97879,590.058405 1878.62879,591.378405 1879.31879,592.728405 C1879.98879,594.048405 1880.63879,595.378405 1881.31879,596.728405 C1881.97879,598.058405 1882.62879,599.378405 1883.31879,600.728405 C1883.97879,602.048405 1884.63879,603.378405 1885.31879,604.728405 C1885.97879,606.048405 1886.63879,607.378405 1887.31879,608.728405 C1887.98879,610.048405 1888.60879,611.378405 1889.30879,612.728405 C1890.00879,614.098405 1890.62879,615.498405 1891.31879,616.908405 C1893.12879,620.028405 1893.79879,623.758405 1896.05879,626.628405 C1896.09879,627.188405 1896.17879,628.318405 1896.21879,628.878405 C1896.64879,629.188405 1897.48879,629.798405 1897.91879,630.108405 C1898.37879,634.748405 1901.82879,638.318405 1902.44879,642.928405 C1902.86879,643.248405 1903.71879,643.888405 1904.14879,644.208405 C1904.15879,644.878405 1904.18879,646.208405 1904.19879,646.878405 C1904.62879,647.178405 1905.47879,647.798405 1905.90879,648.098405 C1906.41434,650.416183 1907.11953,652.685566 1907.85496,654.948899 L1908.48879,656.888405 L1908.48879,656.888405 C1908.84879,657.208405 1909.55879,657.858405 1909.91879,658.178405 C1910.57879,661.858405 1911.85879,665.388405 1913.83879,668.578405 C1915.94879,674.718405 1918.96879,680.508405 1920.47879,686.878405 C1920.83879,687.208405 1921.54879,687.848405 1921.89879,688.168405 C1922.58879,691.148405 1923.60879,694.048405 1924.47879,696.998405 C1924.89879,697.308405 1925.73879,697.938405 1926.15879,698.258405 C1926.16879,699.798405 1926.17879,701.338405 1926.24879,702.898405 C1926.65879,703.198405 1927.49879,703.788405 1927.91879,704.088405 C1930.54879,715.958405 1936.57879,726.998405 1938.36879,739.008405 C1938.81879,739.308405 1939.70879,739.898405 1940.15879,740.198405 C1940.15879,741.778405 1940.16879,743.368405 1940.22879,744.978405 C1940.67879,745.278405 1941.57879,745.868405 1942.02879,746.168405 C1942.31807,750.30412 1943.54581,754.25616 1944.84643,758.199797 L1945.36851,759.777218 C1946.32527,762.669859 1947.25914,765.570548 1947.82879,768.548405 C1951.24736,781.110304 1957.0298,792.149198 1960.64818,805.376077 C1963.14474,808.118422 1964.62797,812.572203 1965.17879,815.858405 C1966.40879,818.358405 1966.67879,821.168405 1967.19879,823.898405 C1969.26879,827.408405 1968.03879,831.798405 1969.92879,835.358405 C1969.97705,835.795362 1970.01918,836.235551 1970.05954,836.67753 L1970.13919,837.563448 C1970.37875,840.225797 1970.65879,842.917971 1971.91879,845.328405 C1972.58879,848.648405 1972.33879,852.268405 1973.96879,855.348405 C1974.18879,858.878405 1974.34879,862.438405 1975.17879,865.908405 C1976.96879,869.598405 1976.46879,873.878405 1977.17879,877.848405 C1978.27079,880.093072 1978.39585,882.568583 1978.4717,885.0605 L1978.50387,886.128844 C1978.58439,888.621072 1978.74679,891.099072 1979.90879,893.348405 C1980.37879,896.838405 1980.73879,900.348405 1981.18879,903.858405 C1983.13879,910.198405 1982.01879,917.248405 1983.14879,923.848405 C1984.55479,927.002405 1984.7374,930.445205 1984.82708,933.894824 L1984.85364,934.984075 C1984.89279,936.617305 1984.93779,938.245405 1985.10879,939.838405 C1986.34129,942.752016 1986.3607,946.013498 1986.35695,949.281669 L1986.3566,950.434864 C1986.36386,953.699887 1986.48795,956.931461 1987.91879,959.788405 C1988.04535,961.273405 1988.04377,962.779763 1988.0275,964.289012 L1988.01573,965.295405 C1987.97562,968.817858 1987.99285,972.333718 1989.50879,975.608405 L1990.54879,972.468405 L1990.54879,1103.94841 L1988.02879,1103.94841 L1988.02879,1103.94841 C1988.01879,1108.59841 1987.87879,1113.24841 1987.87879,1117.90841 C1987.52879,1117.94841 1986.83879,1118.01841 1986.49879,1118.04841 C1986.28879,1126.23841 1985.62879,1134.43841 1986.04879,1142.63841 C1985.67879,1141.75841 1984.92879,1139.98841 1984.55879,1139.10841 C1983.89792,1141.70645 1984.03377,1144.56211 1984.16444,1147.4069 L1984.20459,1148.30458 C1984.36338,1152.0408 1984.36705,1155.70927 1982.38879,1158.69841 C1981.97879,1169.61841 1982.36879,1180.54841 1982.34879,1191.46841 L1981.16879,1192.50841 C1981.14879,1203.13841 1977.09879,1213.11841 1976.15879,1223.62841 C1975.78379,1225.44068 1975.41753,1227.25537 1975.05481,1229.07116 L1974.33255,1232.70381 C1972.29081,1242.99826 1970.25151,1253.29977 1967.26879,1263.36841 C1959.79879,1296.94841 1949.98879,1330.04841 1938.87879,1362.67841 C1938.02879,1365.71841 1936.75879,1368.62841 1935.24879,1371.40841 C1933.95879,1377.05841 1931.23879,1382.23841 1929.81879,1387.85841 C1926.68879,1394.32841 1924.23879,1401.10841 1921.81879,1407.85841 C1919.98879,1410.97841 1918.62879,1414.33841 1917.83879,1417.87841 C1911.60879,1430.26841 1906.42879,1443.16841 1900.50879,1455.70841 C1900.17879,1456.09841 1899.53879,1456.86841 1899.20879,1457.25841 C1896.94327,1463.90496 1893.76009,1470.17428 1890.50201,1476.41648 L1889.19678,1478.91274 C1886.58631,1483.90569 1883.99982,1488.91116 1881.86879,1494.10841 C1881.57879,1494.12841 1881.00879,1494.15841 1880.71879,1494.16841 C1880.46879,1495.42841 1880.25879,1496.71841 1880.06879,1498.03841 C1879.80879,1498.09841 1879.27879,1498.21841 1879.00879,1498.28841 C1878.08879,1499.99841 1877.19879,1501.73841 1876.40879,1503.52841 C1872.94879,1510.38841 1868.70879,1516.87841 1865.88879,1524.04841 C1865.64879,1524.10841 1865.16879,1524.20841 1864.93879,1524.26841 C1856.20879,1539.61841 1847.55879,1555.25841 1837.14879,1569.46841 C1836.93879,1570.14841 1836.75879,1570.85841 1836.58879,1571.58841 C1786.83879,1647.60841 1728.04879,1717.67841 1660.10879,1778.13841 C1599.39879,1831.56841 1532.80879,1878.85841 1461.12879,1916.52841 C1448.55879,1919.92841 1437.77879,1928.27841 1425.50879,1932.73841 C1326.97879,1980.54841 1220.06879,2011.18841 1111.33879,2023.54841 C1107.23879,2024.32507 1103.01434,2024.59729 1098.77138,2024.79211 L1097.17961,2024.86237 L1097.17961,2024.86237 L1095.58734,2024.93038 C1088.15754,2025.25028 1080.75212,2025.66007 1073.93879,2028.44841 C1016.13879,2028.73841 958.338786,2028.80841 900.548786,2028.30841 C895.728786,2028.38841 891.118786,2026.41841 886.268786,2027.14841 C885.498786,2026.44841 884.738786,2025.76841 883.988786,2025.11841 C819.998786,2019.79841 756.988786,2004.73841 695.368786,1986.78841 C694.978786,1986.41841 694.178786,1985.66841 693.788786,1985.29841 C684.338786,1983.87841 675.518786,1979.73841 666.568786,1976.54841 C643.668786,1969.23841 621.598786,1959.76841 599.398786,1950.70841 C598.978786,1950.38841 598.148786,1949.75841 597.728786,1949.43841 C506.738786,1911.01841 422.618786,1856.92841 347.198786,1793.35841 C318.338786,1768.60841 290.158786,1742.82841 264.678786,1714.51841 C221.878786,1668.51841 182.918786,1618.69841 149.738786,1565.29841 C148.094342,1563.44952 146.787675,1561.37149 145.529952,1559.25923 L144.591324,1557.67166 C143.340021,1555.55445 142.065453,1553.45174 140.478786,1551.55841 C140.338786,1550.99841 140.068786,1549.88841 139.928786,1549.32841 C124.061994,1525.49595 111.032823,1499.95167 98.323923,1474.262 L96.3195491,1470.20476 C95.985808,1469.52843 95.652197,1468.85205 95.3186701,1468.17566 L93.3181518,1464.11736 C89.9844146,1457.35399 86.6499183,1450.59482 83.2687862,1443.86841 C80.4900362,1436.91028 77.5878878,1429.98933 74.6711303,1423.06886 L72.7256548,1418.45487 C65.9172726,1402.30335 59.1609737,1386.10997 53.8387862,1369.40841 C49.6587862,1361.25841 47.7587862,1352.18841 44.5687862,1343.64841 C42.4287862,1336.22841 38.9787862,1329.15841 37.8587862,1321.48841 C34.5487862,1312.30841 31.7187862,1302.88841 29.8787862,1293.32841 C26.6387862,1285.66841 25.8987862,1277.33841 23.8287862,1269.36841 C16.2287862,1243.31841 12.8887862,1216.21841 7.16878624,1189.87841 C7.04878624,1180.60841 4.49878624,1171.71841 3.84878624,1162.53841 L2.13878624,1161.48841 C2.22878624,1142.12841 2.20878624,1122.76841 1.94878624,1103.40841 C1.64878624,1103.30841 1.05878624,1103.12841 0.768786237,1103.03841 C-0.201213763,1056.93841 -0.381213763,1010.74841 0.978786237,964.638405 C0.978786237,898.361875 0.971997713,832.087042 0.980793605,765.813206 L0.808786238,765.878405 L0.808786238,765.878405 C0.798786238,674.808405 -0.261213762,583.738405 0.248786238,492.668405 C0.468807184,489.04944 0.844244167,485.436231 0.990787998,481.815677 L0.418786237,481.208405 C0.579400479,481.234736 0.782304776,481.267305 1.00522901,481.302646 C1.04356706,480.322694 1.05906413,479.340972 1.04878624,478.358405 C1.06878624,476.328405 1.11878624,474.308405 1.16878624,472.298405 C1.58878624,472.288405 2.43878624,472.258405 2.85878624,472.248405 C2.90878624,470.988405 2.97878624,469.738405 3.03878624,468.488405 C5.24878624,465.418405 6.73878624,461.888405 7.24878624,458.138405 C7.34878624,458.131739 7.48323068,458.125072 7.62952698,458.118405 L8.08137883,458.098405 C8.22878624,458.091739 8.3654529,458.085072 8.46878624,458.078405 C9.33878624,456.178405 10.3687862,454.358405 11.2387862,452.468405 C12.9187862,450.708405 14.2987862,448.698405 15.2587862,446.458405 L16.1129464,445.412917 C18.1151925,442.978093 20.1987862,440.595905 22.7187862,438.688405 C22.8087862,438.058405 22.9987862,436.798405 23.0887862,436.168405 C23.7187862,436.088405 24.9687862,435.908405 25.5887862,435.828405 C27.6587862,433.348405 29.7987862,430.728405 32.8687862,429.478405 C32.9087862,429.208405 32.9787862,428.668405 33.0187862,428.398405 C34.9487862,427.638405 36.8387862,426.738405 38.4987862,425.478405 C39.3687862,424.548405 40.5087862,423.968405 41.6987862,423.548405 C42.0287862,423.238405 42.6787862,422.608405 43.0087862,422.298405 C44.5987862,421.808405 46.4187862,421.628405 47.5487862,420.248405 C47.8091311,420.194957 48.081961,420.157264 48.3578456,420.121898 L48.6897699,420.079715 C49.9077755,419.922841 51.1118897,419.707026 51.4987862,418.288405 C53.5887862,417.838405 56.0887862,418.038405 57.6487862,416.298405 C60.1687862,416.018405 62.6987862,415.708405 65.2087862,415.318405 L65.0887862,414.208405 C66.3099984,413.95689 67.6267109,413.889948 68.9629577,413.852864 L69.7664421,413.832958 C72.5825879,413.767166 75.4178771,413.696587 77.5687862,412.188405 C81.5187862,412.178405 85.4687862,412.158405 89.4087862,412.248405 C92.8787862,414.458405 97.5187862,413.478405 101.448786,414.268405 C102.810399,415.812921 104.773167,415.976158 106.737119,416.057533 L107.297762,416.079678 C108.043948,416.109227 108.782012,416.144857 109.478786,416.258405 C110.248198,417.19017 111.346468,417.578821 112.457048,417.937868 L113.011898,418.117302 C113.288371,418.208163 113.562316,418.302523 113.828786,418.408405 C115.658786,419.698405 117.828786,420.128405 120.028786,420.258405 C120.048786,420.638405 120.078786,421.408405 120.088786,421.798405 C121.258786,421.888405 122.418786,421.998405 123.588786,422.118405 C125.238786,424.308405 127.758786,425.438405 130.298786,426.248405 C130.538786,426.658405 131.028786,427.488405 131.268786,427.908405 C131.978786,427.968405 133.388786,428.088405 134.088786,428.148405 C134.078786,428.618405 134.058786,429.548405 134.048786,430.008405 C134.588786,429.998405 135.658786,429.968405 136.188786,429.948405 C136.208786,430.328405 136.238786,431.088405 136.258786,431.468405 C139.908097,433.532198 142.789048,436.574684 145.61316,439.670603 L146.503926,440.648959 C147.691307,441.952924 148.88189,443.249095 150.128786,444.468405 C150.138786,444.878405 150.178786,445.708405 150.188786,446.118405 C150.638786,446.118405 151.538786,446.108405 151.978786,446.108405 C152.088786,446.728405 152.308786,447.958405 152.408786,448.568405 C153.338786,449.438405 154.108786,450.448405 154.788786,451.528405 C155.608786,452.488405 156.208786,453.578405 156.618786,454.788405 C156.928786,455.118405 157.538786,455.768405 157.848786,456.098405 C158.318786,457.648405 158.928786,459.168405 159.758786,460.578405 C160.408786,461.928405 161.098786,463.278405 162.048786,464.468405 C162.148786,465.888405 162.238786,467.318405 162.328786,468.758405 C162.718786,469.068405 163.508786,469.708405 163.908786,470.018405 C164.398786,471.658405 164.518786,473.598405 166.008786,474.738405 C166.26059,478.030209 166.224126,481.388747 166.144275,484.761687 L166.064175,487.926442 C165.856537,496.368521 165.855999,504.798405 169.888786,512.398405 C170.308786,513.898405 170.138786,515.848405 171.798786,516.628405 C172.828786,519.368405 173.708786,522.708405 176.188786,524.488405 C176.158786,524.918405 176.108786,525.788405 176.088786,526.228405 C176.578786,526.178405 177.558786,526.088405 178.058786,526.038405 C178.098786,526.758405 178.198786,528.208405 178.248786,528.928405 C178.668786,529.228405 179.528786,529.828405 179.948786,530.128405 C180.648786,530.918405 181.368786,531.698405 182.098786,532.468405 C182.118786,532.848405 182.168786,533.618405 182.198786,533.998405 C182.386286,533.998405 182.645505,533.996999 182.922653,533.995241 L183.484919,533.991569 C183.762067,533.989812 184.021286,533.988405 184.208786,533.988405 C184.198786,534.488405 184.188786,535.508405 184.178786,536.018405 C184.688786,536.008405 185.698786,535.988405 186.208786,535.978405 C186.198786,536.478405 186.178786,537.488405 186.178786,537.988405 C186.366286,537.988405 186.625505,537.989812 186.902653,537.991569 L187.464919,537.995241 C187.742067,537.996999 188.001286,537.998405 188.188786,537.998405 C188.188786,538.488405 188.198786,539.488405 188.208786,539.988405 C188.578786,540.018405 189.318786,540.078405 189.688786,540.108405 C190.508786,540.848405 191.338786,541.578405 192.188786,542.308405 C192.478786,542.698405 193.058786,543.498405 193.348786,543.898405 C194.038786,543.958405 195.428786,544.098405 196.118786,544.168405 C196.088786,544.638405 196.018786,545.598405 195.988786,546.078405 L196.421498,546.078172 C196.833888,546.077589 197.335929,546.075548 197.628786,546.068405 C198.668786,547.508405 200.468786,547.778405 202.038786,548.288405 C202.166286,548.442155 202.341599,548.650749 202.529392,548.873054 L202.91115,549.323757 C203.09988,549.546062 203.277536,549.754655 203.408786,549.908405 C204.078786,549.938405 205.408786,549.998405 206.078786,550.028405 C206.398786,550.498405 207.038786,551.438405 207.358786,551.908405 C208.718786,551.988405 210.088786,552.098405 211.448786,552.228405 C213.418786,554.598405 216.788786,553.798405 219.488786,554.258405 C226.078786,556.508405 235.098786,557.098405 241.658786,554.268405 C244.158786,554.088405 246.658786,553.988405 249.168786,553.898405 C249.118786,553.468405 248.998786,552.598405 248.938786,552.168405 C249.591741,552.029542 250.372144,552.058281 251.164192,552.090076 L251.530158,552.104369 C253.298915,552.168705 255.036968,552.122269 255.458786,550.138405 C256.698786,550.058405 257.938786,549.998405 259.178786,549.948405 C259.118786,549.538405 258.998786,548.708405 258.938786,548.298405 C260.868786,547.888405 262.798786,547.458405 264.738786,547.038405 C264.868786,546.398405 265.148786,545.098405 265.278786,544.448405 C266.798786,544.058405 268.768786,544.228405 269.438786,542.488405 C270.758786,541.378405 272.108786,540.328405 273.638786,539.518405 C275.968786,537.208405 278.208786,534.788405 280.728786,532.668405 C280.818786,532.028405 280.998786,530.738405 281.088786,530.098405 C281.548786,530.108405 282.458786,530.128405 282.918786,530.138405 C282.908786,529.698405 282.908786,528.828405 282.908786,528.388405 C285.158786,528.188405 284.908786,525.898405 285.308786,524.248405 C285.658786,524.238405 286.378786,524.218405 286.738786,524.208405 C286.824786,523.894405 286.873186,523.553205 286.911506,523.203285 L286.947485,522.851143 C287.074564,521.554316 287.189453,520.223072 288.648786,519.768405 C289.098786,518.258405 288.848786,516.188405 290.838786,515.788405 C290.858786,515.685072 290.884342,515.547294 290.911749,515.398035 L290.995823,514.938776 C291.023231,514.789516 291.048786,514.651739 291.068786,514.548405 C293.778786,511.858405 292.838786,507.728405 293.208786,504.298405 C293.588786,504.288405 294.338786,504.258405 294.718786,504.248405 C294.868786,502.398405 294.898786,500.468405 295.998786,498.888405 C296.478786,401.488405 296.058786,304.058405 296.208786,206.638405 C295.948786,200.448405 296.418786,194.298405 297.138786,188.158405 C297.518786,188.148405 298.288786,188.138405 298.668786,188.138405 C298.798786,186.968405 298.938786,185.798405 299.088786,184.638405 C300.898786,181.968405 301.968786,178.908405 303.188786,175.948405 C303.335036,175.835905 303.53613,175.682624 303.750935,175.519148 L304.186638,175.187663 C304.401442,175.024187 304.602536,174.870905 304.748786,174.758405 C304.828786,174.218405 304.988786,173.128405 305.068786,172.578405 C306.978786,170.938405 308.258786,168.768405 309.358786,166.538405 C314.658786,160.378405 320.048786,153.908405 326.938786,149.498405 C326.928786,149.138405 326.908786,148.428405 326.898786,148.068405 C327.558786,148.008405 328.878786,147.898405 329.538786,147.848405 C330.268786,146.548405 331.478786,145.848405 332.908786,145.538405 C332.928786,145.158405 332.958786,144.408405 332.968786,144.028405 C333.678786,144.008405 335.098786,143.958405 335.808786,143.938405 C336.078786,143.508405 336.608786,142.638405 336.868786,142.198405 C338.548786,141.948405 340.318786,141.688405 341.568786,140.398405 C342.968786,139.818405 344.508786,139.398405 345.538786,138.198405 C348.368786,137.018405 352.718786,138.398405 354.468786,135.408405 C357.668786,135.058405 360.898786,134.968405 364.118786,135.028405 C363.988786,134.638405 363.738786,133.838405 363.618786,133.438405 C381.178786,132.498405 399.328786,132.618405 415.248786,140.908405 C417.568786,142.058405 419.888786,143.218405 422.248786,144.298405 C422.538786,144.698405 423.118786,145.498405 423.408786,145.908405 C424.078786,145.938405 425.428786,146.018405 426.108786,146.058405 C426.138786,146.398405 426.208786,147.088405 426.238786,147.428405 C429.048786,148.798405 431.158786,151.248405 434.068786,152.478405 C434.108786,152.738405 434.198786,153.258405 434.248786,153.518405 C435.248786,154.108405 436.058786,154.898405 436.668786,155.898405 C437.068786,155.908405 437.868786,155.908405 438.268786,155.918405 C438.248786,156.438405 438.218786,157.468405 438.198786,157.978405 C438.718786,157.968405 439.748786,157.938405 440.268786,157.928405 C440.268786,158.318405 440.288786,159.118405 440.288786,159.518405 C441.278786,160.128405 442.068786,160.938405 442.668786,161.938405 C442.938786,161.988405 443.468786,162.068405 443.738786,162.118405 C444.788786,164.418405 446.238786,166.498405 447.928786,168.368405 C448.958786,170.648405 450.048786,172.988405 452.048786,174.618405 C452.098786,175.188405 452.218786,176.348405 452.278786,176.928405 C452.458786,177.025905 452.706286,177.161374 452.970661,177.306862 L453.506911,177.602917 C453.771286,177.749343 454.018786,177.887155 454.198786,177.988405 C454.218786,178.698405 454.248786,180.118405 454.258786,180.828405 C454.698786,181.138405 455.578786,181.738405 456.018786,182.038405 C456.978786,185.648405 457.478786,189.748405 460.068786,192.618405 C460.618786,215.438405 459.568786,238.288405 461.088786,261.078405 L462.208786,260.938405 C462.558786,263.498405 462.898786,266.068405 463.228786,268.638405 C464.666643,269.031262 464.919194,270.269885 465.126326,271.524823 L465.182547,271.86686 C465.220419,272.094324 465.260215,272.319834 465.308786,272.538405 C466.123959,273.039095 466.466551,273.85655 466.755296,274.702406 L466.89712,275.126365 C467.250154,276.185504 467.628097,277.213923 468.848786,277.648405 C468.938786,278.798405 469.018786,279.968405 469.098786,281.138405 C469.478786,281.128405 470.228786,281.118405 470.608786,281.108405 C471.538786,282.498405 472.368786,283.978405 473.288786,285.398405 C473.442536,285.488405 473.653942,285.612155 473.879763,285.74487 L474.33781,286.014909 C474.56363,286.148562 474.775036,286.274655 474.928786,286.368405 C474.947536,286.585905 474.971911,286.884968 474.997692,287.204421 L475.04988,287.85239 C475.075661,288.171843 475.100036,288.470905 475.118786,288.688405 C478.768786,290.308405 481.818786,293.418405 483.498786,297.038405 C483.693786,297.068405 483.963317,297.112468 484.252009,297.160046 L484.838532,297.256765 C485.128161,297.304343 485.400036,297.348405 485.598786,297.378405 C487.038786,299.018405 488.748786,300.388405 490.488786,301.718405 C492.108786,302.868405 493.838786,303.858405 495.588786,304.818405 C496.928786,305.428405 498.258786,306.098405 499.568786,306.798405 C500.948786,307.418405 502.368786,308.008405 503.568786,308.968405 C505.078786,309.308405 506.898786,309.278405 507.628786,310.958405 C509.838786,311.258405 512.058786,311.538405 514.278786,311.868405 L514.168786,313.128405 C522.768786,313.328405 531.378786,313.408405 539.978786,313.098405 L539.848786,311.978405 C541.748786,311.698405 543.648786,311.398405 545.548786,311.048405 C546.516059,310.049314 547.827547,309.702207 549.155969,309.409217 L549.725375,309.28522 C550.29391,309.16105 550.856968,309.031133 551.388786,308.848405 C554.768786,306.808405 558.228786,304.868405 561.628786,302.828405 C562.154786,302.406405 562.676386,301.978405 563.196946,301.548965 L564.758866,300.260885 C566.324386,298.977605 567.910786,297.722405 569.608786,296.618405 C570.138786,295.838405 570.658786,295.048405 571.198786,294.268405 C571.968786,293.748405 572.758786,293.248405 573.558786,292.738405 C574.77612,290.567739 576.375275,288.671339 577.993432,286.792865 L578.875767,285.768479 C579.169053,285.426583 579.460786,285.083739 579.748786,284.738405 C580.778786,282.448405 582.108786,280.288405 583.888786,278.508405 C584.048786,277.368405 584.198786,276.238405 584.358786,275.108405 C584.738786,275.108405 585.478786,275.118405 585.858786,275.118405 C586.198786,272.868405 586.218786,270.338405 587.948786,268.628405 C588.288786,266.738405 588.598786,264.848405 588.898786,262.948405 L589.928786,263.038405 C590.068786,259.568405 590.628786,256.128405 590.838786,252.658405 C591.018786,189.328405 590.608786,125.988405 591.038786,62.6684054 C592.498786,61.4884054 592.678786,59.5284054 593.238786,57.8584054 C594.038786,56.0884054 594.898786,54.3384054 595.858786,52.6384054 C596.248786,51.1784054 596.308786,49.4284054 597.888786,48.7084054 C598.268786,47.2584054 598.368786,45.5884054 599.748786,44.6584054 C600.948786,42.5584054 602.058786,40.4184054 603.188786,38.2784054 C605.438786,35.8584054 607.488786,33.2484054 609.758786,30.8284054 C613.388786,26.2984054 617.798786,22.4184054 622.738786,19.3784054 C622.788786,19.1184054 622.878786,18.5784054 622.928786,18.3084054 C625.238786,17.3684054 627.468786,16.2284054 629.528786,14.7884054 C630.578786,13.5984054 632.158786,13.3784054 633.618786,12.9384054 C635.15408,11.0060524 637.334011,10.2228344 639.594728,9.54859465 L640.350518,9.32645746 C642.117402,8.8108967 643.895257,8.29134653 645.418786,7.27840535 C645.617536,7.26715535 645.890817,7.2516866 646.182204,7.23516317 L646.7724,7.20164754 C647.062849,7.1851241 647.333786,7.16965535 647.528786,7.15840535 C648.812657,5.66808277 650.745852,5.43894646 652.686565,5.3109145 L653.268363,5.27437796 C654.139473,5.22064261 654.999109,5.16388922 655.788786,4.99840535 C656.998786,4.20840535 658.308786,3.58840535 659.528786,2.78840535 C661.098786,0.738405354 663.808786,1.28840535 666.098786,1.18840535 L665.988786,0.0184053537 C670.358786,-0.0115946463 674.728786,1.13686838e-13 679.108786,0.0184053537 Z">
                </path>
            </g>
            <!-- 这里是背景的星星,白色 -->
            <g id="stars" transform="translate(244.126845, 279.940000)" fill="#FFF">
                <path
                    d="M973.413155,2.45 C974.243155,1.63 975.083155,0.81 975.943155,0 C981.453155,8.35 986.863155,20.02 998.403155,20.57 C999.723155,21.83 1002.02315,22.84 1001.26315,25.09 C998.843155,27.87 994.953155,28.38 992.033155,30.44 C985.413155,35.12 981.393155,42.84 980.223155,50.75 C975.303155,50.75 976.313155,43.67 972.933155,41.05 C969.233155,32.89 959.933155,30.58 952.383155,27.25 C952.383155,26.66 952.383155,25.47 952.383155,24.87 C956.883155,23.18 961.393155,21.34 965.303155,18.49 C968.463155,16.18 969.323155,12.05 972.313155,9.57 C972.803155,7.22 973.183155,4.84 973.413155,2.45 Z">
                </path>
                <path
                    d="M345.353155,192.41 C346.333155,192.4 347.313155,192.4 348.313155,192.41 C351.593155,203.08 355.303155,214.42 363.763155,222.29 C373.053155,232.84 386.603155,239.71 400.683155,240.52 C401.483155,241.43 402.193155,242.43 402.893155,243.43 C397.293155,243.94 392.963155,248.19 387.323155,248.63 C386.323155,249.58 385.333155,250.53 384.353155,251.49 C383.753155,251.61 382.543155,251.85 381.933155,251.97 C370.853155,258.64 362.783155,269.15 357.503155,280.77 C356.293155,285.97 356.093155,292.28 351.953155,296.11 C351.093155,295.26 350.253155,294.42 349.423155,293.58 C347.683155,280.22 338.323155,269.22 328.313155,260.76 C324.503155,259.18 321.963155,255.14 317.433155,255.47 C316.393155,254.52 315.373155,253.57 314.363155,252.62 C308.783155,252.1 302.593155,251.54 298.643155,247.03 C309.113155,243.06 319.573155,238.74 328.153155,231.32 C333.203155,224.23 340.223155,217.86 341.533155,208.72 C345.203155,204.04 344.653155,197.97 345.353155,192.41 Z">
                </path>
                <path
                    d="M1133.62315,362.82 C1135.33315,362.18 1136.93315,361.23 1138.39315,360.09 C1138.52315,365.23 1138.19315,370.44 1139.49315,375.48 C1141.12315,384.55 1147.69315,391.81 1155.07315,397.02 C1155.20315,397.62 1155.45315,398.82 1155.58315,399.42 C1150.78315,400.98 1145.73315,400.02 1140.81315,400.42 C1131.99315,403.11 1124.15315,408.33 1118.44315,415.67 C1117.37315,415.66 1116.32315,415.66 1115.29315,415.67 C1116.41315,406.17 1114.08315,396.77 1108.92315,388.98 C1105.92315,385.89 1102.67315,383.05 1099.86315,379.79 C1099.22315,379.73 1097.93315,379.62 1097.29315,379.56 C1097.27315,378.52 1097.27315,377.5 1097.29315,376.48 C1104.05315,376.43 1110.88315,376.89 1117.60315,375.77 C1117.51315,375.44 1117.34315,374.78 1117.25315,374.45 C1117.95315,374.46 1119.34315,374.47 1120.04315,374.48 C1120.40315,374.01 1121.13315,373.08 1121.49315,372.61 C1122.12315,372.56 1123.39315,372.46 1124.02315,372.41 C1126.78315,368.67 1132.27315,367.65 1133.62315,362.82 Z">
                </path>
                <path
                    d="M1541.38315,416.48 C1542.37315,416.47 1543.38315,416.47 1544.42315,416.48 C1544.43315,417.17 1544.46315,418.54 1544.47315,419.23 C1544.93315,419.6 1545.86315,420.32 1546.32315,420.69 C1546.37315,421.32 1546.49315,422.58 1546.54315,423.21 C1546.96315,423.58 1547.81315,424.32 1548.23315,424.69 C1550.04315,433.94 1559.49315,439.62 1567.47315,443.51 C1570.18315,444.45 1575.73315,442.91 1575.53315,447.2 C1561.92315,451.26 1548.98315,462.79 1548.42315,477.72 C1547.41315,477.71 1546.43315,477.72 1545.47315,477.74 C1540.98315,464.64 1529.80315,452.18 1515.21315,451.58 C1515.19315,450.54 1515.19315,449.51 1515.22315,448.49 C1516.60315,447.38 1518.13315,446.43 1519.92315,446.11 C1520.33315,445.77 1521.15315,445.09 1521.56315,444.75 C1530.65315,442.11 1536.54315,433.69 1540.31315,425.48 C1540.86315,422.5 1541.24315,419.5 1541.38315,416.48 Z">
                </path>
                <path
                    d="M37.1831549,683.39 C38.3531549,683.39 39.5231549,683.4 40.6931549,683.4 C41.2931549,685.37 41.3831549,687.43 41.3731549,689.49 C41.8531549,689.82 42.8031549,690.47 43.2731549,690.8 C43.3231549,691.39 43.4031549,692.58 43.4431549,693.17 C44.6731549,694.36 45.2831549,695.91 45.4831549,697.62 C47.2831549,699.25 48.8231549,701.14 49.5031549,703.53 C52.1231549,706.19 54.7431549,708.87 57.5631549,711.32 C60.0731549,711.8 61.7631549,713.74 63.4831549,715.46 C65.6631549,715.6 67.9431549,715.9 69.5231549,717.58 C70.1631549,717.6 71.4231549,717.65 72.0531549,717.67 C72.3831549,718.15 73.0231549,719.1 73.3531549,719.58 C76.1431549,719.52 78.9631549,719.67 81.6731549,720.49 C82.3831549,723.48 80.1431549,724.92 77.4631549,724.65 C76.3231549,725.28 75.1631549,725.88 74.0031549,726.48 C73.4431549,726.52 72.3231549,726.59 71.7731549,726.63 C70.5531549,727.85 68.9931549,728.44 67.3131549,728.67 C65.6731549,730.47 63.7831549,732.01 61.4031549,732.7 C58.7531549,735.29 56.1231549,737.91 53.5231549,740.57 C52.9531549,743.07 51.3331549,745 49.4731549,746.68 C49.3331549,748.85 49.0531549,751.14 47.3431549,752.71 C47.3231549,753.34 47.2831549,754.61 47.2631549,755.25 C46.7931549,755.57 45.8331549,756.21 45.3531549,756.53 C45.4031549,759.32 45.2531549,762.15 44.4431549,764.86 C40.0931549,765.93 40.1531549,761.54 40.3931549,758.63 C39.9131549,758.3 38.9631549,757.65 38.4931549,757.32 C38.4331549,756.71 38.3131549,755.48 38.2531549,754.87 C36.9431549,750.98 33.6131549,748.39 32.2331549,744.59 C29.6231549,741.91 27.0131549,739.23 24.1431549,736.83 C21.7531549,736.11 19.9231549,734.43 18.2531549,732.66 C16.0631549,732.51 13.7831549,732.22 12.2231549,730.53 C11.5831549,730.51 10.3131549,730.48 9.68315489,730.46 C9.36315489,729.98 8.73315489,729.02 8.41315489,728.54 C5.34315489,728.26 -0.916845113,729.61 0.113154887,724.61 C2.77315489,723.97 5.33315489,722.98 7.76315489,721.7 C8.31315489,721.64 9.42315489,721.53 9.98315489,721.48 C11.2031549,720.27 12.7631549,719.67 14.4431549,719.44 C16.0731549,717.64 17.9731549,716.1 20.3431549,715.42 C23.0231549,712.8 25.6931549,710.17 28.1331549,707.33 C28.6531549,704.84 30.5631549,703.15 32.2731549,701.44 C32.4031549,699.25 32.7031549,696.98 34.3831549,695.42 C34.4131549,694.79 34.4731549,693.54 34.5131549,692.91 C34.9831549,692.57 35.9431549,691.89 36.4131549,691.55 C36.4631549,688.81 36.1631549,685.98 37.1831549,683.39 Z">
                </path>
                <path
                    d="M1387.21315,1131.17 C1387.33315,1130 1387.47315,1128.85 1387.64315,1127.72 C1389.67315,1129.68 1390.94315,1132.22 1392.20315,1134.73 C1395.94315,1148.17 1405.19315,1161.12 1418.28315,1166.77 C1418.65315,1167.16 1419.37315,1167.93 1419.73315,1168.32 C1420.38315,1168.39 1421.67315,1168.52 1422.31315,1168.59 C1423.99315,1169.58 1425.71315,1170.53 1427.44315,1171.5 C1430.68315,1172.83 1436.03315,1170.82 1437.78315,1174.5 C1438.60315,1174.52 1440.24315,1174.56 1441.06315,1174.58 C1440.18315,1175.51 1439.30315,1176.45 1438.45315,1177.4 C1436.85315,1177.65 1435.52315,1178.52 1434.24315,1179.4 C1420.77315,1183.08 1407.82315,1192.39 1402.16315,1205.48 C1401.78315,1205.84 1401.00315,1206.56 1400.61315,1206.92 C1400.54315,1207.56 1400.41315,1208.86 1400.34315,1209.51 C1399.32315,1211.17 1398.38315,1212.88 1397.45315,1214.59 C1396.76315,1217.54 1396.37315,1220.56 1396.36315,1223.6 C1395.71315,1224.27 1395.09315,1224.95 1394.49315,1225.65 C1393.44315,1225.64 1392.42315,1225.67 1391.42315,1225.71 C1391.52315,1223.97 1390.43315,1222.7 1389.46315,1221.44 C1388.81315,1214.03 1383.31315,1208.32 1379.86315,1202.06 C1375.04315,1197.03 1370.24315,1191.59 1363.42315,1189.36 C1363.07315,1188.97 1362.38315,1188.18 1362.04315,1187.79 C1361.39315,1187.73 1360.08315,1187.6 1359.43315,1187.54 C1357.72315,1186.53 1356.00315,1185.58 1354.30315,1184.62 C1351.02315,1183.41 1345.68315,1185.3 1343.96315,1181.61 C1343.15315,1181.6 1341.51315,1181.58 1340.70315,1181.57 C1342.19315,1179.12 1345.03315,1178.1 1347.40315,1176.67 C1360.96315,1173.12 1373.86315,1163.73 1379.59315,1150.67 C1379.97315,1150.3 1380.73315,1149.55 1381.11315,1149.18 C1381.18315,1148.54 1381.33315,1147.25 1381.41315,1146.61 C1382.39315,1144.92 1383.32315,1143.21 1384.30315,1141.53 C1385.94315,1138.31 1383.57315,1132.95 1387.21315,1131.17 Z">
                </path>
                <path
                    d="M313.673155,1254.04 C314.563155,1254.8 315.453155,1255.56 316.353155,1256.35 C316.683155,1258.05 317.043155,1259.78 317.413155,1261.52 C322.703155,1269.03 330.513155,1273.55 338.863155,1276.9 C338.093155,1277.76 337.323155,1278.64 336.573155,1279.55 C334.833155,1279.86 333.113155,1280.22 331.403155,1280.6 C324.123155,1286.02 318.923155,1293.7 316.203155,1302.15 C315.263155,1301.34 314.323155,1300.54 313.383155,1299.78 C313.043155,1298.03 312.683155,1296.31 312.333155,1294.6 C306.983155,1287.23 299.313155,1282.31 290.853155,1279.27 C291.623155,1278.36 292.383155,1277.45 293.163155,1276.58 C294.883155,1276.22 296.603155,1275.86 298.333155,1275.52 C305.723155,1270.17 310.583155,1262.49 313.673155,1254.04 Z">
                </path>
            </g>
            <!-- 这里是右上角的泡泡,颜色可以是渐变的开头色 -->
            <g id="sub" transform="translate(0.000000, 0.000000)" fill="${primaryColor}">
                <path
                    d="M382.02,0 L398.79,0 C402.63,3.36 407.68,4.87 412.75,4.43 C414.61,4.34 416.54,4.69 418.28,3.76 L415.16,6.84 L418.37,5.16 C418.42,5.9 418.53,7.37 418.58,8.1 L419.97,4.8 C419.86,5.73 419.64,7.57 419.52,8.49 L420.89,7.31 C421.97,8.19 423.24,8.6 424.7,8.51 C424.58,9.01 424.34,10 424.21,10.5 C425.46,10.4 427.94,10.2 429.19,10.11 L424.64,11.94 L428.43,11.39 L428.42,12.62 C428.96,12.5 430.04,12.24 430.58,12.11 L430.16,15.06 L431.6,12.58 L431.67,14.95 L434.3,13.51 L431.36,16.79 L434.18,15.19 C434.29,15.65 434.49,16.57 434.6,17.03 L436.62,15.6 C431.03,21.96 444.79,14.22 435.78,19.85 L438.7,19.37 L438.15,22.12 L440.54,19.2 C440.23,20.06 439.62,21.78 439.32,22.65 C439.88,22.36 441,21.78 441.55,21.49 C441,24.47 441.71,25.14 443.69,23.51 C443.65,24.3 443.57,25.89 443.53,26.69 L446.53,26.13 L442.9,28.12 C443.59,27.96 444.97,27.65 445.66,27.49 C445.75,28.53 445.94,30.61 446.03,31.65 L447.13,27.15 C447.27,28.38 447.54,30.83 447.67,32.05 C447.7,32.84 447.75,34.43 447.78,35.22 C448.18,35.49 448.97,36.03 449.36,36.3 C449.98,37.79 450.65,39.26 451.39,40.7 C451.78,42.22 451.61,44.23 453.44,44.79 C453.93,46.83 454.39,48.9 455.42,50.75 C456.03,54.74 455.48,59.09 457.45,62.76 C457.68,67.02 457.54,71.28 457.61,75.54 C457.3,75.55 456.69,75.58 456.38,75.6 C455.92,81.48 456.3,87.92 452.6,92.92 C451.72,95.93 450.62,98.86 449.33,101.71 C448.94,101.66 448.18,101.57 447.8,101.53 C447.72,102.9 447.66,104.28 447.59,105.65 C447.26,105.64 446.58,105.63 446.25,105.62 C444.73,109.74 439.57,111.85 439.48,116.45 C438.99,116.4 438.02,116.29 437.53,116.24 C439.16,118.56 438.72,119.01 436.22,117.62 C436.31,118.31 436.5,119.7 436.59,120.4 C435.82,120.4 434.28,120.4 433.51,120.4 C433.57,120.97 433.7,122.11 433.76,122.68 L431.1,122.05 L433.03,124.15 C432.4,123.95 431.13,123.54 430.49,123.33 L430.24,124.89 L427.54,123.45 L430.58,126.58 L427.82,125.31 C427.73,125.97 427.56,127.3 427.48,127.96 L425.75,124.81 L426.68,127.91 L425.46,127.32 L425.59,128.36 C424.17,128.38 422.76,128.41 421.35,128.44 C421.49,128.93 421.75,129.92 421.89,130.41 C420.66,130.41 418.21,130.41 416.99,130.41 L421.59,131.9 C420.26,131.8 417.62,131.61 416.3,131.52 L416.52,132.55 C414.74,132.43 412.96,132.29 411.18,132.13 L414.89,133.55 C412.99,133.71 409.17,134.03 407.26,134.19 C409.19,134.4 413.05,134.83 414.98,135.04 C398.97,136.8 382.76,137.26 366.76,135.08 C368.33,134.83 371.49,134.31 373.07,134.05 L363.8,133.27 L369.78,131.99 C367.67,132.08 365.57,132.25 363.48,132.51 L363.67,131.6 C362.22,131.6 360.77,131.6 359.33,131.6 C359.44,131.17 359.66,130.31 359.77,129.89 C357.33,127.76 353.95,127.37 350.85,127.75 L354.71,126.61 C353.47,126.47 350.98,126.18 349.74,126.03 L353.03,124.67 C351.85,124.59 349.48,124.42 348.3,124.34 L348.57,123.34 L347.1,123.6 C347.32,123.1 347.76,122.11 347.98,121.62 C346.9,121.61 344.76,121.6 343.68,121.6 C345.18,119.89 344.77,119.21 342.44,119.55 C342.76,117.24 342.05,116.9 340.3,118.52 C340.04,116.83 339.86,115.14 339.76,113.45 C339.12,113.77 337.84,114.43 337.2,114.76 C337.57,113.92 338.3,112.24 338.67,111.4 L335.48,114.4 L336.89,111.76 L335.61,111.59 C335.59,111.06 335.56,110.02 335.54,109.5 L333.16,109.69 L334.98,107.98 C334.35,108.12 333.09,108.42 332.47,108.57 C332.46,107.92 332.44,106.63 332.43,105.98 C332.6,104.21 331.89,102.57 330.69,101.3 C329.99,99.93 329.19,98.63 328.46,97.28 C328.34,96.05 328.24,94.82 328.16,93.6 C327.75,93.59 326.94,93.58 326.53,93.58 C326.11,91.33 325.92,88.94 324.55,87.03 C323.8,83.76 324.78,79.69 322.5,76.99 C322.27,71.66 322.28,66.31 322.48,60.98 C324.95,57.35 324.09,52.55 324.44,48.38 C324.83,48.4 325.6,48.42 325.99,48.44 C326.14,47.28 326.31,46.12 326.49,44.97 C328.57,42 329.2,38.27 331.32,35.3 C332.39,31.57 336.4,29.41 336.67,25.41 C336.53,24.92 336.26,23.95 336.12,23.47 C341.44,27.84 334.66,18.28 339.61,22.98 L339.37,21.5 L340.92,21.81 L339.1,19.82 L341.55,20.72 L341.77,19.04 L344.07,20.38 L341.34,16.98 L344.66,19.24 C344.3,18.58 343.6,17.25 343.24,16.59 C343.85,16.56 345.07,16.5 345.68,16.48 C349.38,15.92 351.67,12.48 355.16,11.31 C355.98,9.99 357.51,9.69 358.88,9.19 C360.17,8.41 361.58,7.85 362.98,7.26 C364.59,5.37 367.23,5.69 369.45,5.41 C369.42,5.16 369.37,4.67 369.34,4.43 C372.08,4.13 374.81,3.74 377.56,3.44 C377.53,2.96 377.46,2.01 377.43,1.54 C378.68,1.54 379.93,1.54 381.19,1.54 C381.4,1.16 381.82,0.39 382.02,0 Z M54.4,176.49 C59.94,175.04 66.31,175.28 69.71,180.56 C71.23,193.58 70.11,206.81 70.32,219.92 C70.83,219.79 71.86,219.54 72.38,219.42 C72.37,220.81 72.37,222.2 72.37,223.6 C86.42,223.61 100.46,223.52 114.5,223.64 L114.56,224.8 C115.23,224.48 116.59,223.84 117.26,223.51 L115.01,226.22 L117.69,225.07 L117.27,226.5 L118.97,226.09 L117.12,228.11 L119.67,227.2 L119.4,228.67 L120.37,228.28 C120.54,232.16 120.58,236.04 120.4,239.92 L118.25,239.34 C118.91,240.12 120.23,241.7 120.9,242.49 L117.5,239.79 L118.97,242.38 L117.13,242.28 L118,243.64 C117.53,243.63 116.61,243.61 116.15,243.6 C101.27,244.23 86.25,242.82 71.47,244.37 C71.52,245.16 71.63,246.75 71.69,247.55 L70.38,247.47 C70.4,259.65 70.47,271.83 70.39,284.01 C70.5,286.89 68.51,289.16 67.22,291.55 C66,291.66 64.78,291.79 63.56,291.91 C63.57,292.35 63.59,293.21 63.61,293.65 C62.08,293.61 60.56,293.58 59.03,293.53 C57.69,292.36 55.93,291.97 54.27,291.47 C54.25,291.05 54.21,290.2 54.19,289.78 C53.71,289.77 52.74,289.75 52.26,289.74 C50.85,275.84 52.18,261.82 51.52,247.89 L50.39,247.09 C50.41,246.45 50.43,245.16 50.45,244.52 C35.75,242.71 20.83,244.25 6.05,243.63 C5.42,243.63 4.17,243.63 3.55,243.63 C3.6,243.07 3.71,241.94 3.76,241.38 L1.68,242.77 L2.83,240.43 C2.12,240.44 0.71,240.46 0,240.46 L0,225.2 L1.01,231.55 L1.67,227.06 L4.51,228.72 L1.36,225.22 C1.97,225.61 3.21,226.38 3.83,226.77 C5.53,226.21 7.15,225.41 8.68,224.49 C22.16,224.16 35.65,224.59 49.14,224.26 C49.95,223.33 50.77,222.42 51.59,221.51 C52.14,207.15 50.72,192.69 52.46,178.4 C52.93,178.39 53.88,178.36 54.35,178.34 C54.36,177.88 54.39,176.95 54.4,176.49 Z M205.55,287.22 C207.6,287.27 209.65,287.29 211.71,287.3 C211.69,287.68 211.66,288.45 211.64,288.83 C215.72,290.54 218.05,294.82 221.44,297.56 C223.24,299.47 225.38,301.1 226.73,303.41 C228.51,303.11 230.87,303.8 232.05,302.04 C236.67,296.95 242.13,292.08 246.56,287.26 C253.86,284.52 256.85,294.74 250.58,297.53 C248.47,300.49 245.51,303.32 242.63,305.56 C242.2,306.46 241.49,307.11 240.51,307.5 C240.08,308.52 239.37,309.24 238.38,309.65 C235.49,315.33 242.81,317.6 245.42,321.59 C248.54,323.9 250.57,327.39 253.79,329.57 C253.8,331.85 253.76,334.14 253.72,336.42 C253.08,336.7 251.79,337.26 251.15,337.53 C249.37,337.25 247.03,337.78 245.86,336.02 C241.15,331 235.96,326.37 231.35,321.33 C229.79,321.31 228.24,321.31 226.69,321.34 C222.01,326.35 216.86,331.01 212.13,336.03 C210.18,338.46 206.79,337.07 204.22,336.78 C203.98,334.39 202.75,331.55 204.39,329.45 C209.54,324.48 214.42,319.27 219.71,314.45 C219.69,312.85 219.69,311.24 219.69,309.64 C218.59,309.3 217.87,308.53 217.53,307.34 C217,307.13 215.96,306.71 215.44,306.5 L215.78,305.22 L214.47,305.57 C214.28,305.01 213.9,303.88 213.71,303.32 C213.14,303.12 212,302.72 211.43,302.52 L211.78,301.22 L210.48,301.57 C210.28,301 209.89,299.87 209.69,299.31 C209.13,299.11 208,298.71 207.43,298.52 L207.78,297.23 L206.6,297.55 C206.29,296.08 205.61,294.96 203.95,295.09 C203.97,293.01 202.25,288.19 205.72,288.58 C205.68,288.24 205.59,287.56 205.55,287.22 Z">
                </path>
            </g>
            <!-- rocket -->
            <g id="rokect" transform="translate(674.281285, 337.290000)">
                <!-- rocket background -->
                <g id="rokect-bg-light" transform="translate(69.244698, 155.410000)" fill="#FFF">
                    <path
                        d="M119.354017,0.77 C120.264017,0.67 121.194017,0.59 122.124017,0.51 C122.064017,3.18 122.034017,5.86 122.104017,8.54 C122.094017,14.65 121.904017,20.79 122.934017,26.84 L124.084017,26.81 C124.064017,27.51 124.024017,28.89 124.014017,29.59 C124.474017,29.92 125.394017,30.58 125.854017,30.91 C126.124017,32.8 126.474017,34.7 126.904017,36.58 C134.804017,51.28 147.464017,62.41 161.364017,71.31 C162.584017,72.18 163.984017,72.66 165.454017,73.02 C168.624017,76.17 173.054017,77.37 176.824017,79.61 C177.024017,79.72 177.434017,79.93 177.634017,80.04 C182.604017,84.75 189.924017,84.86 195.654017,88.23 C226.544017,97.93 259.124017,99.66 291.354017,97.86 C291.134017,97.39 290.684017,96.44 290.464017,95.96 C293.414017,95.6 297.074017,96.98 299.534017,94.87 C302.874017,94.67 306.604017,95.31 309.344017,92.91 C313.404017,92.46 317.964017,93.22 321.564017,90.87 C322.904017,90.77 324.254017,90.7 325.634017,90.64 C325.964017,90.19 326.644017,89.27 326.974017,88.82 C331.984017,88.93 337.144017,88.02 341.204017,84.91 C343.454017,84.67 345.994017,84.83 347.564017,82.86 C348.104017,82.82 349.194017,82.74 349.734017,82.7 C350.064017,82.26 350.724017,81.36 351.054017,80.91 C356.884017,79.7 363.074017,77.04 367.444017,73 C380.174017,66.99 391.464017,57.2 399.774017,45.75 C399.874017,45.61 400.074017,45.33 400.174017,45.19 C406.344017,40.92 407.714017,32.82 410.414017,26.28 C411.694017,17.61 410.464017,8.74 410.974017,5.68434189e-14 C421.024017,12.01 427.644017,26.57 436.524017,39.51 C436.844017,51.9 446.694017,62.35 446.664017,75.07 C451.414017,81.35 449.004017,89.46 452.544017,96.22 C454.604017,100.68 453.704017,105.86 455.824017,110.33 C458.674017,115.97 457.654017,122.58 460.504017,128.24 C463.284017,133.57 460.954017,139.81 463.434017,145.23 C463.964017,149.01 465.674017,152.53 466.074017,156.32 C465.344017,166.29 471.274017,175.3 470.294017,185.32 C472.834017,190.36 471.094017,196.19 473.514017,201.22 C475.224017,207.26 472.864017,213.82 475.034017,219.79 C476.984017,224.06 474.984017,229.08 477.514017,233.21 C479.574017,244.07 476.094017,255.71 479.824017,266.3 C481.034017,275.58 478.214017,285.39 481.834017,294.3 C482.354017,307.94 481.794017,321.64 482.084017,335.31 C482.464017,339.18 479.534017,342.41 479.994017,346.3 C479.514017,353.63 481.424017,361.38 478.514017,368.37 C476.944017,378.57 480.094017,389.49 476.174017,399.29 C475.814017,402.19 476.414017,405.25 475.314017,408.04 C472.284017,415.49 476.044017,424.04 472.164017,431.32 C468.444017,438.22 471.784017,446.41 468.164017,453.32 C465.284017,458.65 467.054017,464.97 464.544017,470.39 C461.594017,476.63 462.444017,483.82 459.234017,490 C458.144017,497.65 453.984017,504.52 453.844017,512.32 C443.864017,539.36 434.854017,567.12 421.844017,593.04 C410.914017,615.18 399.884017,637.49 385.594017,657.51 C372.674017,679.32 356.434017,698.88 340.864017,718.7 C334.204017,724.12 331.274017,733.43 322.864017,736.83 C322.454017,737.66 322.074017,738.51 321.704017,739.38 C316.054017,741.86 313.174017,747.83 307.694017,750.57 C300.994017,756.04 293.664017,760.69 286.334017,765.28 C284.754017,766.27 284.414017,768.29 283.594017,769.86 C282.674017,769.88 281.764017,769.91 280.864017,769.97 C281.704017,759.8 277.424017,750.37 276.334017,740.47 C275.794017,740.87 274.714017,741.67 274.174017,742.07 C274.074017,739.26 274.074017,736.46 274.084017,733.68 L272.964017,733.93 C272.944017,730.43 272.154017,727.12 271.954017,723.67 L270.904017,723.93 C271.164017,718.84 270.084017,713.86 268.624017,709.03 C268.234017,708.74 267.454017,708.17 267.064017,707.88 C266.844017,705.76 266.554017,703.66 266.204017,701.59 L264.694017,702.01 C264.794017,701.59 264.984017,700.73 265.084017,700.31 C264.014017,697.07 260.524017,697.92 257.894017,697.76 C257.964017,698.2 258.104017,699.09 258.174017,699.53 C255.944017,700.1 255.304017,702.41 254.364017,704.2 C254.204017,705.74 254.094017,707.31 253.964017,708.88 L252.554017,708.66 C252.654017,709.05 252.844017,709.83 252.944017,710.22 C250.034017,715.41 250.844017,721.52 249.184017,727 C248.864017,728.38 248.594017,729.78 248.314017,731.2 C247.684017,735.95 246.264017,740.58 246.794017,745.45 L246.184017,746.23 C246.104017,750.11 245.994017,754.01 246.074017,757.91 L244.854017,757.7 C244.784017,761.29 245.484017,765.07 244.044017,768.49 C244.134017,768.87 244.324017,769.65 244.414017,770.04 L242.844017,770.46 C241.604017,777.49 242.304017,784.66 241.994017,791.76 C241.624017,792.15 240.864017,792.92 240.494017,793.3 C240.864017,793.68 241.614017,794.44 241.994017,794.82 C242.004017,795.71 242.034017,796.62 242.084017,797.55 C240.754017,798.23 239.104017,798.88 238.024017,799.7 C228.134017,797.41 217.394017,798.92 207.254017,797.49 C202.134017,795.93 196.764017,795.82 191.474017,795.93 C180.934017,796.3 170.984017,791.56 160.464017,791.88 C153.264017,791.47 146.714017,787.52 139.434017,787.81 C122.994017,783.79 106.714017,779.17 90.3840166,774.64 C86.3240166,773.28 86.3340166,768.08 83.1440166,765.64 C83.2140166,762.4 81.4640166,759.83 79.1440166,757.78 C79.1440166,754.53 77.5140166,751.84 75.1340166,749.77 C73.6840166,740.77 66.4740166,733.8 65.1040166,724.69 C64.4240166,720.42 61.9840166,716.8 60.2740166,712.92 C59.9540166,712.82 59.3240166,712.61 59.0140166,712.51 C59.1040166,708.84 57.7640166,705.45 56.1540166,702.25 C55.6840166,702.82 55.2340166,703.41 54.7940166,704.01 C55.9440166,699.18 53.3140166,695.11 51.3140166,691.01 C51.6440166,684.47 45.6940166,679.82 46.7640166,673.21 C45.4640166,671.81 44.1540166,670.44 42.8340166,669.1 C42.6940166,664.12 43.7540166,658.88 41.1140166,654.38 C41.8840166,647.08 35.7840166,641.77 36.3340166,634.54 C35.7840166,634.94 34.6840166,635.74 34.1340166,636.14 C34.1240166,635.5 34.1240166,634.22 34.1140166,633.58 L33.0940166,634.03 C32.8840166,632.25 32.2940166,630.6 31.0140166,629.34 C30.8540166,625.74 30.4840166,622.17 30.0140166,618.62 L29.1340166,618.85 C27.0540166,614.57 26.5140166,609.9 26.7140166,605.21 C26.4240166,604.02 26.1540166,602.84 25.9140166,601.67 L24.9740166,602.03 C22.6940166,595.93 22.9840166,589.51 22.0140166,583.18 C21.0440166,582.27 20.5840166,581.12 20.6240166,579.73 C19.9440166,579.8 19.2640166,579.89 18.6040166,579.99 C19.0840166,576.18 18.7440166,572.35 18.7740166,568.54 C18.7740166,566.75 18.7640166,564.98 18.7640166,563.23 C18.1640166,562.53 17.6040166,561.89 17.0240166,561.23 C13.4640166,553.24 16.5140166,544.27 13.0140166,536.27 C9.07401662,526.64 12.7140166,515.96 8.93401662,506.3 C5.84401662,499.68 7.15401662,492.31 6.94401662,485.29 C7.10401662,473.77 1.96401662,462.88 2.85401662,451.31 C3.35401662,440.28 2.38401662,429.3 2.04401662,418.3 C-0.955983376,398.14 0.324016624,377.64 0.0240166238,357.3 C-0.235983376,341.21 3.78401662,325.41 2.83401662,309.3 C1.96401662,299.01 8.06401662,289.62 6.92401662,279.3 C5.75401662,271.2 12.1240166,264.4 10.9240166,256.3 C9.69401662,249.73 16.0140166,244.88 14.9140166,238.3 C13.6340166,232.69 18.4840166,228.64 18.7740166,223.31 C19.0540166,215.96 23.4340166,209.63 23.8940166,202.28 C26.8040166,196.96 26.4640166,190.67 29.6440166,185.5 C31.6440166,182.04 29.9340166,177.55 32.5340166,174.33 C34.6640166,171.62 35.1740166,168.25 35.0340166,164.89 C37.5040166,162.62 39.1840166,159.71 39.0040166,156.26 C45.2140166,139.64 52.7540166,123.32 59.1740166,106.68 C60.0340166,105.68 60.9040166,104.69 61.7940166,103.7 C62.4340166,99.87 64.3240166,96.5 66.1440166,93.13 C81.7740166,61.15 100.004017,30.55 119.354017,0.77 M234.814017,234.72 C234.824017,235.23 234.844017,236.24 234.854017,236.74 C232.954017,236.68 231.074017,236.69 229.194017,236.77 C228.444017,237.52 227.544017,238 226.484017,238.19 C225.404017,238.58 224.284017,238.76 223.134017,238.73 C221.094017,241.52 215.914017,239.4 213.244017,242.03 C212.714017,242.27 211.664017,242.74 211.134017,242.98 C209.784017,244.02 208.004017,244.07 206.424017,244.44 C205.304017,244.46 204.414017,244.87 203.754017,245.68 C202.814017,246.1 201.874017,246.53 200.944017,246.96 C199.294017,248.25 197.214017,248.65 195.184017,248.81 C193.424017,251.15 190.764017,252.35 187.954017,252.87 L188.144017,253.77 C187.124017,254.1 186.114017,254.46 185.124017,254.84 C179.904017,258.24 174.234017,261.05 169.864017,265.74 C168.944017,266.09 168.034017,266.46 167.144017,266.84 C164.824017,269.24 162.184017,271.3 159.814017,273.64 C158.554017,273.85 157.924017,274.6 157.914017,275.9 C156.894017,276.17 155.884017,276.44 154.884017,276.73 C154.604017,277.77 154.334017,278.83 154.074017,279.9 C153.004017,280.16 151.944017,280.43 150.894017,280.71 C150.614017,281.72 150.344017,282.73 150.064017,283.75 C148.664017,283.71 147.964017,284.38 147.954017,285.76 C146.804017,285.9 146.074017,286.61 145.764017,287.87 C144.164017,289.54 142.554017,291.21 141.164017,293.02 C140.484017,293.73 139.774017,294.39 139.024017,295.02 C138.874017,295.56 138.554017,296.64 138.404017,297.18 C137.404017,298.45 136.244017,299.57 135.024017,300.62 C134.654017,301.73 134.294017,302.85 133.944017,303.99 C132.954017,304.85 131.974017,305.73 130.994017,306.6 C130.634017,307.75 130.284017,308.92 129.954017,310.09 C128.964017,311.06 127.974017,312.05 126.964017,312.99 C126.604017,314.59 126.264017,316.2 125.934017,317.82 C123.064017,319.57 122.294017,322.71 121.924017,325.84 C120.944017,326.81 119.984017,327.78 119.014017,328.76 C117.934017,331.35 119.564017,336.52 115.944017,336.97 C116.014017,337.64 116.134017,338.97 116.204017,339.64 C114.894017,339.9 114.364017,340.79 114.614017,342.31 C113.934017,343.74 114.844017,346.46 112.904017,346.96 C113.254017,351.17 109.484017,354.23 110.884017,358.7 C110.394017,358.68 109.434017,358.65 108.954017,358.63 C108.584017,362.1 108.934017,365.95 107.044017,369.05 C105.604017,387.65 105.274017,406.87 109.924017,424.86 C109.464017,429.59 112.564017,433.48 112.984017,438.07 C113.454017,438.03 114.394017,437.96 114.864017,437.93 C114.924017,439.55 114.414017,441.54 115.814017,442.79 C116.254017,443.8 116.704017,444.82 117.174017,445.85 C118.674017,447.9 118.104017,450.8 119.804017,452.79 C120.254017,453.8 120.704017,454.82 121.164017,455.85 C122.234017,457.32 122.594017,459.13 123.014017,460.89 L123.934017,460.61 C125.634017,464.2 126.454017,468.64 130.094017,470.93 C130.084017,471.59 130.054017,472.93 130.044017,473.59 C130.524017,473.9 131.464017,474.51 131.944017,474.81 C131.814017,476.35 132.534017,477.02 134.104017,476.82 C134.104017,477.48 134.114017,478.79 134.114017,479.44 C136.024017,480.02 135.834017,482.85 137.974017,482.92 C138.714017,486.02 141.474017,489.48 144.144017,490.89 C144.094017,491.39 143.994017,492.39 143.944017,492.89 C144.444017,492.82 145.444017,492.68 145.944017,492.61 C145.874017,494.58 147.004017,496 148.584017,497.06 C152.954017,501.02 156.394017,507.16 162.164017,508.83 C162.094017,509.33 161.954017,510.33 161.884017,510.83 C162.384017,510.78 163.384017,510.68 163.874017,510.63 C165.344017,513.28 168.784017,516.17 171.954017,516.8 C171.764017,518.19 172.374017,518.88 173.764017,518.89 C174.634017,520.65 176.334017,520.86 178.144017,520.77 C178.094017,521.26 177.994017,522.24 177.944017,522.73 C178.404017,522.72 179.314017,522.7 179.764017,522.69 C180.424017,524.51 182.064017,524.9 183.844017,524.76 C184.014017,525.85 184.664017,526.63 185.784017,527.11 C187.464017,528.03 189.344017,528.58 190.934017,529.7 C191.974017,530.14 193.054017,530.53 194.164017,530.86 L193.864017,531.79 C195.604017,532.2 197.494017,532.45 198.904017,533.68 C199.854017,534.07 200.834017,534.46 201.814017,534.85 C202.224017,535.88 203.114017,536.3 204.474017,536.1 C207.184017,536.57 209.484017,537.89 211.984017,538.97 C216.564017,540.57 221.384017,541.96 226.154017,542.75 L225.744017,543.94 C227.454017,543.93 229.174017,543.92 230.914017,543.94 C230.884017,544.41 230.824017,545.36 230.794017,545.84 C258.354017,550.77 287.524017,550.06 314.254017,541.83 C314.214017,541.35 314.134017,540.4 314.094017,539.93 C315.964017,540.5 316.944017,540.11 317.044017,538.74 C318.774017,538.76 320.494017,538.45 322.084017,537.7 C325.004017,535.87 329.174017,536.21 331.244017,532.84 C333.314017,532.65 335.444017,532.39 337.164017,531.09 C338.334017,530.62 338.984017,529.8 339.094017,528.63 C339.734017,528.67 341.004017,528.74 341.644017,528.77 C347.394017,524.79 353.754017,521.65 358.874017,516.86 C359.914017,516.47 360.974017,516.1 362.044017,515.76 C362.614017,515.02 363.224017,514.31 363.864017,513.63 C365.994017,511.12 369.684017,509.59 371.004017,506.73 C372.554017,506.96 373.224017,506.26 373.004017,504.64 C373.514017,504.69 374.534017,504.78 375.034017,504.82 C374.974017,504.27 374.854017,503.17 374.794017,502.61 C375.364017,502.68 376.494017,502.81 377.064017,502.88 C376.994017,502.31 376.854017,501.18 376.784017,500.62 C377.334017,500.68 378.454017,500.8 379.014017,500.87 C378.954017,500.36 378.854017,499.35 378.804017,498.85 C380.854017,498.58 382.324017,496.7 382.954017,494.87 C384.004017,494.61 384.734017,493.93 385.144017,492.83 C386.864017,490.91 388.684017,489.08 390.414017,487.17 C390.554017,486.6 390.814017,485.45 390.944017,484.88 C392.174017,484.82 392.894017,484.18 393.094017,482.98 C395.044017,482.44 394.904017,480.39 394.934017,478.77 C396.474017,479.09 397.144017,478.49 396.934017,476.98 C398.944017,476.57 398.944017,474.55 398.934017,472.92 C400.364017,472.84 401.054017,472.06 401.004017,470.58 L401.894017,470.75 C402.014017,467.73 404.734017,465.8 404.954017,462.93 C407.194017,463.01 406.734017,460.24 406.994017,458.79 C407.964017,457.8 408.934017,456.82 409.914017,455.85 C410.094017,454.63 410.304017,453.42 410.524017,452.22 C410.654017,451.14 411.094017,450.25 411.854017,449.55 C412.554017,447.36 414.364017,445.62 414.324017,443.2 C414.684017,439.73 416.094017,436.5 417.884017,433.55 C419.044017,430.47 417.544017,425.67 420.084017,423.62 C420.084017,422.49 420.104017,421.37 420.154017,420.27 C420.634017,417.9 422.114017,415.79 422.054017,413.32 C422.864017,396.37 423.994017,378.9 420.724017,362.26 C418.194017,357.8 419.604017,351.32 416.904017,347.65 C416.684017,346.06 416.234017,344.52 416.044017,342.95 C413.294017,341.85 415.604017,336.97 413.014017,335.64 C412.564017,333.29 410.464017,331.62 410.794017,329.11 C410.274017,327.96 409.754017,326.86 409.144017,325.8 C408.674017,324.79 408.214017,323.79 407.764017,322.8 C406.844017,321.11 406.324017,319.19 405.014017,317.77 C404.604017,316.72 404.234017,315.68 403.894017,314.64 L403.014017,314.9 C402.734017,312.06 401.404017,309.6 399.034017,308 C398.644017,306.86 398.274017,305.74 397.914017,304.63 C394.184017,301.59 393.104017,296.44 388.984017,293.74 C388.664017,292.78 388.344017,291.84 388.004017,290.91 C386.904017,290.63 386.154017,289.92 385.774017,288.77 C379.924017,282.72 374.084017,276.65 367.854017,270.99 C366.704017,270.68 366.034017,269.94 365.854017,268.78 C364.914017,268.42 363.984017,268.08 363.064017,267.74 C361.404017,265.99 359.494017,264.53 357.794017,262.85 C356.824017,262.45 355.874017,262.07 354.924017,261.71 C353.944017,260.76 352.984017,259.82 352.054017,258.87 C350.954017,258.49 349.864017,258.11 348.794017,257.75 C348.524017,257.29 347.984017,256.39 347.714017,255.93 C347.044017,255.92 345.694017,255.89 345.014017,255.87 C343.654017,252.65 339.654017,253 337.824017,250.73 C336.794017,250.4 335.764017,250.1 334.744017,249.82 L335.114017,248.69 C334.434017,248.71 333.084017,248.75 332.414017,248.77 C332.304017,248.32 332.074017,247.44 331.964017,246.99 C315.744017,239.06 297.974017,233.79 279.814017,233.96 C279.884017,233.63 280.044017,232.98 280.114017,232.66 C270.894017,232.88 261.664017,232.49 252.444017,232.8 C246.754017,234.39 240.704017,234.39 234.814017,234.72 Z">
                    </path>
                    <path
                        d="M259.044017,320.8 C260.624017,318.19 261.774017,314.14 265.394017,313.94 C287.114017,313.85 308.834017,314.07 330.554017,313.84 C332.884017,313.17 333.294017,315.67 332.764017,317.32 C328.904017,320.64 326.634017,325.26 323.164017,328.91 C319.004017,335.89 314.504017,342.75 309.264017,349.05 C307.734017,352.1 305.934017,355.23 303.044017,357.2 C302.964017,357.74 302.794017,358.84 302.714017,359.39 C301.484017,360.48 300.284017,361.58 299.114017,362.72 C297.474017,366.79 294.464017,370.38 291.084017,373.13 C290.774017,374.66 288.934017,376.96 290.574017,378.19 C301.554017,379.61 313.124017,380.23 324.534017,379.8 C327.184017,379.34 327.584017,382.23 325.884017,383.72 C316.694017,392.68 310.004017,403.73 301.284017,413.1 C298.834017,417.74 294.724017,421.27 291.294017,425.18 C289.534017,429.13 285.804017,431.61 283.264017,435 C280.694017,440.46 275.244017,443.84 271.804017,448.74 C267.814017,455.21 260.984017,459.37 257.394017,466.15 C250.814017,472.39 245.764017,479.93 239.574017,486.51 C237.724017,490.2 235.034017,493.86 230.994017,495.3 C230.904017,493.78 230.834017,492.29 230.784017,490.8 C231.804017,489.68 232.824017,488.56 233.854017,487.46 C234.594017,484.01 235.724017,480.58 237.914017,477.77 C238.464017,474.14 239.744017,470.68 241.894017,467.69 C242.584017,464.15 243.424017,460.47 245.904017,457.71 C246.284017,454.74 247.394017,451.98 248.384017,449.19 C248.764017,448.81 249.514017,448.04 249.894017,447.65 C250.134017,445.34 250.554017,443.06 251.044017,440.81 C252.004017,439.1 252.954017,437.39 253.944017,435.71 C253.884017,433.46 254.184017,431.18 255.884017,429.55 C255.944017,428.94 256.054017,427.72 256.104017,427.1 C256.584017,426.79 257.544017,426.17 258.034017,425.86 C258.024017,424.27 258.034017,422.67 258.054017,421.1 C258.544017,420.8 259.524017,420.19 260.014017,419.89 C260.024017,418.85 260.054017,417.83 260.104017,416.81 C254.064017,415.04 247.724017,416.39 241.574017,415.76 C236.864017,413.45 231.224017,415.92 226.504017,414.27 C225.254017,411.63 225.904017,407.79 227.824017,405.45 C227.924017,404.88 228.134017,403.75 228.234017,403.19 C228.654017,402.81 229.494017,402.05 229.904017,401.67 C230.274017,399.43 230.654017,397.19 231.034017,394.96 C234.674017,390.45 234.324017,384.23 237.874017,379.69 C238.614017,376.1 239.464017,372.38 241.824017,369.48 C242.314017,367.27 242.714017,365.06 243.044017,362.84 C246.664017,358.35 246.374017,352.21 249.874017,347.68 C250.594017,344.09 251.494017,340.42 253.794017,337.48 C253.984017,334.44 255.874017,331.93 256.184017,328.95 C256.614017,328.62 257.464017,327.95 257.894017,327.61 C258.194017,325.32 258.594017,323.05 259.044017,320.8 Z">
                    </path>
                    <path
                        d="M118.704017,818.14 C130.774017,824.14 143.034017,831.86 156.714017,832.69 C157.704017,832.66 158.704017,832.65 159.724017,832.66 C160.054017,833.84 160.944017,834.36 162.374017,834.23 C163.664017,834.42 164.974017,834.61 166.304017,834.83 L165.664017,835.82 C167.594017,835.91 169.524017,836.08 171.434017,836.46 C173.324017,836.58 175.234017,836.68 177.144017,836.75 L176.754017,838.02 C178.124017,837.92 179.494017,837.83 180.894017,837.77 L180.984017,838.83 C182.374017,838.74 183.774017,838.67 185.184017,838.61 L184.694017,839.88 C193.214017,839.73 201.484017,841.77 209.884017,842.69 C210.464017,842.7 211.634017,842.73 212.214017,842.74 L211.734017,843.92 C221.104017,844.01 230.454017,845.02 239.844017,844.73 C240.574017,845.4 241.304017,846.09 242.064017,846.79 C242.094017,847.54 242.134017,848.31 242.184017,849.1 C241.764017,857.32 242.084017,865.56 242.114017,873.8 C241.424017,874.54 240.744017,875.29 240.074017,876.07 C230.764017,875.69 221.744017,872.83 212.464017,871.98 C177.684017,864.59 142.244017,850.01 118.984017,821.64 C118.884017,820.45 118.784017,819.29 118.704017,818.14 Z">
                    </path>
                    <path
                        d="M406.944017,818.6 C408.134017,818.61 409.334017,818.64 410.554017,818.69 C402.244017,833.31 387.474017,842.42 373.874017,851.54 C372.124017,852.2 370.114017,852.63 369.374017,854.63 C367.464017,855.84 365.274017,856.44 363.124017,857.02 C361.864017,857.72 360.624017,858.43 359.404017,859.18 C356.134017,860.56 352.704017,861.65 349.744017,863.67 C347.504017,864.09 345.274017,864.5 343.044017,864.87 C341.284017,865.8 339.534017,866.73 337.824017,867.71 C334.954017,868.16 332.094017,868.59 329.224017,868.96 C323.234017,872.35 316.204017,871.92 309.824017,873.63 C306.994017,874.26 304.124017,874.64 301.264017,874.99 C293.924017,876.57 286.004017,877.35 278.534017,876.05 C279.144017,866.6 278.764017,857.13 278.824017,847.67 L279.664017,847.91 C280.704017,846.83 281.774017,845.8 282.854017,844.77 C294.294017,844.97 305.704017,844.3 317.114017,843.89 L316.834017,842.73 C326.404017,842.89 335.604017,839.78 345.204017,839.83 L344.754017,838.78 C346.704017,838.73 348.654017,838.57 350.564017,838.1 C351.224017,838.05 352.524017,837.95 353.174017,837.9 L352.784017,836.73 C358.414017,837 363.914017,835.72 369.154017,833.77 L368.764017,832.75 C376.244017,833.85 381.984017,828.17 389.204017,827.87 L388.734017,826.64 C389.484017,826.65 390.994017,826.69 391.744017,826.71 C391.984017,826.26 392.464017,825.35 392.694017,824.9 C396.134017,824.73 399.294017,823.4 401.264017,820.49 C401.464017,820.5 401.854017,820.53 402.044017,820.54 C402.954017,820.58 404.764017,820.65 405.674017,820.69 C405.984017,820.17 406.624017,819.12 406.944017,818.6 Z">
                    </path>
                </g>
                <g id="rokect-bg-dark" transform="translate(69.244698, 155.410000)" fill="#F4E8E1">
                    <path
                        d="M436.524017,39.51 C443.114017,49.73 447.034017,61.46 453.864017,71.57 C495.224017,150.8 521.934017,238.04 528.144017,327.3 C527.744017,332.39 528.154017,337.45 529.854017,342.28 C530.234017,359.27 530.054017,376.31 529.904017,393.31 C526.674017,408.14 529.464017,423.44 526.784017,438.3 C525.984017,446.69 525.914017,455.13 526.064017,463.56 C525.754017,463.66 525.124017,463.88 524.804017,463.99 C523.044017,480.44 522.214017,497.01 518.964017,513.28 C517.834017,532.83 511.944017,551.72 510.034017,571.18 C507.894017,576.05 506.054017,581.38 506.174017,586.78 C506.264017,596.59 501.214017,605.55 500.574017,615.4 C500.184017,615.75 499.404017,616.45 499.014017,616.8 C498.484017,620.13 498.054017,623.49 498.024017,626.89 L496.994017,626.73 C496.874017,628.97 496.554017,631.22 495.894017,633.39 C493.684017,637.74 494.064017,642.97 491.764017,647.36 C490.254017,649.85 490.144017,652.81 489.914017,655.64 C488.974017,657.43 488.054017,659.22 487.104017,661.01 C486.774017,665.2 484.624017,669.08 484.894017,673.34 C487.574017,676.31 489.264017,679.98 491.544017,683.25 C492.264017,683.85 492.994017,684.47 493.744017,685.09 C494.594017,687.33 496.114017,689.2 497.794017,690.91 C498.204017,693.46 499.474017,695.73 501.734017,697.11 C502.584017,699.3 504.074017,701.12 505.764017,702.75 C506.434017,705.23 507.444017,707.68 509.704017,709.14 C512.204017,713.12 514.904017,716.98 517.614017,720.85 C517.724017,721.02 517.954017,721.37 518.064017,721.54 C521.104017,729.73 520.674017,738.79 519.004017,747.27 C518.734017,775.62 518.874017,803.98 518.834017,832.34 C518.854017,835.87 518.454017,839.4 517.704017,842.86 C515.734017,841.13 514.234017,838.97 513.304017,836.54 C509.814017,827.86 504.544017,820 501.584017,811.11 C498.494017,807.81 498.554017,802.86 495.174017,799.79 C487.614017,781.06 477.434017,763.41 468.944017,745.06 C467.614017,740.14 465.174017,735.62 461.354017,732.2 C458.944017,734.02 458.234017,736.9 457.744017,739.74 C453.884017,744.12 453.124017,750.24 449.934017,755.09 C447.774017,760.97 443.104017,765.63 441.764017,771.79 C411.764017,784.38 379.654017,790.58 347.554017,794.94 C340.654017,796.83 333.384017,795.16 326.444017,796.9 C317.114017,799.25 307.214017,797.44 297.914017,799.56 C297.744017,799.44 297.394017,799.21 297.214017,799.1 C292.114017,800.7 286.644017,799.51 281.404017,799.85 C280.324017,798.99 279.254017,798.15 278.194017,797.32 C278.104017,789.23 278.264017,781.14 277.874017,773.07 C275.464017,767.53 277.254017,761.05 275.074017,755.52 C274.894017,751.02 274.544017,746.54 274.174017,742.07 C274.714017,741.67 275.794017,740.87 276.334017,740.47 C277.424017,750.37 281.704017,759.8 280.864017,769.97 C281.764017,769.91 282.674017,769.88 283.594017,769.86 C284.414017,768.29 284.754017,766.27 286.334017,765.28 C293.664017,760.69 300.994017,756.04 307.694017,750.57 C313.174017,747.83 316.054017,741.86 321.704017,739.38 C322.074017,738.51 322.454017,737.66 322.864017,736.83 C331.274017,733.43 334.204017,724.12 340.864017,718.7 C356.434017,698.88 372.674017,679.32 385.594017,657.51 C399.884017,637.49 410.914017,615.18 421.844017,593.04 C434.854017,567.12 443.864017,539.36 453.844017,512.32 C453.984017,504.52 458.144017,497.65 459.234017,490 C462.444017,483.82 461.594017,476.63 464.544017,470.39 C467.054017,464.97 465.284017,458.65 468.164017,453.32 C471.784017,446.41 468.444017,438.22 472.164017,431.32 C476.044017,424.04 472.284017,415.49 475.314017,408.04 C476.414017,405.25 475.814017,402.19 476.174017,399.29 C480.094017,389.49 476.944017,378.57 478.514017,368.37 C481.424017,361.38 479.514017,353.63 479.994017,346.3 C479.534017,342.41 482.464017,339.18 482.084017,335.31 C481.794017,321.64 482.354017,307.94 481.834017,294.3 C478.214017,285.39 481.034017,275.58 479.824017,266.3 C476.094017,255.71 479.574017,244.07 477.514017,233.21 C474.984017,229.08 476.984017,224.06 475.034017,219.79 C472.864017,213.82 475.224017,207.26 473.514017,201.22 C471.094017,196.19 472.834017,190.36 470.294017,185.32 C471.274017,175.3 465.344017,166.29 466.074017,156.32 C465.674017,152.53 463.964017,149.01 463.434017,145.23 C460.954017,139.81 463.284017,133.57 460.504017,128.24 C457.654017,122.58 458.674017,115.97 455.824017,110.33 C453.704017,105.86 454.604017,100.68 452.544017,96.22 C449.004017,89.46 451.414017,81.35 446.664017,75.07 C446.694017,62.35 436.844017,51.9 436.524017,39.51 Z">
                    </path>
                    <path
                        d="M34.1340166,636.14 C34.6840166,635.74 35.7840166,634.94 36.3340166,634.54 C35.7840166,641.77 41.8840166,647.08 41.1140166,654.38 C43.7540166,658.88 42.6940166,664.12 42.8340166,669.1 C44.1540166,670.44 45.4640166,671.81 46.7640166,673.21 C45.6940166,679.82 51.6440166,684.47 51.3140166,691.01 C53.3140166,695.11 55.9440166,699.18 54.7940166,704.01 C55.2340166,703.41 55.6840166,702.82 56.1540166,702.25 C57.7640166,705.45 59.1040166,708.84 59.0140166,712.51 C59.3240166,712.61 59.9540166,712.82 60.2740166,712.92 C61.9840166,716.8 64.4240166,720.42 65.1040166,724.69 C63.1340166,723.75 61.1240166,722.93 59.0340166,722.32 C58.9640166,723.07 58.8240166,724.58 58.7540166,725.34 C58.3740166,725.75 57.6140166,726.59 57.2340166,727.01 C49.4940166,746.91 38.3740166,765.61 29.8540166,785.15 C22.3640166,802.43 11.9440166,818.56 5.83401662,836.34 C5.12401662,836.55 3.70401662,836.96 2.99401662,837.16 C1.72401662,830.94 2.15401662,824.59 2.10401662,818.3 C2.07401662,793.29 2.21401662,768.27 1.94401662,743.27 C0.354016624,737.05 0.834016624,730.62 0.794016624,724.27 C1.51401662,718.96 6.32401662,715.17 6.86401662,709.78 C6.90401662,709.61 6.97401662,709.26 7.01401662,709.08 C7.82401662,708.48 8.62401662,707.88 9.40401662,707.26 C12.4840166,703.52 13.4940166,698.13 17.7840166,695.48 C18.8240166,693.27 19.9540166,691.12 21.1840166,689.02 C22.5440166,687.04 24.0540166,685.16 25.7340166,683.44 C26.5940166,681.14 28.1840166,679.29 30.0140166,677.71 C30.0640166,677.08 30.1540166,675.8 30.2040166,675.17 C31.3940166,674.08 32.5840166,672.98 33.7540166,671.88 C35.0640166,667.9 38.7240166,665.34 39.9440166,661.26 C39.9140166,660.59 39.9040166,659.95 39.9140166,659.33 C38.0240166,656.16 38.5540166,652.23 38.0140166,648.72 C37.5540166,648.38 36.6340166,647.72 36.1740166,647.39 C36.1540166,646.71 36.1040166,645.35 36.0740166,644.68 L34.9140166,644.85 C34.6940166,641.94 34.2840166,639.05 34.1340166,636.14 Z">
                    </path>
                </g>
                <!-- 这里是火箭前景 -->
                <path fill="${rocketColor}"
                    d="M334.348715,0.06 C335.298715,0.03 336.268715,0.01 337.248715,-1.42108547e-14 C337.628715,0.95 338.018715,1.9 338.428715,2.86 C353.978715,12.63 366.498715,26.25 380.578715,37.89 C413.128715,68.67 441.908715,103.13 468.558715,139 C476.638715,152.19 481.328708,168.54 476.168715,183.69 C475.068715,189.81 470.358715,194.47 469.418715,200.6 C469.318715,200.74 469.118715,201.02 469.018715,201.16 C460.708715,212.61 449.418715,222.4 436.688715,228.41 C432.318715,232.45 426.128715,235.11 420.298715,236.32 C419.968715,236.77 419.308715,237.67 418.978715,238.11 C418.438715,238.15 417.348715,238.23 416.808715,238.27 C415.238715,240.24 412.698715,240.08 410.448715,240.32 C406.388715,243.43 401.228715,244.34 396.218715,244.23 C395.888715,244.68 395.208715,245.6 394.878715,246.05 C393.498715,246.11 392.148715,246.18 390.808715,246.28 C387.208715,248.63 382.648715,247.87 378.588715,248.32 C375.848715,250.72 372.118715,250.08 368.778715,250.28 C366.318715,252.39 362.658715,251.01 359.708715,251.37 C345.708715,251.32 331.698715,251.6 317.688715,251.32 C299.148715,248.73 280.418715,246.33 262.748715,239.81 C257.338715,238.64 252.608715,234.83 246.878715,235.45 C246.678715,235.34 246.268715,235.13 246.068715,235.02 C242.298715,232.78 237.868715,231.58 234.698715,228.43 C233.228715,228.07 231.828708,227.59 230.608715,226.72 C216.708715,217.82 204.048715,206.69 196.148715,191.99 C195.718715,190.11 195.368715,188.21 195.098715,186.32 C194.638715,185.99 193.718715,185.33 193.258715,185 C193.268715,184.3 193.308715,182.92 193.328708,182.22 L192.178715,182.25 C191.148715,176.2 191.338715,170.06 191.348715,163.95 C194.428715,162.44 193.218715,158.27 194.618715,155.61 C198.108715,141.55 208.448715,131.01 216.708715,119.62 C250.848715,76.61 288.498715,35.39 333.098715,2.89 C333.498715,1.94 333.918715,1 334.348715,0.06 Z M358.738715,392.19 C362.155752,392.247037 365.398029,393.175185 368.631444,394.16308 L370.017134,394.587756 C372.558345,395.364362 375.108715,396.106296 377.748715,396.42 C386.068715,397.87 393.368715,403.31 401.658715,404.18 C402.328715,404.16 403.678715,404.12 404.358715,404.1 L403.988715,405.23 C405.008715,405.51 406.038715,405.81 407.068715,406.14 C408.898715,408.41 412.898715,408.06 414.258715,411.28 C414.938715,411.3 416.288715,411.33 416.958715,411.34 C417.228715,411.8 417.768715,412.7 418.038715,413.16 C419.108715,413.52 420.198715,413.9 421.298715,414.28 C422.228715,415.23 423.188715,416.17 424.168715,417.12 C425.118715,417.48 426.068715,417.86 427.038715,418.26 C428.738715,419.94 430.648715,421.4 432.308715,423.15 C433.228715,423.49 434.158715,423.83 435.098715,424.19 C435.278715,425.35 435.948715,426.09 437.098715,426.4 C443.328715,432.06 449.168715,438.13 455.018715,444.18 C455.398715,445.33 456.148715,446.04 457.248715,446.32 C457.588715,447.25 457.908715,448.19 458.228715,449.15 C462.348715,451.85 463.428715,457 467.158715,460.04 C467.518715,461.15 467.888715,462.27 468.278715,463.41 C470.648715,465.01 471.978715,467.47 472.258715,470.31 L473.138715,470.05 C473.478715,471.09 473.848715,472.13 474.258715,473.18 C475.568715,474.6 476.088715,476.52 477.008715,478.21 C477.458715,479.2 477.918715,480.2 478.388715,481.21 C478.998715,482.27 479.518715,483.37 480.038715,484.52 C479.708715,487.03 481.808715,488.7 482.258715,491.05 C484.848715,492.38 482.538715,497.26 485.288715,498.36 C485.478715,499.93 485.928715,501.47 486.148715,503.06 C488.848715,506.73 487.438715,513.21 489.968715,517.67 C493.238715,534.31 492.108715,551.78 491.298715,568.73 C491.358715,571.2 489.878715,573.31 489.398715,575.68 C489.348715,576.78 489.328715,577.9 489.328715,579.03 C486.788715,581.08 488.288715,585.88 487.128715,588.96 C485.338715,591.91 483.928715,595.14 483.568715,598.61 C483.608715,601.03 481.798715,602.77 481.098715,604.96 C480.338715,605.66 479.898715,606.55 479.768715,607.63 C479.548715,608.83 479.338715,610.04 479.158715,611.26 C478.178715,612.23 477.208715,613.21 476.238715,614.2 C475.978715,615.65 476.438715,618.42 474.198715,618.34 C473.978715,621.21 471.258715,623.14 471.138715,626.16 L470.248715,625.99 C470.298715,627.47 469.608715,628.25 468.178715,628.33 L468.179608,628.494226 L468.179608,628.494226 L468.179415,628.8287 C468.168615,630.3479 467.987715,632.021 466.178715,632.39 C466.388715,633.9 465.718715,634.5 464.178715,634.18 C464.148715,635.8 464.288715,637.85 462.338715,638.39 C462.138715,639.59 461.418715,640.23 460.188715,640.29 C460.058715,640.86 459.798715,642.01 459.658715,642.58 C457.928715,644.49 456.108715,646.32 454.388715,648.24 C453.978715,649.34 453.248715,650.02 452.198715,650.28 C451.568715,652.11 450.098715,653.99 448.048715,654.26 C448.098715,654.76 448.198715,655.77 448.258715,656.28 C447.698715,656.21 446.578715,656.09 446.028715,656.03 C446.054965,656.24 446.091059,656.530156 446.129613,656.840879 L446.207817,657.47209 C446.246371,657.78375 446.282465,658.07625 446.308715,658.29 C445.738715,658.22 444.608715,658.09 444.038715,658.02 C444.098715,658.58 444.218715,659.68 444.278715,660.23 C444.091215,660.215 443.83059,660.192969 443.551156,660.168652 L442.983305,660.118379 C442.702934,660.093125 442.439965,660.06875 442.248715,660.05 C442.468715,661.67 441.798715,662.37 440.248715,662.14 C438.928715,665 435.238715,666.53 433.108715,669.04 C432.468715,669.72 431.858715,670.43 431.288715,671.17 C430.218715,671.51 429.158715,671.88 428.118715,672.27 C422.998715,677.06 416.638715,680.2 410.888715,684.18 C410.248715,684.15 408.978715,684.08 408.338715,684.04 C408.228715,685.21 407.578715,686.03 406.408715,686.5 C404.688715,687.8 402.558715,688.06 400.488715,688.25 C398.418715,691.62 394.248715,691.28 391.328715,693.11 C389.738715,693.86 388.018715,694.17 386.288715,694.15 C386.188715,695.52 385.208715,695.91 383.338715,695.34 C378.108715,694.94 373.428715,697.69 368.408715,698.62 C351.878715,700.89 335.088715,702.99 318.378715,700.86 C313.231442,699.625 307.927537,699.46405 302.653806,699.385145 L300.989638,699.361798 C300.712517,699.357975 300.435533,699.354091 300.158715,699.35 C298.418715,699.33 296.698715,699.34 294.988715,699.35 L295.398715,698.16 C290.628715,697.37 285.808715,695.98 281.228715,694.38 C278.728715,693.3 276.428715,691.98 273.718715,691.51 C272.358715,691.71 271.468715,691.29 271.058715,690.26 C270.078715,689.87 269.098715,689.48 268.148715,689.09 C266.738715,687.86 264.848715,687.61 263.108715,687.2 L263.408715,686.27 C262.298715,685.94 261.218715,685.55 260.178715,685.11 C258.588715,683.99 256.708715,683.44 255.028715,682.52 C253.908715,682.04 253.258715,681.26 253.088715,680.17 C251.308715,680.31 249.668715,679.92 249.008715,678.1 C248.558715,678.11 247.648715,678.13 247.188715,678.14 C247.238715,677.65 247.338715,676.67 247.388715,676.18 C245.578715,676.27 243.878715,676.06 243.008715,674.3 C241.618715,674.29 241.008715,673.6 241.198715,672.21 C238.028715,671.58 234.588715,668.69 233.118715,666.04 C232.628715,666.09 231.628715,666.19 231.128715,666.24 C231.198715,665.74 231.338715,664.74 231.408715,664.24 C225.638715,662.57 222.198715,656.43 217.828715,652.47 C216.248715,651.41 215.118715,649.99 215.188715,648.02 C214.688715,648.09 213.688715,648.23 213.188715,648.3 C213.238715,647.8 213.338715,646.8 213.388715,646.3 C210.718715,644.89 207.958715,641.43 207.218715,638.33 C206.148715,638.295 205.661215,637.57 205.202465,636.78125 L205.006004,636.441137 C204.610144,635.760408 204.177286,635.098571 203.358715,634.85 C203.358715,634.2 203.348715,632.89 203.348715,632.23 C201.778715,632.43 201.058715,631.76 201.188715,630.22 C200.708715,629.92 199.768715,629.31 199.288715,629 C199.298715,628.34 199.328715,627 199.338715,626.34 C196.801745,624.743939 195.634638,622.10348 194.584703,619.434317 L194.312642,618.73803 C193.95124,617.81056 193.590836,616.890303 193.178715,616.02 L192.258715,616.3 L192.09209,615.594258 C191.730093,614.063378 191.336048,612.534 190.408715,611.26 C189.948715,610.23 189.498715,609.21 189.048715,608.2 C187.348715,606.21 187.918715,603.31 186.418715,601.26 C185.948715,600.23 185.498715,599.21 185.058715,598.2 C183.658715,596.95 184.168715,594.96 184.108715,593.34 C184.528715,585.87 179.758715,579.24 180.088715,571.74 C180.658715,559.01 175.868715,546.26 179.418715,533.68 C180.156897,529.581818 180.214748,525.410744 180.17725,521.24151 L180.157047,519.455026 C180.134417,517.669091 180.109624,515.885455 180.128715,514.11 C179.408715,511.811143 180.056127,509.885216 180.807295,507.984001 L181.185675,507.03384 C181.769515,505.554 182.288715,504.054 182.148715,502.37 C184.088715,501.87 183.178715,499.15 183.858715,497.72 C183.608715,496.2 184.138715,495.31 185.448715,495.05 C185.378715,494.38 185.258715,493.05 185.188715,492.38 C187.360715,492.11 187.642715,490.1408 187.754075,488.0492 L187.784083,487.419625 C187.837591,486.229448 187.891515,485.0506 188.258715,484.17 C189.228715,483.19 190.188715,482.22 191.168715,481.25 C191.538715,478.12 192.308715,474.98 195.178715,473.23 C195.508715,471.61 195.848715,470 196.208715,468.4 C197.218715,467.46 198.208715,466.47 199.198715,465.5 C199.528715,464.33 199.878715,463.16 200.238715,462.01 C201.218715,461.14 202.198715,460.26 203.188715,459.4 C203.538715,458.26 203.898715,457.14 204.268715,456.03 C205.488715,454.98 206.648715,453.86 207.648715,452.59 C207.798715,452.05 208.118715,450.97 208.268715,450.43 C209.018715,449.8 209.728715,449.14 210.408715,448.43 C211.798715,446.62 213.408715,444.95 215.008715,443.28 C215.318715,442.02 216.048715,441.31 217.198715,441.17 C217.208715,439.79 217.908715,439.12 219.308715,439.16 C219.588715,438.14 219.858715,437.13 220.138715,436.12 C221.188715,435.84 222.248715,435.57 223.318715,435.31 C223.578715,434.24 223.848715,433.18 224.128715,432.14 C225.128715,431.85 226.138715,431.58 227.158715,431.31 C227.168715,430.01 227.798715,429.26 229.058715,429.05 C231.428715,426.71 234.068715,424.65 236.388715,422.25 C237.278715,421.87 238.188715,421.5 239.108715,421.15 C243.478715,416.46 249.148715,413.65 254.368715,410.25 C255.358715,409.87 256.368715,409.51 257.388715,409.18 L257.198715,408.28 C260.008715,407.76 262.668715,406.56 264.428715,404.22 C266.458715,404.06 268.538715,403.66 270.188715,402.37 C271.118715,401.94 272.058715,401.51 272.998715,401.09 C273.658715,400.28 274.548715,399.87 275.668715,399.85 C277.248715,399.48 279.028715,399.43 280.378715,398.39 C280.908715,398.15 281.958715,397.68 282.488715,397.44 C285.158715,394.81 290.338715,396.93 292.378715,394.14 C293.528715,394.17 294.648715,393.99 295.728715,393.6 C296.788715,393.41 297.688715,392.93 298.438715,392.18 C300.318715,392.1 302.198715,392.09 304.098715,392.15 C322.308715,392.19 340.528715,391.91 358.738715,392.19 Z M399.798715,469.25 C378.078715,469.48 356.358715,469.26 334.638715,469.35 C331.018715,469.55 329.868715,473.6 328.288715,476.21 C327.838715,478.46 327.438715,480.73 327.138715,483.02 L326.959418,483.16166 L326.959418,483.16166 L326.522074,483.506387 C326.130277,483.814687 325.697465,484.15375 325.428715,484.36 C325.118715,487.34 323.228715,489.85 323.038715,492.89 C320.738715,495.83 319.838715,499.5 319.118715,503.09 C315.618715,507.62 315.908715,513.76 312.288715,518.25 C311.958715,520.47 311.558715,522.68 311.068715,524.89 C308.708715,527.79 307.858715,531.51 307.118715,535.1 C305.527336,537.135172 304.719666,539.507943 303.984963,541.912935 L303.648462,543.024107 C302.863305,545.616992 302.035956,548.192759 300.278715,550.37 C299.898715,552.6 299.518715,554.84 299.148715,557.08 C298.738715,557.46 297.898715,558.22 297.478715,558.6 C297.378715,559.16 297.168715,560.29 297.068715,560.86 C295.148715,563.2 294.498715,567.04 295.748715,569.68 C297.813715,570.401875 300.054809,570.335156 302.317077,570.225132 L303.287465,570.1775 C305.876215,570.055 308.463715,570.015 310.818715,571.17 C316.968715,571.8 323.308715,570.45 329.348715,572.22 C329.298715,573.24 329.268715,574.26 329.258715,575.3 C328.768715,575.6 327.788715,576.21 327.298715,576.51 C327.278715,578.08 327.268715,579.68 327.278715,581.27 C326.788715,581.58 325.828715,582.2 325.348715,582.51 C325.298715,583.13 325.188715,584.35 325.128715,584.96 C323.428715,586.59 323.128715,588.87 323.188715,591.12 C322.198715,592.8 321.248715,594.51 320.288715,596.22 C319.798715,598.47 319.378715,600.75 319.138715,603.06 C318.758715,603.45 318.008715,604.22 317.628715,604.6 C316.638715,607.39 315.528715,610.15 315.148715,613.12 C312.668715,615.88 311.828715,619.56 311.138715,623.1 C308.988715,626.09 307.708715,629.55 307.158715,633.18 C304.968715,635.99 303.838715,639.42 303.098715,642.87 C302.068715,643.97 301.048715,645.09 300.028715,646.21 C300.078715,647.7 300.148715,649.19 300.238715,650.71 C304.278715,649.27 306.968715,645.61 308.818715,641.92 C315.008715,635.34 320.058715,627.8 326.638715,621.56 C330.228715,614.78 337.058715,610.62 341.048715,604.15 C344.488715,599.25 349.938715,595.87 352.508715,590.41 C355.048715,587.02 358.778715,584.54 360.538715,580.59 C361.253298,579.775417 361.997396,578.977326 362.749848,578.182256 L364.108715,576.751481 C366.524271,574.203333 368.895382,571.603333 370.528715,568.51 C379.248715,559.14 385.938715,548.09 395.128715,539.13 C396.828715,537.64 396.428715,534.75 393.778715,535.21 C382.368715,535.64 370.798715,535.02 359.818715,533.6 C358.178715,532.37 360.018715,530.07 360.328715,528.54 C363.708715,525.79 366.718715,522.2 368.358715,518.13 C369.528715,516.99 370.728715,515.89 371.958715,514.8 C372.038715,514.25 372.208715,513.15 372.288715,512.61 C375.178715,510.64 376.978715,507.51 378.508715,504.46 C383.748715,498.16 388.248715,491.3 392.408715,484.32 C395.878715,480.67 398.148715,476.05 402.008715,472.73 C402.538715,471.08 402.128715,468.58 399.798715,469.25 Z M327.138715,853.17 C327.505692,853.192326 327.889413,853.194986 328.280967,853.191838 L328.674802,853.187266 C330.983555,853.155289 333.457785,853.082791 334.328715,855.72 C334.228715,856.14 334.038715,857 333.938715,857.42 L335.448715,857 C335.798715,859.07 336.088715,861.17 336.308715,863.29 C336.698715,863.58 337.478715,864.15 337.868715,864.44 C339.328715,869.27 340.408715,874.25 340.148715,879.34 L341.198715,879.08 C341.398715,882.53 342.188715,885.84 342.208715,889.34 L343.328715,889.09 C343.318715,891.87 343.318715,894.67 343.418715,897.48 C343.788715,901.95 344.138715,906.43 344.318715,910.93 C345.295956,913.408966 345.475421,916.078835 345.593076,918.769353 L345.64567,920.011978 C345.770653,922.911962 345.955267,925.805517 347.118715,928.48 C347.508715,936.55 347.348715,944.64 347.438715,952.73 C347.538715,954.25 347.678715,955.79 347.858715,957.34 C350.758715,957.38 353.658715,957.46 356.568715,957.53 C355.257904,959.469189 353.11163,959.678101 350.95351,959.757701 L350.435755,959.775142 C349.573857,959.802805 348.720607,959.83027 347.928715,959.96 C347.860652,967.694427 347.834703,975.428854 347.831917,983.160912 C347.837019,975.761947 347.863586,968.360974 347.928715,960.96 C348.720607,960.83027 349.573857,960.802805 350.435755,960.775142 L350.95351,960.757701 C353.11163,960.678101 355.257904,960.469189 356.568715,958.53 C361.418715,958.3 366.268715,958.33 371.118715,958.23 C371.234965,958.11 371.394809,957.943594 371.565024,957.765059 L371.909438,957.401973 C372.078715,957.2225 372.236215,957.05375 372.348715,956.93 C372.548715,957.29 372.928715,958.01 373.128715,958.37 C373.528715,957.94 373.948715,957.53 374.388715,957.14 C389.968715,957.85 405.388715,955.77 420.698715,953.17 C430.938715,953.6 440.578715,949.3 450.738715,948.83 C452.256362,948.474412 453.775333,948.122872 455.294885,947.772846 L458.334545,947.07406 L458.334545,947.07406 L461.374437,946.374805 C475.052495,943.220337 488.697539,939.914706 501.768715,934.61 C502.598239,934.189048 503.435427,934.431066 504.27079,934.738231 L504.656179,934.882449 C505.041368,935.026939 505.425858,935.165714 505.808715,935.24 C500.468715,943.14 496.098715,951.62 490.598715,959.41 C488.605382,963.636275 484.985074,966.287555 481.221771,968.801445 L480.351453,969.379789 C480.206202,969.475991 480.060909,969.572154 479.915657,969.668358 L479.045323,970.246747 C476.150384,972.180757 473.339695,974.197059 471.288715,976.95 C471.098715,976.94 470.708715,976.91 470.508715,976.9 C470.223672,976.922717 469.939594,976.950009 469.656434,976.981651 C467.689106,979.144767 464.918991,980.162719 461.938715,980.31 C461.708715,980.76 461.228715,981.67 460.988715,982.12 C460.238715,982.1 458.728715,982.06 457.978715,982.05 L458.448715,983.28 C451.228715,983.58 445.488715,989.26 438.008715,988.16 L438.398715,989.18 C433.158715,991.13 427.658715,992.41 422.028715,992.14 L422.418715,993.31 C421.768715,993.36 420.468715,993.46 419.808715,993.51 C417.898715,993.98 415.948715,994.14 413.998715,994.19 L414.448715,995.24 C404.848715,995.19 395.648715,998.3 386.078715,998.14 L386.358715,999.3 C374.948715,999.71 363.538715,1000.38 352.098715,1000.18 C351.018715,1001.21 349.948715,1002.24 348.908715,1003.32 L348.068715,1003.08 C348.008715,1012.54 348.388715,1022.01 347.778715,1031.46 L347.777,1031.469 L347.778715,1031.46 C355.248715,1032.76 363.168715,1031.98 370.508715,1030.4 C373.368715,1030.05 376.238715,1029.67 379.068715,1029.04 C385.448715,1027.33 392.478715,1027.76 398.468715,1024.37 C401.338715,1024 404.198715,1023.57 407.068715,1023.12 C408.778715,1022.14 410.528715,1021.21 412.288715,1020.28 C414.518715,1019.91 416.748715,1019.5 418.988715,1019.08 C421.948715,1017.06 425.378715,1015.97 428.648715,1014.59 C429.868715,1013.84 431.108715,1013.13 432.368715,1012.43 C434.518715,1011.85 436.708715,1011.25 438.618715,1010.04 C441.542388,1011.00571 443.688986,1009.84292 445.792029,1008.51463 L446.276907,1008.20606 L446.762243,1007.89698 C448.301976,1006.92306 449.878715,1006.02204 451.778715,1005.96 C430.938715,1028.23 413.748715,1053.92 399.428715,1080.72 C385.918715,1109.56 373.868715,1140.35 375.258715,1172.7 C375.538715,1190.37 375.128715,1208.05 375.438715,1225.72 C377.158715,1232.31 378.398715,1239 379.498715,1245.72 C382.878715,1260.05 388.498715,1273.65 394.198715,1287.23 C395.974271,1290.03889 397.660937,1292.91593 399.327522,1295.8103 L400.325613,1297.5486 C405.807915,1307.11622 411.221382,1316.762 419.038715,1324.66 C421.415736,1331.96894 426.897782,1337.80707 432.377186,1343.32128 L433.24188,1344.18942 C434.249607,1345.1995 435.251694,1346.20064 436.228715,1347.2 C440.188715,1351.24 446.018715,1355.47 445.208715,1361.86 C440.598715,1357.36 434.828715,1353.79 428.168715,1355.24 C427.888715,1356.11 427.628715,1357.02 427.388715,1357.95 C423.758715,1359.054 420.049515,1358.9448 416.338875,1358.7888 L415.102048,1358.73667 C413.040937,1358.65222 410.982048,1358.59333 408.938715,1358.76 C408.688715,1358.61 408.188715,1358.31 407.928715,1358.15 C407.902465,1358.3225 407.864965,1358.55969 407.824652,1358.81252 L407.742777,1359.32451 C407.702465,1359.57641 407.664965,1359.81125 407.638715,1359.98 C400.478715,1358.41 393.038715,1360.08 385.848715,1358.47 C385.118715,1358.78 384.408715,1359.12 383.708715,1359.48 C383.118715,1359 382.558715,1358.54 381.998715,1358.1 C381.888715,1358.66 381.648715,1359.77 381.528715,1360.33 C380.838715,1359.9 380.188715,1359.49 379.528715,1359.09 L379.178715,1360.11 C373.428715,1358.55 367.428715,1359.32 361.798715,1361.04 C361.688715,1360.51 361.468715,1359.44 361.358715,1358.9 C360.938715,1359.68 360.538715,1360.48 360.148715,1361.3 C359.598715,1361.44 358.518715,1361.71 357.968715,1361.84 C358.448715,1361.04 358.938715,1360.27 359.438715,1359.51 C358.218715,1360.06 357.028715,1360.64 355.838715,1361.23 C355.748715,1360.68 355.568715,1359.58 355.478715,1359.03 C354.498715,1360.55 353.358715,1361.98 351.718715,1362.83 C352.218715,1361.71 352.768715,1360.64 353.318715,1359.57 C352.838715,1359.73 351.858715,1360.03 351.368715,1360.18 C350.918715,1360.94 350.488715,1361.73 350.068715,1362.54 C349.758715,1361.27 349.468715,1360.04 349.188715,1358.82 C348.878715,1360.01 348.588715,1361.22 348.308715,1362.45 C347.538715,1362.18 346.778715,1361.93 346.038715,1361.71 C346.488715,1360.96 346.948715,1360.22 347.418715,1359.5 C346.228715,1360.05 345.048715,1360.63 343.878715,1361.22 C343.778715,1360.67 343.568715,1359.58 343.468715,1359.04 C342.508715,1360.56 341.398715,1362.02 339.708715,1362.79 C340.218715,1361.69 340.768715,1360.62 341.338715,1359.58 C340.838715,1359.73 339.838715,1360.03 339.338715,1360.18 C338.868715,1360.97 338.418715,1361.77 337.988715,1362.6 C337.748715,1361.29 337.518715,1360 337.298715,1358.73 C336.958715,1359.95 336.608715,1361.17 336.288715,1362.44 C335.528715,1362.18 334.788715,1361.94 334.048715,1361.72 C334.498715,1360.96 334.948715,1360.22 335.408715,1359.49 C334.218715,1360.04 333.058715,1360.63 331.888715,1361.22 C331.758715,1360.64 331.488715,1359.5 331.358715,1358.93 C330.818715,1359.88 330.278715,1360.85 329.768715,1361.86 C329.248715,1362.03 328.198715,1362.37 327.668715,1362.54 C328.228715,1361.53 328.798715,1360.55 329.388715,1359.58 C328.878715,1359.73 327.878715,1360.03 327.368715,1360.18 C326.918715,1360.94 326.478715,1361.73 326.048715,1362.54 C325.768715,1361.28 325.508715,1360.04 325.248715,1358.82 C324.908715,1360.01 324.578715,1361.2 324.268715,1362.45 C323.518715,1362.17 322.778715,1361.92 322.058715,1361.7 C322.498715,1360.95 322.938715,1360.21 323.398715,1359.5 C322.218715,1360.05 321.058715,1360.63 319.898715,1361.21 C319.758715,1360.64 319.488715,1359.5 319.348715,1358.93 C318.808715,1359.88 318.278715,1360.86 317.778715,1361.87 C317.579965,1361.93 317.306684,1362.01531 317.01477,1362.10748 L316.42266,1362.29549 C316.130746,1362.38859 315.857465,1362.47625 315.658715,1362.54 C316.218715,1361.53 316.798715,1360.55 317.388715,1359.59 C317.197465,1359.64625 316.934496,1359.72219 316.653598,1359.80252 L316.083832,1359.96451 C315.802934,1360.04391 315.539965,1360.1175 315.348715,1360.17 C314.908715,1360.94 314.478715,1361.74 314.058715,1362.56 C313.748715,1361.27 313.478715,1360.04 313.198715,1358.8 C312.888715,1360 312.598715,1361.21 312.318715,1362.44 C311.538715,1362.18 310.778715,1361.93 310.038715,1361.72 C310.488715,1360.96 310.948715,1360.21 311.428715,1359.49 C310.238715,1360.04 309.068715,1360.62 307.908715,1361.21 C307.658715,1360.42 307.418715,1359.66 307.208715,1358.92 C306.728715,1359.89 306.258715,1360.88 305.808715,1361.9 C305.278715,1362.05 304.198715,1362.36 303.658715,1362.52 C304.228715,1361.52 304.798715,1360.54 305.388715,1359.58 C304.878715,1359.73 303.858715,1360.02 303.348715,1360.17 C302.898715,1360.95 302.458715,1361.75 302.028715,1362.57 C301.758715,1361.29 301.508715,1360.02 301.268715,1358.78 C300.928715,1359.99 300.588715,1361.19 300.278715,1362.45 C299.518715,1362.18 298.778715,1361.93 298.048715,1361.71 C298.498715,1360.95 298.948715,1360.21 299.418715,1359.49 C298.228715,1360.04 297.068715,1360.62 295.898715,1361.22 C295.658715,1360.43 295.418715,1359.67 295.208715,1358.93 C294.728715,1359.9 294.258715,1360.88 293.798715,1361.88 C293.268715,1362.04 292.198715,1362.36 291.668715,1362.52 C292.228715,1361.52 292.798715,1360.54 293.378715,1359.58 C292.878715,1359.73 291.858715,1360.02 291.348715,1360.17 C290.898715,1360.95 290.458715,1361.76 290.028715,1362.58 C289.768715,1361.3 289.518715,1360.03 289.278715,1358.78 C288.938715,1359.99 288.588715,1361.19 288.278715,1362.45 C287.518715,1362.18 286.778715,1361.93 286.048715,1361.71 C286.498715,1360.95 286.948715,1360.21 287.418715,1359.49 C286.228715,1360.04 285.058715,1360.63 283.888715,1361.23 C283.758715,1360.65 283.478715,1359.5 283.348715,1358.93 C282.808715,1359.89 282.288715,1360.86 281.778715,1361.88 C281.248715,1362.04 280.188715,1362.37 279.658715,1362.53 C280.228715,1361.53 280.798715,1360.55 281.388715,1359.6 C281.197465,1359.6525 280.93309,1359.72469 280.650434,1359.80232 L280.076996,1359.96064 C279.79434,1360.03922 279.529965,1360.11375 279.338715,1360.17 C278.888715,1360.95 278.458715,1361.77 278.028715,1362.6 C277.855382,1361.74667 277.686493,1360.89778 277.522048,1360.05926 L277.278,1358.811 L277.018246,1359.705 C276.759965,1360.60312 276.508715,1361.5125 276.268715,1362.45 C275.518715,1362.18 274.778715,1361.93 274.048715,1361.7 C274.488715,1360.95 274.948715,1360.21 275.408715,1359.5 C274.228715,1360.05 273.068715,1360.63 271.918715,1361.21 C271.668715,1360.41 271.428715,1359.64 271.208715,1358.89 C270.728715,1359.87 270.258715,1360.86 269.798715,1361.88 C269.258715,1362.04 268.198715,1362.37 267.668715,1362.53 C268.228715,1361.53 268.798715,1360.55 269.378715,1359.59 C269.187465,1359.64625 268.925902,1359.72219 268.646762,1359.80252 L268.080668,1359.96451 C267.801527,1360.04391 267.539965,1360.1175 267.348715,1360.17 C266.898715,1360.95 266.468715,1361.74 266.058715,1362.57 C265.748715,1361.28 265.468715,1360.05 265.188715,1358.82 C264.878715,1360.01 264.588715,1361.22 264.308715,1362.45 C263.548715,1362.18 262.798715,1361.93 262.058715,1361.71 C262.498715,1360.95 262.948715,1360.22 263.398715,1359.5 C262.208715,1360.05 261.028715,1360.64 259.858715,1361.23 C259.758715,1360.68 259.568715,1359.58 259.468715,1359.03 C258.508715,1360.55 257.378715,1361.99 255.718715,1362.81 C256.228715,1361.7 256.768715,1360.63 257.328715,1359.57 C256.838715,1359.72 255.848715,1360.03 255.348715,1360.18 C254.888715,1360.96 254.438715,1361.76 254.008715,1362.59 C253.748715,1361.3 253.508715,1360.03 253.268715,1358.79 C252.928715,1359.99 252.598715,1361.19 252.278715,1362.44 C251.528715,1362.18 250.778715,1361.94 250.048715,1361.73 C250.488715,1360.96 250.948715,1360.22 251.418715,1359.49 C250.218715,1360.05 249.048715,1360.63 247.878715,1361.23 C247.738715,1360.65 247.478715,1359.5 247.348715,1358.92 C246.808715,1359.88 246.288715,1360.86 245.778715,1361.88 C245.248715,1362.04 244.188715,1362.36 243.658715,1362.52 C244.218715,1361.52 244.798715,1360.54 245.388715,1359.58 C244.888715,1359.73 243.888715,1360.03 243.388715,1360.18 C242.868715,1360.99 242.348715,1361.81 241.848715,1362.66 C241.948715,1360.84 242.068715,1359.05 242.188715,1357.26 C237.548715,1357.18 232.908715,1357.17 228.268715,1357.26 C228.348715,1359.08 228.408715,1360.89 228.488715,1362.74 C227.318715,1359.98 223.698715,1356.35 226.718715,1353.71 C235.288715,1345.88 240.628715,1335.18 244.708715,1324.47 C250.499934,1316.13829 254.336984,1306.80851 258.057663,1297.433 L258.853841,1295.42361 C260.312689,1291.73972 261.773837,1288.05927 263.348715,1284.44 L263.841852,1283.09014 L264.829046,1280.39078 C269.76293,1266.89364 274.61417,1253.37545 277.068715,1239.13 C279.528715,1233.55 280.748715,1227.55 280.138715,1221.45 C280.558715,1221.37 281.388715,1221.21 281.808715,1221.13 C281.978715,1219.07 282.028715,1216.99 282.608715,1215.02 C285.948715,1207.26 282.228715,1198.42 285.938715,1190.73 C285.888715,1178.4 287.608715,1165.67 284.168715,1153.72 C284.911215,1147.20318 283.37559,1141.00267 281.830894,1134.78803 L281.488401,1133.40663 C280.636406,1129.95189 279.833488,1126.48523 279.468715,1122.95 C271.748715,1097.74 262.118715,1072.92 247.618715,1050.88 C239.478715,1034.31 226.578715,1020.8 215.708715,1006.08 C216.388715,1006.09 217.758715,1006.12 218.438715,1006.13 C231.349901,1015.37678 246.419031,1020.43533 261.489706,1025.11133 L263.455278,1025.71938 C267.058192,1026.83132 270.655834,1027.93085 274.218715,1029.07 C278.252758,1029.45936 282.247076,1030.22763 286.236779,1031.04257 L289.428222,1031.69819 L290.918012,1032.00032 C297.872026,1033.39522 304.853708,1034.5374 312.048715,1033.67 L312.049,1033.683 L312.048715,1033.67 C314.808715,1027.37 312.718715,1020.34 313.328715,1013.71 C313.241738,1012.91953 313.282371,1012.06297 313.337949,1011.19222 L313.369069,1010.71616 C313.525308,1008.33196 313.640343,1005.91233 311.428715,1004.51 C311.378715,1003.72 311.338715,1002.95 311.308715,1002.2 C310.548715,1001.5 309.818715,1000.81 309.088715,1000.14 C299.698715,1000.43 290.348715,999.42 280.978715,999.33 L281.458715,998.15 C280.878715,998.14 279.708715,998.11 279.128715,998.1 C280.298715,993.33 285.858715,995.98 288.998715,996.94 C296.488715,998.26 304.218715,997.56 311.798715,997.53 L311.754,995.529 L310.850462,995.537045 C303.574965,995.614826 296.176632,996.205 288.998715,994.94 C285.858715,993.98 280.298715,991.33 279.128715,996.1 C270.728715,995.18 262.458715,993.14 253.938715,993.29 L254.428715,992.02 C253.018715,992.08 251.618715,992.15 250.228715,992.24 L250.138715,991.18 C248.738715,991.24 247.368715,991.33 245.998715,991.43 L246.388715,990.16 C244.478715,990.09 242.568715,989.99 240.678715,989.87 C238.768715,989.49 236.838715,989.32 234.908715,989.23 L235.548715,988.24 C234.218715,988.02 232.908715,987.83 231.618715,987.64 C230.188715,987.77 229.298715,987.25 228.968715,986.07 C227.948715,986.06 226.948715,986.07 225.958715,986.1 C221.748715,981.4 214.088715,982.05 208.858715,978.58 C198.528715,975.57 189.998715,968.9 181.308715,962.87 C181.298715,962.22 181.288715,960.91 181.288715,960.26 C179.608715,959.89 177.948715,959.53 176.288715,959.18 C171.968715,949.74 166.078715,941.17 161.598715,931.81 C168.234271,933.134444 174.719703,935.021852 181.196356,936.930549 L184.434605,937.884163 C191.452062,939.943306 198.486863,941.921481 205.718715,943.13 C215.818715,946.34 226.528715,946.41 236.688715,949.43 C238.497946,949.634615 240.315461,949.812249 242.136453,949.982126 L243.958426,950.150129 C244.262222,950.177937 244.56607,950.205706 244.869948,950.233528 L246.693397,950.401786 C255.202831,951.196529 263.700766,952.171282 271.698715,955.28 C279.837845,953.362609 288.057789,954.005709 296.286424,954.71002 L298.755203,954.92065 C302.321385,955.220326 305.887845,955.484565 309.448715,955.51 C309.745211,956.047049 310.080044,956.582534 310.403755,957.127177 C311.096731,956.795732 311.742078,956.368925 312.37934,955.927969 L312.991886,955.501545 C313.093993,955.430625 313.196215,955.36 313.298715,955.29 C313.758715,948.76 313.838715,942.21 314.358715,935.69 C314.436715,934.8138 314.664787,933.863916 314.897753,932.895537 L315.005095,932.44748 C315.627115,929.8285 316.122715,927.137 313.658715,925.45 C313.568715,925.06 313.378715,924.28 313.288715,923.9 C314.325515,921.4376 314.252939,918.788576 314.157139,916.158214 L314.125835,915.2824 C314.101515,914.5536 314.084715,913.828 314.098715,913.11 L315.318715,913.32 C315.238715,909.42 315.348715,905.52 315.428715,901.64 L316.038715,900.86 C315.508715,895.99 316.928715,891.36 317.558715,886.61 C317.838715,885.19 318.108715,883.79 318.428715,882.41 C320.088715,876.93 319.278715,870.82 322.188715,865.63 C322.088715,865.24 321.898715,864.46 321.798715,864.07 L323.208715,864.29 C323.338715,862.72 323.448715,861.15 323.608715,859.61 C323.843715,859.1625 324.059965,858.6825 324.286996,858.205312 L324.484924,857.797807 C325.124417,856.51477 325.905501,855.326786 327.418715,854.94 C327.348715,854.5 327.208715,853.61 327.138715,853.17 Z M311.809711,962.537783 L311.838715,961.7 C311.621486,967.264034 311.545627,972.830505 311.555784,978.39821 C311.565821,973.497487 311.647497,968.597799 311.838715,963.7 C311.875847,963.299991 311.862557,962.913371 311.809711,962.537783 Z M87.848715,735.4 C88.508715,735.3 89.188715,735.21 89.868715,735.14 C89.828715,736.53 90.288715,737.68 91.258715,738.59 C91.5461224,740.465556 91.7229125,742.349012 91.8887124,744.229705 L92.0125584,745.63954 C92.3664379,749.63166 92.7831594,753.599259 94.218715,757.44 L95.158715,757.08 C95.398715,758.25 95.668715,759.43 95.958715,760.62 C95.758715,765.31 96.298715,769.98 98.378715,774.26 L99.258715,774.03 C99.728715,777.58 100.098715,781.15 100.258715,784.75 C101.538715,786.01 102.128715,787.66 102.338715,789.44 L103.358715,788.99 C103.368715,789.63 103.368715,790.91 103.378715,791.55 C103.528715,794.46 103.938715,797.35 104.158715,800.26 L105.318715,800.09 C105.348715,800.76 105.398715,802.12 105.418715,802.8 C105.591215,802.92375 105.828402,803.093906 106.081762,803.276191 L106.595668,803.646777 C106.849027,803.83 107.086215,804.0025 107.258715,804.13 C107.798715,807.64 107.268715,811.57 109.158715,814.74 C109.148715,815.36 109.158715,816 109.188715,816.67 C107.968715,820.75 104.308715,823.31 102.998715,827.29 C101.828715,828.39 100.638715,829.49 99.448715,830.58 C99.398715,831.21 99.308715,832.49 99.258715,833.12 C97.428715,834.7 95.838715,836.55 94.978715,838.85 C93.298715,840.57 91.788715,842.45 90.428715,844.43 C89.198715,846.53 88.068715,848.68 87.028715,850.89 C84.428715,852.496061 83.03349,855.108549 81.652067,857.7502 L81.2368631,858.542593 C80.4720483,859.993333 79.6753817,861.423333 78.648715,862.67 C77.868715,863.29 77.068715,863.89 76.258715,864.49 C76.218715,864.67 76.148715,865.02 76.108715,865.19 C71.448715,868.13 69.078715,873.72 67.378715,878.7 C67.4120483,890.253333 67.5276039,901.806667 67.6550113,913.360741 L67.8090854,927.226033 C68.0100928,945.713689 68.1693817,964.204 67.998715,982.7 C69.0849219,986.175862 69.1853024,989.742616 69.2044348,993.326005 L69.2102973,994.862545 C69.2236496,998.192985 69.2783702,1001.52862 70.098715,1004.81 C56.808715,1028.25 46.388715,1053.73 33.518715,1077.59 C32.578715,1077.42 31.658715,1077.25 30.748715,1077.09 C30.4590062,1076.94015 29.8898593,1076.6406 29.5995893,1076.49045 L29.598715,1076.49 C28.508715,1075.94 27.428715,1075.42 26.358715,1074.94 C23.492628,1072.49826 20.1474484,1070.73887 16.774285,1069.06595 L15.508918,1068.44149 C14.4548208,1067.92255 13.4034976,1067.40478 12.368715,1066.87 C8.47871499,1063.92 4.30871499,1061.33 0.108714986,1058.88 C0.0587149864,986.72 -0.161285014,914.56 0.218714986,842.41 C6.10871499,835.67 9.63871499,827.11 15.898715,820.68 C15.988715,820.07 16.178715,818.86 16.268715,818.25 C17.488715,817.09 18.708715,815.93 19.938715,814.79 C20.038715,814.22 20.228715,813.07 20.328715,812.49 C22.238715,810.85 23.838715,808.88 24.528715,806.43 C39.898715,785.6 54.558715,764.04 68.498715,742.24 C69.608715,741.05 70.748715,739.89 71.908715,738.75 C72.018715,738.19 72.228715,737.05 72.338715,736.49 C74.238715,734.85 75.838715,732.88 76.528715,730.43 C79.818715,727.23 81.938715,723.14 84.708715,719.52 C85.468715,721.22 85.898715,723.4 88.018715,723.95 C88.0117919,724.829231 88.024573,725.709527 88.0424337,726.590396 L88.0805948,728.352754 C88.1289517,730.703195 88.1440996,733.055385 87.848715,735.4 L88.0753118,736.50611 L88.0753118,736.50611 L87.848715,735.4 L87.848715,735.4 Z M580.518715,734.88 C581.118715,735.25 582.318715,735.98 582.918715,736.35 C587.038715,743.54 592.448715,749.95 596.478715,757.16 C604.498715,767.15 610.688715,778.57 618.898715,788.43 C619.608715,790.8 621.138715,792.74 622.858715,794.48 C632.138715,809.07 642.308715,823.22 651.798715,837.73 C653.063001,840.172857 654.975246,842.125918 656.934138,844.03379 L658.11026,845.176647 C658.50096,845.558163 658.888715,845.941429 659.268715,846.33 C659.548715,850.78 659.678715,855.24 659.648715,859.71 C659.538715,928.14 659.778715,996.57 659.368715,1064.99 C655.768715,1066.62 652.138715,1068.31 649.098715,1070.89 C643.928715,1073.39 638.648715,1075.92 634.228715,1079.63 L634.227,1079.63 L633.949208,1079.90706 C631.781527,1081.99891 629.047882,1083.34417 626.038715,1083.67 C613.648715,1059.27 602.448715,1034.01 589.418715,1009.71 C590.17559,1006.0875 590.185981,1002.41332 590.163354,998.743567 L590.153715,997.17125 C590.133715,992.98 590.203715,988.805 591.428715,984.73 C591.078715,950.02 592.088715,915.32 592.018715,880.62 C590.418715,879.41 588.828715,878.2 587.308715,876.95 C587.198715,876.78 586.968715,876.43 586.858715,876.26 C584.148715,872.39 581.448715,868.53 578.948715,864.55 C576.688715,863.09 575.678715,860.64 575.008715,858.16 C573.318715,856.53 571.828715,854.71 570.978715,852.52 C568.718715,851.14 567.448715,848.87 567.038715,846.32 C565.358715,844.61 563.838715,842.74 562.988715,840.5 C562.238715,839.88 561.508715,839.26 560.788715,838.66 C558.508715,835.39 556.818715,831.72 554.138715,828.75 C553.868715,824.49 556.018715,820.61 556.348715,816.42 C557.298715,814.63 558.218715,812.84 559.158715,811.05 C559.388715,808.22 559.498715,805.26 561.008715,802.77 C563.308715,798.38 562.928715,793.15 565.138715,788.8 C565.798715,786.63 566.118715,784.38 566.238715,782.14 L567.268715,782.3 C567.298715,778.9 567.728715,775.54 568.258715,772.21 C568.648715,771.86 569.428715,771.16 569.818715,770.81 C570.458715,760.96 575.508715,752 575.418715,742.19 C576.048715,742.21 577.308715,742.25 577.938715,742.27 C578.048715,741.78 578.268715,740.82 578.368715,740.34 C579.048715,738.5 579.788715,736.68 580.518715,734.88 Z"
                    id="rokect-color"></path>
            </g>
        </g>
    </g>
</svg>`
}


================================================
FILE: index.ts
================================================
import {versionTipDialog} from './components/versionTipDialog'
import {
  createWorker,
  createWorkerFunc,
  cancelUpdateFunc,
  checkVersionTypeFunc,
} from './utils/index'

/**
 * Polling monitoring version update (No longer maintain)
 *
 * @param {string} localPackageVersion the current version of the page in the browser
 * @param {string} originVersionFileUrl remote server version file address
 * @param {number} [pollingTime = 5000] polling interval, in ms (Optional)
 * @param {function} onVersionUpdate callback when updating version, used when customizing UI (Optional)
 * @return {object}  { refreshPageVersion } new version number
 */

export const pollingCompareVersion = (
  localPackageVersion: string,
  originVersionFileUrl: string,
  pollingTime: number,
  onVersionUpdate?: (event: any) => void
) => {
  const worker = createWorker(createWorkerFunc)

  worker.postMessage({
    'version-key': localPackageVersion,
    'polling-time': pollingTime,
    'origin-version-file-url': originVersionFileUrl,
  })
  worker.onmessage = (event: any) => {
    // custom version tip UI
    if (typeof onVersionUpdate === 'function') {
      onVersionUpdate(event.data)
    } else {
      // default version tip ui
      versionTipDialog({newVersion: event.data.refreshPageVersion})
    }
  }
}

/**
 * Polling monitoring version update v2 (Recommended)
 *
 * @param {object} config Polling the configuration parameters of the monitoring version
 * @param {string} config.originVersionFileUrl remote server version file address (Required)
 * @param {string} config.localPackageVersion  the current version of the page in the browser
 * @param {number} [config.pollingTime = 5000] polling interval, in ms (Optional)
 * @param {function} config.onVersionUpdate callback when updating version, used when customizing UI (Optional)
 *
 * @param {object} options Customize version update popup copy and themes
 * @param {string} [options.title = 'Update'] popup title (Optional)
 * @param {string} [options.description = 'V xxx is available'] popup description (Optional)
 * @param {string} [options.buttonText = 'Refresh'] popup button text (Optional)
 * @param {string} [options.cancelButtonText] close popup butt
Download .txt
gitextract_zilyrdgy/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.en-US.md
├── CHANGELOG.zh-CN.md
├── LICENSE.md
├── README.md
├── README.zh-CN.md
├── babel.config.js
├── components/
│   ├── images.d.ts
│   ├── version-tip-dialog.css
│   ├── versionTipDialog.ts
│   └── versionTipTheme.ts
├── index.ts
├── jest.config.ts
├── package.json
├── scripts/
│   ├── createVersionFile.js
│   ├── sendMessageToLark.js
│   └── sendMessageToWeCom.js
├── tests/
│   ├── index.mock.ts
│   └── index.test.ts
├── tsconfig.json
└── utils/
    └── index.ts
Download .txt
SYMBOL INDEX (7 symbols across 2 files)

FILE: tests/index.mock.ts
  class Worker (line 23) | class Worker {
    method constructor (line 26) | constructor(url: string) {
    method postMessage (line 30) | postMessage(msg: string) {
    method terminate (line 33) | terminate() {
  class MyDate (line 106) | class MyDate {
    method toLocaleDateString (line 107) | toLocaleDateString() {

FILE: utils/index.ts
  function checkVersionTypeFunc (line 169) | function checkVersionTypeFunc(
Condensed preview — 25 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (254K chars).
[
  {
    "path": ".editorconfig",
    "chars": 293,
    "preview": "# https://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = space\ninsert"
  },
  {
    "path": ".gitattributes",
    "chars": 37,
    "preview": "*.js eol=lf\n*.json eol=lf\n*.ts eol=lf"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 649,
    "preview": "name: CI\non:\n  push:\n    branches: ['main']\n  pull_request:\n    branches: ['main']\n\n  # Allows you to run this workflow "
  },
  {
    "path": ".gitignore",
    "chars": 121,
    "preview": ".history\nnode_modules\ncoverage\ncomponents/*.js\ncomponents/version*.d.ts\nutils/*.js\nutils/*.d.ts\nindex.js\nindex.d.ts\n*.tg"
  },
  {
    "path": ".npmignore",
    "chars": 145,
    "preview": ".github\n.history\ntests\nassets/*.jpg\nassets/*.gif\n.editorconfig\n.gitattributes\n.gitignore\nCHANGELOG.zh-CN.md\ncoverage\ntsc"
  },
  {
    "path": "CHANGELOG.en-US.md",
    "chars": 6282,
    "preview": "#### Release cycle\n\n- Revision number: hotfix fixed\n- Minor Version Number: Releases a backward compatible version with "
  },
  {
    "path": "CHANGELOG.zh-CN.md",
    "chars": 3879,
    "preview": "#### 发布周期\n\n- 修订版本号:hotfix 修复\n- 次版本号:发布带有新特性的向下兼容的版本\n- 主版本号:含有破坏性更新和新特性,不在发布周期内\n\n---\n\n## 1.7.4\n\n`2024-10-15`\n\n[#52](https"
  },
  {
    "path": "LICENSE.md",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 25636,
    "preview": "# 🔔 version-rocket 🚀\n\nEnglish | [简体中文](./README.zh-CN.md)\n\n> A tool library for web application version detection and de"
  },
  {
    "path": "README.zh-CN.md",
    "chars": 18343,
    "preview": "# 🔔 version-rocket 🚀\n\n简体中文 | [English](./README.md)\n\n> 一个用于 web 应用版本检测和部署通知的工具库。\n\n[![](https://img.shields.io/npm/v/vers"
  },
  {
    "path": "babel.config.js",
    "chars": 144,
    "preview": "module.exports = {\n    presets: [\n        ['@babel/preset-env', { targets: { node: 'current' } }],\n        '@babel/prese"
  },
  {
    "path": "components/images.d.ts",
    "chars": 46,
    "preview": "declare module '*.png'\ndeclare module '*.svg'\n"
  },
  {
    "path": "components/version-tip-dialog.css",
    "chars": 2977,
    "preview": "  #version-rocket .version-area {\n    box-sizing: border-box;\n    position: fixed;\n    right: 20px;\n    bottom: 20px;\n  "
  },
  {
    "path": "components/versionTipDialog.ts",
    "chars": 3841,
    "preview": "import versionBg from './../assets/version-bg.png'\nimport './version-tip-dialog.css'\nimport {setVersionTipTheme} from '."
  },
  {
    "path": "components/versionTipTheme.ts",
    "chars": 122044,
    "preview": "export const setVersionTipTheme = (\n  primaryColor = '#FA8D88',\n  rocketColor = '#FE7D66'\n) => {\n  return `<?xml version"
  },
  {
    "path": "index.ts",
    "chars": 6153,
    "preview": "import {versionTipDialog} from './components/versionTipDialog'\nimport {\n  createWorker,\n  createWorkerFunc,\n  cancelUpda"
  },
  {
    "path": "jest.config.ts",
    "chars": 286,
    "preview": "import type {Config} from '@jest/types'\n\n// Sync object\nconst config: Config.InitialOptions = {\n  verbose: true,\n  testP"
  },
  {
    "path": "package.json",
    "chars": 1238,
    "preview": "{\n  \"name\": \"version-rocket\",\n  \"version\": \"1.7.4\",\n  \"description\": \"Tools to check version monitoring (updates) for we"
  },
  {
    "path": "scripts/createVersionFile.js",
    "chars": 1281,
    "preview": "#!/usr/bin/env node\n\n/**\n * Gets the version in package.json and writes it to the dist directory of the application\n * u"
  },
  {
    "path": "scripts/sendMessageToLark.js",
    "chars": 6523,
    "preview": "#!/usr/bin/env node\n\n/**\n * send messages to lark web hook\n */\nconst axios = require('axios');\nconst fs = require('fs');"
  },
  {
    "path": "scripts/sendMessageToWeCom.js",
    "chars": 2762,
    "preview": "#!/usr/bin/env node\n\n/**\n * send messages to WeCom\n */\nconst axios = require('axios');\nconst fs = require('fs');\nconst p"
  },
  {
    "path": "tests/index.mock.ts",
    "chars": 2581,
    "preview": "const _global: any =\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : typeof self !== 'undefined'\n    ? self\n "
  },
  {
    "path": "tests/index.test.ts",
    "chars": 5552,
    "preview": "/**\n * @jest-environment jsdom\n */\n\nimport {\n  createWorker,\n  createWorkerFunc,\n  cancelUpdateFunc,\n  checkVersionTypeF"
  },
  {
    "path": "tsconfig.json",
    "chars": 11137,
    "preview": "{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig to read more about this file */\n\n    /* Projects */\n    //"
  },
  {
    "path": "utils/index.ts",
    "chars": 5546,
    "preview": "// create package version worker\nexport const createWorker = (func: () => void, deps?: Array<() => void>) => {\n  const d"
  }
]

About this extraction

This page contains the full source code of the guMcrey/version-rocket GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 25 files (233.3 KB), approximately 92.2k tokens, and a symbol index with 7 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!