From 9bef6ed81d0e37754cd437019b16dbce48b7291c Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Mon, 17 Dec 2018 23:15:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0UI=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/JT808.DotNetty.Dashbord.UI/.babelrc | 5 + src/JT808.DotNetty.Dashbord.UI/.editorconfig | 9 + src/JT808.DotNetty.Dashbord.UI/.eslintignore | 0 src/JT808.DotNetty.Dashbord.UI/.eslintrc.js | 19 + src/JT808.DotNetty.Dashbord.UI/.gitignore | 26 ++ src/JT808.DotNetty.Dashbord.UI/.postcssrc.js | 5 + src/JT808.DotNetty.Dashbord.UI/.travis.yml | 5 + src/JT808.DotNetty.Dashbord.UI/LICENSE | 21 + src/JT808.DotNetty.Dashbord.UI/README.md | 187 ++++++++ .../public/favicon.ico | Bin 0 -> 4286 bytes .../public/index.html | 17 + src/JT808.DotNetty.Dashbord.UI/src/App.vue | 27 ++ .../src/api/atomicCounter.js | 8 + .../src/api/data.js | 37 ++ .../src/api/routers.js | 11 + .../src/api/session.js | 22 + .../src/api/sourcePackage.js | 32 ++ .../src/api/transmit.js | 32 ++ .../src/api/unificationSend.js | 8 + .../src/api/user.js | 84 ++++ .../src/assets/icons/iconfont.css | 37 ++ .../src/assets/icons/iconfont.eot | Bin 0 -> 3856 bytes .../src/assets/icons/iconfont.svg | 56 +++ .../src/assets/icons/iconfont.ttf | Bin 0 -> 3688 bytes .../src/assets/icons/iconfont.woff | Bin 0 -> 2180 bytes .../assets/images/error-page/error-401.svg | 1 + .../assets/images/error-page/error-404.svg | 1 + .../assets/images/error-page/error-500.svg | 1 + .../src/assets/images/login-bg.jpg | Bin 0 -> 460261 bytes .../src/assets/images/logo-min.jpg | Bin 0 -> 726 bytes .../src/assets/images/logo.jpg | Bin 0 -> 3318 bytes .../src/assets/images/qq-group1.jpg | Bin 0 -> 40646 bytes .../src/assets/images/qq-group2.jpg | Bin 0 -> 41367 bytes .../src/assets/images/talkingdata.png | Bin 0 -> 2872178 bytes .../src/components/charts/bar.vue | 58 +++ .../src/components/charts/index.js | 3 + .../src/components/charts/pie.vue | 70 +++ .../components/common-icon/common-icon.vue | 42 ++ .../src/components/common-icon/index.js | 2 + .../src/components/common/common.less | 8 + .../src/components/common/util.js | 3 + .../src/components/count-to/count-to.vue | 174 ++++++++ .../src/components/count-to/index.js | 2 + .../src/components/count-to/index.less | 10 + .../src/components/cropper/index.js | 2 + .../src/components/cropper/index.less | 35 ++ .../src/components/cropper/index.vue | 139 ++++++ .../src/components/drag-list/drag-list.vue | 92 ++++ .../src/components/drag-list/index.js | 2 + .../src/components/editor/editor.vue | 75 ++++ .../src/components/editor/index.js | 2 + .../src/components/icons/icons.vue | 35 ++ .../src/components/icons/index.js | 2 + .../src/components/info-card/index.js | 2 + .../src/components/info-card/infor-card.vue | 94 +++++ .../src/components/login-form/index.js | 2 + .../src/components/login-form/login-form.vue | 72 ++++ .../main/components/a-back-top/index.js | 2 + .../main/components/a-back-top/index.vue | 90 ++++ .../components/error-store/error-store.vue | 49 +++ .../main/components/error-store/index.js | 2 + .../main/components/fullscreen/fullscreen.vue | 84 ++++ .../main/components/fullscreen/index.js | 2 + .../custom-bread-crumb.less | 4 + .../custom-bread-crumb/custom-bread-crumb.vue | 46 ++ .../header-bar/custom-bread-crumb/index.js | 2 + .../components/header-bar/header-bar.less | 14 + .../main/components/header-bar/header-bar.vue | 34 ++ .../main/components/header-bar/index.js | 2 + .../header-bar/sider-trigger/index.js | 2 + .../sider-trigger/sider-trigger.less | 21 + .../sider-trigger/sider-trigger.vue | 27 ++ .../main/components/language/index.js | 2 + .../main/components/language/language.vue | 51 +++ .../components/side-menu/collapsed-menu.vue | 51 +++ .../main/components/side-menu/index.js | 2 + .../main/components/side-menu/item-mixin.js | 21 + .../main/components/side-menu/mixin.js | 18 + .../components/side-menu/side-menu-item.vue | 26 ++ .../main/components/side-menu/side-menu.less | 40 ++ .../main/components/side-menu/side-menu.vue | 114 +++++ .../main/components/tags-nav/index.js | 2 + .../main/components/tags-nav/tags-nav.less | 87 ++++ .../main/components/tags-nav/tags-nav.vue | 209 +++++++++ .../components/main/components/user/index.js | 2 + .../components/main/components/user/user.less | 12 + .../components/main/components/user/user.vue | 59 +++ .../src/components/main/index.js | 2 + .../src/components/main/main.less | 75 ++++ .../src/components/main/main.vue | 183 ++++++++ .../src/components/markdown/index.js | 2 + .../src/components/markdown/markdown.vue | 76 ++++ .../src/components/parent-view/index.js | 2 + .../components/parent-view/parent-view.vue | 20 + .../src/components/paste-editor/index.js | 2 + .../components/paste-editor/paste-editor.less | 26 ++ .../components/paste-editor/paste-editor.vue | 115 +++++ .../paste-editor/plugins/placeholder.js | 58 +++ .../src/components/split-pane/index.js | 2 + .../src/components/split-pane/index.less | 114 +++++ .../src/components/split-pane/split.vue | 158 +++++++ .../src/components/split-pane/trigger.vue | 43 ++ .../src/components/tables/edit.vue | 73 ++++ .../src/components/tables/handle-btns.js | 33 ++ .../src/components/tables/index.js | 2 + .../src/components/tables/index.less | 17 + .../src/components/tables/tables.vue | 277 ++++++++++++ .../src/config/index.js | 36 ++ .../src/directive/directives.js | 9 + .../src/directive/index.js | 24 ++ .../src/directive/module/clipboard.js | 30 ++ .../src/directive/module/draggable.js | 41 ++ src/JT808.DotNetty.Dashbord.UI/src/index.less | 5 + .../src/libs/api.request.js | 6 + .../src/libs/axios.js | 74 ++++ .../src/libs/excel.js | 113 +++++ .../src/libs/tools.js | 215 ++++++++++ .../src/libs/util.js | 399 ++++++++++++++++++ .../src/locale/index.js | 37 ++ .../src/locale/lang/en-US.js | 42 ++ .../src/locale/lang/zh-CN.js | 42 ++ .../src/locale/lang/zh-TW.js | 42 ++ src/JT808.DotNetty.Dashbord.UI/src/main.js | 47 +++ .../src/mock/atomicCounter.js | 9 + .../src/mock/commonResultData.js | 7 + .../src/mock/data.js | 30 ++ .../src/mock/index.js | 47 +++ .../src/mock/login.js | 31 ++ .../src/mock/session.js | 32 ++ .../src/mock/sourcePackage.js | 30 ++ .../src/mock/transmit.js | 21 + .../src/mock/unificationSend.js | 10 + .../src/mock/user.js | 55 +++ .../src/plugin/error-store/index.js | 17 + .../src/plugin/index.js | 9 + .../src/router/before-close.js | 17 + .../src/router/index.js | 61 +++ .../src/router/routers.js | 195 +++++++++ .../src/store/index.js | 23 + .../src/store/module/app.js | 115 +++++ .../src/store/module/user.js | 217 ++++++++++ .../src/view/components/charts/bar.vue | 58 +++ .../src/view/components/charts/index.js | 3 + .../src/view/components/charts/pie.vue | 70 +++ .../components/common-icon/common-icon.vue | 42 ++ .../src/view/components/common-icon/index.js | 2 + .../src/view/components/common/common.less | 8 + .../src/view/components/common/util.js | 3 + .../src/view/components/count-to/count-to.vue | 174 ++++++++ .../src/view/components/count-to/index.js | 2 + .../src/view/components/count-to/index.less | 10 + .../src/view/components/cropper/cropper.vue | 48 +++ .../src/view/components/cropper/index.js | 2 + .../src/view/components/cropper/index.less | 35 ++ .../src/view/components/cropper/index.vue | 139 ++++++ .../view/components/drag-list/drag-list.vue | 92 ++++ .../src/view/components/drag-list/index.js | 2 + .../src/view/components/editor/editor.vue | 75 ++++ .../src/view/components/editor/index.js | 2 + .../src/view/components/icons/icons.vue | 35 ++ .../src/view/components/icons/index.js | 2 + .../src/view/components/info-card/index.js | 2 + .../view/components/info-card/infor-card.vue | 94 +++++ .../src/view/components/login-form/index.js | 2 + .../view/components/login-form/login-form.vue | 72 ++++ .../main/components/a-back-top/index.js | 2 + .../main/components/a-back-top/index.vue | 90 ++++ .../components/error-store/error-store.vue | 49 +++ .../main/components/error-store/index.js | 2 + .../main/components/fullscreen/fullscreen.vue | 84 ++++ .../main/components/fullscreen/index.js | 2 + .../custom-bread-crumb.less | 4 + .../custom-bread-crumb/custom-bread-crumb.vue | 46 ++ .../header-bar/custom-bread-crumb/index.js | 2 + .../components/header-bar/header-bar.less | 14 + .../main/components/header-bar/header-bar.vue | 34 ++ .../main/components/header-bar/index.js | 2 + .../header-bar/sider-trigger/index.js | 2 + .../sider-trigger/sider-trigger.less | 21 + .../sider-trigger/sider-trigger.vue | 27 ++ .../main/components/language/index.js | 2 + .../main/components/language/language.vue | 51 +++ .../components/side-menu/collapsed-menu.vue | 51 +++ .../main/components/side-menu/index.js | 2 + .../main/components/side-menu/item-mixin.js | 21 + .../main/components/side-menu/mixin.js | 18 + .../components/side-menu/side-menu-item.vue | 26 ++ .../main/components/side-menu/side-menu.less | 40 ++ .../main/components/side-menu/side-menu.vue | 114 +++++ .../main/components/tags-nav/index.js | 2 + .../main/components/tags-nav/tags-nav.less | 87 ++++ .../main/components/tags-nav/tags-nav.vue | 209 +++++++++ .../components/main/components/user/index.js | 2 + .../components/main/components/user/user.less | 12 + .../components/main/components/user/user.vue | 59 +++ .../src/view/components/main/index.js | 2 + .../src/view/components/main/main.less | 75 ++++ .../src/view/components/main/main.vue | 183 ++++++++ .../src/view/components/markdown/index.js | 2 + .../src/view/components/markdown/markdown.vue | 76 ++++ .../src/view/components/parent-view/index.js | 2 + .../components/parent-view/parent-view.vue | 20 + .../src/view/components/paste-editor/index.js | 2 + .../components/paste-editor/paste-editor.less | 26 ++ .../components/paste-editor/paste-editor.vue | 115 +++++ .../paste-editor/plugins/placeholder.js | 58 +++ .../src/view/components/split-pane/index.js | 2 + .../src/view/components/split-pane/index.less | 114 +++++ .../view/components/split-pane/split-pane.vue | 79 ++++ .../src/view/components/split-pane/split.vue | 158 +++++++ .../view/components/split-pane/trigger.vue | 43 ++ .../src/view/components/tables/edit.vue | 73 ++++ .../src/view/components/tables/handle-btns.js | 33 ++ .../src/view/components/tables/index.js | 2 + .../src/view/components/tables/index.less | 17 + .../src/view/components/tables/tables.vue | 277 ++++++++++++ .../src/view/components/tree-table/index.vue | 194 +++++++++ .../src/view/directive/directive.vue | 121 ++++++ .../src/view/error-page/401.vue | 19 + .../src/view/error-page/404.vue | 19 + .../src/view/error-page/500.vue | 19 + .../src/view/error-page/back-btn-group.vue | 38 ++ .../src/view/error-page/error-content.vue | 28 ++ .../src/view/error-page/error.less | 46 ++ .../src/view/error-store/error-store.vue | 39 ++ .../src/view/login/login.less | 29 ++ .../src/view/login/login.vue | 45 ++ .../src/view/session/session.vue | 34 ++ .../src/view/single-page/error-logger.vue | 91 ++++ .../src/view/single-page/home/example.vue | 114 +++++ .../src/view/single-page/home/home.vue | 83 ++++ .../src/view/single-page/home/index.js | 2 + .../src/view/single-page/message/index.vue | 194 +++++++++ .../src/view/sourcepackage/sourcepackage.vue | 34 ++ .../src/view/transmit/transmit.vue | 33 ++ .../tests/e2e/.eslintrc | 12 + .../tests/e2e/plugins/index.js | 9 + .../tests/e2e/specs/test.js | 8 + .../tests/e2e/support/commands.js | 25 ++ .../tests/e2e/support/index.js | 20 + .../tests/unit/.eslintrc.js | 8 + .../tests/unit/HelloWorld.spec.js | 13 + src/JT808.DotNetty.Dashbord.UI/vue.config.js | 43 ++ .../JT808AtomicCounterController.cs | 2 + .../Controllers/JT808SessionController.cs | 3 + .../JT808SourcePackageController.cs | 5 +- .../Controllers/JT808TransmitController.cs | 3 + .../JT808UnificationSendController.cs | 4 +- 249 files changed, 10767 insertions(+), 3 deletions(-) create mode 100644 src/JT808.DotNetty.Dashbord.UI/.babelrc create mode 100644 src/JT808.DotNetty.Dashbord.UI/.editorconfig create mode 100644 src/JT808.DotNetty.Dashbord.UI/.eslintignore create mode 100644 src/JT808.DotNetty.Dashbord.UI/.eslintrc.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/.gitignore create mode 100644 src/JT808.DotNetty.Dashbord.UI/.postcssrc.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/.travis.yml create mode 100644 src/JT808.DotNetty.Dashbord.UI/LICENSE create mode 100644 src/JT808.DotNetty.Dashbord.UI/README.md create mode 100644 src/JT808.DotNetty.Dashbord.UI/public/favicon.ico create mode 100644 src/JT808.DotNetty.Dashbord.UI/public/index.html create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/App.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/atomicCounter.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/data.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/routers.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/session.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/sourcePackage.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/transmit.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/unificationSend.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/api/user.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/icons/iconfont.css create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/icons/iconfont.eot create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/icons/iconfont.svg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/icons/iconfont.ttf create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/icons/iconfont.woff create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/error-page/error-401.svg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/error-page/error-404.svg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/error-page/error-500.svg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/login-bg.jpg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/logo-min.jpg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/logo.jpg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/qq-group1.jpg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/qq-group2.jpg create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/assets/images/talkingdata.png create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/charts/bar.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/charts/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/charts/pie.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/common-icon/common-icon.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/common-icon/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/common/common.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/common/util.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/count-to/count-to.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/count-to/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/count-to/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/cropper/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/cropper/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/cropper/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/drag-list/drag-list.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/drag-list/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/editor/editor.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/editor/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/icons/icons.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/icons/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/info-card/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/info-card/infor-card.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/login-form/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/login-form/login-form.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/a-back-top/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/a-back-top/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/error-store/error-store.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/error-store/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/fullscreen/fullscreen.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/fullscreen/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/custom-bread-crumb/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/header-bar.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/header-bar.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/sider-trigger/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/sider-trigger/sider-trigger.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/language/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/language/language.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/collapsed-menu.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/item-mixin.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/mixin.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/side-menu-item.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/side-menu.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/side-menu/side-menu.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/tags-nav/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/tags-nav/tags-nav.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/tags-nav/tags-nav.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/user/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/user/user.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/components/user/user.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/main.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/main/main.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/markdown/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/markdown/markdown.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/parent-view/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/parent-view/parent-view.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/paste-editor/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/paste-editor/paste-editor.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/paste-editor/paste-editor.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/paste-editor/plugins/placeholder.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/split-pane/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/split-pane/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/split-pane/split.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/split-pane/trigger.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/tables/edit.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/tables/handle-btns.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/tables/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/tables/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/components/tables/tables.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/config/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/directive/directives.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/directive/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/directive/module/clipboard.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/directive/module/draggable.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/libs/api.request.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/libs/axios.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/libs/excel.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/libs/tools.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/libs/util.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/locale/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/locale/lang/en-US.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/locale/lang/zh-CN.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/locale/lang/zh-TW.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/main.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/atomicCounter.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/commonResultData.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/data.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/login.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/session.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/sourcePackage.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/transmit.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/unificationSend.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/mock/user.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/plugin/error-store/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/plugin/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/router/before-close.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/router/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/router/routers.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/store/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/store/module/app.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/store/module/user.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/charts/bar.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/charts/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/charts/pie.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/common-icon/common-icon.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/common-icon/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/common/common.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/common/util.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/count-to/count-to.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/count-to/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/count-to/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/cropper/cropper.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/cropper/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/cropper/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/cropper/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/drag-list/drag-list.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/drag-list/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/editor/editor.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/editor/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/icons/icons.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/icons/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/info-card/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/info-card/infor-card.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/login-form/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/login-form/login-form.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/a-back-top/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/a-back-top/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/error-store/error-store.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/error-store/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/fullscreen/fullscreen.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/fullscreen/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/custom-bread-crumb/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/header-bar.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/header-bar.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/sider-trigger/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/sider-trigger/sider-trigger.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/header-bar/sider-trigger/sider-trigger.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/language/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/language/language.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/collapsed-menu.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/item-mixin.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/mixin.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/side-menu-item.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/side-menu.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/side-menu/side-menu.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/tags-nav/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/tags-nav/tags-nav.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/tags-nav/tags-nav.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/user/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/user/user.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/components/user/user.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/main.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/main/main.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/markdown/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/markdown/markdown.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/parent-view/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/parent-view/parent-view.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/paste-editor/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/paste-editor/paste-editor.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/paste-editor/paste-editor.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/paste-editor/plugins/placeholder.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/split-pane/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/split-pane/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/split-pane/split-pane.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/split-pane/split.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/split-pane/trigger.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tables/edit.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tables/handle-btns.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tables/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tables/index.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tables/tables.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/components/tree-table/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/directive/directive.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/401.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/404.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/500.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/back-btn-group.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/error-content.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-page/error.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/error-store/error-store.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/login/login.less create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/login/login.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/session/session.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/single-page/error-logger.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/single-page/home/example.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/single-page/home/home.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/single-page/home/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/single-page/message/index.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/sourcepackage/sourcepackage.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/src/view/transmit/transmit.vue create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/e2e/.eslintrc create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/e2e/plugins/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/e2e/specs/test.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/e2e/support/commands.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/e2e/support/index.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/unit/.eslintrc.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/tests/unit/HelloWorld.spec.js create mode 100644 src/JT808.DotNetty.Dashbord.UI/vue.config.js diff --git a/.gitignore b/.gitignore index 3e759b7..a4222ae 100644 --- a/.gitignore +++ b/.gitignore @@ -328,3 +328,4 @@ ASALocalRun/ # MFractors (Xamarin productivity tool) working folder .mfractor/ +*.json diff --git a/src/JT808.DotNetty.Dashbord.UI/.babelrc b/src/JT808.DotNetty.Dashbord.UI/.babelrc new file mode 100644 index 0000000..2a81884 --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + "@vue/app" + ] +} diff --git a/src/JT808.DotNetty.Dashbord.UI/.editorconfig b/src/JT808.DotNetty.Dashbord.UI/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/src/JT808.DotNetty.Dashbord.UI/.eslintignore b/src/JT808.DotNetty.Dashbord.UI/.eslintignore new file mode 100644 index 0000000..e69de29 diff --git a/src/JT808.DotNetty.Dashbord.UI/.eslintrc.js b/src/JT808.DotNetty.Dashbord.UI/.eslintrc.js new file mode 100644 index 0000000..2005c1a --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/essential', + '@vue/standard' + ], + rules: { + // allow async-await + 'generator-star-spacing': 'off', + // allow debugger during development + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }], + 'no-undef': 'off', + 'camelcase': 'off' + }, + parserOptions: { + parser: 'babel-eslint' + } +} diff --git a/src/JT808.DotNetty.Dashbord.UI/.gitignore b/src/JT808.DotNetty.Dashbord.UI/.gitignore new file mode 100644 index 0000000..2056a84 --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +node_modules +/dist + +/tests/e2e/videos/ +/tests/e2e/screenshots/ + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* + +build/env.js diff --git a/src/JT808.DotNetty.Dashbord.UI/.postcssrc.js b/src/JT808.DotNetty.Dashbord.UI/.postcssrc.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.postcssrc.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/src/JT808.DotNetty.Dashbord.UI/.travis.yml b/src/JT808.DotNetty.Dashbord.UI/.travis.yml new file mode 100644 index 0000000..07c971f --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: stable +script: npm run lint +notifications: + email: false diff --git a/src/JT808.DotNetty.Dashbord.UI/LICENSE b/src/JT808.DotNetty.Dashbord.UI/LICENSE new file mode 100644 index 0000000..7ec88ac --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 iView + +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/src/JT808.DotNetty.Dashbord.UI/README.md b/src/JT808.DotNetty.Dashbord.UI/README.md new file mode 100644 index 0000000..9945af9 --- /dev/null +++ b/src/JT808.DotNetty.Dashbord.UI/README.md @@ -0,0 +1,187 @@ +
+
+
+
+
743o_#i`=^g8;E8~Y~ za{glZ-Jmw^i7_McTgyOz3YrDgi@M)m(1o6`Bjef$W%X&Y64zomc)AdQPeI7EmvOd_ zAtnrF;V@g%16*G?k?Ez6zrb%iriw2-LX0 q3+&Ff1a1pcc zWLbk-c|_PU=Ja00_}ZHw)Ym1C=4QVcl_%F BeNuJ{mzL~2k!+ppWNP0 zuU_TSK?~h{Oxd_xQZdxtMZS{xv9ljy?u)!hRO o%P#BVi&(E8+pJ&E>>z7+J IMLhR5kPJknBMNqW2iEV!)|*X3Uz7SO;X9 NY;vi^`sT=bm^$sD3H*q8<`I>uj*Hde*sGQJ2h^#&YY(pQg>3 zmKs47D8>UZZ!faTa_w^uOUn8B6H*jvqAoKV;##8p-TPn9H@S#@KyaYmYv1O}H@kiF zE0LdH{!zN(t*;w$Uk$t|CJT|;3+-0C&wHlAkLcI_WAlx`NJK_Nn9ymlc? O=~W&W(D7W#`>TC4NBWkoIRrcIo)EOy=J~ z>#V6IayNpsr3c0*Jf_<|j$A@|y#|RIo~dij-mO~iF|YFWdu+{e*>~_&o-nf7Whhp* zWZbc%X@uqDssc(XKn0;)UN24j1)LYzt>$g3zq2!F=xp{()I_-JZj5+^(39oQM_ZQp zLT6AWbnE%~sU6l0%_IE5!BV41!a$aPSVNwK+6M_id5bOV_iO9Z<>ViEw=%oZKT!65 zzv#R-T*?0#vnRwZ{?PDFP<8MDPSCKJ*Xc@D(cGZvr5L`vL;3YOdIdvkub(OM{v2Py z*UQ_>cR7AuyHS~u@GfT tUExxfUpzda?MW%f^}BM9gi%5V#W2jXV_t7-Y0iLVdH>- zs;JUKKvr1Ryzm5oii%LxyWsgK-BJHMddU$G?XGpt956643d7X+w|1_NIOTVH*&axc z4LZKy-04uu9uax0A!oI!C}DQmF)0JXjdCxjNq!6d9jdue-H?}UpYp$#Kt8!5W6Zr=QZ~bLLPj(T5ZeDRXM~S?qd*JLh#C%GHYo?RHVqPv z;d%N#Hdoqy{S$Y 5Nq) zA~~0b&1=?bwy9Nya*VzlOVw<0pB5N3A434WF2h?@!QGsTCRG7k%4b>3JCRq52iZ4< zl~S>s@P|}!P=pKjFmIVT5#Zh^llTOA @9*u|P4`OATeej{>5P6cOUwD)m?;joxaJx4|2Rg{$Jn(wqmXNdSWXq|6{5p|| z5?{Ot76u|9Y9otf>BN&)4PEJLGr>I~4JWBvZ)m=`WQb1R^`~AHvE0V~Rb6MR49|r! zp)>%w{H=ts7YckBMZJ>mHtv0SCc%=AAc{VKxcSIDm?1H0ysTZ_*dr__kSnW%emqfF z Pi%4QCo7* z`}!0)bI0|qd G%|@VwZh`hm?QU<0ZQ R65s$Ub *Wy-aKT= zuw1Hdw9Y}>A~t{U`iya`5Fmk)QY7d~v|;n(M+ln!yS_;8fcWcV9{|e1kHu5q){xXm z8<)(K=p}!#i)vk~kAA0&A;(YRb3hZ@MTKM9`COIDrXSw;ub+9<3UWUD&LSg}%$0sN zyfC=Lj3&F2;!*!tYR}Q3#-jbmBqqB3#*p{fc?p-LZ`!W~tve=e*Hr{AjjfB%i-u@M zCollIR6>ka?oX+lLlATB6`w{0cyUKQpvjJhz~g&y&a}O%`s&m5<1qL~X4wH#UWlD+ zvshm# cmYo}10WyOjL$>J GjVO<>)tvK!BCI9Obee^J7a53HzPJNf5T&h4X+ zC(7bS=+|Ya4hdhckZ9uay;h>rbnQ0&2CDP}e^I?3GXo}pS#(Xd{@8k+pc9|2Mp|k* zZ$@KDlT)Xp^~#`Pe-d^gDeKaH X##*ug$6+00M39!;w@ z?)g7nvl#Ds_@%yWMbFafrTIsN5KCLwt>WD)Hq_T2uY6$3F1U7HnMqo_C&isMSV-J< zvMe#4FFc v1PT9AK*dai z$-a7lbQA;=9gd^%b>7|IHsLp?mUH%qZi+oN8jZYPJF|?SIAPUM1-8Np<*_HkOPENJ z%X3PlAu{ Plnqv+=f)Uyjx%Guc1uI{$fakK6WV)O6Y zTl&~01n<^F@)Ah=vu_%pLn}_u{}szW*Wv5Cj)2K&F9`F^{{`-|UocNKmSoKP><5e? z?B 5^r{#E^b8#mSz(<+$?YbMHs%;N=92ZD^egK!*#-Bh{9 5{Xc{Cn$acT=c@K~NCNx=tHBQBH(rH}T%iSt&dRDofvoq)2l ^Q?$tfV_)MicgMrd_2$P%w6V*GLm|9Uaenz sTUr!R~ z%`a&bRS6Ju1ws2BDWT$pu|b4NC0VN|`_3B)Na&%{y&$ j)wz`M8e$@kw^T-mKJqY>5;A1+Ta8#TMl)%WX+_*>WD?`7cd zZ9gV1YpLmXfb>2oNh0mgn)jjtU}iiTswHcV0UirU+ }?hGmdV` zU6+yKcjS;eL%Ma}`s$w8J+|4Bbd!Ig+5OJmq?ge4-ufc9&^zngXV? qw@j4PC$1d?mN%%;w1HntALAkV~pTfBOEJhExL; z?h=XGK3g4;ZxzmbRw$39qX*)!$11IM_eISFU1^wmWjtLpg#2~khU`#vWz5#|=Vxl> zoLUIWy{E$BsnAK4JSd_INKUFpjjbWWnQ-K=>Q%o>Urb^QT^f{*{)y?!h&F95f3-uO z6INEVHJ8<-J07}jc=DC@f?r>EYFJBbVh#oNmg95>j&}!3DNrS5n*5Iy 0k UGcc8a>Nh8) zo#t44ObmAVhgev&7DywP%AYjuFkN>zDwcD3 Og?8Y~03X}3QNEQD2+ViJ`Z6zPXToEByBq2p8`jQc)!C)Z{ zZyItmZsx+Vz>1mOG`BRh`SsyreZwdr=Stc3yK^=64bneeehv a#ZI6bA@tgH;@VR{;pII*UQ9|u%_|CbyB0_Xmi9yW~zP~{4 z%l1s$8^V$Y-01u9C+&TH1UnvzxT`Xd>ZDMzwDk;}+9VWqGj6j2P~b##?BP-A3K_h+ zie6mW&D?3hS{4|TO2hS)`+Bxa4!%HzbrZBJm^>Fpd*OsHBv5p?!p^Ifj#!7io?|>+ z9m5|EKn^jEgWsk~^W0#_fsRVi%GN>6@zGC3l0X7i>kzzsQgQq2{fcWvW^B^^o9etK zL)A1lzG0`{LX^{j(oRVldTg*-3u>yLy6iZ-6haiwo!peLzag>?l)$^Mzx7+aXjh{` zP_QD_e;A1AsXyJrhio?JS|xith^zJr)HlnAs}L%~`$x`Mz#bqfJ(cVs++xa1L-` z^u&yN`S|&}=t4UJ$2p@fxQH5rwVpS!NJ1bc&CzgHrJkD!$A37jI%8m)&-h}SDCs({ z7hT=yO8Ul)oWhGK{+a8(I(s=^JN;-F{tHBNtS{40ieCr=+PR{NlbDf;uo+TZP-Dsp zd0Z~P0dQm0-zv(%6bI7Gvv>yNLhGC_xgX|!A{R});_Z`2#{QJCBw}q6Xs!{iO4tRj zSf4-s+8Wn-px}KUK3kpc^f=LU5+W2-q|gTsx|&%m8C7g&$a60eYEpB@KWaI`|G-{i zcxj}jeOEpq@0g|QpA}l*kB`o*^OCkC>`EYESD9Dm&Rg4(&|{xQ?r4B`d@i0^wCd&q z9pilP2?Ynxrwd7+WQ~>hZcYt(@l4WK?_c`6K?k5Jxb|yZ*v31KiH%#51K?3w%ueT+ zJ#up#f?*irsNEvM+S_jaC))#jlYqy+o(g6U3~uwp _1EgWFsJh+J)7NR=y$QB$F|CHZsd)g97B zfi=c^YZox5qWOO3w=KJUaYl(MNAIu!$d55I9xi{#K{TrQNBd92{jw+T>7cAA;V7rv zd!ciG0R!kPW$+Pby1wy;C_@BhSifu(hz3^xwsMMRB$6IXB==k^6|x6zcSKj8cEfI8 zBPQyt_!R|wA18-On`}=#@#0y<09`u;E9R}Gg@zJV`SdnhnU3vA9iQAJ@0Y?iM51CO z2W;%i$geNWwR9KNV+N`_?|py+8((a~b89~;#)g>3T1ruS8p^!8U%MpFBY-zfV;@}u zEQjnrD1+?O<-lF)AvQJ%rtcD$e6w77SD-wFC);jAxbbflZUDH^GA!g9{V$MbTrjFL z!zR5GA34}k#!CXl0!ImBBw)9Y`{73DtMGpN+UGoB;7v;JREWOURhtUw?@l|X9GWGA zlw-sjtrRrTHlFkKv3)b GRw7x_*DauD#iK9iET-elRzf3i(EQ#VA&Nqk%j=?!tD+EL+YST)&5&l$CKX<;ZSq zT^jH}cz|B@~ioZ)w zg5+wLsdnNnjR0w0sLFh}c!{WzoHLN{N$6yX%%qJPTDhTedHQni!(Nj$oOja0J4p|7 z^9Z={-#0yP<>9s^&IO))=w01QfA%6|CCzr1-=VO<2KoB=ZT`}Hn_?hTzbJIJbTKAD zQXN@$!aL`ua>{=D7L&%o(aa|DJ0gdxBwD|?%Pa&Q8&!tbHj8WMSiCF|o!}@FoVrU% z6sOeVNT{DzFTpOEGJdtU+vK&nfqon_RyZdjuisEI0u7wr-Vtv4bVb{!Ig8a?tR=K? zN~#>mhGKsJvCflBk7@eN#?CsLzr|qBamZ~Cn|M4!@TqNUeD4*-u(V?7@BDqpIOr4L z)3(DfLFe !Xi9ztwN?a)zIkS`nwTwMAwRAqCX&(4C|H&_jrc;WZ GLc@b9GE#uil!@Ch~jsXQQY4Rh0Yf?hp|kK@$9+U94ra z+L(_S@nCo28nIE~&2x0Oa;gh@_&^+GSTs3Qp^>8Qe*4;u*G_UXXV?hCfh@eEq%Iaf z8M?z9K)A_*tn*8`?1fBukBvoBgiFM0Ja_sdmL4HCLzyXHC+$)zqxQS$Pn&DopNmRK zH|wuEwb!wL5s<%f5lUM}Eh_*x^Sjq*W{rVHzuWDUs&8J|Z@+d3$*m?2=~`#R{mI$Y znz1!p3pDm$ymQbWvZ}`Rzd+y^TamL d7|RILF)@0 z%kXbu8`ZL01)uDwPL&97kZ2y_q+9Sf-w882CSP{638M445ur8^JQ@&0xDh!IZ2p%= zuoM8;VY6R^9dSV@`AY?EMfe)XXeL;VNL$b#RQzQ`@T-}QV=_#AjF{sK3orxk&AGg4 z1af(AA5#;|C)0?d478mu4r|CB^EukWPbSlD0dj^MP)Q~lC!r*a;I#Swj6op>po0dz zapO};_`ys#2-Q6Pw&+=a(Fxgc)?)8E*ZlFl>M55m>sHwnd)3MxdEy1&>Vgv729Yf* zeey*))bWdjrjS*#o7uZjk@PJ)7FKVBpakg!VTDiWLsD?l6eeSLwirNe8G3WkTQyR8 z#iZ?J?6JAUI0;#hfK`7U+U;ek!bxLC*SN>!ktAXA R1o>r=`&&%ALOz5 z4BW6y%zm)Yu~snHLJWUc@yN qzmb{Q`JIQ--o$fsos#zZ&x0C@31fR zmzJJTT#oAw)w;S=UO5mDhpMdr-Os0FD^yuhwhS0hi+gZazY{dPD0I0w0nnm*U-%CQ z@piC0nocpTALyLL7m5Ckr$;CeAG(ib;ZHNLIaNi=R7WJp??JO^x+YTaFWMYzcDEM~ z&10ptdP8c9zBV@1sB^XjT|5`L-&)sk|NT*>5li!iZOsdD9Q0N5#(ZxJvAUuXi~NPM zln=<_72$di5J~bymcglv8C=->w>GMxKSfnj&^1<8sKu#}U5fPMv;)<@IxY(#ljSFsMIIW-7?d z?IPTe!-i#TB65SbSEG(6(>Sze=v^?Q3T=bAo7yAmnG{qg8&|Mk3V>9u$h8Sp0~}57 z?x`IsPd}XAZMXg%^(Wid)VoIDOr6DPUbuh<^<%U+Aq0;wGqI!Ob0qtc?C~Mn!)> z>ri|aOOg$Eb}_#iMOv1^e?Rwc^-{DOtX2tOM;rw`PYF#ux9B(|n`b0hTcwFfV6?VG zw~RNN|7^94;+qW8Iz7Jbux|Wh4J@^Ojc!@lI476fwgwK6eQLQjmKJi(*<`0>x`^lf z_6f-}H0QuEbFkIyyl~Ev1-Z~@a-J)~_$apN0X}!9MW}WgKqJ5=sqZ&&5uzeU7A^Md z<|}k-BUygbKP`p^P0b{3zRtb*d3Dg|)evs#AbkyDU}*Yh&=KcOdCsupHaQOzb5-aG zJ33^j@ECb-O4auMuz^@M$K1QPaX7PU7@ph@c)R9ey9r(y@~#70HAuwE{;=w18?^lS zEb5BMIlFmg204Dqkzc|HhIlGMpt7WF2m9#c0?3{HN`XRn>KK6hQ9!G<@4-sy2-$$N zABVcc{|Csu*&RPU^i#lBT;uW$0~~WBSFgHsv5?p`B(`NA>bjAtPa%r_t+O7@UvRhH zXXisD#?#xPe~N{3b^B@0PI|jh7As<#oCeNB`|~Y;w8R#^wYT33xq7MQu)HnzcQ~*8 zJZlJ@Qa^tBt!1~oRJIAne7MA*quuj9y3tGJ50jC7!hhhOb&P}i6W?hmigBZhIZ{ne zZ1N_&oUu}IAP|&{OnR=CX;fZkS1d9BlLv~
kxj%22{=I zS@qUBdtQANJOWtOS9zo>w_Vp76P`3?QBghC^>;dX!F3KEVlyU~EV~)plCWYRHP2{# zmK$8uRRnna6igUgnwch67G*&DR=Hb2wW?Tq*MEyzY5r=dAm(4_ZFC+?sTtvfYqb!W zMejE3a*wjs5Cps@HbZcZ=cCl5)hdDf%4>)AK^( u3{0QC(4u(;H~SH`c(np+N(6>^>;;q48L0S=?AzW zM`Rr>*2(h4<6D*r>K&$$AA; RG9^Km3})U z$-t8JSc7d!e1~;(@WhXh`@F7ac8Xp0f+@S;P9}*?rQ=`ZuH9&NAhJFWbW0oxFTVwH zH$ztJ3PVIi=qaqW)3m$o0Pi6kf7-PMc(&iPkboZ(5$~l3pHZ|*Jy%k|qcb_+#h|H$ z|Li*sbvO2?3tDh}qB?Rkdj? wMrRg&WV7iUu$__iiOb)FXh$MSk?#lTb_irdq>Wj*o>@CbpKr4Tuu{a*Kj2#uhn9 z_q;)=3ev;es7|mnt+tjhrL<)VxMVlp!fQuutZDMX>vkubCzEen+uOqp_m(%I-G{VJ zriq #u65@r|Do`Ml09(f)i!t7|) z`fj_s+LIBe*)(k@L$rlj5h6x6q;>UGi|BndJYtH;r{l#~Fo?7PuP5u6EH&i}1Oy|L z>zIb)K9Sb^s 78pZ)TYF_4w&9dA>7 zXOqdm4eJ83qA^U2AoYLX8&HM}QvbTk3_A#M{f`n%VP*?4{}Y5@SidkWH3@9s$wf8+ z8M5iqbxbN=bLV0=1sRr~3*l}8rM=B!{e;Q!r~nr>X>vF4)b%y()}0VCZ!OWA`+b zzjJD7E&X?jUBZv1Wo5RzrAlIm&{`2)**JVkI0eMglQwOh6!PV|z$K@vU&V9M=v)so zSm!<`8OMg-Jkfu7d3TI9y!|R>CF-wyaa0%<&OEhU9f z?b~8~S*h=#Gqy7RRrxg^S-{qx8^>5AwzzEL;n^yHV+trmFu6>uDBWP*kBkB!IGJWQ zfe484qPIt-yweZZt4Zvr4%gFs{g=*OrV0s(h`sl-SL6eX=a;257KvK5f36@xm&uk# z$+V;pbyV0Rbr#bXs?<*K6Uz2~K+gyGsg@_BUjA1+(*9;X6XV-ei2Dz~<~_Om>wds4 zj(iLLH?Zi%`>W5UzKQDRWyMF*4~1K?q|~B1|9omjzv@bs;EC$8SNQb%Afsaj}Mq z8a%cP`8=fFZFRvrTT@KgCVdH$=9BoN!z7R6S 5a3a6D3ojSgOZH>5F9uD4CX$evKZKVv0fXRByH1#VehuAxf<6FQMO<7o74Q(?_I4 z@YH2ijXw9lD5!O9*^7MuU*yf>3Q*Y%CEyhjpE_-5dnrQi5H80EE;XV-Ws;f`S%fMk z;6$FXJwFADo%O9^aGJ fY{8`hT<2vDyY9p>XI~Q)A+yoB#s|V(9-*%f;$LzP*bt^Tn0Mxvi zXCm2jN_U8ily7gGuBAmSK|KB!$r^C_trwIk (Yr zt$mGzKegt2wHI?r*mHO6E1U4PH^+i^xQrRa!nA=uw;Hx1wqGCq@}dsJWGiofJrH|= z3-6Gsu{pipF&O4XDXWV4aOHDVYLuUsja&yU5vRpNh3D+f%!`O0a%+moT$!wm#{TW( zs*0=c>3cDv!>ZD$&m{^8fB&=HGpxO2yr4qA$ZUvxYI>>NH8ozi-o4s5knmkB^me#P zD_iuH@Qg&Kvc=u@GryuY&D*=Vn5zLJu6@x!_F5iuVYWJHnhL$SEnov;7{wcFqE|S? zuW?WJw}(11g&gc9h|39EcJ;PpzSw&L)@}pki-*TXN=_Pu*J5fLGsO7)5&EpxrQDXW zyY5;uj=IUmr_w)~0y%=;+NC5_GGDpKRw FCjm`%3`z_ z7d_?VSbr4~2A@UkV84A(gT7iY3Y7@@LL7sFI5mD}+ahEiP;Qx>-&D$D(tYy2XT4vi z)B_j5e-7bM &(#k-0{0Txq>`1*fL#IW;}R`z)y19C1xIY?@@jq*{McYKVf<{|qw%6|zq zA WsIQz4cSPD#e}d7Um2;bTiUnwcPo3HU2<&YAwr +|Icr;A3bYhy3k>Tb=S zJk!Q7bhKN#GGFsV!t^(XXTiBbtO)BtQc{SWs4+rbf7JnT{C*3tFO zFGn;L>TMS+SxFkretfI-)m=NTu#n9oxt?D`&WjT-HjRv8_uJi4Q%itCM4Cw@fUWpK z25bZ5THCm5b$3i=ip?JU&W63s*U2kT>FzF2+0@^1IGAxKf4uonXR55x3=! oUhDM{Sd`YFf9#e8rXXZehbd63Go0VM5PV6pM$Z;{ zy j8U7YQqxCh${3`xTH6jUq0HHc7X8ECEX5BEHJb?vYH#M3 z-%5pYFO0O2g9o?QDG`U+J!AQqJt_GvXz48twSONPgT5+oF!Rq!y9WFt(m9*BMe3el z_|G@PUGK!CZtq>#A$HcVTrGp3*Ty7_s8jJaR0Af)ppN8w(SpbljKri*y5@+NBk$hU z17}jvK+;;3=}w1V&XknMPXPO~JIn_;rJrUYadD+m7WWJ~pIar~|$Q^gqp*sh`l8 zd~AbiBQmBiOwoOg7pv+s%S7#+4`XTpb6i%Z%)y(Q7miOhMb4VogcbSfskb&>6vrKp z^?j p2#D-y4&_hwXnfp7Q;^NC$58Ud`U0zc@ z`-_duwYRIYJ^1pD$=v|g(INtDjgTo>Xk=}B72fQ^U^$X$G=0*`o56|T2VcB#o@(0g zH@_EOb7^#TC*gVu50imn4C3wakQ-V*Y9CC&K1D*ez2l&~9OM_jbh2d6oj#4Sct&vj zCeb!z_?;ZQwHqq8xvcEAg+5pD`1O-XrEiiR_$R?!h)tZj_|UoV_kAmJo~~xfa?IsW zPSJUymj)sp_aZ+6wLZZ06h^FY!`IyJC{82{G5&llXO41+ca;gLO4E}F@lmeG(5?wV zJCO(6QuL|&IhB+MJjg69?g|pOJD=e|k5+u8hoOn+%X~6BpI!tAuvHQ!Xe}0x!O*3) z@ch> qn*#`z zkJ*h 3prYwr7PX+n zEejxx|A?f--dmkutZ|rPD2)-}zw!R6v*!z=vnP$F>J+CB9LBu;#s=~oJaH4G_!+DHy7@UB3^HYP{&oxk;I*ojy+!53bq`^uU+QuP z2Y4V411HU}sOj16q7)|TfFkuRcJf1xuhov{dtWG2Y$VU;xY>cLO><0E*!CsR?_L=Z zG&@hrS)C#TwI^zViVX@{@@_gN-e_Hp WNS_Xlb`QF~t zZnhKBhfb|qYK+4VvM8ME#OOu1CFaC~8|uccerK}&2@ei_b~Ha5cp!AeXd5X8cJhho zH*; 6oc$U;Byd65_xsla`&H^F zzy17i2+l<9rSsWI<}Ev6;q)W ?NI*Tdp=S(Z>rFuYQb71Y9)~eM-pSWaG+8 ziIO|FtuV)X&DI$wT^Nw2j3~5VDE^yMzEFH*Oj=yJx{THPbWTqXF9uWjuwK}Voo$YF zoDZ!*=jPo1O1hKlP{XRC)~o_(9c*EEuFM^O3+Wt#U|H9(KfEQNocCy@*2EL}5Oc4v z>Zaw*Ig=OIPr46vB2iC7zlB`@GMw^%)#Bbc4;kGXJ7dB7vM43W|K*>zj%RQ$Ebm>^ z;k0Czdu&Xwuievce-HOOeaf$x_(hvoJ?^As+ScP7_4DJI6jP;GoHWI7GFq(lgCzL$ zS-Lwz5Mc!0?D&p#E~z-=+o@1RS-9}vgLFcxqgHHPsB(4~KjZ~v<>^n(y(LzI?)RqW zQHK>dN{D~L*-uJsT%Kvln8n|Ei3jU{%h_3COebBmfwzgA33r}M#58;MUs=!8A3)x4 z?mTo*yw2r?R+oFUpCX0+%GdBZnL{XdI$Sw}Lm+B#Ko_7>vRh@mzKq>@6~h;nhrlWX z27UP|EEu|KeixK3f9db^O~#!|Uifi&4G}`x@@Vx?;HlG_Y{Fp{TVEUbR$yxfeA@O8 zt@sKX;+GB0Fx<~BcDm*2q^L^$2VCT^mgf0BZFUk*)=jq){j=jRUj*v{OBGMBKF`Gm z;VcJ0g*aSH)ASQ|z7iQ1VYEdjcM=O6Ka$6ui_06Wzt`A15;C+)aSW^%=<}|cPuOzJ zji%$->oDFHOH%tw8Ln&S6Mxi*Po9vKL@)NcK>;+BIpH35YYpyO-v(H(jyABW0t7IP z=@BAUpD2ju(f7NdS7c?MEGb}ZX!|Bt>)*B-pa=g&x`PMBYpAUgd1R=z0xSXNb9haa zTm%O{`u QV~PObG(cZ z{qjv{0}r==j1qZP()gEG9j0CRt#eRH8KoWj4|pRTas8$^qYZXfWxY!iPrnIF#`=*h z_x9eCiyF%L1`qAhm6t!!2~>Q=;S|WRg*BuogPqN<->S?M%EHuaQ2q%yGLvsxRF1VD zO)B7#(MAnr+O5l7mS+*tQC21NvL3|gK0MzEk|{LEkMmlEkSrjDys2#2Lgipr3Gvt$ z4Z>OZVT1%tA!fi0c6fGV=9o}sP#*1k_8@;Lgz}hCjT%JbI^KrvooTaDQ$CziQGmKl z!?PP^MTyiicv~b9oZTGAN%$c3=W;rLyZ=112Cx`+^T4pBUdfT=1Ef&LS4hai527rE z$+7&o=_w*2jSDH+=s5g`$1Z$V*F)^7ke9u@&s4v+-d;EfMX3am8WuYZi2H|hQMPT= z`!zhw*B5&c9@mr5Y5H&{%T$!unSz|>zWg)f-u$z+B#SnIR6K{bQkcID-hs;pYd5Mm zP2OrX3$x5_{GW#u&uI*t9%Ke0n5bv-D<((5wA5~6 Jxn$LlrNqT~Up2xu>=@w-yv0^%H7gy{}eha$+{775LlmG=s#&hWbS2N62B$7NS8G zpTD}i002F3Z{PZ(2kFQf^IoehLhrS@>IZw`e12qWo77)>UAr5H9Q3)pCzlNf?Cn$^ zJnRX@t`{W>_$Isr_!k=gIjqHi9%mu42KM)xHWcokq=xvuiEgw4C}&XWQoL>r^MXhL z=s#F9p5ti}wyWWX*nOF@+l2#}hI-kb?Hk)}e6h!kHUGsn&9{#Whz?yR7Gtus=6k|t zU-)6UuKEJdBA*qOt&W{&9E@L1=CHD?s8SXmNFI+T3*^NUH1ac#TWz>Cdq%SoiC^4s zvva-YKBMTW9Im5ytRDxgJ5-JoksYu0`~lP_vUj}@#7GM1m)!}UqdG=4JZIB8{k)m* z((pR&kYlFXkSC1jHDkJ1hs4MBW#$bp;2v#nr_NX!@{er`=aqd5K6Ln}jcor)t~nw| zeY+_vKy#33h5}=+j<(>&Zo8lJRqxYTDiF^gqdlpa+@DNq*acM&?ee8%6^J?2vgUX! zl0D6oHSgXj|A@G5C2v0it~96H?|H#1x(`n7>G^(G8vRolPCgS@FH|gu+QeWPn1}YQ z{V~oqxJZ7~w ew-w9%-lkKO2ym@Y6+ZMvf zZfDp@)T-ceM?{>=u)N_>G1UAtO{#9TsFta&_1uQ3^20Cfwni|bfWKW!`F!AlQoC3@ z7|oQ5$^xo}fCNt$our2lK*37QKv}a2a; C5?CgoVeOvY+ag>U0 z@F 9=7dAM$!=v)3Y$fJcskd;82rQXU(a5wjnW&I~dc9J#Xa M)^lL$}44$7=VSYX^ z6z#_^L6@s7MUT+q5AP)I@9yAYF6PDIWcuG{HC*?r5Sa`_NhDpeCr7@1*d-z7Yr^FO zWn-FMcKzue*^FW(m_k?x3qtJSO`nGR8He5rt3N)Vq=Y8jN1J&qxG-@$b}9=IE_~pf z#o0bf1rt4Fotehe{)P%@U-)dk@PP7b5LBzsk9=-C=q^YacwDVzyD-W5^!C{kV*Gu* z?!TN$hx`70cou8Tl_xJI%T0wJv_{b}pqeyrQcSbE;S?euYb4=R^rS&$sq!#EdJE;$ z``+_DTo;NjIiV4(yl&55{u9*XNh;!Ky9!_#e6d1157?V17)DWK$YhPOo-Kr89} AxsA^wmh7;3S7{-#lAq1rum91m@O_*xVonOsls} z&=| 6X)?%muIm#MhUJe0gwp>WMI~ zs(FfPcQL6zn(C^R0G`8;r&JLDs%2fLVCWkD>f`_f`~JNR%TD=dQ7$@=!CEuRcwd#} zn<5eTwSfll48i~ermv|U&$O#)UFQ$v(a(zF{}5$xw_BYObP(1;e*BR0fd&8f!&yU7 zu&K;_OK#_|^T3eU?`-uqz*vzGTZA`URRA#ZD1hU*%7aN^ELT4Udk6Uc_;eKI#Pa$k z#eKNs;DzT+Df_YP3enKH{W^cBkwY&)v#5-Vq81_#)X}ETGxB>(02910gl%eyDuw4X zGCrDG13Z(^fJ8FGzEIdA_u>r=NXqg`kgvofhp0$P {V1Utur+f_Du-jy16s+ZqgUvtI#%jo2nz%*S {0(h0yMruS4+ zAqO5JXt@nSN#TsX{?Bp%1bsF#764(G>LiRf0m=!v|D3szkeZ$z$vZ#B99;;3hI74a zlM6zo?Z9xE=FhDT*L@_1`^t#WSIhk755^+cAkC4M_; Vh4>Grr=SiT zaA4}+wg+ZGe*e|U%avsl(12?8FP`H0`DMHR7EN2DJ{j1^pH`knEW7_8k?pUKZ)>J_ zkuQOACk}1-09Rt(*jqq{g=cqcn1#>g_>meKaFXImlC^-Jn~2=Iw sQfuaWC73w?j;p3J8v k-J6h`VsP+p)ggS+`|-{va{O3KQx>9-|wo8J!h>)y9bs6qI1i z3+?Y;zF;Qwp?sz3ZHoqNU-D1d;F?@VnLxqrc=oHJbz6n*8|NM4A`?mWDC09$^KIIp z4KXKQ0p-%sScP!Q$ywaH #X}DxR z^LFG4liMYX 9~^R!CJGY7VjVH3= 4bEEl0aN~j?uHWr6&49-2H GcCGl5TI>wEh;Aa f f-FlJhV?Et% zm~LJau7A5Nw*Mri!RBU5#+JQkc_&yPkbFi5cK)G}v8G3gLQ|5q!(eC8hX0kttS(=v zE6jf%({axpw5H27kEKN(wV^)LX88( >;e%qZTc^sUa} zhq`Yo>uV=XhsMX-Y|xU!@lrZnjfQksa7LGWfkU_rm+YSL2oBd1;`Cxfm%SV3&Dz?c zuynU89%=8n-NxIitb1u %4bCgy`5~+*`#My35t?%U7OmT%$8(9_ z&YjCo;IUqN^$ULRRABpzo3Nkmvc4j79GwEDzWibvpv-ZC;eD2OubGPBF1T5W8m^I+ z>8&&rlIXnT8I%jUnXg|F* !o}DS1xy-UyXZ9>*w1@nL>%^WKao0UOOl|1) zPmiRC4`%{uiQw-Vr(Cq)pUm%d_M9KdxH3h<=AkEn8HR5xTHy`l$XILdj7hz%dSTHP zSD+}5`?a AM_EE&C#_?FS#r0dkDN6I99!JDkglLZ9Eibs|uJ6bMCjVs(=wsF0BD p$ zU@uu1t(%QJdCH_nIdV3f#X7W%5m5a*`nQdINq`7g{?hv!6K1D3tppH70H~>XIN(aJ zF^HZxHLF8yu={+%T|(Y+aA-g}VmU~N2QnM`1`e32FD5Vj~{Ki(@Nw&=@N^O&Xn?3&QJ$pSh>*8oh z6pMz^z)U{o8rUGG@RH$ts5Pz3{%YEYd@N`Fhuuu?}-FwO%^Lv!UTMk8cih;S&o)=>E7vdDgO@Tw6vc|o= zqkH-3jiOMCF!F;wVY>-ldo5ct$L8}iP#@|^S!9!4XN8Q<7h#cw?$&;oy8mL7bn_lb zwv)QX4t998*T3a? zU_W!k2%Hd~-8z3}?CU@18&=Oi$`zZWn?fsw^WMGJjkES!KjSRCk&XbrZg8Ulhht#1 zB($RUX{gzdRgvQd)C!@RB|t!F#8Y-x)T9>!KiMoVJNeI%k36p3hqxiJUqhq7##?m zDLkp*5jtO5!}+TkQQ3fR&~_+zz9x#%fF*1t1UqvR%5o-8uYM(2_&_4lfM6@30lr*O zQn-oQBG1O(epTnb&-Y^E*-JMxf3wTe!-5v`zfe}p{3J %I=NzBEM`{RpzqG_(w%zKwow3(S>esl00{yRBP%{u=F!iabu~d8fc;4#O<;i7 zoY-1~u&Iz#Y|1jlxez}omMzNd(xQCI=fudWqq(~B7`zBjCz%tV+!r|_@QP#wE;c^x zsafc0I0|#+je)4g)CM5}GcenRzK#dc^#lzt@1}_7-zg(5Nf%B+V1F Le2)_aD_`BkS#&A4uwCXP%R%T&)3wFAlFI-jJ%rj zJkPeBuedBq% $IknlUkSsA2pn01b^4?kqraT*W9%Nf^3u&*sUi) zsm2Jt9nABR0e&D)?r8D(7zcaK_^Pd#SgYnqpV(L#W$Ee2nlI{aoULg04n7)MC5Q>$ z-)$EQ5-O_A;=3s%uU-#gUdE^%kvjj^2mv@X&_TrE`}Dg|sYJRce=<+0juL+ZbH8@3 zjOibl6fvq|uK{-cS3<+#WgYQe8?{eXl3~X9SxiBM{iZc7{LMcY@TXt)t^nbmgF0}E zKLNv!;atUtd=_hvbvNP|dhhz&23b?cKHWs&WA+{$)M4~a)UY=|nm{tgBp|5;(pV}F zn)`m)_-aA}T~d{C@E>p#zxE-F=Hc<%s*>a2Sh}v^+uUYU_^)fSIuFxcZcM$rE M$?3M FQl;Wl} zm40N}b58U%CEA MZBC`=gWtz2@QR`+mi1o_CY=}9p(#fs zGk^mNGV1DNRwRWiWR#D+tu#stzo+G7X_0rLqD$lHn9I8HX%}Em%H67pdG0(a_TWeB z^Iy%FjB8)1WqvnrGMI tJD=xc3csuWOlIs+HS&ZxtrK*md2bQSZ0I%;HNRZ zB4u6eEQU{yY5IjM8eym0?nQgVfL;Adg1?fwU%+Kr1Q8C+bz<19$zD9Ht^EgCcIUzd z)yjyY^vwOjd+!WlcVGXyx^fzU6x*|2HC}zKWaxyLXX~0bCNEWsyIp@WCFUBXI^-`0 z`(D#|cdd7EF)n=f+|XEwBL~ON9yal3EWY#lZT&5a^gz&j)&mYvw(;<> CfE?lW+LjJki&Ha?JK;9@b*CCkhJwqW8kD$wIR)D03f~UyvJ;ps=>j z49_3G(TJ$+l6%N6XZPHYQ~h(u>CpB@?odYiGr=3Nvz-+I9F`I<@ddjLRNx+dZq=YY zm-`tbrFrz$?U$0=Hp+V5ok(jpOK6Gdm8|i=$0f4fu=9nns`HeN7cp_w>~Xi49Z*uK zR?NY4IY{Jg^%hMA&qDGBGrU @eibe|Q!#DV zD#yP{UFj~m4G9{FlxTD2Yy3CL$IA4AHKGQfrT+mx_FokDvm`eiqk6lKLeHI+RCM)- z9KXQZZaNMn%qH0Oy#0JM(sExp&mujE*X(JG0^bwJ{e;B098==^w?vKnO8dp3FaZEX z^&+4704}(Vt#v?#JtY>$9(Ngc>;`+6a;|@?@#B T`mOa2B)g>@Rt+`Xs_4=526t}(Qy6Kw`2>)g=@RFj&J{4 zGBDTWBE~Q7xVR?1uwc`AJ!#*a2ep&LO)0QejfNa-g<1rUSw3#}7u^pldmbPp`{&Ej zpiirla#DNbK}lA0tvpd~aNtx8i^;0;*Zqe6+o4Wg3CuJb&%<6R+m*6gc)*ig!kX5# zM?SpqhVZ+)wq6^Ib6M4}8M{}YZ!p0d+{=8B=8%Q*S}9+wx9^X72NrCYxq_*kseMDd z(|t9|ufHzoM S==wmQDzpG^)mK6 z-@RbS)ew7s{8Lv{FG{bv`CKp_C{CCV`OQJP>QTcfU^?Bv=xqk<@3;%K?@7PbvNmmF zo)fc} Oam@l)%@%a!@I-yWh zK*v(}Ip3s5j-%@bKHM?$1i_@|q?)2s$V*zYM1E;kkzKp;>mc)sPOa*@R-~QBkP`_N zV8)O^34eszEM>3f$s55GB}T~&e+SCb+?+I3)`9l7G_I r-iFrJ6zTL>IiZ+(EY+ZKXIhjftm z&(2zqfiz7~NK%EDdB3Gr!=k6byqsbR(f%jEiGTMNZ-jTB#B^tAO%)0 2G5`pqzq0nINMaS0r~H>d 2tX zchgMcwn(WuI%o -_*3u_{~QXLxvQ@=un8) &v1{TcHH{2>d7VjUU zc7_XPRlPNlrTL(N=As=os&g^c!9+A2i^6Ore=;9{1o`=dzn^HTO$k5Df#eE7f2Uoq z|Kz4eD>eJ{BL$8800qGkXL0#3^8Gv|4c}HF@HPIAMUYV)`Or~w*WA~mT6`I>?{j9E zM6nS@7{X!L%m|DOANZ`^aMxi|nQ1fp53sk2#tTRfW#}tT+4lE`zH=IRD~>g1vGD-M zk(391>^HhK`&XqOrst+Xw_D@(T8B?sk nn*cy`C4scFrm)o`$hH|LK#nOd!d?W1ddoR(8x#W$=zg8q_XCaHuY zDVdMd?`}w(#! nM4r~d>jPM3wiq>))kd4!GPvJr$LM0<*>i7EUwN26O!G)2 zJ#Tgxf9sZt&x8tB= R#&Ua3WLNZeamyAJWHI|3sl6)toLz>zl>YwV z^cV@yzN*4&+He&873@2$K@#N<1Z8^jO#4bc)NgiISNaJ{=Yk~PP7utRU>kGr_PMxe z2lU1tw5~8a*g}5^?H3BKkKUdDg7<5KAQy+s#J%16>x*33eCsI<*@Ir)^mIm@{-a{c z5x8(qlMCD1@%3*FU#W_7$8fXrxrU>~n-E(R3Pq1;t(&x9PbX&I{luqqrf=+e$U=Wu z1i!^Z+-K7i?pf;u#gH{V 4*Cxle_ zTnpzuu}j7+9oZ4uCriYN*@quFmN05}5)4ijY*==|dW(zFFKa;(nmwou(;*~-yy1!B zuG(sy&;Unw8Lz>`N7dL0M)k| *l_= zjQ!3f(+w|FUCMKR_@Jlgl2o@^tAIaV2t#OF>}`B=>2|)aX{nyKe%dl6z@bW )sf^idn4y>9 b$knC?0hAYM#RI5?)nejm`3R#-1|c|uBzlP`@FQLcOxaG z0{oRmdHw9Rw^vi6bZH#_?EDKdyl%q(14LwjF#i}*o1d8N06RWe`S_<*+o0gMvS}V! zMSp9KRx;k{$Dy% d#Z=e-y;aANChhkG{#i3?6r{^P4OgG-eB5n2aDrvRH z!)?{g^$MYaNYNemj3a4+IQsg@h)XT{rW!jRR%#8KYF*$a@0xI!bP3_aE~3nct((c5 zLlk4$X)20Rq&cvxRpq!_%Oo2Y=;$dRt$Uy0(5tiqOm9NIWjaAGMX9y5%PXvSu*>{Y zuSzLM1fH{JGOo481*@O;#lyb$ncSu`9BJNQt}48iow*iu6vXhbzs|sf$4(E+d{kno z8~0?&=2o~up1LS89O-*~mJx!6_FZLtso|zLxw0X6uQjnQ!q%on)s?V_*N1N=+9nJ> z`BcjO>_o-RGOg#%YyN`hU4*Nb?ULNk=MoRaeKtceiK0l6e{WS;_17IeY4rN!u%isI zVpH&0-aJEWtQaPVyY=?;c&{M_fTlVdnsv23he;t0V;UI1Gk!ka0=MwTkj|_*`@d3m zh1im%tfT*;Ltu-SO-`Qwc9r@dC$*NiB{e1AHhq;|+8?W3wPw7zV6*Z`ygp+3z*&k| zVl!e1yG7xD3fz}a#0~(67{<1ieMGP5eyNzv2l0{!h5DAA1akA`AG-}qU6_{c3r)du zvi*W$ ESiWEpoWZ6(LKqOTLUX^iZ?TIVqsZlbt&XJ0%f|UM?|rHaV-|=lai*BNK8+Qw zG;{fVGHKxC`b6gwTgTz9kn=v~ZD`~ByoGP8&Nao!4#hj=yxG(GrB3xK?qSsqT^NpX znTo#noHUPR>9S+Zg`1}s1gjopAo%Ebu;S2$P(&eEQB8{q%$bP*Y$aB}B__$#__G#d zky|uKhbTVoI ElO{n~G`V_vHYibrF3!;_R;)Ode=4m<#2r&Eg@(a1QdZ$=Jm})nGklzbXPn1a9 zjM*-kp( Z zG{HYx$?oP>z7qt{1ZxCre4wQ}b6u8ilqhlS2Ex(koU+h0*BxYB5yt2uRbpa^BQz_WspqPPXhGc4W*evHg*5PTzs#nM4k9 zx|W%5KpNGkB&GQfS7^rcEvgvCm1SIBD^riCj}~*Z|8el=hYATK6PrPK1m *mw^=e5BgHw|!zPL5QKXp!{feeoFUry~PF2F8==Hhe(w5#~{eH+*b$x~HJ;c}u zTBl*JA^b{e_I1B^ePH{)y5XHapFttNxNK3TxnO0MBiW~w3qG-PimvX^H?k91hTnd~ zPx)tb?~~G-awF8=czgdfJ@&>t=Z|~*RmX%y6X0ReM9rfel$Xo-L(87Pa&*9}1Dms` z`4cxT_51qgwbBDI)DMC%?jU;M5pm^3b+;}KX{r!dn?q3vf2W20GfrDl#$_jr`9;v5 z0^_Y>Y5bRrNZ6(aos~eST2KjAuhCvz7?*Y*)`}OiK;W*raoBA YnEJi&0=V_O?l25d)g=#K zY!a|dN&fNp5!^4DpKdV*%5cx`(KID{qbHtek|UB)tdnL~hzPF!9Cts|5nlgEM(4!n zPg1KBw`}I)m9i%7&cX@}aw>?jh*#&4*(;H~J8G7AwzQ$F$=e8rN xyq^$*l45ge4{js*j-hYz~O04N69Q?5Z` z>@T)EH@m#&d=JN_t|<286Ney_aR(V_mmZ7gtmAECM|1vOCE=**lA(5WN@Vz7K1Tux zXiArunbm6q0YK#tW{ 2B!1~f###v|dSHz`$DZH#+-7Z56X8wT z!IN-^Dc3i0JrBw>qbE9eHbTPbs)7nTFSXUyIEarWG9yv=1qbTJg(%x*)ID$I`aZ{7 z*P-Wsvb ~CY2+`Mr-0>NKTe@aCz1 a}fP9 KG;OJ=o@qAwK=Z#<8! zc~3?Qdug89L4KsZkMR!_s2c0Bee+9j`|yeNa^KU#Pw$%3lzfUxtr&H|lu5!))5`zq zZ94VoEY|z~%~egS<$_!^BCBnA=g7 #Y0Y9KFH$#FpJkyTl|gK@33p$vb2jgP8P|{a0E2qYTU^Exm4!*URw$ zF*;#BG56;sxr;M|{%GS$99l4)tdqp)6l|znNv}}7#P2nOOL@!jqRgGiO7Hvt% @Oa%dh1ehPsxs1p`} v@QmFBM@yS_vw9 q%VqAHKXajM-VLTSxA)V2k7K)jNFb7)PX$%`2M`u21^X~}{B z0^$@`bA5dtOJ-x(A+ci)jMir{!686ek-wHbggVrn<*>nPBT5CFR#`BvD9$fY!xj(k z&8rK83ohtqt89xz Too|#WC-3*m1R2Oi*kz;V zH(KVv69IL_=|I{PYFC1{BDE|BX1oNV^_0TCeriDt0ribFwfbrVzrYcAcIVod)0ggW zd9sLBOR3x}&f3(=O$$WZ%Mu@7+85zU?~GBb)iBo-xF?+#5kLK@S-=}}Q{snF)ZdvO z`uj1&3`Ih2G7;B7M}ZBe{{d+Et>sfbcRjy)#cSbCdPs1=tH9*ZxfS_~M&UW#FAa}C zwZgmB5SbDxNT(#9W;ZnGtXaw5yX})-_%G{q(_b9+U&`j&a~buzdG){(Ml~^JXy?8c zx(WWEE{F|=rwF8B8p8zel3S9+n0}%1Wu50x|NS6^qLl%d&GXS(nd#OzFt9^joQ8AA z7Y1LWS=5wEXIN=mF3`txtOX0HbYPMhFFBls`<*^~t*~Wy%U#=?>u6?@PB5@5ZnS6f zbI#hN3t{!kd3}zuazfe7>> -zIf@%Fw4 z&YY}!J^prccOK*eQ$kaYekHT>^KA)XS_zDgN-k(4TLaevYd6 T?iR$!T%Il#@d74aykyE54a|9bNZ{ zHpx9|5OUvaBJb`#l0~ z46&cL=gCXBGlQ;baa>|>+=E;kqnTSpP=5)*t&FQpRzYY7|A#}!rAP;B9mBzP@&Ds9 zf^hNbL9jJ0|49M>>s^+TgQf@j-Rjpwl|EHc&EA^q0$*ts%*hX`WxB?>+ncWA(p%X) z03?%fF+c`G4azG8!gFPH4SORr0v7QQ)mu1*Go0{;R&w>|RLY|a%y+_}j)Bb_e%EvN zTVnYSpx3N9>7&Z=XO*)L3&fmlJupuyC1VYN9@DKy7Cqgk43@VE=J-kUy3;gFr%oEn z*uKP4Opf17;jOR~i|DonP-Ek7PQ&|9*VKe1_vX}Cv-aHZVY1s+r&rxy7V(ugsr+|r z`~H|!Bo6#!GXB)K{VA}KhR09Nh!>~^m@l>mf4MVn$*Jzq;rJyn91#f%Ymxr>kraW0 z7<7(KbA^sM`KY5mARL6}ZkfJ?d?+0xxJ)O=590yN*rs;R7JZPfCFm0SbEM<7R%KBY zKwZC>)ngk=IeeI(H>05>@Z$PFuL|^-(b;}{L|Bxlm2fDrv#^?++3ExIE@k5Ayutsu z;MWu|`2?%im$Ui?JA3{Q4sNIDKgNgPqG_!9L`&k+{u%m;+{bCtUw!lb(gR$crty(A z8-*-*EIvbivZkv=*XH>YOLT>Nz})va-F%X)zkYvYum*hGSC%)T!8K0wi(2xEYOB3- zWwlwhpTvBc8lK1WA{A3q?qf`Pa*^;;c8>ZC)hXTC=#|S_s&LQOR2N?)_G31OJ*PCp zO-s*GIKk^uVG0+Vx*mT*BQ3b{!>D%jOp84zs C4k#H*a(uVd>>G^vJN7d);|usovq)hpcw9dpiC5@O~Bhv zjpwM96%yR;WeKHd8MOS2gcW}a^?ZX ?7wd=q0W zuV3CU3it8}W&o(1EZAjdZz`Uq&5H9cx$K4Lurt;`L _74(oE}$@qCY`Dq=$TAe^avbEdNd|R+ z+^XvhUVodLMZ|S+w?DQ@)$cr7w3-2DF u?u~=04qUspAyUNV@5` zT(pOWUG^_3&aUH%($TWiZ8B@UW6&Fv9^he~xT^~e`B1Qrmt^p>Tm*vmmxPieoq~*p z{`7yzLrUsd@T!}vNsuoMDzY`bu@T%NsUm36MO=ffQ5JcKoDT^&(8j(wc{>~jtb_>3 z>gkydz&(mYcnqT>1t!-|m`Y;24<(Omxqtr7(%7mt@}^jtNu;&Tws%b Wz#;5Ut%5~9NY-r&&ljU;D@oWRr;iru&e4K4Tw=`$ zlsLYBMiPR14`;X6CB&8d6t2oG2{NBd#-aFViSB>js@qZj2WZ%aNFm2m*K-Pcz7sju zIl@UOlKcp#=k);Pg}_kxJw|(Af_pkQy8g(_HGAkh!+@$SA&~M+&6x>)e2x}q$UmCg zl1cD~OmA$MOD>kTeGO|`W0GQlQwpA;r5+=(atd1YW`^)0&L39gab$$|H8+V&?g938 zFw@D#sea|mUOi-cpicElfDdfauua6XYFqF-pye#F=*MQzC5unOVQ3M8fXM`4ijO)i zQ{b&)QRm=au$<2(3)LucAEHg;Xd%%)-jF!mv-VnE(i-z@eqmO|GafCRb68!)KhHD< z@tH_nDx`f@`Lin98e=2bcA^8mfvORooj2~#8b`9nZ 8 z_ )p|ZHkiQslg8_mylkvGPR9ai!4(*Y>fpaDa-|_Yp++SBQ@gQ zTaOY@>bz#*ZESfU%%z+jh^MN TkRu6%_>$WQq*7suPVHft;AY-~D;9 zEghoRE(Lx5ee#z@G*XgZ9X}>PbiEG&rJ4AZ2^?Kl%w|>P&3$0wPjv_)(7bx@#}wCW zfqMy_S(sRNEVhHZy@7E)j6Zy`C(svLBNuQ@C2%nE!tPCwi~sn4fJ3u*j_VSdr*c7S zh~=pP2l=C4{&ht;Remy{+#;gGz>=7k>D~};CU ;qR)pGIHg1yZ|5<<@KpdZO z&tnAPJ&Tx6-F~#bJ`V&)*&fyX =mKf6TvLr>OZyrw1!&|4i||5 tI>gZp7VSVf{*bGI4VKW!V~cLOk2u z+6-{?BH87y#*6#WFEMO)T^?N|wx4suxkL@PlW&7EgE 4C1d(H=LjL zi=-*b#h-*r%-jgBtu2R%mgy#Q*3r1rDWF4DoauC!wG?8w%(p-q^k?>g{Uo&{1-HQ! z@k~zAx=rw7U?+IRcQ)_fDQ!Tf;Ko%v$HbXP@h<1H6#u(7;8+4M-oou1A0P`I6N?cR zerNloia4TY*Uy6Ff{|n=R7kZfAGg09-9U$K(Qsavb?@49sQ-iYENa=eF#to?>vSto z)w-di{8RKPt*mx9^O!}*GMD^~`y-iuLwXZXOKa}4M$5qnH!+R^xL_O1TU!L87@hAY z!laj+^)H48@a_v*fmIE#x(@FtZ>|P#2}!2w+69#L9y~xfH)=i-z8|EfNXK_??`-Bz z*1jg0A?kqyN< X}Woh+B=wH@`c9kOE1)N&LW!Fg;!dN_SxZp~>0pLNqAKSj1hG(ii~# z0620oEtn-FBXe`_sU_jVjkDi4mc8cN2s`NOtcWCnRT2brJ#|M7hyw=80JWeYnv`PP zX{roizGiU;3W6ZhNw-W5DzlW8_XnDUICqaC?I78wV-{W+>v#?~h6f}7a&mw%& wLxESWZnlAIdzlp%3J;fzGF)M`ly4fVERqRvy#-c+||MwN>1 zQ3GGKQxml6!4~7`ugl0>IRH3w4m-K_MnUnGqJ(M88?q *!dDcT@yu*?Jg2XM-t^vDg@?w8Q ?R1MzSv+~KxPyaPcV-8-f?9+Yn9@E{vUoJGPL)8wHuL`reWk*j z-#6RBb{BVwYQWxbdo9w*C<_B}Wlj(M{Q7i#VQz*B3DV)!?K|+MXMTqK}!S_`($A zSCP(MD3<({B#1XwQNqK$SFY;1CL`EYIxjD!9b#*a+=Z4kar=|jWkDlK^Ep&Bq3QIx z +j4!%(1i2 m;{r3rd-YUB5kFz=nQ_$I=lL9l#P+%Sp&t4@J}`v_ zOy$&ra`F1(Mwyq^;C5XX3ivBwjZKEZjF2y0OTop9E8dUXbo3>}KbHsvP2`C*NlcIo z0s)CD{y~3=R_bFsWjHWq(Oa
GRXscWqy7E%PP!*s$|zHxlR@Wca!w6R{a@*tnx+>UX{8&lN8+ zUW)L!ko4f~q!So9z#d