dolphinscheduler-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lidong...@apache.org
Subject [incubator-dolphinscheduler-website] 02/34: init
Date Thu, 07 Nov 2019 03:15:33 GMT
This is an automated email from the ASF dual-hosted git repository.

lidongdai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler-website.git

commit 1a968bab3ecec89a0114be8a75847faf8dd89f58
Author: xiaochun.liu <xiaochun.liu@funplus.cn>
AuthorDate: Tue Sep 24 06:51:38 2019 +0800

    init
---
 .babelrc                                           |    22 +
 .docsite                                           |     0
 .eslintrc                                          |    28 +
 .github/workflows/ci.yml                           |    17 +
 .github/workflows/website.yml                      |    19 +
 .nojekyll                                          |     0
 LICENSE                                            |   233 +
 README.md                                          |    74 +-
 blog/en-us/architecture-design.md                  |   316 +
 blog/zh-cn/architecture-design.md                  |   304 +
 docs/en-us/developer_guide/architecture-design.md  |   316 +
 docs/en-us/developer_guide/backend-development.md  |    48 +
 docs/en-us/developer_guide/frontend-development.md |   650 ++
 docs/en-us/development/contribute.md               |     1 +
 docs/en-us/development/developers.md               |     1 +
 docs/en-us/faq.md                                  |   283 +
 docs/en-us/release/1.0.1-release.md                |    16 +
 docs/en-us/release/1.0.2-release.md                |    49 +
 docs/en-us/release/1.0.3-release.md                |    30 +
 docs/en-us/release/1.0.4-release.md                |     2 +
 docs/en-us/release/1.0.5-release.md                |     2 +
 docs/en-us/release/1.1.0-release.md                |    55 +
 docs/en-us/release/upgrade.md                      |    39 +
 docs/en-us/user_doc/backend-deployment.md          |   207 +
 docs/en-us/user_doc/frontend-deployment.md         |   115 +
 docs/en-us/user_doc/quick-start.md                 |    53 +
 docs/en-us/user_doc/system-manual.md               |   699 ++
 docs/zh-cn/developer_guide/architecture-design.md  |   304 +
 docs/zh-cn/developer_guide/backend-development.md  |    48 +
 docs/zh-cn/developer_guide/frontend-development.md |   644 +
 docs/zh-cn/developer_guide/plugin-development.md   |    54 +
 docs/zh-cn/development/contribute.md               |     1 +
 docs/zh-cn/development/developers.md               |     1 +
 docs/zh-cn/faq.md                                  |   286 +
 docs/zh-cn/release/1.0.1-release.md                |    16 +
 docs/zh-cn/release/1.0.2-release.md                |    49 +
 docs/zh-cn/release/1.0.3-release.md                |    30 +
 docs/zh-cn/release/1.0.4-release.md                |    28 +
 docs/zh-cn/release/1.0.5-release.md                |    23 +
 docs/zh-cn/release/1.1.0-release.md                |    63 +
 docs/zh-cn/release/upgrade.md                      |    38 +
 docs/zh-cn/user_doc/backend-deployment.md          |   210 +
 docs/zh-cn/user_doc/frontend-deployment.md         |   101 +
 docs/zh-cn/user_doc/quick-start.md                 |    50 +
 docs/zh-cn/user_doc/system-manual.md               |   675 ++
 docsite.config.yml                                 |    35 +
 gulpfile.js                                        |    60 +
 img/alibaba.png                                    |   Bin 0 -> 221 bytes
 img/alibaba_hover.png                              |   Bin 0 -> 420 bytes
 img/apachecon-na-2018.png                          |   Bin 0 -> 243303 bytes
 img/architecture.jpg                               |   Bin 0 -> 124275 bytes
 img/architecture.png                               |   Bin 0 -> 14438 bytes
 img/brhtqqzh.jpeg                                  |   Bin 0 -> 673545 bytes
 img/documents.png                                  |   Bin 0 -> 255 bytes
 img/ds_gray.png                                    |   Bin 0 -> 2176 bytes
 img/dubbo.ico                                      |   Bin 0 -> 16958 bytes
 img/dubbo_colorful.png                             |   Bin 0 -> 17791 bytes
 img/dubbo_gray.png                                 |   Bin 0 -> 1309 bytes
 img/dubbo_white.png                                |   Bin 0 -> 6842 bytes
 img/feature_hogh.png                               |   Bin 0 -> 666 bytes
 img/feature_loadbalances.png                       |   Bin 0 -> 1055 bytes
 img/feature_maintenance.png                        |   Bin 0 -> 1105 bytes
 img/feature_runtime.png                            |   Bin 0 -> 1193 bytes
 img/feature_service.png                            |   Bin 0 -> 1125 bytes
 img/feature_transpart.png                          |   Bin 0 -> 1101 bytes
 img/hlogo_colorful.png                             |   Bin 0 -> 2176 bytes
 img/hlogo_white.png                                |   Bin 0 -> 2176 bytes
 img/issue.png                                      |   Bin 0 -> 456 bytes
 img/mailinglist.png                                |   Bin 0 -> 641 bytes
 img/mailinglist_hover.png                          |   Bin 0 -> 688 bytes
 img/pullrequest.png                                |   Bin 0 -> 326 bytes
 img/quick_start.png                                |   Bin 0 -> 28990 bytes
 img/review_img4.jpg                                |   Bin 0 -> 1792828 bytes
 img/review_img4.png                                |   Bin 0 -> 78543 bytes
 img/segmentfault.png                               |   Bin 0 -> 2088 bytes
 img/segmentfault_hover.png                         |   Bin 0 -> 2842 bytes
 img/so-icon-hover.png                              |   Bin 0 -> 720 bytes
 img/so-icon.png                                    |   Bin 0 -> 1460 bytes
 img/system/arrow_down.png                          |   Bin 0 -> 534 bytes
 img/system/arrow_right.png                         |   Bin 0 -> 588 bytes
 img/system/blog.png                                |   Bin 0 -> 4239 bytes
 img/system/community.png                           |   Bin 0 -> 5279 bytes
 img/system/docs.png                                |   Bin 0 -> 4654 bytes
 img/system/docs_hover.png                          |   Bin 0 -> 214 bytes
 img/system/docs_normal.png                         |   Bin 0 -> 218 bytes
 img/system/menu_gray.png                           |   Bin 0 -> 224 bytes
 img/system/menu_white.png                          |   Bin 0 -> 215 bytes
 img/system/next.png                                |   Bin 0 -> 2947 bytes
 img/system/prev.png                                |   Bin 0 -> 2943 bytes
 img/twitter.png                                    |   Bin 0 -> 991 bytes
 img/twitter_hover.png                              |   Bin 0 -> 913 bytes
 img/users_aisino.gif                               |   Bin 0 -> 8527 bytes
 img/users_aisino.png                               |   Bin 0 -> 2123 bytes
 img/users_alibaba.png                              |   Bin 0 -> 1710 bytes
 img/users_dida.png                                 |   Bin 0 -> 7931 bytes
 img/users_duodian.jpg                              |   Bin 0 -> 12906 bytes
 img/users_fenghuang.jpg                            |   Bin 0 -> 7246 bytes
 img/users_huanqiu.jpeg                             |   Bin 0 -> 11645 bytes
 img/users_huarunwanjia.png                         |   Bin 0 -> 17979 bytes
 img/users_jiliguala.png                            |   Bin 0 -> 5557 bytes
 img/users_meituan.png                              |   Bin 0 -> 2019 bytes
 img/users_pingan.jpg                               |   Bin 0 -> 34375 bytes
 img/users_shuidi.jpg                               |   Bin 0 -> 10727 bytes
 img/users_shulidata.jpg                            |   Bin 0 -> 9091 bytes
 img/users_tianchuang.png                           |   Bin 0 -> 1815 bytes
 img/users_xiaobangguihua.png                       |   Bin 0 -> 4172 bytes
 img/users_xueqiu.png                               |   Bin 0 -> 15325 bytes
 img/users_yiguan.svg                               |   416 +
 img/users_zhongshan.jpg                            |   Bin 0 -> 5393 bytes
 img/weibo.png                                      |   Bin 0 -> 2572 bytes
 img/weibo_hover.png                                |   Bin 0 -> 6433 bytes
 md_json/blog.json                                  |    16 +
 md_json/docs.json                                  |   181 +
 package-lock.json                                  | 11656 +++++++++++++++++++
 package.json                                       |    53 +
 redirect.ejs                                       |    18 +
 site_config/blog.js                                |   112 +
 site_config/community.jsx                          |   216 +
 site_config/development.js                         |    38 +
 site_config/docs.js                                |   180 +
 site_config/home.jsx                               |   154 +
 site_config/site.js                                |   185 +
 src/components/bar/index.jsx                       |    30 +
 src/components/bar/index.scss                      |    59 +
 src/components/button/index.jsx                    |    37 +
 src/components/button/index.scss                   |    20 +
 src/components/footer/index.jsx                    |    56 +
 src/components/footer/index.scss                   |   104 +
 src/components/header/index.jsx                    |   205 +
 src/components/header/index.scss                   |   248 +
 src/components/language/index.jsx                  |    37 +
 src/components/pageSlider/index.jsx                |   142 +
 src/components/pageSlider/index.scss               |    34 +
 src/components/sidemenu/index.jsx                  |    59 +
 src/components/sidemenu/index.scss                 |   121 +
 src/components/sidemenu/item.jsx                   |    93 +
 src/components/slider/index.jsx                    |   163 +
 src/components/slider/index.scss                   |    30 +
 src/markdown.scss                                  |  1555 +++
 src/pages/blog/blogItem.jsx                        |    57 +
 src/pages/blog/blogItem.scss                       |    57 +
 src/pages/blog/index.jsx                           |    58 +
 src/pages/blog/index.scss                          |    55 +
 src/pages/blogDetail/index.jsx                     |   109 +
 src/pages/blogDetail/index.scss                    |    11 +
 src/pages/community/contactItem.jsx                |    44 +
 src/pages/community/contributorItem.jsx            |    16 +
 src/pages/community/ecoItem.jsx                    |    30 +
 src/pages/community/eventCard.jsx                  |    25 +
 src/pages/community/index.jsx                      |    68 +
 src/pages/community/index.scss                     |   189 +
 src/pages/documentation/index.jsx                  |   122 +
 src/pages/documentation/index.scss                 |    36 +
 src/pages/home/featureItem.jsx                     |    17 +
 src/pages/home/index.jsx                           |   137 +
 src/pages/home/index.scss                          |   466 +
 src/reset.scss                                     |    12 +
 src/variables.scss                                 |    24 +
 template.ejs                                       |    23 +
 utils/index.js                                     |    36 +
 webpack.config.js                                  |    55 +
 161 files changed, 24159 insertions(+), 1 deletion(-)

diff --git a/.babelrc b/.babelrc
new file mode 100755
index 0000000..42d28fa
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,22 @@
+{
+  "plugins": [
+    "transform-decorators-legacy",
+    "transform-class-properties",
+    "transform-object-rest-spread",
+    "transform-object-assign",
+    [
+      "transform-runtime",
+      {
+        "helpers": false,
+        "polyfill": false,
+        "regenerator": true,
+        "moduleName": "babel-runtime"
+      }
+    ]
+  ],
+  "presets": [
+    "react",
+    "stage-0",
+    "es2015"
+  ]
+}
diff --git a/.docsite b/.docsite
new file mode 100755
index 0000000..e69de29
diff --git a/.eslintrc b/.eslintrc
new file mode 100755
index 0000000..0e70ce4
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,28 @@
+{
+  "extends": "eslint-config-ali/react",
+  "parser": "babel-eslint",
+  "env": {
+    "browser": true,
+    "node": true,
+    "mocha": true
+  },
+  "globals": {
+    "AK_GLOBAL": true,
+    "dd": {},
+    "_czc": {},
+    "dplus": {},
+    "salt": {},
+    "_": true,
+    "homePageData": {},
+    "Lang": {}
+  },
+  "rules": {
+    "max-len": 0,
+    "new-cap": [2, { "newIsCap": true, "properties": false }],
+    "react/jsx-indent": 0,
+    "react/jsx-indent-props": 0,
+    "indent": 0,
+    "radix": ["error", "as-needed"],
+    "linebreak-style": [0 ,"error", "windows"]
+  }
+}
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..33bcda7
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,17 @@
+name: CI
+
+on: [push]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+    
+    steps:
+    - uses: actions/checkout@v1
+    - name: Run a one-line script
+      run: echo Hello, world!
+    - name: Run a multi-line script
+      run: |
+        echo Add other actions to build,
+        echo test, and deploy your project.
diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml
new file mode 100644
index 0000000..d0843a9
--- /dev/null
+++ b/.github/workflows/website.yml
@@ -0,0 +1,19 @@
+name: Build and Deploy
+
+on: [push]
+
+jobs:
+  build-and-deploy:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Checkout
+      uses: actions/checkout@master
+
+    - name: Build and Deploy
+      uses: JamesIves/github-pages-deploy-action@master
+      env:
+        ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
+        BASE_BRANCH: master # The branch the action should deploy from.
+        BRANCH: gh-pages # The branch the action should deploy to.
+        FOLDER: dist # The folder the action should deploy.
+        BUILD_SCRIPT: mkdir dist && npm install && npm i docsite && node_modules/docsite/bin/docsite.js build && cp -r 404.html index.html en-us zh-cn build img dist/ # The build script the action should run prior to deploying.
diff --git a/.nojekyll b/.nojekyll
new file mode 100755
index 0000000..e69de29
diff --git a/LICENSE b/LICENSE
new file mode 100755
index 0000000..3d948bc
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,233 @@
+                                 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.
+
+=======================================================================
+Apache DolphinScheduler Subcomponents:
+
+The Apache DolphinScheduler project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+========================================================================
+BSD licenses
+========================================================================
+
+Copyright (c) 2018 Alibaba TXD
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 38bc317..b452bd2 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,73 @@
-# incubator-dolphinscheduler-website
+# DolphinScheduler Official Website
+
+This project keeps all sources used for building up DolphinScheduler official website which's served at https://dolphinscheduler.incubator.apache.org/.
+
+## Prerequisite
+
+DolphinScheduler website is powered by [docsite](https://github.com/txd-team/docsite).
+If your version of docsite is less than `1.3.3`,please upgrade to `1.3.3`.
+Please also make sure your node version is 8.x, versions higher than 8.x is not supported by docsite yet.
+
+## Build instruction 
+
+1. Run `npm install docsite -g` to install the dev tool.
+2. Run `npm i` in the root directory to install the dependencies.
+3. Run `docsite start` in the root directory to start a local server, you will see the website in 'http://127.0.0.1:8080'.
+4. Run `docsite build` to build source code.
+5. Verify your change locally: `python -m SimpleHTTPServer 8000`, when your python version is 3 use :`python3 -m http.server 8000` instead.
+
+If you have higher version of node installed, you may consider `nvm` to allow different versions of `node` coexisting on your machine.
+
+1. Follow the [instructions](http://nvm.sh) to install nvm
+2. Run `nvm install v8.16.0` to install node v8
+3. Run `nvm use v8.16.0` to switch the working environment to node v8
+4. Run `npm install docsite -g`
+
+Then you are all set to run and build the website. Follow the build instruction above for the details.
+
+
+## How to send a PR
+
+1. Do not use `git add .` to commit all the changes.
+2. Just push your changed files, such as:
+    * `*.md`
+	* blog.js or docs.js or site.js
+3. Send a PR to **master** branch.
+
+## SEO
+
+Make sure each .md starts with the following texts:
+
+```
+---
+title: title
+keywords: keywords1,keywords2,keywords3
+description: some description
+---
+```
+
+
+## Guide for adding new document
+
+### Add a new blog
+
+1. Add new .md file under blog/en-us or blog/zh-cn.
+2. Update site_config/blog.js, add a new entry to the blog in either en-us or zh-cn.
+3. Run docsite start locally to verify the blog can be displayed correctly.
+4. Send the pull request contains the .md and blog.js only.
+
+
+### Add a new article for development
+
+1. Add new .md file under docs/en-us/development or docs/zh-cn/development.
+2. Update site_config/development.js, add a new entry in either en-us or zh-cn.
+3. Run docsite start locally to verify the article can be displayed correctly.
+4. Send the pull request contains the *.md and development.js only.
+
+
+### Add a new article for docs
+
+1. Add new .md file under docs/en-us or docs/zh-cn.
+2. Update site_config/docs.js, add a new entry in either en-us or zh-cn.
+3. Run docsite start locally to verify the article can be displayed correctly.
+4. Send the pull request contains the *.md and development.js only.
diff --git a/blog/en-us/architecture-design.md b/blog/en-us/architecture-design.md
new file mode 100755
index 0000000..e1c8f01
--- /dev/null
+++ b/blog/en-us/architecture-design.md
@@ -0,0 +1,316 @@
+## Architecture Design
+Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.
+
+### 1.Noun Interpretation
+
+**DAG:** Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the following picture:
+
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag_examples_cn.jpg" alt="dag示例"  width="60%" />
+  <p align="center">
+        <em>dag example</em>
+  </p>
+</p>
+
+**Process definition**: Visualization **DAG** by dragging task nodes and establishing associations of task nodes 
+
+**Process instance**: A process instance is an instantiation of a process definition, which can be generated by manual startup or  scheduling. The process definition runs once, a new process instance is generated
+
+**Task instance**: A task instance is the instantiation of a specific task node when a process instance runs, which indicates the specific task execution status
+
+**Task type**: Currently supports SHELL, SQL, SUB_PROCESS (sub-process), PROCEDURE, MR, SPARK, PYTHON, DEPENDENT (dependency), and plans to support dynamic plug-in extension, note: the sub-**SUB_PROCESS** is also A separate process definition that can be launched separately
+
+**Schedule mode** :  The system supports timing schedule and manual schedule based on cron expressions. Command type support: start workflow, start execution from current node, resume fault-tolerant workflow, resume pause process, start execution from failed node, complement, timer, rerun, pause, stop, resume waiting thread. Where **recovers the fault-tolerant workflow** and **restores the waiting thread** The two command types are used by the scheduling internal control and cannot be ca [...]
+
+**Timed schedule**: The system uses **quartz** distributed scheduler and supports the generation of cron expression visualization
+
+**Dependency**: The system does not only support **DAG** Simple dependencies between predecessors and successor nodes, but also provides **task dependencies** nodes, support for custom task dependencies between processes**
+
+**Priority**: Supports the priority of process instances and task instances. If the process instance and task instance priority are not set, the default is first in, first out.
+
+**Mail Alert**: Support **SQL Task** Query Result Email Send, Process Instance Run Result Email Alert and Fault Tolerant Alert Notification
+
+**Failure policy**: For tasks running in parallel, if there are tasks that fail, two failure policy processing methods are provided. **Continue** means that the status of the task is run in parallel until the end of the process failure. **End** means that once a failed task is found, Kill also drops the running parallel task and the process ends.
+
+**Complement**: Complement historical data, support ** interval parallel and serial ** two complement methods
+
+
+
+### 2.System architecture
+
+#### 2.1 System Architecture Diagram
+<p align="center">
+  <img src="https://user-images.githubusercontent.com/48329107/62609545-8f973480-b934-11e9-9a58-d8133222f14d.png" alt="System Architecture Diagram"  />
+  <p align="center">
+        <em>System Architecture Diagram</em>
+  </p>
+</p>
+
+
+
+#### 2.2 Architectural description
+
+* **MasterServer** 
+
+    MasterServer adopts the distributed non-central design concept. MasterServer is mainly responsible for DAG task split, task submission monitoring, and monitoring the health status of other MasterServer and WorkerServer.
+    When the MasterServer service starts, it registers a temporary node with Zookeeper, and listens to the Zookeeper temporary node state change for fault tolerance processing.
+
+    
+
+    ##### The service mainly contains:
+
+    - **Distributed Quartz** distributed scheduling component, mainly responsible for the start and stop operation of the scheduled task. When the quartz picks up the task, the master internally has a thread pool to be responsible for the subsequent operations of the task.
+
+    - **MasterSchedulerThread** is a scan thread that periodically scans the **command** table in the database for different business operations based on different ** command types**
+
+    - **MasterExecThread** is mainly responsible for DAG task segmentation, task submission monitoring, logic processing of various command types
+
+    - **MasterTaskExecThread** is mainly responsible for task persistence
+
+      
+
+* **WorkerServer** 
+
+     - WorkerServer also adopts a distributed, non-central design concept. WorkerServer is mainly responsible for task execution and providing log services. When the WorkerServer service starts, it registers the temporary node with Zookeeper and maintains the heartbeat.
+
+       ##### This service contains:
+
+       - **FetchTaskThread** is mainly responsible for continuously receiving tasks from **Task Queue** and calling **TaskScheduleThread** corresponding executors according to different task types.
+       - **LoggerServer** is an RPC service that provides functions such as log fragment viewing, refresh and download.
+
+     - **ZooKeeper**
+
+       The ZooKeeper service, the MasterServer and the WorkerServer nodes in the system all use the ZooKeeper for cluster management and fault tolerance. In addition, the system also performs event monitoring and distributed locking based on ZooKeeper.
+       We have also implemented queues based on Redis, but we hope that EasyScheduler relies on as few components as possible, so we finally removed the Redis implementation.
+
+     - **Task Queue**
+
+       The task queue operation is provided. Currently, the queue is also implemented based on Zookeeper. Since there is less information stored in the queue, there is no need to worry about too much data in the queue. In fact, we have over-measured a million-level data storage queue, which has no effect on system stability and performance.
+
+     - **Alert**
+
+       Provides alarm-related interfaces. The interfaces mainly include **Alarms**. The storage, query, and notification functions of the two types of alarm data. The notification function has two types: **mail notification** and **SNMP (not yet implemented)**.
+
+     - **API**
+
+       The API interface layer is mainly responsible for processing requests from the front-end UI layer. The service provides a RESTful api to provide request services externally.
+       Interfaces include workflow creation, definition, query, modification, release, offline, manual start, stop, pause, resume, start execution from this node, and more.
+
+     - **UI**
+
+       The front-end page of the system provides various visual operation interfaces of the system. For details, see the **[System User Manual] (System User Manual.md)** section.
+
+     
+
+#### 2.3 Architectural Design Ideas
+
+##### I. Decentralized vs centralization
+
+###### Centralization Thought
+
+The centralized design concept is relatively simple. The nodes in the distributed cluster are divided into two roles according to their roles:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave role" width="50%" />
+ </p>
+
+- The role of Master is mainly responsible for task distribution and supervising the health status of Slave. It can dynamically balance the task to Slave, so that the Slave node will not be "busy" or "free".
+- The role of the Worker is mainly responsible for the execution of the task and maintains the heartbeat with the Master so that the Master can assign tasks to the Slave.
+
+Problems in the design of centralized :
+
+- Once the Master has a problem, the group has no leader and the entire cluster will crash. In order to solve this problem, most Master/Slave architecture modes adopt the design scheme of the master and backup masters, which can be hot standby or cold standby, automatic switching or manual switching, and more and more new systems are available. Automatically elects the ability to switch masters to improve system availability.
+- Another problem is that if the Scheduler is on the Master, although it can support different tasks in one DAG running on different machines, it will generate overload of the Master. If the Scheduler is on the Slave, all tasks in a DAG can only be submitted on one machine. If there are more parallel tasks, the pressure on the Slave may be larger.
+
+###### Decentralization
+
+ <p align="center"
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="decentralized" width="50%" />
+ </p>
+
+- In the decentralized design, there is usually no Master/Slave concept, all roles are the same, the status is equal, the global Internet is a typical decentralized distributed system, networked arbitrary node equipment down machine , all will only affect a small range of features.
+- The core design of decentralized design is that there is no "manager" that is different from other nodes in the entire distributed system, so there is no single point of failure problem. However, since there is no "manager" node, each node needs to communicate with other nodes to get the necessary machine information, and the unreliable line of distributed system communication greatly increases the difficulty of implementing the above functions.
+- In fact, truly decentralized distributed systems are rare. Instead, dynamic centralized distributed systems are constantly emerging. Under this architecture, the managers in the cluster are dynamically selected, rather than preset, and when the cluster fails, the nodes of the cluster will spontaneously hold "meetings" to elect new "managers". Go to preside over the work. The most typical case is the Etcd implemented in ZooKeeper and Go.
+
+- Decentralization of EasyScheduler is the registration of Master/Worker to ZooKeeper. The Master Cluster and the Worker Cluster are not centered, and the Zookeeper distributed lock is used to elect one Master or Worker as the “manager” to perform the task.
+
+#####  二、Distributed lock practice
+
+EasyScheduler uses ZooKeeper distributed locks to implement only one Master to execute the Scheduler at the same time, or only one Worker to perform task submission.
+
+1. The core process algorithm for obtaining distributed locks is as follows
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+
+2. Scheduler thread distributed lock implementation flow chart in EasyScheduler:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock_procss.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+
+##### Third, the thread is insufficient loop waiting problem
+
+- If there is no subprocess in a DAG, if the number of data in the Command is greater than the threshold set by the thread pool, the direct process waits or fails.
+- If a large number of sub-processes are nested in a large DAG, the following figure will result in a "dead" state:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png" alt="Thread is not enough to wait for loop" width="50%" />
+ </p>
+
+In the above figure, MainFlowThread waits for SubFlowThread1 to end, SubFlowThread1 waits for SubFlowThread2 to end, SubFlowThread2 waits for SubFlowThread3 to end, and SubFlowThread3 waits for a new thread in the thread pool, then the entire DAG process cannot end, and thus the thread cannot be released. This forms the state of the child parent process loop waiting. At this point, the scheduling cluster will no longer be available unless a new Master is started to add threads to break s [...]
+
+It seems a bit unsatisfactory to start a new Master to break the deadlock, so we proposed the following three options to reduce this risk:
+
+1. Calculate the sum of the threads of all Masters, and then calculate the number of threads required for each DAG, that is, pre-calculate before the DAG process is executed. Because it is a multi-master thread pool, the total number of threads is unlikely to be obtained in real time.
+2. Judge the single master thread pool. If the thread pool is full, let the thread fail directly.
+3. Add a Command type with insufficient resources. If the thread pool is insufficient, the main process will be suspended. This way, the thread pool has a new thread, which can make the process with insufficient resources hang up and wake up again.
+
+Note: The Master Scheduler thread is FIFO-enabled when it gets the Command.
+
+So we chose the third way to solve the problem of insufficient threads.
+
+##### IV. Fault Tolerant Design
+
+Fault tolerance is divided into service fault tolerance and task retry. Service fault tolerance is divided into two types: Master Fault Tolerance and Worker Fault Tolerance.
+
+###### 1. Downtime fault tolerance
+
+Service fault tolerance design relies on ZooKeeper's Watcher mechanism. The implementation principle is as follows:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png" alt="EasyScheduler Fault Tolerant Design" width="40%" />
+ </p>
+
+The Master monitors the directories of other Masters and Workers. If the remove event is detected, the process instance is fault-tolerant or the task instance is fault-tolerant according to the specific business logic.
+
+
+
+- Master fault tolerance flow chart:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png" alt="Master Fault Tolerance Flowchart" width="40%" />
+ </p>
+
+After the ZooKeeper Master is fault-tolerant, it is rescheduled by the Scheduler thread in EasyScheduler. It traverses the DAG to find the "Running" and "Submit Successful" tasks, and monitors the status of its task instance for the "Running" task. You need to determine whether the Task Queue already exists. If it exists, monitor the status of the task instance. If it does not exist, resubmit the task instance.
+
+
+
+- Worker fault tolerance flow chart:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png" alt="Worker Fault Tolerance Flowchart" width="40%" />
+ </p>
+
+Once the Master Scheduler thread finds the task instance as "need to be fault tolerant", it takes over the task and resubmits.
+
+ Note: Because the "network jitter" may cause the node to lose the heartbeat of ZooKeeper in a short time, the node's remove event occurs. In this case, we use the easiest way, that is, once the node has timeout connection with ZooKeeper, it will directly stop the Master or Worker service.
+
+###### 2. Task failure retry
+
+Here we must first distinguish between the concept of task failure retry, process failure recovery, and process failure rerun:
+
+- Task failure Retry is task level, which is automatically performed by the scheduling system. For example, if a shell task sets the number of retries to 3 times, then the shell task will try to run up to 3 times after failing to run.
+- Process failure recovery is process level, is done manually, recovery can only be performed from the failed node ** or ** from the current node **
+- Process failure rerun is also process level, is done manually, rerun is from the start node
+
+
+
+Next, let's talk about the topic, we divided the task nodes in the workflow into two types.
+
+- One is a business node, which corresponds to an actual script or processing statement, such as a Shell node, an MR node, a Spark node, a dependent node, and so on.
+- There is also a logical node, which does not do the actual script or statement processing, but the logical processing of the entire process flow, such as sub-flow sections.
+
+Each ** service node** can configure the number of failed retries. When the task node fails, it will automatically retry until it succeeds or exceeds the configured number of retries. **Logical node** does not support failed retry. But the tasks in the logical nodes support retry.
+
+If there is a task failure in the workflow that reaches the maximum number of retries, the workflow will fail to stop, and the failed workflow can be manually rerun or process resumed.
+
+
+
+##### V. Task priority design
+
+In the early scheduling design, if there is no priority design and fair scheduling design, it will encounter the situation that the task submitted first may be completed simultaneously with the task submitted subsequently, but the priority of the process or task cannot be set. We have redesigned this, and we are currently designing it as follows:
+
+- According to ** different process instance priority ** prioritizes ** same process instance priority ** prioritizes ** task priority within the same process ** takes precedence over ** same process ** commit order from high Go to low for task processing.
+
+  - The specific implementation is to resolve the priority according to the json of the task instance, and then save the ** process instance priority _ process instance id_task priority _ task id** information in the ZooKeeper task queue, when obtained from the task queue, Through string comparison, you can get the task that needs to be executed first.
+
+    - The priority of the process definition is that some processes need to be processed before other processes. This can be configured at the start of the process or at the time of scheduled start. There are 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="Process Priority Configuration" width="40%" />
+       </p>
+
+    - The priority of the task is also divided into 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="task priority configuration" width="35%" />
+       </p>
+
+##### VI. Logback and gRPC implement log access
+
+- Since the Web (UI) and Worker are not necessarily on the same machine, viewing the log is not as it is for querying local files. There are two options:
+  - Put the logs on the ES search engine
+  - Obtain remote log information through gRPC communication
+- Considering the lightweightness of EasyScheduler as much as possible, gRPC was chosen to implement remote access log information.
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc remote access" width="50%" />
+ </p>
+
+- We use a custom Logback FileAppender and Filter function to generate a log file for each task instance.
+- The main implementation of FileAppender is as follows:
+
+```java
+ /**
+  * task log appender
+  */
+ Public class TaskLogAppender extends FileAppender<ILoggingEvent {
+ 
+     ...
+
+    @Override
+    Protected void append(ILoggingEvent event) {
+
+        If (currentlyActiveFile == null){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split("-");
+        // logId = processDefineId_processInstanceId_taskInstanceId
+        String logId = threadNameArr[1];
+        ...
+        super.subAppend(event);
+    }
+}
+```
+
+Generate a log in the form of /process definition id/process instance id/task instance id.log
+
+- Filter matches the thread name starting with TaskLogInfo:
+- TaskLogFilter is implemented as follows:
+
+```java
+ /**
+ * task log filter
+ */
+Public class TaskLogFilter extends Filter<ILoggingEvent {
+
+    @Override
+    Public FilterReply decide(ILoggingEvent event) {
+        If (event.getThreadName().startsWith("TaskLogInfo-")){
+            Return FilterReply.ACCEPT;
+        }
+        Return FilterReply.DENY;
+    }
+}
+```
+
+
+
+### summary
+
+Starting from the scheduling, this paper introduces the architecture principle and implementation ideas of the big data distributed workflow scheduling system-EasyScheduler. To be continued
\ No newline at end of file
diff --git a/blog/zh-cn/architecture-design.md b/blog/zh-cn/architecture-design.md
new file mode 100755
index 0000000..8c3ef4e
--- /dev/null
+++ b/blog/zh-cn/architecture-design.md
@@ -0,0 +1,304 @@
+## 系统架构设计
+在对调度系统架构说明之前,我们先来认识一下调度系统常用的名词
+
+### 1.名词解释
+**DAG:** 全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:
+
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag_examples_cn.jpg" alt="dag示例"  width="60%" />
+  <p align="center">
+        <em>dag示例</em>
+  </p>
+</p>
+
+**流程定义**:通过拖拽任务节点并建立任务节点的关联所形成的可视化**DAG**
+
+**流程实例**:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例
+
+**任务实例**:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态
+
+**任务类型**: 目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子 **SUB_PROCESS**  也是一个单独的流程定义,是可以单独启动执行的
+
+**调度方式:** 系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。其中 **恢复被容错的工作流** 和 **恢复等待线程** 两种命令类型是由调度内部控制使用,外部无法调用
+
+**定时调度**:系统采用 **quartz** 分布式调度器,并同时支持cron表达式可视化的生成
+
+**依赖**:系统不单单支持 **DAG** 简单的前驱和后继节点之间的依赖,同时还提供**任务依赖**节点,支持**流程间的自定义任务依赖**
+
+**优先级** :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
+
+**邮件告警**:支持 **SQL任务** 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
+
+**失败策略**:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,**继续**是指不管并行运行任务的状态,直到流程失败结束。**结束**是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
+
+**补数**:补历史数据,支持**区间并行和串行**两种补数方式
+
+### 2.系统架构
+
+#### 2.1 系统架构图
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/architecture.jpg" alt="系统架构图"  width="70%" />
+  <p align="center">
+        <em>系统架构图</em>
+  </p>
+</p>
+
+#### 2.2 架构说明
+
+* **MasterServer** 
+
+    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。
+    MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。
+
+    ##### 该服务内主要包含:
+
+    - **Distributed Quartz**分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作
+
+    - **MasterSchedulerThread**是一个扫描线程,定时扫描数据库中的 **command** 表,根据不同的**命令类型**进行不同的业务操作
+
+    - **MasterExecThread**主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理
+
+    - **MasterTaskExecThread**主要负责任务的持久化
+
+* **WorkerServer** 
+
+     WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。
+     ##### 该服务包含:
+     - **FetchTaskThread**主要负责不断从**Task Queue**中领取任务,并根据不同任务类型调用**TaskScheduleThread**对应执行器。
+
+     - **LoggerServer**是一个RPC服务,提供日志分片查看、刷新和下载等功能
+
+* **ZooKeeper** 
+
+    ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。
+    我们也曾经基于Redis实现过队列,不过我们希望EasyScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。
+
+* **Task Queue** 
+
+    提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。
+
+* **Alert** 
+
+    提供告警相关接口,接口主要包括**告警**两种类型的告警数据的存储、查询和通知功能。其中通知功能又有**邮件通知**和**SNMP(暂未实现)**两种。
+
+* **API** 
+
+    API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
+    接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。
+
+* **UI** 
+
+    系统的前端页面,提供系统的各种可视化操作界面,详见**[系统使用手册](系统使用手册.md)**部分。
+
+#### 2.3 架构设计思想
+
+##### 一、去中心化vs中心化 
+
+###### 中心化思想
+
+中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave角色"  width="50%" />
+ </p>
+ 
+- Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
+- Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。
+
+
+
+中心化思想设计存在的问题:
+
+- 一旦Master出现了问题,则群龙无首,整个集群就会崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
+- 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大。
+
+
+
+###### 去中心化
+ <p align="center"
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="去中心化"  width="50%" />
+ </p>
+ 
+- 在去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备down机,都只会影响很小范围的功能。
+- 去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠行,则大大增加了上述功能的实现难度。
+- 实际上,真正去中心化的分布式系统并不多见。反而动态中心化分布式系统正在不断涌出。在这种架构下,集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"来选举新的"管理者"去主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd。
+
+
+
+- EasyScheduler的去中心化是Master/Worker注册到Zookeeper中,实现Master集群和Worker集群无中心,并使用Zookeeper分布式锁来选举其中的一台Master或Worker为“管理者”来执行任务。
+
+#####  二、分布式锁实践
+
+EasyScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Master执行Scheduler,或者只有一台Worker执行任务的提交。
+1. 获取分布式锁的核心流程算法如下
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png" alt="获取分布式锁流程"  width="50%" />
+ </p>
+
+2. EasyScheduler中Scheduler线程分布式锁实现流程图:
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock_procss.png" alt="获取分布式锁流程"  width="50%" />
+ </p>
+
+
+##### 三、线程不足循环等待问题
+
+-  如果一个DAG中没有子流程,则如果Command中的数据条数大于线程池设置的阈值,则直接流程等待或失败。
+-  如果一个大的DAG中嵌套了很多子流程,如下图则会产生“死等”状态:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png" alt="线程不足循环等待问题"  width="50%" />
+ </p>
+上图中MainFlowThread等待SubFlowThread1结束,SubFlowThread1等待SubFlowThread2结束, SubFlowThread2等待SubFlowThread3结束,而SubFlowThread3等待线程池有新线程,则整个DAG流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除非启动新的Master来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。
+
+对于启动新Master来打破僵局,似乎有点差强人意,于是我们提出了以下三种方案来降低这种风险:
+
+1. 计算所有Master的线程总和,然后对每一个DAG需要计算其需要的线程数,也就是在DAG流程执行之前做预计算。因为是多Master线程池,所以总线程数不太可能实时获取。 
+2. 对单Master线程池进行判断,如果线程池已经满了,则让线程直接失败。
+3. 增加一种资源不足的Command类型,如果线程池不足,则将主流程挂起。这样线程池就有了新的线程,可以让资源不足挂起的流程重新唤醒执行。
+
+注意:Master Scheduler线程在获取Command的时候是FIFO的方式执行的。
+
+于是我们选择了第三种方式来解决线程不足的问题。
+
+
+##### 四、容错设计
+容错分为服务宕机容错和任务重试,服务宕机容错又分为Master容错和Worker容错两种情况
+
+###### 1. 宕机容错
+
+服务容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png" alt="EasyScheduler容错设计"  width="40%" />
+ </p>
+其中Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。
+
+
+
+- Master容错流程图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png" alt="Master容错流程图"  width="40%" />
+ </p>
+ZooKeeper Master容错完成之后则重新由EasyScheduler中Scheduler线程调度,遍历 DAG 找到”正在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的状态,对”提交成功”的任务需要判断Task Queue中是否已经存在,如果存在则同样监控任务实例的状态,如果不存在则重新提交任务实例。
+
+
+
+- Worker容错流程图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png" alt="Worker容错流程图"  width="40%" />
+ </p>
+
+Master Scheduler线程一旦发现任务实例为” 需要容错”状态,则接管任务并进行重新提交。
+
+ 注意:由于” 网络抖动”可能会使得节点短时间内失去和ZooKeeper的心跳,从而发生节点的remove事件。对于这种情况,我们使用最简单的方式,那就是节点一旦和ZooKeeper发生超时连接,则直接将Master或Worker服务停掉。
+
+###### 2.任务失败重试
+
+这里首先要区分任务失败重试、流程失败恢复、流程失败重跑的概念:
+
+- 任务失败重试是任务级别的,是调度系统自动进行的,比如一个Shell任务设置重试次数为3次,那么在Shell任务运行失败后会自己再最多尝试运行3次
+- 流程失败恢复是流程级别的,是手动进行的,恢复是从只能**从失败的节点开始执行**或**从当前节点开始执行**
+- 流程失败重跑也是流程级别的,是手动进行的,重跑是从开始节点进行
+
+
+
+接下来说正题,我们将工作流中的任务节点分了两种类型。
+
+- 一种是业务节点,这种节点都对应一个实际的脚本或者处理语句,比如Shell节点,MR节点、Spark节点、依赖节点等。
+
+- 还有一种是逻辑节点,这种节点不做实际的脚本或语句处理,只是整个流程流转的逻辑处理,比如子流程节等。
+
+每一个**业务节点**都可以配置失败重试的次数,当该任务节点失败,会自动重试,直到成功或者超过配置的重试次数。**逻辑节点**不支持失败重试。但是逻辑节点里的任务支持重试。
+
+如果工作流中有任务失败达到最大重试次数,工作流就会失败停止,失败的工作流可以手动进行重跑操作或者流程恢复操作
+
+
+
+##### 五、任务优先级设计
+在早期调度设计中,如果没有优先级设计,采用公平调度设计的话,会遇到先行提交的任务可能会和后继提交的任务同时完成的情况,而不能做到设置流程或者任务的优先级,因此我们对此进行了重新设计,目前我们设计如下:
+
+-  按照**不同流程实例优先级**优先于**同一个流程实例优先级**优先于**同一流程内任务优先级**优先于**同一流程内任务**提交顺序依次从高到低进行任务处理。
+    - 具体实现是根据任务实例的json解析优先级,然后把**流程实例优先级_流程实例id_任务优先级_任务id**信息保存在ZooKeeper任务队列中,当从任务队列获取的时候,通过字符串比较即可得出最需要优先执行的任务
+
+        - 其中流程定义的优先级是考虑到有些流程需要先于其他流程进行处理,这个可以在流程启动或者定时启动时配置,共有5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
+            <p align="center">
+               <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="流程优先级配置"  width="40%" />
+             </p>
+
+        - 任务的优先级也分为5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
+            <p align="center">
+               <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="任务优先级配置"  width="35%" />
+             </p>
+
+
+##### 六、Logback和gRPC实现日志访问
+
+-  由于Web(UI)和Worker不一定在同一台机器上,所以查看日志不能像查询本地文件那样。有两种方案:
+  -  将日志放到ES搜索引擎上
+  -  通过gRPC通信获取远程日志信息
+
+-  介于考虑到尽可能的EasyScheduler的轻量级性,所以选择了gRPC实现远程访问日志信息。
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc远程访问"  width="50%" />
+ </p>
+
+
+- 我们使用自定义Logback的FileAppender和Filter功能,实现每个任务实例生成一个日志文件。
+- FileAppender主要实现如下:
+
+ ```java
+ /**
+  * task log appender
+  */
+ public class TaskLogAppender extends FileAppender<ILoggingEvent {
+ 
+     ...
+
+    @Override
+    protected void append(ILoggingEvent event) {
+
+        if (currentlyActiveFile == null){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split("-");
+        // logId = processDefineId_processInstanceId_taskInstanceId
+        String logId = threadNameArr[1];
+        ...
+        super.subAppend(event);
+    }
+}
+ ```
+
+
+以/流程定义id/流程实例id/任务实例id.log的形式生成日志
+
+- 过滤匹配以TaskLogInfo开始的线程名称:
+
+- TaskLogFilter实现如下:
+
+ ```java
+ /**
+ *  task log filter
+ */
+public class TaskLogFilter extends Filter<ILoggingEvent {
+
+    @Override
+    public FilterReply decide(ILoggingEvent event) {
+        if (event.getThreadName().startsWith("TaskLogInfo-")){
+            return FilterReply.ACCEPT;
+        }
+        return FilterReply.DENY;
+    }
+}
+ ```
+
+### 总结
+本文从调度出发,初步介绍了大数据分布式工作流调度系统--EasyScheduler的架构原理及实现思路。未完待续
+
+
diff --git a/docs/en-us/developer_guide/architecture-design.md b/docs/en-us/developer_guide/architecture-design.md
new file mode 100755
index 0000000..e1c8f01
--- /dev/null
+++ b/docs/en-us/developer_guide/architecture-design.md
@@ -0,0 +1,316 @@
+## Architecture Design
+Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.
+
+### 1.Noun Interpretation
+
+**DAG:** Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the following picture:
+
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag_examples_cn.jpg" alt="dag示例"  width="60%" />
+  <p align="center">
+        <em>dag example</em>
+  </p>
+</p>
+
+**Process definition**: Visualization **DAG** by dragging task nodes and establishing associations of task nodes 
+
+**Process instance**: A process instance is an instantiation of a process definition, which can be generated by manual startup or  scheduling. The process definition runs once, a new process instance is generated
+
+**Task instance**: A task instance is the instantiation of a specific task node when a process instance runs, which indicates the specific task execution status
+
+**Task type**: Currently supports SHELL, SQL, SUB_PROCESS (sub-process), PROCEDURE, MR, SPARK, PYTHON, DEPENDENT (dependency), and plans to support dynamic plug-in extension, note: the sub-**SUB_PROCESS** is also A separate process definition that can be launched separately
+
+**Schedule mode** :  The system supports timing schedule and manual schedule based on cron expressions. Command type support: start workflow, start execution from current node, resume fault-tolerant workflow, resume pause process, start execution from failed node, complement, timer, rerun, pause, stop, resume waiting thread. Where **recovers the fault-tolerant workflow** and **restores the waiting thread** The two command types are used by the scheduling internal control and cannot be ca [...]
+
+**Timed schedule**: The system uses **quartz** distributed scheduler and supports the generation of cron expression visualization
+
+**Dependency**: The system does not only support **DAG** Simple dependencies between predecessors and successor nodes, but also provides **task dependencies** nodes, support for custom task dependencies between processes**
+
+**Priority**: Supports the priority of process instances and task instances. If the process instance and task instance priority are not set, the default is first in, first out.
+
+**Mail Alert**: Support **SQL Task** Query Result Email Send, Process Instance Run Result Email Alert and Fault Tolerant Alert Notification
+
+**Failure policy**: For tasks running in parallel, if there are tasks that fail, two failure policy processing methods are provided. **Continue** means that the status of the task is run in parallel until the end of the process failure. **End** means that once a failed task is found, Kill also drops the running parallel task and the process ends.
+
+**Complement**: Complement historical data, support ** interval parallel and serial ** two complement methods
+
+
+
+### 2.System architecture
+
+#### 2.1 System Architecture Diagram
+<p align="center">
+  <img src="https://user-images.githubusercontent.com/48329107/62609545-8f973480-b934-11e9-9a58-d8133222f14d.png" alt="System Architecture Diagram"  />
+  <p align="center">
+        <em>System Architecture Diagram</em>
+  </p>
+</p>
+
+
+
+#### 2.2 Architectural description
+
+* **MasterServer** 
+
+    MasterServer adopts the distributed non-central design concept. MasterServer is mainly responsible for DAG task split, task submission monitoring, and monitoring the health status of other MasterServer and WorkerServer.
+    When the MasterServer service starts, it registers a temporary node with Zookeeper, and listens to the Zookeeper temporary node state change for fault tolerance processing.
+
+    
+
+    ##### The service mainly contains:
+
+    - **Distributed Quartz** distributed scheduling component, mainly responsible for the start and stop operation of the scheduled task. When the quartz picks up the task, the master internally has a thread pool to be responsible for the subsequent operations of the task.
+
+    - **MasterSchedulerThread** is a scan thread that periodically scans the **command** table in the database for different business operations based on different ** command types**
+
+    - **MasterExecThread** is mainly responsible for DAG task segmentation, task submission monitoring, logic processing of various command types
+
+    - **MasterTaskExecThread** is mainly responsible for task persistence
+
+      
+
+* **WorkerServer** 
+
+     - WorkerServer also adopts a distributed, non-central design concept. WorkerServer is mainly responsible for task execution and providing log services. When the WorkerServer service starts, it registers the temporary node with Zookeeper and maintains the heartbeat.
+
+       ##### This service contains:
+
+       - **FetchTaskThread** is mainly responsible for continuously receiving tasks from **Task Queue** and calling **TaskScheduleThread** corresponding executors according to different task types.
+       - **LoggerServer** is an RPC service that provides functions such as log fragment viewing, refresh and download.
+
+     - **ZooKeeper**
+
+       The ZooKeeper service, the MasterServer and the WorkerServer nodes in the system all use the ZooKeeper for cluster management and fault tolerance. In addition, the system also performs event monitoring and distributed locking based on ZooKeeper.
+       We have also implemented queues based on Redis, but we hope that EasyScheduler relies on as few components as possible, so we finally removed the Redis implementation.
+
+     - **Task Queue**
+
+       The task queue operation is provided. Currently, the queue is also implemented based on Zookeeper. Since there is less information stored in the queue, there is no need to worry about too much data in the queue. In fact, we have over-measured a million-level data storage queue, which has no effect on system stability and performance.
+
+     - **Alert**
+
+       Provides alarm-related interfaces. The interfaces mainly include **Alarms**. The storage, query, and notification functions of the two types of alarm data. The notification function has two types: **mail notification** and **SNMP (not yet implemented)**.
+
+     - **API**
+
+       The API interface layer is mainly responsible for processing requests from the front-end UI layer. The service provides a RESTful api to provide request services externally.
+       Interfaces include workflow creation, definition, query, modification, release, offline, manual start, stop, pause, resume, start execution from this node, and more.
+
+     - **UI**
+
+       The front-end page of the system provides various visual operation interfaces of the system. For details, see the **[System User Manual] (System User Manual.md)** section.
+
+     
+
+#### 2.3 Architectural Design Ideas
+
+##### I. Decentralized vs centralization
+
+###### Centralization Thought
+
+The centralized design concept is relatively simple. The nodes in the distributed cluster are divided into two roles according to their roles:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave role" width="50%" />
+ </p>
+
+- The role of Master is mainly responsible for task distribution and supervising the health status of Slave. It can dynamically balance the task to Slave, so that the Slave node will not be "busy" or "free".
+- The role of the Worker is mainly responsible for the execution of the task and maintains the heartbeat with the Master so that the Master can assign tasks to the Slave.
+
+Problems in the design of centralized :
+
+- Once the Master has a problem, the group has no leader and the entire cluster will crash. In order to solve this problem, most Master/Slave architecture modes adopt the design scheme of the master and backup masters, which can be hot standby or cold standby, automatic switching or manual switching, and more and more new systems are available. Automatically elects the ability to switch masters to improve system availability.
+- Another problem is that if the Scheduler is on the Master, although it can support different tasks in one DAG running on different machines, it will generate overload of the Master. If the Scheduler is on the Slave, all tasks in a DAG can only be submitted on one machine. If there are more parallel tasks, the pressure on the Slave may be larger.
+
+###### Decentralization
+
+ <p align="center"
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="decentralized" width="50%" />
+ </p>
+
+- In the decentralized design, there is usually no Master/Slave concept, all roles are the same, the status is equal, the global Internet is a typical decentralized distributed system, networked arbitrary node equipment down machine , all will only affect a small range of features.
+- The core design of decentralized design is that there is no "manager" that is different from other nodes in the entire distributed system, so there is no single point of failure problem. However, since there is no "manager" node, each node needs to communicate with other nodes to get the necessary machine information, and the unreliable line of distributed system communication greatly increases the difficulty of implementing the above functions.
+- In fact, truly decentralized distributed systems are rare. Instead, dynamic centralized distributed systems are constantly emerging. Under this architecture, the managers in the cluster are dynamically selected, rather than preset, and when the cluster fails, the nodes of the cluster will spontaneously hold "meetings" to elect new "managers". Go to preside over the work. The most typical case is the Etcd implemented in ZooKeeper and Go.
+
+- Decentralization of EasyScheduler is the registration of Master/Worker to ZooKeeper. The Master Cluster and the Worker Cluster are not centered, and the Zookeeper distributed lock is used to elect one Master or Worker as the “manager” to perform the task.
+
+#####  二、Distributed lock practice
+
+EasyScheduler uses ZooKeeper distributed locks to implement only one Master to execute the Scheduler at the same time, or only one Worker to perform task submission.
+
+1. The core process algorithm for obtaining distributed locks is as follows
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+
+2. Scheduler thread distributed lock implementation flow chart in EasyScheduler:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock_procss.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+
+##### Third, the thread is insufficient loop waiting problem
+
+- If there is no subprocess in a DAG, if the number of data in the Command is greater than the threshold set by the thread pool, the direct process waits or fails.
+- If a large number of sub-processes are nested in a large DAG, the following figure will result in a "dead" state:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png" alt="Thread is not enough to wait for loop" width="50%" />
+ </p>
+
+In the above figure, MainFlowThread waits for SubFlowThread1 to end, SubFlowThread1 waits for SubFlowThread2 to end, SubFlowThread2 waits for SubFlowThread3 to end, and SubFlowThread3 waits for a new thread in the thread pool, then the entire DAG process cannot end, and thus the thread cannot be released. This forms the state of the child parent process loop waiting. At this point, the scheduling cluster will no longer be available unless a new Master is started to add threads to break s [...]
+
+It seems a bit unsatisfactory to start a new Master to break the deadlock, so we proposed the following three options to reduce this risk:
+
+1. Calculate the sum of the threads of all Masters, and then calculate the number of threads required for each DAG, that is, pre-calculate before the DAG process is executed. Because it is a multi-master thread pool, the total number of threads is unlikely to be obtained in real time.
+2. Judge the single master thread pool. If the thread pool is full, let the thread fail directly.
+3. Add a Command type with insufficient resources. If the thread pool is insufficient, the main process will be suspended. This way, the thread pool has a new thread, which can make the process with insufficient resources hang up and wake up again.
+
+Note: The Master Scheduler thread is FIFO-enabled when it gets the Command.
+
+So we chose the third way to solve the problem of insufficient threads.
+
+##### IV. Fault Tolerant Design
+
+Fault tolerance is divided into service fault tolerance and task retry. Service fault tolerance is divided into two types: Master Fault Tolerance and Worker Fault Tolerance.
+
+###### 1. Downtime fault tolerance
+
+Service fault tolerance design relies on ZooKeeper's Watcher mechanism. The implementation principle is as follows:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png" alt="EasyScheduler Fault Tolerant Design" width="40%" />
+ </p>
+
+The Master monitors the directories of other Masters and Workers. If the remove event is detected, the process instance is fault-tolerant or the task instance is fault-tolerant according to the specific business logic.
+
+
+
+- Master fault tolerance flow chart:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png" alt="Master Fault Tolerance Flowchart" width="40%" />
+ </p>
+
+After the ZooKeeper Master is fault-tolerant, it is rescheduled by the Scheduler thread in EasyScheduler. It traverses the DAG to find the "Running" and "Submit Successful" tasks, and monitors the status of its task instance for the "Running" task. You need to determine whether the Task Queue already exists. If it exists, monitor the status of the task instance. If it does not exist, resubmit the task instance.
+
+
+
+- Worker fault tolerance flow chart:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png" alt="Worker Fault Tolerance Flowchart" width="40%" />
+ </p>
+
+Once the Master Scheduler thread finds the task instance as "need to be fault tolerant", it takes over the task and resubmits.
+
+ Note: Because the "network jitter" may cause the node to lose the heartbeat of ZooKeeper in a short time, the node's remove event occurs. In this case, we use the easiest way, that is, once the node has timeout connection with ZooKeeper, it will directly stop the Master or Worker service.
+
+###### 2. Task failure retry
+
+Here we must first distinguish between the concept of task failure retry, process failure recovery, and process failure rerun:
+
+- Task failure Retry is task level, which is automatically performed by the scheduling system. For example, if a shell task sets the number of retries to 3 times, then the shell task will try to run up to 3 times after failing to run.
+- Process failure recovery is process level, is done manually, recovery can only be performed from the failed node ** or ** from the current node **
+- Process failure rerun is also process level, is done manually, rerun is from the start node
+
+
+
+Next, let's talk about the topic, we divided the task nodes in the workflow into two types.
+
+- One is a business node, which corresponds to an actual script or processing statement, such as a Shell node, an MR node, a Spark node, a dependent node, and so on.
+- There is also a logical node, which does not do the actual script or statement processing, but the logical processing of the entire process flow, such as sub-flow sections.
+
+Each ** service node** can configure the number of failed retries. When the task node fails, it will automatically retry until it succeeds or exceeds the configured number of retries. **Logical node** does not support failed retry. But the tasks in the logical nodes support retry.
+
+If there is a task failure in the workflow that reaches the maximum number of retries, the workflow will fail to stop, and the failed workflow can be manually rerun or process resumed.
+
+
+
+##### V. Task priority design
+
+In the early scheduling design, if there is no priority design and fair scheduling design, it will encounter the situation that the task submitted first may be completed simultaneously with the task submitted subsequently, but the priority of the process or task cannot be set. We have redesigned this, and we are currently designing it as follows:
+
+- According to ** different process instance priority ** prioritizes ** same process instance priority ** prioritizes ** task priority within the same process ** takes precedence over ** same process ** commit order from high Go to low for task processing.
+
+  - The specific implementation is to resolve the priority according to the json of the task instance, and then save the ** process instance priority _ process instance id_task priority _ task id** information in the ZooKeeper task queue, when obtained from the task queue, Through string comparison, you can get the task that needs to be executed first.
+
+    - The priority of the process definition is that some processes need to be processed before other processes. This can be configured at the start of the process or at the time of scheduled start. There are 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="Process Priority Configuration" width="40%" />
+       </p>
+
+    - The priority of the task is also divided into 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="task priority configuration" width="35%" />
+       </p>
+
+##### VI. Logback and gRPC implement log access
+
+- Since the Web (UI) and Worker are not necessarily on the same machine, viewing the log is not as it is for querying local files. There are two options:
+  - Put the logs on the ES search engine
+  - Obtain remote log information through gRPC communication
+- Considering the lightweightness of EasyScheduler as much as possible, gRPC was chosen to implement remote access log information.
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc remote access" width="50%" />
+ </p>
+
+- We use a custom Logback FileAppender and Filter function to generate a log file for each task instance.
+- The main implementation of FileAppender is as follows:
+
+```java
+ /**
+  * task log appender
+  */
+ Public class TaskLogAppender extends FileAppender<ILoggingEvent {
+ 
+     ...
+
+    @Override
+    Protected void append(ILoggingEvent event) {
+
+        If (currentlyActiveFile == null){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split("-");
+        // logId = processDefineId_processInstanceId_taskInstanceId
+        String logId = threadNameArr[1];
+        ...
+        super.subAppend(event);
+    }
+}
+```
+
+Generate a log in the form of /process definition id/process instance id/task instance id.log
+
+- Filter matches the thread name starting with TaskLogInfo:
+- TaskLogFilter is implemented as follows:
+
+```java
+ /**
+ * task log filter
+ */
+Public class TaskLogFilter extends Filter<ILoggingEvent {
+
+    @Override
+    Public FilterReply decide(ILoggingEvent event) {
+        If (event.getThreadName().startsWith("TaskLogInfo-")){
+            Return FilterReply.ACCEPT;
+        }
+        Return FilterReply.DENY;
+    }
+}
+```
+
+
+
+### summary
+
+Starting from the scheduling, this paper introduces the architecture principle and implementation ideas of the big data distributed workflow scheduling system-EasyScheduler. To be continued
\ No newline at end of file
diff --git a/docs/en-us/developer_guide/backend-development.md b/docs/en-us/developer_guide/backend-development.md
new file mode 100755
index 0000000..10f7ba4
--- /dev/null
+++ b/docs/en-us/developer_guide/backend-development.md
@@ -0,0 +1,48 @@
+# Backend development documentation
+
+## Environmental requirements
+
+ * [Mysql](http://geek.analysys.cn/topic/124) (5.5+) :  Must be installed
+ * [JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html) (1.8+) :  Must be installed
+ * [ZooKeeper](https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper)(3.4.6+) :Must be installed
+ * [Maven](http://maven.apache.org/download.cgi)(3.3+) :Must be installed
+
+Because the escheduler-rpc module in EasyScheduler uses Grpc, you need to use Maven to compile the generated classes.
+For those who are not familiar with maven, please refer to: [maven in five minutes](http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html)(3.3+)
+
+http://maven.apache.org/install.html
+
+## Project compilation
+After importing the EasyScheduler source code into the development tools such as Idea, first convert to the Maven project (right click and select "Add Framework Support")
+
+* Execute the compile command:
+
+```
+ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
+```
+
+* View directory
+
+After normal compilation, it will generate ./target/escheduler-{version}/ in the current directory.
+
+```
+    bin
+    conf
+    lib
+    script
+    sql
+    install.sh
+```
+
+- Description
+
+```
+bin : basic service startup script
+conf : project configuration file
+lib : the project depends on the jar package, including the various module jars and third-party jars
+script : cluster start, stop, and service monitoring start and stop scripts
+sql : project depends on sql file
+install.sh : one-click deployment script
+```
+
+   
diff --git a/docs/en-us/developer_guide/frontend-development.md b/docs/en-us/developer_guide/frontend-development.md
new file mode 100755
index 0000000..286c598
--- /dev/null
+++ b/docs/en-us/developer_guide/frontend-development.md
@@ -0,0 +1,650 @@
+# Front-end development documentation
+
+### Technical selection
+```
+Vue mvvm framework
+
+Es6 ECMAScript 6.0
+
+Ans-ui Analysys-ui
+
+D3  Visual Library Chart Library
+
+Jsplumb connection plugin library
+
+Lodash high performance JavaScript utility library
+```
+
+
+### Development environment
+
+- #### Node installation
+Node package download (note version 8.9.4) `https://nodejs.org/download/release/v8.9.4/` 
+
+
+- #### Front-end project construction
+Use the command line mode `cd`  enter the `escheduler-ui` project directory and execute `npm install` to pull the project dependency package.
+
+> If `npm install` is very slow
+
+> You can enter the Taobao image command line to enter `npm install -g cnpm --registry=https://registry.npm.taobao.org`
+
+> Run `cnpm install` 
+
+
+- Create a new `.env`  file or the interface that interacts with the backend
+
+Create a new` .env` file in the `escheduler-ui `directory, add the ip address and port of the backend service to the file, and use it to interact with the backend. The contents of the` .env` file are as follows:
+```
+# Proxy interface address (modified by yourself)
+API_BASE = http://192.168.xx.xx:12345
+
+# If you need to access the project with ip, you can remove the "#" (example)
+#DEV_HOST = 192.168.xx.xx
+```
+
+> #####  ! ! ! Special attention here. If the project reports a "node-sass error" error while pulling the dependency package, execute the following command again after execution.
+```
+npm install node-sass --unsafe-perm //单独安装node-sass依赖
+```
+
+- #### Development environment operation
+- `npm start` project development environment (after startup address http://localhost:8888/#/)
+
+
+#### Front-end project release
+
+- `npm run build` project packaging (after packaging, the root directory will create a folder called dist for publishing Nginx online)
+
+Run the `npm run build` command to generate a package file (dist) package
+
+Copy it to the corresponding directory of the server (front-end service static page storage directory)
+
+Visit address` http://localhost:8888/#/`
+
+
+#### Start with node and daemon under Linux
+
+Install pm2 `npm install -g pm2`
+
+Execute `pm2 start npm -- run dev` to start the project in the project `escheduler-ui `root directory
+
+#### command
+
+- Start `pm2 start npm -- run dev`
+
+- Stop `pm2 stop npm`
+
+- delete `pm2 delete npm`
+
+- Status  `pm2 list`
+
+```
+
+[root@localhost escheduler-ui]# pm2 start npm -- run dev
+[PM2] Applying action restartProcessId on app [npm](ids: 0)
+[PM2] [npm](0) ✓
+[PM2] Process successfully started
+┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────┬──────────┐
+│ App name │ id │ version │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem      │ user │ watching │
+├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────┼──────────┤
+│ npm      │ 0  │ N/A     │ fork │ 6168 │ online │ 31      │ 0s     │ 0%  │ 5.6 MB   │ root │ disabled │
+└──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────┴──────────┘
+ Use `pm2 show <id|name>` to get more details about an app
+
+```
+
+
+### Project directory structure
+
+`build` some webpack configurations for packaging and development environment projects
+
+`node_modules` development environment node dependency package
+
+`src` project required documents
+
+`src => combo` project third-party resource localization `npm run combo` specific view `build/combo.js`
+
+`src => font` Font icon library can be added by visiting https://www.iconfont.cn Note: The font library uses its own secondary development to reintroduce its own library `src/sass/common/_font.scss`
+
+`src => images` public image storage
+
+`src => js` js/vue
+
+`src => lib` internal components of the company (company component library can be deleted after open source)
+
+`src => sass` sass file One page corresponds to a sass file
+
+`src => view` page file One page corresponds to an html file
+
+```
+> Projects are developed using vue single page application (SPA)
+- All page entry files are in the `src/js/conf/${ corresponding page filename => home} index.js` entry file
+- The corresponding sass file is in `src/sass/conf/${corresponding page filename => home}/index.scss`
+- The corresponding html file is in `src/view/${corresponding page filename => home}/index.html`
+```
+
+Public module and utill `src/js/module`
+
+`components` => internal project common components
+
+`download` => download component
+
+`echarts` => chart component
+
+`filter` => filter and vue pipeline
+
+`i18n` => internationalization
+
+`io` => io request encapsulation based on axios
+
+`mixin` => vue mixin public part for disabled operation
+
+`permissions` => permission operation
+
+`util` => tool
+
+
+### System function module
+
+Home  => `http://localhost:8888/#/home`
+
+Project Management => `http://localhost:8888/#/projects/list`
+```
+| Project Home
+| Workflow
+  - Workflow definition
+  - Workflow instance
+  - Task instance
+```
+
+Resource Management => `http://localhost:8888/#/resource/file`
+```
+| File Management
+| udf Management
+  - Resource Management
+  - Function management
+
+
+
+```
+
+Data Source Management => `http://localhost:8888/#/datasource/list`
+
+Security Center => `http://localhost:8888/#/security/tenant`
+```
+| Tenant Management
+| User Management
+| Alarm Group Management
+  - master
+  - worker
+```
+
+User Center => `http://localhost:8888/#/user/account`
+
+
+## Routing and state management
+
+The project `src/js/conf/home` is divided into
+
+`pages` => route to page directory
+```
+ The page file corresponding to the routing address
+```
+
+`router` => route management
+```
+vue router, the entry file index.js in each page will be registered. Specific operations: https://router.vuejs.org/zh/
+```
+
+`store` => status management
+```
+The page corresponding to each route has a state management file divided into:
+
+actions => mapActions => Details:https://vuex.vuejs.org/zh/guide/actions.html
+
+getters => mapGetters => Details:https://vuex.vuejs.org/zh/guide/getters.html
+
+index => entrance
+mutations => mapMutations => Details:https://vuex.vuejs.org/zh/guide/mutations.html
+
+state => mapState => Details:https://vuex.vuejs.org/zh/guide/state.html
+
+Specific action:https://vuex.vuejs.org/zh/
+
+```
+
+
+## specification
+## Vue specification
+##### 1.Component name
+The component is named multiple words and is connected with a wire (-) to avoid conflicts with HTML tags and a clearer structure.
+```
+// positive example
+export default {
+    name: 'page-article-item'
+}
+```
+
+##### 2.Component files
+The internal common component of the `src/js/module/components` project writes the folder name with the same name as the file name. The subcomponents and util tools that are split inside the common component are placed in the internal `_source` folder of the component.
+```
+└── components
+    ├── header
+        ├── header.vue
+        └── _source
+            └── nav.vue
+            └── util.js
+    ├── conditions
+        ├── conditions.vue
+        └── _source
+            └── search.vue
+            └── util.js
+```
+
+##### 3.Prop
+When you define Prop, you should always name it in camel format (camelCase) and use the connection line (-) when assigning values to the parent component.This follows the characteristics of each language, because it is case-insensitive in HTML tags, and the use of links is more friendly; in JavaScript, the more natural is the hump name.
+
+```
+// Vue
+props: {
+    articleStatus: Boolean
+}
+// HTML
+<article-item :article-status="true"></article-item>
+```
+
+The definition of Prop should specify its type, defaults, and validation as much as possible.
+
+Example:
+
+```
+props: {
+    attrM: Number,
+    attrA: {
+        type: String,
+        required: true
+    },
+    attrZ: {
+        type: Object,
+        //  The default value of the array/object should be returned by a factory function
+        default: function () {
+            return {
+                msg: 'achieve you and me'
+            }
+        }
+    },
+    attrE: {
+        type: String,
+        validator: function (v) {
+            return !(['success', 'fail'].indexOf(v) === -1) 
+        }
+    }
+}
+```
+
+##### 4.v-for
+When performing v-for traversal, you should always bring a key value to make rendering more efficient when updating the DOM.
+```
+<ul>
+    <li v-for="item in list" :key="item.id">
+        {{ item.title }}
+    </li>
+</ul>
+```
+
+v-for should be avoided on the same element as v-if (`for example: <li>`) because v-for has a higher priority than v-if. To avoid invalid calculations and rendering, you should try to use v-if Put it on top of the container's parent element.
+```
+<ul v-if="showList">
+    <li v-for="item in list" :key="item.id">
+        {{ item.title }}
+    </li>
+</ul>
+```
+
+##### 5.v-if / v-else-if / v-else
+If the elements in the same set of v-if logic control are logically identical, Vue reuses the same part for more efficient element switching, `such as: value`. In order to avoid the unreasonable effect of multiplexing, you should add key to the same element for identification.
+```
+<div v-if="hasData" key="mazey-data">
+    <span>{{ mazeyData }}</span>
+</div>
+<div v-else key="mazey-none">
+    <span>no data</span>
+</div>
+```
+
+##### 6.Instruction abbreviation
+In order to unify the specification, the instruction abbreviation is always used. Using `v-bind`, `v-on` is not bad. Here is only a unified specification.
+```
+<input :value="mazeyUser" @click="verifyUser">
+```
+
+##### 7.Top-level element order of single file components
+Styles are packaged in a file, all the styles defined in a single vue file, the same name in other files will also take effect. All will have a top class name before creating a component.
+Note: The sass plugin has been added to the project, and the sas syntax can be written directly in a single vue file.
+For uniformity and ease of reading, they should be placed in the order of  `<template>`、`<script>`、`<style>`.
+
+```
+<template>
+  <div class="test-model">
+    test
+  </div>
+</template>
+<script>
+  export default {
+    name: "test",
+    data() {
+      return {}
+    },
+    props: {},
+    methods: {},
+    watch: {},
+    beforeCreate() {
+    },
+    created() {
+    },
+    beforeMount() {
+    },
+    mounted() {
+    },
+    beforeUpdate() {
+    },
+    updated() {
+    },
+    beforeDestroy() {
+    },
+    destroyed() {
+    },
+    computed: {},
+    components: {},
+  }
+</script>
+
+<style lang="scss" rel="stylesheet/scss">
+  .test-model {
+
+  }
+</style>
+
+```
+
+
+## JavaScript specification
+
+##### 1.var / let / const
+It is recommended to no longer use var, but use let / const, prefer const. The use of any variable must be declared in advance, except that the function defined by function can be placed anywhere.
+
+##### 2.quotes
+```
+const foo = 'after division'
+const bar = `${foo},ront-end engineer`
+```
+
+##### 3.function
+Anonymous functions use the arrow function uniformly. When multiple parameters/return values are used, the object's structure assignment is used first.
+```
+function getPersonInfo ({name, sex}) {
+    // ...
+    return {name, gender}
+}
+```
+The function name is uniformly named with a camel name. The beginning of the capital letter is a constructor. The lowercase letters start with ordinary functions, and the new operator should not be used to operate ordinary functions.
+
+##### 4.object
+```
+const foo = {a: 0, b: 1}
+const bar = JSON.parse(JSON.stringify(foo))
+
+const foo = {a: 0, b: 1}
+const bar = {...foo, c: 2}
+
+const foo = {a: 3}
+Object.assign(foo, {b: 4})
+
+const myMap = new Map([])
+for (let [key, value] of myMap.entries()) {
+    // ...
+}
+```
+
+##### 5.module
+Unified management of project modules using import / export.
+```
+// lib.js
+export default {}
+
+// app.js
+import app from './lib'
+```
+
+Import is placed at the top of the file.
+
+If the module has only one output value, use `export default`,otherwise no.
+
+## HTML / CSS
+
+##### 1.Label
+
+Do not write the type attribute when referencing external CSS or JavaScript. The HTML5 default type is the text/css and text/javascript properties, so there is no need to specify them.
+```
+<link rel="stylesheet" href="//www.test.com/css/test.css">
+<script src="//www.test.com/js/test.js"></script>
+```
+
+##### 2.Naming
+The naming of Class and ID should be semantic, and you can see what you are doing by looking at the name; multiple words are connected by a link.
+```
+// positive example
+.test-header{
+    font-size: 20px;
+}
+```
+
+##### 3.Attribute abbreviation
+CSS attributes use abbreviations as much as possible to improve the efficiency and ease of understanding of the code.
+
+```
+// counter example
+border-width: 1px;
+border-style: solid;
+border-color: #ccc;
+
+// positive example
+border: 1px solid #ccc;
+```
+
+##### 4.Document type
+
+The HTML5 standard should always be used.
+
+```
+<!DOCTYPE html>
+```
+
+##### 5.Notes
+A block comment should be written to a module file.
+```
+/**
+* @module mazey/api
+* @author Mazey <mazey@mazey.net>
+* @description test.
+* */
+```
+
+
+## interface
+
+##### All interfaces are returned as Promise 
+Note that non-zero is wrong for catching catch
+
+```
+const test = () => {
+  return new Promise((resolve, reject) => {
+    resolve({
+      a:1
+    })
+  })
+}
+
+// transfer
+test.then(res => {
+  console.log(res)
+  // {a:1}
+})
+```
+
+Normal return
+```
+{
+  code:0,
+  data:{}
+  msg:'success'
+}
+```
+
+错误返回
+```
+{
+  code:10000, 
+  data:{}
+  msg:'failed'
+}
+```
+
+##### Related interface path
+
+dag related interface `src/js/conf/home/store/dag/actions.js`
+
+Data Source Center Related Interfaces  `src/js/conf/home/store/datasource/actions.js`
+
+Project Management Related Interfaces `src/js/conf/home/store/projects/actions.js`
+
+Resource Center Related Interfaces `src/js/conf/home/store/resource/actions.js`
+
+Security Center Related Interfaces `src/js/conf/home/store/security/actions.js`
+
+User Center Related Interfaces `src/js/conf/home/store/user/actions.js`
+
+
+
+## Extended development
+
+##### 1.Add node
+
+(1) First place the icon icon of the node in the `src/js/conf/home/pages/dag/img `folder, and note the English name of the node defined by the `toolbar_${in the background. For example: SHELL}.png`
+
+(2)  Find the `tasksType` object in `src/js/conf/home/pages/dag/_source/config.js` and add it to it.
+```
+'DEPENDENT': {  //  The background definition node type English name is used as the key value
+  desc: 'DEPENDENT',  // tooltip desc
+  color: '#2FBFD8'  // The color represented is mainly used for tree and gantt
+}
+```
+
+(3)  Add a `${node type (lowercase)}`.vue file in `src/js/conf/home/pages/dag/_source/formModel/tasks`. The contents of the components related to the current node are written here. Must belong to a node component must have a function _verification () After the verification is successful, the relevant data of the current component is thrown to the parent component.
+```
+/**
+ * Verification
+*/
+  _verification () {
+    // datasource subcomponent verification
+    if (!this.$refs.refDs._verifDatasource()) {
+      return false
+    }
+
+    // verification function
+    if (!this.method) {
+      this.$message.warning(`${i18n.$t('Please enter method')}`)
+      return false
+    }
+
+    // localParams subcomponent validation
+    if (!this.$refs.refLocalParams._verifProp()) {
+      return false
+    }
+    // store
+    this.$emit('on-params', {
+      type: this.type,
+      datasource: this.datasource,
+      method: this.method,
+      localParams: this.localParams
+    })
+    return true
+  }
+```
+
+(4) Common components used inside the node component are under` _source`, and `commcon.js` is used to configure public data.
+
+##### 2.Increase the status type
+
+(1) Find the `tasksState` object in `src/js/conf/home/pages/dag/_source/config.js` and add it to it.
+
+```
+ 'WAITTING_DEPEND': {  // 'WAITTING_DEPEND': {  //后端定义状态类型 前端用作key值
+  id: 11,  // front-end definition id is used as a sort
+  desc: `${i18n.$t('waiting for dependency')}`,  // tooltip desc
+  color: '#5101be',  // The color represented is mainly used for tree and gantt
+  icoUnicode: '&#xe68c;',  // font icon
+  isSpin: false  // whether to rotate (requires code judgment)
+}
+```
+
+##### 3.Add the action bar tool
+(1)  Find the `toolOper` object in `src/js/conf/home/pages/dag/_source/config.js` and add it to it.
+```
+{
+  code: 'pointer',  // tool identifier
+  icon: '&#xe781;',  // tool icon
+  disable: disable,  // disable
+  desc: `${i18n.$t('Drag node and selected item')}`  // tooltip desc
+}
+```
+
+(2) Tool classes are returned as a constructor  `src/js/conf/home/pages/dag/_source/plugIn`
+
+`downChart.js`  =>  dag image download processing
+
+`dragZoom.js`  =>  mouse zoom effect processing
+
+`jsPlumbHandle.js`  =>  drag and drop line processing
+
+`util.js`  =>   belongs to the `plugIn` tool class
+
+
+The operation is handled in the `src/js/conf/home/pages/dag/_source/dag.js` => `toolbarEvent` event.
+
+
+##### 3.Add a routing page
+
+(1) First add a routing address`src/js/conf/home/router/index.js` in route management
+```
+routing address{
+  path: '/test',  // routing address
+  name: 'test',  // alias
+  component: resolve => require(['../pages/test/index'], resolve),  // route corresponding component entry file
+  meta: {
+    title: `${i18n.$t('test')} - EasyScheduler`  // title display
+  }
+},
+```
+
+(2)Create a `test` folder in `src/js/conf/home/pages` and create an `index.vue `entry file in the folder.
+
+    This will give you direct access to`http://localhost:8888/#/test`
+
+
+##### 4.Increase the preset mailbox
+
+Find the `src/lib/localData/email.js` startup and timed email address input to automatically pull down the match.
+```
+export default ["test@analysys.com.cn","test1@analysys.com.cn","test3@analysys.com.cn"]
+```
+
+##### 5.Authority management and disabled state processing
+
+The permission gives the userType according to the backUser interface `getUserInfo` interface: `"ADMIN_USER/GENERAL_USER" `permission to control whether the page operation button is `disabled`.
+
+specific operation:`src/js/module/permissions/index.js`
+
+disabled processing:`src/js/module/mixin/disabledState.js`
+
diff --git a/docs/en-us/development/contribute.md b/docs/en-us/development/contribute.md
new file mode 100755
index 0000000..802ac1f
--- /dev/null
+++ b/docs/en-us/development/contribute.md
@@ -0,0 +1 @@
+## TODO
diff --git a/docs/en-us/development/developers.md b/docs/en-us/development/developers.md
new file mode 100755
index 0000000..802ac1f
--- /dev/null
+++ b/docs/en-us/development/developers.md
@@ -0,0 +1 @@
+## TODO
diff --git a/docs/en-us/faq.md b/docs/en-us/faq.md
new file mode 100755
index 0000000..5351c97
--- /dev/null
+++ b/docs/en-us/faq.md
@@ -0,0 +1,283 @@
+## Q: EasyScheduler service introduction and recommended running memory
+
+A: EasyScheduler consists of 5 services, MasterServer, WorkerServer, ApiServer, AlertServer, LoggerServer and UI.
+
+| Service                   | Description                                                  |
+| ------------------------- | ------------------------------------------------------------ |
+| MasterServer              | Mainly responsible for DAG segmentation and task status monitoring |
+| WorkerServer/LoggerServer | Mainly responsible for the submission, execution and update of task status. LoggerServer is used for Rest Api to view logs through RPC |
+| ApiServer                 | Provides the Rest Api service for the UI to call             |
+| AlertServer               | Provide alarm service                                        |
+| UI                        | Front page display                                           |
+
+Note:**Due to the large number of services, it is recommended that the single-machine deployment is preferably 4 cores and 16G or more.**
+
+---
+
+## Q: Why can't an administrator create a project?
+
+A: The administrator is currently "**pure management**". There is no tenant, that is, there is no corresponding user on linux, so there is no execution permission, **so there is no project, resource and data source,** so there is no permission to create. **But there are all viewing permissions**. If you need to create a business operation such as a project, **use the administrator to create a tenant and a normal user, and then use the normal user login to operate**. We will release the a [...]
+
+---
+
+## Q: Which mailboxes does the system support?
+
+A: Support most mailboxes, qq, 163, 126, 139, outlook, aliyun, etc. are supported. Support TLS and SSL protocols, optionally configured in alert.properties
+
+---
+
+## Q: What are the common system variable time parameters and how do I use them?
+
+A: Please refer to 'System parameter' in the system-manual 
+
+---
+
+## Q: pip install kazoo This installation gives an error. Is it necessary to install?
+
+A: This is the python connection zookeeper needs to use, must be installed
+
+---
+
+## Q: How to specify the machine running task
+
+A: Use **the administrator** to create a Worker group, **specify the Worker group** when the **process definition starts**, or **specify the Worker group on the task node**. If not specified, use Default, **Default is to select one of all the workers in the cluster to use for task submission and execution.**
+
+---
+
+## Q: Priority of the task
+
+A: We also support **the priority of processes and tasks**. Priority We have five levels of **HIGHEST, HIGH, MEDIUM, LOW and LOWEST**. **You can set the priority between different process instances, or you can set the priority of different task instances in the same process instance.** For details, please refer to the task priority design in the architecture-design.
+
+----
+
+## Q: Escheduler-grpc gives an error
+
+A: Execute in the root directory: mvn -U clean package assembly:assembly -Dmaven.test.skip=true , then refresh the entire project
+
+----
+
+## Q: Does EasyScheduler support running on windows?
+
+A: In theory, **only the Worker needs to run on Linux**. Other services can run normally on Windows. But it is still recommended to deploy on Linux.
+
+-----
+
+## Q: UI compiles node-sass prompt in linux: Error: EACCESS: permission denied, mkdir xxxx
+
+A: Install **npm install node-sass --unsafe-perm** separately, then **npm install**
+
+---
+
+## Q: UI cannot log in normally.
+
+A: 1, if it is node startup, check whether the .env API_BASE configuration under escheduler-ui is the Api Server service address.
+
+    2, If it is nginx booted and installed via **install-escheduler-ui.sh**, check if the proxy_pass configuration in **/etc/nginx/conf.d/escheduler.conf** is the Api Server service. address
+    
+     3, if the above configuration is correct, then please check if the Api Server service is normal, curl http://192.168.xx.xx:12345/escheduler/users/get-user-info, check the Api Server log, if Prompt cn.escheduler.api.interceptor.LoginHandlerInterceptor:[76] - session info is null, which proves that the Api Server service is normal.
+    
+    4, if there is no problem above, you need to check if **server.context-path and server.port configuration** in **application.properties** is correct
+
+---
+
+## Q: After the process definition is manually started or scheduled, no process instance is generated.
+
+A:   1, first **check whether the MasterServer service exists through jps**, or directly check whether there is a master service in zk from the service monitoring.
+
+​       2,If there is a master service, check **the command status statistics** or whether new records are added in **t_escheduler_error_command**. If it is added, **please check the message field.**
+
+---
+
+## Q : The task status is always in the successful submission status.
+
+A:   1, **first check whether the WorkerServer service exists through jps**, or directly check whether there is a worker service in zk from the service monitoring.
+
+​       2,If the **WorkerServer** service is normal, you need to **check whether the MasterServer puts the task task in the zk queue. You need to check whether the task is blocked in the MasterServer log and the zk queue.**
+
+​       3, if there is no problem above, you need to locate whether the Worker group is specified, but **the machine grouped by the worker is not online**.**
+
+---
+
+## Q: Is there a Docker image and a Dockerfile?
+
+A: Provide Docker image and Dockerfile.
+
+Docker image address: https://hub.docker.com/r/escheduler/escheduler_images
+
+Dockerfile address: https://github.com/qiaozhanwei/escheduler_dockerfile/tree/master/docker_escheduler
+
+------
+
+## Q : Need to pay attention to the problem in install.sh
+
+A:   1, if the replacement variable contains special characters, **use the \ transfer character to transfer**
+
+​       2, installPath="/data1_1T/escheduler", **this directory can not be the same as the install.sh directory currently installed with one click.**
+
+​       3, deployUser = "escheduler", **the deployment user must have sudo privileges**, because the worker is executed by sudo -u tenant sh xxx.command
+
+​       4, monitorServerState = "false", whether the service monitoring script is started, the default is not to start the service monitoring script. **If the service monitoring script is started, the master and worker services are monitored every 5 minutes, and if the machine is down, it will automatically restart.**
+
+​       5, hdfsStartupSate="false", whether to enable HDFS resource upload function. The default is not enabled. **If it is not enabled, the resource center cannot be used.** If enabled, you need to configure the configuration of fs.defaultFS and yarn in conf/common/hadoop/hadoop.properties. If you use namenode HA, you need to copy core-site.xml and hdfs-site.xml to the conf root directory.
+
+​    Note: **The 1.0.x version does not automatically create the hdfs root directory, you need to create it yourself, and you need to deploy the user with hdfs operation permission.**
+
+---
+
+## Q : Process definition and process instance offline exception
+
+A : For **versions prior to 1.0.4**, modify the code under the escheduler-api cn.escheduler.api.quartz package.
+
+```
+public boolean deleteJob(String jobName, String jobGroupName) {
+    lock.writeLock().lock();
+    try {
+      JobKey jobKey = new JobKey(jobName,jobGroupName);
+      if(scheduler.checkExists(jobKey)){
+        logger.info("try to delete job, job name: {}, job group name: {},", jobName, jobGroupName);
+        return scheduler.deleteJob(jobKey);
+      }else {
+        return true;
+      }
+
+    } catch (SchedulerException e) {
+      logger.error(String.format("delete job : %s failed",jobName), e);
+    } finally {
+      lock.writeLock().unlock();
+    }
+    return false;
+  }
+```
+
+---
+
+## Q: Can the tenant created before the HDFS startup use the resource center normally?
+
+A: No. Because the tenant created by HDFS is not started, the tenant directory will not be registered in HDFS. So the last resource will report an error.
+
+## Q: In the multi-master and multi-worker state, the service is lost, how to be fault-tolerant
+
+A: **Note:** **Master monitors Master and Worker services.**
+
+​    1,If the Master service is lost, other Masters will take over the process of the hanged Master and continue to monitor the Worker task status.
+
+​    2,If the Worker service is lost, the Master will monitor that the Worker service is gone. If there is a Yarn task, the Kill Yarn task will be retried.
+
+Please see the fault-tolerant design in the architecture for details.
+
+---
+
+## Q : Fault tolerance for a machine distributed by Master and Worker
+
+A: The 1.0.3 version only implements the fault tolerance of the Master startup process, and does not take the Worker Fault Tolerance. That is to say, if the Worker hangs, no Master exists. There will be problems with this process. We will add Master and Worker startup fault tolerance in version **1.1.0** to fix this problem. If you want to manually modify this problem, you need to **modify the running task for the running worker task that is running the process across the restart and has [...]
+
+---
+
+## Q : Timing is easy to set to execute every second
+
+A : Note when setting the timing. If the first digit (* * * * * ? *) is set to *, it means execution every second. **We will add a list of recently scheduled times in version 1.1.0.** You can see the last 5 running times online at http://cron.qqe2.com/
+
+
+
+## Q: Is there a valid time range for timing?
+
+A: Yes, **if the timing start and end time is the same time, then this timing will be invalid timing. If the end time of the start and end time is smaller than the current time, it is very likely that the timing will be automatically deleted.**
+
+
+
+## Q : There are several implementations of task dependencies
+
+A:	1, the task dependency between **DAG**, is **from the zero degree** of the DAG segmentation
+
+​	2, there are **task dependent nodes**, you can achieve cross-process tasks or process dependencies, please refer to the (DEPENDENT) node design in the system-manual. 
+
+​	Note: **Cross-project processes or task dependencies are not supported**
+
+## Q: There are several ways to start the process definition.
+
+A:   1, in **the process definition list**, click the **Start** button.
+
+​       2, **the process definition list adds a timer**, scheduling start process definition.
+
+​       3, process definition **view or edit** the DAG page, any **task node right click** Start process definition.
+
+​       4, you can define DAG editing for the process, set the running flag of some tasks to **prohibit running**, when the process definition is started, the connection of the node will be removed from the DAG.
+
+
+
+## Q : Python task setting Python version
+
+A:  1,**for the version after 1.0.3** only need to modify PYTHON_HOME in conf/env/.escheduler_env.sh
+
+```
+export PYTHON_HOME=/bin/python
+```
+
+Note: This is **PYTHON_HOME** , which is the absolute path of the python command, not the simple PYTHON_HOME. Also note that when exporting the PATH, you need to directly
+
+```
+export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH
+```
+
+​	2,For versions prior to 1.0.3, the Python task only supports the Python version of the system. It does not support specifying the Python version.
+
+## Q:Worker Task will generate a child process through sudo -u tenant sh xxx.command, will kill when kill
+
+A:  We will add the kill task in 1.0.4 and kill all the various child processes generated by the task.
+
+
+
+## Q : How to use the queue in EasyScheduler, what does the user queue and tenant queue mean?
+
+A : The queue in the EasyScheduler can be configured on the user or the tenant. **The priority of the queue specified by the user is higher than the priority of the tenant queue.** For example, to specify a queue for an MR task, the queue is specified by mapreduce.job.queuename.
+
+Note: When using the above method to specify the queue, the MR uses the following methods:
+
+```
+	Configuration conf = new Configuration();
+        GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
+        String[] remainingArgs = optionParser.getRemainingArgs();
+```
+
+
+
+If it is a Spark task --queue mode specifies the queue
+
+
+
+## Q : Master or Worker reports the following alarm
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/master_worker_lack_res.png" width="60%" />
+ </p>
+
+
+
+A : Change the value of master.properties **master.reserved.memory** under conf to a smaller value, say 0.1 or the value of worker.properties **worker.reserved.memory** is a smaller value, say 0.1
+
+## Q: The hive version is 1.1.0+cdh5.15.0, and the SQL hive task connection is reported incorrectly.
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/cdh_hive_error.png" width="60%" />
+ </p>
+
+
+A : Will hive pom
+
+```
+<dependency>
+    <groupId>org.apache.hive</groupId>
+    <artifactId>hive-jdbc</artifactId>
+    <version>2.1.0</version>
+</dependency>
+```
+
+change into
+
+```
+<dependency>
+    <groupId>org.apache.hive</groupId>
+    <artifactId>hive-jdbc</artifactId>
+    <version>1.1.0</version>
+</dependency>
+```
diff --git a/docs/en-us/release/1.0.1-release.md b/docs/en-us/release/1.0.1-release.md
new file mode 100755
index 0000000..8613d93
--- /dev/null
+++ b/docs/en-us/release/1.0.1-release.md
@@ -0,0 +1,16 @@
+Easy Scheduler Release 1.0.1
+===
+Easy Scheduler 1.0.1 is the second version in the 1.x series. The update is as follows:
+
+- 1,outlook TSL email support
+- 2,servlet and protobuf jar conflict resolution
+- 3,create a tenant and establish a Linux user at the same time
+- 4,the re-run time is negative
+- 5,stand-alone and cluster can be deployed with one click of install.sh
+- 6,queue support interface added
+- 7,escheduler.t_escheduler_queue added create_time and update_time fields
+
+
+
+
+
diff --git a/docs/en-us/release/1.0.2-release.md b/docs/en-us/release/1.0.2-release.md
new file mode 100755
index 0000000..502dbf8
--- /dev/null
+++ b/docs/en-us/release/1.0.2-release.md
@@ -0,0 +1,49 @@
+Easy Scheduler Release 1.0.2
+===
+Easy Scheduler 1.0.2 is the third version in the 1.x series. This version adds scheduling open interfaces, worker grouping (the machine group for which the specified task runs), task flow and service monitoring, and support for oracle, clickhouse, etc., as follows:
+
+New features:
+===
+- [[EasyScheduler-79](https://github.com/analysys/EasyScheduler/issues/79)] scheduling the open interface through the token mode, which can be operated through the api.
+- [[EasyScheduler-138](https://github.com/analysys/EasyScheduler/issues/138)] can specify the machine (group) where the task runs.
+- [[EasyScheduler-139](https://github.com/analysys/EasyScheduler/issues/139)] task Process Monitoring and Master, Worker, Zookeeper Operation Status Monitoring
+- [[EasyScheduler-140](https://github.com/analysys/EasyScheduler/issues/140)] workflow Definition - Increase Process Timeout Alarm
+- [[EasyScheduler-134](https://github.com/analysys/EasyScheduler/issues/134)] task type supports Oracle, CLICKHOUSE, SQLSERVER, IMPALA
+- [[EasyScheduler-136](https://github.com/analysys/EasyScheduler/issues/136)]  sql task node can independently select CC mail users
+- [[EasyScheduler-141](https://github.com/analysys/EasyScheduler/issues/141)] user Management—Users can bind queues. The user queue level is higher than the tenant queue level. If the user queue is empty, look for the tenant queue.
+
+
+
+Enhanced:
+===
+- [[EasyScheduler-154](https://github.com/analysys/EasyScheduler/issues/154)] Tenant code allows encoding of pure numbers or underscores
+
+
+Repair:
+===
+- [[EasyScheduler-135](https://github.com/analysys/EasyScheduler/issues/135)] Python task can specify python version
+
+- [[EasyScheduler-125](https://github.com/analysys/EasyScheduler/issues/125)] The mobile phone number in the user account does not recognize the opening of Unicom's latest number 166
+
+- [[EasyScheduler-178](https://github.com/analysys/EasyScheduler/issues/178)] Fix subtle spelling mistakes in ProcessDao
+
+- [[EasyScheduler-129](https://github.com/analysys/EasyScheduler/issues/129)] Tenant code, underlined and other special characters cannot pass the check.
+
+
+Thank:
+===
+Last but not least, no new version was born without the contributions of the following partners:
+
+Baoqi , chubbyjiang , coreychen , chgxtony, cmdares , datuzi , dingchao, fanguanqun , 风清扬, gaojun416 , googlechorme, hyperknob , hujiang75277381 , huanzui , kinssun, ivivi727 ,jimmy, jiangzhx , kevin5210 , lidongdai , lshmouse , lenboo, lyf198972 , lgcareer , lzy305 ,  moranrr ,  millionfor , mazhong8808, programlief, qiaozhanwei , roy110 , swxchappy , sherlock111 , samz406 , swxchappy, qq389401879 , lzy305,  vkingnew, William-GuoWei , woniulinux, yyl861, zhangxin1988, yangjiajun2014, ya [...]
+
+And many enthusiastic partners in the WeChat group! Thank you very much!
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/en-us/release/1.0.3-release.md b/docs/en-us/release/1.0.3-release.md
new file mode 100755
index 0000000..b87f894
--- /dev/null
+++ b/docs/en-us/release/1.0.3-release.md
@@ -0,0 +1,30 @@
+Easy Scheduler Release 1.0.3
+===
+Easy Scheduler 1.0.3 is the fourth version in the 1.x series.
+
+Enhanced:
+===
+-  [[EasyScheduler-482]](https://github.com/analysys/EasyScheduler/issues/482)sql task mail header added support for custom variables
+-  [[EasyScheduler-483]](https://github.com/analysys/EasyScheduler/issues/483)sql task failed to send mail, then this sql task is failed
+-  [[EasyScheduler-484]](https://github.com/analysys/EasyScheduler/issues/484)modify the replacement rule of the custom variable in the sql task, and support the replacement of multiple single quotes and double quotes.
+-   [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/485)when creating a resource file, increase the verification that the resource file already exists on hdfs
+
+Repair:
+===
+-  [[EasyScheduler-198]](https://github.com/analysys/EasyScheduler/issues/198) the process definition list is sorted according to the timing status and update time
+-  [[EasyScheduler-419]](https://github.com/analysys/EasyScheduler/issues/419)  fixes online creation of files, hdfs file is not created, but returns successfully
+-  [[EasyScheduler-481] ](https://github.com/analysys/EasyScheduler/issues/481)fixes the problem that the job does not exist at the same time.
+-  [[EasyScheduler-425]](https://github.com/analysys/EasyScheduler/issues/425) kills the kill of its child process when killing the task
+-  [[EasyScheduler-422]](https://github.com/analysys/EasyScheduler/issues/422) fixed an issue where the update time and size were not updated when updating resource files
+-  [[EasyScheduler-431]](https://github.com/analysys/EasyScheduler/issues/431) fixed an issue where deleting a tenant failed if hdfs was not started when the tenant was deleted
+-  [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/486) the shell process exits, the yarn state is not final and waits for judgment.
+
+Thank:
+===
+Last but not least, no new version was born without the contributions of the following partners:
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, 
+feloxx, coding-now, hymzcn, nysyxxg, chgxtony 
+
+And many enthusiastic partners in the WeChat group! Thank you very much!
+
diff --git a/docs/en-us/release/1.0.4-release.md b/docs/en-us/release/1.0.4-release.md
new file mode 100755
index 0000000..f7b1089
--- /dev/null
+++ b/docs/en-us/release/1.0.4-release.md
@@ -0,0 +1,2 @@
+# 1.0.4 release
+
diff --git a/docs/en-us/release/1.0.5-release.md b/docs/en-us/release/1.0.5-release.md
new file mode 100755
index 0000000..ce945e2
--- /dev/null
+++ b/docs/en-us/release/1.0.5-release.md
@@ -0,0 +1,2 @@
+# 1.0.5 release
+
diff --git a/docs/en-us/release/1.1.0-release.md b/docs/en-us/release/1.1.0-release.md
new file mode 100755
index 0000000..c9ebe71
--- /dev/null
+++ b/docs/en-us/release/1.1.0-release.md
@@ -0,0 +1,55 @@
+Easy Scheduler Release 1.1.0
+===
+Easy Scheduler 1.1.0 is the first release in the 1.1.x series.
+
+New features:
+===
+- [[EasyScheduler-391](https://github.com/analysys/EasyScheduler/issues/391)] run a process under a specified tenement user
+- [[EasyScheduler-288](https://github.com/analysys/EasyScheduler/issues/288)] feature/qiye_weixin
+- [[EasyScheduler-189](https://github.com/analysys/EasyScheduler/issues/189)] security support such as Kerberos
+- [[EasyScheduler-398](https://github.com/analysys/EasyScheduler/issues/398)]dministrator, with tenants (install.sh set default tenant), can create resources, projects and data sources (limited to one administrator)
+- [[EasyScheduler-293](https://github.com/analysys/EasyScheduler/issues/293)]click on the parameter selected when running the process, there is no place to view, no save
+- [[EasyScheduler-401](https://github.com/analysys/EasyScheduler/issues/401)]timing is easy to time every second. After the timing is completed, you can display the next trigger time on the page.
+- [[EasyScheduler-493](https://github.com/analysys/EasyScheduler/pull/493)]add datasource kerberos auth and FAQ modify and add resource upload s3
+
+
+Enhanced:
+===
+- [[EasyScheduler-227](https://github.com/analysys/EasyScheduler/issues/227)] upgrade spring-boot to 2.1.x and spring to 5.x
+- [[EasyScheduler-434](https://github.com/analysys/EasyScheduler/issues/434)] number of worker nodes zk and mysql are inconsistent
+- [[EasyScheduler-435](https://github.com/analysys/EasyScheduler/issues/435)]authentication of the mailbox format
+- [[EasyScheduler-441](https://github.com/analysys/EasyScheduler/issues/441)] prohibits running nodes from joining completed node detection
+- [[EasyScheduler-400](https://github.com/analysys/EasyScheduler/issues/400)] Home page, queue statistics are not harmonious, command statistics have no data
+- [[EasyScheduler-395](https://github.com/analysys/EasyScheduler/issues/395)] For fault-tolerant recovery processes, the status cannot be ** is running
+- [[EasyScheduler-529](https://github.com/analysys/EasyScheduler/issues/529)] optimize poll task from zookeeper
+- [[EasyScheduler-242](https://github.com/analysys/EasyScheduler/issues/242)]worker-server node gets task performance problem
+- [[EasyScheduler-352](https://github.com/analysys/EasyScheduler/issues/352)]worker grouping, queue consumption problem
+- [[EasyScheduler-461](https://github.com/analysys/EasyScheduler/issues/461)]view data source parameters, need to encrypt account password information
+- [[EasyScheduler-396](https://github.com/analysys/EasyScheduler/issues/396)]Dockerfile optimization, and associated Dockerfile and github to achieve automatic mirroring
+- [[EasyScheduler-389](https://github.com/analysys/EasyScheduler/issues/389)]service monitor cannot find the change of master/worker
+- [[EasyScheduler-511](https://github.com/analysys/EasyScheduler/issues/511)]support recovery process from stop/kill nodes.
+- [[EasyScheduler-399](https://github.com/analysys/EasyScheduler/issues/399)]HadoopUtils specifies user actions instead of **Deploying users
+
+Repair:
+===
+- [[EasyScheduler-394](https://github.com/analysys/EasyScheduler/issues/394)] When the master&worker is deployed on the same machine, if the master&worker service is restarted, the previously scheduled tasks cannot be scheduled.
+- [[EasyScheduler-469](https://github.com/analysys/EasyScheduler/issues/469)]Fix naming errors,monitor page
+- [[EasyScheduler-392](https://github.com/analysys/EasyScheduler/issues/392)]Feature request: fix email regex check
+- [[EasyScheduler-405](https://github.com/analysys/EasyScheduler/issues/405)]timed modification/addition page, start time and end time cannot be the same
+- [[EasyScheduler-517](https://github.com/analysys/EasyScheduler/issues/517)]complement - subworkflow - time parameter 
+- [[EasyScheduler-532](https://github.com/analysys/EasyScheduler/issues/532)] python node does not execute the problem
+- [[EasyScheduler-543](https://github.com/analysys/EasyScheduler/issues/543)]optimize datasource connection params safety
+- [[EasyScheduler-569](https://github.com/analysys/EasyScheduler/issues/569)] timed tasks can't really stop
+- [[EasyScheduler-463](https://github.com/analysys/EasyScheduler/issues/463)]mailbox verification does not support very suffixed mailboxes
+
+
+
+
+Thank:
+===
+Last but not least, no new version was born without the contributions of the following partners:
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, chgxtony, Stanfan, lfyee, thisnew, hujiang75277381, sunnyingit, lgbo-ustc, ivivi, lzy305, JackIllkid, telltime, lipengbo2018, wuchunfu, telltime
+
+And many enthusiastic partners in the WeChat group! Thank you very much!
+
diff --git a/docs/en-us/release/upgrade.md b/docs/en-us/release/upgrade.md
new file mode 100755
index 0000000..fe2a1b0
--- /dev/null
+++ b/docs/en-us/release/upgrade.md
@@ -0,0 +1,39 @@
+
+# EasyScheduler upgrade documentation
+
+## 1. Back up the previous version of the files and database
+
+## 2. Stop all services of escheduler
+
+ `sh ./script/stop-all.sh`
+
+## 3. Download the new version of the installation package
+
+- [gitee](https://gitee.com/easyscheduler/EasyScheduler/attach_files), download the latest version of the front and back installation packages (backend referred to as escheduler-backend, front end referred to as escheduler-ui)
+- The following upgrade operations need to be performed in the new version of the directory
+
+## 4. Database upgrade
+- Modify the following properties in conf/dao/data_source.properties
+
+```
+    spring.datasource.url
+    spring.datasource.username
+    spring.datasource.password
+```
+
+- Execute database upgrade script
+
+`sh ./script/upgrade-escheduler.sh`
+
+## 5. Backend service upgrade
+
+- Modify the content of the install.sh configuration and execute the upgrade script
+  
+  `sh install.sh`
+
+## 6. Frontend service upgrade
+
+- Overwrite the previous version of the dist directory
+- Restart the nginx service
+  
+    `systemctl restart nginx`
diff --git a/docs/en-us/user_doc/backend-deployment.md b/docs/en-us/user_doc/backend-deployment.md
new file mode 100755
index 0000000..934a005
--- /dev/null
+++ b/docs/en-us/user_doc/backend-deployment.md
@@ -0,0 +1,207 @@
+# Backend Deployment Document
+
+There are two deployment modes for the backend: 
+
+- automatic deployment  
+- source code compile and then deployment
+
+## Preparations
+
+Download the latest version of the installation package, download address: [gitee download](https://gitee.com/easyscheduler/EasyScheduler/attach_files/) or [github download](https://github.com/analysys/EasyScheduler/releases), download escheduler-backend-x.x.x.tar.gz(back-end referred to as escheduler-backend),escheduler-ui-x.x.x.tar.gz(front-end referred to as escheduler-ui)
+
+
+
+#### Preparations 1: Installation of basic software (self-installation of required items)
+
+ * [Mysql](http://geek.analysys.cn/topic/124) (5.5+) :  Mandatory
+ * [JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html) (1.8+) :  Mandatory
+ * [ZooKeeper](https://www.jianshu.com/p/de90172ea680)(3.4.6+) :Mandatory
+ * [Hadoop](https://blog.csdn.net/Evankaka/article/details/51612437)(2.6+) :Optionally, if you need to use the resource upload function, MapReduce task submission needs to configure Hadoop (uploaded resource files are currently stored on Hdfs)
+ * [Hive](https://staroon.pro/2017/12/09/HiveInstall/)(1.2.1) :   Optional, hive task submission needs to be installed
+ * Spark(1.x,2.x) :  Optional, Spark task submission needs to be installed
+ * PostgreSQL(8.2.15+) : Optional, PostgreSQL PostgreSQL stored procedures need to be installed
+
+```
+ Note: Easy Scheduler itself does not rely on Hadoop, Hive, Spark, PostgreSQL, but only calls their Client to run the corresponding tasks.
+```
+
+#### Preparations 2: Create deployment users
+
+- Deployment users are created on all machines that require deployment scheduling, because the worker service executes jobs in `sudo-u {linux-user}`, so deployment users need sudo privileges and are confidential.
+
+```
+vi /etc/sudoers
+
+# For example, the deployment user is an escheduler account
+escheduler  ALL=(ALL)       NOPASSWD: NOPASSWD: ALL
+
+# And you need to comment out the Default requiretty line
+#Default requiretty
+```
+
+#### Preparations 3: SSH Secret-Free Configuration
+Configure SSH secret-free login on deployment machines and other installation machines. If you want to install easyscheduler on deployment machines, you need to configure native password-free login itself.
+
+- [Connect the host and other machines SSH](http://geek.analysys.cn/topic/113)
+
+#### Preparations 4: database initialization
+
+* Create databases and accounts
+
+    Execute the following command to create database and account
+    
+    ```
+    CREATE DATABASE escheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
+    GRANT ALL PRIVILEGES ON escheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
+    GRANT ALL PRIVILEGES ON escheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
+    flush privileges;
+    ```
+
+* creates tables and imports basic data
+    Modify the following attributes in ./conf/dao/data_source.properties
+
+    ```
+        spring.datasource.url
+        spring.datasource.username
+        spring.datasource.password
+    ```
+    
+    Execute scripts for creating tables and importing basic data
+    
+    ```
+    sh ./script/create-escheduler.sh
+    ```
+
+#### Preparations 5: Modify the deployment directory permissions and operation parameters
+
+     instruction of escheduler-backend directory 
+
+```directory
+bin : Basic service startup script
+conf : Project Profile
+lib : The project relies on jar packages, including individual module jars and third-party jars
+script :  Cluster Start, Stop and Service Monitor Start and Stop scripts
+sql : The project relies on SQL files
+install.sh :  One-click deployment script
+```
+
+- Modify permissions (please modify the 'deployUser' to the corresponding deployment user) so that the deployment user has operational privileges on the escheduler-backend directory
+
+    `sudo chown -R deployUser:deployUser escheduler-backend`
+
+- Modify the `.escheduler_env.sh` environment variable in the conf/env/directory
+
+- Modify deployment parameters (depending on your server and business situation):
+
+ - Modify the parameters in **install.sh** to replace the values required by your business
+   - MonitorServerState switch variable, added in version 1.0.3, controls whether to start the self-start script (monitor master, worker status, if off-line will start automatically). The default value of "false" means that the self-start script is not started, and if it needs to start, it is changed to "true".
+   - 'hdfsStartupSate' switch variable controls whether to start hdfs
+      The default value of "false" means not to start hdfs
+      Change the variable to 'true' if you want to use hdfs, you also need to create the hdfs root path by yourself, that 'hdfsPath' in install.sh.
+
+ - If you use hdfs-related functions, you need to copy**hdfs-site.xml** and **core-site.xml** to the conf directory
+
+
+## Deployment
+Automated deployment is recommended, and experienced partners can use source deployment as well.
+
+### Automated Deployment
+
+- Install zookeeper tools
+
+   `pip install kazoo`
+
+- Switch to deployment user, one-click deployment
+
+    `sh install.sh` 
+
+- Use the `jps` command to check if the services are started (`jps` comes from `Java JDK`)
+
+```aidl
+    MasterServer         ----- Master Service
+    WorkerServer         ----- Worker Service
+    LoggerServer         ----- Logger Service
+    ApiApplicationServer ----- API Service
+    AlertServer          ----- Alert Service
+```
+
+If all services are normal, the automatic deployment is successful
+
+
+After successful deployment, the log can be viewed and stored in a specified folder.
+
+```logPath
+ logs/
+    ├── escheduler-alert-server.log
+    ├── escheduler-master-server.log
+    |—— escheduler-worker-server.log
+    |—— escheduler-api-server.log
+    |—— escheduler-logger-server.log
+```
+
+### Compile source code to deploy
+
+After downloading the release version of the source package, unzip it into the root directory
+
+* Execute the compilation command:
+
+```
+ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
+```
+
+* View directory
+
+After normal compilation, ./target/escheduler-{version}/ is generated in the current directory
+
+
+### Start-and-stop services commonly used in systems (for service purposes, please refer to System Architecture Design for details)
+
+* stop all services in the cluster
+  
+   ` sh ./bin/stop-all.sh`
+   
+* start all services in the cluster
+  
+   ` sh ./bin/start-all.sh`
+
+* start and stop one master server
+
+```master
+sh ./bin/escheduler-daemon.sh start master-server
+sh ./bin/escheduler-daemon.sh stop master-server
+```
+
+* start and stop one worker server
+
+```worker
+sh ./bin/escheduler-daemon.sh start worker-server
+sh ./bin/escheduler-daemon.sh stop worker-server
+```
+
+* start and stop api server
+
+```Api
+sh ./bin/escheduler-daemon.sh start api-server
+sh ./bin/escheduler-daemon.sh stop api-server
+```
+* start and stop logger server
+
+```Logger
+sh ./bin/escheduler-daemon.sh start logger-server
+sh ./bin/escheduler-daemon.sh stop logger-server
+```
+* start and stop alert server
+
+```Alert
+sh ./bin/escheduler-daemon.sh start alert-server
+sh ./bin/escheduler-daemon.sh stop alert-server
+```
+
+## Database Upgrade
+Database upgrade is a function added in version 1.0.2. The database can be upgraded automatically by executing the following command:
+
+```upgrade
+sh ./script/upgrade-escheduler.sh
+```
+
+
diff --git a/docs/en-us/user_doc/frontend-deployment.md b/docs/en-us/user_doc/frontend-deployment.md
new file mode 100755
index 0000000..919caf1
--- /dev/null
+++ b/docs/en-us/user_doc/frontend-deployment.md
@@ -0,0 +1,115 @@
+# frontend-deployment
+
+The front-end has three deployment modes: automated deployment, manual deployment and compiled source deployment.
+
+
+
+## Preparations
+
+#### Download the installation package
+
+Please download the latest version of the installation package, download address: [gitee](https://gitee.com/easyscheduler/EasyScheduler/attach_files/)
+
+After downloading escheduler-ui-x.x.x.tar.gz,decompress`tar -zxvf escheduler-ui-x.x.x.tar.gz ./`and enter the`escheduler-ui`directory
+
+
+
+
+## Deployment
+
+Automated deployment is recommended for either of the following two ways
+
+### Automated Deployment
+
+Edit the installation file`vi install-escheduler-ui.sh` in the` escheduler-ui` directory
+
+Change the front-end access port and the back-end proxy interface address
+
+```
+# Configure the front-end access port
+esc_proxy="8888"
+
+# Configure proxy back-end interface
+esc_proxy_port="http://192.168.xx.xx:12345"
+```
+
+>Front-end automatic deployment based on Linux system `yum` operation, before deployment, please install and update`yum`
+
+under this directory, execute`./install-escheduler-ui.sh` 
+
+
+### Manual Deployment
+
+Install epel source `yum install epel-release -y`
+
+Install Nginx `yum install nginx -y`
+
+
+> ####  Nginx configuration file address
+
+```
+/etc/nginx/conf.d/default.conf
+```
+
+> ####  Configuration information (self-modifying)
+
+```
+server {
+    listen       8888;# access port
+    server_name  localhost;
+    #charset koi8-r;
+    #access_log  /var/log/nginx/host.access.log  main;
+    location / {
+        root   /xx/dist; # the dist directory address decompressed by the front end above (self-modifying)
+        index  index.html index.html;
+    }
+    location /escheduler {
+        proxy_pass http://192.168.xx.xx:12345; # interface address (self-modifying)
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header x_real_ipP $remote_addr;
+        proxy_set_header remote_addr $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+        proxy_connect_timeout 4s;
+        proxy_read_timeout 30s;
+        proxy_send_timeout 12s;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    #error_page  404              /404.html;
+    # redirect server error pages to the static page /50x.html
+    #
+    error_page   500 502 503 504  /50x.html;
+    location = /50x.html {
+        root   /usr/share/nginx/html;
+    }
+}
+```
+
+> ####  Restart the Nginx service
+
+```
+systemctl restart nginx
+```
+
+#### nginx command
+
+- enable `systemctl enable nginx`
+
+- restart `systemctl restart nginx`
+
+- status `systemctl status nginx`
+
+
+## FAQ
+#### Upload file size limit
+
+Edit the configuration file `vi /etc/nginx/nginx.conf`
+
+```
+# change upload size
+client_max_body_size 1024m
+```
+
+
diff --git a/docs/en-us/user_doc/quick-start.md b/docs/en-us/user_doc/quick-start.md
new file mode 100755
index 0000000..a1dc255
--- /dev/null
+++ b/docs/en-us/user_doc/quick-start.md
@@ -0,0 +1,53 @@
+# Quick Start
+
+* Administrator user login
+
+  > Address:192.168.xx.xx:8888  Username and password:admin/escheduler123
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/48329107/61701549-ee738000-ad70-11e9-8d75-87ce04a0152f.png" width="60%" />
+ </p>
+
+* Create queue
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/48329107/61701943-896c5a00-ad71-11e9-99b8-a279762f1bc8.png" width="60%" />
+ </p>
+
+  * Create tenant
+      <p align="center">
+    <img src="https://user-images.githubusercontent.com/48329107/61702051-bb7dbc00-ad71-11e9-86e1-1c328cafe916.png" width="60%" />
+  </p>
+
+  * Creating Ordinary Users
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61704402-3517a900-ad76-11e9-865a-6325041d97e2.png" width="60%" />
+ </p>
+
+  * Create an alarm group
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61704553-845dd980-ad76-11e9-85f1-05f33111409e.png" width="60%" />
+  </p>
+
+  * Log in with regular users
+  > Click on the user name in the upper right corner to "exit" and re-use the normal user login.
+
+  * Project Management - > Create Project - > Click on Project Name
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61704688-dd2d7200-ad76-11e9-82ee-0833b16bd88f.png" width="60%" />
+ </p>
+
+  * Click Workflow Definition - > Create Workflow Definition - > Online Process Definition
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61705638-c425c080-ad78-11e9-8619-6c21b61a24c9.png" width="60%" />
+ </p>
+
+  * Running Process Definition - > Click Workflow Instance - > Click Process Instance Name - > Double-click Task Node - > View Task Execution Log
+
+ <p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61705356-34801200-ad78-11e9-8d60-9b7494231028.png" width="60%" />
+</p>
+
+
diff --git a/docs/en-us/user_doc/system-manual.md b/docs/en-us/user_doc/system-manual.md
new file mode 100755
index 0000000..d571e1d
--- /dev/null
+++ b/docs/en-us/user_doc/system-manual.md
@@ -0,0 +1,699 @@
+# System Use Manual
+
+## Operational Guidelines
+
+### Create a project
+
+  - Click "Project - > Create Project", enter project name,  description, and click "Submit" to create a new project.
+  - Click on the project name to enter the project home page.
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61776719-2ee50380-ae2e-11e9-9d11-41de8907efb5.png" width="60%" />
+ </p>
+
+> Project Home Page contains task status statistics, process status statistics.
+
+ - Task State Statistics: It refers to the statistics of the number of tasks to be run, failed, running, completed and succeeded in a given time frame.
+ - Process State Statistics: It refers to the statistics of the number of waiting, failing, running, completing and succeeding process instances in a specified time range.
+ - Process Definition Statistics: The process definition created by the user and the process definition granted by the administrator to the user are counted.
+
+
+### Creating Process definitions
+  - Go to the project home page, click "Process definitions" and enter the list page of process definition.
+  - Click "Create process" to create a new process definition.
+  - Drag the "SHELL" node to the canvas and add a shell task.
+  - Fill in the Node Name, Description, and Script fields.
+  - Selecting "task priority" will give priority to high-level tasks in the execution queue. Tasks with the same priority will be executed in the first-in-first-out order.
+  - Timeout alarm. Fill in "Overtime Time". When the task execution time exceeds the overtime, it can alarm and fail over time.
+  - Fill in "Custom Parameters" and refer to [Custom Parameters](#Custom Parameters)
+    <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61778402-42459e00-ae31-11e9-96c6-8fd7fed8fed2.png" width="60%" />
+      </p>
+  - Increase the order of execution between nodes: click "line connection". As shown, task 1 and task 3 are executed in parallel. When task 1 is executed, task 2 and task 3 are executed simultaneously.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61778247-f98de500-ae30-11e9-8f11-cce0530c3ff2.png" width="60%" />
+ </p>
+
+  - Delete dependencies: Click on the arrow icon to "drag nodes and select items", select the connection line, click on the delete icon to delete dependencies between nodes.
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61778800-052ddb80-ae32-11e9-8ac0-4f13466d3515.png" width="60%" />
+ </p>
+
+  - Click "Save", enter the name of the process definition, the description of the process definition, and set the global parameters.
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/save-definition.png" width="60%" />
+ </p>
+
+  - For other types of nodes, refer to [task node types and parameter settings](#task node types and parameter settings)
+
+### Execution process definition
+  - **The process definition of the off-line state can be edited, but not run**, so the on-line workflow is the first step.
+  > Click on the Process definition, return to the list of process definitions, click on the icon "online", online process definition.
+
+  > Before setting workflow offline, the timed tasks in timed management should be offline, so that the definition of workflow can be set offline successfully. 
+
+  - Click "Run" to execute the process. Description of operation parameters:
+    * Failure strategy:**When a task node fails to execute, other parallel task nodes need to execute the strategy**。”Continue "Representation: Other task nodes perform normally", "End" Representation: Terminate all ongoing tasks and terminate the entire process.
+    * Notification strategy:When the process is over, send process execution information notification mail according to the process status.
+    * Process priority: The priority of process running is divided into five levels:the highest, the high, the medium, the low, and the lowest . High-level processes are executed first in the execution queue, and processes with the same priority are executed first in first out order.
+    * Worker group: This process can only be executed in a specified machine group. Default, by default, can be executed on any worker.
+    * Notification group: When the process ends or fault tolerance occurs, process information is sent to all members of the notification group by mail.
+    * Recipient: Enter the mailbox and press Enter key to save. When the process ends and fault tolerance occurs, an alert message is sent to the recipient list.
+    * Cc: Enter the mailbox and press Enter key to save. When the process is over and fault-tolerant occurs, alarm messages are copied to the copier list.
+    
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/start-process.png" width="60%" />
+ </p>
+
+  * Complement: To implement the workflow definition of a specified date, you can select the time range of the complement (currently only support for continuous days), such as the data from May 1 to May 10, as shown in the figure:
+  
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/complement.png" width="60%" />
+ </p>
+
+> Complement execution mode includes serial execution and parallel execution. In serial mode, the complement will be executed sequentially from May 1 to May 10. In parallel mode, the tasks from May 1 to May 10 will be executed simultaneously.
+
+### Timing Process Definition
+  - Create Timing: "Process Definition - > Timing"
+  - Choose start-stop time, in the start-stop time range, regular normal work, beyond the scope, will not continue to produce timed workflow instances.
+  
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/timing.png" width="60%" />
+ </p>
+
+  - Add a timer to be executed once a day at 5:00 a.m. as shown below:
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61781968-d9adef80-ae37-11e9-9e90-3d9f0b3eb998.png" width="60%" />
+ </p>
+
+  - Timely online,**the newly created timer is offline. You need to click "Timing Management - >online" to work properly.**
+
+### View process instances
+  > Click on "Process Instances" to view the list of process instances.
+
+  > Click on the process name to see the status of task execution.
+
+  <p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61855837-6ff31b80-aef3-11e9-8464-2fb5773709df.png" width="60%" />
+ </p>
+
+  > Click on the task node, click "View Log" to view the task execution log.
+
+  <p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783070-bdab4d80-ae39-11e9-9ada-355614fbb7f7.png" width="60%" />
+ </p>
+
+ > Click on the task instance node, click **View History** to view the list of task instances that the process instance runs.
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61783240-05ca7000-ae3a-11e9-8c10-591a7635834a.png" width="60%" />
+  </p>
+
+
+  > Operations on workflow instances:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783291-21357b00-ae3a-11e9-837c-fc3d85404410.png" width="60%" />
+</p>
+
+  * Editor: You can edit the terminated process. When you save it after editing, you can choose whether to update the process definition or not.
+  * Rerun: A process that has been terminated can be re-executed.
+  * Recovery failure: For a failed process, a recovery failure operation can be performed, starting at the failed node.
+  * Stop: Stop the running process, the background will `kill` he worker process first, then `kill -9` operation.
+  * Pause:The running process can be **suspended**, the system state becomes **waiting to be executed**, waiting for the end of the task being executed, and suspending the next task to be executed.
+  * Restore pause: **The suspended process** can be restored and run directly from the suspended node
+  * Delete: Delete process instances and task instances under process instances
+  * Gantt diagram: The vertical axis of Gantt diagram is the topological ordering of task instances under a process instance, and the horizontal axis is the running time of task instances, as shown in the figure:
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61783596-aa4cb200-ae3a-11e9-9798-e795f80dae96.png" width="60%" />
+</p>
+
+### View task instances
+  > Click on "Task Instance" to enter the Task List page and query the performance of the task.
+  >
+  >
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783544-91dc9780-ae3a-11e9-9dca-dfd901f1fe83.png" width="60%" />
+</p>
+
+  > Click "View Log" in the action column to view the log of task execution.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783441-60fc6280-ae3a-11e9-8631-963dcf78467b.png" width="60%" />
+</p>
+
+### Create data source
+  > Data Source Center supports MySQL, POSTGRESQL, HIVE and Spark data sources.
+
+#### Create and edit MySQL data source
+
+  - Click on "Datasource - > Create Datasources" to create different types of datasources according to requirements.
+- Datasource: Select MYSQL
+- Datasource Name: Name of Input Datasource
+- Description: Description of input datasources
+- IP: Enter the IP to connect to MySQL
+- Port: Enter the port to connect MySQL
+- User name: Set the username to connect to MySQL
+- Password: Set the password to connect to MySQL
+- Database name: Enter the name of the database connecting MySQL
+- Jdbc connection parameters: parameter settings for MySQL connections, filled in as JSON
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783812-129b9380-ae3b-11e9-9b9c-77870371c5f3.png" width="60%" />
+ </p>
+
+  > Click "Test Connect" to test whether the data source can be successfully connected.
+  >
+  >
+
+#### Create and edit POSTGRESQL data source
+
+- Datasource: Select POSTGRESQL
+- Datasource Name: Name of Input Data Source
+- Description: Description of input data sources
+- IP: Enter IP to connect to POSTGRESQL
+- Port: Input port to connect POSTGRESQL
+- Username: Set the username to connect to POSTGRESQL
+- Password: Set the password to connect to POSTGRESQL
+- Database name: Enter the name of the database connecting to POSTGRESQL
+- Jdbc connection parameters: parameter settings for POSTGRESQL connections, filled in as JSON
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61783968-60180080-ae3b-11e9-91b7-36d49246a205.png" width="60%" />
+ </p>
+
+#### Create and edit HIVE data source
+
+1.Connect with HiveServer 2
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61784129-b9802f80-ae3b-11e9-8a27-7be23e0953be.png" width="60%" />
+  </p>
+
+  - Datasource: Select HIVE
+- Datasource Name: Name of Input Datasource
+- Description: Description of input datasources
+- IP: Enter IP to connect to HIVE
+- Port: Input port to connect to HIVE
+- Username: Set the username to connect to HIVE
+- Password: Set the password to connect to HIVE
+- Database Name: Enter the name of the database connecting to HIVE
+- Jdbc connection parameters: parameter settings for HIVE connections, filled in in as JSON
+
+2.Connect using Hive Server 2 HA Zookeeper mode
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61784420-3dd2b280-ae3c-11e9-894a-5b896863d37a.png" width="60%" />
+  </p>
+
+
+Note: If **kerberos** is turned on, you need to fill in **Principal**
+<p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61784847-0adcee80-ae3d-11e9-8ac7-ba8a13aef90c.png" width="60%" />
+  </p>
+
+
+
+
+#### Create and Edit Datasource
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/48329107/61853431-7af77d00-aeee-11e9-8e2e-95ba6cea43c8.png" width="60%" />
+ </p>
+
+- Datasource: Select Spark
+- Datasource Name: Name of Input Datasource
+- Description: Description of input datasources
+- IP: Enter the IP to connect to Spark
+- Port: Input port to connect Spark
+- Username: Set the username to connect to Spark
+- Password: Set the password to connect to Spark
+- Database name: Enter the name of the database connecting to Spark
+- Jdbc Connection Parameters: Parameter settings for Spark Connections, filled in as JSON
+
+
+
+Note: If **kerberos** If Kerberos is turned on, you need to fill in  **Principal**
+
+<p align="center">
+    <img src="https://user-images.githubusercontent.com/48329107/61853668-0709a480-aeef-11e9-8960-92107dd1a9ca.png" width="60%" />
+  </p>
+
+### Upload Resources
+  - Upload resource files and udf functions, all uploaded files and resources will be stored on hdfs, so the following configuration items are required:
+
+```
+conf/common/common.properties
+    -- hdfs.startup.state=true
+conf/common/hadoop.properties  
+    -- fs.defaultFS=hdfs://xxxx:8020  
+    -- yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
+    -- yarn.application.status.address=http://xxxx:8088/ws/v1/cluster/apps/%s
+```
+
+#### File Manage
+
+  > It is the management of various resource files, including creating basic txt/log/sh/conf files, uploading jar packages and other types of files, editing, downloading, deleting and other operations.
+  >
+  >
+  > <p align="center">
+  >  <img src="https://user-images.githubusercontent.com/53217792/61785274-ed5c5480-ae3d-11e9-8461-2178f49b228d.png" width="60%" />
+  > </p>
+
+  * Create file
+ > File formats support the following types:txt、log、sh、conf、cfg、py、java、sql、xml、hql
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61841049-f133b980-aec5-11e9-8ac8-db97cdccc599.png" width="60%" />
+ </p>
+
+  * Upload Files
+
+> Upload Files: Click the Upload button to upload, drag the file to the upload area, and the file name will automatically complete the uploaded file name.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61841179-73bc7900-aec6-11e9-8780-28756e684754.png" width="60%" />
+ </p>
+
+
+  * File View
+
+> For viewable file types, click on the file name to view file details
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61841247-9cdd0980-aec6-11e9-9f6f-0a7dd145f865.png" width="60%" />
+ </p>
+
+  * Download files
+
+> You can download a file by clicking the download button in the top right corner of the file details, or by downloading the file under the download button after the file list.
+
+  * File rename
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61841322-f47b7500-aec6-11e9-93b1-b00328e7b69e.png" width="60%" />
+ </p>
+
+#### Delete
+>  File List - > Click the Delete button to delete the specified file
+
+#### Resource management
+  > Resource management and file management functions are similar. The difference is that resource management is the UDF function of uploading, and file management uploads user programs, scripts and configuration files.
+
+  * Upload UDF resources
+  > The same as uploading files.
+
+#### Function management
+
+  * Create UDF Functions
+  > Click "Create UDF Function", enter parameters of udf function, select UDF resources, and click "Submit" to create udf function.
+  >
+  >
+  >
+  > Currently only temporary udf functions for HIVE are supported
+  >
+  > 
+  >
+  > - UDF function name: name when entering UDF Function
+  > - Package Name: Full Path of Input UDF Function
+  > - Parameter: Input parameters used to annotate functions
+  > - Database Name: Reserved Field for Creating Permanent UDF Functions
+  > - UDF Resources: Set up the resource files corresponding to the created UDF
+  >
+  > 
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61841562-c6e2fb80-aec7-11e9-9481-4202d63dab6f.png" width="60%" />
+ </p>
+
+## Security
+
+  - The security has the functions of queue management, tenant management, user management, warning group management, worker group manager, token manage and other functions. It can also authorize resources, data sources, projects, etc.
+- Administrator login, default username password: admin/escheduler 123
+
+
+
+### Create queues
+
+
+
+  - Queues are used to execute spark, mapreduce and other programs, which require the use of "queue" parameters.
+- "Security" - > "Queue Manage" - > "Create Queue" 
+     <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61841945-078f4480-aec9-11e9-92fb-05b6f42f07d6.png" width="60%" />
+  </p>
+
+
+### Create Tenants
+  - The tenant corresponds to the account of Linux, which is used by the worker server to submit jobs. If Linux does not have this user, the worker would create the account when executing the task.
+  - Tenant Code:**the tenant code is the only account on Linux that can't be duplicated.**
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61842372-8042d080-aeca-11e9-8c54-e3dee583eeff.png" width="60%" />
+  </p>
+
+### Create Ordinary Users
+  -  User types are **ordinary users** and **administrator users**..
+    * Administrators have **authorization and user management** privileges, and no privileges to **create project and process-defined operations**.
+    * Ordinary users can **create projects and create, edit, and execute process definitions**.
+    * Note: **If the user switches the tenant, all resources under the tenant will be copied to the switched new tenant.**
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61842461-da439600-aeca-11e9-98e3-f8327dbafa60.png" width="60%" />
+ </p>
+
+### Create alarm group
+  * The alarm group is a parameter set at start-up. After the process is finished, the status of the process and other information will be sent to the alarm group by mail.
+  * New and Editorial Warning Group
+    <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61842553-34445b80-aecb-11e9-84a8-3cc66b6c6135.png" width="60%" />
+    </p>
+
+### Create Worker Group
+  - Worker group provides a mechanism for tasks to run on a specified worker. Administrators create worker groups, which can be specified in task nodes and operation parameters. If the specified grouping is deleted or no grouping is specified, the task will run on any worker.
+- Multiple IP addresses within a worker group (**aliases can not be written**), separated by **commas in English**
+
+  <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61842630-6b1a7180-aecb-11e9-8988-b4444de16b36.png" width="60%" />
+  </p>
+
+### Token manage
+  - Because the back-end interface has login check and token management, it provides a way to operate the system by calling the interface.
+- Call examples:
+
+```令牌调用示例
+    /**
+     * test token
+     */
+    public  void doPOSTParam()throws Exception{
+        // create HttpClient
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+
+        // create http post request
+        HttpPost httpPost = new HttpPost("http://127.0.0.1:12345/escheduler/projects/create");
+        httpPost.setHeader("token", "123");
+        // set parameters
+        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
+        parameters.add(new BasicNameValuePair("projectName", "qzw"));
+        parameters.add(new BasicNameValuePair("desc", "qzw"));
+        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
+        httpPost.setEntity(formEntity);
+        CloseableHttpResponse response = null;
+        try {
+            // execute
+            response = httpclient.execute(httpPost);
+            // response status code 200
+            if (response.getStatusLine().getStatusCode() == 200) {
+                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
+                System.out.println(content);
+            }
+        } finally {
+            if (response != null) {
+                response.close();
+            }
+            httpclient.close();
+        }
+    }
+```
+
+### Grant authority
+  - Granting permissions includes project permissions, resource permissions, datasource permissions, UDF Function permissions.
+> Administrators can authorize projects, resources, data sources and UDF Functions that are not created by ordinary users. Because project, resource, data source and UDF Function are all authorized in the same way, the project authorization is introduced as an example.
+
+> Note:For projects created by the user himself, the user has all the permissions. The list of items and the list of selected items will not be reflected
+
+  - 1.Click on the authorization button of the designated person as follows:
+    <p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61843204-71a9e880-aecd-11e9-83ad-365d7bf99375.png" width="60%" />
+ </p>
+
+- 2.Select the project button to authorize the project
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/auth-project.png" width="60%" />
+ </p>
+
+### Monitor center
+  - Service management is mainly to monitor and display the health status and basic information of each service in the system.
+
+#### Master monitor
+  - Mainly related information about master.
+<p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61843245-8edeb700-aecd-11e9-9916-ea50080e7d08.png" width="60%" />
+ </p>
+
+#### Worker monitor
+  - Mainly related information of worker.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61843277-ae75df80-aecd-11e9-9667-b9f1615b6f3b.png" width="60%" />
+ </p>
+
+#### Zookeeper monitor
+  - Mainly the configuration information of each worker and master in zookpeeper.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61843323-c64d6380-aecd-11e9-8392-1ca9b84cd794.png" width="60%" />
+ </p>
+
+#### Mysql monitor
+  - Mainly the health status of mysql
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61843358-e11fd800-aecd-11e9-86d1-9490e48dc955.png" width="60%" />
+ </p>
+
+## Task Node Type and Parameter Setting
+
+### Shell
+
+  - The shell node, when the worker executes, generates a temporary shell script, which is executed by a Linux user with the same name as the tenant.
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_SHELL.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61843728-6788e980-aecf-11e9-8006-241a7ec5024b.png" width="60%" />
+ </p>`
+
+- Node name: The node name in a process definition is unique
+- Run flag: Identify whether the node can be scheduled properly, and if it does not need to be executed, you can turn on the forbidden execution switch.
+- Description : Describes the function of the node
+- Number of failed retries: Number of failed task submissions, support drop-down and manual filling
+- Failure Retry Interval: Interval between tasks that fail to resubmit tasks, support drop-down and manual filling
+- Script: User-developed SHELL program
+- Resources: A list of resource files that need to be invoked in a script
+- Custom parameters: User-defined parameters that are part of SHELL replace the contents of scripts with ${variables}
+
+### SUB_PROCESS
+  - The sub-process node is to execute an external workflow definition as an task node.
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_SUB_PROCESS.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61843799-adde4880-aecf-11e9-846e-f1696107029f.png" width="60%" />
+ </p>
+
+- Node name: The node name in a process definition is unique
+- Run flag: Identify whether the node is scheduled properly
+- Description: Describes the function of the node
+- Sub-node: The process definition of the selected sub-process is selected, and the process definition of the selected sub-process can be jumped to by entering the sub-node in the upper right corner.
+
+### DEPENDENT
+
+  - Dependent nodes are **dependent checking nodes**. For example, process A depends on the successful execution of process B yesterday, and the dependent node checks whether process B has a successful execution instance yesterday.
+
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_DEPENDENT.png) ask node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61844369-be8fbe00-aed1-11e9-965d-ddb9aeeba9db.png" width="60%" />
+ </p>
+
+  > Dependent nodes provide logical judgment functions, such as checking whether yesterday's B process was successful or whether the C process was successfully executed.
+
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/depend-b-and-c.png" width="80%" />
+ </p>
+
+  > For example, process A is a weekly task and process B and C are daily tasks. Task A requires that task B and C be successfully executed every day of the last week, as shown in the figure:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/depend-week.png" width="80%" />
+ </p>
+
+  > If weekly A also needs to be implemented successfully on Tuesday:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/depend-last-tuesday.png" width="80%" />
+ </p>
+
+###  PROCEDURE
+  - The procedure is executed according to the selected data source.
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_PROCEDURE.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61844464-1af2dd80-aed2-11e9-9486-6cf1b8585aa5.png" width="60%" />
+ </p>
+
+- Datasource: The data source type of stored procedure supports MySQL and POSTGRESQL, and chooses the corresponding data source.
+- Method: The method name of the stored procedure
+- Custom parameters: Custom parameter types of stored procedures support IN and OUT, and data types support nine data types: VARCHAR, INTEGER, LONG, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP and BOOLEAN.
+
+### SQL
+  - Execute non-query SQL functionality
+    <p align="center">
+      <img src="https://user-images.githubusercontent.com/53217792/61850397-d7569e80-aee6-11e9-9da0-c4d96deaa8a1.png" width="60%" />
+ </p>
+
+  - Executing the query SQL function, you can choose to send mail in the form of tables and attachments to the designated recipients.
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_SQL.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61850594-4d5b0580-aee7-11e9-9c9e-1934c91962b9.png" width="60%" />
+ </p>
+
+- Datasource: Select the corresponding datasource
+- sql type: support query and non-query, query is select type query, there is a result set returned, you can specify mail notification as table, attachment or table attachment three templates. Non-query is not returned by result set, and is for update, delete, insert three types of operations
+- sql parameter: input parameter format is key1 = value1; key2 = value2...
+- sql statement: SQL statement
+- UDF function: For HIVE type data sources, you can refer to UDF functions created in the resource center, other types of data sources do not support UDF functions for the time being.
+- Custom parameters: SQL task type, and stored procedure is to customize the order of parameters to set values for methods. Custom parameter type and data type are the same as stored procedure task type. The difference is that the custom parameter of the SQL task type replaces the ${variable} in the SQL statement.
+
+
+
+### SPARK 
+
+  - Through SPARK node, SPARK program can be directly executed. For spark node, worker will use `spark-submit` mode to submit tasks.
+
+> Drag the   ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_SPARK.png)  task node in the toolbar onto the palette and double-click the task node as follows:
+>
+> 
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/48329107/61852935-3d462480-aeed-11e9-8241-415314bfc2e5.png" width="60%" />
+ </p>
+
+- Program Type: Support JAVA, Scala and Python
+- Class of the main function: The full path of Main Class, the entry to the Spark program
+- Master jar package: It's Spark's jar package
+- Deployment: support three modes: yarn-cluster, yarn-client, and local
+- Driver Kernel Number: Driver Kernel Number and Memory Number can be set
+- Executor Number: Executor Number, Executor Memory Number and Executor Kernel Number can be set
+- Command Line Parameters: Setting the input parameters of Spark program to support the replacement of custom parameter variables.
+- Other parameters: support - jars, - files, - archives, - conf format
+- Resource: If a resource file is referenced in other parameters, you need to select the specified resource.
+- Custom parameters: User-defined parameters in MR locality that replace the contents in scripts with ${variables}
+
+Note: JAVA and Scala are just used for identification, no difference. If it's a Spark developed by Python, there's no class of the main function, and everything else is the same.
+
+### MapReduce(MR)
+  - Using MR nodes, MR programs can be executed directly. For Mr nodes, worker submits tasks using `hadoop jar`
+
+
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_MR.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+ 1. JAVA program
+
+ <p align="center">
+    <img src="https://user-images.githubusercontent.com/53217792/61851102-91023f00-aee8-11e9-9ac0-dbe588d860c2.png" width="60%" />
+  </p>
+
+- Class of the main function: The full path of the MR program's entry Main Class
+- Program Type: Select JAVA Language
+- Master jar package: MR jar package
+- Command Line Parameters: Setting the input parameters of MR program to support the replacement of custom parameter variables
+- Other parameters: support - D, - files, - libjars, - archives format
+- Resource: If a resource file is referenced in other parameters, you need to select the specified resource.
+- Custom parameters: User-defined parameters in MR locality that replace the contents in scripts with ${variables}
+
+2. Python program
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61851224-f3f3d600-aee8-11e9-8862-435220bbda93.png" width="60%" />
+ </p>
+
+- Program Type: Select Python Language
+- Main jar package: Python jar package running MR
+- Other parameters: support - D, - mapper, - reducer, - input - output format, where user-defined parameters can be set, such as:
+- mapper "mapper.py 1" - file mapper.py-reducer reducer.py-file reducer.py-input/journey/words.txt-output/journey/out/mr/${current TimeMillis}
+- Among them, mapper. py 1 after - mapper is two parameters, the first parameter is mapper. py, and the second parameter is 1.
+- Resource: If a resource file is referenced in other parameters, you need to select the specified resource.
+- Custom parameters: User-defined parameters in MR locality that replace the contents in scripts with ${variables}
+
+### Python
+  - With Python nodes, Python scripts can be executed directly. For Python nodes, worker will use `python ** `to submit tasks.
+
+
+
+
+> Drag the ![PNG](https://analysys.github.io/easyscheduler_docs/images/toolbar_PYTHON.png) task node in the toolbar onto the palette and double-click the task node as follows:
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61851959-daec2480-aeea-11e9-83fd-3e00a030cb84.png" width="60%" />
+ </p>
+
+- Script: User-developed Python program
+- Resource: A list of resource files that need to be invoked in a script
+- Custom parameters: User-defined parameters that are part of Python that replace the contents in the script with ${variables}
+
+### System parameter
+
+<table>
+    <tr><th>variable</th><th>meaning</th></tr>
+    <tr>
+        <td>${system.biz.date}</td>
+        <td>The timing time of routine dispatching instance is one day before, in yyyyyMMdd format. When data is supplemented, the date + 1</td>
+    </tr>
+    <tr>
+        <td>${system.biz.curdate}</td>
+        <td> Daily scheduling example timing time, format is yyyyyMMdd, when supplementing data, the date + 1</td>
+    </tr>
+    <tr>
+        <td>${system.datetime}</td>
+        <td>Daily scheduling example timing time, format is yyyyyMMddHmmss, when supplementing data, the date + 1</td>
+    </tr>
+</table>
+
+
+### Time Customization Parameters
+
+> Support code to customize the variable name, declaration: ${variable name}. It can refer to "system parameters" or specify "constants".
+
+> When we define this benchmark variable as $[...], [yyyyMMddHHmmss] can be decomposed and combined arbitrarily, such as:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] ,etc.
+
+> Can also do this:
+>
+> 
+
+- Later N years: $[add_months (yyyyyyMMdd, 12*N)]
+- The previous N years: $[add_months (yyyyyyMMdd, -12*N)]
+- Later N months: $[add_months (yyyyyMMdd, N)]
+- The first N months: $[add_months (yyyyyyMMdd, -N)]
+- Later N weeks: $[yyyyyyMMdd + 7*N]
+- The first N weeks: $[yyyyyMMdd-7*N]
+- The day after that: $[yyyyyyMMdd + N]
+- The day before yesterday: $[yyyyyMMdd-N]
+- Later N hours: $[HHmmss + N/24]
+- First N hours: $[HHmmss-N/24]
+- After N minutes: $[HHmmss + N/24/60]
+- First N minutes: $[HHmmss-N/24/60]
+
+
+
+### User-defined parameters
+
+> User-defined parameters are divided into global parameters and local parameters. Global parameters are the global parameters passed when the process definition and process instance are saved. Global parameters can be referenced by local parameters of any task node in the whole process.
+
+> For example:
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs/images/save-global-parameters.png" width="60%" />
+ </p>
+
+> global_bizdate is a global parameter, referring to system parameters.
+
+<p align="center">
+   <img src="https://user-images.githubusercontent.com/53217792/61857313-78992100-aef6-11e9-9ba3-521c6ca33ce3.png" width="60%" />
+ </p>
+
+> In tasks, local_param_bizdate refers to global parameters by  ${global_bizdate} for scripts, the value of variable local_param_bizdate can be referenced by${local_param_bizdate}, or the value of local_param_bizdate can be set directly by JDBC.
+
+
+
diff --git a/docs/zh-cn/developer_guide/architecture-design.md b/docs/zh-cn/developer_guide/architecture-design.md
new file mode 100755
index 0000000..8c3ef4e
--- /dev/null
+++ b/docs/zh-cn/developer_guide/architecture-design.md
@@ -0,0 +1,304 @@
+## 系统架构设计
+在对调度系统架构说明之前,我们先来认识一下调度系统常用的名词
+
+### 1.名词解释
+**DAG:** 全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:
+
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag_examples_cn.jpg" alt="dag示例"  width="60%" />
+  <p align="center">
+        <em>dag示例</em>
+  </p>
+</p>
+
+**流程定义**:通过拖拽任务节点并建立任务节点的关联所形成的可视化**DAG**
+
+**流程实例**:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例
+
+**任务实例**:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态
+
+**任务类型**: 目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子 **SUB_PROCESS**  也是一个单独的流程定义,是可以单独启动执行的
+
+**调度方式:** 系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。其中 **恢复被容错的工作流** 和 **恢复等待线程** 两种命令类型是由调度内部控制使用,外部无法调用
+
+**定时调度**:系统采用 **quartz** 分布式调度器,并同时支持cron表达式可视化的生成
+
+**依赖**:系统不单单支持 **DAG** 简单的前驱和后继节点之间的依赖,同时还提供**任务依赖**节点,支持**流程间的自定义任务依赖**
+
+**优先级** :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
+
+**邮件告警**:支持 **SQL任务** 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
+
+**失败策略**:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,**继续**是指不管并行运行任务的状态,直到流程失败结束。**结束**是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
+
+**补数**:补历史数据,支持**区间并行和串行**两种补数方式
+
+### 2.系统架构
+
+#### 2.1 系统架构图
+<p align="center">
+  <img src="https://analysys.github.io/easyscheduler_docs_cn/images/architecture.jpg" alt="系统架构图"  width="70%" />
+  <p align="center">
+        <em>系统架构图</em>
+  </p>
+</p>
+
+#### 2.2 架构说明
+
+* **MasterServer** 
+
+    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。
+    MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。
+
+    ##### 该服务内主要包含:
+
+    - **Distributed Quartz**分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作
+
+    - **MasterSchedulerThread**是一个扫描线程,定时扫描数据库中的 **command** 表,根据不同的**命令类型**进行不同的业务操作
+
+    - **MasterExecThread**主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理
+
+    - **MasterTaskExecThread**主要负责任务的持久化
+
+* **WorkerServer** 
+
+     WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。
+     ##### 该服务包含:
+     - **FetchTaskThread**主要负责不断从**Task Queue**中领取任务,并根据不同任务类型调用**TaskScheduleThread**对应执行器。
+
+     - **LoggerServer**是一个RPC服务,提供日志分片查看、刷新和下载等功能
+
+* **ZooKeeper** 
+
+    ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。
+    我们也曾经基于Redis实现过队列,不过我们希望EasyScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。
+
+* **Task Queue** 
+
+    提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。
+
+* **Alert** 
+
+    提供告警相关接口,接口主要包括**告警**两种类型的告警数据的存储、查询和通知功能。其中通知功能又有**邮件通知**和**SNMP(暂未实现)**两种。
+
+* **API** 
+
+    API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
+    接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。
+
+* **UI** 
+
+    系统的前端页面,提供系统的各种可视化操作界面,详见**[系统使用手册](系统使用手册.md)**部分。
+
+#### 2.3 架构设计思想
+
+##### 一、去中心化vs中心化 
+
+###### 中心化思想
+
+中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave角色"  width="50%" />
+ </p>
+ 
+- Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
+- Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。
+
+
+
+中心化思想设计存在的问题:
+
+- 一旦Master出现了问题,则群龙无首,整个集群就会崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
+- 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大。
+
+
+
+###### 去中心化
+ <p align="center"
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="去中心化"  width="50%" />
+ </p>
+ 
+- 在去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备down机,都只会影响很小范围的功能。
+- 去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠行,则大大增加了上述功能的实现难度。
+- 实际上,真正去中心化的分布式系统并不多见。反而动态中心化分布式系统正在不断涌出。在这种架构下,集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"来选举新的"管理者"去主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd。
+
+
+
+- EasyScheduler的去中心化是Master/Worker注册到Zookeeper中,实现Master集群和Worker集群无中心,并使用Zookeeper分布式锁来选举其中的一台Master或Worker为“管理者”来执行任务。
+
+#####  二、分布式锁实践
+
+EasyScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Master执行Scheduler,或者只有一台Worker执行任务的提交。
+1. 获取分布式锁的核心流程算法如下
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png" alt="获取分布式锁流程"  width="50%" />
+ </p>
+
+2. EasyScheduler中Scheduler线程分布式锁实现流程图:
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock_procss.png" alt="获取分布式锁流程"  width="50%" />
+ </p>
+
+
+##### 三、线程不足循环等待问题
+
+-  如果一个DAG中没有子流程,则如果Command中的数据条数大于线程池设置的阈值,则直接流程等待或失败。
+-  如果一个大的DAG中嵌套了很多子流程,如下图则会产生“死等”状态:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png" alt="线程不足循环等待问题"  width="50%" />
+ </p>
+上图中MainFlowThread等待SubFlowThread1结束,SubFlowThread1等待SubFlowThread2结束, SubFlowThread2等待SubFlowThread3结束,而SubFlowThread3等待线程池有新线程,则整个DAG流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除非启动新的Master来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。
+
+对于启动新Master来打破僵局,似乎有点差强人意,于是我们提出了以下三种方案来降低这种风险:
+
+1. 计算所有Master的线程总和,然后对每一个DAG需要计算其需要的线程数,也就是在DAG流程执行之前做预计算。因为是多Master线程池,所以总线程数不太可能实时获取。 
+2. 对单Master线程池进行判断,如果线程池已经满了,则让线程直接失败。
+3. 增加一种资源不足的Command类型,如果线程池不足,则将主流程挂起。这样线程池就有了新的线程,可以让资源不足挂起的流程重新唤醒执行。
+
+注意:Master Scheduler线程在获取Command的时候是FIFO的方式执行的。
+
+于是我们选择了第三种方式来解决线程不足的问题。
+
+
+##### 四、容错设计
+容错分为服务宕机容错和任务重试,服务宕机容错又分为Master容错和Worker容错两种情况
+
+###### 1. 宕机容错
+
+服务容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png" alt="EasyScheduler容错设计"  width="40%" />
+ </p>
+其中Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。
+
+
+
+- Master容错流程图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png" alt="Master容错流程图"  width="40%" />
+ </p>
+ZooKeeper Master容错完成之后则重新由EasyScheduler中Scheduler线程调度,遍历 DAG 找到”正在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的状态,对”提交成功”的任务需要判断Task Queue中是否已经存在,如果存在则同样监控任务实例的状态,如果不存在则重新提交任务实例。
+
+
+
+- Worker容错流程图:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png" alt="Worker容错流程图"  width="40%" />
+ </p>
+
+Master Scheduler线程一旦发现任务实例为” 需要容错”状态,则接管任务并进行重新提交。
+
+ 注意:由于” 网络抖动”可能会使得节点短时间内失去和ZooKeeper的心跳,从而发生节点的remove事件。对于这种情况,我们使用最简单的方式,那就是节点一旦和ZooKeeper发生超时连接,则直接将Master或Worker服务停掉。
+
+###### 2.任务失败重试
+
+这里首先要区分任务失败重试、流程失败恢复、流程失败重跑的概念:
+
+- 任务失败重试是任务级别的,是调度系统自动进行的,比如一个Shell任务设置重试次数为3次,那么在Shell任务运行失败后会自己再最多尝试运行3次
+- 流程失败恢复是流程级别的,是手动进行的,恢复是从只能**从失败的节点开始执行**或**从当前节点开始执行**
+- 流程失败重跑也是流程级别的,是手动进行的,重跑是从开始节点进行
+
+
+
+接下来说正题,我们将工作流中的任务节点分了两种类型。
+
+- 一种是业务节点,这种节点都对应一个实际的脚本或者处理语句,比如Shell节点,MR节点、Spark节点、依赖节点等。
+
+- 还有一种是逻辑节点,这种节点不做实际的脚本或语句处理,只是整个流程流转的逻辑处理,比如子流程节等。
+
+每一个**业务节点**都可以配置失败重试的次数,当该任务节点失败,会自动重试,直到成功或者超过配置的重试次数。**逻辑节点**不支持失败重试。但是逻辑节点里的任务支持重试。
+
+如果工作流中有任务失败达到最大重试次数,工作流就会失败停止,失败的工作流可以手动进行重跑操作或者流程恢复操作
+
+
+
+##### 五、任务优先级设计
+在早期调度设计中,如果没有优先级设计,采用公平调度设计的话,会遇到先行提交的任务可能会和后继提交的任务同时完成的情况,而不能做到设置流程或者任务的优先级,因此我们对此进行了重新设计,目前我们设计如下:
+
+-  按照**不同流程实例优先级**优先于**同一个流程实例优先级**优先于**同一流程内任务优先级**优先于**同一流程内任务**提交顺序依次从高到低进行任务处理。
+    - 具体实现是根据任务实例的json解析优先级,然后把**流程实例优先级_流程实例id_任务优先级_任务id**信息保存在ZooKeeper任务队列中,当从任务队列获取的时候,通过字符串比较即可得出最需要优先执行的任务
+
+        - 其中流程定义的优先级是考虑到有些流程需要先于其他流程进行处理,这个可以在流程启动或者定时启动时配置,共有5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
+            <p align="center">
+               <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="流程优先级配置"  width="40%" />
+             </p>
+
+        - 任务的优先级也分为5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
+            <p align="center">
+               <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="任务优先级配置"  width="35%" />
+             </p>
+
+
+##### 六、Logback和gRPC实现日志访问
+
+-  由于Web(UI)和Worker不一定在同一台机器上,所以查看日志不能像查询本地文件那样。有两种方案:
+  -  将日志放到ES搜索引擎上
+  -  通过gRPC通信获取远程日志信息
+
+-  介于考虑到尽可能的EasyScheduler的轻量级性,所以选择了gRPC实现远程访问日志信息。
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc远程访问"  width="50%" />
+ </p>
+
+
+- 我们使用自定义Logback的FileAppender和Filter功能,实现每个任务实例生成一个日志文件。
+- FileAppender主要实现如下:
+
+ ```java
+ /**
+  * task log appender
+  */
+ public class TaskLogAppender extends FileAppender<ILoggingEvent {
+ 
+     ...
+
+    @Override
+    protected void append(ILoggingEvent event) {
+
+        if (currentlyActiveFile == null){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split("-");
+        // logId = processDefineId_processInstanceId_taskInstanceId
+        String logId = threadNameArr[1];
+        ...
+        super.subAppend(event);
+    }
+}
+ ```
+
+
+以/流程定义id/流程实例id/任务实例id.log的形式生成日志
+
+- 过滤匹配以TaskLogInfo开始的线程名称:
+
+- TaskLogFilter实现如下:
+
+ ```java
+ /**
+ *  task log filter
+ */
+public class TaskLogFilter extends Filter<ILoggingEvent {
+
+    @Override
+    public FilterReply decide(ILoggingEvent event) {
+        if (event.getThreadName().startsWith("TaskLogInfo-")){
+            return FilterReply.ACCEPT;
+        }
+        return FilterReply.DENY;
+    }
+}
+ ```
+
+### 总结
+本文从调度出发,初步介绍了大数据分布式工作流调度系统--EasyScheduler的架构原理及实现思路。未完待续
+
+
diff --git a/docs/zh-cn/developer_guide/backend-development.md b/docs/zh-cn/developer_guide/backend-development.md
new file mode 100755
index 0000000..7d2d34a
--- /dev/null
+++ b/docs/zh-cn/developer_guide/backend-development.md
@@ -0,0 +1,48 @@
+# 后端开发文档
+
+## 环境要求
+
+ * [Mysql](http://geek.analysys.cn/topic/124) (5.5+) :  必装
+ * [JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html) (1.8+) :  必装
+ * [ZooKeeper](https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper)(3.4.6+) :必装 
+ * [Maven](http://maven.apache.org/download.cgi)(3.3+) :必装 
+
+因EasyScheduler中escheduler-rpc模块使用到Grpc,需要用到Maven编译生成所需要的类
+对maven不熟的伙伴请参考: [maven in five minutes](http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html)(3.3+)
+
+http://maven.apache.org/install.html
+
+## 项目编译
+将EasyScheduler源码下载导入Idea开发工具后,首先转为Maven项目(右键点击后选择"Add Framework Support")
+
+* 执行编译命令:
+
+```
+ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
+```
+
+* 查看目录
+
+正常编译完后,会在当前目录生成 ./target/escheduler-{version}/
+
+```
+    bin
+    conf
+    lib
+    script
+    sql
+    install.sh
+```
+
+- 说明
+
+```
+bin : 基础服务启动脚本
+conf : 项目配置文件
+lib : 项目依赖jar包,包括各个模块jar和第三方jar
+script : 集群启动、停止和服务监控启停脚本
+sql : 项目依赖sql文件
+install.sh : 一键部署脚本
+```
+
+   
diff --git a/docs/zh-cn/developer_guide/frontend-development.md b/docs/zh-cn/developer_guide/frontend-development.md
new file mode 100755
index 0000000..f805f5e
--- /dev/null
+++ b/docs/zh-cn/developer_guide/frontend-development.md
@@ -0,0 +1,644 @@
+# 前端开发文档
+
+### 技术选型
+```
+Vue mvvm框架
+
+Es6 ECMAScript 6.0
+
+Ans-ui Analysys-ui
+
+D3 可视化库图表库
+
+Jsplumb 连线插件库
+
+Lodash 高性能的 JavaScript 实用工具库
+```
+
+
+### 开发环境搭建
+   
+- #### Node安装
+Node包下载 (注意版本 8.9.4) `https://nodejs.org/download/release/v8.9.4/` 
+
+
+- #### 前端项目构建
+用命令行模式 `cd`  进入 `escheduler-ui`项目目录并执行 `npm install` 拉取项目依赖包
+
+> 如果 `npm install` 速度非常慢 
+
+> 可以转淘宝镜像命令行输入 `npm install -g cnpm --registry=https://registry.npm.taobao.org`
+
+> 运行 `cnpm install` 
+
+
+- 新建一个`.env`文件,用于跟后端交互的接口
+
+在`escheduler-ui`目录下新建一个`.env`文件,在文件里添加后端服务的ip地址和端口,用于跟后端交互,`.env`文件内容如下:
+```
+# 代理的接口地址(自行修改)
+API_BASE = http://192.168.xx.xx:12345
+
+# 如果您需要用ip访问项目可以把 "#" 号去掉(例)
+#DEV_HOST = 192.168.xx.xx
+```
+
+> #####  !!!这里特别注意 项目如果在拉取依赖包的过程中报 " node-sass error " 错误,请在执行完后再次执行以下命令
+```
+npm install node-sass --unsafe-perm //单独安装node-sass依赖
+```
+
+- #### 开发环境运行
+- `npm start` 项目开发环境 (启动后访问地址 http://localhost:8888/#/)
+
+
+#### 前端项目发布
+
+- `npm run build` 项目打包 (打包后根目录会创建一个名为dist文件夹,用于发布线上Nginx)
+
+运行 `npm run build` 命令,生成打包文件(dist)包
+
+再拷贝到服务器对应的目录下(前端服务静态页面存放目录)
+
+
+访问地址 `http://localhost:8888/#/` 
+
+
+#### Linux下使用node启动并且守护进程
+
+安装pm2 `npm install -g pm2`
+
+在项目`escheduler-ui`根目录执行 `pm2 start npm -- run dev` 启动项目
+
+#### 命令
+
+- 启用 `pm2 start npm -- run dev`
+
+- 停止 `pm2 stop npm`
+
+- 删除 `pm2 delete npm`
+
+- 状态 `pm2 list`
+
+```
+
+[root@localhost escheduler-ui]# pm2 start npm -- run dev
+[PM2] Applying action restartProcessId on app [npm](ids: 0)
+[PM2] [npm](0) ✓
+[PM2] Process successfully started
+┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬──────────┬──────┬──────────┐
+│ App name │ id │ version │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem      │ user │ watching │
+├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼──────────┼──────┼──────────┤
+│ npm      │ 0  │ N/A     │ fork │ 6168 │ online │ 31      │ 0s     │ 0%  │ 5.6 MB   │ root │ disabled │
+└──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴──────────┴──────┴──────────┘
+ Use `pm2 show <id|name>` to get more details about an app
+
+```
+
+
+### 项目目录结构
+
+`build` 打包及开发环境项目的一些webpack配置
+
+`node_modules` 开发环境node依赖包
+
+`src` 项目所需文件
+
+`src => combo` 项目第三方资源本地化 `npm run combo`具体查看`build/combo.js`
+
+`src => font` 字体图标库可访问 `https://www.iconfont.cn` 进行添加 注意:字体库用的自己的 二次开发需要重新引入自己的库 `src/sass/common/_font.scss`
+
+`src => images` 公共图片存放
+
+`src => js` js/vue
+
+`src => lib` 公司内部组件(公司组件库开源后可删掉)
+
+`src => sass` sass文件 一个页面对应一个sass文件
+
+`src => view` 页面文件 一个页面对应一个html文件
+
+```
+> 项目采用vue单页面应用(SPA)开发
+- 所有页面入口文件在 `src/js/conf/${对应页面文件名 => home}` 的 `index.js` 入口文件
+- 对应的sass文件则在 `src/sass/conf/${对应页面文件名 => home}/index.scss`
+- 对应的html文件则在 `src/view/${对应页面文件名 => home}/index.html`
+```
+
+公共模块及util `src/js/module`
+
+`components` => 内部项目公共组件
+
+`download` => 下载组件
+
+`echarts` => 图表组件
+
+`filter` => 过滤器和vue管道
+
+`i18n` => 国际化
+
+`io` => io请求封装 基于axios
+
+`mixin` => vue mixin 公共部分 用于disabled操作
+
+`permissions` => 权限操作
+
+`util` => 工具
+
+
+### 系统功能模块
+
+首页 => `http://localhost:8888/#/home`
+
+项目管理 => `http://localhost:8888/#/projects/list`
+```
+| 项目首页
+| 工作流
+  - 工作流定义
+  - 工作流实例
+  - 任务实例
+```
+ 
+资源管理 => `http://localhost:8888/#/resource/file`
+```
+| 文件管理
+| UDF管理
+  - 资源管理
+  - 函数管理
+```
+
+数据源管理 => `http://localhost:8888/#/datasource/list`
+
+安全中心 => `http://localhost:8888/#/security/tenant`
+```
+| 租户管理
+| 用户管理
+| 告警组管理
+  - master
+  - worker
+```
+
+用户中心 => `http://localhost:8888/#/user/account`
+
+
+## 路由和状态管理
+
+项目 `src/js/conf/home` 下分为
+
+`pages` => 路由指向页面目录
+```
+ 路由地址对应的页面文件
+```
+
+`router` => 路由管理
+```
+vue的路由器,在每个页面的入口文件index.js 都会注册进来 具体操作:https://router.vuejs.org/zh/
+```
+
+`store` => 状态管理
+```
+每个路由对应的页面都有一个状态管理的文件 分为:
+
+actions => mapActions => 详情:https://vuex.vuejs.org/zh/guide/actions.html
+
+getters => mapGetters => 详情:https://vuex.vuejs.org/zh/guide/getters.html
+
+index => 入口
+
+mutations => mapMutations => 详情:https://vuex.vuejs.org/zh/guide/mutations.html
+
+state => mapState => 详情:https://vuex.vuejs.org/zh/guide/state.html
+
+具体操作:https://vuex.vuejs.org/zh/
+
+```
+
+
+## 规范
+## Vue规范
+##### 1.组件名
+组件名为多个单词,并且用连接线(-)连接,避免与 HTML 标签冲突,并且结构更加清晰。
+```
+// 正例
+export default {
+    name: 'page-article-item'
+}
+```
+
+##### 2.组件文件
+`src/js/module/components`项目内部公共组件书写文件夹名与文件名同名,公共组件内部所拆分的子组件与util工具都放置组件内部 `_source`文件夹里。
+```
+└── components
+    ├── header
+        ├── header.vue
+        └── _source
+            └── nav.vue
+            └── util.js
+    ├── conditions
+        ├── conditions.vue
+        └── _source
+            └── search.vue
+            └── util.js
+```
+
+##### 3.Prop
+定义 Prop 的时候应该始终以驼峰格式(camelCase)命名,在父组件赋值的时候使用连接线(-)。
+这里遵循每个语言的特性,因为在 HTML 标记中对大小写是不敏感的,使用连接线更加友好;而在 JavaScript 中更自然的是驼峰命名。
+```
+// Vue
+props: {
+    articleStatus: Boolean
+}
+// HTML
+<article-item :article-status="true"></article-item>
+```
+
+Prop 的定义应该尽量详细的指定其类型、默认值和验证。
+
+示例:
+
+```
+props: {
+    attrM: Number,
+    attrA: {
+        type: String,
+        required: true
+    },
+    attrZ: {
+        type: Object,
+        // 数组/对象的默认值应该由一个工厂函数返回
+        default: function () {
+            return {
+                msg: '成就你我'
+            }
+        }
+    },
+    attrE: {
+        type: String,
+        validator: function (v) {
+            return !(['success', 'fail'].indexOf(v) === -1) 
+        }
+    }
+}
+```
+
+##### 4.v-for
+在执行 v-for 遍历的时候,总是应该带上 key 值使更新 DOM 时渲染效率更高。
+```
+<ul>
+    <li v-for="item in list" :key="item.id">
+        {{ item.title }}
+    </li>
+</ul>
+```
+
+v-for 应该避免与 v-if 在同一个元素(`例如:<li>`)上使用,因为 v-for 的优先级比 v-if 更高,为了避免无效计算和渲染,应该尽量将 v-if 放到容器的父元素之上。
+```
+<ul v-if="showList">
+    <li v-for="item in list" :key="item.id">
+        {{ item.title }}
+    </li>
+</ul>
+```
+
+##### 5.v-if / v-else-if / v-else
+若同一组 v-if 逻辑控制中的元素逻辑相同,Vue 为了更高效的元素切换,会复用相同的部分,`例如:value`。为了避免复用带来的不合理效果,应该在同种元素上加上 key 做标识。
+```
+<div v-if="hasData" key="mazey-data">
+    <span>{{ mazeyData }}</span>
+</div>
+<div v-else key="mazey-none">
+    <span>无数据</span>
+</div>
+```
+
+##### 6.指令缩写
+为了统一规范始终使用指令缩写,使用`v-bind`,`v-on`并没有什么不好,这里仅为了统一规范。
+```
+<input :value="mazeyUser" @click="verifyUser">
+```
+
+##### 7.单文件组件的顶级元素顺序
+样式后续都是打包在一个文件里,所有在单个vue文件中定义的样式,在别的文件里同类名的样式也是会生效的所有在创建一个组件前都会有个顶级类名
+注意:项目内已经增加了sass插件,单个vue文件里可以直接书写sass语法
+为了统一和便于阅读,应该按 `<template>`、`<script>`、`<style>`的顺序放置。
+
+```
+<template>
+  <div class="test-model">
+    test
+  </div>
+</template>
+<script>
+  export default {
+    name: "test",
+    data() {
+      return {}
+    },
+    props: {},
+    methods: {},
+    watch: {},
+    beforeCreate() {
+    },
+    created() {
+    },
+    beforeMount() {
+    },
+    mounted() {
+    },
+    beforeUpdate() {
+    },
+    updated() {
+    },
+    beforeDestroy() {
+    },
+    destroyed() {
+    },
+    computed: {},
+    components: {},
+  }
+</script>
+
+<style lang="scss" rel="stylesheet/scss">
+  .test-model {
+
+  }
+</style>
+
+```
+
+
+## JavaScript规范
+
+##### 1.var / let / const
+建议不再使用 var,而使用 let / const,优先使用 const。任何一个变量的使用都要提前申明,除了 function 定义的函数可以随便放在任何位置。
+
+##### 2.引号
+```
+const foo = '后除'
+const bar = `${foo},前端工程师`
+```
+
+##### 3.函数
+匿名函数统一使用箭头函数,多个参数/返回值时优先使用对象的结构赋值。
+```
+function getPersonInfo ({name, sex}) {
+    // ...
+    return {name, gender}
+}
+```
+函数名统一使用驼峰命名,以大写字母开头申明的都是构造函数,使用小写字母开头的都是普通函数,也不该使用 new 操作符去操作普通函数。
+
+##### 4.对象
+```
+const foo = {a: 0, b: 1}
+const bar = JSON.parse(JSON.stringify(foo))
+
+const foo = {a: 0, b: 1}
+const bar = {...foo, c: 2}
+
+const foo = {a: 3}
+Object.assign(foo, {b: 4})
+
+const myMap = new Map([])
+for (let [key, value] of myMap.entries()) {
+    // ...
+}
+```
+
+##### 5.模块
+统一使用 import / export 的方式管理项目的模块。
+```
+// lib.js
+export default {}
+
+// app.js
+import app from './lib'
+```
+
+import 统一放在文件顶部。
+
+如果模块只有一个输出值,使用 `export default`,否则不用。
+
+
+## HTML / CSS
+
+###### 1.标签
+在引用外部 CSS 或 JavaScript 时不写 type 属性。HTML5 默认 type 为 `text/css` 和 `text/javascript` 属性,所以没必要指定。
+```
+<link rel="stylesheet" href="//www.test.com/css/test.css">
+<script src="//www.test.com/js/test.js"></script>
+```
+
+##### 2.命名
+Class 和 ID 的命名应该语义化,通过看名字就知道是干嘛的;多个单词用连接线 - 连接。
+```
+// 正例
+.test-header{
+    font-size: 20px;
+}
+```
+
+##### 3.属性缩写
+CSS 属性尽量使用缩写,提高代码的效率和方便理解。
+
+```
+// 反例
+border-width: 1px;
+border-style: solid;
+border-color: #ccc;
+
+// 正例
+border: 1px solid #ccc;
+```
+
+##### 4.文档类型
+应该总是使用 HTML5 标准。
+```
+<!DOCTYPE html>
+```
+
+##### 5.注释
+应该给一个模块文件写一个区块注释。
+```
+/**
+* @module mazey/api
+* @author Mazey <mazey@mazey.net>
+* @description test.
+* */
+```
+
+
+## 接口
+
+##### 所有的接口都以 Promise 形式返回 
+注意非0都为错误走catch
+
+```
+const test = () => {
+  return new Promise((resolve, reject) => {
+    resolve({
+      a:1
+    })
+  })
+}
+
+// 调用
+test.then(res => {
+  console.log(res)
+  // {a:1}
+})
+```
+
+正常返回
+```
+{
+  code:0,
+  data:{}
+  msg:'成功'
+}
+```
+
+错误返回
+```
+{
+  code:10000, 
+  data:{}
+  msg:'失败'
+}
+```
+
+##### 相关接口路径
+
+dag 相关接口 `src/js/conf/home/store/dag/actions.js`
+
+数据源中心 相关接口 `src/js/conf/home/store/datasource/actions.js`
+
+项目管理 相关接口 `src/js/conf/home/store/projects/actions.js`
+
+资源中心 相关接口 `src/js/conf/home/store/resource/actions.js`
+
+安全中心 相关接口 `src/js/conf/home/store/security/actions.js`
+
+用户中心 相关接口 `src/js/conf/home/store/user/actions.js`
+
+
+
+## 扩展开发
+
+##### 1.增加节点
+
+(1) 先将节点的icon小图标放置`src/js/conf/home/pages/dag/img`文件夹内,注意 `toolbar_${后台定义的节点的英文名称 例如:SHELL}.png`
+(2) 找到 `src/js/conf/home/pages/dag/_source/config.js` 里的 `tasksType` 对象,往里增加
+```
+'DEPENDENT': {  // 后台定义节点类型英文名称用作key值
+  desc: 'DEPENDENT',  // tooltip desc
+  color: '#2FBFD8'  // 代表的颜色主要用于 tree和gantt 两张图
+}
+```
+
+(3) 在 `src/js/conf/home/pages/dag/_source/formModel/tasks` 增加一个 `${节点类型(小写)}`.vue 文件,跟当前节点相关的组件内容都在这里写。 属于节点组件内的必须拥有一个函数 `_verification()` 验证成功后讲当前组件的相关数据往父组件抛。
+```
+/**
+ * 验证
+*/
+  _verification () {
+    // datasource 子组件验证
+    if (!this.$refs.refDs._verifDatasource()) {
+      return false
+    }
+
+    // 验证函数
+    if (!this.method) {
+      this.$message.warning(`${i18n.$t('请输入方法')}`)
+      return false
+    }
+
+    // localParams 子组件验证
+    if (!this.$refs.refLocalParams._verifProp()) {
+      return false
+    }
+    // 存储
+    this.$emit('on-params', {
+      type: this.type,
+      datasource: this.datasource,
+      method: this.method,
+      localParams: this.localParams
+    })
+    return true
+  }
+``` 
+
+(4) 节点组件内部所用到公共的组件都在`_source`下,`commcon.js`用与配置公共数据
+
+##### 2.增加状态类型
+(1) 找到 `src/js/conf/home/pages/dag/_source/config.js` 里的 `tasksState` 对象,往里增加
+```
+'WAITTING_DEPEND': {  //后端定义状态类型 前端用作key值
+  id: 11,  // 前端定义id 后续用作排序
+  desc: `${i18n.$t('等待依赖')}`,  // tooltip desc
+  color: '#5101be',  // 代表的颜色主要用于 tree和gantt 两张图
+  icoUnicode: '&#xe68c;',  // 字体图标 
+  isSpin: false  // 是否旋转(需代码判断)
+}
+```
+
+##### 3.增加操作栏工具
+(1) 找到 `src/js/conf/home/pages/dag/_source/config.js` 里的 `toolOper` 对象,往里增加
+```
+{
+  code: 'pointer',  // 工具标识
+  icon: '&#xe781;',  // 工具图标 
+  disable: disable,  // 是否禁用
+  desc: `${i18n.$t('拖动节点和选中项')}`  // tooltip desc
+}
+```
+
+(2) 工具类都以一个构造函数返回 `src/js/conf/home/pages/dag/_source/plugIn`
+
+`downChart.js`  =>  dag 图片下载处理 
+
+`dragZoom.js`  =>  鼠标缩放效果处理 
+
+`jsPlumbHandle.js`  =>  拖拽线条处理 
+
+`util.js`  =>   属于 `plugIn` 工具类
+
+
+操作则在 `src/js/conf/home/pages/dag/_source/dag.js` => `toolbarEvent` 事件中处理。
+
+
+##### 3.增加一个路由页面
+
+(1) 首先在路由管理增加一个路由地址`src/js/conf/home/router/index.js`
+```
+{
+  path: '/test',  // 路由地址 
+  name: 'test',  // 别名
+  component: resolve => require(['../pages/test/index'], resolve),  // 路由对应组件入口文件
+  meta: {
+    title: `${i18n.$t('test')} - EasyScheduler`  // title 显示
+  }
+},
+```
+
+(2) 在`src/js/conf/home/pages` 建一个 `test` 文件夹,在文件夹里建一个`index.vue`入口文件。
+
+    这样就可以直接访问 `http://localhost:8888/#/test`
+
+
+##### 4.增加预置邮箱
+
+找到`src/lib/localData/email.js`启动和定时邮箱地址输入可以自动下拉匹配。
+```
+export default ["test@analysys.com.cn","test1@analysys.com.cn","test3@analysys.com.cn"]
+```
+
+##### 5.权限管理及disabled状态处理
+
+权限根据后端接口`getUserInfo`接口给出`userType: "ADMIN_USER/GENERAL_USER"`权限控制页面操作按钮是否`disabled`
+
+具体操作:`src/js/module/permissions/index.js`
+
+disabled处理:`src/js/module/mixin/disabledState.js`
+
diff --git a/docs/zh-cn/developer_guide/plugin-development.md b/docs/zh-cn/developer_guide/plugin-development.md
new file mode 100755
index 0000000..5e733b9
--- /dev/null
+++ b/docs/zh-cn/developer_guide/plugin-development.md
@@ -0,0 +1,54 @@
+## 任务插件开发
+
+提醒:目前任务插件开发暂不支持热部署
+
+### 基于SHELL的任务
+
+#### 基于YARN的计算(参见MapReduceTask)
+
+- 需要在 **cn.escheduler.server.worker.task** 下的 **TaskManager** 类中创建自定义任务(也需在TaskType注册对应的任务类型)
+- 需要继承**cn.escheduler.server.worker.task** 下的 **AbstractYarnTask**
+- 构造方法调度 **AbstractYarnTask** 构造方法
+- 继承 **AbstractParameters** 自定义任务参数实体
+- 重写 **AbstractTask** 的 **init** 方法中解析**自定义任务参数**
+- 重写 **buildCommand** 封装command
+
+
+
+#### 基于非YARN的计算(参见ShellTask)
+- 需要在 **cn.escheduler.server.worker.task** 下的 **TaskManager** 中创建自定义任务
+
+- 需要继承**cn.escheduler.server.worker.task** 下的 **AbstractTask**
+
+- 构造方法中实例化 **ShellCommandExecutor**
+
+  ```
+  public ShellTask(TaskProps props, Logger logger) {
+    super(props, logger);
+  
+    this.taskDir = props.getTaskDir();
+  
+    this.processTask = new ShellCommandExecutor(this::logHandle,
+        props.getTaskDir(), props.getTaskAppId(),
+        props.getTenantCode(), props.getEnvFile(), props.getTaskStartTime(),
+        props.getTaskTimeout(), logger);
+    this.processDao = DaoFactory.getDaoInstance(ProcessDao.class);
+  }
+  ```
+
+  传入自定义任务的 **TaskProps**和自定义**Logger**,TaskProps 封装了任务的信息,Logger分装了自定义日志信息
+
+- 继承 **AbstractParameters** 自定义任务参数实体
+
+- 重写 **AbstractTask** 的 **init** 方法中解析**自定义任务参数实体**
+
+- 重写 **handle** 方法,调用 **ShellCommandExecutor** 的 **run** 方法,第一个参数传入自己的**command**,第二个参数传入 ProcessDao,设置相应的 **exitStatusCode**
+
+### 基于非SHELL的任务(参见SqlTask)
+
+- 需要在 **cn.escheduler.server.worker.task** 下的 **TaskManager** 中创建自定义任务
+- 需要继承**cn.escheduler.server.worker.task** 下的 **AbstractTask**
+- 继承 **AbstractParameters** 自定义任务参数实体
+- 构造方法或者重写 **AbstractTask** 的 **init** 方法中,解析自定义任务参数实体
+- 重写 **handle** 方法实现业务逻辑并设置相应的**exitStatusCode**
+
diff --git a/docs/zh-cn/development/contribute.md b/docs/zh-cn/development/contribute.md
new file mode 100755
index 0000000..5a3c3d8
--- /dev/null
+++ b/docs/zh-cn/development/contribute.md
@@ -0,0 +1 @@
+## 未完成
diff --git a/docs/zh-cn/development/developers.md b/docs/zh-cn/development/developers.md
new file mode 100755
index 0000000..5a3c3d8
--- /dev/null
+++ b/docs/zh-cn/development/developers.md
@@ -0,0 +1 @@
+## 未完成
diff --git a/docs/zh-cn/faq.md b/docs/zh-cn/faq.md
new file mode 100755
index 0000000..5e1aa46
--- /dev/null
+++ b/docs/zh-cn/faq.md
@@ -0,0 +1,286 @@
+## Q:EasyScheduler服务介绍及建议运行内存
+
+A: EasyScheduler由5个服务组成,MasterServer、WorkerServer、ApiServer、AlertServer、LoggerServer和UI。
+
+| 服务                      | 说明                                                         |
+| ------------------------- | ------------------------------------------------------------ |
+| MasterServer              | 主要负责 **DAG** 的切分和任务状态的监控                      |
+| WorkerServer/LoggerServer | 主要负责任务的提交、执行和任务状态的更新。LoggerServer用于Rest Api通过 **RPC** 查看日志 |
+| ApiServer                 | 提供Rest Api服务,供UI进行调用                               |
+| AlertServer               | 提供告警服务                                                 |
+| UI                        | 前端页面展示                                                 |
+
+注意:**由于服务比较多,建议单机部署最好是4核16G以上**
+
+---
+
+## Q: 管理员为什么不能创建项目
+
+A:管理员目前属于"**纯管理**", 没有租户,即没有linux上对应的用户,所以没有执行权限,  **故没有所属的项目、资源及数据源**,所以没有创建权限。**但是有所有的查看权限**。如果需要创建项目等业务操作,**请使用管理员创建租户和普通用户,然后使用普通用户登录进行操作**。我们将会在1.1.0版本中将管理员的创建和执行权限放开,管理员将会有所有的权限
+
+---
+
+## Q:系统支持哪些邮箱?
+
+A:支持绝大多数邮箱,qq、163、126、139、outlook、aliyun等皆支持。支持**TLS和SSL**协议,可以在alert.properties中选择性配置
+
+---
+
+## Q:常用的系统变量时间参数有哪些,如何使用?
+
+A:请参考 https://analysys.github.io/easyscheduler_docs_cn/%E7%B3%BB%E7%BB%9F%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.html#%E7%B3%BB%E7%BB%9F%E5%8F%82%E6%95%B0
+
+---
+
+## Q:pip install kazoo 这个安装报错。是必须安装的吗?
+
+A: 这个是python连接zookeeper需要使用到的,必须要安装
+
+---
+
+## Q: 怎么指定机器运行任务
+
+A:使用 **管理员** 创建Worker分组,在 **流程定义启动** 的时候可**指定Worker分组**或者在**任务节点上指定Worker分组**。如果不指定,则使用Default,**Default默认是使用的集群里所有的Worker中随机选取一台来进行任务提交、执行**
+
+---
+
+## Q:任务的优先级
+
+A:我们同时 **支持流程和任务的优先级**。优先级我们有 **HIGHEST、HIGH、MEDIUM、LOW和LOWEST** 五种级别。**可以设置不同流程实例之间的优先级,也可以设置同一个流程实例中不同任务实例的优先级**。详细内容请参考任务优先级设计 https://analysys.github.io/easyscheduler_docs_cn/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1.html#%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1
+
+----
+
+## Q:escheduler-grpc报错
+
+A:在根目录下执行:mvn -U clean package assembly:assembly -Dmaven.test.skip=true , 然后刷新下整个项目
+
+----
+
+## Q:EasyScheduler支持windows上运行么
+
+A: 理论上只有**Worker是需要在Linux上运行的**,其它的服务都是可以在windows上正常运行的。但是还是建议最好能在linux上部署使用
+
+-----
+
+## Q:UI 在 linux 编译node-sass提示:Error:EACCESS:permission denied,mkdir xxxx
+
+A:单独安装 **npm install node-sass --unsafe-perm**,之后再 **npm install**
+
+---
+
+## Q:UI 不能正常登陆访问
+
+A: 1,如果是node启动的查看escheduler-ui下的.env API_BASE配置是否是Api Server服务地址
+
+    2,如果是nginx启动的并且是通过 **install-escheduler-ui.sh** 安装的,查看             											**/etc/nginx/conf.d/escheduler.conf** 中的proxy_pass配置是否是Api Server服务地址
+
+    3,如果以上配置都是正确的,那么请查看Api Server服务是否是正常的,curl http://192.168.xx.xx:12345/escheduler/users/get-user-info,查看Api Server日志,如果提示 cn.escheduler.api.interceptor.LoginHandlerInterceptor:[76] - session info is null,则证明Api Server服务是正常的
+
+    4,如果以上都没有问题,需要查看一下 **application.properties** 中的 **server.context-path 和 server.port 配置**是否正确
+
+---
+
+## Q: 流程定义手动启动或调度启动之后,没有流程实例生成
+
+A: 1,首先通过**jps 查看MasterServer服务是否存在**,或者从服务监控直接查看zk中是否存在master服务
+
+​	2,如果存在master服务,查看 **命令状态统计** 或者 **t_escheduler_error_command** 中是否增加的新记录,如果增加了,**请查看 message 字段定位启动异常原因**
+
+---
+
+## Q : 任务状态一直处于提交成功状态
+
+A: 1,首先通过**jps 查看WorkerServer服务是否存在**,或者从服务监控直接查看zk中是否存在worker服务
+
+​       2,如果 **WorkerServer** 服务正常,需要 **查看MasterServer是否把task任务放到zk队列中** ,**需要查看MasterServer日志及zk队列中是否有任务阻塞**
+
+​	3,如果以上都没有问题,需要定位是否指定了Worker分组,但是 **Worker分组的机器不是在线状态**
+
+---
+
+## Q: 是否提供Docker镜像及Dockerfile
+
+A: 提供Docker镜像及Dockerfile。
+
+Docker镜像地址:https://hub.docker.com/r/escheduler/escheduler_images
+
+Dockerfile地址:https://github.com/qiaozhanwei/escheduler_dockerfile/tree/master/docker_escheduler
+
+---
+
+## Q : install.sh 中需要注意问题
+
+A:  1,如果替换变量中包含特殊字符,**请用 \ 转移符进行转移**
+
+​	2,installPath="/data1_1T/escheduler",**这个目录不能和当前要一键安装的install.sh目录是一样的**
+
+​	3,deployUser="escheduler",**部署用户必须具有sudo权限**,因为worker是通过sudo -u 租户 sh xxx.command进行执行的
+
+​	4,monitorServerState="false",服务监控脚本是否启动,默认是不启动服务监控脚本的。**如果启动服务监控脚本,则每5分钟定时来监控master和worker的服务是否down机,如果down机则会自动重启**
+
+​	5,hdfsStartupSate="false",是否开启HDFS资源上传功能。默认是不开启的,**如果不开启则资源中心是不能使用的**。如果开启,需要conf/common/hadoop/hadoop.properties中配置fs.defaultFS和yarn的相关配置,如果使用namenode HA,需要将core-site.xml和hdfs-site.xml复制到conf根目录下
+
+​	注意:**1.0.x版本是不会自动创建hdfs根目录的,需要自行创建,并且需要部署用户有hdfs的操作权限**
+
+---
+
+## Q : 流程定义和流程实例下线异常
+
+A : 对于 **1.0.4 以前的版本中**,修改escheduler-api cn.escheduler.api.quartz包下的代码即可
+
+```
+public boolean deleteJob(String jobName, String jobGroupName) {
+    lock.writeLock().lock();
+    try {
+      JobKey jobKey = new JobKey(jobName,jobGroupName);
+      if(scheduler.checkExists(jobKey)){
+        logger.info("try to delete job, job name: {}, job group name: {},", jobName, jobGroupName);
+        return scheduler.deleteJob(jobKey);
+      }else {
+        return true;
+      }
+
+    } catch (SchedulerException e) {
+      logger.error(String.format("delete job : %s failed",jobName), e);
+    } finally {
+      lock.writeLock().unlock();
+    }
+    return false;
+  }
+```
+
+---
+
+## Q : HDFS启动之前创建的租户,能正常使用资源中心吗
+
+A: 不能。因为在未启动HDFS创建的租户,不会在HDFS中注册租户目录。所以上次资源会报错
+
+## Q :  多Master和多Worker状态下,服务掉了,怎么容错
+
+A:  **注意:Master监控Master及Worker服务。**
+
+​	1,如果Master服务掉了,其它的Master会接管挂掉的Master的流程,继续监控Worker task状态
+
+​	2,如果Worker服务掉,Master会监控到Worker服务掉了,如果存在Yarn任务,Kill Yarn任务之后走重试
+
+具体请看容错设计:https://analysys.github.io/easyscheduler_docs_cn/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1.html#%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1
+
+---
+
+## Q : 对于Master和Worker一台机器伪分布式下的容错
+
+A : 1.0.3 版本只实现了Master启动流程容错,不走Worker容错。也就是说如果Worker挂掉的时候,没有Master存在。这流程将会出现问题。我们会在 **1.1.0** 版本中增加Master和Worker启动自容错,修复这个问题。如果想手动修改这个问题,需要针对 **跨重启正在运行流程** **并且已经掉的正在运行的Worker任务,需要修改为失败**,**同时跨重启正在运行流程设置为失败状态**。然后从失败节点进行流程恢复即可
+
+---
+
+## Q : 定时容易设置成每秒执行
+
+A : 设置定时的时候需要注意,如果第一位(* * * * * ? *)设置成 \* ,则表示每秒执行。**我们将会在1.1.0版本中加入显示最近调度的时间列表** ,使用http://cron.qqe2.com/ 可以在线看近5次运行时间
+
+
+
+## Q: 定时有有效时间范围吗
+
+A:有的,**如果定时的起止时间是同一个时间,那么此定时将是无效的定时**。**如果起止时间的结束时间比当前的时间小,很有可能定时会被自动删除**
+
+
+
+## Q : 任务依赖有几种实现
+
+A:	1,**DAG** 之间的任务依赖关系,是从 **入度为零** 进行DAG切分的
+
+​	2,有 **任务依赖节点** ,可以实现跨流程的任务或者流程依赖,具体请参考 依赖(DEPENDENT)节点:https://analysys.github.io/easyscheduler_docs_cn/%E7%B3%BB%E7%BB%9F%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.html#%E4%BB%BB%E5%8A%A1%E8%8A%82%E7%82%B9%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%8F%82%E6%95%B0%E8%AE%BE%E7%BD%AE
+
+​	注意:**不支持跨项目的流程或任务依赖**
+
+## Q: 流程定义有几种启动方式
+
+A: 1,在 **流程定义列表**,点击 **启动** 按钮
+
+​	2,**流程定义列表添加定时器**,调度启动流程定义
+
+​	3,流程定义 **查看或编辑** DAG 页面,任意 **任务节点右击** 启动流程定义
+
+​	4,可以对流程定义 DAG 编辑,设置某些任务的运行标志位 **禁止运行**,则在启动流程定义的时候,将该节点的连线将从DAG中去掉
+
+## Q : Python任务设置Python版本
+
+A:  1,对于1**.0.3之后的版本**只需要修改 conf/env/.escheduler_env.sh中的PYTHON_HOME
+
+```
+export PYTHON_HOME=/bin/python
+```
+
+注意:这了 **PYTHON_HOME** ,是python命令的绝对路径,而不是单纯的 PYTHON_HOME,还需要注意的是 export PATH 的时候,需要直接
+
+```
+export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH
+```
+
+​	2,对 1.0.3 之前的版本,Python任务只能支持系统的Python版本,不支持指定Python版本
+
+## Q: Worker Task 通过sudo -u 租户 sh xxx.command会产生子进程,在kill的时候,是否会杀掉
+
+A: 我们会在1.0.4中增加kill任务同时,kill掉任务产生的各种所有子进程
+
+
+
+## Q : EasyScheduler中的队列怎么用,用户队列和租户队列是什么意思
+
+A : EasyScheduler 中的队列可以在用户或者租户上指定队列,**用户指定的队列优先级是高于租户队列的优先级的。**,例如:对MR任务指定队列,是通过 mapreduce.job.queuename 来指定队列的。
+
+注意:MR在用以上方法指定队列的时候,传递参数请使用如下方式:
+
+```
+	Configuration conf = new Configuration();
+        GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
+        String[] remainingArgs = optionParser.getRemainingArgs();
+```
+
+
+
+如果是Spark任务 --queue 方式指定队列
+
+
+
+## Q : Master 或者 Worker报如下告警
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_worker_lack_res.png" width="60%" />
+ </p>
+
+
+
+A : 修改conf下的 master.properties **master.reserved.memory** 的值为更小的值,比如说0.1 或者
+
+worker.properties **worker.reserved.memory** 的值为更小的值,比如说0.1
+
+
+
+## Q : hive版本是1.1.0+cdh5.15.0,SQL hive任务连接报错
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/cdh_hive_error.png" width="60%" />
+ </p>
+
+
+
+A : 将 hive pom
+
+```
+<dependency>
+    <groupId>org.apache.hive</groupId>
+    <artifactId>hive-jdbc</artifactId>
+    <version>2.1.0</version>
+</dependency>
+```
+
+修改为
+
+```
+<dependency>
+    <groupId>org.apache.hive</groupId>
+    <artifactId>hive-jdbc</artifactId>
+    <version>1.1.0</version>
+</dependency>
+```
diff --git a/docs/zh-cn/release/1.0.1-release.md b/docs/zh-cn/release/1.0.1-release.md
new file mode 100755
index 0000000..1902fbb
--- /dev/null
+++ b/docs/zh-cn/release/1.0.1-release.md
@@ -0,0 +1,16 @@
+Easy Scheduler Release 1.0.1
+===
+Easy Scheduler 1.0.2是1.x系列中的第二个版本。更新内容具体如下:
+
+- 1,outlook TSL 发邮件支持
+- 2,servlet 和 protobuf jar冲突解决
+- 3,创建租户同时建立linux用户
+- 4,重跑时间负数
+- 5,单机和集群都可以使用install.sh一键部署
+- 6,队列支持界面添加
+- 7,escheduler.t_escheduler_queue 增加了create_time和update_time字段
+
+
+
+
+
diff --git a/docs/zh-cn/release/1.0.2-release.md b/docs/zh-cn/release/1.0.2-release.md
new file mode 100755
index 0000000..c3bacc2
--- /dev/null
+++ b/docs/zh-cn/release/1.0.2-release.md
@@ -0,0 +1,49 @@
+Easy Scheduler Release 1.0.2
+===
+Easy Scheduler 1.0.2是1.x系列中的第三个版本。此版本增加了调度开放接口、worker分组(指定任务运行的机器组)、任务流程及服务监控以及对oracle、clickhouse等支持,具体如下:
+
+新特性:
+===
+- [[EasyScheduler-79](https://github.com/analysys/EasyScheduler/issues/79)] 调度通过token方式对外开放接口,可以通过api进行操作
+- [[EasyScheduler-138](https://github.com/analysys/EasyScheduler/issues/138)] 可以指定任务运行的机器(组)
+- [[EasyScheduler-139](https://github.com/analysys/EasyScheduler/issues/139)] 任务流程监控及Master、Worker、Zookeeper运行状态监控
+- [[EasyScheduler-140](https://github.com/analysys/EasyScheduler/issues/140)] 工作流定义—增加流程超时报警
+- [[EasyScheduler-134](https://github.com/analysys/EasyScheduler/issues/134)] 任务类型支持Oracle、CLICKHOUSE、SQLSERVER、IMPALA
+- [[EasyScheduler-136](https://github.com/analysys/EasyScheduler/issues/136)] Sql任务节点可以独立选取抄送邮件用户 
+- [[EasyScheduler-141](https://github.com/analysys/EasyScheduler/issues/141)] 用户管理—用户可以绑定队列,用户队列级别高于租户队列级别,如果用户队列为空,则寻找租户队列 
+
+
+
+增强:
+===
+- [[EasyScheduler-154](https://github.com/analysys/EasyScheduler/issues/154)] 租户编码允许纯数字或者下划线这种的编码
+
+
+修复:
+===
+- [[EasyScheduler-135](https://github.com/analysys/EasyScheduler/issues/135)] Python任务可以指定python版本
+
+- [[EasyScheduler-125](https://github.com/analysys/EasyScheduler/issues/125)] 用户账号中手机号无法识别联通最新号码166开头
+
+- [[EasyScheduler-178](https://github.com/analysys/EasyScheduler/issues/178)] 修复ProcessDao里细微的拼写错误 
+
+- [[EasyScheduler-129](https://github.com/analysys/EasyScheduler/issues/129)] 租户管理中,租户编码带下划线等特殊字符无法通过校验 
+
+
+感谢:
+===
+最后但最重要的是,没有以下伙伴的贡献就没有新版本的诞生:
+
+Baoqi , chubbyjiang , coreychen , chgxtony, cmdares , datuzi , dingchao, fanguanqun , 风清扬, gaojun416 , googlechorme, hyperknob , hujiang75277381 , huanzui , kinssun, ivivi727 ,jimmy, jiangzhx , kevin5210 , lidongdai , lshmouse , lenboo, lyf198972 , lgcareer , lzy305 ,  moranrr ,  millionfor , mazhong8808, programlief, qiaozhanwei , roy110 , swxchappy , sherlock111 , samz406 , swxchappy, qq389401879 , lzy305,  vkingnew, William-GuoWei , woniulinux, yyl861, zhangxin1988, yangjiajun2014, ya [...]
+
+以及微信群里众多的热心伙伴!在此非常感谢!
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/zh-cn/release/1.0.3-release.md b/docs/zh-cn/release/1.0.3-release.md
new file mode 100755
index 0000000..d89e05d
--- /dev/null
+++ b/docs/zh-cn/release/1.0.3-release.md
@@ -0,0 +1,30 @@
+Easy Scheduler Release 1.0.3
+===
+Easy Scheduler 1.0.3是1.x系列中的第四个版本。
+
+增强:
+===
+-  [[EasyScheduler-482]](https://github.com/analysys/EasyScheduler/issues/482)sql任务中的邮件标题增加了对自定义变量的支持
+-  [[EasyScheduler-483]](https://github.com/analysys/EasyScheduler/issues/483)sql任务中的发邮件失败,则此sql任务为失败
+-  [[EasyScheduler-484]](https://github.com/analysys/EasyScheduler/issues/484)修改sql任务中自定义变量的替换规则,支持多个单引号和双引号的替换
+-  [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/485)创建资源文件时,增加对该资源文件是否在hdfs上已存在的验证
+
+修复:
+===
+-  [[EasyScheduler-198]](https://github.com/analysys/EasyScheduler/issues/198) 流程定义列表根据定时状态和更新时间进行排序
+-  [[EasyScheduler-419]](https://github.com/analysys/EasyScheduler/issues/419) 修复在线创建文件,hdfs文件未创建,却返回成功
+-  [[EasyScheduler-481]](https://github.com/analysys/EasyScheduler/issues/481)修复job不存在定时无法下线的问题
+-  [[EasyScheduler-425]](https://github.com/analysys/EasyScheduler/issues/425) kill任务时增加对其子进程的kill
+-  [[EasyScheduler-422]](https://github.com/analysys/EasyScheduler/issues/422) 修复更新资源文件时更新时间和大小未更新的问题
+-  [[EasyScheduler-431]](https://github.com/analysys/EasyScheduler/issues/431) 修复删除租户时,如果未启动hdfs,则删除租户失败的问题
+-  [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/486) shell进程退出,yarn状态非终态等待判断
+
+感谢:
+===
+最后但最重要的是,没有以下伙伴的贡献就没有新版本的诞生:
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, 
+feloxx, coding-now, hymzcn, nysyxxg, chgxtony 
+
+以及微信群里众多的热心伙伴!在此非常感谢!
+
diff --git a/docs/zh-cn/release/1.0.4-release.md b/docs/zh-cn/release/1.0.4-release.md
new file mode 100755
index 0000000..5df1027
--- /dev/null
+++ b/docs/zh-cn/release/1.0.4-release.md
@@ -0,0 +1,28 @@
+Easy Scheduler Release 1.0.4
+===
+Easy Scheduler 1.0.4是1.x系列中的第五个版本。
+
+**修复**:
+-  [[EasyScheduler-198]](https://github.com/analysys/EasyScheduler/issues/198) 流程定义列表根据定时状态和更新时间进行排序
+-  [[EasyScheduler-419]](https://github.com/analysys/EasyScheduler/issues/419) 修复在线创建文件,hdfs文件未创建,却返回成功
+-  [[EasyScheduler-481]](https://github.com/analysys/EasyScheduler/issues/481)修复job不存在定时无法下线的问题
+-  [[EasyScheduler-425]](https://github.com/analysys/EasyScheduler/issues/425) kill任务时增加对其子进程的kill
+-  [[EasyScheduler-422]](https://github.com/analysys/EasyScheduler/issues/422) 修复更新资源文件时更新时间和大小未更新的问题
+-  [[EasyScheduler-431]](https://github.com/analysys/EasyScheduler/issues/431) 修复删除租户时,如果未启动hdfs,则删除租户失败的问题
+-  [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/486) shell进程退出,yarn状态非终态等待判断
+
+**增强**:
+-  [[EasyScheduler-482]](https://github.com/analysys/EasyScheduler/issues/482)sql任务中的邮件标题增加了对自定义变量的支持
+-  [[EasyScheduler-483]](https://github.com/analysys/EasyScheduler/issues/483)sql任务中的发邮件失败,则此sql任务为失败
+-  [[EasyScheduler-484]](https://github.com/analysys/EasyScheduler/issues/484)修改sql任务中自定义变量的替换规则,支持多个单引号和双引号的替换
+-  [[EasyScheduler-485]](https://github.com/analysys/EasyScheduler/issues/485)创建资源文件时,增加对该资源文件是否在hdfs上已存在的验证
+
+
+感谢:
+===
+最后但最重要的是,没有以下伙伴的贡献就没有新版本的诞生(排名不分先后):
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, 
+feloxx, coding-now, hymzcn, nysyxxg, chgxtony, lfyee, Crossoverrr, gj-zhang, sunnyingit, xianhu, zhengqiangtan
+
+以及微信群/钉钉群里众多的热心伙伴!在此非常感谢!
\ No newline at end of file
diff --git a/docs/zh-cn/release/1.0.5-release.md b/docs/zh-cn/release/1.0.5-release.md
new file mode 100755
index 0000000..da86c6b
--- /dev/null
+++ b/docs/zh-cn/release/1.0.5-release.md
@@ -0,0 +1,23 @@
+Easy Scheduler Release 1.0.5
+===
+Easy Scheduler 1.0.5是1.x系列中的第六个版本。
+
+增强:
+===
+- [[EasyScheduler-597]](https://github.com/analysys/EasyScheduler/issues/597)child process cannot extend father's receivers and cc
+
+修复
+===
+- [[EasyScheduler-516]](https://github.com/analysys/EasyScheduler/issues/516)The task instance of MR cannot stop in some cases
+- [[EasyScheduler-594]](https://github.com/analysys/EasyScheduler/issues/594)soft kill task 后 进程依旧存在(父进程 子进程) 
+
+
+感谢:
+===
+最后但最重要的是,没有以下伙伴的贡献就没有新版本的诞生:
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, feloxx, coding-now, hymzcn, nysyxxg, chgxtony, gj-zhang, xianhu, sunnyingit,
+zhengqiangtan, chinashenkai
+
+以及微信群里众多的热心伙伴!在此非常感谢!
+
diff --git a/docs/zh-cn/release/1.1.0-release.md b/docs/zh-cn/release/1.1.0-release.md
new file mode 100755
index 0000000..b603180
--- /dev/null
+++ b/docs/zh-cn/release/1.1.0-release.md
@@ -0,0 +1,63 @@
+Easy Scheduler Release 1.1.0
+===
+Easy Scheduler 1.1.0是1.1.x系列中的第一个版本。
+
+新特性:
+===
+- [[EasyScheduler-391](https://github.com/analysys/EasyScheduler/issues/391)] run a process under a specified tenement user
+- [[EasyScheduler-288](https://github.com/analysys/EasyScheduler/issues/288)] Feature/qiye_weixin
+- [[EasyScheduler-189](https://github.com/analysys/EasyScheduler/issues/189)] Kerberos等安全支持
+- [[EasyScheduler-398](https://github.com/analysys/EasyScheduler/issues/398)]管理员,有租户(install.sh设置默认租户),可以创建资源、项目和数据源(限制有一个管理员)
+- [[EasyScheduler-293](https://github.com/analysys/EasyScheduler/issues/293)]点击运行流程时候选择的参数,没有地方可查看,也没有保存
+- [[EasyScheduler-401](https://github.com/analysys/EasyScheduler/issues/401)]定时很容易定时每秒一次,定时完成以后可以在页面显示一下下次触发时间
+- [[EasyScheduler-493](https://github.com/analysys/EasyScheduler/pull/493)]add datasource kerberos auth and FAQ modify and add resource upload s3
+
+
+增强:
+===
+- [[EasyScheduler-227](https://github.com/analysys/EasyScheduler/issues/227)] upgrade spring-boot to 2.1.x and spring to 5.x
+- [[EasyScheduler-434](https://github.com/analysys/EasyScheduler/issues/434)] worker节点数量 zk和mysql中不一致
+- [[EasyScheduler-435](https://github.com/analysys/EasyScheduler/issues/435)]邮箱格式的验证
+- [[EasyScheduler-441](https://github.com/analysys/EasyScheduler/issues/441)] 禁止运行节点加入已完成节点检测
+- [[EasyScheduler-400](https://github.com/analysys/EasyScheduler/issues/400)] 首页页面,队列统计不和谐,命令统计无数据
+- [[EasyScheduler-395](https://github.com/analysys/EasyScheduler/issues/395)] 对于容错恢复的流程,状态不能为 **正在运行
+- [[EasyScheduler-529](https://github.com/analysys/EasyScheduler/issues/529)] optimize poll task from zookeeper
+- [[EasyScheduler-242](https://github.com/analysys/EasyScheduler/issues/242)]worker-server节点获取任务性能问题
+- [[EasyScheduler-352](https://github.com/analysys/EasyScheduler/issues/352)]worker 分组, 队列消费问题
+- [[EasyScheduler-461](https://github.com/analysys/EasyScheduler/issues/461)]查看数据源参数,需要加密账号密码信息
+- [[EasyScheduler-396](https://github.com/analysys/EasyScheduler/issues/396)]Dockerfile优化,并关联Dockerfile和github实现自动打镜像
+- [[EasyScheduler-389](https://github.com/analysys/EasyScheduler/issues/389)]service monitor cannot find the change of master/worker
+- [[EasyScheduler-511](https://github.com/analysys/EasyScheduler/issues/511)]support recovery process from stop/kill nodes.
+- [[EasyScheduler-399](https://github.com/analysys/EasyScheduler/issues/399)]HadoopUtils指定用户操作,而不是 **部署用户
+- [[EasyScheduler-378](https://github.com/analysys/EasyScheduler/issues/378)]Mailbox regular match
+- [[EasyScheduler-625](https://github.com/analysys/EasyScheduler/issues/625)]EasyScheduler call shell "task instance not set host"
+- [[EasyScheduler-622](https://github.com/analysys/EasyScheduler/issues/622)]Front-end interface deployment k8s, background deployment big data cluster session error
+
+修复:
+===
+- [[EasyScheduler-394](https://github.com/analysys/EasyScheduler/issues/394)] master&worker部署在同一台机器上时,如果重启master&worker服务,会导致之前调度的任务无法继续调度
+- [[EasyScheduler-469](https://github.com/analysys/EasyScheduler/issues/469)]Fix naming errors,monitor page
+- [[EasyScheduler-392](https://github.com/analysys/EasyScheduler/issues/392)]Feature request: fix email regex check
+- [[EasyScheduler-405](https://github.com/analysys/EasyScheduler/issues/405)]定时修改/添加页面,开始时间和结束时间不能相同
+- [[EasyScheduler-517](https://github.com/analysys/EasyScheduler/issues/517)]补数 - 子工作流 - 时间参数 
+- [[EasyScheduler-532](https://github.com/analysys/EasyScheduler/issues/532)]python节点不执行的问题 
+- [[EasyScheduler-543](https://github.com/analysys/EasyScheduler/issues/543)]optimize datasource connection params safety
+- [[EasyScheduler-569](https://github.com/analysys/EasyScheduler/issues/569)]定时任务无法真正停止
+- [[EasyScheduler-463](https://github.com/analysys/EasyScheduler/issues/463)]邮箱验证不支持非常见后缀邮箱
+- [[EasyScheduler-650](https://github.com/analysys/EasyScheduler/issues/650)]Creating a hive data source without a principal will cause the connection to fail
+- [[EasyScheduler-641](https://github.com/analysys/EasyScheduler/issues/641)]The cellphone is not supported for 199 telecom segment when create a user
+- [[EasyScheduler-627](https://github.com/analysys/EasyScheduler/issues/627)]Different sql node task logs in parallel in the same workflow will be mixed
+- [[EasyScheduler-655](https://github.com/analysys/EasyScheduler/issues/655)]when deploy a spark task,the tentant queue not empty,set with a empty queue name 
+- [[EasyScheduler-667](https://github.com/analysys/EasyScheduler/issues/667)]HivePreparedStatement can't print the actual SQL executed 
+
+
+
+
+感谢:
+===
+最后但最重要的是,没有以下伙伴的贡献就没有新版本的诞生:
+
+Baoqi, jimmy201602, samz406, petersear, millionfor, hyperknob, fanguanqun, yangqinlong, qq389401879, chgxtony, Stanfan, lfyee, thisnew, hujiang75277381, sunnyingit, lgbo-ustc, ivivi, lzy305, JackIllkid, telltime, lipengbo2018, wuchunfu, telltime, chenyuan9028, zhangzhipeng621, thisnew, 307526982,  crazycarry
+
+以及微信群里众多的热心伙伴!在此非常感谢!
+
diff --git a/docs/zh-cn/release/upgrade.md b/docs/zh-cn/release/upgrade.md
new file mode 100755
index 0000000..d7590e8
--- /dev/null
+++ b/docs/zh-cn/release/upgrade.md
@@ -0,0 +1,38 @@
+
+# EasyScheduler升级文档
+
+## 1. 备份上一版本文件和数据库
+
+## 2. 停止escheduler所有服务
+
+ `sh ./script/stop-all.sh`
+
+## 3. 下载新版本的安装包
+
+- [码云下载](https://gitee.com/easyscheduler/EasyScheduler/attach_files), 下载最新版本的前后端安装包(后端简称escheduler-backend、前端简称escheduler-ui)
+- 以下升级操作都需要在新版本的目录进行
+
+## 4. 数据库升级
+- 修改conf/dao/data_source.properties中的下列属性
+
+```
+    spring.datasource.url
+    spring.datasource.username
+    spring.datasource.password
+```
+
+- 执行数据库升级脚本
+
+`sh ./script/upgrade-escheduler.sh`
+
+## 5. 后端服务升级
+
+- 修改install.sh配置内容,执行升级脚本
+  
+  `sh install.sh`
+
+## 6. 前端服务升级
+- 覆盖上一版本dist目录
+- 重启nginx服务
+  
+    `systemctl restart nginx`
diff --git a/docs/zh-cn/user_doc/backend-deployment.md b/docs/zh-cn/user_doc/backend-deployment.md
new file mode 100755
index 0000000..bf21788
--- /dev/null
+++ b/docs/zh-cn/user_doc/backend-deployment.md
@@ -0,0 +1,210 @@
+# 后端部署文档
+
+后端有2种部署方式,分别为自动化部署和编译源码部署
+
+## 1、准备工作
+
+请下载最新版本的安装包,下载地址: [码云下载](https://gitee.com/easyscheduler/EasyScheduler/attach_files/)或者[github下载](https://github.com/analysys/EasyScheduler/releases) ,下载escheduler-backend-x.x.x.tar.gz(后端简称escheduler-backend),escheduler-ui-x.x.x.tar.gz(前端简称escheduler-ui)
+
+#### 准备一: 基础软件安装(必装项请自行安装)
+
+ * [Mysql](http://geek.analysys.cn/topic/124) (5.5+) :  必装
+ * [JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html) (1.8+) :  必装
+ * [ZooKeeper](https://www.jianshu.com/p/de90172ea680)(3.4.6+) :必装 
+ * [Hadoop](https://blog.csdn.net/Evankaka/article/details/51612437)(2.6+) :选装, 如果需要使用到资源上传功能,MapReduce任务提交则需要配置Hadoop(上传的资源文件目前保存在Hdfs上)
+ * [Hive](https://staroon.pro/2017/12/09/HiveInstall/)(1.2.1) :  选装,hive任务提交需要安装
+ * Spark(1.x,2.x) : 选装,Spark任务提交需要安装
+ * PostgreSQL(8.2.15+) : 选装,PostgreSQL PostgreSQL存储过程需要安装
+ 
+```
+ 注意:EasyScheduler本身不依赖Hadoop、Hive、Spark、PostgreSQL,仅是会调用他们的Client,用于对应任务的运行。
+```
+
+#### 准备二: 创建部署用户
+
+- 在所有需要部署调度的机器上创建部署用户,因为worker服务是以 sudo -u {linux-user} 方式来执行作业,所以部署用户需要有 sudo 权限,而且是免密的。
+
+```部署账号
+vi /etc/sudoers
+
+# 例如部署用户是escheduler账号
+escheduler  ALL=(ALL)       NOPASSWD: NOPASSWD: ALL
+
+# 并且需要注释掉 Default requiretty 一行
+#Default requiretty
+```
+
+#### 准备三: ssh免密配置
+ 在部署机器和其他安装机器上配置ssh免密登录,如果要在部署机上安装调度,需要配置本机免密登录自己
+ 
+- [将 **主机器** 和各个其它机器SSH打通](http://geek.analysys.cn/topic/113)
+
+
+#### 准备四:数据库初始化
+
+* 创建database和账号
+    
+    执行以下命令创建database和账号
+    
+    ```sql 
+    CREATE DATABASE escheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
+    GRANT ALL PRIVILEGES ON escheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
+    GRANT ALL PRIVILEGES ON escheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
+    flush privileges;
+    ```
+
+* 创建表和导入基础数据
+    修改./conf/dao/data_source.properties中的下列属性
+
+    ```
+        spring.datasource.url
+        spring.datasource.username
+        spring.datasource.password
+    ```
+    执行创建表和导入基础数据脚本
+    ```
+    sh ./script/create-escheduler.sh
+    ```
+
+#### 准备五: 修改部署目录权限及运行参数
+
+    escheduler-backend目录介绍
+
+```
+bin : 基础服务启动脚本
+conf : 项目配置文件
+lib : 项目依赖jar包,包括各个模块jar和第三方jar
+script : 集群启动、停止和服务监控启停脚本
+sql : 项目依赖sql文件
+install.sh : 一键部署脚本
+```
+
+- 修改权限(请将'deployUser'字段修改为对应部署用户),使得部署用户对escheduler-backend目录有操作权限
+    
+    `sudo chown -R deployUser:deployUser escheduler-backend`
+
+- 修改conf/env/目录下的 `.escheduler_env.sh` 环境变量
+
+- 修改部署参数(根据自己服务器及业务情况):
+
+ - 修改 **install.sh**中的各参数,替换成自身业务所需的值
+   - monitorServerState 开关变量,在1.0.3版本中增加,控制是否启动自启动脚本(监控master,worker状态,如果掉线会自动启动)
+   默认值为"false"表示不启动自启动脚本,如果需要启动改为"true"
+
+   - hdfsStartupSate 开关变量,控制是否启动hdfs
+      默认值为"false"表示不启动hdfs
+      如果需要启动改为"true",启动hdfs需要自行创建hdfs根路径,也就是install.sh中的 hdfsPath
+
+ - 如果使用hdfs相关功能,需要拷贝**hdfs-site.xml**和**core-site.xml**到conf目录下
+
+
+## 2、部署
+推荐自动化部署,有经验的小伙伴也可以使用源码部署
+
+### 2.1 自动部署
+
+- 安装zookeeper工具 
+
+   `pip install kazoo`
+
+- 切换到部署用户,一键部署
+
+    `sh install.sh` 
+
+- 使用`jps`命令查看服务是否启动(`jps`为`java JDK`自带)
+
+```aidl
+    MasterServer         ----- master服务
+    WorkerServer         ----- worker服务
+    LoggerServer         ----- logger服务
+    ApiApplicationServer ----- api服务
+    AlertServer          ----- alert服务
+```
+如果以上服务都正常启动,说明自动部署成功
+
+
+部署成功后,可以进行日志查看,日志统一存放于指定文件夹内
+
+```日志路径
+ logs/
+    ├── escheduler-alert-server.log
+    ├── escheduler-master-server.log
+    |—— escheduler-worker-server.log
+    |—— escheduler-api-server.log
+    |—— escheduler-logger-server.log
+```
+
+### 2.2 编译源码来部署
+
+将源码包release版本下载后,解压进入根目录
+
+* 执行编译命令:
+
+```
+ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
+```
+
+* 查看目录
+
+正常编译完后,会在当前目录生成 `./target/escheduler-{version}/`
+
+```查看目录
+ ../
+    ├── bin
+    ├── conf
+    |—— install.sh
+    |—— lib
+    |—— logs
+    |—— script
+    |—— sql
+```
+
+
+### 2.3 系统常用启停服务(服务用途请具体参见《系统架构设计》小节)
+
+* 一键停止集群所有服务
+   
+   ` sh ./bin/stop-all.sh`
+   
+* 一键开启集群所有服务
+   
+   ` sh ./bin/start-all.sh`
+
+* 启停Master
+
+```启动master
+sh ./bin/escheduler-daemon.sh start master-server
+sh ./bin/escheduler-daemon.sh stop master-server
+```
+
+* 启停Worker
+
+```
+sh ./bin/escheduler-daemon.sh start worker-server
+sh ./bin/escheduler-daemon.sh stop worker-server
+```
+
+* 启停Api
+
+```
+sh ./bin/escheduler-daemon.sh start api-server
+sh ./bin/escheduler-daemon.sh stop api-server
+```
+* 启停Logger
+
+```
+sh ./bin/escheduler-daemon.sh start logger-server
+sh ./bin/escheduler-daemon.sh stop logger-server
+```
+* 启停Alert
+
+```
+sh ./bin/escheduler-daemon.sh start alert-server
+sh ./bin/escheduler-daemon.sh stop alert-server
+```
+
+## 3、数据库升级
+数据库升级是在1.0.2版本增加的功能,执行以下命令即可自动升级数据库
+```
+sh ./script/upgrade-escheduler.sh
+```
diff --git a/docs/zh-cn/user_doc/frontend-deployment.md b/docs/zh-cn/user_doc/frontend-deployment.md
new file mode 100755
index 0000000..dc9cf61
--- /dev/null
+++ b/docs/zh-cn/user_doc/frontend-deployment.md
@@ -0,0 +1,101 @@
+# 前端部署文档
+
+前端有3种部署方式,分别为自动化部署,手动部署和编译源码部署
+
+## 1、准备工作
+#### 下载安装包
+
+请下载最新版本的安装包,下载地址: [码云下载](https://gitee.com/easyscheduler/EasyScheduler/attach_files/) 或者 [github下载](https://github.com/analysys/EasyScheduler/releases)
+
+下载 escheduler-ui-x.x.x.tar.gz 后,解压`tar -zxvf escheduler-ui-x.x.x.tar.gz ./`后,进入`escheduler-ui`目录
+ 
+
+
+
+## 2、部署
+以下两种方式任选其一部署即可,推荐自动化部署
+### 2.1 自动化部署
+
+在`escheduler-ui`目录下编辑安装文件`vi install-escheduler-ui.sh`
+
+更改前端访问端口和后端代理接口地址
+
+```
+# 配置前端访问端口
+esc_proxy="8888"
+
+# 配置代理后端接口
+esc_proxy_port="http://192.168.xx.xx:12345"
+```
+
+>前端自动部署基于linux系统`yum`操作,部署之前请先安装更新`yum`
+
+在该目录下执行`./install-escheduler-ui.sh`
+
+
+### 2.2 手动部署
+
+安装epel源 `yum install epel-release -y`
+
+安装Nginx `yum install nginx -y`
+
+
+> ####  nginx配置文件地址
+```
+/etc/nginx/conf.d/default.conf
+```
+> ####  配置信息(自行修改)
+```
+server {
+    listen       8888;# 访问端口
+    server_name  localhost;
+    #charset koi8-r;
+    #access_log  /var/log/nginx/host.access.log  main;
+    location / {
+        root   /xx/dist; # 上面前端解压的dist目录地址(自行修改)
+        index  index.html index.html;
+    }
+    location /escheduler {
+        proxy_pass http://192.168.xx.xx:12345; # 接口地址(自行修改)
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header x_real_ipP $remote_addr;
+        proxy_set_header remote_addr $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+        proxy_connect_timeout 4s;
+        proxy_read_timeout 30s;
+        proxy_send_timeout 12s;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    #error_page  404              /404.html;
+    # redirect server error pages to the static page /50x.html
+    #
+    error_page   500 502 503 504  /50x.html;
+    location = /50x.html {
+        root   /usr/share/nginx/html;
+    }
+}
+```
+> ####  重启Nginx服务
+```
+systemctl restart nginx
+```
+
+#### nginx命令
+
+- 启用 `systemctl enable nginx`
+
+- 重启 `systemctl restart nginx`
+
+- 状态 `systemctl status nginx`
+
+
+## 前端常见问题
+####  1. 上传文件大小限制
+编辑配置文件 `vi /etc/nginx/nginx.conf`
+```
+# 更改上传大小
+client_max_body_size 1024m
+```
diff --git a/docs/zh-cn/user_doc/quick-start.md b/docs/zh-cn/user_doc/quick-start.md
new file mode 100755
index 0000000..966ef88
--- /dev/null
+++ b/docs/zh-cn/user_doc/quick-start.md
@@ -0,0 +1,50 @@
+# 快速上手
+
+* 管理员用户登录
+  >地址:192.168.xx.xx:8888 用户名密码:admin/escheduler123
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/login.jpg" width="60%" />
+ </p>
+
+* 创建队列
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/create-queue.png" width="60%" />
+ </p>
+
+  * 创建租户
+   <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/addtenant.png" width="60%" />
+  </p>
+
+  * 创建普通用户
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/useredit2.png" width="60%" />
+ </p>
+
+  * 创建告警组
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mail_edit.png" width="60%" />
+  </p>
+
+  * 使用普通用户登录
+  > 点击右上角用户名“退出”,重新使用普通用户登录。
+
+  * 项目管理->创建项目->点击项目名称
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/project.png" width="60%" />
+ </p>
+
+  * 点击工作流定义->创建工作流定义->上线工作流定义
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag1.png" width="60%" />
+ </p>
+
+  * 运行工作流定义->点击工作流实例->点击工作流实例名称->双击任务节点->查看任务执行日志
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task-log.png" width="60%" />
+</p>
\ No newline at end of file
diff --git a/docs/zh-cn/user_doc/system-manual.md b/docs/zh-cn/user_doc/system-manual.md
new file mode 100755
index 0000000..348cc2b
--- /dev/null
+++ b/docs/zh-cn/user_doc/system-manual.md
@@ -0,0 +1,675 @@
+# 系统使用手册
+
+
+## 快速上手
+
+  > 请参照[快速上手](快速上手.md)
+
+## 操作指南
+
+### 创建项目
+
+  - 点击“项目管理->创建项目”,输入项目名称,项目描述,点击“提交”,创建新的项目。
+  - 点击项目名称,进入项目首页。
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/project.png" width="60%" />
+ </p>
+
+> 项目首页其中包含任务状态统计,流程状态统计、工作流定义统计
+
+ - 任务状态统计:是指在指定时间范围内,统计任务实例中的待运行、失败、运行中、完成、成功的个数
+ - 流程状态统计:是指在指定时间范围内,统计工作流实例中的待运行、失败、运行中、完成、成功的个数
+ - 工作流定义统计:是统计该用户创建的工作流定义及管理员授予该用户的工作流定义
+
+
+### 创建工作流定义
+  - 进入项目首页,点击“工作流定义”,进入工作流定义列表页。
+  - 点击“创建工作流”,创建新的工作流定义。
+  - 拖拽“SHELL"节点到画布,新增一个Shell任务。
+  - 填写”节点名称“,”描述“,”脚本“字段。
+  - 选择“任务优先级”,级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行。
+  - 超时告警, 填写”超时时长“,当任务执行时间超过**超时时长**可以告警并且超时失败。
+  - 填写"自定义参数",参考[自定义参数](#用户自定义参数)
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag1.png" width="60%" />
+ </p>
+
+  - 增加节点之间执行的先后顺序: 点击”线条连接“;如图示,任务1和任务3并行执行,当任务1执行完,任务2、3会同时执行。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag2.png" width="60%" />
+ </p>
+
+  - 删除依赖关系: 点击箭头图标”拖动节点和选中项“,选中连接线,点击删除图标,删除节点间依赖关系。
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag3.png" width="60%" />
+ </p>
+
+  - 点击”保存“,输入工作流定义名称,工作流定义描述,设置全局参数,参考[自定义参数](#用户自定义参数)。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dag4.png" width="60%" />
+ </p>
+
+  - 其他类型节点,请参考 [任务节点类型和参数设置](#任务节点类型和参数设置)
+
+### 执行工作流定义
+  - **未上线状态的工作流定义可以编辑,但是不可以运行**,所以先上线工作流
+  > 点击工作流定义,返回工作流定义列表,点击”上线“图标,上线工作流定义。
+
+  > 下线工作流定义的时候,要先将定时管理中的定时任务下线,这样才能成功下线工作流定义  
+
+  - 点击”运行“,执行工作流。运行参数说明:
+    * 失败策略:**当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略**。”继续“表示:其他任务节点正常执行,”结束“表示:终止所有正在执行的任务,并终止整个流程。
+    * 通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件。
+    * 流程优先级:流程运行的优先级,分五个等级:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。级别高的流程在执行队列中会优先执行,相同优先级的流程按照先进先出的顺序执行。
+    * worker分组: 这个流程只能在指定的机器组里执行。默认是Default,可以在任一worker上执行。
+    * 通知组: 当流程结束,或者发生容错时,会发送流程信息邮件到通知组里所有成员。
+    * 收件人:输入邮箱后按回车键保存。当流程结束、发生容错时,会发送告警邮件到收件人列表。
+    * 抄送人:输入邮箱后按回车键保存。当流程结束、发生容错时,会抄送告警邮件到抄送人列表。
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/run-work.png" width="60%" />
+ </p>
+
+  * 补数: 执行指定日期的工作流定义,可以选择补数时间范围(目前只支持针对连续的天进行补数),比如要补5月1号到5月10号的数据,如图示: 
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/complement.png" width="60%" />
+ </p>
+
+> 补数执行模式有**串行执行、并行执行**,串行模式下,补数会从5月1号到5月10号依次执行;并行模式下,会同时执行5月1号到5月10号的任务。
+
+### 定时工作流定义
+  - 创建定时:"工作流定义->定时”
+  - 选择起止时间,在起止时间范围内,定时正常工作,超过范围,就不会再继续产生定时工作流实例了。
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/time-schedule.png" width="60%" />
+ </p>
+
+  - 添加一个每天凌晨5点执行一次的定时,如图示:
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/time-schedule2.png" width="60%" />
+ </p>
+
+  - 定时上线,**新创建的定时是下线状态,需要点击“定时管理->上线”,定时才能正常工作**。
+
+### 查看工作流实例
+  > 点击“工作流实例”,查看工作流实例列表。
+
+  > 点击工作流名称,查看任务执行状态。
+
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/instance-detail.png" width="60%" />
+ </p>
+
+  > 点击任务节点,点击“查看日志”,查看任务执行日志。
+
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task-log.png" width="60%" />
+ </p>
+
+ > 点击任务实例节点,点击**查看历史**,可以查看该工作流实例运行的该任务实例列表
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_history.png" width="60%" />
+  </p>
+ 
+
+  > 对工作流实例的操作:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/instance-list.png" width="60%" />
+</p>
+
+  * 编辑:可以对已经终止的流程进行编辑,编辑后保存的时候,可以选择是否更新到工作流定义。
+  * 重跑:可以对已经终止的流程进行重新执行。
+  * 恢复失败:针对失败的流程,可以执行恢复失败操作,从失败的节点开始执行。
+  * 停止:对正在运行的流程进行**停止**操作,后台会先对worker进程`kill`,再执行`kill -9`操作
+  * 暂停:可以对正在运行的流程进行**暂停**操作,系统状态变为**等待执行**,会等待正在执行的任务结束,暂停下一个要执行的任务。
+  * 恢复暂停:可以对暂停的流程恢复,直接从**暂停的节点**开始运行
+  * 删除:删除工作流实例及工作流实例下的任务实例
+  * 甘特图:Gantt图纵轴是某个工作流实例下的任务实例的拓扑排序,横轴是任务实例的运行时间,如图示:
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/gant-pic.png" width="60%" />
+</p>
+
+### 查看任务实例
+  > 点击“任务实例”,进入任务列表页,查询任务执行情况
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task-list.png" width="60%" />
+</p>
+
+  > 点击操作列中的“查看日志”,可以查看任务执行的日志情况。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task-log2.png" width="60%" />
+</p>
+
+### 创建数据源
+  > 数据源中心支持MySQL、POSTGRESQL、HIVE及Spark等数据源
+
+#### 创建、编辑MySQL数据源
+
+  - 点击“数据源中心->创建数据源”,根据需求创建不同类型的数据源。
+
+  - 数据源:选择MYSQL
+  - 数据源名称:输入数据源的名称
+  - 描述:输入数据源的描述
+  - IP/主机名:输入连接MySQL的IP
+  - 端口:输入连接MySQL的端口
+  - 用户名:设置连接MySQL的用户名
+  - 密码:设置连接MySQL的密码
+  - 数据库名:输入连接MySQL的数据库名称
+  - Jdbc连接参数:用于MySQL连接的参数设置,以JSON形式填写
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mysql_edit.png" width="60%" />
+ </p>
+
+  > 点击“测试连接”,测试数据源是否可以连接成功。
+
+#### 创建、编辑POSTGRESQL数据源
+
+- 数据源:选择POSTGRESQL
+- 数据源名称:输入数据源的名称
+- 描述:输入数据源的描述
+- IP/主机名:输入连接POSTGRESQL的IP
+- 端口:输入连接POSTGRESQL的端口
+- 用户名:设置连接POSTGRESQL的用户名
+- 密码:设置连接POSTGRESQL的密码
+- 数据库名:输入连接POSTGRESQL的数据库名称
+- Jdbc连接参数:用于POSTGRESQL连接的参数设置,以JSON形式填写
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/postgresql_edit.png" width="60%" />
+ </p>
+
+#### 创建、编辑HIVE数据源
+
+1.使用HiveServer2方式连接
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/hive_edit.png" width="60%" />
+  </p>
+
+  - 数据源:选择HIVE
+  - 数据源名称:输入数据源的名称
+  - 描述:输入数据源的描述
+  - IP/主机名:输入连接HIVE的IP
+  - 端口:输入连接HIVE的端口
+  - 用户名:设置连接HIVE的用户名
+  - 密码:设置连接HIVE的密码
+  - 数据库名:输入连接HIVE的数据库名称
+  - Jdbc连接参数:用于HIVE连接的参数设置,以JSON形式填写
+
+2.使用HiveServer2 HA Zookeeper方式连接
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/hive_edit2.png" width="60%" />
+  </p>
+
+
+注意:如果开启了**kerberos**,则需要填写 **Principal**
+<p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/hive_kerberos.png" width="60%" />
+  </p>
+
+
+
+
+#### 创建、编辑Spark数据源
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/spark_datesource.png" width="60%" />
+ </p>
+
+- 数据源:选择Spark
+- 数据源名称:输入数据源的名称
+- 描述:输入数据源的描述
+- IP/主机名:输入连接Spark的IP
+- 端口:输入连接Spark的端口
+- 用户名:设置连接Spark的用户名
+- 密码:设置连接Spark的密码
+- 数据库名:输入连接Spark的数据库名称
+- Jdbc连接参数:用于Spark连接的参数设置,以JSON形式填写
+
+
+
+注意:如果开启了**kerberos**,则需要填写 **Principal**
+
+<p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/sparksql_kerberos.png" width="60%" />
+  </p>
+
+### 上传资源
+  - 上传资源文件和udf函数,所有上传的文件和资源都会被存储到hdfs上,所以需要以下配置项:
+
+```
+conf/common/common.properties
+    -- hdfs.startup.state=true
+conf/common/hadoop.properties  
+    -- fs.defaultFS=hdfs://xxxx:8020  
+    -- yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
+    -- yarn.application.status.address=http://xxxx:8088/ws/v1/cluster/apps/%s
+```
+
+#### 文件管理
+
+  > 是对各种资源文件的管理,包括创建基本的txt/log/sh/conf等文件、上传jar包等各种类型文件,以及编辑、下载、删除等操作。
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/file-manage.png" width="60%" />
+ </p>
+
+  * 创建文件
+ > 文件格式支持以下几种类型:txt、log、sh、conf、cfg、py、java、sql、xml、hql
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/file_create.png" width="60%" />
+ </p>
+
+  * 上传文件
+
+> 上传文件:点击上传按钮进行上传,将文件拖拽到上传区域,文件名会自动以上传的文件名称补全
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/file_upload.png" width="60%" />
+ </p>
+
+
+  * 文件查看
+
+> 对可查看的文件类型,点击 文件名称 可以查看文件详情
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/file_detail.png" width="60%" />
+ </p>
+
+  * 下载文件
+
+> 可以在 文件详情 中点击右上角下载按钮下载文件,或者在文件列表后的下载按钮下载文件
+
+  * 文件重命名
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/file_rename.png" width="60%" />
+ </p>
+
+#### 删除
+>  文件列表->点击"删除"按钮,删除指定文件
+
+#### 资源管理
+  > 资源管理和文件管理功能类似,不同之处是资源管理是上传的UDF函数,文件管理上传的是用户程序,脚本及配置文件
+
+  * 上传udf资源
+  > 和上传文件相同。
+
+#### 函数管理
+
+  * 创建udf函数
+  > 点击“创建UDF函数”,输入udf函数参数,选择udf资源,点击“提交”,创建udf函数。
+
+ > 目前只支持HIVE的临时UDF函数
+
+  - UDF函数名称:输入UDF函数时的名称
+  - 包名类名:输入UDF函数的全路径
+  - 参数:用来标注函数的输入参数
+  - 数据库名:预留字段,用于创建永久UDF函数
+  - UDF资源:设置创建的UDF对应的资源文件
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/udf_edit.png" width="60%" />
+ </p>
+
+## 安全中心(权限系统)
+
+  - 安全中心是只有管理员账户才有权限的功能,有队列管理、租户管理、用户管理、告警组管理、worker分组、令牌管理等功能,还可以对资源、数据源、项目等授权
+  - 管理员登录,默认用户名密码:admin/escheduler123
+
+### 创建队列
+  - 队列是在执行spark、mapreduce等程序,需要用到“队列”参数时使用的。
+  - “安全中心”->“队列管理”->“创建队列”
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/create-queue.png" width="60%" />
+  </p>
+
+
+### 添加租户
+  - 租户对应的是Linux的用户,用于worker提交作业所使用的用户。如果linux没有这个用户,worker会在执行脚本的时候创建这个用户。
+  - 租户编码:**租户编码是Linux上的用户,唯一,不能重复**
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/addtenant.png" width="60%" />
+  </p>
+
+### 创建普通用户
+  -  用户分为**管理员用户**和**普通用户**
+    * 管理员有**授权和用户管理**等权限,没有**创建项目和工作流定义**的操作的权限
+    * 普通用户可以**创建项目和对工作流定义的创建,编辑,执行**等操作。
+    * 注意:**如果该用户切换了租户,则该用户所在租户下所有资源将复制到切换的新租户下**
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/useredit2.png" width="60%" />
+ </p>
+
+### 创建告警组
+  * 告警组是在启动时设置的参数,在流程结束以后会将流程的状态和其他信息以邮件形式发送给告警组。
+  - 新建、编辑告警组
+
+  <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mail_edit.png" width="60%" />
+  </p>
+
+### 创建worker分组
+  - worker分组,提供了一种让任务在指定的worker上运行的机制。管理员创建worker分组,在任务节点和运行参数中设置中可以指定该任务运行的worker分组,如果指定的分组被删除或者没有指定分组,则该任务会在任一worker上运行。
+  - worker分组内多个ip地址(**不能写别名**),以**英文逗号**分隔
+
+  <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/worker1.png" width="60%" />
+  </p>
+
+### 令牌管理
+  - 由于后端接口有登录检查,令牌管理,提供了一种可以通过调用接口的方式对系统进行各种操作。
+  - 调用示例:
+
+```令牌调用示例
+    /**
+     * test token
+     */
+    public  void doPOSTParam()throws Exception{
+        // create HttpClient
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+
+        // create http post request
+        HttpPost httpPost = new HttpPost("http://127.0.0.1:12345/escheduler/projects/create");
+        httpPost.setHeader("token", "123");
+        // set parameters
+        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
+        parameters.add(new BasicNameValuePair("projectName", "qzw"));
+        parameters.add(new BasicNameValuePair("desc", "qzw"));
+        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
+        httpPost.setEntity(formEntity);
+        CloseableHttpResponse response = null;
+        try {
+            // execute
+            response = httpclient.execute(httpPost);
+            // response status code 200
+            if (response.getStatusLine().getStatusCode() == 200) {
+                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
+                System.out.println(content);
+            }
+        } finally {
+            if (response != null) {
+                response.close();
+            }
+            httpclient.close();
+        }
+    }
+```
+
+### 授予权限
+  - 授予权限包括项目权限,资源权限,数据源权限,UDF函数权限。
+> 管理员可以对普通用户进行非其创建的项目、资源、数据源和UDF函数进行授权。因为项目、资源、数据源和UDF函数授权方式都是一样的,所以以项目授权为例介绍。
+
+> 注意:**对于用户自己创建的项目,该用户拥有所有的权限。则项目列表和已选项目列表中不会体现**
+
+  - 1.点击指定人的授权按钮,如下图:
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/auth_user.png" width="60%" />
+ </p>
+
+- 2.选中项目按钮,进行项目授权
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/auth_project.png" width="60%" />
+ </p>
+
+
+## 监控中心
+
+### 服务管理
+  - 服务管理主要是对系统中的各个服务的健康状况和基本信息的监控和显示
+
+#### master监控
+  - 主要是master的相关信息。
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master-jk.png" width="60%" />
+ </p>
+
+#### worker监控
+  - 主要是worker的相关信息。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/worker-jk.png" width="60%" />
+ </p>
+
+#### Zookeeper监控
+  - 主要是zookpeeper中各个worker和master的相关配置信息。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/zk-jk.png" width="60%" />
+ </p>
+
+#### Mysql监控
+  - 主要是mysql的健康状况
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mysql-jk.png" width="60%" />
+ </p>
+
+## 任务节点类型和参数设置
+
+### Shell节点
+  - shell节点,在worker执行的时候,会生成一个临时shell脚本,使用租户同名的linux用户执行这个脚本。
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_SHELL.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/shell_edit.png" width="60%" />
+ </p>
+
+- 节点名称:一个工作流定义中的节点名称是唯一的
+- 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
+- 描述信息:描述该节点的功能
+- 失败重试次数:任务失败重新提交的次数,支持下拉和手填
+- 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填
+- 脚本:用户开发的SHELL程序
+- 资源:是指脚本中需要调用的资源文件列表
+- 自定义参数:是SHELL局部的用户自定义参数,会替换脚本中以${变量}的内容
+
+### 子流程节点
+  - 子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_SUB_PROCESS.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/subprocess_edit.png" width="60%" />
+ </p>
+
+- 节点名称:一个工作流定义中的节点名称是唯一的
+- 运行标志:标识这个节点是否能正常调度
+- 描述信息:描述该节点的功能
+- 子节点:是选择子流程的工作流定义,右上角进入该子节点可以跳转到所选子流程的工作流定义
+
+### 依赖(DEPENDENT)节点
+  - 依赖节点,就是**依赖检查节点**。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。
+
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_DEPENDENT.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/dependent_edit.png" width="60%" />
+ </p>
+
+  > 依赖节点提供了逻辑判断功能,比如检查昨天的B流程是否成功,或者C流程是否执行成功。
+
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/depend-node.png" width="80%" />
+ </p>
+
+  > 例如,A流程为周报任务,B、C流程为天任务,A任务需要B、C任务在上周的每一天都执行成功,如图示:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/depend-node2.png" width="80%" />
+ </p>
+
+  > 假如,周报A同时还需要自身在上周二执行成功:
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/depend-node3.png" width="80%" />
+ </p>
+
+### 存储过程节点
+  - 根据选择的数据源,执行存储过程。
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_PROCEDURE.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/procedure_edit.png" width="60%" />
+ </p>
+
+- 数据源:存储过程的数据源类型支持MySQL和POSTGRESQL两种,选择对应的数据源
+- 方法:是存储过程的方法名称
+- 自定义参数:存储过程的自定义参数类型支持IN、OUT两种,数据类型支持VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN九种数据类型
+
+### SQL节点
+  - 执行非查询SQL功能
+  <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/sql-node.png" width="60%" />
+ </p>
+
+  - 执行查询SQL功能,可以选择通过表格和附件形式发送邮件到指定的收件人。
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_SQL.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/sql-node2.png" width="60%" />
+ </p>
+
+- 数据源:选择对应的数据源
+- sql类型:支持查询和非查询两种,查询是select类型的查询,是有结果集返回的,可以指定邮件通知为表格、附件或表格附件三种模板。非查询是没有结果集返回的,是针对update、delete、insert三种类型的操作
+- sql参数:输入参数格式为key1=value1;key2=value2…
+- sql语句:SQL语句
+- UDF函数:对于HIVE类型的数据源,可以引用资源中心中创建的UDF函数,其他类型的数据源暂不支持UDF函数
+- 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中${变量}
+
+### SPARK节点
+  - 通过SPARK节点,可以直接直接执行SPARK程序,对于spark节点,worker会使用`spark-submit`方式提交任务
+
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_SPARK.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/spark_edit.png" width="60%" />
+ </p>
+
+- 程序类型:支持JAVA、Scala和Python三种语言
+- 主函数的class:是Spark程序的入口Main Class的全路径
+- 主jar包:是Spark的jar包
+- 部署方式:支持yarn-cluster、yarn-client、和local三种模式
+- Driver内核数:可以设置Driver内核数及内存数
+- Executor数量:可以设置Executor数量、Executor内存数和Executor内核数
+- 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
+- 其他参数:支持 --jars、--files、--archives、--conf格式
+- 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
+- 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
+
+ 注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Spark则没有主函数的class,其他都是一样
+
+### MapReduce(MR)节点
+  - 使用MR节点,可以直接执行MR程序。对于mr节点,worker会使用`hadoop jar`方式提交任务
+
+
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_MR.png)任务节点到画板中,双击任务节点,如下图:
+
+ 1. JAVA程序
+
+ <p align="center">
+    <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mr_java.png" width="60%" />
+  </p>
+
+- 主函数的class:是MR程序的入口Main Class的全路径
+- 程序类型:选择JAVA语言 
+- 主jar包:是MR的jar包
+- 命令行参数:是设置MR程序的输入参数,支持自定义参数变量的替换
+- 其他参数:支持 –D、-files、-libjars、-archives格式
+- 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
+- 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
+
+2. Python程序
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/mr_edit.png" width="60%" />
+ </p>
+
+- 程序类型:选择Python语言 
+- 主jar包:是运行MR的Python jar包
+- 其他参数:支持 –D、-mapper、-reducer、-input  -output格式,这里可以设置用户自定义参数的输入,比如:
+- -mapper  "mapper.py 1"  -file mapper.py   -reducer reducer.py  -file reducer.py –input /journey/words.txt -output /journey/out/mr/${currentTimeMillis}
+- 其中 -mapper 后的 mapper.py 1是两个参数,第一个参数是mapper.py,第二个参数是1
+- 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
+- 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
+
+### Python节点
+  - 使用python节点,可以直接执行python脚本,对于python节点,worker会使用`python **`方式提交任务。
+
+
+> 拖动工具栏中的![PNG](https://analysys.github.io/easyscheduler_docs_cn/images/toolbar_PYTHON.png)任务节点到画板中,双击任务节点,如下图:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/python_edit.png" width="60%" />
+ </p>
+
+- 脚本:用户开发的Python程序
+- 资源:是指脚本中需要调用的资源文件列表
+- 自定义参数:是Python局部的用户自定义参数,会替换脚本中以${变量}的内容
+
+### 系统参数
+
+<table>
+    <tr><th>变量</th><th>含义</th></tr>
+    <tr>
+        <td>${system.biz.date}</td>
+        <td>日常调度实例定时的定时时间前一天,格式为 yyyyMMdd,补数据时,该日期 +1</td>
+    </tr>
+    <tr>
+        <td>${system.biz.curdate}</td>
+        <td>日常调度实例定时的定时时间,格式为 yyyyMMdd,补数据时,该日期 +1</td>
+    </tr>
+    <tr>
+        <td>${system.datetime}</td>
+        <td>日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss,补数据时,该日期 +1</td>
+    </tr>
+</table>
+
+
+### 时间自定义参数
+
+> 支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数" 或指定 "常量"。
+
+> 我们定义这种基准变量为 $[...] 格式的,$[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等
+
+> 也可以这样:
+
+- 后 N 年:$[add_months(yyyyMMdd,12*N)]
+- 前 N 年:$[add_months(yyyyMMdd,-12*N)]
+- 后 N 月:$[add_months(yyyyMMdd,N)]
+- 前 N 月:$[add_months(yyyyMMdd,-N)]
+- 后 N 周:$[yyyyMMdd+7*N]
+- 前 N 周:$[yyyyMMdd-7*N]
+- 后 N 天:$[yyyyMMdd+N]
+- 前 N 天:$[yyyyMMdd-N]
+- 后 N 小时:$[HHmmss+N/24]
+- 前 N 小时:$[HHmmss-N/24]
+- 后 N 分钟:$[HHmmss+N/24/60]
+- 前 N 分钟:$[HHmmss-N/24/60]
+
+### 用户自定义参数
+
+> 用户自定义参数分为全局参数和局部参数。全局参数是保存工作流定义和工作流实例的时候传递的全局参数,全局参数可以在整个流程中的任何一个任务节点的局部参数引用。
+
+> 例如:
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/local_parameter.png" width="60%" />
+ </p>
+
+> global_bizdate为全局参数,引用的是系统参数。
+
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/global_parameter.png" width="60%" />
+ </p>
+
+> 任务中local_param_bizdate通过${global_bizdate}来引用全局参数,对于脚本可以通过${local_param_bizdate}来引用变量local_param_bizdate的值,或通过JDBC直接将local_param_bizdate的值set进去
diff --git a/docsite.config.yml b/docsite.config.yml
new file mode 100755
index 0000000..83b5ba7
--- /dev/null
+++ b/docsite.config.yml
@@ -0,0 +1,35 @@
+pages:
+ # key is the dirname of pages in src/pages
+ home:
+  # 首页配置
+  zh-cn:
+   title: 'Apache DolphinScheduler | 首页'
+   keywords: 'DolphinScheduler,调度系统'
+   description: '页面内容简介'
+  # home config
+  en-us:
+   title: 'Apache DolphinScheduler | Home'
+   keywords: 'DolphinScheduler, scheduler, big data'
+   description: 'page description'
+ community:
+  # 社区页配置
+  zh-cn:
+   title: 'Apache DolphinScheduler | 社区'
+   keywords: 'DolphinScheduler, DolphinScheduler新闻,DolphinScheduler动态'
+   description: '页面内容简介'
+  # community page config
+  en-us:
+   title: 'Apache DolphinScheduler | Community'
+   keywords: 'DolphinScheduler, News,Events'
+   description: 'page description'
+ blog:
+  # 博客列表页配置
+  zh-cn:
+   title: 'Apache DolphinScheduler | 博客'
+   keywords: '博客,DolphinScheduler博客'
+   description: '页面内容简介'
+  en-us:
+   # blog list page config
+   title: 'Apache DolphinScheduler | BLOG'
+   keywords: 'blog,DolphinScheduler blog'
+   description: 'page description'
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100755
index 0000000..bef7234
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,60 @@
+require('babel-register')();
+const gulp = require('gulp');
+const gutil = require('gulp-util');
+const webpack = require('webpack');
+const opn = require('opn');
+const WebpackDevServer = require('webpack-dev-server');
+const siteConfig = require('./site_config/site').default;
+const webpackConfig = require('./webpack.config.js');
+
+const port = siteConfig.port || 8080;
+
+// The development server (the recommended option for development)
+gulp.task('default', ['webpack-dev-server']);
+
+// Production build
+gulp.task('build', ['webpack:build']);
+
+gulp.task('webpack-dev-server', () => {
+  // modify some webpack config options
+  const myConfig = Object.create(webpackConfig);
+  myConfig.plugins.push(new webpack.SourceMapDevToolPlugin({}));
+  // Start a webpack-dev-server
+  new WebpackDevServer(webpack(myConfig), {
+    publicPath: `http://127.0.0.1:${port}/build/`,
+    stats: {
+      colors: true,
+    },
+  }).listen(port, '127.0.0.1', err => {
+    if (err) throw new gutil.PluginError('webpack-dev-server', err);
+    opn(`http://127.0.0.1:${port}/`);
+    gutil.log('[webpack-dev-server]', `http://127.0.0.1:${port}/webpack-dev-server/index.html`);
+  });
+});
+
+gulp.task('webpack:build', callback => {
+  // modify some webpack config options
+  const myConfig = Object.create(webpackConfig);
+  myConfig.output.publicPath = `${siteConfig.rootPath}/build/`;
+  myConfig.plugins = myConfig.plugins.concat(
+    new webpack.DefinePlugin({
+      'process.env': {
+        // This has effect on the react lib size
+        NODE_ENV: JSON.stringify('production'),
+      },
+    }),
+    new webpack.optimize.UglifyJsPlugin()
+  );
+
+  // run webpack
+  webpack(myConfig, (err, stats) => {
+    if (err) throw new gutil.PluginError('webpack:build', err);
+    gutil.log(
+      '[webpack:build]',
+      stats.toString({
+        colors: true,
+      })
+    );
+    callback();
+  });
+});
diff --git a/img/alibaba.png b/img/alibaba.png
new file mode 100755
index 0000000..3f9ff2b
Binary files /dev/null and b/img/alibaba.png differ
diff --git a/img/alibaba_hover.png b/img/alibaba_hover.png
new file mode 100755
index 0000000..d3f8f98
Binary files /dev/null and b/img/alibaba_hover.png differ
diff --git a/img/apachecon-na-2018.png b/img/apachecon-na-2018.png
new file mode 100755
index 0000000..e7fccfd
Binary files /dev/null and b/img/apachecon-na-2018.png differ
diff --git a/img/architecture.jpg b/img/architecture.jpg
new file mode 100755
index 0000000..0777474
Binary files /dev/null and b/img/architecture.jpg differ
diff --git a/img/architecture.png b/img/architecture.png
new file mode 100755
index 0000000..985c94e
Binary files /dev/null and b/img/architecture.png differ
diff --git a/img/brhtqqzh.jpeg b/img/brhtqqzh.jpeg
new file mode 100755
index 0000000..209dea8
Binary files /dev/null and b/img/brhtqqzh.jpeg differ
diff --git a/img/documents.png b/img/documents.png
new file mode 100755
index 0000000..f46d048
Binary files /dev/null and b/img/documents.png differ
diff --git a/img/ds_gray.png b/img/ds_gray.png
new file mode 100755
index 0000000..ea3230e
Binary files /dev/null and b/img/ds_gray.png differ
diff --git a/img/dubbo.ico b/img/dubbo.ico
new file mode 100755
index 0000000..eedaf39
Binary files /dev/null and b/img/dubbo.ico differ
diff --git a/img/dubbo_colorful.png b/img/dubbo_colorful.png
new file mode 100755
index 0000000..f2bd1c6
Binary files /dev/null and b/img/dubbo_colorful.png differ
diff --git a/img/dubbo_gray.png b/img/dubbo_gray.png
new file mode 100755
index 0000000..3d83285
Binary files /dev/null and b/img/dubbo_gray.png differ
diff --git a/img/dubbo_white.png b/img/dubbo_white.png
new file mode 100755
index 0000000..c0e6df5
Binary files /dev/null and b/img/dubbo_white.png differ
diff --git a/img/feature_hogh.png b/img/feature_hogh.png
new file mode 100755
index 0000000..d7d3dba
Binary files /dev/null and b/img/feature_hogh.png differ
diff --git a/img/feature_loadbalances.png b/img/feature_loadbalances.png
new file mode 100755
index 0000000..5607311
Binary files /dev/null and b/img/feature_loadbalances.png differ
diff --git a/img/feature_maintenance.png b/img/feature_maintenance.png
new file mode 100755
index 0000000..ee35989
Binary files /dev/null and b/img/feature_maintenance.png differ
diff --git a/img/feature_runtime.png b/img/feature_runtime.png
new file mode 100755
index 0000000..dd2e51e
Binary files /dev/null and b/img/feature_runtime.png differ
diff --git a/img/feature_service.png b/img/feature_service.png
new file mode 100755
index 0000000..d759e26
Binary files /dev/null and b/img/feature_service.png differ
diff --git a/img/feature_transpart.png b/img/feature_transpart.png
new file mode 100755
index 0000000..a6567db
Binary files /dev/null and b/img/feature_transpart.png differ
diff --git a/img/hlogo_colorful.png b/img/hlogo_colorful.png
new file mode 100755
index 0000000..ea3230e
Binary files /dev/null and b/img/hlogo_colorful.png differ
diff --git a/img/hlogo_white.png b/img/hlogo_white.png
new file mode 100755
index 0000000..ea3230e
Binary files /dev/null and b/img/hlogo_white.png differ
diff --git a/img/issue.png b/img/issue.png
new file mode 100755
index 0000000..8c62c17
Binary files /dev/null and b/img/issue.png differ
diff --git a/img/mailinglist.png b/img/mailinglist.png
new file mode 100755
index 0000000..e3d4094
Binary files /dev/null and b/img/mailinglist.png differ
diff --git a/img/mailinglist_hover.png b/img/mailinglist_hover.png
new file mode 100755
index 0000000..5e3b5d5
Binary files /dev/null and b/img/mailinglist_hover.png differ
diff --git a/img/pullrequest.png b/img/pullrequest.png
new file mode 100755
index 0000000..43a659e
Binary files /dev/null and b/img/pullrequest.png differ
diff --git a/img/quick_start.png b/img/quick_start.png
new file mode 100755
index 0000000..ecb707d
Binary files /dev/null and b/img/quick_start.png differ
diff --git a/img/review_img4.jpg b/img/review_img4.jpg
new file mode 100755
index 0000000..ae7f994
Binary files /dev/null and b/img/review_img4.jpg differ
diff --git a/img/review_img4.png b/img/review_img4.png
new file mode 100644
index 0000000..b3385f6
Binary files /dev/null and b/img/review_img4.png differ
diff --git a/img/segmentfault.png b/img/segmentfault.png
new file mode 100755
index 0000000..50703ae
Binary files /dev/null and b/img/segmentfault.png differ
diff --git a/img/segmentfault_hover.png b/img/segmentfault_hover.png
new file mode 100755
index 0000000..bc52a15
Binary files /dev/null and b/img/segmentfault_hover.png differ
diff --git a/img/so-icon-hover.png b/img/so-icon-hover.png
new file mode 100755
index 0000000..1f91a99
Binary files /dev/null and b/img/so-icon-hover.png differ
diff --git a/img/so-icon.png b/img/so-icon.png
new file mode 100755
index 0000000..b187634
Binary files /dev/null and b/img/so-icon.png differ
diff --git a/img/system/arrow_down.png b/img/system/arrow_down.png
new file mode 100755
index 0000000..2924eb5
Binary files /dev/null and b/img/system/arrow_down.png differ
diff --git a/img/system/arrow_right.png b/img/system/arrow_right.png
new file mode 100755
index 0000000..4555b12
Binary files /dev/null and b/img/system/arrow_right.png differ
diff --git a/img/system/blog.png b/img/system/blog.png
new file mode 100755
index 0000000..579f759
Binary files /dev/null and b/img/system/blog.png differ
diff --git a/img/system/community.png b/img/system/community.png
new file mode 100755
index 0000000..5836a4a
Binary files /dev/null and b/img/system/community.png differ
diff --git a/img/system/docs.png b/img/system/docs.png
new file mode 100755
index 0000000..f41db69
Binary files /dev/null and b/img/system/docs.png differ
diff --git a/img/system/docs_hover.png b/img/system/docs_hover.png
new file mode 100755
index 0000000..3568312
Binary files /dev/null and b/img/system/docs_hover.png differ
diff --git a/img/system/docs_normal.png b/img/system/docs_normal.png
new file mode 100755
index 0000000..4f31e50
Binary files /dev/null and b/img/system/docs_normal.png differ
diff --git a/img/system/menu_gray.png b/img/system/menu_gray.png
new file mode 100755
index 0000000..9838a87
Binary files /dev/null and b/img/system/menu_gray.png differ
diff --git a/img/system/menu_white.png b/img/system/menu_white.png
new file mode 100755
index 0000000..5943a14
Binary files /dev/null and b/img/system/menu_white.png differ
diff --git a/img/system/next.png b/img/system/next.png
new file mode 100755
index 0000000..d65f97d
Binary files /dev/null and b/img/system/next.png differ
diff --git a/img/system/prev.png b/img/system/prev.png
new file mode 100755
index 0000000..a68639b
Binary files /dev/null and b/img/system/prev.png differ
diff --git a/img/twitter.png b/img/twitter.png
new file mode 100755
index 0000000..368e452
Binary files /dev/null and b/img/twitter.png differ
diff --git a/img/twitter_hover.png b/img/twitter_hover.png
new file mode 100755
index 0000000..11c417f
Binary files /dev/null and b/img/twitter_hover.png differ
diff --git a/img/users_aisino.gif b/img/users_aisino.gif
new file mode 100755
index 0000000..da92672
Binary files /dev/null and b/img/users_aisino.gif differ
diff --git a/img/users_aisino.png b/img/users_aisino.png
new file mode 100755
index 0000000..2d88c5b
Binary files /dev/null and b/img/users_aisino.png differ
diff --git a/img/users_alibaba.png b/img/users_alibaba.png
new file mode 100755
index 0000000..417fd75
Binary files /dev/null and b/img/users_alibaba.png differ
diff --git a/img/users_dida.png b/img/users_dida.png
new file mode 100755
index 0000000..0660c51
Binary files /dev/null and b/img/users_dida.png differ
diff --git a/img/users_duodian.jpg b/img/users_duodian.jpg
new file mode 100755
index 0000000..ddfd589
Binary files /dev/null and b/img/users_duodian.jpg differ
diff --git a/img/users_fenghuang.jpg b/img/users_fenghuang.jpg
new file mode 100755
index 0000000..e471bc0
Binary files /dev/null and b/img/users_fenghuang.jpg differ
diff --git a/img/users_huanqiu.jpeg b/img/users_huanqiu.jpeg
new file mode 100755
index 0000000..5df970f
Binary files /dev/null and b/img/users_huanqiu.jpeg differ
diff --git a/img/users_huarunwanjia.png b/img/users_huarunwanjia.png
new file mode 100755
index 0000000..1dfbf98
Binary files /dev/null and b/img/users_huarunwanjia.png differ
diff --git a/img/users_jiliguala.png b/img/users_jiliguala.png
new file mode 100755
index 0000000..cd70079
Binary files /dev/null and b/img/users_jiliguala.png differ
diff --git a/img/users_meituan.png b/img/users_meituan.png
new file mode 100755
index 0000000..e10f486
Binary files /dev/null and b/img/users_meituan.png differ
diff --git a/img/users_pingan.jpg b/img/users_pingan.jpg
new file mode 100755
index 0000000..b3ae3a4
Binary files /dev/null and b/img/users_pingan.jpg differ
diff --git a/img/users_shuidi.jpg b/img/users_shuidi.jpg
new file mode 100755
index 0000000..b70c389
Binary files /dev/null and b/img/users_shuidi.jpg differ
diff --git a/img/users_shulidata.jpg b/img/users_shulidata.jpg
new file mode 100755
index 0000000..6040bc2
Binary files /dev/null and b/img/users_shulidata.jpg differ
diff --git a/img/users_tianchuang.png b/img/users_tianchuang.png
new file mode 100755
index 0000000..21ec43c
Binary files /dev/null and b/img/users_tianchuang.png differ
diff --git a/img/users_xiaobangguihua.png b/img/users_xiaobangguihua.png
new file mode 100755
index 0000000..c9fd01e
Binary files /dev/null and b/img/users_xiaobangguihua.png differ
diff --git a/img/users_xueqiu.png b/img/users_xueqiu.png
new file mode 100755
index 0000000..ddc6dea
Binary files /dev/null and b/img/users_xueqiu.png differ
diff --git a/img/users_yiguan.svg b/img/users_yiguan.svg
new file mode 100755
index 0000000..97e25bc
--- /dev/null
+++ b/img/users_yiguan.svg
@@ -0,0 +1,416 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="126px" height="36px" viewBox="0 0 126 36" enable-background="new 0 0 126 36" xml:space="preserve">
+<g>
+	<g>
+		<g>
+			<path fill="#0097E0" d="M0,4.696c4.754-5.86,18.759-7.391,17.835,2.207c-0.769,8.047-11.799,11.92-14.147,7.885
+				C-0.126,8.239,24.242-1.94,21.767,16.349h-3.073C23.797,1.008,4.083,6.476,5.348,12.53c0.806,3.851,12.147,2.172,12.047-6
+				C17.306-0.658,7.961,0.539,3.949,4.7L0,4.696z"/>
+			<path fill="#0097E0" d="M27.441,16.383h-2.36l0.864-3.888c0.072-0.312,0.548-1.933,0.083-2.302
+				c-0.663-0.523-2.882-0.678-3.949,0.179l0.189-0.856c0.552-0.344,1.871-1.133,4.098-1.133c0.904,0,1.554,0.242,1.951,0.726
+				c0.397,0.49,0.483,1.216,0.264,2.188L27.441,16.383z"/>
+			<path fill="#0097E0" d="M31.752,14.009c0.386-1.634,3.412-1.429,3.772-1.458l-0.517,2.259
+				C34.769,14.978,31.512,15.034,31.752,14.009 M34.677,16.383h2.328l1.196-5.328c0.211-0.926,0.031-1.611-0.54-2.045
+				c-0.574-0.435-1.614-0.731-3.121-0.651c-1.903,0.103-3.239,1.062-3.536,1.133l-0.193,0.927c0,0,1.278-1.005,3.823-0.778
+				c1.778,0.158,1.324,1.112,1.224,1.547l-0.007,0.04c-1.17,0.044-5.927-0.256-6.619,2.877c-0.368,1.655,1.354,2.279,2.135,2.279
+				c1.43,0,3.331-0.769,3.493-0.871L34.677,16.383z"/>
+			<polygon fill="#0097E0" points="41.008,16.383 38.777,16.383 41.196,5.717 43.428,5.717 			"/>
+			<polygon fill="#0097E0" points="46.902,13.702 50.343,8.421 52.843,8.421 45.508,19.395 42.976,19.395 45.818,15.324 
+				43.589,8.421 45.211,8.421 			"/>
+			<path fill="#0097E0" d="M57.673,9.477c0.8,0.188,1.492,0.637,1.488,0.635l0.2-0.826c0,0-1.353-0.865-3.219-0.865
+				c-1.592,0-2.742,0.425-3.172,1.367c-0.56,1.227,0.39,2.357,1.598,2.634c1.341,0.309,1.946,0.837,1.824,1.478
+				c-0.126,0.657-1.752,1.19-2.556,1.19c-0.802,0-2.828-0.046-4.181-2.45l-0.574,0.766c0,0,1.675,2.858,4.839,2.979
+				c1.985,0.08,3.382-0.283,4.284-1.441c0.913-1.175,0.567-2.313,0.096-2.733c-1.289-1.153-3.651-0.427-3.43-1.893
+				C54.976,9.644,56.402,9.171,57.673,9.477"/>
+			<polygon fill="#0097E0" points="63.164,13.702 66.605,8.421 69.106,8.421 61.836,19.395 59.305,19.395 62.079,15.324 
+				59.853,8.421 61.472,8.421 			"/>
+			<path fill="#0097E0" d="M73.938,9.477c0.8,0.188,1.489,0.637,1.486,0.635l0.199-0.826c0,0-1.353-0.865-3.221-0.865
+				c-1.59,0-2.74,0.425-3.167,1.367c-0.563,1.227,0.387,2.357,1.596,2.634c1.341,0.309,1.947,0.837,1.823,1.478
+				c-0.13,0.657-1.754,1.19-2.556,1.19c-0.801,0-2.828-0.046-4.181-2.45l-0.576,0.766c0,0,1.676,2.858,4.843,2.979
+				c1.983,0.08,3.381-0.283,4.28-1.441c0.915-1.175,0.57-2.313,0.097-2.733c-1.288-1.153-3.651-0.427-3.429-1.893
+				C71.236,9.644,72.664,9.171,73.938,9.477"/>
+		</g>
+		<g>
+			<path fill="#0097E0" d="M94.644,19.161c-0.041-0.71-0.183-1.508-0.426-2.395c2.05,0.076,3.162-0.582,3.334-1.976l0.429-3.038
+				h-1.107c-0.958,1.912-2.418,3.513-4.382,4.805c-1.966,1.292-4.02,2.222-6.162,2.793c-0.436-0.52-0.898-1.115-1.39-1.785
+				c1.838-0.394,3.624-1.077,5.358-2.052c1.736-0.975,3.088-2.23,4.056-3.761H92.52c-1.037,1.305-2.316,2.39-3.839,3.257
+				c-1.523,0.868-3.046,1.516-4.571,1.947c-0.354-0.468-0.777-1.075-1.271-1.823c2.553-0.405,4.825-1.533,6.817-3.381h-1.794
+				c-1.524,0.873-2.979,1.531-4.366,1.975c-0.336-0.506-0.751-1.088-1.243-1.748c2.23-0.646,4.319-1.734,6.268-3.267h-0.611
+				c-0.561,0-1.215,0.038-1.964,0.115c0.177-0.709,0.299-1.304,0.366-1.786l0.66-4.673c0.071-0.506,0.12-1.114,0.145-1.824
+				c0.766,0.076,1.409,0.114,1.931,0.114h8.82c0.548,0,1.202-0.038,1.964-0.114c-0.182,0.747-0.306,1.355-0.372,1.824l-0.658,4.673
+				c-0.069,0.481-0.116,1.076-0.14,1.786c-0.778-0.077-1.423-0.115-1.931-0.115h-5.155c-0.405,0.431-0.812,0.785-1.22,1.065h8.019
+				c0.649,0,1.419-0.039,2.309-0.116c-0.2,0.875-0.332,1.533-0.395,1.977l-0.425,3c-0.188,1.432-0.688,2.51-1.496,3.239
+				C97.558,18.606,96.315,19.033,94.644,19.161 M88.607,6.737h7.943l0.15-1.062h-7.943L88.607,6.737z M89.037,3.7h7.943l0.149-1.065
+				h-7.942L89.037,3.7z"/>
+			<path fill="#0097E0" d="M107.378,4.381l0.322-2.278c0.747,0.026,1.405,0.05,1.975,0.075h4.658
+				c0.264,0.217,0.484,0.443,0.669,0.685c-0.487,2.811-1.363,5.394-2.624,7.75c0.595,0.925,1.165,1.937,1.709,3.039l-1.96,1.71
+				c-0.398-0.785-0.794-1.595-1.184-2.431c-1.01,1.555-2.407,2.885-4.191,3.987c-0.244-0.708-0.597-1.456-1.059-2.242
+				c1.729-0.974,3.105-2.24,4.127-3.797c-0.794-1.317-1.625-2.736-2.491-4.255l2.178-1.102c0.604,0.95,1.165,1.937,1.683,2.963
+				c0.497-1.443,0.896-2.835,1.201-4.179h-3.017C108.798,4.332,108.132,4.357,107.378,4.381 M111.362,19.426
+				c-0.226-0.659-0.554-1.405-0.981-2.24c2.74-0.66,4.77-1.941,6.09-3.846c1.32-1.906,2.164-4.296,2.53-7.171l0.263-1.862
+				c0.871,0.14,1.653,0.279,2.348,0.418c-0.27,2.444-0.82,4.634-1.654,6.572h1.489c-0.175,0.608-0.291,1.064-0.346,1.368
+				l-0.554,3.913c-0.037,0.265,0.094,0.418,0.395,0.457h0.61c0.438-0.039,0.727-0.298,0.864-0.779
+				c0.138-0.482,0.226-0.981,0.261-1.501c0.926,0.469,1.648,0.76,2.167,0.872c-0.197,0.863-0.481,1.675-0.85,2.441
+				c-0.37,0.767-1.075,1.182-2.114,1.246h-2.024c-0.535,0.012-0.988-0.052-1.357-0.19c-0.369-0.141-0.524-0.457-0.467-0.951
+				l0.606-4.292C117.239,16.564,114.813,18.414,111.362,19.426 M114.155,12.361c0.219-1.012,0.355-1.711,0.41-2.09l0.998-7.065
+				c0.053-0.38,0.111-1.065,0.175-2.052c1.172,0.076,1.932,0.115,2.275,0.115h5.652c0.203,0,0.438-0.01,0.71-0.03
+				c0.271-0.019,0.726-0.047,1.366-0.085c-0.203,0.899-0.337,1.571-0.398,2.013l-0.981,6.952c-0.055,0.379-0.112,1.065-0.176,2.052
+				h-2.52c0.216-0.987,0.351-1.673,0.403-2.052l0.95-6.724h-5.193l-0.972,6.875c-0.054,0.379-0.113,1.078-0.18,2.09H114.155z"/>
+		</g>
+	</g>
+	<g>
+		<g>
+			<path fill="#FF8500" d="M22.374,27.293c-0.678,0.655-1.161,1.078-1.45,1.269c-0.274,0.179-0.513,0.268-0.716,0.268
+				c-0.204,0-0.338-0.107-0.404-0.321c-0.063-0.227-0.084-0.396-0.062-0.509c0.022-0.113,0.074-0.193,0.155-0.241
+				c0.038-0.012,0.156-0.062,0.353-0.151c0.197-0.09,0.434-0.215,0.71-0.375c0.276-0.16,0.581-0.354,0.912-0.58
+				c0.331-0.227,0.659-0.495,0.982-0.804c0.207-0.202,0.388-0.378,0.542-0.526c0.154-0.148,0.273-0.283,0.356-0.402
+				c0.188-0.226,0.347-0.487,0.477-0.785c0.127-0.285,0.228-0.428,0.299-0.428c0.167,0,0.226,0.131,0.175,0.392
+				c-0.132,0.679-0.625,1.453-1.477,2.321c0.198,0.214,0.274,0.435,0.23,0.661c-0.012,0.059-0.041,0.148-0.088,0.267
+				c-0.17,0.382-0.361,1.113-0.572,2.196l-0.742,4.07c-0.13,0.667-0.269,1.16-0.415,1.482c-0.068,0.166-0.148,0.285-0.24,0.356
+				s-0.181,0.113-0.267,0.125c-0.086,0.012-0.159-0.012-0.219-0.071c-0.061-0.06-0.092-0.144-0.095-0.25
+				c0.005-0.214,0.046-0.512,0.12-0.893c0.04-0.202,0.096-0.461,0.17-0.776c0.073-0.315,0.166-0.699,0.279-1.151
+				c0.234-0.893,0.438-1.786,0.613-2.679S22.3,28.043,22.374,27.293z M26.467,30.043c0.167,0,0.288,0.101,0.362,0.304
+				c0.074,0.202,0.094,0.393,0.059,0.571c-0.035,0.178-0.125,0.333-0.271,0.465c-0.074,0.07-0.213,0.187-0.418,0.348
+				c-0.205,0.16-0.475,0.365-0.811,0.615c-0.672,0.5-1.161,0.857-1.466,1.071c-0.305,0.215-0.5,0.321-0.583,0.321
+				c-0.084,0-0.118-0.042-0.101-0.125c0.016-0.083,0.105-0.202,0.267-0.356c0.321-0.298,0.6-0.562,0.837-0.795
+				c0.236-0.232,0.439-0.443,0.608-0.634c0.335-0.369,0.614-0.756,0.837-1.161C26.014,30.252,26.24,30.043,26.467,30.043z
+				 M26.933,26.008c-0.291,0.571-0.625,1.083-1,1.535c-0.364,0.453-0.636,0.744-0.817,0.875c-0.126,0.096-0.227,0.152-0.302,0.17
+				s-0.125,0.009-0.147-0.026c-0.023-0.036-0.024-0.09-0.004-0.161s0.062-0.149,0.126-0.231c0.564-0.81,0.972-1.44,1.222-1.893
+				c0.25-0.453,0.4-0.81,0.452-1.071s0.076-0.465,0.074-0.607s0.005-0.256,0.021-0.339c0.037-0.19,0.109-0.286,0.217-0.286
+				c0.047,0,0.112,0.024,0.192,0.072c0.081,0.047,0.157,0.112,0.23,0.196c0.074,0.083,0.128,0.185,0.165,0.303
+				c0.037,0.119,0.041,0.251,0.013,0.394c-0.009,0.048-0.022,0.098-0.039,0.151c-0.017,0.054-0.037,0.11-0.06,0.169
+				c0.689,0.024,1.369,0.033,2.041,0.027c0.671-0.006,1.289-0.018,1.855-0.036c0.566-0.018,1.055-0.041,1.468-0.07
+				c0.412-0.03,0.704-0.051,0.874-0.063c0.203,0,0.372,0.042,0.505,0.125c0.133,0.084,0.229,0.188,0.289,0.313
+				c0.059,0.124,0.073,0.252,0.042,0.384c-0.032,0.131-0.116,0.237-0.251,0.32c-0.243,0.203-0.484,0.414-0.725,0.635
+				c-0.241,0.219-0.468,0.448-0.682,0.687c-0.438,0.464-0.776,0.696-1.015,0.696c-0.12,0-0.172-0.036-0.159-0.106
+				c0.014-0.072,0.116-0.227,0.306-0.465c0.62-0.786,0.943-1.243,0.969-1.374c0.025-0.132-0.028-0.227-0.16-0.286
+				c-0.24-0.06-0.814-0.104-1.724-0.134C30,25.881,28.674,25.913,26.933,26.008z M29.811,28.544
+				c-0.023,0.118-0.069,0.231-0.138,0.339c-0.164,0.285-0.324,0.737-0.48,1.356c-0.159,0.631-0.426,1.905-0.8,3.82
+				c-0.107,0.547-0.24,0.985-0.4,1.312c-0.16,0.327-0.305,0.491-0.437,0.491c-0.072,0-0.156-0.061-0.252-0.179
+				c-0.084-0.119-0.081-0.414,0.011-0.885c0.092-0.469,0.243-1.121,0.454-1.954c0.105-0.416,0.204-0.83,0.296-1.241
+				c0.092-0.409,0.178-0.817,0.257-1.223c0.077-0.393,0.137-0.72,0.183-0.981c0.045-0.262,0.077-0.47,0.095-0.625
+				c0.018-0.155,0.034-0.298,0.048-0.429c0.088-0.452,0.27-0.679,0.545-0.679c0.083,0,0.168,0.027,0.253,0.081
+				c0.085,0.054,0.159,0.122,0.22,0.205c0.061,0.083,0.106,0.176,0.134,0.276C29.828,28.332,29.832,28.436,29.811,28.544z
+				 M33.863,33.061c-0.019,0.095-0.197,0.213-0.536,0.356c-0.325,0.131-0.583,0.196-0.774,0.196s-0.355-0.047-0.492-0.144
+				c-0.125-0.094-0.278-0.275-0.459-0.544c-0.181-0.268-0.363-0.574-0.547-0.919c-0.087-0.167-0.171-0.333-0.252-0.5
+				c-0.082-0.166-0.153-0.333-0.216-0.499c-0.126-0.334-0.182-0.543-0.165-0.626c0.023-0.118,0.085-0.178,0.188-0.178
+				c0.102,0,0.209,0.076,0.322,0.231c0.675,0.953,1.536,1.72,2.583,2.303C33.763,32.87,33.88,32.977,33.863,33.061z"/>
+			<path fill="#FF8500" d="M27.555,36c-0.117,0-0.234-0.075-0.359-0.229c-0.117-0.164-0.12-0.469-0.017-0.997
+				c0.093-0.474,0.246-1.133,0.456-1.961c0.104-0.412,0.203-0.829,0.295-1.237c0.093-0.414,0.179-0.824,0.256-1.22
+				c0.075-0.385,0.137-0.714,0.183-0.979c0.044-0.259,0.076-0.467,0.094-0.617c0.018-0.154,0.034-0.297,0.048-0.427
+				c0.104-0.536,0.333-0.802,0.683-0.802c0.11,0,0.22,0.034,0.327,0.102c0.099,0.062,0.186,0.143,0.257,0.239
+				c0.071,0.098,0.124,0.205,0.156,0.322c0.034,0.122,0.038,0.248,0.013,0.375c-0.026,0.135-0.079,0.265-0.157,0.387
+				c-0.153,0.268-0.31,0.713-0.463,1.317c-0.157,0.623-0.426,1.905-0.799,3.812c-0.108,0.556-0.247,1.009-0.411,1.346
+				C27.927,35.819,27.749,36,27.555,36z M29.192,27.807c-0.074,0-0.299,0-0.41,0.566c-0.012,0.12-0.028,0.263-0.046,0.418
+				c-0.019,0.158-0.05,0.364-0.096,0.632s-0.108,0.599-0.184,0.985c-0.078,0.397-0.164,0.81-0.258,1.227
+				c-0.092,0.412-0.192,0.83-0.297,1.245c-0.208,0.822-0.36,1.478-0.452,1.946c-0.117,0.602-0.056,0.748-0.034,0.779
+				c0.089,0.109,0.137,0.119,0.14,0.12c0.008-0.001,0.116-0.012,0.312-0.413c0.154-0.316,0.284-0.746,0.389-1.279
+				c0.374-1.911,0.643-3.198,0.802-3.827c0.162-0.638,0.323-1.093,0.495-1.392c0.062-0.098,0.103-0.196,0.122-0.298
+				c0.017-0.086,0.014-0.168-0.008-0.25c-0.023-0.083-0.062-0.162-0.112-0.231c-0.051-0.068-0.113-0.126-0.183-0.171
+				C29.309,27.825,29.25,27.807,29.192,27.807z M21.091,35.717c-0.104,0-0.199-0.038-0.275-0.113
+				c-0.086-0.085-0.131-0.201-0.135-0.344c0.006-0.231,0.046-0.53,0.123-0.923c0.04-0.206,0.098-0.469,0.17-0.781
+				c0.074-0.315,0.167-0.7,0.28-1.153c0.233-0.889,0.438-1.787,0.611-2.672c0.144-0.738,0.255-1.436,0.331-2.076
+				c-0.546,0.517-0.938,0.852-1.196,1.021c-0.301,0.195-0.56,0.29-0.792,0.29c-0.186,0-0.43-0.072-0.536-0.418
+				c-0.071-0.252-0.092-0.439-0.066-0.575c0.03-0.152,0.104-0.265,0.22-0.333l0.03-0.013c0.018-0.006,0.084-0.031,0.336-0.146
+				c0.191-0.086,0.426-0.21,0.698-0.368c0.273-0.159,0.577-0.353,0.904-0.575c0.324-0.221,0.649-0.486,0.964-0.788
+				c0.207-0.202,0.388-0.377,0.542-0.527c0.147-0.142,0.262-0.27,0.339-0.382c0.186-0.223,0.339-0.477,0.463-0.761
+				c0.164-0.368,0.283-0.512,0.425-0.512c0.134,0,0.21,0.06,0.251,0.108c0.08,0.096,0.099,0.242,0.059,0.448
+				c-0.132,0.679-0.612,1.453-1.426,2.302c0.165,0.218,0.226,0.446,0.18,0.68c-0.014,0.068-0.044,0.164-0.096,0.292
+				c-0.167,0.374-0.356,1.104-0.565,2.172l-0.741,4.069c-0.132,0.674-0.274,1.183-0.425,1.513c-0.077,0.187-0.169,0.322-0.281,0.409
+				c-0.111,0.086-0.223,0.138-0.333,0.152C21.13,35.716,21.11,35.717,21.091,35.717z M22.549,26.934l-0.037,0.373
+				c-0.075,0.75-0.201,1.583-0.375,2.477c-0.174,0.89-0.381,1.795-0.615,2.687c-0.112,0.449-0.205,0.833-0.278,1.148
+				c-0.072,0.309-0.129,0.569-0.168,0.771c-0.073,0.372-0.112,0.665-0.118,0.87c0.002,0.063,0.02,0.114,0.054,0.148
+				c0.03,0.03,0.062,0.039,0.104,0.033c0.061-0.009,0.128-0.042,0.2-0.098c0.072-0.056,0.138-0.157,0.197-0.301
+				c0.144-0.315,0.28-0.804,0.408-1.455l0.741-4.069c0.216-1.106,0.407-1.834,0.583-2.228c0.053-0.133,0.072-0.203,0.079-0.237
+				c0.036-0.183-0.029-0.36-0.196-0.542l-0.088-0.096l0.091-0.093c0.829-0.846,1.313-1.603,1.439-2.251
+				c0.035-0.176,0.001-0.22,0-0.222c-0.002-0.003-0.008-0.005-0.017-0.006c-0.023,0.023-0.086,0.101-0.195,0.345
+				c-0.134,0.307-0.301,0.582-0.496,0.817c-0.081,0.117-0.207,0.259-0.367,0.412c-0.154,0.149-0.335,0.325-0.542,0.526
+				c-0.328,0.313-0.665,0.589-1.001,0.818c-0.332,0.227-0.642,0.424-0.921,0.586c-0.28,0.162-0.523,0.291-0.723,0.381
+				c-0.225,0.103-0.31,0.138-0.35,0.151c-0.028,0.02-0.062,0.057-0.08,0.144c-0.012,0.062-0.012,0.19,0.06,0.445
+				c0.06,0.194,0.171,0.221,0.271,0.221c0.175,0,0.391-0.083,0.641-0.245c0.279-0.185,0.761-0.605,1.43-1.251L22.549,26.934z
+				 M23.34,33.875c-0.105,0-0.164-0.043-0.194-0.079c-0.031-0.038-0.063-0.104-0.042-0.209c0.022-0.115,0.12-0.251,0.307-0.43
+				c0.319-0.296,0.6-0.562,0.836-0.794c0.234-0.229,0.437-0.439,0.602-0.626c0.328-0.36,0.603-0.742,0.82-1.136
+				c0.252-0.469,0.515-0.696,0.799-0.696c0.159,0,0.373,0.068,0.492,0.394c0.082,0.227,0.104,0.443,0.064,0.646
+				c-0.041,0.207-0.146,0.389-0.313,0.539c-0.075,0.073-0.215,0.189-0.425,0.354c-0.204,0.16-0.478,0.368-0.814,0.618
+				c-0.664,0.494-1.158,0.854-1.468,1.073C23.57,33.834,23.429,33.875,23.34,33.875z M26.467,30.181
+				c-0.169,0-0.361,0.19-0.557,0.552c-0.228,0.413-0.515,0.812-0.856,1.188c-0.168,0.189-0.375,0.405-0.614,0.639
+				c-0.238,0.233-0.521,0.502-0.84,0.797c-0.109,0.104-0.166,0.176-0.195,0.221c0.069-0.032,0.2-0.104,0.438-0.272
+				c0.308-0.217,0.8-0.576,1.463-1.068c0.334-0.249,0.606-0.456,0.808-0.614c0.2-0.157,0.337-0.271,0.407-0.339
+				c0.127-0.114,0.202-0.242,0.231-0.392c0.03-0.154,0.013-0.317-0.053-0.498C26.63,30.204,26.539,30.181,26.467,30.181z
+				 M32.553,33.751c-0.22,0-0.412-0.057-0.571-0.168c-0.143-0.109-0.303-0.298-0.495-0.58c-0.183-0.271-0.37-0.585-0.554-0.932
+				c-0.088-0.169-0.173-0.337-0.255-0.505c-0.083-0.169-0.157-0.342-0.221-0.512c-0.179-0.472-0.187-0.617-0.171-0.699
+				c0.036-0.184,0.154-0.289,0.323-0.289c0.149,0,0.292,0.094,0.434,0.288c0.662,0.934,1.516,1.694,2.539,2.265
+				c0.227,0.118,0.457,0.27,0.418,0.467c-0.03,0.153-0.209,0.285-0.618,0.457C33.035,33.683,32.765,33.751,32.553,33.751z
+				 M30.608,30.341c-0.021,0-0.039,0-0.052,0.067c-0.002,0.016-0.005,0.117,0.159,0.551c0.061,0.161,0.132,0.325,0.211,0.487
+				c0.081,0.166,0.164,0.331,0.25,0.497c0.18,0.338,0.362,0.643,0.54,0.906c0.172,0.254,0.315,0.426,0.428,0.512
+				c0.109,0.076,0.244,0.114,0.408,0.114c0.173,0,0.417-0.062,0.723-0.187c0.318-0.133,0.415-0.214,0.443-0.246
+				c-0.022-0.026-0.086-0.087-0.27-0.183c-1.062-0.592-1.947-1.381-2.631-2.346C30.7,30.354,30.627,30.341,30.608,30.341z
+				 M24.747,28.734c-0.116,0-0.173-0.062-0.197-0.1c-0.045-0.069-0.052-0.161-0.021-0.271c0.025-0.09,0.074-0.181,0.149-0.279
+				c0.557-0.798,0.965-1.43,1.211-1.875c0.242-0.438,0.389-0.785,0.437-1.031c0.049-0.251,0.073-0.446,0.071-0.579
+				c-0.002-0.152,0.006-0.272,0.024-0.366c0.064-0.329,0.228-0.397,0.353-0.397c0.074,0,0.16,0.029,0.263,0.09
+				c0.093,0.056,0.182,0.131,0.264,0.224c0.086,0.099,0.151,0.217,0.193,0.354c0.043,0.141,0.049,0.295,0.017,0.459
+				c-0.01,0.052-0.024,0.106-0.042,0.164c0.624,0.02,1.242,0.026,1.847,0.021c0.665-0.006,1.288-0.018,1.852-0.035
+				c0.559-0.018,1.051-0.042,1.462-0.071c0.413-0.029,0.704-0.05,0.874-0.062c0,0,0.001,0,0.002,0c0.237,0,0.431,0.049,0.585,0.146
+				c0.155,0.097,0.27,0.223,0.34,0.37c0.073,0.153,0.09,0.312,0.051,0.474c-0.04,0.166-0.142,0.3-0.304,0.401
+				c-0.235,0.196-0.475,0.406-0.713,0.624c-0.236,0.217-0.463,0.445-0.672,0.677c-0.478,0.508-0.833,0.742-1.118,0.742
+				c-0.043,0-0.176,0-0.252-0.091c-0.041-0.048-0.055-0.111-0.042-0.179c0.014-0.07,0.063-0.186,0.333-0.523
+				c0.836-1.061,0.932-1.275,0.941-1.315c0.011-0.056,0.003-0.094-0.07-0.13c-0.237-0.055-0.803-0.098-1.682-0.127
+				c-0.887-0.028-2.195,0.003-3.885,0.095c-0.286,0.55-0.615,1.051-0.98,1.489c-0.374,0.465-0.649,0.76-0.842,0.898
+				c-0.14,0.105-0.256,0.17-0.352,0.192C24.81,28.73,24.777,28.734,24.747,28.734z M26.774,24.11c-0.023,0-0.059,0.055-0.082,0.174
+				c-0.014,0.075-0.021,0.181-0.019,0.312c0.002,0.154-0.023,0.362-0.077,0.635c-0.054,0.279-0.207,0.643-0.466,1.111
+				c-0.25,0.453-0.665,1.095-1.23,1.904c-0.057,0.074-0.091,0.138-0.106,0.19c-0.001,0.006-0.002,0.011-0.003,0.015
+				c0.036-0.011,0.11-0.043,0.241-0.143c0.172-0.124,0.438-0.41,0.792-0.851c0.369-0.444,0.7-0.952,0.985-1.512l0.036-0.071
+				l0.08-0.004c1.738-0.095,3.079-0.128,3.988-0.098c0.928,0.029,1.501,0.075,1.753,0.138l0.023,0.008
+				c0.188,0.085,0.275,0.244,0.238,0.437c-0.022,0.114-0.158,0.372-0.996,1.434c-0.15,0.188-0.22,0.293-0.252,0.35
+				c0.114-0.003,0.381-0.093,0.911-0.654c0.213-0.236,0.446-0.471,0.689-0.693s0.489-0.438,0.73-0.639l0.016-0.011
+				c0.104-0.064,0.167-0.142,0.189-0.237c0.024-0.101,0.014-0.195-0.032-0.293c-0.048-0.102-0.126-0.185-0.238-0.254
+				c-0.11-0.069-0.255-0.104-0.431-0.104c-0.16,0.011-0.451,0.032-0.864,0.062c-0.415,0.029-0.91,0.054-1.473,0.071
+				c-0.566,0.018-1.191,0.029-1.858,0.035c-0.669,0.007-1.356-0.003-2.047-0.026l-0.195-0.006l0.071-0.181
+				c0.022-0.057,0.041-0.11,0.057-0.161c0.015-0.047,0.026-0.094,0.035-0.137c0.023-0.12,0.02-0.23-0.01-0.326
+				c-0.031-0.103-0.076-0.185-0.137-0.254c-0.063-0.071-0.13-0.129-0.198-0.169C26.809,24.11,26.775,24.11,26.774,24.11z"/>
+		</g>
+		<path fill="#0097E0" d="M42.5,26.71c-0.544,0.04-1.014,0.083-1.407,0.129c-0.394,0.045-0.714,0.103-0.96,0.173
+			c-0.499,0.121-0.79,0.182-0.87,0.182c-0.091,0-0.159-0.03-0.203-0.091c-0.044-0.06-0.058-0.131-0.042-0.211
+			c0.016-0.081,0.129-0.222,0.341-0.423c0.203-0.212,0.48-0.308,0.831-0.288c0.17,0.011,0.361,0.016,0.574,0.016
+			c0.213,0,0.451,0,0.714,0s0.489-0.003,0.677-0.008c0.188-0.005,0.344-0.013,0.467-0.022c0.133-0.011,0.383-0.017,0.749-0.022
+			c0.366-0.005,0.857-0.007,1.475-0.007c0.617,0,1.149,0,1.594,0s0.814,0.005,1.105,0.015c0.573,0.02,0.904,0.035,0.994,0.045
+			c0.099,0.01,0.145,0.035,0.137,0.076c-0.008,0.04-0.102,0.16-0.283,0.362c-0.169,0.191-0.354,0.286-0.557,0.286
+			c-0.091,0-0.218-0.01-0.381-0.029c-0.163-0.021-0.367-0.051-0.612-0.091c-0.235-0.041-0.464-0.073-0.687-0.098
+			c-0.223-0.025-0.438-0.048-0.647-0.068l-0.289,1.013c0.951,0,1.568,0.029,1.85,0.09c0.292,0.061,0.417,0.196,0.375,0.408
+			c-0.014,0.069-0.048,0.171-0.104,0.302l-0.428,1.027c-0.118,0.292-0.273,0.488-0.464,0.589c-0.192,0.101-0.44,0.151-0.743,0.151
+			l-1.622-0.016c0.396,0.302,0.714,0.552,0.955,0.748c0.24,0.196,0.407,0.335,0.503,0.416c0.191,0.161,0.318,0.316,0.379,0.468
+			c0.261,0.01,0.542,0.025,0.841,0.045c0.3,0.021,0.619,0.046,0.958,0.076c0.696,0.06,1.112,0.11,1.246,0.151
+			c0.155,0.03,0.226,0.085,0.21,0.166c-0.014,0.069-0.179,0.217-0.496,0.438c-0.307,0.221-0.566,0.332-0.779,0.332
+			c-0.212,0-0.415-0.051-0.608-0.151c-0.422-0.222-0.941-0.388-1.558-0.499c-0.423,0.403-1.163,0.901-2.221,1.495
+			c1.235,0.776,1.825,1.31,1.768,1.603c-0.014,0.069-0.06,0.147-0.137,0.233c-0.077,0.086-0.177,0.129-0.298,0.129
+			c-0.132,0-0.372-0.172-0.72-0.515c-0.179-0.171-0.383-0.342-0.613-0.514c-0.229-0.171-0.488-0.352-0.774-0.543
+			c-0.291,0.141-0.617,0.293-0.977,0.453c-0.361,0.161-0.76,0.327-1.198,0.498c-0.869,0.353-1.435,0.528-1.698,0.528
+			c-0.121,0-0.219-0.032-0.292-0.098s-0.104-0.129-0.092-0.188c0.026-0.132,0.278-0.282,0.757-0.453
+			c1.336-0.463,2.295-0.841,2.879-1.134c-0.548-0.302-1.017-0.559-1.406-0.771c-0.389-0.211-0.705-0.372-0.946-0.482
+			c-0.646,0.09-1.183,0.184-1.611,0.278c-0.429,0.097-0.769,0.17-1.022,0.22c-0.253,0.051-0.429,0.071-0.528,0.061
+			c-0.099-0.01-0.135-0.086-0.107-0.227c0.059-0.302,0.25-0.498,0.571-0.59c0.162-0.049,0.47-0.1,0.925-0.15
+			c0.455-0.051,1.059-0.11,1.812-0.182c0.054-0.07,0.156-0.166,0.307-0.286c0.15-0.122,0.35-0.277,0.6-0.469s0.513-0.372,0.79-0.544
+			c0.276-0.171,0.57-0.327,0.881-0.469c-0.858,0.041-1.412,0.102-1.66,0.183c-0.216,0.069-0.4,0.105-0.552,0.105
+			c-0.284,0-0.453-0.121-0.506-0.363c-0.054-0.242,0.012-0.836,0.196-1.782c0.057-0.292,0.128-0.474,0.213-0.544
+			c0.097-0.08,0.363-0.121,0.798-0.121c0.223,0,0.459-0.008,0.71-0.022c0.251-0.016,0.521-0.033,0.808-0.053
+			c0.026-0.131,0.046-0.274,0.062-0.43C42.463,27.09,42.48,26.911,42.5,26.71z M41.946,29.776c0.082-0.261,0.153-0.523,0.214-0.786
+			c0.062-0.261,0.112-0.523,0.154-0.784c-0.514,0.039-0.908,0.085-1.181,0.136c-0.125,0.021-0.226,0.043-0.302,0.067
+			c-0.076,0.025-0.137,0.068-0.185,0.129c-0.047,0.06-0.083,0.138-0.106,0.234c-0.024,0.095-0.05,0.218-0.08,0.37
+			c-0.059,0.302-0.078,0.501-0.056,0.596c0.021,0.097,0.104,0.145,0.245,0.145c0.142,0,0.362-0.016,0.662-0.046
+			c0.146-0.02,0.27-0.035,0.374-0.046C41.788,29.781,41.875,29.776,41.946,29.776z M40.837,31.952
+			c0.813-0.07,1.554-0.119,2.222-0.145c0.668-0.024,1.264-0.032,1.789-0.022c-0.037-0.12-0.193-0.332-0.468-0.634
+			c-0.132-0.15-0.251-0.27-0.355-0.354c-0.105-0.086-0.2-0.146-0.284-0.182c-0.084-0.035-0.166-0.059-0.245-0.068
+			s-0.154-0.016-0.225-0.016c-0.425,0-0.889,0.172-1.391,0.514C41.386,31.398,41.038,31.7,40.837,31.952z M44.772,32.33
+			c-0.668,0-1.324,0.014-1.968,0.044c-0.644,0.031-1.284,0.071-1.922,0.122c0.067,0.069,0.306,0.196,0.716,0.378
+			c0.207,0.08,0.416,0.176,0.627,0.286c0.211,0.111,0.43,0.232,0.658,0.362C44.037,32.908,44.666,32.511,44.772,32.33z
+			 M44.056,29.701c0.06-0.201,0.12-0.436,0.183-0.703c0.062-0.266,0.125-0.562,0.188-0.884c-0.346,0.011-0.642,0.021-0.887,0.031
+			c-0.245,0.01-0.444,0.021-0.598,0.03c-0.178,0.704-0.296,1.229-0.353,1.57C43,29.716,43.489,29.701,44.056,29.701z M44.673,26.619
+			l-1.36,0.046c-0.032,0.11-0.066,0.248-0.104,0.415s-0.088,0.36-0.151,0.581c0.113-0.01,0.292-0.014,0.534-0.014
+			c0.243,0,0.552,0,0.926,0C44.595,27.254,44.646,26.911,44.673,26.619z M45.08,28.114c-0.093,0.322-0.173,0.612-0.238,0.869
+			c-0.065,0.257-0.123,0.486-0.172,0.688c0.704,0.021,1.154-0.025,1.348-0.137c0.181-0.1,0.317-0.383,0.408-0.846
+			c0.047-0.241,0.022-0.397-0.076-0.469c-0.098-0.069-0.313-0.105-0.647-0.105H45.08z"/>
+		<path fill="#0097E0" d="M54.372,28.432c0.814-1.006,1.35-1.883,1.607-2.629c0.095-0.281,0.189-0.422,0.28-0.422
+			c0.101,0,0.236,0.115,0.403,0.348c0.179,0.222,0.254,0.408,0.225,0.559c-0.029,0.151-0.084,0.276-0.165,0.378
+			c-0.04,0.05-0.12,0.133-0.238,0.248c-0.119,0.117-0.277,0.265-0.475,0.446c-0.395,0.362-0.8,0.725-1.215,1.088
+			c0.344,0,0.633-0.003,0.867-0.008s0.417-0.013,0.551-0.022c0.255-0.011,0.506-0.055,0.755-0.136
+			c0.226-0.07,0.416-0.105,0.567-0.105c0.07,0,0.145,0.021,0.224,0.06c0.078,0.04,0.146,0.094,0.204,0.159s0.101,0.146,0.127,0.241
+			c0.027,0.097,0.029,0.199,0.008,0.311c-0.02,0.1-0.04,0.176-0.06,0.226c-0.159,0.454-0.301,0.947-0.426,1.48
+			c-0.272,1.239-0.491,2.074-0.657,2.508c-0.162,0.413-0.362,0.715-0.602,0.906c-0.24,0.191-0.466,0.287-0.679,0.287
+			c-0.101,0-0.196-0.007-0.284-0.022c-0.088-0.015-0.184-0.03-0.287-0.046c-0.103-0.015-0.222-0.03-0.355-0.045
+			c-0.134-0.016-0.307-0.023-0.52-0.023c-0.708,0-1.186,0.062-1.433,0.182c-0.133,0.061-0.25,0.091-0.352,0.091
+			c-0.102,0-0.184-0.045-0.247-0.136c-0.059-0.111-0.035-0.543,0.072-1.299c0.054-0.383,0.109-0.74,0.164-1.073
+			c0.055-0.332,0.111-0.644,0.168-0.937c0.112-0.574,0.232-1.098,0.36-1.57c0.128-0.474,0.235-0.801,0.321-0.982
+			c0.066-0.13,0.14-0.211,0.222-0.242c0.082-0.03,0.167-0.035,0.253-0.015c0.087,0.021,0.181,0.056,0.283,0.106
+			C54.142,28.393,54.252,28.422,54.372,28.432z M53.317,31.498c-0.071,0.414-0.125,0.743-0.163,0.99
+			c-0.038,0.246-0.057,0.42-0.056,0.521c-0.008,0.091-0.002,0.169,0.015,0.235c0.017,0.064,0.056,0.115,0.114,0.15
+			c0.059,0.035,0.147,0.065,0.264,0.09c0.116,0.025,0.274,0.044,0.475,0.054c0.399,0.03,0.827,0.045,1.282,0.045
+			s0.726-0.061,0.81-0.181c0.081-0.102,0.187-0.362,0.321-0.786c0.119-0.402,0.228-0.806,0.327-1.209
+			c-0.322-0.009-0.615-0.014-0.878-0.014s-0.496,0-0.698,0c-0.203,0-0.452,0.007-0.749,0.021
+			C54.084,31.431,53.729,31.458,53.317,31.498z M56.851,30.819c0.132-0.675,0.207-1.133,0.224-1.375
+			c0.027-0.242-0.004-0.393-0.094-0.454c-0.1-0.06-0.387-0.09-0.863-0.09c-0.243,0-0.482,0.005-0.717,0.016
+			c-0.235,0.01-0.451,0.027-0.648,0.052c-0.197,0.025-0.367,0.056-0.511,0.091c-0.144,0.036-0.246,0.079-0.306,0.129
+			c-0.111,0.101-0.198,0.274-0.262,0.521c-0.063,0.246-0.147,0.637-0.251,1.17c0.521-0.021,0.961-0.038,1.324-0.052
+			c0.362-0.016,0.645-0.023,0.847-0.023c0.202,0,0.41,0,0.623,0S56.641,30.81,56.851,30.819z M60.107,28.84
+			c-0.143,0.161-0.29,0.319-0.442,0.477c-0.152,0.155-0.315,0.314-0.488,0.475c-0.355,0.312-0.583,0.499-0.687,0.56
+			c-0.091,0.051-0.172,0.078-0.244,0.083c-0.072,0.006-0.122-0.01-0.151-0.045c-0.029-0.036-0.025-0.094,0.011-0.174
+			c0.036-0.081,0.116-0.182,0.241-0.303c0.475-0.514,0.86-0.944,1.156-1.292c0.296-0.347,0.53-0.651,0.703-0.913
+			s0.301-0.506,0.386-0.732c0.084-0.228,0.155-0.486,0.213-0.778c0.092-0.473,0.285-0.71,0.579-0.71c0.162,0,0.338,0.081,0.53,0.242
+			c0.191,0.161,0.277,0.292,0.257,0.393c-0.02,0.101-0.09,0.202-0.21,0.302c-0.101,0.102-0.239,0.263-0.414,0.483
+			c-0.07,0.101-0.182,0.26-0.336,0.476c-0.154,0.217-0.343,0.486-0.568,0.809c0.363,0.06,0.777,0.091,1.243,0.091l1.591-0.062
+			c0.718,0,1.04,0.197,0.963,0.59c-0.016,0.081-0.049,0.171-0.099,0.272c-0.197,0.332-0.344,0.75-0.442,1.253l-0.147,0.832
+			c-0.222,1.138-0.64,2.028-1.251,2.673c-0.602,0.645-1.23,1.062-1.885,1.254c-0.625,0.191-1.165,0.287-1.62,0.287
+			c-0.79,0-1.141-0.222-1.055-0.664c0.042-0.212,0.199-0.318,0.472-0.318c0.091,0,0.242,0.016,0.454,0.046
+			c0.211,0.03,0.429,0.045,0.652,0.045c0.647,0,1.278-0.196,1.892-0.589c0.625-0.403,1.048-0.906,1.267-1.511
+			c0.237-0.644,0.409-1.238,0.516-1.782c0.071-0.362,0.112-0.665,0.124-0.906c0.012-0.242-0.008-0.436-0.061-0.581
+			c-0.052-0.146-0.148-0.25-0.289-0.311c-0.14-0.06-0.322-0.09-0.544-0.09c-0.253,0-0.571,0.01-0.955,0.03
+			C61.085,28.77,60.632,28.8,60.107,28.84z M61.557,31.68c-0.02,0.101-0.182,0.194-0.487,0.28c-0.305,0.085-0.686,0.128-1.141,0.128
+			c-0.436,0-0.759-0.053-0.971-0.158c-0.212-0.106-0.295-0.28-0.248-0.522c0.03-0.15,0.129-0.246,0.299-0.286
+			c0.174-0.061,0.329-0.091,0.466-0.091s0.256,0.051,0.357,0.151c0.133,0.15,0.56,0.246,1.28,0.286
+			C61.431,31.498,61.579,31.569,61.557,31.68z"/>
+		<path fill="#0097E0" d="M69.107,32.752c-0.649,0.111-1.077,0.202-1.283,0.272c-0.208,0.08-0.368,0.12-0.479,0.12
+			c-0.121,0-0.169-0.069-0.141-0.211c0.029-0.151,0.176-0.332,0.44-0.544c0.266-0.222,0.521-0.332,0.764-0.332
+			c0.04,0,0.099,0.01,0.176,0.03c0.201,0.061,0.504,0.09,0.908,0.09c0.401-0.604,0.615-0.946,0.642-1.026
+			c0.13-0.303,0.271-0.453,0.423-0.453c0.08,0,0.146,0.048,0.199,0.143c0.052,0.097,0.066,0.204,0.043,0.326
+			c-0.033,0.171-0.114,0.324-0.242,0.46c-0.128,0.137-0.288,0.31-0.481,0.521c0.474-0.04,1.011-0.07,1.612-0.091
+			c-0.035-0.081-0.097-0.176-0.187-0.287c-0.09-0.11-0.128-0.201-0.114-0.272c0.016-0.08,0.057-0.147,0.123-0.203
+			s0.12-0.084,0.161-0.084c0.121,0,0.397,0.272,0.827,0.816c1.002-0.051,1.477,0.061,1.424,0.332
+			c-0.036,0.182-0.241,0.272-0.615,0.272c-0.041,0-0.075-0.003-0.105-0.008c-0.029-0.005-0.074-0.008-0.135-0.008
+			s-0.139-0.002-0.233-0.008c-0.096-0.005-0.234-0.007-0.417-0.007c-0.301,0.503-0.859,1.032-1.676,1.586
+			c0.382,0.221,0.708,0.405,0.978,0.552c0.271,0.146,0.387,0.314,0.35,0.506c-0.04,0.201-0.136,0.302-0.287,0.302
+			c-0.081,0-0.161-0.021-0.239-0.06c-0.078-0.041-0.177-0.104-0.297-0.189c-0.12-0.086-0.265-0.188-0.433-0.311
+			c-0.169-0.12-0.378-0.266-0.628-0.437c-1.183,0.714-2.058,1.072-2.624,1.072c-0.335,0-0.475-0.136-0.422-0.408
+			c0.023-0.121,0.071-0.209,0.143-0.264c0.072-0.056,0.187-0.099,0.345-0.13c0.896-0.181,1.578-0.382,2.046-0.604
+			c-0.478-0.302-0.75-0.487-0.816-0.559c-0.076-0.08-0.102-0.184-0.076-0.31C68.803,33.224,68.912,33.024,69.107,32.752z
+			 M71.275,27.873c0.062-0.322,0.114-0.584,0.153-0.785s0.062-0.343,0.067-0.423l0.085-0.514c0.091-0.464,0.278-0.695,0.562-0.695
+			c0.111,0,0.189,0.065,0.234,0.196c0.046,0.131,0.05,0.293,0.012,0.484l-0.382,1.721l1.248-0.015c0.729,0,1.069,0.126,1.02,0.377
+			c-0.016,0.081-0.11,0.152-0.284,0.212c-0.087,0.03-0.184,0.046-0.289,0.046c-0.106,0-0.24-0.005-0.4-0.016
+			c-0.16-0.01-0.354-0.022-0.584-0.038c-0.23-0.015-0.507-0.022-0.831-0.022l-0.293,1.421c-0.051,0.262-0.139,0.49-0.263,0.687
+			c-0.125,0.196-0.248,0.295-0.369,0.295c-0.122,0-0.194-0.045-0.217-0.137c-0.022-0.09-0.01-0.23,0.037-0.422
+			c0.03-0.101,0.067-0.252,0.111-0.454c0.045-0.201,0.098-0.457,0.158-0.77c-0.201,0.201-0.41,0.4-0.625,0.597
+			c-0.216,0.196-0.442,0.385-0.68,0.566c-0.454,0.353-0.76,0.569-0.917,0.649c-0.134,0.061-0.266,0.091-0.397,0.091
+			s-0.239-0.046-0.322-0.136c-0.041-0.051-0.07-0.099-0.086-0.144c-0.017-0.046-0.012-0.096,0.014-0.151
+			c0.026-0.055,0.083-0.113,0.171-0.174c0.088-0.06,0.225-0.126,0.41-0.196c0.196-0.07,0.402-0.167,0.618-0.287
+			c0.216-0.121,0.43-0.254,0.64-0.4c0.211-0.146,0.417-0.307,0.619-0.483c0.201-0.177,0.38-0.355,0.537-0.536
+			c-0.836,0.03-1.381,0.075-1.636,0.136c-0.264,0.05-0.425,0.075-0.485,0.075c-0.224,0-0.319-0.075-0.29-0.227
+			c0.023-0.12,0.132-0.249,0.326-0.385c0.193-0.137,0.381-0.203,0.563-0.203c0.172,0,0.341,0.015,0.507,0.044
+			c0.079,0.011,0.222,0.018,0.429,0.022C70.652,27.886,70.929,27.883,71.275,27.873z M71.715,32.616
+			c-0.354,0-0.702,0.008-1.044,0.023c-0.343,0.015-0.678,0.032-1.005,0.053c-0.047,0.08-0.088,0.161-0.124,0.241
+			c-0.036,0.081-0.04,0.166-0.012,0.257c0.027,0.09,0.099,0.194,0.213,0.31c0.114,0.116,0.288,0.249,0.521,0.4
+			C70.993,33.438,71.477,33.009,71.715,32.616z M70.27,26.181c0.061,0,0.107,0.006,0.142,0.016c0.033,0.01,0.063,0.038,0.09,0.083
+			c0.026,0.046,0.051,0.115,0.072,0.212c0.021,0.096,0.046,0.233,0.071,0.415c0.063,0.241,0.095,0.42,0.092,0.537
+			c-0.002,0.115-0.021,0.188-0.058,0.218c-0.036,0.03-0.084,0.03-0.145,0c-0.06-0.029-0.116-0.064-0.169-0.105
+			c-0.312-0.372-0.53-0.574-0.656-0.604c-0.113-0.04-0.156-0.13-0.129-0.271c0.029-0.151,0.121-0.272,0.275-0.362
+			C70.01,26.227,70.148,26.181,70.27,26.181z M72.596,28.886c0.202,0,0.322,0.141,0.358,0.423c0.006,0.021,0.018,0.075,0.035,0.166
+			c0.018,0.09,0.049,0.207,0.092,0.348c0.083,0.302,0.116,0.493,0.101,0.573c-0.018,0.091-0.064,0.136-0.141,0.136
+			s-0.163-0.061-0.261-0.181c-0.281-0.373-0.485-0.6-0.611-0.68c-0.12-0.111-0.168-0.227-0.145-0.347
+			c0.025-0.132,0.102-0.237,0.229-0.318C72.38,28.926,72.495,28.886,72.596,28.886z M73.822,26.105c0.102,0,0.204,0.058,0.308,0.174
+			c0.104,0.115,0.146,0.229,0.124,0.34c-0.034,0.171-0.194,0.317-0.48,0.438c-0.035,0.021-0.094,0.05-0.178,0.09
+			c-0.083,0.041-0.199,0.102-0.347,0.182c-0.28,0.141-0.456,0.212-0.527,0.212c-0.07,0-0.102-0.025-0.091-0.076
+			c0.016-0.029,0.07-0.118,0.165-0.264s0.203-0.301,0.325-0.461c0.123-0.161,0.248-0.308,0.374-0.438
+			C73.622,26.171,73.731,26.105,73.822,26.105z M76.247,33.206c-0.42,0.594-0.942,1.062-1.565,1.404
+			c-0.626,0.353-1.131,0.529-1.516,0.529c-0.173,0-0.306-0.03-0.4-0.091c-0.094-0.062-0.132-0.141-0.112-0.242
+			c0.04-0.201,0.229-0.342,0.569-0.422c0.752-0.173,1.306-0.388,1.66-0.65c0.392-0.292,0.736-0.635,1.036-1.026
+			c-0.631-0.918-1.041-1.411-1.229-1.481c-0.185-0.091-0.268-0.187-0.248-0.287c0.021-0.101,0.094-0.191,0.221-0.272
+			c0.119-0.09,0.244-0.136,0.376-0.136c0.061,0,0.123,0.031,0.188,0.092c0.063,0.06,0.141,0.156,0.232,0.286
+			c0.091,0.131,0.201,0.301,0.334,0.506c0.131,0.207,0.301,0.451,0.509,0.733c0.233-0.363,0.432-0.73,0.596-1.104
+			c0.172-0.362,0.279-0.639,0.321-0.83c0.043-0.191,0.076-0.348,0.1-0.469c0.064-0.332,0.219-0.498,0.462-0.498
+			c0.283,0,0.401,0.12,0.354,0.362c-0.024,0.12-0.162,0.44-0.415,0.959c-0.254,0.519-0.611,1.187-1.075,2.002
+			c0.131,0.16,0.267,0.32,0.408,0.476c0.142,0.156,0.29,0.305,0.444,0.445c0.317,0.293,0.553,0.489,0.705,0.59
+			c0.071,0.051,0.184,0.124,0.337,0.219c0.153,0.096,0.348,0.214,0.584,0.354c0.117,0.071,0.169,0.142,0.155,0.212
+			c-0.016,0.081-0.188,0.187-0.518,0.317c-0.323,0.15-0.601,0.227-0.833,0.227c-0.233,0-0.395-0.03-0.484-0.09
+			c-0.091-0.051-0.218-0.242-0.381-0.574C76.898,34.414,76.627,33.9,76.247,33.206z M75.709,28.886
+			c-0.446,0.624-0.901,1.168-1.366,1.631c-0.455,0.464-0.754,0.694-0.896,0.694c-0.019-0.009-0.044-0.019-0.077-0.029
+			c-0.034-0.01-0.055-0.033-0.063-0.068c-0.008-0.035,0.009-0.093,0.05-0.174s0.138-0.201,0.291-0.362
+			c0.547-0.574,1.085-1.304,1.612-2.19c0.531-0.856,0.83-1.45,0.895-1.782c0.014-0.071,0.014-0.134-0.001-0.189
+			s-0.016-0.112-0.004-0.174c0.037-0.19,0.168-0.286,0.391-0.286c0.151,0,0.3,0.07,0.444,0.211c0.145,0.142,0.2,0.298,0.167,0.469
+			c-0.034,0.171-0.121,0.357-0.262,0.559l-0.72,1.042c0.551-0.021,1.007-0.037,1.369-0.053c0.362-0.015,0.63-0.022,0.802-0.022
+			c1.012,0,1.499,0.101,1.46,0.302c-0.019,0.091-0.08,0.187-0.186,0.288c-0.105,0.1-0.255,0.15-0.447,0.15
+			c-0.202,0-0.382-0.015-0.538-0.046c-0.166-0.03-0.502-0.045-1.008-0.045C77.115,28.81,76.478,28.835,75.709,28.886z"/>
+		<path fill="#0097E0" d="M85.367,28.417c-0.428,0.01-0.781,0.048-1.062,0.113s-0.478,0.098-0.589,0.098
+			c-0.243,0-0.351-0.069-0.323-0.211c0.01-0.05,0.037-0.11,0.081-0.182c0.044-0.069,0.11-0.136,0.198-0.196
+			c0.088-0.06,0.204-0.113,0.35-0.159c0.146-0.044,0.324-0.066,0.537-0.066h0.911l0.248-1.345c0.137-0.705,0.358-1.059,0.661-1.059
+			c0.092,0,0.168,0.061,0.23,0.182s0.076,0.272,0.041,0.453c-0.033,0.172-0.098,0.386-0.194,0.643
+			c-0.096,0.256-0.197,0.637-0.306,1.141c0.719,0,1.164,0.024,1.337,0.075c0.162,0.051,0.235,0.116,0.22,0.196
+			c-0.017,0.081-0.048,0.136-0.094,0.166c-0.047,0.03-0.127,0.053-0.241,0.068s-0.28,0.025-0.499,0.03
+			c-0.219,0.006-0.501,0.013-0.848,0.022l-0.384,1.964c0.801-0.212,1.227-0.317,1.277-0.317c0.131,0,0.188,0.051,0.168,0.151
+			c-0.018,0.09-0.097,0.181-0.235,0.272c-0.128,0.08-0.571,0.251-1.33,0.513l-0.293,1.496c-0.252,1.289-0.657,2.119-1.216,2.492
+			c-0.547,0.363-1.088,0.544-1.625,0.544c-0.263,0-0.481-0.046-0.656-0.137c-0.185-0.09-0.267-0.191-0.245-0.302
+			c0.022-0.11,0.105-0.176,0.251-0.196c0.496-0.051,0.926-0.153,1.291-0.31c0.364-0.156,0.649-0.32,0.855-0.491
+			c0.099-0.09,0.181-0.188,0.247-0.294c0.066-0.106,0.131-0.258,0.194-0.454s0.133-0.457,0.207-0.785
+			c0.074-0.327,0.172-0.753,0.295-1.276c-0.446,0.211-0.842,0.408-1.186,0.589c-0.345,0.182-0.607,0.272-0.79,0.272
+			c-0.212,0-0.294-0.127-0.245-0.378c0.046-0.231,0.162-0.388,0.35-0.469c0.047-0.03,0.136-0.069,0.267-0.12
+			c0.132-0.051,0.288-0.111,0.469-0.182s0.382-0.143,0.604-0.219c0.222-0.076,0.446-0.148,0.673-0.22
+			c0.089-0.452,0.167-0.853,0.234-1.2C85.271,28.983,85.325,28.679,85.367,28.417z M91.008,30.245
+			c0.035-0.231,0.072-0.461,0.111-0.688c0.039-0.226,0.113-0.409,0.222-0.551c0.079-0.09,0.161-0.153,0.25-0.188
+			c0.087-0.036,0.166-0.038,0.236-0.008s0.124,0.094,0.161,0.188c0.036,0.097,0.039,0.225,0.008,0.386l-0.224,0.831
+			c0.347-0.01,0.692-0.005,1.038,0.015c0.345,0.021,0.694,0.056,1.05,0.105c0.721,0.092,1.125,0.172,1.213,0.242
+			c0.1,0.061,0.14,0.141,0.119,0.242c-0.016,0.08-0.139,0.191-0.368,0.332c-0.229,0.131-0.423,0.196-0.585,0.196
+			s-0.292-0.035-0.39-0.106c-0.504-0.372-1.236-0.538-2.195-0.498c-0.083,0.322-0.155,0.625-0.215,0.906
+			c-0.061,0.282-0.12,0.549-0.18,0.801l1.616-0.03c0.364,0,0.6,0.091,0.706,0.272c0.053,0.09,0.09,0.171,0.112,0.241
+			c0.021,0.07,0.023,0.149,0.007,0.234c-0.017,0.086-0.048,0.181-0.094,0.287c-0.046,0.105-0.104,0.233-0.174,0.385l-0.438,0.922
+			c-0.102,0.211-0.193,0.368-0.273,0.468c-0.081,0.102-0.152,0.171-0.216,0.212c-0.063,0.04-0.117,0.056-0.161,0.046
+			c-0.044-0.011-0.084-0.025-0.12-0.046c-0.274-0.102-0.755-0.151-1.443-0.151c-0.911,0-1.532,0.07-1.863,0.212
+			c-0.079,0.04-0.174,0.06-0.285,0.06c-0.102,0-0.188-0.05-0.259-0.15c-0.062-0.101-0.09-0.473-0.086-1.118
+			c0.015-0.332,0.026-0.599,0.035-0.801c0.009-0.201,0.021-0.342,0.037-0.422c0.031-0.162,0.126-0.308,0.283-0.438
+			c0.169-0.141,0.319-0.212,0.451-0.212c0.081,0,0.244,0.003,0.492,0.008c0.247,0.005,0.587,0.013,1.021,0.022l0.31-1.661
+			c-1.13,0.08-2.025,0.206-2.686,0.378c-0.159,0.554-0.357,1.077-0.596,1.57c-0.238,0.494-0.517,0.957-0.834,1.39
+			c-0.633,0.855-1.131,1.284-1.495,1.284c-0.112,0-0.209-0.046-0.293-0.136c-0.075-0.081-0.104-0.171-0.083-0.272
+			c0.02-0.101,0.186-0.276,0.498-0.528c0.896-0.705,1.53-1.541,1.902-2.508c0.373-0.927,0.682-2.015,0.926-3.263
+			c0.187-0.957,0.226-1.646,0.116-2.069c-0.009-0.061-0.012-0.102-0.007-0.121c0.041-0.211,0.191-0.362,0.452-0.453
+			s1.069-0.136,2.426-0.136c0.122,0,0.323,0.005,0.604,0.015c0.281,0.011,0.648,0.024,1.1,0.045c0.916,0.03,1.437,0.061,1.562,0.091
+			c0.156,0.03,0.265,0.096,0.326,0.197c0.084,0.09,0.113,0.196,0.09,0.316c-0.023,0.121-0.108,0.348-0.254,0.681
+			c-0.136,0.332-0.263,0.591-0.38,0.777s-0.229,0.315-0.333,0.385c-0.059,0.041-0.174,0.059-0.345,0.053
+			c-0.171-0.004-0.405-0.012-0.702-0.022c-0.296-0.01-0.662-0.018-1.096-0.022c-0.435-0.005-0.943,0.008-1.526,0.038
+			c-0.763,0.021-1.177,0.04-1.241,0.061c-0.063,0.01-0.121,0.101-0.175,0.271c-0.04,0.151-0.093,0.354-0.158,0.612
+			c-0.065,0.257-0.17,0.627-0.315,1.109c0.441-0.08,0.879-0.143,1.312-0.188C90.147,30.297,90.578,30.266,91.008,30.245z
+			 M89.539,34.731c0.789,0,1.397-0.002,1.823-0.008c0.427-0.005,0.676-0.013,0.749-0.022c0.137-0.03,0.278-0.212,0.425-0.544
+			c0.132-0.312,0.217-0.563,0.254-0.755c0.023-0.122,0.027-0.217,0.011-0.288c-0.017-0.069-0.082-0.122-0.197-0.158
+			c-0.114-0.035-0.287-0.058-0.518-0.067c-0.231-0.01-0.549-0.015-0.954-0.015c-0.415,0-0.751,0.01-1.008,0.029
+			s-0.458,0.051-0.603,0.091c-0.145,0.041-0.248,0.09-0.311,0.15c-0.062,0.062-0.102,0.131-0.117,0.212
+			c-0.021,0.11-0.048,0.322-0.078,0.635c-0.027,0.292-0.033,0.479-0.019,0.56c0.019,0.06,0.065,0.104,0.141,0.135
+			C89.213,34.717,89.347,34.731,89.539,34.731z M93.275,27.888c0.121,0,0.205-0.018,0.253-0.052
+			c0.048-0.035,0.123-0.165,0.228-0.386c0.104-0.222,0.168-0.393,0.191-0.514s0.02-0.207-0.011-0.257
+			c-0.022-0.04-0.072-0.07-0.149-0.091c-0.038-0.01-0.128-0.021-0.268-0.03s-0.339-0.025-0.599-0.045
+			c-0.5-0.03-1.181-0.045-2.041-0.045c-0.87,0-1.351,0.051-1.441,0.15c-0.091,0.101-0.206,0.509-0.346,1.224
+			c-0.018,0.091,0.044,0.137,0.187,0.137l1.314-0.046c0.46-0.021,0.857-0.035,1.193-0.046c0.336-0.01,0.605-0.015,0.808-0.015
+			L93.275,27.888z"/>
+		<path fill="#0097E0" d="M103.871,30.471c-0.373-0.06-0.687-0.09-0.939-0.09c-0.354,0-0.513-0.096-0.476-0.288
+			c0.025-0.13,0.172-0.281,0.438-0.452c0.286-0.171,0.525-0.257,0.718-0.257s0.401,0.07,0.627,0.211
+			c0.118,0.071,0.268,0.146,0.449,0.228c0.182,0.08,0.406,0.161,0.674,0.241c0.268,0.081,0.52,0.151,0.756,0.211
+			c0.236,0.061,0.459,0.102,0.668,0.121c0.611,0.081,0.874,0.343,0.787,0.786c-0.037,0.191-0.196,0.473-0.477,0.846
+			c-0.28,0.372-0.616,0.761-1.009,1.163c-0.401,0.393-0.842,0.786-1.323,1.179c-0.49,0.383-0.844,0.639-1.062,0.771
+			c-0.188,0.131-0.362,0.191-0.521,0.182c-0.16-0.011-0.278-0.057-0.354-0.137s-0.096-0.187-0.06-0.317s0.156-0.252,0.359-0.362
+			c0.683-0.383,1.245-0.735,1.688-1.058s0.77-0.609,0.98-0.861c0.422-0.503,0.656-0.87,0.701-1.103
+			c0.033-0.171,0.007-0.291-0.081-0.362c-0.014-0.03-0.073-0.065-0.177-0.105s-0.239-0.084-0.407-0.129
+			c-0.169-0.046-0.352-0.093-0.549-0.144c-0.198-0.051-0.399-0.095-0.604-0.136c-0.719,0.725-1.496,1.41-2.33,2.055
+			c-0.835,0.644-1.706,1.243-2.614,1.797c-0.46,0.283-0.83,0.504-1.109,0.665s-0.474,0.262-0.583,0.302
+			c-0.147,0.081-0.277,0.126-0.391,0.136c-0.113,0.011-0.203-0.007-0.271-0.052c-0.067-0.046-0.118-0.111-0.151-0.196
+			c-0.034-0.086-0.048-0.174-0.04-0.265c0.04-0.202,0.231-0.378,0.574-0.529C100.592,33.262,102.627,31.912,103.871,30.471z
+			 M102.982,26.543c0.102,0,0.197,0.056,0.287,0.167s0.119,0.241,0.09,0.393c-0.027,0.142-0.127,0.3-0.298,0.476
+			c-0.171,0.177-0.482,0.411-0.935,0.703c-0.43,0.282-0.797,0.503-1.102,0.665c-0.147,0.08-0.312,0.168-0.492,0.264
+			s-0.384,0.204-0.61,0.324c-0.441,0.242-0.729,0.363-0.86,0.363c-0.131,0-0.19-0.035-0.176-0.106
+			c0.014-0.07,0.096-0.155,0.247-0.257c0.371-0.241,0.7-0.463,0.988-0.664c0.287-0.201,0.532-0.383,0.736-0.544
+			c0.393-0.302,0.936-0.801,1.628-1.495C102.676,26.64,102.841,26.543,102.982,26.543z M107.13,26.227
+			c0.172,0,0.338,0.081,0.499,0.242c0.362,0.372,0.761,0.745,1.194,1.117c0.433,0.373,0.901,0.746,1.406,1.118
+			c0.196,0.131,0.278,0.281,0.245,0.452c-0.029,0.152-0.107,0.228-0.234,0.228c-0.126,0-0.256-0.05-0.388-0.151
+			c-0.451-0.332-0.943-0.664-1.476-0.997c-0.532-0.332-1.109-0.669-1.73-1.012c-0.188-0.07-0.29-0.158-0.306-0.265
+			c-0.015-0.105,0.017-0.212,0.093-0.317s0.183-0.198,0.32-0.279C106.891,26.282,107.016,26.236,107.13,26.227z"/>
+		<path fill="#0097E0" d="M115.961,28.356c-0.549,0.011-1.003,0.041-1.361,0.091c-0.359,0.051-0.584,0.075-0.676,0.075
+			c-0.121,0-0.205-0.024-0.251-0.075c-0.046-0.05-0.064-0.11-0.056-0.182c0.009-0.069,0.041-0.144,0.097-0.219
+			c0.055-0.075,0.128-0.139,0.219-0.189c0.193-0.11,0.374-0.166,0.541-0.166s0.29,0.005,0.369,0.016
+			c0.117,0.021,0.279,0.035,0.484,0.045c0.206,0.011,0.455,0.016,0.749,0.016c0.058-0.293,0.104-0.533,0.142-0.725
+			s0.061-0.338,0.07-0.438l0.094-0.56c0.05-0.252,0.125-0.455,0.227-0.611c0.101-0.156,0.202-0.234,0.304-0.234
+			c0.103-0.01,0.185,0.024,0.245,0.105s0.098,0.187,0.112,0.317c0.015,0.132,0.01,0.275-0.016,0.431
+			c-0.025,0.156-0.072,0.305-0.14,0.446l-0.31,1.269l1.114-0.03c0.224,0,0.396,0.038,0.518,0.112c0.122,0.076,0.172,0.17,0.15,0.28
+			c-0.036,0.182-0.235,0.271-0.6,0.271c-0.112,0-0.271-0.009-0.48-0.029c-0.208-0.021-0.485-0.03-0.829-0.03
+			c-0.038,0.141-0.083,0.345-0.135,0.611c-0.053,0.267-0.115,0.592-0.19,0.974c1.35,0.242,1.979,0.6,1.886,1.074
+			c-0.027,0.141-0.112,0.276-0.254,0.406c-0.142,0.132-0.284,0.196-0.426,0.196c-0.223,0-0.435-0.16-0.635-0.482
+			c-0.118-0.222-0.229-0.408-0.331-0.559c-0.102-0.151-0.199-0.277-0.29-0.378c-0.122,0.625-0.225,1.163-0.309,1.616
+			s-0.155,0.844-0.214,1.171s-0.104,0.594-0.133,0.801c-0.031,0.206-0.058,0.37-0.081,0.49c-0.167,0.856-0.367,1.284-0.601,1.284
+			c-0.142,0-0.244-0.083-0.308-0.249c-0.064-0.166-0.055-0.461,0.028-0.884c0.084-0.433,0.216-1.027,0.394-1.782
+			c0.178-0.756,0.343-1.521,0.494-2.297c-0.241,0.303-0.49,0.582-0.748,0.839s-0.506,0.476-0.743,0.657
+			c-0.238,0.181-0.461,0.324-0.669,0.431c-0.208,0.105-0.389,0.158-0.54,0.158c-0.162,0-0.288-0.056-0.377-0.166
+			c-0.039-0.061-0.068-0.118-0.088-0.174s-0.016-0.113,0.011-0.174c0.027-0.061,0.083-0.126,0.168-0.196
+			c0.084-0.07,0.221-0.146,0.408-0.227c1.028-0.443,1.955-1.173,2.782-2.19L115.961,28.356z M120.338,29.58
+			c0.64-0.161,1.237-0.242,1.794-0.242c0.547,0,1.271,0.076,2.173,0.227c0.462,0.071,0.819,0.132,1.073,0.182
+			c0.253,0.051,0.408,0.086,0.465,0.106c0.121,0.05,0.173,0.125,0.153,0.227c-0.02,0.101-0.167,0.256-0.441,0.468
+			c-0.264,0.212-0.507,0.317-0.729,0.317s-0.44-0.075-0.654-0.227c-0.671-0.453-1.422-0.681-2.251-0.681
+			c-0.486,0-1.038,0.076-1.654,0.228c-0.198,1.168-0.574,2.029-1.127,2.583c-0.552,0.543-1.01,0.815-1.374,0.815
+			c-0.152,0-0.314-0.05-0.487-0.15c-0.16-0.111-0.232-0.212-0.214-0.303c0.018-0.09,0.205-0.222,0.562-0.393
+			c0.66-0.322,1.146-0.735,1.457-1.239c0.314-0.522,0.514-0.997,0.596-1.419c0.165-0.847,0.104-1.466-0.184-1.859
+			c-0.057-0.069-0.076-0.15-0.059-0.24c0.033-0.172,0.161-0.258,0.384-0.258c0.162,0,0.287,0.036,0.374,0.106
+			c0.096,0.08,0.148,0.332,0.156,0.756C120.369,29.006,120.365,29.338,120.338,29.58z M124.168,25.909
+			c0.111,0,0.221,0.116,0.327,0.348c0.219,0.434,0.162,0.75-0.17,0.952c-0.138,0.08-0.49,0.146-1.057,0.196
+			c-0.542,0.03-1.021,0.045-1.436,0.045c-0.426,0-0.688-0.015-0.789-0.045s-0.146-0.071-0.136-0.122c0.02-0.1,0.257-0.2,0.712-0.302
+			c0.232-0.05,0.459-0.107,0.68-0.173c0.22-0.066,0.439-0.139,0.657-0.22c0.221-0.09,0.399-0.176,0.536-0.256
+			c0.138-0.081,0.25-0.152,0.338-0.212c0.088-0.061,0.158-0.111,0.212-0.151C124.096,25.93,124.138,25.909,124.168,25.909z
+			 M123.042,30.895c-0.014,0.07-0.028,0.121-0.044,0.15c-0.061,0.151-0.151,0.54-0.273,1.163l-0.43,2.357
+			c-0.083,0.422-0.185,0.75-0.306,0.981s-0.243,0.348-0.364,0.348c-0.071,0-0.148-0.07-0.231-0.211
+			c-0.065-0.132-0.016-0.62,0.149-1.467c0.082-0.422,0.155-0.807,0.218-1.154c0.062-0.349,0.116-0.657,0.159-0.929l0.232-1.345
+			c0.076-0.394,0.216-0.59,0.419-0.59c0.121,0,0.239,0.066,0.356,0.196C123.043,30.526,123.082,30.692,123.042,30.895z"/>
+	</g>
+</g>
+</svg>
diff --git a/img/users_zhongshan.jpg b/img/users_zhongshan.jpg
new file mode 100755
index 0000000..b9fa6fb
Binary files /dev/null and b/img/users_zhongshan.jpg differ
diff --git a/img/weibo.png b/img/weibo.png
new file mode 100755
index 0000000..af27b51
Binary files /dev/null and b/img/weibo.png differ
diff --git a/img/weibo_hover.png b/img/weibo_hover.png
new file mode 100755
index 0000000..8482ce4
Binary files /dev/null and b/img/weibo_hover.png differ
diff --git a/md_json/blog.json b/md_json/blog.json
new file mode 100755
index 0000000..7db245c
--- /dev/null
+++ b/md_json/blog.json
@@ -0,0 +1,16 @@
+{
+  "en-us": [
+    {
+      "filename": "architecture-design.md",
+      "link": "/en-us/blog/architecture-design.html",
+      "meta": {}
+    }
+  ],
+  "zh-cn": [
+    {
+      "filename": "architecture-design.md",
+      "link": "/zh-cn/blog/architecture-design.html",
+      "meta": {}
+    }
+  ]
+}
\ No newline at end of file
diff --git a/md_json/docs.json b/md_json/docs.json
new file mode 100755
index 0000000..71b48f0
--- /dev/null
+++ b/md_json/docs.json
@@ -0,0 +1,181 @@
+{
+  "en-us": [
+    {
+      "filename": "architecture-design.md",
+      "link": "/en-us/docs/developer_guide/architecture-design.html",
+      "meta": {}
+    },
+    {
+      "filename": "backend-development.md",
+      "link": "/en-us/docs/developer_guide/backend-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "frontend-development.md",
+      "link": "/en-us/docs/developer_guide/frontend-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "contribute.md",
+      "link": "/en-us/docs/development/contribute.html",
+      "meta": {}
+    },
+    {
+      "filename": "developers.md",
+      "link": "/en-us/docs/development/developers.html",
+      "meta": {}
+    },
+    {
+      "filename": "faq.md",
+      "link": "/en-us/docs/faq.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.1-release.md",
+      "link": "/en-us/docs/release/1.0.1-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.2-release.md",
+      "link": "/en-us/docs/release/1.0.2-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.3-release.md",
+      "link": "/en-us/docs/release/1.0.3-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.4-release.md",
+      "link": "/en-us/docs/release/1.0.4-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.5-release.md",
+      "link": "/en-us/docs/release/1.0.5-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.1.0-release.md",
+      "link": "/en-us/docs/release/1.1.0-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "upgrade.md",
+      "link": "/en-us/docs/release/upgrade.html",
+      "meta": {}
+    },
+    {
+      "filename": "backend-deployment.md",
+      "link": "/en-us/docs/user_doc/backend-deployment.html",
+      "meta": {}
+    },
+    {
+      "filename": "frontend-deployment.md",
+      "link": "/en-us/docs/user_doc/frontend-deployment.html",
+      "meta": {}
+    },
+    {
+      "filename": "quick-start.md",
+      "link": "/en-us/docs/user_doc/quick-start.html",
+      "meta": {}
+    },
+    {
+      "filename": "system-manual.md",
+      "link": "/en-us/docs/user_doc/system-manual.html",
+      "meta": {}
+    }
+  ],
+  "zh-cn": [
+    {
+      "filename": "architecture-design.md",
+      "link": "/zh-cn/docs/developer_guide/architecture-design.html",
+      "meta": {}
+    },
+    {
+      "filename": "backend-development.md",
+      "link": "/zh-cn/docs/developer_guide/backend-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "frontend-development.md",
+      "link": "/zh-cn/docs/developer_guide/frontend-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "plugin-development.md",
+      "link": "/zh-cn/docs/developer_guide/plugin-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "contribute.md",
+      "link": "/zh-cn/docs/development/contribute.html",
+      "meta": {}
+    },
+    {
+      "filename": "developers.md",
+      "link": "/zh-cn/docs/development/developers.html",
+      "meta": {}
+    },
+    {
+      "filename": "faq.md",
+      "link": "/zh-cn/docs/faq.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.1-release.md",
+      "link": "/zh-cn/docs/release/1.0.1-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.2-release.md",
+      "link": "/zh-cn/docs/release/1.0.2-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.3-release.md",
+      "link": "/zh-cn/docs/release/1.0.3-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.4-release.md",
+      "link": "/zh-cn/docs/release/1.0.4-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.0.5-release.md",
+      "link": "/zh-cn/docs/release/1.0.5-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "1.1.0-release.md",
+      "link": "/zh-cn/docs/release/1.1.0-release.html",
+      "meta": {}
+    },
+    {
+      "filename": "upgrade.md",
+      "link": "/zh-cn/docs/release/upgrade.html",
+      "meta": {}
+    },
+    {
+      "filename": "backend-deployment.md",
+      "link": "/zh-cn/docs/user_doc/backend-deployment.html",
+      "meta": {}
+    },
+    {
+      "filename": "frontend-deployment.md",
+      "link": "/zh-cn/docs/user_doc/frontend-deployment.html",
+      "meta": {}
+    },
+    {
+      "filename": "quick-start.md",
+      "link": "/zh-cn/docs/user_doc/quick-start.html",
+      "meta": {}
+    },
+    {
+      "filename": "system-manual.md",
+      "link": "/zh-cn/docs/user_doc/system-manual.html",
+      "meta": {}
+    }
+  ]
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100755
index 0000000..35cb0c4
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,11656 @@
+{
+  "name": "site",
+  "version": "0.0.1",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "abab": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz",
+      "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==",
+      "dev": true
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+      "dev": true,
+      "requires": {
+        "mime-types": "2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+      "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+      "dev": true
+    },
+    "acorn-dynamic-import": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+      "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+      "dev": true,
+      "requires": {
+        "acorn": "4.0.13"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "4.0.13",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+          "dev": true
+        }
+      }
+    },
+    "acorn-globals": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
+      "dev": true,
+      "requires": {
+        "acorn": "6.3.0",
+        "acorn-walk": "6.2.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+          "dev": true
+        }
+      }
+    },
+    "acorn-jsx": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+      "dev": true,
+      "requires": {
+        "acorn": "3.3.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+          "dev": true
+        }
+      }
+    },
+    "acorn-walk": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
+      "dev": true
+    },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "2.0.1",
+        "fast-json-stable-stringify": "2.0.0",
+        "json-schema-traverse": "0.4.1",
+        "uri-js": "4.2.2"
+      }
+    },
+    "ajv-keywords": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+      "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+      "dev": true
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2",
+        "longest": "1.0.1",
+        "repeat-string": "1.6.1"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "dev": true
+    },
+    "ansi-gray": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+      "dev": true
+    },
+    "ansi-wrap": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "dev": true,
+      "requires": {
+        "micromatch": "3.1.10",
+        "normalize-path": "2.1.1"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "1.1.0"
+          }
+        }
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "dev": true,
+      "requires": {
+        "delegates": "1.0.0",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "1.0.3"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-differ": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+      "dev": true
+    },
+    "array-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+      "dev": true
+    },
+    "array-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true
+    },
+    "array-flatten": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+      "dev": true
+    },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.14.2"
+      }
+    },
+    "array-slice": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "1.0.3"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "array.prototype.find": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
+      "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.14.2"
+      }
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "2.1.2"
+      }
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "inherits": "2.0.4",
+        "minimalistic-assert": "1.0.1"
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "dev": true,
+      "requires": {
+        "object-assign": "4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "asset-require-hook": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/asset-require-hook/-/asset-require-hook-1.2.0.tgz",
+      "integrity": "sha512-MgFMBC6SaYKiE0CqkYd5kZaKyWgxYErnoAmjAhJ8RZt7GKIvx0OvXIsqCqk3fo+wxjeA+tz4/QPS23s3WW/+jA==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "0.2.17",
+        "lodash.assign": "4.2.0",
+        "mime": "1.6.0"
+      }
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+      "dev": true,
+      "requires": {
+        "lodash": "4.17.15"
+      }
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+      "dev": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+      "dev": true
+    },
+    "async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "dev": true
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "1.1.3",
+        "esutils": "2.0.3",
+        "js-tokens": "3.0.2"
+      },
+      "dependencies": {
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "dev": true
+        }
+      }
+    },
+    "babel-core": {
+      "version": "6.23.1",
+      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.23.1.tgz",
+      "integrity": "sha1-wUPLYhuy9iFxDCIMXVedFbikQt8=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "6.26.0",
+        "babel-generator": "6.26.1",
+        "babel-helpers": "6.24.1",
+        "babel-messages": "6.23.0",
+        "babel-register": "6.26.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0",
+        "babylon": "6.18.0",
+        "convert-source-map": "1.6.0",
+        "debug": "2.6.9",
+        "json5": "0.5.1",
+        "lodash": "4.17.15",
+        "minimatch": "3.0.4",
+        "path-is-absolute": "1.0.1",
+        "private": "0.1.8",
+        "slash": "1.0.0",
+        "source-map": "0.5.7"
+      }
+    },
+    "babel-eslint": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz",
+      "integrity": "sha1-UpNBn+NnLWZZjTJ9qWlFZ7pqXy8=",
+      "dev": true,
+      "requires": {
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0",
+        "babylon": "6.18.0",
+        "lodash.assign": "4.2.0",
+        "lodash.pickby": "4.6.0"
+      }
+    },
+    "babel-generator": {
+      "version": "6.26.1",
+      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+      "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+      "dev": true,
+      "requires": {
+        "babel-messages": "6.23.0",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "detect-indent": "4.0.0",
+        "jsesc": "1.3.0",
+        "lodash": "4.17.15",
+        "source-map": "0.5.7",
+        "trim-right": "1.0.1"
+      }
+    },
+    "babel-helper-bindify-decorators": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+      "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-builder-binary-assignment-operator-visitor": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+      "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+      "dev": true,
+      "requires": {
+        "babel-helper-explode-assignable-expression": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-builder-react-jsx": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+      "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "esutils": "2.0.3"
+      }
+    },
+    "babel-helper-call-delegate": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-define-map": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "lodash": "4.17.15"
+      }
+    },
+    "babel-helper-explode-assignable-expression": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+      "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-explode-class": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+      "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+      "dev": true,
+      "requires": {
+        "babel-helper-bindify-decorators": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+      "dev": true,
+      "requires": {
+        "babel-helper-get-function-arity": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-get-function-arity": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-hoist-variables": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-optimise-call-expression": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-regex": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "lodash": "4.17.15"
+      }
+    },
+    "babel-helper-remap-async-to-generator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+      "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helper-replace-supers": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+      "dev": true,
+      "requires": {
+        "babel-helper-optimise-call-expression": "6.24.1",
+        "babel-messages": "6.23.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-helpers": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-loader": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.0.tgz",
+      "integrity": "sha1-6YwjlmKiJTO556SVlO8hbXY16ig=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "0.1.1",
+        "loader-utils": "0.2.17",
+        "mkdirp": "0.5.1",
+        "object-assign": "4.1.1"
+      }
+    },
+    "babel-messages": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-check-es2015-constants": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-syntax-async-functions": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+      "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+      "dev": true
+    },
+    "babel-plugin-syntax-async-generators": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+      "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
+      "dev": true
+    },
+    "babel-plugin-syntax-class-constructor-call": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz",
+      "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=",
+      "dev": true
+    },
+    "babel-plugin-syntax-class-properties": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+      "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
+      "dev": true
+    },
+    "babel-plugin-syntax-decorators": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+      "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+      "dev": true
+    },
+    "babel-plugin-syntax-do-expressions": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz",
+      "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=",
+      "dev": true
+    },
+    "babel-plugin-syntax-dynamic-import": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+      "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+      "dev": true
+    },
+    "babel-plugin-syntax-exponentiation-operator": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+      "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+      "dev": true
+    },
+    "babel-plugin-syntax-export-extensions": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+      "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
+      "dev": true
+    },
+    "babel-plugin-syntax-flow": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+      "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+      "dev": true
+    },
+    "babel-plugin-syntax-function-bind": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz",
+      "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=",
+      "dev": true
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+      "dev": true
+    },
+    "babel-plugin-syntax-object-rest-spread": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+      "dev": true
+    },
+    "babel-plugin-syntax-trailing-function-commas": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+      "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+      "dev": true
+    },
+    "babel-plugin-transform-async-generator-functions": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+      "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+      "dev": true,
+      "requires": {
+        "babel-helper-remap-async-to-generator": "6.24.1",
+        "babel-plugin-syntax-async-generators": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-async-to-generator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+      "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+      "dev": true,
+      "requires": {
+        "babel-helper-remap-async-to-generator": "6.24.1",
+        "babel-plugin-syntax-async-functions": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-class-constructor-call": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz",
+      "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-class-constructor-call": "6.18.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-class-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+      "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "6.24.1",
+        "babel-plugin-syntax-class-properties": "6.13.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-decorators": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+      "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+      "dev": true,
+      "requires": {
+        "babel-helper-explode-class": "6.24.1",
+        "babel-plugin-syntax-decorators": "6.13.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-decorators-legacy": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz",
+      "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-decorators": "6.13.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-do-expressions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz",
+      "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-do-expressions": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-arrow-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoped-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoping": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0",
+        "lodash": "4.17.15"
+      }
+    },
+    "babel-plugin-transform-es2015-classes": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+      "dev": true,
+      "requires": {
+        "babel-helper-define-map": "6.26.0",
+        "babel-helper-function-name": "6.24.1",
+        "babel-helper-optimise-call-expression": "6.24.1",
+        "babel-helper-replace-supers": "6.24.1",
+        "babel-messages": "6.23.0",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-computed-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-destructuring": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-duplicate-keys": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-for-of": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-amd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-commonjs": {
+      "version": "6.26.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+      "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-strict-mode": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-systemjs": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-umd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-object-super": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+      "dev": true,
+      "requires": {
+        "babel-helper-replace-supers": "6.24.1",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-parameters": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+      "dev": true,
+      "requires": {
+        "babel-helper-call-delegate": "6.24.1",
+        "babel-helper-get-function-arity": "6.24.1",
+        "babel-runtime": "6.26.0",
+        "babel-template": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-shorthand-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-spread": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-sticky-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "6.26.0",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-template-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-typeof-symbol": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-unicode-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "6.26.0",
+        "babel-runtime": "6.26.0",
+        "regexpu-core": "2.0.0"
+      }
+    },
+    "babel-plugin-transform-exponentiation-operator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+      "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+      "dev": true,
+      "requires": {
+        "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+        "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-export-extensions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz",
+      "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-export-extensions": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-flow-strip-types": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+      "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-flow": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-function-bind": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz",
+      "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-function-bind": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-object-assign": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz",
+      "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-object-rest-spread": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-object-rest-spread": "6.13.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-display-name": {
+      "version": "6.25.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+      "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+      "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+      "dev": true,
+      "requires": {
+        "babel-helper-builder-react-jsx": "6.26.0",
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx-self": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+      "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-jsx-source": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+      "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-regenerator": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "0.10.1"
+      }
+    },
+    "babel-plugin-transform-runtime": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
+      "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
+    "babel-plugin-transform-strict-mode": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0"
+      }
+    },
+    "babel-polyfill": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "core-js": "2.6.9",
+        "regenerator-runtime": "0.10.5"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.10.5",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+          "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+          "dev": true
+        }
+      }
+    },
+    "babel-preset-es2015": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz",
+      "integrity": "sha1-r1qY7LNeuK92StiloF6zbcQ4aDU=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-check-es2015-constants": "6.22.0",
+        "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+        "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+        "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+        "babel-plugin-transform-es2015-classes": "6.24.1",
+        "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+        "babel-plugin-transform-es2015-destructuring": "6.23.0",
+        "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+        "babel-plugin-transform-es2015-for-of": "6.23.0",
+        "babel-plugin-transform-es2015-function-name": "6.24.1",
+        "babel-plugin-transform-es2015-literals": "6.22.0",
+        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
+        "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+        "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+        "babel-plugin-transform-es2015-object-super": "6.24.1",
+        "babel-plugin-transform-es2015-parameters": "6.24.1",
+        "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+        "babel-plugin-transform-es2015-spread": "6.22.0",
+        "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+        "babel-plugin-transform-es2015-template-literals": "6.22.0",
+        "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+        "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+        "babel-plugin-transform-regenerator": "6.26.0"
+      }
+    },
+    "babel-preset-flow": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+      "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-flow-strip-types": "6.22.0"
+      }
+    },
+    "babel-preset-react": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.23.0.tgz",
+      "integrity": "sha1-63zuTemKP5RQLChWUzLamBlFUZU=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-jsx": "6.18.0",
+        "babel-plugin-transform-react-display-name": "6.25.0",
+        "babel-plugin-transform-react-jsx": "6.24.1",
+        "babel-plugin-transform-react-jsx-self": "6.22.0",
+        "babel-plugin-transform-react-jsx-source": "6.22.0",
+        "babel-preset-flow": "6.23.0"
+      }
+    },
+    "babel-preset-stage-0": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz",
+      "integrity": "sha1-cH7rW0Fdp2nv+cQvRUf2RPkpbvk=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-do-expressions": "6.22.0",
+        "babel-plugin-transform-function-bind": "6.22.0",
+        "babel-preset-stage-1": "6.24.1"
+      }
+    },
+    "babel-preset-stage-1": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz",
+      "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-class-constructor-call": "6.24.1",
+        "babel-plugin-transform-export-extensions": "6.22.0",
+        "babel-preset-stage-2": "6.24.1"
+      }
+    },
+    "babel-preset-stage-2": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+      "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-dynamic-import": "6.18.0",
+        "babel-plugin-transform-class-properties": "6.24.1",
+        "babel-plugin-transform-decorators": "6.24.1",
+        "babel-preset-stage-3": "6.24.1"
+      }
+    },
+    "babel-preset-stage-3": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+      "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+        "babel-plugin-transform-async-generator-functions": "6.24.1",
+        "babel-plugin-transform-async-to-generator": "6.24.1",
+        "babel-plugin-transform-exponentiation-operator": "6.24.1",
+        "babel-plugin-transform-object-rest-spread": "6.26.0"
+      }
+    },
+    "babel-register": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+      "dev": true,
+      "requires": {
+        "babel-core": "6.26.3",
+        "babel-runtime": "6.26.0",
+        "core-js": "2.6.9",
+        "home-or-tmp": "2.0.0",
+        "lodash": "4.17.15",
+        "mkdirp": "0.5.1",
+        "source-map-support": "0.4.18"
+      },
+      "dependencies": {
+        "babel-core": {
+          "version": "6.26.3",
+          "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+          "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+          "dev": true,
+          "requires": {
+            "babel-code-frame": "6.26.0",
+            "babel-generator": "6.26.1",
+            "babel-helpers": "6.24.1",
+            "babel-messages": "6.23.0",
+            "babel-register": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0",
+            "babylon": "6.18.0",
+            "convert-source-map": "1.6.0",
+            "debug": "2.6.9",
+            "json5": "0.5.1",
+            "lodash": "4.17.15",
+            "minimatch": "3.0.4",
+            "path-is-absolute": "1.0.1",
+            "private": "0.1.8",
+            "slash": "1.0.0",
+            "source-map": "0.5.7"
+          }
+        }
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "2.6.9",
+        "regenerator-runtime": "0.11.1"
+      }
+    },
+    "babel-template": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "babel-traverse": "6.26.0",
+        "babel-types": "6.26.0",
+        "babylon": "6.18.0",
+        "lodash": "4.17.15"
+      }
+    },
+    "babel-traverse": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "6.26.0",
+        "babel-messages": "6.23.0",
+        "babel-runtime": "6.26.0",
+        "babel-types": "6.26.0",
+        "babylon": "6.18.0",
+        "debug": "2.6.9",
+        "globals": "9.18.0",
+        "invariant": "2.2.4",
+        "lodash": "4.17.15"
+      }
+    },
+    "babel-types": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "esutils": "2.0.3",
+        "lodash": "4.17.15",
+        "to-fast-properties": "1.0.3"
+      }
+    },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "1.0.1",
+        "class-utils": "0.3.6",
+        "component-emitter": "1.3.0",
+        "define-property": "1.0.0",
+        "isobject": "3.0.1",
+        "mixin-deep": "1.3.2",
+        "pascalcase": "0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "1.0.2"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "1.0.0",
+            "is-data-descriptor": "1.0.0",
+            "kind-of": "6.0.2"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "0.14.5"
+      }
+    },
+    "beeper": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+      "dev": true
+    },
+    "big.js": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+      "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+      "dev": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.4"
+      }
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "1.0.4",
+        "debug": "2.6.9",
+        "depd": "1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "1.6.18"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+          "dev": true
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "2.1.2",
+        "deep-equal": "1.1.0",
+        "dns-equal": "1.0.0",
+        "dns-txt": "2.0.2",
+        "multicast-dns": "6.2.3",
+        "multicast-dns-service-types": "1.1.0"
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "1.1.0",
+        "array-unique": "0.3.2",
+        "extend-shallow": "2.0.1",
+        "fill-range": "4.0.0",
+        "isobject": "3.0.1",
+        "repeat-element": "1.1.3",
+        "snapdragon": "0.8.2",
+        "snapdragon-node": "2.1.1",
+        "split-string": "3.1.0",
+        "to-regex": "3.0.2"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browser-process-hrtime": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
+      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "1.0.3",
+        "cipher-base": "1.0.4",
+        "create-hash": "1.2.0",
+        "evp_bytestokey": "1.0.3",
+        "inherits": "2.0.4",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "1.2.0",
+        "browserify-des": "1.0.2",
+        "evp_bytestokey": "1.0.3"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "des.js": "1.0.0",
+        "inherits": "2.0.4",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "randombytes": "2.1.0"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "browserify-rsa": "4.0.1",
+        "create-hash": "1.2.0",
+        "create-hmac": "1.1.7",
+        "elliptic": "6.5.1",
+        "inherits": "2.0.4",
+        "parse-asn1": "5.1.5"
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+      "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+      "dev": true,
+      "requires": {
+        "pako": "0.2.9"
+      }
+    },
+    "buffer": {
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "1.3.1",
+        "ieee754": "1.1.13",
+        "isarray": "1.0.0"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+      "dev": true
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "1.0.0",
+        "component-emitter": "1.3.0",
+        "get-value": "2.0.6",
+        "has-value": "1.0.0",
+        "isobject": "3.0.1",
+        "set-value": "2.0.1",
+        "to-object-path": "0.3.0",
+        "union-value": "1.0.1",
+        "unset-value": "1.0.0"
+      }
+    },
+    "caller-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "dev": true,
+      "requires": {
+        "callsites": "0.2.0"
+      }
+    },
+    "callsites": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "requires": {
+        "camelcase": "2.1.1",
+        "map-obj": "1.0.1"
+      }
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "dev": true,
+      "requires": {
+        "align-text": "0.1.4",
+        "lazy-cache": "1.0.4"
+      }
+    },
+    "chalk": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "2.2.1",
+        "escape-string-regexp": "1.0.5",
+        "has-ansi": "2.0.0",
+        "strip-ansi": "3.0.1",
+        "supports-color": "2.0.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+      "dev": true,
+      "requires": {
+        "anymatch": "2.0.0",
+        "async-each": "1.0.3",
+        "braces": "2.3.2",
+        "fsevents": "1.2.9",
+        "glob-parent": "3.1.0",
+        "inherits": "2.0.4",
+        "is-binary-path": "1.0.1",
+        "is-glob": "4.0.1",
+        "normalize-path": "3.0.0",
+        "path-is-absolute": "1.0.1",
+        "readdirp": "2.2.1",
+        "upath": "1.2.0"
+      }
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.4",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+      "dev": true
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "3.1.0",
+        "define-property": "0.2.5",
+        "isobject": "3.0.1",
+        "static-extend": "0.1.2"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        }
+      }
+    },
+    "classnames": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "2.0.0"
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "dev": true,
+      "requires": {
+        "string-width": "1.0.2",
+        "strip-ansi": "3.0.1",
+        "wrap-ansi": "2.1.0"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "1.0.1"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "1.1.0",
+            "is-fullwidth-code-point": "1.0.0",
+            "strip-ansi": "3.0.1"
+          }
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-deep": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
+      "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
+      "dev": true,
+      "requires": {
+        "for-own": "0.1.5",
+        "is-plain-object": "2.0.4",
+        "kind-of": "3.2.2",
+        "lazy-cache": "1.0.4",
+        "shallow-clone": "0.1.2"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+          "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+          "dev": true,
+          "requires": {
+            "for-in": "1.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "clone-stats": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+      "dev": true
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "1.0.0",
+        "object-visit": "1.0.1"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+      "dev": true
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+      "dev": true
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.17",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+      "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.40.0"
+      }
+    },
+    "compression": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+      "dev": true,
+      "requires": {
+        "accepts": "1.3.7",
+        "bytes": "3.0.0",
+        "compressible": "2.0.17",
+        "debug": "2.6.9",
+        "on-headers": "1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "1.1.2"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "1.1.1",
+        "inherits": "2.0.4",
+        "readable-stream": "2.3.6",
+        "typedarray": "0.0.6"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+      "dev": true,
+      "requires": {
+        "date-now": "0.1.4"
+      }
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "contains-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+      "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-decorators": {
+      "version": "0.20.0",
+      "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz",
+      "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU="
+    },
+    "core-js": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+      "dev": true
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "elliptic": "6.5.1"
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "inherits": "2.0.4",
+        "md5.js": "1.3.5",
+        "ripemd160": "2.0.2",
+        "sha.js": "2.4.11"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "create-hash": "1.2.0",
+        "inherits": "2.0.4",
+        "ripemd160": "2.0.2",
+        "safe-buffer": "5.1.2",
+        "sha.js": "2.4.11"
+      }
+    },
+    "cross-spawn": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+      "dev": true,
+      "requires": {
+        "lru-cache": "4.1.5",
+        "which": "1.3.1"
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "1.0.1",
+        "browserify-sign": "4.0.4",
+        "create-ecdh": "4.0.3",
+        "create-hash": "1.2.0",
+        "create-hmac": "1.1.7",
+        "diffie-hellman": "5.0.3",
+        "inherits": "2.0.4",
+        "pbkdf2": "3.0.17",
+        "public-encrypt": "4.0.3",
+        "randombytes": "2.1.0",
+        "randomfill": "1.0.4"
+      }
+    },
+    "css-loader": {
+      "version": "0.6.12",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.6.12.tgz",
+      "integrity": "sha1-lszxg6s4peyIr/jZ+CHUeGFNGkc=",
+      "dev": true,
+      "requires": {
+        "csso": "1.3.12",
+        "loader-utils": "0.2.17",
+        "source-map": "0.1.43"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "dev": true,
+          "requires": {
+            "amdefine": "1.0.1"
+          }
+        }
+      }
+    },
+    "css-modules-require-hook": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/css-modules-require-hook/-/css-modules-require-hook-4.2.3.tgz",
+      "integrity": "sha1-Z5LKQSsV4j5vm+agfc739Xf/kE0=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "generic-names": "1.0.3",
+        "glob-to-regexp": "0.3.0",
+        "icss-replace-symbols": "1.1.0",
+        "lodash": "4.17.15",
+        "postcss": "6.0.23",
+        "postcss-modules-extract-imports": "1.2.1",
+        "postcss-modules-local-by-default": "1.2.0",
+        "postcss-modules-resolve-imports": "1.3.0",
+        "postcss-modules-scope": "1.1.0",
+        "postcss-modules-values": "1.3.0",
+        "seekout": "1.0.2"
+      }
+    },
+    "css-selector-tokenizer": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+      "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
+      "dev": true,
+      "requires": {
+        "cssesc": "0.1.0",
+        "fastparse": "1.1.2",
+        "regexpu-core": "1.0.0"
+      },
+      "dependencies": {
+        "regexpu-core": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
... 15183 lines suppressed ...


Mime
View raw message