From ca72e65173b190b9b11daf41f0ed4a602089ff92 Mon Sep 17 00:00:00 2001 From: Kevin Conroy Date: Thu, 21 Feb 2019 02:34:44 -0500 Subject: [PATCH 1/2] Revert "Yummy, yummy ice cream" --- .github/ISSUE_TEMPLATE/--bug-report.md | 1 - .nvmrc | 2 +- .travis.yml | 5 +- CONTRIBUTING.md | 228 +- Makefile | 3 +- README.md | 99 +- app.js | 42 +- app.json | 189 +- bundle/index.js | 17 + .../maker-setup-images/action_search.jpg | Bin 30054 -> 0 bytes docs/plugins/maker-setup-images/blue_that.jpg | Bin 31462 -> 0 bytes .../maker-setup-images/config_vars_enable.jpg | Bin 22122 -> 0 bytes .../maker-setup-images/config_vars_maker.jpg | Bin 21710 -> 0 bytes docs/plugins/maker-setup-images/maker_key.jpg | Bin 29491 -> 0 bytes .../notification_message.jpg | Bin 54141 -> 0 bytes .../maker-setup-images/service_search.jpg | Bin 36433 -> 0 bytes .../service_settings_search.jpg | Bin 33595 -> 0 bytes .../maker-setup-images/set_trigger.jpg | Bin 75137 -> 0 bytes .../maker-setup-images/webhooks_settings.jpg | Bin 29102 -> 0 bytes docs/plugins/maker-setup.md | 107 - env.js | 27 +- lib/admin_plugins/cleanentriesdb.js | 80 - lib/admin_plugins/cleanstatusdb.js | 64 - lib/admin_plugins/cleantreatmentsdb.js | 81 - lib/admin_plugins/index.js | 4 +- lib/api/devicestatus/index.js | 49 +- lib/api/entries/index.js | 1235 ++- lib/api/profile/index.js | 1 + lib/api/treatments/index.js | 51 +- lib/authorization/storage.js | 5 - lib/client/index.js | 9 +- lib/client/renderer.js | 5 +- lib/data/dataloader.js | 6 +- lib/hashauth.js | 2 +- lib/language.js | 1768 +--- {docs => lib}/plugins/alexa-plugin.md | 22 - lib/plugins/careportal.js | 4 - lib/plugins/maker-setup.md | 88 + lib/plugins/rawbg.js | 14 +- lib/plugins/xdrip-js.js | 2 +- lib/report_plugins/daytoday.js | 127 - lib/report_plugins/glucosedistribution.js | 6 +- lib/report_plugins/index.js | 2 - lib/report_plugins/loopalyzer.js | 1267 --- lib/report_plugins/weektoweek.js | 333 - lib/server/activity.js | 8 +- lib/server/bootevent.js | 42 +- lib/server/devicestatus.js | 15 +- lib/server/entries.js | 10 +- lib/server/food.js | 8 +- lib/server/mqtt.js | 317 + lib/server/profile.js | 3 +- lib/server/treatments.js | 11 +- lib/server/websocket.js | 21 +- lib/settings.js | 11 +- lib/storage/mongo-storage.js | 3 +- npm-shrinkwrap.json | 7088 ++++++++++++----- package.json | 67 +- server.js | 9 + setup.sh | 4 +- static/colorbrewer/README.md | 8 - static/css/main.css | 12 - static/glyphs/css/fontello-embedded.css | 12 +- static/glyphs/css/fontello.css | 14 +- static/glyphs/demo.html | 63 +- static/glyphs/font/fontello.eot | Bin 11120 -> 11120 bytes static/glyphs/font/fontello.svg | 2 +- static/glyphs/font/fontello.ttf | Bin 10952 -> 10952 bytes static/glyphs/font/fontello.woff | Bin 6536 -> 6536 bytes static/glyphs/font/fontello.woff2 | Bin 5416 -> 5464 bytes static/profile/js/profileeditor.js | 16 +- static/report/js/loopalyzer.js | 52 - static/report/js/predictions.js | 40 - static/report/js/report.js | 23 +- swagger.json | 486 +- swagger.yaml | 352 +- tests/admintools.test.js | 40 +- tests/api.devicestatus.test.js | 97 - tests/api.entries.test.js | 114 +- tests/api.treatments.test.js | 55 - tests/env.test.js | 62 +- tests/mqtt.test.js | 182 + tests/pluginbase.test.js | 2 +- tests/reports.test.js | 54 - tests/settings.test.js | 3 - update.png | Bin 21868 -> 0 bytes views/bgclock.html | 8 +- views/index.html | 2 +- views/reportindex.html | 6 +- webpack.config.js | 192 +- 90 files changed, 7090 insertions(+), 8369 deletions(-) create mode 100644 bundle/index.js delete mode 100644 docs/plugins/maker-setup-images/action_search.jpg delete mode 100644 docs/plugins/maker-setup-images/blue_that.jpg delete mode 100644 docs/plugins/maker-setup-images/config_vars_enable.jpg delete mode 100644 docs/plugins/maker-setup-images/config_vars_maker.jpg delete mode 100644 docs/plugins/maker-setup-images/maker_key.jpg delete mode 100644 docs/plugins/maker-setup-images/notification_message.jpg delete mode 100644 docs/plugins/maker-setup-images/service_search.jpg delete mode 100644 docs/plugins/maker-setup-images/service_settings_search.jpg delete mode 100644 docs/plugins/maker-setup-images/set_trigger.jpg delete mode 100644 docs/plugins/maker-setup-images/webhooks_settings.jpg delete mode 100644 docs/plugins/maker-setup.md delete mode 100644 lib/admin_plugins/cleanentriesdb.js delete mode 100644 lib/admin_plugins/cleantreatmentsdb.js rename {docs => lib}/plugins/alexa-plugin.md (90%) create mode 100644 lib/plugins/maker-setup.md delete mode 100644 lib/report_plugins/loopalyzer.js delete mode 100644 lib/report_plugins/weektoweek.js create mode 100644 lib/server/mqtt.js delete mode 100644 static/report/js/loopalyzer.js delete mode 100644 static/report/js/predictions.js mode change 100755 => 100644 swagger.json mode change 100755 => 100644 swagger.yaml delete mode 100644 tests/api.devicestatus.test.js create mode 100644 tests/mqtt.test.js delete mode 100644 update.png diff --git a/.github/ISSUE_TEMPLATE/--bug-report.md b/.github/ISSUE_TEMPLATE/--bug-report.md index b0d61217880..45319eb87b5 100644 --- a/.github/ISSUE_TEMPLATE/--bug-report.md +++ b/.github/ISSUE_TEMPLATE/--bug-report.md @@ -1,7 +1,6 @@ --- name: "\U0001F41BBug report" about: Create a report to help us improve things -label: bug --- diff --git a/.nvmrc b/.nvmrc index c6b7980b681..ed13033b848 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -8.x +8.11.x diff --git a/.travis.yml b/.travis.yml index 421eae39990..d8ff4c865ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,9 @@ language: node_js +os: osx node_js: - - "10" - "8" -os: - - osx before_install: + - if [[ `npm --version` != "5.8.0" ]]; then npm install -g npm@latest; npm --version; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi # https://github.com/Homebrew/homebrew-core/issues/26358 - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew unlink python; fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e248b4f963..5be3a99d625 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,11 +11,6 @@ - [Comments and issues](#comments-and-issues) - [Co-ordination](#co-ordination) - [Other Dev Tips](#other-dev-tips) - - [List of Contributors](#list-of-contributors) - - [Core developers, contributing developers, coordinators and documentation writers](#core-developers-contributing-developers-coordinators-and-documentation-writers) - - [Plugin contributors](#plugin-contributors) - - [Translators](#translators) - - [List of all contributors](#list-of-all-contributors) @@ -41,25 +36,23 @@ [waffle]: https://waffle.io/nightscout/cgm-remote-monitor [progress-img]: https://badge.waffle.io/nightscout/cgm-remote-monitor.svg?label=in+progress&title=In+Progress -## Design & new features +## Design -If you intend to add a new feature, please allow the community to participate in the design process by creating an issue to discuss your design. For new features, the issue should describe what use cases the new feature intends to solve, or which existing use cases are being improved. - -Note Nighscout has a plugin architecture for adding new features. We expect most code for new features live inside a Plugin, so the code retains a clear separation of concerns. If the Plugin API doesn't implement all features you need to implement your feature, please discuss with us on adding those features to the API. Note new features should under almost no circumstances require changes to the existing plugins. +Participate in the design process by creating an issue to discuss your +design. ## Develop on `dev` -We develop on the `dev` branch. All new pull requests should be targeted to `dev`. The `master` branch is only used for distributing the latest version of the tested sources. - +We develop on the `dev` branch. You can get the dev branch checked out using `git checkout dev`. ## Style Guide -Some simple rules that will make it easier to maintain our codebase: +Some simple rules, that will make it easier to maintain our codebase: -* All indenting should use 2 space where possible (js, css, html, etc). -* Include a space before function parameters, such as: `function boom (name, callback) { }`, this makes searching for function calls easier. -* Name your callback functions, such as `boom('the name', function afterBoom ( result ) { }`. +* All indenting should use 2 space where possible (js, css, html, etc) +* A space before function parameters, such as: `function boom (name, callback) { }`, this makes searching for calls easier +* Name your callback functions, such as `boom('the name', function afterBoom ( result ) { }` * Don't include author names in the header of your files, if you need to give credit to someone else do it in the commit comment. * Use single quotes. * Use the comma first style, for example: @@ -72,217 +65,58 @@ Some simple rules that will make it easier to maintain our codebase: }; ``` -If in doubt, format your code with `js-beautify --indent-size 2 --comma-first --keep-array-indentation` - ## Create a prototype -<<<<<<< HEAD Fork cgm-remote-monitor and create a branch. You can create a branch using `git checkout -b wip/add-my-widget`. This creates a new branch called `wip/add-my-widget`. The `wip` -stands for work in progress and is a common prefix so that we know +stands for work in progress and is a common prefix so that when know what to expect when reviewing many branches. -======= -Fork cgm-remote-monitor and create a branch. You can create a branch using `git checkout -b wip/add-my-widget`. This creates a new branch called `wip/add-my-widget`. The `wip` stands for work in progress and is a common prefix so that when know what to expect when reviewing many branches. ->>>>>>> master ## Submit a pull request -When you are done working with your prototype, it can be tempting to post on popular channels such as Facebook. We encourage contributors to submit their code for review, debate, and release before announcing features on social media. - -This can be done by checking your code `git commit -avm 'my improvements are here'`, the branch you created back to your own fork. This will probably look something like `git push -u origin wip/add-my-widget`. - -Now that the commits are available on github, you can click on the compare buttons on your fork to create a pull request. Make sure to select [Nightscout's `dev` branch](https://github.com/nightscout/cgm-remote-monitor/tree/dev). - -We assume all new Pull Requests are at least smoke tested by the author and all code in the PR actually works. -<<<<<<< HEAD - -Please include a description of what the features do and rationalize why the changes are needed. - -If you add any new NPM module dependencies, you have to rationalize why there are needed - we prefer pull requests that reduce dependencies, not add them. +When you are done working with your prototype, it can be tempting to +post on popular channels such as Facebook. We encourage contributors +to submit their code for review, debate, and release before announcing +features on social media. -When adding new features that add confugration options, please ensure the `README` document is amended with information on the new configuration. - -## Bug fixing - -If you've fixed a bug, please consider adding a unit test to the `/tests` folder that reproduces the original bug without the change. -Try to identify the root cause of the issue and fix the issue. Pull requests that simply add null checks to hide issues are unlikely to be accepted. - -This can be done by committing your code `git commit -avm 'my -improvements are here'`, and pushing it to the branch you created on your own +This can be done by checking your code `git commit -avm 'my +improvements are here'`, the branch you created back to your own fork. This will probably look something like `git push -u origin wip/add-my-widget`. -======= - -Please include a description of what the features do and rationalize why the changes are needed. - -If you add any new NPM module dependencies, you have to rationalize why there are needed - we prefer pull requests that reduce dependencies, not add them. - -When adding new features that add confugration options, please ensure the `README` document is amended with information on the new configuration. - -## Bug fixing - -If you've fixed a bug, please consider adding a unit test to the `/tests` folder that reproduces the original bug without the change. -Try to identify the root cause of the issue and fix the issue. Pull requests that simply add null checks to hide issues are unlikely to be accepted. ->>>>>>> master - -Please include instructions how to test the changes. +Now that the commits are available on github, you can click on the +compare buttons on your fork to create a pull request. Make sure to +select [Nightscout's `dev` branch](https://github.com/nightscout/cgm-remote-monitor/tree/dev). ## Comments and issues -We encourage liberal use of the comments, including images where appropriate. +We encourage liberal use of the comments, including images where +appropriate. ## Co-ordination -Most cgm-remote-monitor hackers use github's ticketing system, along with Facebook cgm-in-the-cloud, and gitter. +Most cgm-remote-monitor hackers use github's ticketing system, along with Facebook cgm-in-the-cloud, and +gitter. -<<<<<<< HEAD -We use [git-flow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow), with `master` as our production, stable branch, and -`dev` is used to queue changes for upcoming releases. Everything else is +We use git-flow, with `master` as our production, stable branch, and +`dev` is used to queue up for upcoming releases. Everything else is done on branches, hopefully with names that indicate what to expect. Once `dev` has been reviewed and people feel it's time to release, we follow the git-flow release process, which creates a new tag and bumps -the version correctly. See [sem-ver](https://semver.org/) for versioning strategy. +the version correctly. See sem-ver for versioning strategy. -Every commit is tested by Travis CI. We encourage adding tests to +Every commit is tested by travis. We encourage adding tests to validate your design. We encourage discussing your use cases to help everyone get a better understanding of your design. -======= -We use git-flow, with `master` as our production, stable branch, and `dev` is used to queue up for upcoming releases. Everything else is done on branches, hopefully with names that indicate what to expect. - -Once `dev` has been reviewed and people feel it's time to release, we follow the git-flow release process, which creates a new tag and bumps the version correctly. See sem-ver for versioning strategy. - -Every commit is tested by travis. We encourage adding tests to validate your design. We encourage discussing your use cases to help everyone get a better understanding of your design. ->>>>>>> master ## Other Dev Tips * Join the [Gitter chat][gitter-url] -* Get a local dev environment setup if you haven't already. -* Try breaking up big features/improvements into small parts. It's much easier to accept small PR's. -* Create tests for your new code as well as the old code. We are aiming for a full test coverage. -* If you're going to be working in old code that needs lots of reformatting, consider doing it as a separate PR. -* If you can find others to help test your PR, it will help get them merged in sooner. +* Get a local dev environment setup if you haven't already +* Try breaking up big features/improvements into small parts. It's much easier to accept small PR's +* Create tests for your new code, and for the old code too. We are aiming for a full test coverage. +* If your going to be working in old code that needs lots of reformatting consider doing the clean as a separate PR. +* If you can find others to help test your PR is will help get them merged in sooner. -## List of Contributors - -We welcome new contributors. We do not only need core contributors. Regular or one time contributors are welcomed as well. -Also if you can't code, it's possible to contribute by improving the documentation or by translating Nightscout in your own language - -### Core developers, contributing developers, coordinators and documentation writers - -[@andrew-warrington]: https://github.com/andrew-warrington -[@apanasef]: https://github.com/apanasef -[@bewest]: https://github.com/bewest -[@danamlewis]: https://github.com/danamlewis -[@herzogmedia]: https://github.com/herzogmedia -[@jamieowendexcom ]: https://github.com/jamieowendexcom -[@jasoncalabrese]: https://github.com/jasoncalabrese -[@jizhongwen]: https://github.com/jizhongwen -[@jpcunningh]: https://github.com/jpcunningh -[@jweismann]: https://github.com/jweismann -[@komarserjio]: https://github.com/komarserjio -[@LuminaryXion]: https://github.com/LuminaryXion -[@mcdafydd]: https://github.com/mcdafydd -[@mdomox]: https://github.com/mdomox -[@MilosKozak]: https://github.com/MilosKozak -[@oteroos]: https://github.com/oteroos -[@PieterGit]: https://github.com/PieterGit -[@rarneson]: https://github.com/rarneson -[@rickfriele]: https://github.com/rickfriele -[@scottleibrand]: https://github.com/scottleibrand -[@sulkaharo]: https://github.com/sulkaharo -[@tynbendad]: https://github.com/tynbendad -[@unsoluble]: https://github.com/unsoluble -[@viderehh]: https://github.com/viderehh - -| Contribution area | List of contributors | -| ------------------------------------- | ---------------------------------- | -| Core developers: | [@jasoncalabrese] [@MilosKozak] [@PieterGit] [@sulkaharo] | -| Former Core developers: (not active): | [@bewest] | -| Contributing developers: | [@jpcunningh] [@scottleibrand] [@komarserjio] [@jweismann] | -| Release coordination 0.10.x: | [@PieterGit] [@sulkaharo] | -| Release coordination 0.11.x: | [@PieterGit] | -| Issue/Pull request coordination: | Please volunteer | -| Cleaning up git fork spam: | Please volunteer | -| Documentation writers: | [@andrew-warrington][@unsoluble] [@tynbendad] [@danamlewis] [@rarneson] | - -### Plugin contributors - -| Contribution area | List of developers | List of testers -| ------------------------------------- | -------------------- | -------------------- | -| [`alexa` (Amazon Alexa)](README.md#alexa-amazon-alexa)| Please volunteer | Please volunteer | -| [`ar2` (AR2 Forecasting)](README.md#ar2-ar2-forecasting)| Please volunteer | Please volunteer | -| [`basal` (Basal Profile)](README.md#basal-basal-profile)| Please volunteer | Please volunteer | -| [`boluscalc` (Bolus Wizard)](README.md#boluscalc-bolus-wizard)| Please volunteer | Please volunteer | -| [`bridge` (Share2Nightscout bridge)](README.md#bridge-share2nightscout-bridge)| Please volunteer | Please volunteer | -| [`bwp` (Bolus Wizard Preview)](README.md#bwp-bolus-wizard-preview)| Please volunteer | Please volunteer | -| [`cage` (Cannula Age)](README.md#cage-cannula-age)| [@jpcunningh] | Please volunteer | -| [`careportal` (Careportal)](README.md#careportal-careportal)| Please volunteer | Please volunteer | -| [`cob` (Carbs-on-Board)](README.md#cob-carbs-on-board)| Please volunteer | Please volunteer | -| [`cors` (CORS)](README.md#cors-cors)| Please volunteer | Please volunteer | -| [`delta` (BG Delta)](README.md#delta-bg-delta)| Please volunteer | Please volunteer | -| [`devicestatus` (Device Status)](README.md#devicestatus-device-status)| Please volunteer | Please volunteer | -| [`direction` (BG Direction)](README.md#direction-bg-direction)| Please volunteer | Please volunteer | -| [`errorcodes` (CGM Error Codes)](README.md#errorcodes-cgm-error-codes)| Please volunteer | Please volunteer | -| [`food` (Custom Foods)](README.md#food-custom-foods)| Please volunteer | Please volunteer | -| [`googlehome` (Google Home)](README.md#google-home) |[@mdomox] [@rickfriele] | [@mcdafydd] [@oteroos] [@jamieowendexcom] | -| [`iage` (Insulin Age)](README.md#iage-insulin-age)| Please volunteer | Please volunteer | -| [`iob` (Insulin-on-Board)](README.md#iob-insulin-on-board)| Please volunteer | Please volunteer | -| [`loop` (Loop)](README.md#loop-loop)| Please volunteer | Please volunteer | -| [`mmconnect` (MiniMed Connect bridge)](README.md#mmconnect-minimed-connect-bridge)| Please volunteer | Please volunteer | -| [`openaps` (OpenAPS)](README.md#openaps-openaps)| Please volunteer | Please volunteer | -| [`profile` (Treatment Profile)](README.md#profile-treatment-profile)| Please volunteer | Please volunteer | -| [`pump` (Pump Monitoring)](README.md#pump-pump-monitoring)| Please volunteer | Please volunteer | -| [`rawbg` (Raw BG)](README.md#rawbg-raw-bg)| [@jpcunningh] | Please volunteer | -| [`sage` (Sensor Age)](README.md#sage-sensor-age)| @jpcunningh | Please volunteer | -| [`simplealarms` (Simple BG Alarms)](README.md#simplealarms-simple-bg-alarms)| Please volunteer | Please volunteer | -| [`speech` (Speech)](README.md#speech-speech) | [@sulkaharo] | Please volunteer | -| [`timeago` (Time Ago)](README.md#timeago-time-ago)| Please volunteer | Please volunteer | -| [`treatmentnotify` (Treatment Notifications)](README.md#treatmentnotify-treatment-notifications)| Please volunteer | Please volunteer | -| [`upbat` (Uploader Battery)](README.md#upbat-uploader-battery)| [@jpcunningh] | Please volunteer | -| [`xdrip-js` (xDrip-js)](README.md#xdrip-js-xdrip-js)| [@jpcunningh] | Please volunteer | - -### Translators - -See `/translations` of your Nightscout, to view the current translation coverage and the missing items. -Languages with less than 90% coverage will be removed in a future Nightscout versions. - -| Language | List of translators | Status -| ------------- | -------------------- |-------------------- | -| Български (`bg`) |Please volunteer| OK | -| Čeština (`cs`) |Please volunteer|OK | -| Deutsch (`de`) |[@viderehh] [@herzogmedia] |OK | -| Dansk (`dk`) |Please volunteer|OK | -| Ελληνικά `(el`)|Please volunteer|Needs attention: 68.5%| -| English (`en`)|Please volunteer|OK| -| Español (`es`) |Please volunteer|OK| -| Suomi (`fi`)|[@sulkaharo] |OK| -| Français (`fr`)|Please volunteer|OK| -| עברית (`he`)|Please volunteer|OK| -| Hrvatski (`hr`)|Please volunteer|Needs attention: 47.8%| -| Italiano (`it`)|Please volunteer|OK| -| 日本語 (`ja`)|[@LuminaryXion]|Working on this| -| 한국어 (`ko`)|Please volunteer|Needs attention: 80.6%| -| Norsk (Bokmål) (`nb`)|Please volunteer|OK| -| Nederlands (`nl`)|[@PieterGit]|OK| -| Polski (`pl`)|Please volunteer|OK| -| Português (Brasil) (`pt`)|Please volunteer|OK| -| Română (`ro`)|Please volunteer|OK| -| Русский (`ru`)|[@apanasef]|OK| -| Slovenčina (`sk`)|Please volunteer|OK| -| Svenska (`sv`)|Please volunteer|OK| -| 中文(简体) (`zh_cn`) | [@jizhongwen]|OK| -| 中文(繁體) (`zh_tw`) | [@jizhongwen]|Needs attention: 25.0% -| 日本語 (`ja_jp`) | [@LuminaryXion]| - - -### List of all contributors -| Contribution area | List of contributors | -| ------------------------------------- | -------------------- | -| All active developers: | [@jasoncalabrese] [@jpcunningh] [@jweismann] [@komarserjio] [@mdomox] [@MilosKozak] [@PieterGit] [@rickfriele] [@sulkaharo] -| All active testers/documentors: | [@danamlewis] [@jamieowendexcom] [@mcdafydd] [@oteroos] [@rarneson] [@tynbendad] [@unsoluble] -| All active translators: | [@apanasef] [@jizhongwen] [@viderehh] [@herzogmedia] [@LuminaryXion] - diff --git a/Makefile b/Makefile index bf87aaed1c1..7829258bd58 100644 --- a/Makefile +++ b/Makefile @@ -22,8 +22,7 @@ MOCHA=./node_modules/mocha/bin/_mocha # Pinned from dependency list. ISTANBUL=./node_modules/.bin/istanbul ANALYZED=./coverage/lcov.info -# Following token deprecated -# export CODACY_REPO_TOKEN=e29ae5cf671f4f918912d9864316207c +export CODACY_REPO_TOKEN=e29ae5cf671f4f918912d9864316207c DOCKER_IMAGE=nightscout/cgm-remote-monitor-travis diff --git a/README.md b/README.md index 2b39524b4b8..93dd92d17fd 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Nightscout Web Monitor (a.k.a. cgm-remote-monitor) [![Codacy Badge][codacy-img]][codacy-url] [![Gitter chat][gitter-img]][gitter-url] -[![Deploy to Azure](http://azuredeploy.net/deploybutton.png)](https://azuredeploy.net/) [![Deploy to Heroku][heroku-img]][heroku-url] [![Update your site][update-img]][update-fork] +[![Deploy to Azure](http://azuredeploy.net/deploybutton.png)](https://azuredeploy.net/) [![Deploy to Heroku][heroku-img]][heroku-url] This acts as a web-based CGM (Continuous Glucose Monitor) to allow multiple caregivers to remotely view a patient's glucose data in @@ -39,8 +39,6 @@ Community maintained fork of the [gitter-url]: https://gitter.im/nightscout/public [heroku-img]: https://www.herokucdn.com/deploy/button.png [heroku-url]: https://heroku.com/deploy -[update-img]: update.png -[update-fork]: http://nightscout.github.io/pages/update-fork/ [original]: https://github.com/rnpenguin/cgm-remote-monitor @@ -72,7 +70,7 @@ Community maintained fork of the - [`ar2` (AR2 Forecasting)](#ar2-ar2-forecasting) - [`simplealarms` (Simple BG Alarms)](#simplealarms-simple-bg-alarms) - [`profile` (Treatment Profile)](#profile-treatment-profile) - - [Advanced Plugins:](#advanced-plugins) + - [Advanced Plugins](#advanced-plugins) - [`careportal` (Careportal)](#careportal-careportal) - [`boluscalc` (Bolus Wizard)](#boluscalc-bolus-wizard) - [`food` (Custom Foods)](#food-custom-foods) @@ -83,7 +81,6 @@ Community maintained fork of the - [`cage` (Cannula Age)](#cage-cannula-age) - [`sage` (Sensor Age)](#sage-sensor-age) - [`iage` (Insulin Age)](#iage-insulin-age) - - [`bage` (Battery Age)](#bage-battery-age) - [`treatmentnotify` (Treatment Notifications)](#treatmentnotify-treatment-notifications) - [`basal` (Basal Profile)](#basal-basal-profile) - [`bridge` (Share2Nightscout bridge)](#bridge-share2nightscout-bridge) @@ -93,7 +90,6 @@ Community maintained fork of the - [`loop` (Loop)](#loop-loop) - [`xdrip-js` (xDrip-js)](#xdrip-js-xdrip-js) - [`alexa` (Amazon Alexa)](#alexa-amazon-alexa) - - [`speech` (Speech)](#speech-speech) - [`cors` (CORS)](#cors-cors) - [Extended Settings](#extended-settings) - [Pushover](#pushover) @@ -110,28 +106,17 @@ Community maintained fork of the Supported configurations: -If you plan to use Nightscout, we recommend using [Heroku](http://www.nightscout.info/wiki/welcome/set-up-nightscout-using-heroku), as Nightscout can reach the usage limits of the free Azure plan and cause it to shut down for hours or days. If you end up needing a paid tier, the $7/mo Heroku plan is also much cheaper than the first paid tier of Azure. Currently, the only added benefit to choosing the $7/mo Heroku plan vs the free Heroku plan is a section showing site use metrics for performance (such as response time). This has limited benefit to the average Nightscout user. In short, Heroku is the free and best option for Nightscout hosting. +If you plan to use Nightscout, we recommend using [Heroku](http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#nightscout-setup-with-heroku), as Nightscout can reach the usage limits of the free Azure plan and cause it to shut down for hours or days. If you end up needing a paid tier, the $7/mo Heroku plan is also much cheaper than the first paid tier of Azure. Currently, the only added benefit to choosing the $7/mo Heroku plan vs the free Heroku plan is a section showing site use metrics for performance (such as response time). This has limited benefit to the average Nightscout user. In short, Heroku is the free and best option for Nightscout hosting. -- [Nightscout Setup with Heroku](http://www.nightscout.info/wiki/welcome/set-up-nightscout-using-heroku) (recommended) -- [Nightscout Setup with Microsoft Azure](http://www.nightscout.info/wiki/faqs-2/azure-2) (not recommended, please +- [Nightscout Setup with Heroku] (http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#nightscout-setup-with-heroku) (recommended) +- [Nightscout Setup with Microsoft Azure] (http://www.nightscout.info/wiki/faqs-2/azure-2) (not recommended, please [switch from Azure to Heroku](http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#switching-from-azure-to-heroku) ) - Linux based install (Debian, Ubuntu, Raspbian) install with own Node.JS and MongoDB install (see software requirements below) - Windows based install with own Node.JS and MongoDB install (see software requirements below) -Minimum browser requirements for viewing the site: - -- Android 4 -- Chrome 68 -- Edge 15 -- Firefox 61 -- Internet Explorer: not supported, ie8 is known not to work -- iOS 9 -- Safari 11 -- Opera: 54 +Software requirements: -Windows installation software requirements: - -- [Node.js](http://nodejs.org/) Latest Node 8 LTS (Node 8.15.0 or later) or Node 10 LTS (Node 10.15.1 or later; Node 10.14.1 works for Azure). Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `setup.sh`) +- [Node.js](http://nodejs.org/) Latest Node 8 LTS (Node 8.11.3 or later). Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `setup.sh`) - [MongoDB](https://www.mongodb.com/download-center?jmp=nav#community) 3.x or later. MongoDB 2.4 is only supported for Raspberry Pi. As a non-root user clone this repo then install dependencies into the root of the project: @@ -140,15 +125,16 @@ As a non-root user clone this repo then install dependencies into the root of th $ npm install ``` -Installation notes for Microsoft Azure, Windows: +Installation notes for Microsoft Azure, Windows and Node 10: - If deploying the software to Microsoft Azure, you must set ** in the app settings for *WEBSITE_NODE_DEFAULT_VERSION* and *SCM_COMMAND_IDLE_TIMEOUT* **before** you deploy the latest Nightscout or the site deployment will likely fail. Other hosting environments do not require this setting. Please use: ``` -WEBSITE_NODE_DEFAULT_VERSION=10.14.1 +WEBSITE_NODE_DEFAULT_VERSION=8.11.1 SCM_COMMAND_IDLE_TIMEOUT=300 ``` - See [install MongoDB, Node.js, and Nightscouton a single Windows system](https://github.com/jaylagorio/Nightscout-on-Windows-Server). if you want to host your Nightscout outside of the cloud. Although the instructions are intended for Windows Server the procedure is compatible with client versions of Windows such as Windows 7 and Windows 10. -- If you deploy to Windows and want to develop or test you need to install [Cygwin](https://www.cygwin.com/) (use [setup-x86_64.exe](https://www.cygwin.com/setup-x86_64.exe) and make sure to install `build-essential` package. Test your configuration by executing `make` and check if all tests are ok. +- If you deploy to Windows and want to develop or test you need to install [Cygwin] (https://www.cygwin.com/) (use [setup-x86_64.exe] (https://www.cygwin.com/setup-x86_64.exe) and make sure to install `build-essential` package. Test your configuration by executing `make` and check if all tests are ok. +- There may be some issues with Node 10.6.0 or later with Nightscout. Node 10 support will be in the 0.11 release. Please don't use Nightscout with (Node 9 or) Node 10 at this moment. # Usage @@ -158,6 +144,7 @@ MongoDB server such as [mongolab][mongodb]. [mongodb]: https://mongolab.com [autoconfigure]: https://nightscout.github.io/pages/configure/ [mongostring]: https://nightscout.github.io/pages/mongostring/ +[update-fork]: http://nightscout.github.io/pages/update-fork/ ## Updating my version? The easiest way to update your version of cgm-remote-monitor to our latest @@ -251,9 +238,9 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `MONGO_ACTIVITY_COLLECTION`(`activity`) - The collection used to store activity data * `PORT` (`1337`) - The port that the node.js application will listen on. * `HOSTNAME` - The hostname that the node.js application will listen on, null by default for any hostname for IPv6 you may need to use `::`. - * `SSL_KEY` - Path to your ssl key file, so that ssl(https) can be enabled directly in node.js. If using Let's Encrypt, make this variable the path to your privkey.pem file (private key). - * `SSL_CERT` - Path to your ssl cert file, so that ssl(https) can be enabled directly in node.js. If using Let's Encrypt, make this variable the path to fullchain.pem file (cert + ca). - * `SSL_CA` - Path to your ssl ca file, so that ssl(https) can be enabled directly in node.js. If using Let's Encrypt, make this variable the path to chain.pem file (chain). + * `SSL_KEY` - Path to your ssl key file, so that ssl(https) can be enabled directly in node.js + * `SSL_CERT` - Path to your ssl cert file, so that ssl(https) can be enabled directly in node.js + * `SSL_CA` - Path to your ssl ca file, so that ssl(https) can be enabled directly in node.js * `HEARTBEAT` (`60`) - Number of seconds to wait in between database checks * `DEBUG_MINIFY` (`true`) - Debug option, setting to `false` will disable bundle minification to help tracking down error and speed up development @@ -278,14 +265,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * The `log-dynamic` is similar to the default `log` options, but uses the same dynamic range and the `linear` scale. * `EDIT_MODE` (`on`) - possible values `on` or `off`. Enable or disable icon allowing enter treatments edit mode -### Predefined values for your server settings (optional) - * `INSECURE_USE_HTTP` (`false`) - Redirect http url's to https. Possible values `false`, or `true`. - * `SECURE_HSTS_HEADER` (`true`) - Add HTTP Strict Transport Security (HSTS) header. Possible values `false`, or `true`. - * `SECURE_HSTS_HEADER_INCLUDESUBDOMAINS` (`false`) - includeSubdomains options for HSTS. Possible values `false`, or `true`. - * `SECURE_HSTS_HEADER_PRELOAD` (`false`) - ask for preload in browsers for HSTS. Possible values `false`, or `true`. - * `SECURE_CSP` (`false`) - Add Content Security Policy headers. Possible values `false`, or `true`. Currently Nightscout is not yet compatible with CSP. - - ### Views +### Views There are a few alternate web views available that display a simplified BG stream. Append any of these to your Nightscout URL: * `/clock.html` - Shows current BG. Grey text on a black background. @@ -359,11 +339,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm An option plugin to enable adding foods from database in Bolus Wizard and enable . ##### `rawbg` (Raw BG) - Calculates BG using sensor and calibration records from and displays an alternate BG values and noise levels. Defaults that can be adjusted with [extended setting](#extended-settings) - * `DISPLAY` (`unsmoothed`) - Allows the user to control which algorithm is used to calculate the displayed raw BG values using the most recent calibration record. - * `unfiltered` - Raw BG is calculated by applying the calibration to the glucose record's unfiltered value. - * `filtered` - Raw BG is calculated by applying the calibration to the glucose record's filtered value. The glucose record's filtered values are generally produced by the CGM by a running average of the unfiltered values to produce a smoothed value when the sensor noise is high. - * `unsmoothed` - Raw BG is calculated by first finding the ratio of the calculated filtered value (the same value calculated by the `filtered` setting) to the reported glucose value. The displayed raw BG value is calculated by dividing the calculated unfiltered value (the same value calculated by the `unfiltered` setting) by the ratio. The effect is to exagerate changes in trend direction so the trend changes are more noticeable to the user. This is the legacy raw BG calculation algorithm. + Calculates BG using sensor and calibration records from and displays an alternate BG values and noise levels. ##### `iob` (Insulin-on-Board) Adds the IOB pill visualization in the client and calculates values that used by other plugins. Uses treatments with insulin doses and the `dia` and `sens` fields from the [treatment profile](#treatment-profile). @@ -400,14 +376,6 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `IAGE_WARN` (`48`) - If time since last `Insulin Change` matches `IAGE_WARN`, user will be alarmed to to change the insulin reservoir * `IAGE_URGENT` (`72`) - If time since last `Insulin Change` matches `IAGE_URGENT`, user will be issued a persistent warning of overdue change. -##### `bage` (Battery Age) - Calculates the number of days and hours since the last `Pump Battery Change` treatment that was recorded. - * `BAGE_ENABLE_ALERTS` (`false`) - Set to `true` to enable notifications to remind you of upcoming pump battery change. - * `BAGE_DISPLAY` (`days`) - Set to `hours` to display time since last `Pump Battery Change` in hours only. - * `BAGE_INFO` (`312`) - If time since last `Pump Battery Change` matches `BAGE_INFO` hours, user will be warned of upcoming pump battery change (default of 312 hours is 13 days). - * `BAGE_WARN` (`336`) - If time since last `Pump Battery Change` matches `BAGE_WARN` hours, user will be alarmed to to change the pump battery (default of 336 hours is 14 days). - * `BAGE_URGENT` (`360`) - If time since last `Pump Battery Change` matches `BAGE_URGENT` hours, user will be issued a persistent warning of overdue change (default of 360 hours is 15 days). - ##### `treatmentnotify` (Treatment Notifications) Generates notifications when a treatment has been entered and snoozes alarms minutes after a treatment. Default snooze is 10 minutes, and can be set using the `TREATMENTNOTIFY_SNOOZE_MINS` [extended setting](#extended-settings). @@ -491,7 +459,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm Some plugins support additional configuration using extra environment variables. These are prefixed with the name of the plugin and a `_`. For example setting `MYPLUGIN_EXAMPLE_VALUE=1234` would make `extendedSettings.exampleValue` available to the `MYPLUGIN` plugin. Plugins only have access to their own extended settings, all the extended settings of client plugins will be sent to the browser. - + * `DEVICESTATUS_ADVANCED` (`true`) - Defaults to true. Users who only have a single device uploading data to Nightscout can set this to false to reduce the data use of the site. #### Pushover @@ -512,28 +480,29 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `PUSHOVER_ANNOUNCEMENT_KEY` - An optional Pushover user/group key, will be used for system wide user generated announcements. If not defined this will fallback to `PUSHOVER_USER_KEY` or `PUSHOVER_ALARM_KEY`. This also support a space delimited list of keys. To disable Announcement pushes set this to `off`. * `BASE_URL` - Used for pushover callbacks, usually the URL of your Nightscout site, use https when possible. * `API_SECRET` - Used for signing the pushover callback request for acknowledgments. - + If you never want to get info level notifications (treatments) use `PUSHOVER_USER_KEY="off"` If you never want to get an alarm via pushover use `PUSHOVER_ALARM_KEY="off"` If you never want to get an announcement via pushover use `PUSHOVER_ANNOUNCEMENT_KEY="off"` - + If only `PUSHOVER_USER_KEY` is set it will be used for all info notifications, alarms, and announcements - + For testing/development try [localtunnel](http://localtunnel.me/). #### IFTTT Maker - In addition to the normal web based alarms, and pushover, there is also integration for [IFTTT Webhooks](https://ifttt.com/maker_webhooks). + In addition to the normal web based alarms, and pushover, there is also integration for [IFTTT Maker](https://ifttt.com/maker). - With Maker you are able to integrate with all the other [IFTTT Services](https://ifttt.com/services). For example you can send a tweet when there is an alarm, change the color of hue light, send an email, send and sms, and so much more. + With Maker you are able to integrate with all the other [IFTTT Channels](https://ifttt.com/channels). For example you can send a tweet when there is an alarm, change the color of hue light, send an email, send and sms, and so much more. 1. Setup IFTTT account: [login](https://ifttt.com/login) or [create an account](https://ifttt.com/join) - 2. Follow the [Detailed IFTTT setup Instructions](docs/plugins/maker-setup.md) - 3. Configure Nightscout by setting these webpage environment variables: - * `ENABLE` - `maker` should be added to the list of plugins, for example: `ENABLE="maker"`. - * `MAKER_KEY` - Set this to your secret key (see [[Detailed Instructions](docs/plugins/maker-setup.md) ) `MAKER_KEY="abcMyExampleabc123defjt1DeNSiftttmak-XQb69p"` This also supports a space delimited list of keys. - * `MAKER_ANNOUNCEMENT_KEY` - An optional Maker key, will be used for system wide user generated announcements. If not defined this will fallback to `MAKER_KEY`. A possible use for this is sending important messages and alarms to another device that you don't want to send all notification too. This also support a space delimited list of keys. - - Plugins can create custom events, but all events sent to IFTTT webhooks will be prefixed with `ns-`. The core events are: + 2. Find your secret key on the [maker page](https://ifttt.com/maker) + 3. Configure Nightscout by setting these environment variables: + * `ENABLE` - `maker` should be added to the list of plugin, for example: `ENABLE="maker"`. + * `MAKER_KEY` - Set this to your secret key that you located in step 2, for example: `MAKER_KEY="abcMyExampleabc123defjt1DeNSiftttmak-XQb69p"` This also support a space delimited list of keys. + * `MAKER_ANNOUNCEMENT_KEY` - An optional Maker key, will be used for system wide user generated announcements. If not defined this will fallback to `MAKER_KEY`. A possible use for this is sending important messages and alarms to a CWD that you don't want to send all notification too. This also support a space delimited list of keys. + 4. [Create a recipe](https://ifttt.com/myrecipes/personal/new) or see [more detailed instructions](lib/plugins/maker-setup.md#create-a-recipe) + + Plugins can create custom events, but all events sent to maker will be prefixed with `ns-`. The core events are: * `ns-event` - This event is sent to the maker service for all alarms and notifications. This is good catch all event for general logging. * `ns-allclear` - This event is sent to the maker service when an alarm has been ack'd or when the server starts up without triggering any alarms. For example, you could use this event to turn a light to green. * `ns-info` - Plugins that generate notifications at the info level will cause this event to also be triggered. It will be sent in addition to `ns-event`. @@ -608,16 +577,16 @@ License Copyright (C) 2017 Nightscout contributors. See the COPYRIGHT file at the root directory of this distribution and at https://github.com/nightscout/cgm-remote-monitor/blob/master/COPYRIGHT - + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. - + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . diff --git a/app.js b/app.js index f6143f1834b..5fd5f85f254 100644 --- a/app.js +++ b/app.js @@ -14,39 +14,6 @@ function create(env, ctx) { var appInfo = env.name + ' ' + env.version; app.set('title', appInfo); app.enable('trust proxy'); // Allows req.secure test on heroku https connections. - var insecureUseHttp = env.insecureUseHttp; - var secureHstsHeader = env.secureHstsHeader; - console.info('Security settings: INSECURE_USE_HTTP=',insecureUseHttp,', SECURE_HSTS_HEADER=',secureHstsHeader); - if (!insecureUseHttp) { - app.use((req, res, next) => { - if (req.header('x-forwarded-proto') !== 'https') - res.redirect(`https://${req.header('host')}${req.url}`); - else - next() - }) - if (secureHstsHeader) { // Add HSTS (HTTP Strict Transport Security) header - const helmet = require('helmet'); - var includeSubDomainsValue = env.secureHstsHeaderIncludeSubdomains; - var preloadValue = env.secureHstsHeaderPreload; - app.use(helmet({ - hsts: { - maxAge: 31536000, - includeSubDomains: includeSubDomainsValue, - preload: preloadValue - } - })) - if (env.secureCsp) { - app.use(helmet.contentSecurityPolicy({ //TODO make NS work without 'unsafe-inline' - directives: { - defaultSrc: ["'self'"], - styleSrc: ["'self'", 'https://fonts.googleapis.com/',"'unsafe-inline'"], - scriptSrc: ["'self'", "'unsafe-inline'"], - fontSrc: [ "'self'", 'https://fonts.gstatic.com/'] - } - })); - } - } - } app.set('view engine', 'ejs'); // this allows you to render .html files as templates in addition to .ejs @@ -117,7 +84,7 @@ function create(env, ctx) { }); }); - app.get("/appcache/*", (req, res) => { + app.get("/nightscout.appcache", (req, res) => { res.render("nightscout.appcache", { locals: app.locals }); @@ -174,8 +141,7 @@ function create(env, ctx) { // serve the static content app.use(staticFiles); - const swaggerUiAssetPath = require("swagger-ui-dist").getAbsoluteFSPath(); - var swaggerFiles = express.static(swaggerUiAssetPath, { + var swaggerFiles = express.static(env.swagger_files, { maxAge: maxAge }); @@ -194,6 +160,7 @@ function create(env, ctx) { console.log('Production environment detected, enabling Minify'); var minify = require('express-minify'); + var myUglifyJS = require('uglify-js'); var myCssmin = require('cssmin'); app.use(minify({ @@ -204,6 +171,7 @@ function create(env, ctx) { stylus_match: /stylus/, coffee_match: /coffeescript/, json_match: /json/, + uglifyJS: myUglifyJS, cssmin: myCssmin, cache: __dirname + '/tmp', onerror: undefined, @@ -240,4 +208,4 @@ function create(env, ctx) { //} return app; } -module.exports = create; +module.exports = create; \ No newline at end of file diff --git a/app.json b/app.json index 4ee2e183495..17909419c54 100644 --- a/app.json +++ b/app.json @@ -2,150 +2,155 @@ "name": "CGM Remote Monitor", "repository": "https://github.com/nightscout/cgm-remote-monitor", "env": { - "ALARM_HIGH": { - "description": "Default setting for new browser views, for the High alarm (triggered when BG crosses BG_TARGET_TOP). ('on' or 'off')", - "value": "on", - "required": false - }, - "ALARM_LOW": { - "description": "Default setting for new browser views, for the Low alarm (triggered when BG crosses BG_TARGET_BOTTOM). ('on' or 'off')", - "value": "on", - "required": false + "MONGO_COLLECTION": { + "description": "REQUIRED: The mongo collection used for CGM data. Default value is 'entries'. Most users should use the default.", + "value": "entries", + "required": true }, - "ALARM_TIMEAGO_URGENT": { - "description": "Default setting for new browser views, for an urgent alarm when CGM data hasn't been received in the number of minutes set in ALARM_TIMEAGO_URGENT_MINS. ('on' or 'off')", - "value": "on", - "required": false + "API_SECRET": { + "description": "REQUIRED: A secret passphrase that must be at least 12 characters long, required to enable POST and PUT; also required for the Care Portal.", + "value": "", + "required": true }, - "ALARM_TIMEAGO_URGENT_MINS": { - "description": "Default setting for new browser views, for the number of minutes since the last CGM reading to trigger an ALARM_TIMEAGO_URGENT alarm.", - "value": "30", + "DISPLAY_UNITS": { + "description": "Choices: mg/dl and mmol. Setting to mmol puts the entire server into mmol mode by default, no further settings needed.", + "value": "", "required": false }, - "ALARM_TIMEAGO_WARN": { - "description": "Default setting for new browser views, for a warning alarm when CGM data hasn't been received in the number of minutes set in ALARM_TIMEAGO_WARN_MINS. ('on' or 'off')", - "value": "on", + "ENABLE": { + "description": "Used to enable optional features, expects a space delimited list, such as: careportal rawbg iob, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info.", + "value": "", "required": false }, - "ALARM_TIMEAGO_WARN_MINS": { - "description": "Default setting for new browser views, for the number of minutes since the last CGM reading to trigger an ALARM_TIMEAGO_WARN alarm.", - "value": "15", + "DISABLE": { + "description": "Used to disable default features, expects a space delimited list, such as: direction upbat, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info.", + "value": "", "required": false }, "ALARM_TYPES": { - "description": "'simple' and/or 'predict'. Simple alarms trigger when BG crosses the various thresholds set below. Predict alarms use a formula that forecasts where the BG is going based on its trend. You will *not* get warnings when crossing the BG thresholds set below when using the predict type.", - "value": "simple", - "required": false - }, - "ALARM_URGENT_HIGH": { - "description": "Default setting for new browser views, for the Urgent High alarm (triggered when BG crosses BG_HIGH). ('on' or 'off')", - "value": "on", - "required": false - }, - "ALARM_URGENT_LOW": { - "description": "Default setting for new browser views, for the Urgent Low alarm (triggered when BG crosses BG_LOW). ('on' or 'off')", - "value": "on", - "required": false - }, - "API_SECRET": { - "description": "A passphrase that must be at least 12 characters long. Avoid 'special' characters, which can cause problems in some cases.", + "description": "Alarm behavior currently 2 alarm types are supported simple and predict, and can be used independently or combined. The simple alarm type only compares the current BG to BG_ thresholds above, the predict alarm type uses highly tuned formula that forecasts where the BG is going based on it's trend. predict DOES NOT currently use any of the BG_* ENV's", "value": "", - "required": true + "required": false }, "BG_HIGH": { - "description": "Urgent High BG threshold, triggers the ALARM_URGENT_HIGH alarm. Must be set in mg/dL, even if you use mmol/L (multiply a mmol/L value by 18 to change it to mg/dl).", - "value": "260", + "description": "Urgent high BG alarm. Default null value implies 260. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", + "value": "", "required": false }, - "BG_LOW": { - "description": "Urgent Low BG threshold, triggers the ALARM_URGENT_LOW alarm. Must be set in mg/dL, even if you use mmol/L (multiply a mmol/L value by 18 to change it to mg/dl).", - "value": "55", + "BG_TARGET_TOP": { + "description": "Non-urgent high BG alarm, the top of your target range. Default null value implies 180. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", + "value": "", "required": false }, "BG_TARGET_BOTTOM": { - "description": "Low BG threshold, triggers the ALARM_LOW alarm. Must be set in mg/dL, even if you use mmol/L (multiply a mmol/L value by 18 to change it to mg/dl).", - "value": "80", + "description": "Non urgent low BG alarm, the bottom of your target range. Default null value implies 80. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", + "value": "", "required": false }, - "BG_TARGET_TOP": { - "description": "High BG threshold, triggers the ALARM_HIGH alarm. Must be set in mg/dL, even if you use mmol/L (multiply a mmol/L value by 18 to change it to mg/dl).", - "value": "180", + "BG_LOW": { + "description": "Urgent Low BG alarm. Default null value implies 55. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", + "value": "", "required": false }, - "BRIDGE_PASSWORD": { - "description": "Your Dexcom account password, to receive CGM data from the Dexcom Share service. Also make sure to include 'bridge' in your ENABLE line.", + "PUSHOVER_API_TOKEN": { + "description": "Pushover API token, required for Pushover notifications. Leave blank if not using Pushover.", "value": "", "required": false }, - "BRIDGE_SERVER": { - "description": "If you are bridging from the Dexcom Share service, and are anywhere *outside* the US, change this to EU. ('US' or 'EU')", - "value": "US", + "PUSHOVER_USER_KEY": { + "description": "Pushover user key, required for Pushover notifications. Leave blank if not using Pushover.", + "value": "", "required": false }, - "BRIDGE_USER_NAME": { - "description": "Your Dexcom account username, to receive CGM data from the Dexcom Share service. Also make sure to include 'bridge' in your ENABLE line.", + "PUSHOVER_ANNOUNCEMENT_KEY": { + "description": "An optional Pushover user/group key, will be used for system wide user generated announcements. If not defined this will fallback to `PUSHOVER_USER_KEY`. A possible use for this is sending important messages and alarms to a CWD that you don't want to send all notification too. This also support a space delimited list of keys. Leave blank if not using Pushover", "value": "", "required": false }, "CUSTOM_TITLE": { - "description": "The display name for the Nightscout site. Appears in the upper left of the main view. Often set to the name of the CGM wearer.", + "description": "Customize the name of the website, usually the name of T1.", "value": "", "required": false }, - "DISPLAY_UNITS": { - "description": "Preferred BG units for the site:'mg/dl' or 'mmol'. (Note that it is *not* 'mmol/L')", - "value": "mg/dl", - "required": false - }, - "ENABLE": { - "description": "Plugins to enable for your site. Must be a space-delimited, lower-case list. Include the word 'bridge' here if you are receiving data from the Dexcom Share service. Include 'mmconnect' if you are bridging from the MiniMed CareLink service.", - "value": "careportal basal", - "required": false - }, - "MMCONNECT_USER_NAME": { - "description": "Your CareLink account username, to receive CGM data from the CareLink service. Also make sure to include 'mmconnect' in your ENABLE line.", + "BRIDGE_USER_NAME": { + "description": "Share bridge - Your user name for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge.", "value": "", "required": false }, - "MMCONNECT_PASSWORD": { - "description": "Your CareLink account password, to receive CGM data from the CareLink service. Also make sure to include 'mmconnect' in your ENABLE line.", + "BRIDGE_PASSWORD": { + "description": "Share bridge - Your password for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge.", "value": "", "required": false }, - "MMCONNECT_SERVER": { - "description": "If you are bridging from the CareLink service, and are anywhere *outside* the US, change this to EU. ('US' or 'EU')", - "value": "US", - "required": false - }, - "MONGO_COLLECTION": { - "description": "The Mongo collection where CGM data is stored.", - "value": "entries", - "required": true + "TIME_FORMAT": { + "description": "Browser default time mode. Valid settings are 12 or 24", + "value": "12", + "required": false }, "NIGHT_MODE": { - "description": "Default setting for new browser views, for whether Night Mode should be enabled. ('on' or 'off')", + "description": "Browser defaults to night mode. Valid settings are on or off", "value": "off", "required": false }, - "SHOW_PLUGINS": { - "description": "Default setting for whether or not these plugins are checked (active) by default, not merely enabled. Include plugins here as in the ENABLE line; space-separated and lower-case.", - "value": "careportal", - "required": false - }, "SHOW_RAWBG": { - "description": "Default setting for new browser views, for the display of raw CGM data (if available). ('always', 'never', or 'noise')", + "description": "Browser default raw display mode. Valid settings are always, never, or noise", "value": "never", "required": false }, "THEME": { - "description": "Default setting for new browser views, for the color theme of the CGM graph. ('default', 'colors', or 'colorblindfriendly')", - "value": "colors", + "description": "Browser default theme setting. Valid settings are default, colors, or colorblindfriendly", + "value": "default", "required": false }, - "TIME_FORMAT": { - "description": "Default setting for new browser views, for the time mode. ('12' or '24')", - "value": "12", + "ALARM_URGENT_HIGH": { + "description": "Browser default urgent high alarm enabled. Valid settings are on or off", + "value": "on", "required": false + }, + "ALARM_HIGH": { + "description": "Browser default high alarm enabled. Valid settings are on or off", + "value": "on", + "required": false + }, + "ALARM_LOW": { + "description": "Browser default low alarm enabled. Valid settings are on or off", + "value": "on", + "required": false + }, + "ALARM_URGENT_LOW": { + "description": "Browser default urgent low alarm enabled. Valid settings are on or off", + "value": "on", + "required": false + }, + "ALARM_TIMEAGO_WARN": { + "description": "Browser default warn after time of last data exceeds ALARM_TIMEAGO_WARN_MINS alarm enabled. Valid settings are on or off", + "value": "on", + "required": false + }, + "ALARM_TIMEAGO_WARN_MINS": { + "description": "Browser default minutes since the last reading to trigger a warning.", + "value": "15", + "required": false + }, + "ALARM_TIMEAGO_URGENT": { + "description": "Browser default urgent warning after time of last data exceeds ALARM_TIMEAGO_URGENT_MINS alarm enabled. Valid settings are on or off", + "value": "on", + "required": false + }, + "ALARM_TIMEAGO_URGENT_MINS": { + "description": "Browser default minutes since last reading to trigger an urgent alarm.", + "value": "30", + "required": false + }, + "MAKER_KEY": { + "description": "Maker Key - Set this to your secret key Note for additional info see https://github.com/nightscout/cgm-remote-monitor/blob/dev/README.md#ifttt-maker , maker should be added to enable if you want to use maker, Leave blank if not using maker", + "value": "", + "required": false + }, + "MAKER_ANNOUNCEMENT_KEY": { + "description": "Maker Announcement Key - Set this to your secret key for announcements Note for additional info see https://github.com/nightscout/cgm-remote-monitor/blob/dev/README.md#ifttt-maker , maker should be added to enable if you want to use maker Leave blank if not using maker", + "value": "", + "required": false } }, "addons": [ diff --git a/bundle/index.js b/bundle/index.js new file mode 100644 index 00000000000..2b37869c95b --- /dev/null +++ b/bundle/index.js @@ -0,0 +1,17 @@ +'use strict'; + +var browserify_express = require('browserify-express'); + +function bundle(env) { + return browserify_express({ + entry: __dirname + '/bundle.source.js', + watch: __dirname + '/../lib/', + mount: '/public/js/bundle.js', + verbose: true, + minify: env.debug.minify, + bundle_opts: { debug: true }, // enable inline sourcemap on js files + write_file: __dirname + '/bundle.out.js' + }); +} + +module.exports = bundle; diff --git a/docs/plugins/maker-setup-images/action_search.jpg b/docs/plugins/maker-setup-images/action_search.jpg deleted file mode 100644 index b3b85b0b7c1346a587fc56ec8459da9d0767a708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30054 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 L{dfQU@9+NuJSTp5 diff --git a/docs/plugins/maker-setup-images/config_vars_enable.jpg b/docs/plugins/maker-setup-images/config_vars_enable.jpg deleted file mode 100644 index 508464f156c480ed9fc39488549c3541edc680a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22122 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 JxP#(9{|`f@@&W(= diff --git a/docs/plugins/maker-setup-images/config_vars_maker.jpg b/docs/plugins/maker-setup-images/config_vars_maker.jpg deleted file mode 100644 index fdb8765f836b50e776027a601d60aa5219761dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21710 zcmeHuc|28L+xI%>n1{?m<}o6K2;q>BR3h_`%v0t$!;y;2QBkRc%9wf1khzc{GH1+C zrh{iJ zfS&|js(uc(0GvAqga7~}fB?n<2q6lp0u*7af6{6&L4f%F91cLZ10eXl&Uxs*S0HZR z+x&KiKZXBM1Ht$d@dpiz_NwA1NpISFdAZ4niMe=+T3EYU+K5`YI*a*PxQU629u))f zNIy3VD<>N-E=wCb2NwmNl~;8JO)zdj-GQQk&Nf~aTz<}1Ts-Cc6nMTfmxJiN$6`EO->Y~zDexGcyTGO5>S4nrC3;Ns zC=b-y!`fC(=aky-ZK1yucz##X*Vk9nS5nl~!%j?GR#sN*sDzk=ga}ka#M9r!%fe5@ z#gq3B4ySB9tvnpuyc}Fzxb`?&Sh{+9Deyp&zpG?z^(R+1Z;vbAd0JbE*<7)4wsG1bo+^}A*#E$qY~Qf%J~u{{YtNZhNi_Xsj$kNndgid?_SFAx0k zz%LK{^1v?-{PMv6J`el@QQ5daFv=IgO8~zFWG>jddbxVqySi~niXH_rCpFFy>;XHd ze5d)plhl3e(L-^dh~RSw>HS5_$zc2x`4tTn74r)^T51|+Rlnm&a#IU8w<~aJ0GwUC zJap7gav2&Ka}iHNppXPGfP>(ug_Wn9@`Vd$_jvws|IYuW;NG1gPwEwSlK~*$nHb*Q5S0m7l?iX(TY~~7S;felR)$l zXJ^+v`WQqDTK>St?g!e!!tzg^78Z7Y(!bdPwFH3L;hcpPmx{#|2TKnNFB^#E|8Q}> z;tl!jd)Wj16gDn;7oj@`bg=;ka1K}iE5HR*p!*f*Z%g0-QC`3XK&p7z_(6UEK*iO~ z-^0Pq-iu2a>Ny)O4HqlXBU}HT!JjH2hNb@z90}>17RQv+y?i+Ly!W}K_++!iaMu|BR{?*>PqSX>J1t?8gUve8fThlnrxc4H1o8?w1;R_X{~8*(5BNi(oWMM z=y>T==&b0j(>NsnfrWjMy5&)~<9%uvHH!H8fy#Hhh| zg)xq?h_RpX8xuQ|GLsEc1XCW;BC1fv@EYu|o7nT-w5PmG&bA<4S z>=BnEX-5V`C`6P+d_;0YCPf)V&x(eMmWwWn@rfCW#f!Cy;f_ijy>j%~(GhW4@iXF~ z;#J~n5<(JI63G&Ml9ZBak|@av$<<@R$83&0IW{OoCv{FLT&h88SNgcLhjgCw=i_|G zFCTw&d_aa?=7LPL%o|xk*^{y;*=pHsIcYgBxgxoh6Cx*^PGp~$mlu$?k$)yXt-zyT zp^&ODp~$6pS@Egj1dd6g zLYz`R6?v*tl~z?x^`YvR8jqTtT8KNEDO zNs~hJqUJ-*sk1_7JlJ#Bd&o&A+2{v=K3bqNh^L7e$ckDjfBkdFI7add_9y+W# zo_0)e+;Y-#%5cJ8F}RZNOyYdmxzdH!#mS|~mBZD~wZ~1^EzE7gUC#ZUJK96j8 z)6BENiyr#mc6bYV-}IjJQS?dn!T9R?7W>iox%hSX3;9R*&s|l!`aFOjz$&02kUQ{N z;AD_;P--wN*fO{Q#f!Runh8-4$-G8(&FR{^(4(OVpS$DA6gJu_x-CXL=6(!5);6{?PCD+%ZKB&Q zxBKIf@tFxU30D)Q@0`0+c9-jJj%Q_Mvt`HSz;nEFKIfX|cE3FJvLa6;FEyVrKdJx}co%#r zyj<8{q*>HZEK{6U!e8>Jl&&f{=R znz&lB+8ed_x~p{?uiaiR*4x!jH<&k!G#WPcHEB0>HfuJ&X;EuwY*lWpd!z8C`mNmC z$~Kv{@^%Gty@&bh34iTUc!YM;Bmn0%R8a9h|}3|pdEdbBLKT(Y9H(t$Qa&#Zc^ z;@6_r53Xl?J@&O>wO4+kf5UR$-$(GC8p6nG*TSTiArUbNDH%Cbp_CfHVF(1A06|E&2kK!#(0f2YLrBXlu1rLy zZ9&ZAPA_pSK9z*`WMMsnP7j(-($XW8l#G#y`5+7bApya|LdT?}kITr)shm<(Q$MY7 z=Ay2iz5xWutgLNp?d%;KJ-xhreEs~dUcYfOEc{kPWWt@h_Y#xtKX{my{_OdSjLfX; zqT-U$vhs?`s)oj<=9bnsZ`Cd7#td&oSObLGdnl``OE6s`qz!kEzI_}J-c84 z@tawHTK1D&G>~0z0s;g9@t$2UxG!`eXb1?o#ffN@wTUg<>3Afrkaeyha+0_kRpXBb*UCAu9&s4uubeBFP!rCrc)*rZ9dO6iJS`K|K=l+4uCC(& z!Uc($;Y44bM~+qF!RwJYoUH2f=#loXdQ|&brsJrCh<653Fs$x)&?;CRaPvWMsAPTi z{-)|!u5VOZ`AD?%G#Ke?A|a!ksQ|#U3k?IAoKRzc1|TSmn0?<(eQ>M@N=R4{}sCo%M%>@7H$@U67lb zSI*VKC|A?rfl>e`mN*U%BC=<-Jp7FmH#X>9&9yI}8Ym}Hz99zjU_u^+JqHa5KLK3G zCK5x%i3fCh!|Cl-erEdBZ;{t=)UE`0(9Ho2Mi?|irtF~rV68`fB`$;ppC2Az9_~f6 z7NiL4K%eeUoS>mGMv4bd72dTcK`Qy_hh=VxZ_=L6-FeV*70cI%yi zK5a;4<$vPylV|n@j{u}>%)%ETD81}s1SOcCT(g&Bez_P#{3p9u{aBAWodz%A1zA4y z;gtOYIJyj@}zgido;Wp(U>xj$;8i1&b`EcTdH+ zOet~QNxVR$Zk+jIEYziCU^8eOiw9bG5V$w`w0Bc{@c`M22jk+wlWNAE|L-^yPjUV$4(h_oq4P_q;$=LT`-a+?MdEnk z7I*5laVfZMC?(y>6JAQ8hTfHi;}9CqCpvS-t_iulWC0E7_o&q`vgTe)>Q4JrrbpR* z#DlJ{c(B!h!m7HP?^9WQM3EbM>qLbmx`PLC+HE^et4^5zC^CIVaRrCUz=K*SaZCwE z?w6=Iv`U2wFhorpOTk`^HTX!_GmHoO1ab~-q1JbiyX#Pzq%k%4N#17HE!6sOBa|qg zLEqs%kJ@?B*nxc#1#w-k@F3+g9<1DlQfK5;?T;ek$^upJ;7LCxhEf0zIMVNJDSP?U z{U}m>e|H!#{3J4HUw5$OSCOZe{v;ClV}DfS|0MFK9+?U1{uKkiV&Fe422Q&w@&K*J zmm%DLe(jG;;{2DH#Lmy$q@q7}cE`(!p*i=(!IO{jCJ=DRPO<`-rT10FVZ%OF#t%?` zH589eQKF2Z49v)tPFMHPzT>+CZ_ECa9g?k^;8VWp9(T2K$Nb0aR?6fO`YSp8N>0CG z;8zU%N5#OyEj*x}Hb2^KIpM>&MuAgwZ~bHs;e@={@xO#R;f+;wo6B*G&)&|QU{XK( zNw}q%8PTG2+0Dr@wd`@En)!Zc^D|b>Qf2G#k-&o=(aSzG`SOh5tc8`>U+U187HiA+ z{|*x*zGrXMY@k!#<~eHM!(Dz>b0v@c%I+$-PKv+Gs-ardgw|2;cxmFHy2aN}l zF*l!NtrzpHI5NXY7{#VXp1&)T)7!65*M73hk4)m z{-lgw`_PzkJoDw;_%e28>b5V;)JjsTj1iuzyqij^rYFNwIM$ZB#T`h+_2VXJTr#N@mKQM(=k*0C-gc!TV)Ct%#M}zcp#jn-}+AFFZVk$xHCyu4vPa$-}f8yj%E;iJ{mp=-`lCjy##XL|W+qRsew zsR`8Nmk($Hrh~E^rC%hlmKZ(a8{Xp_qkdrxB2106W-2*j)n5t*-`e16>@1a{o3R!J zs=@xj9h*poXPD$wo%P0X>SK@TRJ9`H9wcj2zVDx!)gyPFC9F8EeQ%wZEHJ%fecdZJ zF3y}_Ny>a=u6~?yDgWU}eI5NvmukJKnuAsx`l*?IQn~#-QE;+|cYU0W1T;cMP2r*2 zM;MVtBBC!>mMm*aoLA3A&No&Syg}Z|fhP0HKTXtsoV5QHO@zFToL(@-gM4V&DvdjD zsscrXYV9n=1M_J-IHh9NER;gyKDfRehczfy!95Z|eYM``!fZ`xg$J{}O>Lc`5m)5? zaJgqG@Hu5v)a}LOA~hxw5C3ll%Ez&B<>nicPI!0xOMNesCppMU7iUs0ynC27Gm644Y1`^1I^gL6~k4f)~UkS*i4g1Irb zs#dON3@nxfYS;SRc9iV0p{IB$ky&JMx$SmtfeJ%8_n8Nb`Zkx58np+4yEzXi%Cg&b z)yD<6X8HL{ig=qH*Db8*&Ci{=M-ab#+q9K+DgMCxrwct5GlmmA=;F;VjOJ=i^CeNV zZ=;#k&iVD%TMN&>%7dBoz;ysST~h*PIn#0vF$!InV?#7MQ>fK`4Cp} zZR}Nk-u<)WVvQ zD3~--H@XK!IZT(YWh5BhOMP;>|L{OZ*eMY@xo|Zd4-$^UXhuEE(2hZ%`fe&;)3DZ! zLMUzw)sSFY4?>3~*#Q(_*CdPo#PT`b4Ygo??Q> z-m|`WXwdg{SKYuVSygFBQYr7n>DQwnp-O45gMyyphR2IH3s=dg!hMWyt|qPYVyeklocN9s$H^M^hwzp=m~rJ!fm%p*A|H*T6oU1E&)ew7>(7--U$H-|Y{ z=p3$IUezZ$A=lCqRlq3itkf=_Z{5X9lBT~FX^e52%BKsYTRoOSC9g33PES#!u7!0X zkfN76bh@#srIK%piPDxy3^CZnKUl+8az&b$?A77HBf+(p|^}mDX;Wq@z}FNW3txkY0MH96u0v99w@(E-CCO2IT3htb^KN} z@wCa~OCPFvMM~txo^wQ@+@Cvi`MR?Ap&V+$h(j5UzKQN!W`J$q%75z`!<1-%WLD&A zKJ-crkOKdB{ zDw~nJSvY#-X(UFinsbW%;;CM#S0>J~0=1Rp73hu7vxR1whu)|(HB&9K#Xh~>U0}G= zJC(6?4}Ec>GvCu@y8fj~h6B3ZJ?N#$eEF8K!XpD-!Szdxh}Tikl4Wa!S(My*v$fB| z>|HE0qkL)AdBXHB-d6rZ9dODRZ-R!CB+u*#_V-(!s;aEI4?00n(tI5H6Ck1or zI8x3t@%bGhM+y&yaLt=R50Wf)2MqELMb!_FFKO)% z26vekw${I$Dq1Z-ABvfB*l2OMFfUEx04tu@r}NbpLa zASQpJF6IeoIVJ|Z>@RlAWJo~MBqL(VlMQ1KwL2^$;!$YEq|d7|tCx3<5X~G(?b0W%Uy8rTPC(ZjaF~(zO?~Tmfq^dlV za8Ls~-V=Oip17g@WPnaBX1S{-trxY_^T48!nxUMFZ%Kfi z@+w2HCaPXW-gg>x%bcZF#t})k#L?RlI_9!z63On%$Ir1Rf-M zi1E#FzC0#QNN*ddM6az1{>y7%C*$+^7j>h^GoTC2iH)k;+=7k+Jf}6VF?9{8`(%a( z<*&MS1ruHgUBog=_KEeQdqNpV%PsswE1!}IvlWNn;@X#j2*XJlXJSb3@xjC?ulVcP- zKJH>38|CbRV~;ag!?j(xVf5}v*T;jc@3yW|HV3uXV&$wQ?b38wrZ}fdL^wuTa{rn@EZR8_bDUUWMcVp9*|pPci=@nWpd11-l}byt1EOWx^!in5Ws zWUMNG!|2>*vU}x+Snfyug(wfL$8MwjD@oIF+iQi;j#(vgnY$_oymu#z(iOM`aiSjM2o` z!^UxXd2~B2>@v{#*sERb55vdU@ zL!l)yO4OMx!UbzsXf0h)ABkatHl}!cW-!yZz+4nsR12q`Hg-91#0IUtd84d4Y-(Xz ztCL818mD|h#$S2zE7ZP$Vgh@{t);{U;(R_zQ8`U_QxtC z!X>ilC#`;zm-gDZ$M7%xVEF&B8`z8nfA3n=5EL|DpZj6HUO7%Vzr~_jvJ|+$-#psl ze}+QPGW#jTdPp`=z(!tVn#*FvqCa+gP4OdY;ATE9`bibp%Ur*!U)HtHS!q-YHNGb@Tjo(Du43wA((9YhF#-CCG)QtI$y-%r1*BbW-4r)S|;P zakY-sOr5zSO7#L`&vN4y%@3lw&vfAd7>731dv>Fy#lDdmLH=Qd&JcV%wz7=}x19zD z(u$CUfi`%cER4h=P&nkz;(F`maLV~s29{xB*D9jzY6%6BI3LU|u@**8Ke}oQePsVm zYuz+PTI%DlkbsHa9Nxd>gZaN}zz6%DH=?j%4+%LIZ|nX3{MiK=s4ndFOD#20J$x!` zArb}k#J5##{#KK$Q-^16lf_5-Gz(>C-_#C~0s2~huUnjYj5zm4N%~LrJB+X60oOob zzUtpppCSIIzTDq|YLB6_B5RZZEMN71?#q7>I{y(m_L?uJJpZY;;!BXsa(9Ey_aXXT zrXw)69!Qlxtf%v%!l{n$1XSa}`v~Ep+;^;JuB-N1_Bszewt9PH-2Xv@tyQdqVM1_e zhPHsew6QT)TBMNL9>@)}$PR8yA+0vsQ60s-Poa5HIj~`dF1;61uWey3(xW4`eJW~~eyapI4rsU71%`Ye(XeA?gxMiJl6L`L*RFLmTQ2ixg0vEFL*+`W_@CvR%@ zIG?F1`228QMjNVRWzi0;vRM+>xW!5TGVgL9Rt&|M`oi(ym2sQ8a=%Bis`ufiTy$M7 zRl@G(fW|Lvg3nnlL_eA;4cH#c9tt~DN@i$W%9hnT`zgv-d)A@tW8R1HC#kCR`r!xh zz26TjH5E9oJ@qesv?wILG1>?nR!YioGPVtO5iQjSEVU|CBbPjGDwN6h$OrUlUa;6r zg*G}Aq4n=^Z7895q3j{F-xUp=@aaQg%{)`kh4Lc1J1JO#3MkQep&FXd&?gn($hsksfdqj&I6+8zW z?h!>|K636?%R_S;b+l^P3-x0g_05~(SPYangVgb$c>n^3v`+rZAAkDzmp^{R#}5hPfBkq-e4J(Yr9Ubt z;|zbqdYHL(J#qK-dg6EkN7l82N&9onPnlRb*Dp@3+lNv|C+3h3Px|RaVjTw96^b=? zL)5-p=zT`yOZs-?|6M-a=Ev6EH}jQ4E|J%5ucqL>#X(yh={qM^aDfnhtxbmxZ!SE7 z{+mX`r0dEk1V#B<@qjfQ$0%^KuFewzxJjH?mskyy*esJ-XWYJK^SJK46PO2~6PTG0 z?5&zZPFnhz>}(-1r0#goGXGCZ6U^JUZw`2-|I`jyA_^T{Z9(mPLE=O!yD)}N7;(E@ zIJhZlwdyC9pOV&a7T%)}>mS?1{b*XA=YHMe_VJVb<&7V_`^y_Y#@a7${6FLk^QnYM z^&I0)@a+x<;ok#vKEtzPn;%7&*sUW~DPl9YugxoGeG&U4DfX9Ht1m4ouMt`@_?HO< zIt^8|NM!z(STakM$tLRMRpeG?~|+8k)pGUrA&PC)BU$Se%p;1DDG0U8(-ZyK}1GpPmJ7p$%|n#F{yG zm?!a|*ZXl0!>^A2J42wCzqH)Gtti?u7g`qKd=BjV2%OP_$~`VFeF20|l!zyUi}Q}Z zHeZ9V&dA3(++7W`dxx=SD;7f|1v8noRq27=iCuNA_Y*t%8S*|oF1q8w1ZEv>MCXY# zWDu1(_qL&lFJTxS+`0U|ZqW)l7%=*X$4quJmBe1 z!GlXZsCjs~@PnKa)b!fsf_~~aE#4O7rkF#@HwoiT&lv|_A35}(xid>qO(pNUg=~GS zR?d8W1j;pKo9Ch3ZuB=MT%x+Uvrdd==Y_IS;>cl-Un|Lb{v*Z+E+|Mgtg^L_JnANQR5+~=J4_IjW98QOc=62NuZ z#LNVM!2sYC^aIccK&Uas`w9S9SOA9s0AL0fV8Q?+L_sWo9!%sPvj=M{u^dxjK+8Dn;KaWrs35?%W{}64=3CTagwITZVZDmP`KP;iXCnRkx z&Pf;r1bawmD5)!{NJ38syI;|^I%)E^XQBU2Nd8U9h=>TK2sNdEU{B?v$B!RZR#8<} zRaJyI6hk8YLtQY6{vlF-mvGV}#4Xr6Fw{H1U*fk!7uSHW&=Zo-oBycf?)DFWIz<)gO9}oP;1OM^B|NlJjPekS655cGi2rmJ&E#TNWuYk~i z5U+qh2{k1Z;FzJA1;cM(2bDjx%pa0#LM(MA9jIYgzrpfg6Ewuqmf5bF85yC^Sy`Hx zoiYA{C)pfb0t2toaRGpze`v6ksiB0eoxKEn1pcjmXuzhD2z z|Hq%bsXq`B7+3r)>mRrOdjz*T1ic^(dJbauaSw6xgXmU>)^-aF4uxnCqNO5210kAD z6r%ZpAq62?B7wJ;u7o$0IV43zC^g2CnSgU0Yt0# zyL2LLu^h(6-y7x0@_hiG}%f05()FSLt`>px_=xOo19{>v8VNdVyT zws3KiFmk!-?HcS7>H&%Tf4KNv4TJplr~C%}>>mEs7oe*+R7C-Azyfdq+yDu{2)bT{ z{&xj}Au1H`03cODJur|T0Kh09Ff!QN(<@ZM0BSi82{V5;r6UrmDo2k4!0&$Wn+E{C z3H)han84eA-V166faA$f`}}SKiQilR;35S8O`iaOckiF~q;??H?f}5+5x215@W1#N zeqR^?RsaF;K|M?ykOJfZML-qM1ats>z!*3USOOOTJHQ#Tzzgt$G>-tHffyhGNCEBu z_kmoX04M^U0p&mq& zj-HO4j*m`^PL@uY?iif`ojKh_Iwv|$x*)o1bT{d4(>14Gi53;|v4_A_J9?gHe=Gfl-^$jM0|SlQDuZfia8m zDPuij591``D&rm#6O#aw9FrE)DJDB6AEqd#RHi(pN~U(EQKl89T{s*r1XqBcfLp>{ z;GysYcn6} zak_KjI3IF0aE@_)MX(@b5C#Zm#5F_~q82fX*yLj2lI1eua^b>qJ>+WQn&#T&=H))h zZOQG&oyz@!yPx|r51dDq$C$^R=O#}PPZ!S$FFmgmuMw{sZyawiZx8P(9}}M(pBbMI zUkYD2-#b1cKM%h;|0RA5|3m)Q{7VA#0T0#^mn1!@GQ1bzvM2^t7`2qpnPxNU}(c z$gC)x=wVSS(J0X((LvE&F>x_du|TmLu`aPqaRG6CaUbz};%(yVNM58K(i?dXiAR2s z;FmCvxGM2LqFaJ^Q1sxbgJA~?557A{mXwpUmW-9Gl$@7hl{zMMMe3eZrxZ~dDQzJg zEnOx(E5jmlOvXzlTc%Iuhpe2ejclT9qwHt719E0^*W}9NKFD*(qvV6+pU6)fVmfr} zknf?qLnDXj4r?6tI{fhPumYWerh>OZp2Fx6#v{j%_#b(4WLlA3(Lga=u}qPmB%pLg zDORab>8rA|vc2+MNF z9{;JWsU50aqrI)8sN<{iLg%xtoUVs%vF^$V$rCOo3QsKQN$6eHd#tyFI*4*XJwYw& zOX<7oKh<9|IAq{s@Y3L`p^9O!VZGrGBWbA9AWbTe|xcH3~*cfaSp z?s38+!(;8ri7OdbK6{?<%=BFMLV0C*ZF(Dd=X#TTPWcr0{P4B(E%l{cwYgg9$Lx36 zugRas-`Br8Ks*2wFdC>3m=L%Wq#blWh!|`h{4@j>;uP{Kln+{P2gBsU;=>5xdf^Yl z!H7!{wHR)UKV~rUaAZ>C+BK7FB~c7fZc&}l2cu)63D*s-7h+*pS8OLv3U?E?dc*X_ zvl!MG-jl{@*+@L}a6(ML&-e&o65jpgg-R}_d9 zq!j#m?EUzCp=n{m6WJ$OMNCEEMW2c<759}KD|!A@_-V@1{ZjwZrDs;px}R%3fBr)B zMS2-sSyzRti+6Q~_0CRbQ$vS5MWL*L2n%tF5S$se4qcbe}S zhP8%YjT|3o9@QOf8$*qCjGr9uoiLjim^?cAm~=&oftNNVDOybIoThh%P)?JhWK3q`CB(aFQ^%d|`QR#cgHdW5`F!>dj9apR(4FYtKKcer{bi zSs(f0@MU!)aD%*=u*JRg=&StKx^4aKL82{jl@v^(?WBGa`d0c~{d?!`x!r|5zdiDg zWKalv_Vd`!zF#)K*2obQIOW0qq5Wp6IrRh0k46i033mB|1?Zu_bXTB2=1wU9aM(fE zVFbct4u9daKOC^Xuq8zQMmfLh@A5ylpJ)O=sXhQ$-vEF!?EsJuRT+q8hpxXN z=0$ygPEG9}6}t1ggj`Wm{X@XmgCS@F(rDkr007<$0QCV!_Bmp{Z7(F+P)(s#b-5DWZ0+qjW!|3Q4 z7@6SAEUau0Lp>Kj2cxH_W1web{0-`1*P+h=25v^4gGUXRc+b1QC4=}>W9}9*OBq&o z@LP=%rPW-6V_8@Q1P=%a%gD;fA3ChAp{aH3xVF(rV-wR;W~VP)w7z5mK{7XYk1L*D z-aa9rVc`*&$ZK&o;}a5ZB_(HM-n*Zb{U9gzNl|gh)6!?pU)0pr)i*T0YHIH6>h9_7 zd(;1RY%^BLYPtnOfuQnMoRy9ST43P`IHWJteF z`(xRE&#>74EzAC4*gx%>gW&UDR?)#AZRzNsrlN-mgxG!;CO8DTpaOxbKZW^EVfkGk zEcCZRgM`3-KS@u|2>r4#Gco`DqyPSuHV?((WoWYiJ3S2QO!V9U3ZPQupCkkSU#ql{ zf6=S*P35c(mCcweiycHaWF?Wgz+W7f{BReuEn?R$)Su$aD>Z+i!mT*a+Am2EJ}&z5 zD!3GT9dX@E5ITfI5MpDv=R431=$Gp5O$lFi%bMTvV90#|YyI+SGSUGwc zkgsIle~Lw6PE-jcYOW_|!#ys(>l+TSqqCtR?Gw`Hwl|#kBloomd0g_ssUvBB@?T+`t_*ePo&X zd1HX@|6s+@M*nI&g?Ct$=nKTe_U(8*DX@R#Cw1rv#=)X#QrZ3M!TPk~%SA0*ug*_Y z1HrzdWvlo(g}t*x^i~rY^@Rr1;=26;>_+Ou!p*~9XB*}oP%62-V0_@zlJ?_eO6Q>X=`B}reX zJ6$Y#JzuK5avi=GLjz*pM0+5Kh6QxkQ9M(alrM?Rak9LXrNZaM6SJ4fetw@amV;jL z+f}&6NE;f=)_!$VjYSnL-YBTvZnvD7UXqO=9|x6B#(wLfBFB3lr9JE7`ynVF?4A+M z{iHRcR_%@9;Vid!`eYDEfK#|y_6~!lM1^Je=Ge5J6iGQ2d(g=N{lU9==p&C(UZgkv z?W^hxHZSSqa|aH2Mrs{C++Y)U8NsukO#|Ezvut|;M1e-KKjzzBA}O(#ah$?}t8m2l z|N82ir}~Skb0M%sYCv~&1@KFKQI=s8Fn6zVco>u|*xVxf(14Efx-7`8HInjPDJd}_ zjEQ94u8u-{(7hDCmz6G*3u7I;V>njiBG@0sRzL6Y!5G_y?Zy+0hhtDxKYGmciOanwg zg)`LgI2&sFsK&+E9;NbPo^IDGF`tZ0gdE?z!?$n5+(0B&Jl%gu1D0ME5HFz93Thvr zL?}kYhz=USR2-$Kc82(I*e?V_9Q31(OC;N}KYo*NDMGPM*DJ=zzw$vHdhW;GP%G4u z7qF9P_EtL*;=*LK4N6=hWUC7oIm*o9V z`!)EbTj-kft$5OH^eo3NjvIvc+Kei;l|I8b@8|?m`c%n=J=bpviUlXHf_ z!7vI1*I|J7O`nzOC?Hzk-?#LNvw-)P#T2@+%E?2!DI1E;%OXQ(6zlPi{N2syhmw$M z3l5+BBQ@3+>p6?aPSjB((OD67GN!3(~(zL(9UhLdCqM0Z4daYx;f zz1;yJ8{cPFBt9h~}-6 z@8%YLm^?r73&FpS%~4qfh$ho})K`#8)B0ZcCieai_8Ob*9uC;QcTix%@2=nsWuMF^ z`V*X=6Fmq2h9oP15BG|}eXD>Y{dcG%*?M}@8e(!zex??QofqB>6?^Y=L}Ugr zI3&LuWBmE%+}V{O>~rcn6ww?%GqC4HO7BGrf>*Zfr{R5es}H-g?7N9(J^~TVky4FZ z4(*@Q_L}&%Bm4>@-$;KesDe{?3YPjPybrsn(o=e@U~P|me$Mg%O8w~W!}q1twLiPE zlaCQnek8)otEHcH^nbd6lE5!LqX9cr%9{l=z`5Cz`pAFdjiNeo4z>3Y@=Y6d6jy_Y z$9W+HDJO_oNq#{%QBA>VUTJf-**-o2QqCQR!VJHi1Iby|hen5RhKu4*7k`MNM|l;@ zu@Sbns#lzBoa#w7UA9Zl-=hc52w~n1{yJi+3{nGq&`{w;)^o1YiKn19`t%6cS zxxFD04cO`@h+S}OA_a8&de%>rE6X)r*OtyWAqM}@wDwr}L;m~YXd>R$nw8)!p zsh7X<4A*fK<$>p>cG+7}c(?m5WiLn&_2T`jZ9g~<#$AZDo&R{7AeV6L{uRSbm~H2M z89O_>7=VhUs(9lXP!#UQy&RBbnN4|?ts8ydJ36_!+1q|EZka8~KWj-yam=pV%6m;J z@X>*fRuvU5gz_BAajyJe3|Rr!K@UxD@o79qrfK zY<@kxEnj#`tvlH5!)Ym(`}9E99`y#R{FDD<6-68S7ZCJ+3DO?C6S#pizC<>>{qyO5 zIck^&RNPP;wbq*|Sfc^c7QWqLpXs*v@BF&wJ27tZT<HQm3bD4I6Ri+MFi*j}JQDiKYBRyw)?Z5BUw7f5!{CR(vub(s9FbaS z6q`zl&wkNMEE~qRr%_Lw_!blG>mByQLfFwqY3HYpWC5pcy(s1J8vOXuGx)+in~!}d zSXGK0v9Db@RqsH0cZ6{K_KkWSHVYjmtLMQaM@JK3tx!PyZfa43YD9=LzUTwxENDkQ z6OAH%DqG$+?bdWYQ8j@)*VrcSlCV66(AB6p{47cBhG1su$NY9=A)n1k942lh{5ctg z8DDveA=@^z5%XIj1PVMwN@sHAJ@qdIzO_G-*!kS=1+esSx-8lmY$0j&E()nzCTMGK z5WUj~Z#0^gh~0M#t_Nv!x#?Zqe3hX0;H-JrrapXq$PJ9^)<)d?9!W7;j(QVHW;-YB zo07=gb3hufdk6&Uf5NM36r`f-Oyj7)>}RTc{+h`|n5Cd8VZ$QeJlE?%ZTFv&k*y70 zl#jEcOabrnejx#o0b=t-FRM=%j!vxF*}8K@#UA#dG=T-nmbVt!bPp2y2=JR45P~I`toRKX1K08h2M88AS00yWEIwrlY$lSmq;dcF8d0QN6WPrnz^HKG5vr?K;?(i#DtH z&HypWMPl~WK?0h7ejfASGgZ0j^}UYeffV1Ql)3J);?eRJftx%nr!}=7d5WSzp=Df> zo*?-82_|AMZc5kEb6L^Hyo0B1#1V|LVr7$$bIs(OINZ)Ix+|sQMgRSs=lh%r(+g8$ z6Fj}IwiEJ^)4FPeEt6?Sl4HJ7mY>NdkEXllEt-!WXzb)cg&S<#w$xXFbCcj!Esc$L zpGaR8zXzLG#OyJ1vZcSPLN8la>Apc}|AcpoOHCNvVW|*6bNRds$<#+)qXC@*^)w(q z?%T5~V2;0F5_}C!hrhLJ{nZCfl6}_o{4t`TQt!~oVk!|ECW_>9bD`GmR>ohM+_e)q z?&Gr|{DR$m1U}bD1NfIyisQb$ECCw@Fxk76iORca*6(0GgX!lczb)KA8D4EWa&qi4 zq{c290q!Y$0DcZ(9qqnct2w2&dmTaic4@-doznuq-tlfuo;Nul`l)f^Q)^Mj_<&4} zf2DPb4wDz%>Him|b`)*mpHuix({5ZfVzXyC4I9Ai<9y)MrzV^#W~)N3G4|3%R`MZ! z?QiWuCqkU2Q)$4J%2++!(a_g$#}Sv?9NfCEPm~L7NjDfxo+r3pE^S_8*opk~dMp_r z9isuBma#<2ktR@)DP9yS-0G3BJa$~hNTKXyOuluHg62oZ>gYRwoT!b(|nz;DOOvmV6fHYt)0yH3L4xFhYg=cJ#NzDX4}BVxsvK7hejbB-*AB!=sx)Yb~IeWVj@SkmuU zvVqp%8QfBOY@L`}m%Y+$`(gA=2Xx8M;14F-i(Joh++7O|bi(hLI@fPcoP*zJ+*?DfY3)lkBhJdi#Dv!CgtB2c*g2&9eE_61EoJIB1tVOUC2klnaOq2Y zv@tUVqPGajGp0*gv0)oXzR&hT)Uoj?FG5rPm*q%0OXR)J3+|~xx;56;F>DzZ>C99? zkv&^bh`7?Dg6ZqLb~Isc@RTBZquQ`oW3CGIOmK^IR7}S#T$G*l7f&+q4aY!HBr11q zNp2exIrE#Z*YAF49DmZ%Moy}3s@d#zmj~#e+)dWCR%-&jQHriir+b zN4AEoi>aNB)GZ)dSC5NCt^EG17&PeBZ6-hR3JkY5Ds;%7fDz9WF#QmB+dniKEd;C$ z>?>>|K+~<)hq??J#GcU;UQsz2C4S;ct|`Y;MIN$PH@NZd9vFGNS??+)D?dE{nB9W@ zG+Fxe>!VID-RKIF84Y^u9@8bu|E(&lBIhjks)&i3Xd>GMaBg|P6OR#7JaWYCa#~oF zUi7OU$Y#8PS_2F7OMN+D&A#rCq4i-MV}*u@RXb+|)!y^%m%W>&%481o_z!U?N;AaS+Tz zu#S$MkJmN!DxJ&cYjSY9I{VFYTZ|t(P6Ifz_UrJUNzr~ZAR3L^SxEmk$=|8?G#c>O zlm^5Y(SQt98ej#QQv0G?UZe*!|4A)!O9ifXKrX~bB+dljN3OSDE~Tq2uILVrUCbn zt)VtcYZPsVy)hb4)I)0ACqa9@fouOJc9#;cPluwgA}M!p&!c5%fU&VMMYadpeHHz< zolFs>0g2|=S@d^InNhX{u=pjQh!mks4++?BZ7JgHPHrb!=60Jrt-SdfS>2dea2W$TvrL+Px+TF zS_HQ!xJYR%`gfV=UK%hWMFZLkX+S^xS9T}*`$a2gExif_9}c51pDR0t|Gj7Yo7@d> z@fQOQ5U3%npsO|12o3A+IiA%_MirEuz zpvyiYg`#z=dA#1iD?sszbB2*N+(c;etwH(Qy$cpj$jpnS@@AbrLtf+adL71m7bJcM z@oAHP0S<)(FmDCZCQQ+pqDol$`;VK{cg zx*hYRdwjv^^K^9=4}0BhSHBnV;J%n`eSUwe+Uy*4*llHf{C#KW$*H!UPaJdh+{)Q_ zf3lMqTT5mHYoitZC=q>2WZx#7=P3(9j z3m)7hCI^6WZ!uU!>`=WC;nw${%d!_D_Ntk0lxF790F39c-o=L{!Blx7B2601A)}&E z;~I9YN6Y6x`(>t<+cH@WkuJ4P8#M-XYu-lrIlGS$m6Su|i}t>n;!5KbOTqxO(4=?F zhUVr?-4FlVYb&5ic#@;~k`sbJJlfL@(K28Rq6eKYtJUorb*aX}b;kcBJ9*HhMF8;J z;s4n|bY74m4zHXk;Qm?>peH-yJsW?!UhzXrqk}0!fv0a6%&>D{{m~r+@T{^3<&H{4 zu^a?>m(m#rmh%pVWx8?T-*aqAuDx@MLEgt>ch1tSsKfSNN7s`5Dc7fQ9+fl7eT#Ld zgsYb)b`i|pygn-S^8&UWnCkf8n=0@Vw|y)3^S%!!G+V~V)q^&bA268~+VKOgCx?b- zKb#$8drDzvT%i|T3qKo-wT9wQcxYxiO4Y=@uZ-B2r{Ao+vB(ubRitnbJ$sxkE$En6 z@_N~am#cI0xZO6N3(dJ}w&s&9;rYlWAGFzP2VpDbxFj2Au_F%^ zXdWX3rn6_L2NmnQiIKc$+xe8~BZspAk$z8PKW*0{VDCNXRBjZiYewKOw@vA~cAmsY ziAd;WGkFzHxf?3}IkNh>>M7|XdY5F(80dcyKxI-2;l~yuvCBIOJ(U=IUZKd)|Y#> z1=VeFcpClCc|7fYc~#c<`BxcsUl}g6wp5W5HUYXMP9kFcOEOg-@7mwWPu8V=Kytc) z9TBC`_9R4i0JkqoQS^CYK$?H0+=RHnL9Q>qOdqcPJYN>C1HUh1@PpWchrXmiF#{FJ z$FOg3g5S5_M=Ueafb{4f60)yRPq12Wws1naiiEr6q&U>dQ6K$mi>tmfRck;T44;#Zu9zU?6C9WTQwuN+eg z`hDX{UneS&Om4g zz!~z{kV=*+-&YdWlJ&%~vp7Vn=`w=P=`*@^wYN;GtA%M=`H~oGXiYBBO!#Hd(B+Zt zxOWS5&!yNm`{uBRC{e`3t%GC~_AQ>&y7}=6k9n)Rx9ln(Vm4MBSn9pNneSJZ(jt zoqGIxQr)%Q*6^rYOD6xq$G;9(MyKd{LW>3Gez7iZxvyEpIuuzhHez)9296i2_yx^}^4U&CiYh6s?!Rn>7j7VlDHz+V z%+urFz5JXuWkw%Mr}Ry>G4!=|8GS4>>gj?vukmV`dB&52gZ?l0a~`N+A5jNzta>8RC!wZE z#ZIEcabD>>KE8#~BBbzwm+M)zJ|VN~0z5rl-^?R*y}o2bnsLoa4|=t{8*jORm`8|H zoWUdl>NXV)ULeq*EZb{)G0V5M7cY=B>PBVqll`O?dETW)ROhuB_o`g;{|F`8aX>MC zb3F;)MX@$j%tQOJP!uAX4&=Z^Ji%l;HAj`@1+Sc|Pf?m`nEKrRvF{LTM@`Qug^bgc zY1pv>UJ8P&4?S;zcT=<>G~PlrP&ii7M3$L6#=p9oN6m$g35DD{99$YG)Fnkf8jn>n zCevfz*`RCiTazokPEuBx)}Yf0ipv&rJ)!a$f9%v7DdmUASxv|LPCfYqcUL`<buP5xMlz{?~V}HhMxAg!YTE2oS%r zn1sLLM1LW&)sw&`a>CTQMsw#yS3tBH8;c!-<*RTL=?FUfT~sozMs5>U>VWO0YKQ_M1oh3z$V^ZL`Tgot5D^+wcs(8mm^5NRL1FE`}rf8{*E=cB>HiCgF; z%QO^I8}k<=8};Dp()Qt7;;2MJQe$!`TSMc;>eQNt-b$HF%q3w#3K@?N(*+l=^`ZPM z*!Cj!@1R@)_`D$OdloP5YzsQrl1dXpX@I!1m$US%sgJ~kq{#dE4#DFeGzzmnvbQH> z4oYMcTI-`qXBB?l0V4{r@9?#P6u!kJ%Pvb$7M-#>_1#izeRd*WZ}dpm`tFwc`rg!r z%+n$rGmXv;ozo7!2~HmwVMfrBpF5k~PF4({vc!?*_BL8b%1OM-HeI+R?Z?E5BF^dv zQTvPMeZrrub2Ps_IM^1I9d1aGU|swnK763ECxC^597DMUfQPa-%U(pQPVe^O(ws#| z3YZ-~8|$XmPOhK2&Nxgq=Xl;7mHxJf``RfP53@E2*{$5nEA>Sqsl3#Yg2vgNBaMrK z;}^y$(tO;9F`kC8z9+N>(5-1Z&+8R6yn3&Runkz)jO4+Es;24c{hn@Yt(G>C--MBv;)5eBXx#G#r2E+ZhocpPg-Cj_hXl%5!XQ9y~b%>C(;U))rM3= zSlnWH>ealEw$#EQkFh*Wvb_^Rd{L<7c_vE@q-8xOc#X-qxJ5ozX9cC7wWu0>?g9)1Z;;Zs{dcOzzvmP*?L zZc*9BDNw!zpPslQX7<;ywJf_$X*-erm|(dh zJnG!!lhGrkuYDB{&ulAKoMcA7ZH!g1H$#h@H?=aA2tf~RQ}~8E7i)i{qLylK46Q6= zb4(VR6;!Y$$`*QukNO~ryCNSZrG|&hpCqZD8~pP4#(HavIMxT+L0-n+E?`2r2h8g1 zgwCnS!X~?~^&3ut=kihC%Y2V#Zt)BVE~qjpSCtN8uIP3AG~3W{2;_2M@js zG<~~zoqq2gG>ykXX%B3Aa$s!-5{CB-;EFaHZ9~2{eTIp1ZpNqR*B$K_dQg$K_u$bN z_FLun{&voiNSTnIg`|RIxy}JJD39L!Nw$hU4A#Q?9$MaNQ=krxQIL`0jd)_3z0U@D z-u!IxtZg^bsJ7Mji9_)s0d67q1)yTCi%_K z{)22^U07?`%~xC&AwCx`*B3udz2p=OEJ5*vC{-JESTkMyc+<+!wx0;Z0mA?Il~zW$xA26VV;l zFLY(+-p@}__1+n{I`Uai`|RDo27!>`BN6-0;%#qA#M8t1VEa}!D+Ot|r7CASFp35+ zYC&P|*dVa1Q}7ZE@NKRdAMZi>qHEcPtll`;caB8baVXqnrGArX>V@%B=A#+$;3!Fs zfQZ9+BjI3NXR}T3zGe4_4rbaJ%nV_w4Z#MmHspjo(bYQ>_$IMm0GyRNJR^S!%8=8m$AjMCtu5s!}4H<>>ImLoHM3uUCV3%TGV_|41hi^GP|Y=T6oa8>u+-0DKFz zT#nmY+`px#1-;N(H}Yvi?!u9&Xqlx&_F1$3x^eZKt&gvF-ko*J-%SZ46!}o^Kx43= zPB5*NpD1XupV`J}UXX-GYRC{15?-A0jdDmU!-bz(wUS4>1jQym0HM>1zH0vgYN-s# zLRG_d+fQ%Jks42<*eFs@d~CwmryE`O{RJk9T~CS2Prv&ndnG|V&9=4>$e*vI@K#b; z6&~X{j6!ju8w=vZ@Y1Evx+3Kq(gtO(1VhStWz3{+%J0}d7fKIVf~Mihr&Kt0kOr`} zF;d^<3+zAmuBf>{?s66!-@00q@RjebT$F1~RHo0 zD4bPO9SH@4KGX9qdr|}fdKN?`+N41;!Lxnep%=|eNsH>b(c3)uJAL$7=*IibUXxyAK6eLI%V2BMRv zvWR8uKQpt=9s6lw*Jgc;s!x?($0MNANW}hgoDV{XVjD;BZwgrPGjv#tBROld<&=F` z4=ysvjn8yE@`LvaXN!9lLXkarDE;0|D44m|)G~^?S~+XEX95P0FZ*Pp;8ekld{}z# zrM~kCE<(pc@ADiWDaTa89JKX8^>v(@|6WDJi zMNs%1R_+zlW%nRv$V+mYr1I!f>4X!LB@MODyqhOWTGAUjuiPrB`&_Xa`-(MnO<_*L z2K@{g4QMLw2EIl)4)0wMi$zSgy1azWQXIq&jOxnX%4%G*;~Z@jRLvkc6nkL3lRUZ( z^~oV0q8Xr#c=}=;1hl^G^;JW=ql$0fagg@o!ZgDgUu(KQ-yoVr*Z<{rUWsr zHa|IL6KdlW$9SXvU@Z0i^b(4~Tib~O+N6C8cv0Ty*^uSwSUpMT96I~)o9OdTF*wKC zmTKZ!f&}Z+w+91sYC5>QdU`ti+AcdDJ)U7XQ2CyBnLS@?zq(B*`VhFiyv^&39oBZP zT^7Q!ENsY65i#lK8k($=b>`C5qL)7il7-(EMY#kv?c9Rzc}MBk&kO_?$*Nxg$n4Vu zt*!#_NP039O^wAxE9}3fsz#sSAQT+fh|so7+E(|?+G#z(>ccZ*6h89i_BX=?^l+k8 zg|&%!GN{wp?77(p86L9#j4FrgFm99nBF+omC2sWm$}b>zJ?s_~KDmG#QIvw8Z5dZw z$(6}l?Y|ls%wl_JF6S&YV9#^Eh$2HYrE-iA<+{xCIFSc1Ez8|)5=2})MNRT&qSb_k z*rgqb({v&OH;#p0HXW`uQqax?_Q^yj-DefT0=Mvu?D*=^j&jD<3rvZHJr$UT-BUk& z8iY@^I!$GP%+%=d=cd*+=cN4F^IpOi?^Akk9pV&8d=;W+Q3Tf^i}Uf*>qPN^4YMeo z&&``6-Oke0S(7fW>UoZ{+Yb-iJ#V6CeecH6CaUFVt0^hlCglv|CHgP+Z7--21(e)hgl6Gt)o<&s$N(pH%?&j~)PLf~#NL8hA<_LUCioqFIPG37<%d-Ihts zck9N!D>&S*KWf*_=7@GY?Uwzv@kVfW;SqZ7ytLaJd!zexZJgN70;Yl$WUppZo?KIk z<+%E5?V}ph5}aOiOBAO6+&g{g41HFX6EV~v7toU^vf{ZlN4BKc@7H40H&9HiZp1I& zy~G95&8OjspQ?z1+yQk>aXQYS*(`GR61~Iw8B2^DEpKC0s3SP&gu)g1zLCmmK(?}7 z*qGJoLJ18=EVtZm931m553ic}lF?Zt{lp>mK;YLei#sFd;9nY(P)ilKy3+Q2rs?JF zttj#lun206E`_9ncCAJMW%fQl1dhHlEY8m2Dh_d|Sf&qkRnQUWR`Yxyhu(t6;20)RO4j(LXL~L*a9yvO17i zoUk3@C#s0}ZUh2cJWpCnRIYPEoE+VD#kaj~os_^FMAx1iI?NEkWca1zXgWR~^{DM2 z2w%pVrZ-t%kWpb7KA*gSS}Jnp z7;TLtvrueC!*&-L@d?}YeBznwqYqzM5~R)1Z{b__ODP8XiLD+>m7q*%iq*zB;z^`H z^zjv3Li5YwH&UarPPxyaA^nIpQ@GKZHAi z^99Bds_{eQ%XKO5zG-jIH|o%U*^O>*d-|&JGA!9tp=m_|uueK4 zrf`3ZN*~QJvMaBVC)kn8pSSul<%n8GsY9Q1@S(RgHNC7=y0M(b*Ix6%lAtci4u*7w z!_A2e1%6LwbA&H&yfkO`_^|rW2T<+HxRzVKf?xuTmIV`(TX|Qu4i7tyh8;^4%o4uI z65<=g8)oKuM^!tY5W_!qUSHhzI?-)u@7aRzb<56c8eJHbGEDS<3w@sS6XuDTRn+Jk zV`km*SLfgccF&3QOO7}JcW@UO7ivsuZTK{1as8@<@Wb|t2Thu0KHZSsB=(nwd9}}5Cgh!P+XbHNyOjGHU`Tf{YAiJ1qZLXHx=dTldtR^+>-3Bbv?&# z%l>gk;X8_;yxB$8ie{MDRrFlK-H1N1L>_XZqDn{W2BL(Nfa7!~@la&lA?5Nz46xrRbA9os7awci98>KFIw#`_VOVX#T#mI7i@u+WuX<2m00m_edKO zLYS5DyLoJ#OG@db&fWsG_THZX5x-@xw2TMIW;MY{ ze7jfJy2akkx7M~pw#1MA>%6GVnFM#E*E=uT#fJK1UrQzfKj*rTHOS4fq3)c3@BM;~YQHbKF& z_@b(qv*q`W7Bt)`SQj#J-~YOO@9xNS3FIR45-7aLUx>z_FO2F67TSFPC0WW_b=0-P zn$3z0pd^>k8P&&{{gTnQtNGbmMUy8-s0fNQv0GfCfjAvsm!^#p_%IY%Ayc2KQc)Td ztU09k{v=(bw6oa94}-^~r=LLmNex;@_E0Ex50E8JA;-ip{+)zLZ##DPo+gTk2##@!iP5-QUfRO*{kMK+6rpTSw|jc-cgu=GH7H- z+3o09G}r2QMXMh{QR+g|=*zF)_ccF79m`$roT4IYKlJ!&E~?I7N&Mk2>Hgu7xIzUH z851o~6>}y%1cv0lB(Ib@p3Ia~`cwXzv93IO&hiAdI(cQV@B)QFa@*%KqITb0= zYDb*w63$NbD>f^dst7If4(P6SbNjg^6ucf&og@>qa~Ew4O@G{^xIKscT)db0fSBnD zz6;8K0N<{hSsrupJ=55h!7nFs{;A2~;+>0PrLQ!=6=+d?0CJZ`t298FoL8e&h~LEn zI$ztIZFt?-U?l2h-tfS}TYRF^lwFM}mGOMKZa6)J8$EoR1yYvN1h%`d(sc;-tvl!k#tUtUQi6(H6gTwRXRih)@2|`zzl-vox-Q1IzIq%(4`s4p4PT%AK!IUph`^>~b``WjSw|f2jS}yRO-$Z7^he zOA*SAL9YZ*a-oEYv>;QV2gbp}91#m@X$6Z{uE+ZeEJdH3zbePod~x9gf7PVZsfw}C zCV~P^)o1_iuWVxJp344RDkJ3iWn@P|0#=CF&=M-$0|;!h1IGesB;hOBMLK*~D&U0GD6+h6%Dfiyr(c~|Qu>T_u+GzYyZpz7~WS5;Mw zy_6XH{z|H$p&`vR;lMrVpx!vv7e#CYn-Jvb*^w znTHek3Hc>}88>Q)pvZJXsXXuvC~{Kkxw#QWtU$y>=)s5|^O@^$nn;A^eV@>0A5LBQ z(2#(VvCQo~bMxJf!}FmqdweH49xDOHltkN2x2lymgJp)vw(9d&mfs46u^oHLUL!5Y z{?zt$Ou`|aOZ zF`}qJ)WiY;3drOmLGvUieF?E}dRbS7I6%PP2vhX5Bg!RypBMPnZF7YNSm$?+DR>7| z%*AQ^kM^!Js;RYEM?q1lf~eFeq6mnHG$|5L>0$&#nt)0>h=52J$fimMQ30t@sTRyZ zKu{o|qf`L}sUZX@(h};16z_}QIp6o)beHLZBdojc$RrqmBF>sg;7l2acF~Y&5J~+ zBSsL})cKGN9ucDgJ#hcf`Djrj>~K#tAwL%uiiLm-T3<`b%q3 z^9!&?j9j^E3Wk2j)g9q_-CbONM(0S_mF?OX&|7H8!fQa?J@6mWp<%D67Tl&PT9E07 zqGNUYONhT1V!ym^7|8v1@52_^9%MujZg#OYytMY0C$WWjN3XU?^eP^GOJPKQ7_~HL zUGzAUxaVkO`rZuX)`w4%A4q>*B@WDv9f%DQdLE=gRSu=2ir~No6D_6W{1KPbUQ3rH zs~37!gKY6F92fFl9{g$$9vW(w1W~4Vl29w&IZE^e)P@E)Sf~ZsR7DA4{E+l)AmSeZ z;wJ(`h<`0(FQ>vWYuLUk95#W|jFheRURC}(iZNZ8Ax zMRrpa`G>CPDi!23h6qmrVN1}zM+XQ*hlM|*1JKn3`fCzU*4qPfuV|X^{kA58FkaZ- zqiL`p=b6mHYVhgNB?nFY-S{g`k`FJ{8%$+6)%4TY&N0C)McB_>hMWSBjx>o>yl!%Z zbJ};Zdk5jv=@e{mgg zR+?(f6z->%G83U@V%ARtJ##Cd-h%sqxM#_BoeP6b<=u1<=71jkGjh}dN+PduHq(rOa@Dml|Y3XIqfSjeFVU989xrA{j zs$$(3J)R_LVU+7~?`C#yYlVGlhTE%;dSs`=(RIPEzVvrOl*yz7)QZ=rA|1rDiNST^ zKpb;77e#gq)##5=4$|%`N5|MIy-Vu~H|a-u-)XHDkK?{p7OOF9D4wau`Al!;Tb%i+ zM$?popC=}J(?6+6;N$$ht-Ot|2s?ez?ZoK2yHrfGfoJZeNCWr0=Zgnh^9^9uMxrw-s)< zF(HO`z}8=%xy!kNSI7ox+TwVFmWho{XKVR(Ie}EM(Vns?ldD4+cklWxRSAF^#G^J8 zxUYV+*^pJv-Sb7yW7$zZ`~RT#MZj2cmF#^ak0LJGDqhx$JIO_+R~yMCk$QTcsOO{5 zoDtWmH^_0@3eqBX5UNiRw|~I!h06o0kM70SLx!un_ukh!NE={dQ{VPb4{XBPXaUcr zM%lqvEo==;73#4RQYh&xhX2D2XU{X$r4`8>xoR5I6Ye1|xeFiWir*`2Ko0Vdh)odh zES{e-(i&IHPJR6`Kn&&b?X*LPbcsJGh1B9YA(mSNb_GHrz@dydpBkMX4VG2*xM_#3 zW7r*`EbYmCK8&FdYXSRCxuo$v7?Q2Wg)>#*uIFu}KsDUn0mA^VJePBy#UHugww*{m zb^hIc(`6|TB*p|04BZ~};4vf2ac_s;vaA5`J?T#Ti^gacmtTU)|pO0FrTEMptZ zzQZlpg~X6DJmW^Lte6}f4-mnBp4k8KM&*qd+VEyl1IRbjdriq*^}(`wueh+YOf95C035EvDB=XVY9p<$duyzDdbj{zgEJ=9O)%HZfo0YSs z7n6N54exuVmS^GQbac#*I1#Ts)I{BMTeUg8v_`&E_CD4+&Ili*N6L{QOV?<%PTZCM zVz#-lOe*iM3&6|!{}`%$C(9OlI1n{IFsQPSukap_cXU$MYiWe4E+&3cQTt9u4fSl71VRmY^a*n zbl=t1?H2ZUZPYa?6j3cFF6W;Q9qR- zno@*|IT7)}H=#hEtLgDwgI1GCYUY$o{J~cGaB}U`bg}LFSbrq`EL{`3R$LaVLs$~h z&R~u#91h%Zj@_DM?fT+~@37KB)+9l$-ak@xCF`+d3o$<6yPB!N<;T5`Uk_pyr7m^O z+ej>6M@!tZ%Km&gR8yTITQF zwT)QW@hCgTrr0N96C_QovIF^4lKg-wL^>mxC!)*Zx4G+|5Ze2E(Ge{xB z+@O7wr1_-WTY?2C_Ktb3c+qlIX~icNSQBN#@B4%_^ux%UnvMrq<73Cw<;QGvn~|lm zapg%|@vayFst>cg@QlC>#mplQ)UrQSZW}4NaOTx1vmY;xcV6}>-eu@tcTQii&3D+Y za)n@Bm}^;ZB*$F8^8GYcZ{XET75dWD57S$l2Djp#)qD|KB`;qcu3Wx&oqXrw!cdNU z{8jffGIH1Ky~mqMaW4l(My;JY!*=)R+t<|%ztk6|e&pZiB9)TSiGVtpPSb&}j{fE& z%0#G zKsiCqlYe69Nl@+SQq+z_UDo~!@WQL&sDu-$cU~^;oXG89Gkthcy{|fBef~|Nbn(~f zwM*V#Txg{O6|QgG&0L4B*3A04_@Hip7|A%adFpxWam4@7i{+m;mEgGY^Q%6|RO<^F z_^Fs7N>T~IoPSvlCKeqaPZXSor^ga|0qQ6)2wb9GJSGhs3e}8b-r7I&VMOQV=Xs432uD^ZCtSYvXSJy7b$&5T}7loym z0AdWX*+`xojHUAxGItjjNW@|kXAxY6#)A(B{qODH78AS?-ClIQ%8*ucC82KQ9qtkR z$WKJLw}uG3eEBCLvILZ44#RQd$aqmz{Kn#TqM=7&v&BPueIbVA*L#vY?4h*@V1LWE z0?_V?2i@4S-La?^C@Lgzm&WnlyQrm`nLiOc0HcP1A;xZh*bjW94*1t6erhaKhleP7 zk(Ucek~h_|11&$%aZPH>!z?Oz6a~RoTnO}JI{|;96<&1`+hGZ%}x)T%6xKe4Hn86u7wl^<6us z460(6_Mp)@`yHodZ8{)D=m2VLgeMBa@&!e@4b>^*#o#D_K@(qN0#Eh#47)7xABrB; z1_O!O?(v50d3WsHUHedDnFPueRD1@unbrkMpy~SxFQPeuT)XQ8-E+&u%BY-D9NRPH z_M|^JpcA)ldR*il&cV(WjyWbZ$s+aF6Bq$fRwg}a=D6Hrt=uZN+3y9#4m}tl7U#hb z4G1U~L>|X93UaR4hvpb$`D7Pkx6};CkX!olWGFi5uSL~s|(qC7F}{*XtRBDBXyW6 zQ)SI__Pf_oyIhsjkweHq*?PiI)LJ2oMa|8=g1yFQv!eUp_oS*|*T&JqZ>uC-pLTe< zA6r^eEs=W9df>VP+bzdX+$(}JZs`0Na$Xyx^3hmMJkJm110M+WBNo&6!-=jghb&}S zA2pQ=)betzEpdHHu07iXNm8b*pxB>?TWDBN65v?P(-#a=!ee$Uc(EX-luHoqp^WuO~e~dD!r+ zU1Vev# zK+b(>@BF9&bB_8CL_?fktl`LkYg)a4 z=;jduQ7lpSQ5=M^hxn5jdl`V?aG?NL!ZoT!?bzT^7{wCn@!=7$c~;~O1V zZSwYNBBvWJ4-F65o~uxLc%pP?zIiWZ;aQG9THGM@Rb{16Oyt3=_|I%>Eh69Z`gyI+OR4`(Zr7}R>ptP&BQT%g zHo`~cAgjw`N}+#bvy zqh_yc0*k!RDY(#O@_V}IaoeENQl$MlhmG@Y7TcM@vlqYsfJ+iAxjrum_D0#$Jt5L# zN@V|lI)|fIuuMXk)zuAO!`s_aP6ubZ+gs6k$@K{%8>4~g2JCH&8vP3FNrgx@U192SWAi%F z9$d3MBfE3^i-$jQ7FC&hw8luZTF9oC{NCzC&!@XH9uUTIG}wT7jrj}J+N$P=$db(C zst>!43mFb&-*kNUf$;c}j6>pT{?SyO$n8Axt~n|)oy5p$KPrLLAB!3*(okSvk9~-0 zvckN&-M2iDO4F_>z2!F>prEbg=wE!Xhwa)v>B>Dinrv%L{PWq3OM`W%)qlUP7rUi) zcb4SjUIkiQW}u$cUHSoa7x-Cpu>LQ(Yxt`p7 zVELA8?yZcR^xu}>`x)vvjtB=PUi!A4qD7b59*@|8nfkoVu8T+)mZY5^B%vH#?S`aD zkCf7=LSqTv@#TfLd~0R8zD0bRESPiHkbU=EzW&J&GH7a(6&HmXE9k#xmPY5xCBGi5 zGv@H;Y25o}A?J3g$!oi$C+4Cn+h*)au=6agv@6V32%x{;0=+Hrs7^7i!Ct(<-`)&t zAJ(by*H8Hp$iC@B*xG;<>iYq3gm`sHtX4%gB*QIyM*7==tyXjCO8hP5nEHQO)%agu zF!YagkN^0Lzb_q`Lg zvUpYb?7E!k+NR)MHqoij&Y%nCNPozArW#2Xh((P{{X+V?iF;8Lo2}HLGX&+$6vi|Y z-tyFS@i&mWBJ9|MkR+SC12$q`yo1?Wn->&Q3@R<3MGEf(zmyQbw)4d;s6=+otr#w~ zppI5huyyMnx}r_=Rt<*|csnf@_nW4(c6Rd}TV7vx_7f@%wTnVg`R(X@{mh8PXe@lP z7us;vrE8l5`Br}-o~eyXFgePIOv}$~ixYOGeshaEOG((hbz`#J$DWP7axA5+_RL(Z zcRMz+^K0xUdQBfSQe#q%ZOP1c{ z>rjb*@<}E;%HxtW1<4e91wspeTc5M3d_ePqAWb{5m3h7VTQ()JH8WS|3(~(fRRl8z zf0Ql-+f%XirZC6&dXzVD-?ZORD;w0+^2DWq0hOzAt*_skemwK>taJoLcdnGC0D9|Q zML~xsYz?4%J|oKiHJpPX)_<`gv32oI-7;zSTN6!0It#Bf#q>WV34;R5(N2M-c%@l> zC3F_bu}}btc)5mt8w}cSq|u|ttDu)3HZjlopeCfih4{8>t|iZ3{u=C+M^~ZL;G(LH zl?Q#YPl||jpC}i2E7blz^yc37jmv&|ukUV~2jq?a=*cuy%=OY#EL}AOsUp}Ab>;of z#;QDBNVL43;;Z0jw6;qt?_H>f->zv9n~3HokYvNKJF8j7JG@%(J1D7f&u8%xo+nF- zzFBCw`4v^3sC(m-z(1+tr1GHTlSB=47Wp5PV<9P&U~e~oBqcSfU}S<+V0)4cTN9sr z72wKh7uSrrXmMY?60e%Z>6dcoT|mb*xPf+r*@h}RR_Z)1n@HpiQYLeqt2<{sJS%8Z zGtvE2<(udgr-4V=>4WH7bg{oShQD-~0D3S@3eyhp3u!?yc0B6JI3x$F%|YUf?{X$< zeAo*Qy!`h=Qk7TgDQCvaZ;*Jxpq+S8IL(e)7!q{k`SiV(*nGZOzs=x?{r#$spO&(H zNL4V;u29SRXz~5Yx*~lAYBYl=XuC~5ycjfAWdt(%?0>5xP2>kG56T`pAWM=+a@UZg z%fQYgh#P)51*LFTtRH9yYHGHlKL^g>VSy z0+y4>7bFeKkbEepx-QNcTfS}+-E?n;V5<;^v3OQh^wTSv9m8aantMASdFZbW{8z|= zQh7kgaz=S?g)A&xAOpcnm)@uXU(R6mZsOwTA|xVwv|?_q?RAh5+)!jWG-_Ep;3^~M zXt}RlQ^O7`CMnMN#;bE%l6B)9NRoDd=6qNbX6Q0@8`wh#0>+55AeAz`p?1wj;j) diff --git a/docs/plugins/maker-setup-images/notification_message.jpg b/docs/plugins/maker-setup-images/notification_message.jpg deleted file mode 100644 index 3db0278bc69d2c450853f3cdf09cb65eda4544a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54141 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%0A$_<&(FWKyml*MEh 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 QfaCnLZLfdk`&Nhk2ZXk0`v3p{ diff --git a/docs/plugins/maker-setup-images/service_search.jpg b/docs/plugins/maker-setup-images/service_search.jpg deleted file mode 100644 index 49910be5e06312ae3829a4eddefc13ad91936170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36433 zcmeFZ2|QKb`aiypc}(Wnk+BF-rVJ;QIb<&4B!pz1GaQi&h0KwhPaz>r84Ed?Ly|eO zV~UV-j0b1SQysE0I+$jY) z1qB(fhKyf`r@uq6jHjRIpL@9I?C0p~=I!t1qI6bB5QAO@tKV|+bMye|29Q4M=sXjw0PBEbp<{Az@O1$IhG6izaG;|L*bl>F zkUr(<tbDi+)`Gf_8AY@kgHy4laMtzw-jN z1c0M%Mh=d`7aVT8-SBnrcLuxs|G9YF4glxvXE_A@OwOK`=HOWfJOltYzzA>v906hA z0(ia+{(b}S1u1{P832dk?;H%y0{~p`@(%HJb8+<-)&ifLv#`FWqwGmxg;VmX0C2bt z4(kBGCfCpB3*qYeuWLRZ06;YXd_ISdK=`m0062&Oz`I2NVBh(#YoZ(A&>jK6`!9|G zzJb5jqdGiM0}KEQzyYo>AwU#34#)rsfD)hvoCCB01Hc5Z0ImY|AP2612RQN|APl$* z+y@>2kAMsy2S5V(z)PSEr~qn#2A~OO2fBeTzz{GF%m53(3V;Q6fCC5wLJMJrutRtu zP>4808lnJEfoMXsA(tR#kgJgE5EqCiBmfcyiH1CYq(X8a&mhH+H;{LbCP*iw4>AhD zK$amJkbMeD3ML8;3PB193ONcD3M~pl3JVH53Kt3=iaQkdD3T~1Q#_}5MNvc1MA1z# zL@`6LLa|K=P%=_-Q68g|p;V!~Kxsm0LwS?ZmokDffijcwIb}Iz9c2gQ0ObtjD&-y( z4HY|;FqI6I8kHWEC6yzU4^;%!L#iCAmsB-WtyBY47%D6kiJF;OfLfaREVVxM6>1mi zAnNHj*$*Zr$DDeXG7;n7e$vzS3=iF*H8D2?tuO% zy*T|@dJ}pl`VjhL`U3ho`d<14`U3`521y1D1`CE;40jnGGn6y5F-$OQGBPrXFsd?| zGP*HFGCpQ}&G?ZK!??%9#w5jbf$17k08(|t#mp_t zQ_T1y>_=pe=pS)9f;jTzNX?P{BR^Q^S;SeiSnOHuuw=4Svh=d79;H7jarDAbhocck zpB#O6bmZtZD?6(^s|l+I>qFKO)=t(XHd;0bHf=U1wtH;(Y%Oea?3C=H>=)P_*`wJD z*xT3_IA}N|IrKShaXjECXYP3Ja_)ZaT^@d(b3D#G2|OsCA)b9+VP0)scit4$* zG+ne=6e|W5GZG6ED-|0Prx#ZdcNNbP?-1XWkd&~Nh?S_7Sd!$C)R(*?St>bkocTEH zxXzco5 z&cKer9AM93v*$$5Ih}iP?wi&Lty@~Jw0@jFb>8=U_4(ZkXD@_b_;8W(qVC0ni=VaG zv@NxBw5N1LbX;^wb+EdMx}mxs^r-a=^-}ak^ab@D^^5hf2FeEE2CarnhUSJjhO?KX zF8N-nGommuFiJC;FcvrVG_ExPO!Q6COeQZ&UiP_MZ%Si&+4PC&qM5u|m|2H8yE)vv z#C*r%yhXCbxaD!n0Lx}87OQJk#a6r47p+sRXRgRy3BS^PmG7$C)wedZHdZz-Y_@H+ zZ8K~at|?x-e{I-K(k|Gp)1J@%w*7lJ3)}%-d7b*Y_4ShL1P2p`=MLL9^l#+ez&c)V z%yL|DI_H$`wCt?moa+4TrpC?Gn@cVlE@>{yt}xe3*HyO*ZaHqaTY9&Uw|3o4+>6}F zx22-7rkJR`|0BNW_hZ zW`ro>9%3Orwc|ICWfu+1mWlg=4 zI+tdYR+BEAo{+wk0ng~nJd=scV#o@}nt6Qb@!M>%>_^#z9M_zoC+DA_as_hZb9bLQ zJ?+msmsgGyL_R?7|K|4F*JrxVYMx6x&&;RE56oXIuqx;%R4FWe!S~|93u2LH(acM; zm#xLh#lx7wcSeHHJ=ne zRre_NRDV|bT+^%E`}T|Km%2XnzQ%r7f78Ilf%ZZD!R{gBp}t|u;jbgtMrOV`eO(&8 zJ&GF(96K0~oS>dam^?a}IVCXleEP&RYDQ`1J?0|j)2#XI_?+Y1%Dmq^Vd35)^J3;V z=(pk}g{6jNo#ijzZND$9c&{9+-d|%~%l&cuN7eed^-tI<*ae&~j=b@3lXtUd>&#a3 z_T}xV9gm%Z-2^-@{^g#^UdO)m{d9blj0`m z$lNFb0OqS8cK8BfGTYyA+Rqx0-?1e~AEKPYf8lWHPY; z04PTR;DgWa`0%hc%~1e&edu%rJ_$t}p8l$kKLD(B5FZL8B}4?EV1-b!LddNE6dXG> z2u#58=h_eoN-Am^S~_|LMzBKlQGfzMNl8IPNlkqS>LKCa-vKICYPMtYS~TpY4zwaZ z913?+p3#Y(f78Ti)`t~4eZx13o`H*-hnG)WLh|?tsWXa7$||a7FI?2t(bdy8Ft@O@ zvIZfUqm%PZ7gx7ie*OW0LBSz+qVL7rkBy5@NKH%6$jo}2o%1}upzuY}%i@xX%Bt#` z+PClOnp;}i+B-gWcJ&Vo4h@fd9Ua5W&do0@ep_1pj@#JW+TPj4@9iJ*1pz33XX_8n z{u^JcAYT+zRFqV-hkQXOg2024m5Tb9JPn(cDXoJKyNJSFI*#)x&)ziAi=H;aa^CRm zW8e}ygAvCavi6g+e~z)Je~Ys}82c~2#zFY}J69ACaI_Q@;G?1h3y9bb3k@v@y1)X0 ztDlALXQ4kVAQt*lA%mSj4qH-EQiJ~)>1gQw{HK5ZOr8XN@lxb5fQb?UE+$G=00xjq z$DcP$&-S*VfUu)j@%2_j{GBMbG0TL7$#*V(yN-#vva7+C0>~Fe?&o6+hC~e>UMrMz zO0D-;P5u6x3^Ne?mO+CdVvW+DUXU@IELWe)2NGC&4cUJ*-ROAw3+fx4ay%y+>s z+sJBNBA|YP3`Eu<2-&)Sw1>?qdiQSjk^#WwpS^oJqLpVBJ|9b>iT-u-U(^0;!ToyG zehHah;`Nte`IAcirBeSBz=S*(5^F;S#(ZQsQ3O>?hzRZCm9-yzaXXHIA0l+nCTPcX z{E3m~^)W}AXw0{SSIIG9mMU!xYzE@h^$vtnUFRQtLuGccINwy9chThWIdU~NQ|djn zl+V!HPJ`}x+wuBJ!{Sw^#^cx@E^$e0F+qH(eJ9%5*DFHd6&}i8h^o&Mq&MfbM9E)B zBb$gUar0$j1H4o0IEr99m| zzMriQW|O~=fv>tGdOvJdJDScP{SaCucKZ7!{yt}Y<$z_P|c_U&#~ z@x)^4Ua@@oE_r>WR0A2AMz8Xse(XA>6Nm37b$goJX))V$46lAon#Vhd?QkVK&SVf_ z;semDl4Rh#GRb0_g`}TP67)KtCj(!=-ZL~VkbzY9Es6vjdW7kKbe|KA^)Mmn?VtxI zqDe7>FsvnvbdhifHU8T`VVGeu@ES>^o8B`YgzZV7&mGSvdiSE29Bjz|%^=82G|}iI zY{?G10kt{!tI0n*64+l31omqjzvknwSL(0%_%$E@NRs_pAHUYeul4au-~PfM{}_*b zo`jR=%@2;;vhlC6ieP(UlBwN1Vf)=WQOsrNVx?X-83@taK`rj?R1)*Tv<`&B!rtN$ zUN7~}+QwB2N)Zu3(zf+bna}by7yX^Z5Nz`|(A5ScI2o9!MsN7<(-IRh(fe0J;HAMA z+CpliRf7d?N(8ulW(&;CeKquIAk8Dd==OR|$2{p2HqSh!(@Kr@evH(kTuTfme^Ka* z=c(a*fps;>e!Js42Kd@g+`x_(HnvT}B099>%JF(<9%et!9;Q#U*ZW0}s=07(Sw+OV^{q|t?P>nl=Vf%3#T@nGN~s4a2eeGHB{zJ-xFjkY zz8T~``7y!nweCXh11$#pA=Hg3Ky>Z|uaGdveXknSDg`xCZ;}BK2Iw{kw(t3jcrKz7z2OdJhOJukp|_Hx_9+?>#5BbG zuqGekYjHkeS-^6OI>Iy;fu4nRz=$W1Wlqx@axLJkq5B35o9hW=fU{93>Dg+Vkt*7_g7!Op+t5|ANKaI1bj^kWXB>V<4KLX(^FXX&Bb=d6MVPi6*A@Zp%W3I3($aFTM}QKFiz@g_y}B1GFY_ zWo3`!er!LMMU|JEs~kD`3Jl#yzF5vp89Xs_2f11a)=`iOyYygYgutPT8AKkDo6m4a zvwD++IaU?4yi>~m$W!EDP>NIf<}T2QnwrK-uCF4n(K|B4#|?7WQjArGhnxIBnaj}n ztk$>h)@wWp6GoC#zMpNci`}~787`jr-MD|3&bjI##S?_JJ&eOPf8~x zLESsR zZ&P(;IGWG#iS1c#Xz^(Jm4J`L9^otqB{5L45ZDtoWL!w>Zsm>@q%T*5&z_$&x+UAs zt~{o`HqV(%L80Eykyijj6qv#(!@yM)^&pH5Z*<@uEV)D1*uUN5*b#BI%J#tgg%(v! zVCH;JR$Z!L+$2R|L+UBLiF>>q!q(9dgJ|qk_-MzDFMc54Kq*+cB|;jHnjAdg~_=8AHNH~2!G;$8b7`hKcF5|=-w!WQ+}X+ndrfDfs4%CmblCkuWxJazQ79 zGa7$fa`nW4ZkRgWKd1J7nA@{3Wt_!GqacpCZfu$^f8d2~sz$QNS<%;4{Pz;{CKBi* z_nCg9NI3q#bD*<8K_cTtc&d39H17*hq)dD3Z3rA(kp!+ie8F*thLIw=wq_>l4 zVDp8sc*#9zDt?FzhVox4MK?WvF$bd1o;ywh91fx)YdzG^twxRh6 zwz3T;%Ic1LdlBLk*7tFSWWcDE-2a~<>j)svQK0N>(rmB1&eOAjk!KdSV8` z$wQL_Wm?gZz|m9}UzAyVo50I;v9>nuw1Up(5~q}|O33TuX8NSsMlj&lq(TN9yvF?O zv)YgXja*B7Ki>ExtC_lcRZex^y}NkroMQ%7g+F($+7MeyqVGFk3gg1+yuof_ikf>_ z-0H03ZqE;FYafX8C@vICNAMP9h4t&)S#uE<(qRU|v_bC)5gMrk#~QKFxWXu_@zvcg z`9hP~u7~)IyDMLE%Hees%h*US@Od+<*LTf(=)ex%h5CTRi=x*+*A>+^$Xc!|f*s-T z)bm6HU2xJe3?ouA=*6K?o?Y)>lXku%y!$t?QRB$E8mbtbowWUupRWST!Z?Xh!;NM2 zD)_205p%&8uUJVB>$)=*heahU#?XrlwLbPJ-JM*Ms0RWx4OlKksC-928byQAJDfOL z0=LrV(OJ-)MUdIXW#p$C_pmWm(rI@bGb4UbnbGC`ZSEkOScrD+jU)p#EX~V}Oc8yJ zP!qOb&(Ju}vA&|bukmZ29Ro6_^a{-sbi3w+ANkUA8g%R!67$YXk3J@KSlRQ%Yw{~) zNW}SjoxOp+k$$xE8!yvA((II1_M+!rwC7?Z42i^xMHIS#3;^IHJP!*7f99Q0sJ*|H zUW-ND>uFAjaqZ)~NShH*8*??5s3D{fOy~sbcxxTFFF~ul)*#px45A%HPdJ9ZD;Hlb zIlQKB{h~#2vBWH-Gjq!D-VIaU(S#GrB52`7bmjDD^o|h`33HUYUj}M8H|+OdmzI8e z!Bm0})rim>B8KcG@Vhg}ggmi^ ze#DzF>ms~8^jPYmNrgH)&zwapV7ulfO2x|<71lG`C`AUM!y`_SJ|UUOz-{E1bjvjR zwubUWTw`UKN?&=v3CGA@XU@sKcTx0W!n9L2g3bl00Fmbf5TKx~K(Cq~$dcNG*y^y> zs~s3d6UNc$kCk=}UgB*%-M=+wdrF2#csHzB`Ie?tG363avnF^E6oFl?&7NaK{a7jC z)ZH1}k(c{JgWoQr-JcwoZ7-j2z;~CZ{H-20Txpe7raGUkhElb@BQJ2Olx( ze@FNqDxLov1u*b`Q~-}z@Fx*X9`4QXD#6-zR|l8=u&ZuN9x4Lj3psQ-N~@>Y+Pl*> z!@eH8IP{Kl8zdj?;uOqXHjv*8`;yVPR0(>=y))dsS6z(k%u9I+cSndlUHnLwLHWb6Ak76~$bro8*ua_A4brzpzOSkc; z8c1;W%2_GiYEbJ?rM_LsBAHY~+sQGf+OA+EmUGKU18RrVbp+kszq_^z!1TZ^P_i$a zK6Jw0f?<}Splh22ws#41ZSysFZNoIlz_V~K0;f3{NYOxTcMF5RC$bRuK^2?|I|rgf zP_f_9J#@2Q=p~sevXFH0NkS<<-Rz)pOYZ>@P|8a(V7|G&&kZ`xn=D~_N6Emo3YL8y zFmBLPMF#dn|H4$1<@>$ZVe)a7X<kdmU?07#TCa( zWT4?g=*VX1!Bx_iDPbatqMqYh76Cs>Hv;nl>Pv!ir}^WauhS0|iyagx4IE^Ho_fqJhl(&RzKSZ0L9Wf} zAe;NTE_o0%UV2C;3F27Vb}~R=Pf)>U6}`wWgv$!@-`9l(>V5T1D#~#9xbI|LU~2OP zWtONnlrPDvJ$Ytz!1m1kX{oIf!$nex&kO0L&kPNi_>Wj1&Q5c{X5vUnu~#w?(L$%* zyn7uep%PG#N}mt^ku9umb%8XJi8RJvW3@{*OEJ3U0*a(=v4d$8S9>f<9 zTn@;W4)6x^%%@YpH1no%o>J2u({!&sBQVXJN!mw5f9Sbo>Yzf|h~HkjCC1+$~6E)$D{Fji!sHG(@yB;sb$?AlirXQc#| zMd_`B9nfDJbpy;I$liXbc?@5&g)eQp%rxFBc3#?62iC@P@r~@+kcX|imgexHGuA1& zcx0<;p3oJW?LoJ0oqSII@}70i@5`D+Z&LAgE$?oMsMK)?l;~P~la$t6_K4_tF>>zD zY34(R+a19?f&U8*^6v3;uYU^2pZP&{szs;l#DTmhkYla+(pW!7$bnG)WEq9DLT)9bn?R z6Aa4>%|*0^gMsrU1_YkN0| zVEsT)-r-6H?!P(2{e^hYYNJ&~5CW6&k#E6fOtBwhypIEW9}jF*K#16oC_yK-dUH_(=uF@?Qlkj5ka9_N2&dg2(9 z!FC@JGYTyD@+@`5C_+vZKc;!I%b3o9SZ^&8>cEi$|LTFb{?8}$G+lEf1EQ-fB(x_3vn}UlRxBi~i?L9Ndl6G5v<66;#;YS``oujt1DZwAJ@RFYNmAy~Ey) z2zMT%5}*JC-th8bK2@sA!ejH~cumje26^odHOAlC7u>sfHQ|%|spjj&?*=nF5jNsO z@43xqyOwSfL}%aYuvC3@%kt|W;xU2nPYk3c5;dr5HPOzX{@BUfSeg=yzA|*3GO)1Z z`K0l+0B0s8-Cm;v`4zZphr2r)-E5+zF8Fy7R7)jH$h+#h%Joy8KIdspbsC46W$~%zPI%uu-m&}1q0jyoaJj9;xQ?AN{h{4l$I+8D10(j7sK7Q zc5;afu&b*Utz3R|p7?^=<u_ z+8qceHEY4mee75{BKUl^Fn;jgIQI@A$KPHi{8jSa?l&6HvllH3rWNV_tcCJ`H-$ZEs}NWGxYwcQC`UIysAsA5%4bIXbpyrG5YW#KfrtCDF!V zkFV%8i^vFjpn+zr>o_eSWtQV@N0|E zoJKT(FlFYqMzzK)do1Z)2xr~XW*KFpxF()0GGI2Jy!#b-XA6y&@LKhI5iw|gb|^wF z?1t{3IxPPh^Ovp;<&ljDY&?ruf~E`a-UGnFdnz7IELBZh|9;Jnb*GHvMR2UT1TN({mV4W!9*jG&0}dnpYZzJCwdY*5eJ8$; zbKf@B-3@#Z?!FJj2jSS8(3}Kb2OQ-GZrpbp<3gTH`dL+~AgTZ>^G97FW_0Q!9}zXk zRaNZV4iYQ4FccHhh@4~8v)fuT5TolAp4V2I@X{6Ky`BD9*BfyPym#U>ZkwSd|z9e_KG|66WjI1CnM`D7QN+RujWp62FFUEo;p=&#N6QuaFdH^Bfea% z8d}QiQLKz;G|K)Krt$Q0=jl2!aOIi(_Y7;?3Asv{sX7_k$uqkKaJ=-l)x;wF&3))t z=m(`d%f|duwIhxX!%Dr$!1o{W(KjhNTULX0H9_dSn+2<0lcO7W>_zvXMT|l6UNu;t80f ztPA(Do1E?G4K)&7^{fUT8QAd~Q9pfaWoJ#zCPY@0c9GtPFXXoFv#%czb?!S7=xnH9 z*lGMv#ZZL*rrZX<@2ylj<6-nrZGxTYk^F@4yYV!Emx!UxzBegDnP{U3dPEawCEtWS zu*pMW%6xthWJ;zp;v{~H9H)Ph_}pI%FoEO>Z@2mSbTHi5WU>Q8gOU$WF=gvhd~fSR z`_hAqU@}T~@=<=x#HKP> zDZd2nRVP^^9FRi6vIzVMFu}Cd!^FI*Z|h0-q~{{9?4q8iL!c9@4(~_m=oW42eL8(Kp7dRT8|^i^b-WJBX+pc1<7UTliI*)*ngZ z&pN()aAzc_Fw6{}@eF@wrP)Rk{nFOWy6=oKm(Rq<*ZTYcRu7f>S$q;^R(4=4Z<(=! zKJpn}ZfgR!*SZVLtB0l%3_>h`1jF8KB>bu423 z^AG_TNd3=wy{)TyPMZ!_^PCA6p_eWHQE=tieR0_hwOpx^Bz?(9YKea9P-cnA%mqH_ z-OU})SrnzN72@DBhZsv*yfXPQ#h+jI>-inq_^d}J0S}{K=-h-E#7r5q0^Wj**5twl zC6icOt@dRzD|%kocig6%6orVLY)$>7cNKC{f5!S7-ivMHnz4_GM03w)GY>yh)UvYs zwCz}D!O%YP*^Myy&#&JpUi!vKO{XpSk))=SvF0vqzos1O4`UTg)pNRf<3@P_=XGx_ zK{`d^4MdXym~pM)vXg~(f!$O0Vd|ZgW6^w{C^oM= zHJ%fnh|cKUb>z|R06~&Oqjft$$4=n+(~}py;?mJUQ%ZOw-Xq`6)}(M`2+x22lk=0o z(%6jGxa4&;gWY+i^ zRh7ybyM}wxI>mqk_umDzqM5hueesvBe<#%5uArA7fVql-@KBhDY8CH zN#w%f8U)xr-{{H8`||B$7Hw{%dd*7LH+(7RnTx83=!SwjFpi?yVe~fi>RK2omnYYW z^ZOyHDdC@VcM~*}9n%sB)Wk<iUBv2n2a(u z?UCBCG^wqrtrM-DNhTUM<@Wr`(H7vw!J9HSC&s=*S+;1-%Wo`WpAm+%i0*4HbDysi zxjIOx?0TLcjv%se90bZw6LRWyin5*hsK)LMSe%sf{)68&NhF>T$1rARJu_c{SGF88 zXni&C^&_!XG<6wiaT`LAKtG*MLRap#!A3jUD}vc)U*ry3Uy-9K-PH0E@>#ryhh)Ld zvrtjCMZ`Bxgr>VpEgs3YWUIedmDTM(k{`I@xLGbW!!#!xhVOFg_w4c+hH0>y3`uXj zn;kUO4$sDE{e|%R4={!PO}G93gek;Hes+8tAj9X28*|g)@fn;O#JrCd|Y_iMWQF?g!Z-pGO$pu_l>xDfkR- z-aV`+iSM499)s_c))2G9jv6lS%Mfhr3QKCZ!VSz==Od<1ctpeeDME9IgNIwQMM29i{13A4)bKofb)7iK0|az-qI!KBxUM$y2*~;%rxX#N zJhB4gQa6m}HhI8>^&A`FmTNVoBn9 z=2q5Fw4jUTEc&*I5Z>Adhl)`b_N?l$8I!KpZya~cb2@$8$)oI)!y~OGAZfcF(Sm|` zn(VWgkeE)Q@kE4~?D3DTa@XHfId&JmFW@XIEDM*ZPF`?n9wi2?k@9V>jZKgCOzltY z3?EG3Y0%G*cyX__S`0Hg#<&>kH>dgLNH#R)M(7G-cV}S!)ze`(iVzw8+>(c>Ws#aT zgjp}V`0m=reA30Jh^!qrA)*ciZnixRyWPvN@_ISvN3<8_K-Xc>-hS%b(u0ZBy9w>7PvglKnQboY^eP4uAF$WWX*hXK-A75SfKGjwmiRn&tkDsU zKPk87fC;~$s_upfKW_V`vo>=q^rrKA^}}rFH9lemxGo*hF|dl-sF}V7c{k3*TCwZ! z?;Gu!ecnW4`cA#3gO^7%d_z#d_*g6&v)+be>YV|jJo_5uZ;Gxlol%yL1$LY@EMsq) z(XF~;U*cf2Gb`#cOhsdT#-9ro_ZEorWzO>`Xc{ayixHQkkkDq`L(B*)FK%W`g-v?y zMtJt`m62?TDKIbSJ!ExtZjR@Ds4hYo};_A2OnEBj1cAsYE6l+VK?!HnDvA^P7#-E)*f2h+xsol zCqF$s?e6TicEu-9OIJLPB~Il|>Hd589hO&O)eGVKOFy>Uri1#Ld5O1w@O&1Ul`>p8 z^M15E?ZH5{Y_f-C=9^oSuvnx3{xlpPFehXFAy4Yw`1iBgpE9#p^ZGBg8Ea^@YyD6y zw?e~VGnG(g4}$c8u3H|gB2Fjo_yFg^b@|5GPkWal8sS;+M*&3B7S*mE-&ac4GoI?b z7;&k}>U@DXj?=ufkvqbkr5s>vBsuBDy=g?vVQRlT6T@M84y4XOztR%erb(AfKA?Bm z$-qENPei2kH!w)~Hy5$iJfLIl0CZEJh7eotpwqeh;Aa4s>PZb|U^^d%4mc7kyg|1P2ZOL!%igaK zTA^%Ah$@$6clMCt(R0U!PtIKHR+lGsrkv|mV9AJ_f624t{sHD>f|m{$XAK64IB*-e(M{dHf;7zHgHm^!yB8KZyyM;IJjbU) zYc#xHG|~`rHF?9pkaARN#6Tax6W__cytG<2nAQSCM|m@z7HoC- zJd<>^ef}$YJ6bLJ*@Yvy?^jM3Te)dVPowN6Q{PX%7gCvHIudY?3|LpFmTcpgbti{U zB@Xy{d1M(?dyc{PMTk$;)qF5=kwWy?_hYMBCSR)Xf+jbUsA#v#D_f^IH2H#MiT)rc zd2p%U^C?v+^TNbsz00YT)PYn{TD;3CcKHoluX)9!1$@f&)umpN&M}a{_r-HPNeNlS zvZgi*6Iklcu6ikE%dByrSdIF~bBEUBGi(Z#JCk=5$$9fivYRrU*tZkn;Z9q2%0q3=v@SuR#pjrtWfIiW zgdZ%*Qc$#bp3WQEPlQ9T-qC3towlV3wY^iYlZA7O3Vx@q}lPX$F0n6K*adeWge#OvHNJTR=j(wzmFH)Yu~i@>CaKL-+C(S%QTmvD2FgZ zOx;)Q2f-iPYoXR?p|Gj&6V)bF;MZQSE}Cq9*V%#qB?>fZH2H68f6tyHbG+9sb;4j7Ol^3L`euu%jcimwG#Q}X-c^GE zeJqU+uR=SV^Y0EFU?a{c_fC2ZTM~Sk>06GV-ne$?0E+WP|REH8f4*ko4d!+ zrId@$EJA0FykA*WKc6U&AG`5`$IlE!^WAuCqqe80r)RtqUZSbo^3LkBO04{Bj8S{c z#p33DKk+Wq#%1fxK-<$;WfEgnsEY&&J79cXvybC!Rg&6jO4)hR%OU(RcmWJ+v7UGb z-p(@ig4EG6@E}pGd3d=%S0uO8h*w4)s?YNxbglQ2_2PEKCgwBToVq1giqo>NYr%73 z!>^WfDS~!Z$I*np_3ebVWbo$k$$ zWT1#KhY0-K6Zkh5XUgTl{hd1wWB?9+_G8%>hE`D~UE~cS1{Z?gte6Geu3?xh&D02U9wz_K3CBETb1X6kP446efd}ZBrt~8FHVv1yjr_{y2vj3}2vp z%egnA9g^K{8q;$s;FQWoKl7YQB40S)ofmgPlzbApaOt?OCpHG7>xkw*a{BTQ#<4*U z8)R^lElLpzSWCj$yetGy=G5Y3bo=*kx-IpiA+*swVVyXy9VTLWqvEZ!6_O%0qwc%) zNqgIRiBNqfzoEyi7N><4?n=H#NFge}t$Bc-3UVGYT5ksNTUAP>CemAdMfH7<&K>B^ zqteik6?i0KruM+2e|i>im(hT>M>9Jp60w$E+Ce0s7IQnA%f&l!3S}vle#yG@8^)6b z<){r$VrIwIl-+Cx(>IkXUwVs=8%qf0sbvj=l@@ABZOj$mwHs6u15`c0U9V5e_3Bc zNvOWO#CeVL8Ripw-wH7!ye%lq)re$7lOcNMIiFA>hInBo1ke4lY`8d>Z~V$&+2b>Tec>ZfO1v~W3)hn0 zDx7|cBYf*my^`se>L$G}7o%cL`{;Tm3tjnCMcR}}J&{}c8yFkSRjGX-pR1J={K>Y$ zMn~GUqhj;NK3ZBl$SA6R#WZS+gs9XKi>tU~QJZ-$($;l;#_w(?YSns&hxioydPi?G zl>Rm-aiXj*2jAU(Z22PqQ@v0pyzyJ|wrgU_g11HTlautQxxmIWVjjZXBnet6R1pA; z*{{@gJJHh)KId^&GBEXU%WEece9*D8a`bbRtM47KDtS6jCxlXv&JxvD%XL3$+$XVf z54?G4uH$%CmCxSla=&_^KH-kq_UO1v9b(A3ef_KQjy?V$)Tbw--!5V!EbPtWV-MMv zu6**@21YOzzKEk6c%ngU&E-+wPJN+fk-RvT0Pt~pUj0)B3^X6A4{9JtMA(=t+^=sEZv3ny+5Lg zcC{22v~z2C3&s+rUlY5gDO_b+YFX_kXEo+{yJS{dWg=fRr4uy(|2qC*AHHUHpoo`j z&LO0H!$2RlEnpre=3jiPTlYv_BhNy53*J2x!So#qrU#UtN#?`H4;A6Pa13*nkBrZ; z;v=>+22E>1I-YpGaXfgAmTvQDl%utAXXU`erVjj${2Jj)EIeAJb) zwO?{!lMBzKIEnYh<2SHVP_ntxH=8%;Ec-;~$hV)xQ?Uw9q%H+1TVtrHwZ72diN=GzuRRdX?>x-nJPOH==xlp)~D6Z4U0cZCcH z5!AnIv5Y>!tUnB6%*Ve9M(MmB@GK8-3dtKAp7nn~#%Fr| z$3eUrsKnRB2f7CK9iHKua?WdI-4R~VWo6+?gP3b958Ovf-s}vcCD1I@JIaf-avlA< zHT6poFzZHw9-g^4Oa-rq1+%z0hw}vog*1)yF*O&ZcEC@-^cNVti*NCgONo?EAPQlp zQm~;rkzmLN+#Wip$?ZyFd5yjQq-4Ua?)^RAwwGT!UnmW_k7j?pgd%7~uC$wc(kR8~ zHYJ1BJr@j&hwY;uuAwo<>aaEOv+vDKuvH!l-DSO;6Y#nt!C&uDEGhJ)M1DAhI;}8= zEUjaIs;YIOJouo(lRe+cyV9sIMBA<=-6L=>K;u$vBHcg<+_{gVs!=qVG~E9g!?Njy$>MG?TDlBc1fZ?q2blMj=mQsGt3bP2aJJF?V-qxVyAq)uwAShNZ_tM3NTA7PwW|E+{m3Jj`W# z$EzYLQCFHgw!4$?4qxwv8-}x~;xv)BhXb?VF45h!wf?T3e3};aj@R40WlhqDh34#4 zBy^RVM3!0wlsL?M6YrLo7*nB{`Zob z9CRlc$JMT=sr|8aRcwVFFi(elR{bF4EZ1_+Mfpv4-Xo7=OpI#R1L~{y+w!?qd=&{i z`9UQ4q&Gju>g}l#Yoj(-=UwaHbva@EoM)m-&xZ?ITC0|8nrG}@y85PVc>22M7v)6$ zuKs6Vq5ddr>&N`V^Asyg_Y3acx8j*Z6!&38)jhY1+Jub!*v?N^&(mgqH2%(;wfz-T!UTkLeFq z_qYGk|LA>odA!om%BRr>^G$Cl99r|)RmxN0IE%5s{iCx!@3sFn;m7r*Q58m~y|1Ti z^Kai2Y)UDEtWBqZph(W`)OAsa3P?k)@H3NI|o zyLR{Jj_rTeuAN!B`OL93f7izNx&ymTmgcFdD(h>fOqvvbX7c^u*Z2AU-QB8NzGeod?)6PPthlj=PL6*$nZ6HJ%6#*U}qRNuX!-9lfYz8bBQIlqSY?lluX(j zlc&WsO>NI}k=tHDxoY1t&36OGMRuP<9<(0lR`(!WphnCpyMbT!Kd6@e5WjC?-~*1_ zr2~h*=HHzBE$8~z=(**wKdK+DzWw@UTy=Nnm)Vi3vm!au%gZ`88yl+5nB-|``c5R= zO}+mh9`02^8%^@r8# zP5~E{``Q2p>YB3s|Cz=+1jfeSwgB!if2RU> z!p*7(1`h3AoBt=P|3}LEoALiTm$%w~@Xh?saBTGpE{%UTfm0F}T!2Frmi060lT(3q z@bmv+vVQ{H_wt{CXYOz9{|pyRfHy93uC@PhRsO@t`-h3nGDk zH-q+ebppo`ivBYg{5y6UXsew350?59z}4^nB(1*z7cVZ#1fGZ?9992umHorX`%~+G zsm%kfr#@)9{6B-#`UM(`f2Yd>H{1bx6$hUFOZ?kA9q1+-`wtwzVOQdV!~NSi`+rTq zq1?vPe-8ha)(1KYc*KSva8J#1;GR7+zpua&K>HdN^}n4{|Ca^0IgNSx&-QO-@xbka zz$V23<$vzyfkA}kdEg>7^Z=@5bd^Vn6#h3k`~NjQ1a6;j|Ii4SG6o$4D%|v&Tj1a~=a@L8<Fa> zqX~nS3B&$jKIf0{1GjkO#6I}V%v}6(+U`BGttEo)aeUucc3UPfwA@(CLS~YGa4f4x z_wgwRpC6zPN_0wN-)AVne_q=XJCCV&b^6;u#VqM{-KqS6$Q z&_NN9-jough#-k*h@{<(&)d$q&wI{u&hMQ2-SgdNbhB4>W@gV?vu5VM)~pF*f-wj1 z9X@1p2!KEUz#9AqFy?_M%eX*40I;(IlmGx=2bdvZ01HTgSpXA=_}}P5ki7u(*K;NS zNC^a(|B~k@c;882ZNJL=c4xZF^w%6rGk2kXr6EH*SsC*jR|2AVOd|bj*=o{%B5f~N~hzgb3snOF56&+Ij?2vzxhl$jm=}!s#DSzf$0}5|BK`sk;s_L23|0KPT;t;Mm9$?@La(*78b~3j`oLa zj#&P}lU(keVPU~cd;ky<8WrJaWiEBf#Z`)J0R)BYfG{8mXn1-@hM65Zc4Vi{zute< z|F=J+v0o4p7*^e>>u-<$7{TuYLN5@59s{$V^@;Qj0qG`?Ht-IMhyrOcNXy1Xg@H8F z9*`D_02>I>8auTAZ}h<(+Uqy^)UP}z94){+U|ZO^Jv}4*0e~|Od@dE^?GM(&c?+a9 zLVW^5LAnQ|O}qm2y?1m(%y0Ra zcWx{ICjbM4Kn;@wWP!baDxe7*01N?Bz!EqN*aIg37r+DLAOHvfTOJF<1BpN~kPch} zZUTh>7AOH81C_uFpdM%fT7fR07kCeh0@J`8un2qs2mlG7Kp+q{2oFRMA_{>+X&ZNg=#$?NMg6TAqKT|l?lV;|)iJd)^)ihz%`tsp z`T+%?Tu>3HG*lI;2ep9OLtUYM&U zi(*S=D`2Z&!?6vqEwYi>x!B?Cn(T+zUD-p~li2gvpRhNx53w(^Q#klI^Xcm z&T(XOJm6^H7~ojspm6eYDsmcgp5Q#onaFvI^C@R1=LgPBE-o$^E`2Tsu0XB?u3KEs zxO%wexqfmBa4T_JaJzFyb7ygva<_0#a&PkR@F?(@^0@Lu@nrFo@wD^I@Q`^0dDVDr zczt*=yhXfqyhFTSVH_}dm>J9ib{>`otA-80*7!L16!fK5O_z*4|R;Icr8K)b+#AXHFR&_d8#@RHyI!A`+NAyy$pAseBy zLg_-4Lj6JnVF6)nVJG1@;UeMJ!gC@}5d{$&kzkQ*kryIkBHOzpcA4$+-F0=>(_KTm zwswo}Hr?&JJ8gH>?$O=bqEe!kqCuiLqV=L5#hAsE#2mz8#frr`#n!}y#0|y0#nZ%J zh)?Zd+M~3`anFT4C41iO`5_@GVI>hJQ6SMSu_h@ZX)1YE@`hxyTT4ev-;?f_rpPGDoRmqDsgn69%PFfT>nD3dwoR5G2bZ&x zi9JNw=%F)8UN1t=9M4Jb1yA5acdzN0*-!lI(D5~^}vWn7h8)l4-;wOn;xO+@X8 zT9R75+E;ZsbyxKq^=@^#hK@$C#siJ%{Q~YH;lBTz2k>-dNkJceAjMhsn zqPDWOuXeHagpQz&olc5Qn-1-O?tzE{PY-<7mD4?=ds}y0Pe|{WUWQ(eK8wD&K1RPu z|EIwLgD8U+1{;Q|hCzl;3|EX4jeLzB7%dpf7<(GuGoCY%GC5;%*JKVMjqpU=N8n9m zO?^xsnJ$~{GdpWmVfNKr!#u*g)_lvtz~Z7s%R%TttAl9=`z-}5Pg)jQ&K#0CVj2^HH)>ab&mD8jf9Q2O_>ehu&7V8>*4*zUUB zhokaGLyy+m1NJud*X=(ZQ#=-atkHqh;g~~_!;<5E$9Tu?m%16ZkBF0-4@+-+>_nM zPAi^{JN?E(%p=(2H4=vOL{^_+Ipcih$r-Arz2|+;A6_ZUwlk`Zuorm zHTKQ*UG_8f%k^9FH}=2o|2Y5=kQcBPXc1T#NIYwO7JGIp$Udkvh!N}@Tou9|awgW35h%%`7%lfTyWn-?~T3^Js)EdQxrpv zb&9QyG;I>`HN;3@1Y@RFLWD57IPW1m|&Ig zIFU0kD6ua|BPloO`z7Z~4VNV@CtO~*Vs)iFnKwBic|6511)Iv88kpLDRqJZOReG9F z+S_!E^t^OxhIhu>%>9|SG8tKZS^e1uvWu^=UJJc8mV?N7oXekkK6l}|-SxT~Qa93W ze7}jj`6f?051Y@KADusU>&UH_1#$(~3aEtvg`-90MOC-=+`f8y>yFQzp<>hGr&tMW zI(GYR;N6LPR`=@eE8Nd3VJ(R%S$g2~p!=cT!?H(WkJ2B}N<&NM9y>nnDAO$~d$Q+A zb~#gdbou8B_lozG2P1Bh zL$*z~pK2fJaOmjowC(KaI@HzPZPtzJG45%4WANtHTfMjSy$5>h-s!xn?bGS2?LW|8 zH=sN4^1c51hC!pj<{`vT>+r$ht`VD&-qE9@gJUPhCdS>z=O%n6RwjcdiBmCCl<9;I zEFaQ7@_o#k*)wy0cHeB(+=02*^9SeO;g92|7rYm~e2V-;UA(-+vy`_CUoKnGTxt4z z==1wkx7EcjVP7a~$?N>`HO&XM}W|T%wTLv003J90MH^B49Xn_gZ2ObppyX568;-L z+{w+#2LR7@oUXt-N%YR`UnE8gz|RgDVw!c12WgA^b9;v`2mt+!t-o>hulV8z`C?*b zhBCA5@C9Lt1urN+GmG?oRsk~yHqUTD8O=m?A@iJj&s#ZUwHyh;UJ-+wB68aE^28n1 zesT847)$z3arQUH{?6Al2%mrBiU|U?mWc`MDkzvh#I}=I*+9?*CJsVl>)LQX+I;l&zahWoOgo08_d4R?ONSoyJ@y{v`c=Q-BtH zA16SKW&kY9v}2 zlyxs?X_lO(Ok!dH_bl)*I@kAEy2~-P@0pfpdHNd$K=8m!vXMH-y+H)Sd2EW2r+4}3 z$(fl44R`L`aKan1OX5vkl|LiH4@#qth;&)+8Sldpg`C$|7=U?72b{X=GmiS=F6^^d z8a)()-&-}oMZW?|MUd5pF+Y8gj_4sQ;WT1Wk>ol^m-vF@Gcv?~>1mcHJGFOipBi3Q zc@R($EvzbLzvR&&a)#~QEdc{I zIK-3CZDof#k@c&J-VG`^tnpZq}5T z`+3oF@cj?Niw8}ShVcW{JrvzD3o%-0zza7G74`Kqcc|H22$13GtaEHIPFD&_zApVUt!Q}G&yR{8<&2_fD`XZ+u z9_v|+sDPRC*qgElIsCfdjQ8|aWwH(fxO5-)i2=k*gWX24X8^-l50Nt`F|0U3lrt5( zaT&3O4P*e@;UkZs3$s%w`mxUx4a`LA0+Obb)qIk6vzdk7H7nADc(RJ9S?)%WPsEb) zIV5hDQe}5dF@R}l-(H&~R|Ay`Zi`csij@~nQow$ED}nHXQFa>zF@T2-<17>aR2w;5 z00SWJoxMagTRAdPfv4_KgS_<(A&!_L>=+6Yh4u7CDuGxLZY*Q>O~3 z&!JNmDs@R8XvK6ROj{@6lhbx{##IKu{<Sh5|azBcgzEuSJz(S7?)z-|de@$KLEaUo`1BC>cta-x(f z;7!sdV<~L(9uZ_U1L*uhQ+F5(`C7(yN98DidvEN)BiV*qRL+KY`8ox`+JI4b?^ zrWRINGlc%L>MCY#1opEEv!#sr>WF)m2Fh4Ao0n=#pC#kG38m}B&ePGUHQ3s77wUdq zPmS*@N)Ep>9Sb|MRrQsP6b!0GJYv4MS%7+)e3}7p#Zr)TkdQRv1-XJRH{gMM_&oB=#<8)pEvPPkEe0-_H^=LBWNTnlpS9Yp7P&j98P z7{KLOx&Y0f+{v(qoqAVeLJ1QFpMZ=FO6E z1M~LD$hJJR6d8$6DIU8hV<)gq?<)^jO~Q`_+$(V5G8xzpnd+!|J87awbS4GR?jQnY z1zh97@>ja&B~;ED_}#|&=i3eHh;$qvc3(H{|Li7xUhv8uUX}~piB_!?40$iIeS?F_ z@oMO)wmmOZgJ`7Ao2?Sj8c4e1Y~{l(1Y!e}57tA5KH{7XCbE_sS6v{NcuYJ=rS7NsDIM) zkRn{Qk<^bUt3B~jAiFon`?l8BDF)~sNf@n`>K0Odc7~r=9!Q*clr5z7p?sCkCah>I z@Sel7gT0CauiU*Q!pYebB}^+b0-Uc!^ zAvWH=?zCw)IyY2vD^x`9`%e$iuhh08yLSLVCtR$6XWbq5ae-}8ERO3Aq$_dK=( zG2J^qzJ8M8?N0B+@@QvYReln;wB75FyiHQxxAs(W%TZ()qSbZ1^LeV&YF(KkNd;(kF@6Jlr=O<=;-ei+%$^}fT4ld9QLEg)j#sGp)S8y;CT0PDg&yraY`MJg z-+rjMKB!Ny%ZVh`f9dhLwY*Mu^lDJ-LARvKhfnl4NBN%Wfza6L14!{2?3DUEYc?_4 zd{76=JN0FM&DBzJ(z}UOzBRAQwj6$4hZn8=oZR`Wb=HLm`BXu-`Oo$uN#e%?2!Z6Yv6j!TuRm_!duaM$Xj@~feaItG1ZN}9&mxYYGi(d zSbJmHAGy1CY)oH6xT{`&WRCx=eMcE1CU6qI>oWPOgtFAUVQ1s$O z$(9e}PY~d#O($v9{`lh+ZWD*|Ui@@8tmxt+z$QXegP03Ab{=WLCm3syTtPnjskY>u zAtynMT^q&^FvVRll9unQ!`^Ebxw^P&;69`sFub}J%AP!t`|c?;{^3#O0faZ4yf1t0 z4Mht5rdWpDjW>?PV>|4*RwUumfqZ^Pn<;4q?qoN}lDzLmzwU$FU6c=KIz$16ZrBU1nYpB?uC~l(LRPBvs- zJfBKU%on(M24_f`BHYo+;0w)7*y2#6+tswxko6zyww)mV$zOFA9tVU^zkY=Ek}kH_ zw3&(Wx$fguGA*9uVS+wOkIScXmQ~Tg1%hw{#~oKfIx^Z6xX??(bZ+0U=s@t*e1Dld zwOiQL%|%RnvZ+2&4#iX;eonAX$TR3GiY$kt3XYTN$xaMF2oaz@?QcU-?+8J)*Lm=~ zzk8wA?G0~#%w|vb|htaIUM-zXikAhk-tm3C$Bw22Gz4i&%Y5@h>jc6E`r6+Nh z9kDkqPeRPjysvNcarWCb`#l4pds6%$i^#@HNry}kzUbXx0S^;4@&bON-9E8dg@DX# z5`G%*SXUe(Y0v-p+Nsv&$>r2;_3h(tvo=^|9mIWX`Q_Mpw&5fct*MzGJqj0ZmZ$QP zT^Zg0k@>d%$!5leJ>WtA$_>xR;zJl=%v|LV)rM$K6)c(W zUe6&`S-l|J5gX?Z;ryR`ZZMo}zj(lIs&%oAm<#XYZ;d*+`g3f-OqH`8o zJ-a4*mwc(~@p30lK;e4l_Q)`7R=e;T57R57B-IYz8{c!V8P`qWPj7%0zA$x-KI0)r zUZBKdS}nfMlI2U=kRr2jf~_86@5ejn1|v0ZxShwtdb}r5;=E6o-zRWPxH`pJ@hf3h z3USz3@?QHjkRx|`Kc=n@G@n>3X(?3D+U58-9k9?ov!77m);xUCui`*2-;u^oDyFIJ zMkpcFi-T$aThDB5DOE728%_WxolW`-oM1n2)k7vDPVDw;oDg;o^rJ7>>5ZJJNlz>Tgy6sWDdoi3d;VZ+Um)br%q z4IYI~eM`Fz24IOJ*u$sTNHMhg2p=3<+$EAvW1x}l{lL0HrHKz36u;XfjR)pai&i%L z=HE=59VKj>K##z5)lw;Gio6{C7}IL=12ah>y&@0e89)M-Tk3sqsFCP}`SiNMxzUY> zCv-L4XHy@*8?H43UrX(3&3!Nr8tP}MIke~T7bt%2Guedq3Q&1+vT zTiWps-Pnx25a9}^G|P@GoD$!u7f+WXB1S6-L3B=jg5d&Be#X6*!|^ur5*JzyKu?ZQ zjq$277wr7FSP$i>35+sV8R$9gdNVWGA|>KZ*ZhJZ*dV6T+c5-tSmG>f4Nez;OT;S> zg~wB?jEp@iOm6tsjmX93_V+q+H(Pc{=leWNVpX%?PnanMS6Y4AlZqxqB4z>A28RS; zx#;`OdI(BN5FVA_XT|ET)+%2P<|&<1at(*Sh>&`lovZy-abCVXA*BI|!a1P1%vnxRqaGud zRZtZP6|S2D^B2~=dOHkm6b3!IdH-qpo)@;pKb97R_+4Wq?0AKA$PA8Y$x4U(xH*WW& zr6o5v(26i;5E;kmJ@8uC+9uJlFJ8VZ-ksQ;UiJM#wYIMGcbd~)$Dw)pfZS#2=#W8u z7p70bqIY2>Xnt_AIZ9_m4~uP4rQzI7x(hzf##J_E4-w@zQl3`U7~6oG#+fXW%q+mg z&rbVqt6A{D7MH04$LX9!1l_r%T(7x zb=VB!$F3{{?+r^e^SZm|;tz@lxr($!hy^{d?C2iQ)IhUX-3vqug5ZH9yqq4=Wag`y z(d!xVX{r|$P;e)+t8=EZy7!GDJf>L^9I>dWKE&J=Iy)^}mT*4%s_UVq{H;Rk<`?h6 zGea*_GJt?hdVlv?f91EgM|nSlvIIc4J@2RO1^&oYrAdB`H_YaVlU!PQ^Dgp(aD8S9 zi|w);e~+PA>sruo(7R^!xQK<0X0})L)sCCfH(zF2$=&ETmFOP|Gb{u);ghj#VkY%v zXU~(K2P+0i3z#jbed1AA?`BJCfqd_~09)soyTiIUzdnOwDO6og%p9`5#yZviq-8GR zo{iD>uApTGFj?JEEIrh8ChDTWm~EpnL1ZDo&`Wv9{5*G*eplp|M2|j-eOz{jlcYpS z`*w6i(%a3Ymkq}bCzPg=KVN?{a7;t1A21pwMH3}D$}Y?YrKsdU!r2jR9PQbUto42< zjx}yfadl#a?dFTAL1orkJ^`0;J_O)h$41XoUt=Jl6hi0Y~o zH5uDkp%42`+~A6{p-b_)(=>sB$0j$w(*U#t)dU^En z09M4@{aK#xs4EOWT*o-bcKExo_1SAS_xhLxwc8X^ctfRLIu`jTLd^R0yM?!Wg&;pc zkjxBv-jYtogD$}&(9_ojI`}xXP7ztl!R4`Z!epA(7#@Pir`;iCtG}ff*EVaBQf3=t z!d`aqVysv0Cm@PxyXZVGXvtCPsU)o6x{>oj9j2Q1S2MyEU zh30crE9Pl?p_|HdPSCT@{D@YJnR{T+ovc%pWiXIhQx>ntGa_=y{AFF@>CmYI7_D`Y zdgg21ryCD%^mgM`|;VA0E}YTKmd(Y$+)yG2DpH^lc@x z$SR*|10Sbg?zt|2ayAXvdp`|O()UV>E94k4&{KNb4!ZvNKZxa~0Y6`Y?&=qU0)2$? z)=${PXX@cTx}&Lks9RY+PIpGRK#j^*x*dppkY(8a>%#S5Q(;ha)ln&G$cuX%r~ zd8c-=cMF1Gw=uB=LLtKn^h7h9P*p&LxxRYYn17NEL>C!A$U z5B5pX26h~ey$qnXe(eH5o%Dh1jUrqkT^e2FXOwMmMcV7>K?Zbrup`eJ}5uGpCDCNS6^LkYkTn2{S1~94hg^-i~V0X0l9%N zhIY0J|KqLtzo86c_`k31%A4LK&~{1!XQFn6c)RE1NN`Z4Q03quL->*ALE1f%U9(TM zWwn2fTKJ-W%>4N71;y{hI3r9DlB}>nJ+P}INc}37PykLyh9rpt##(E$le0myi?%9_ zTeSNs{{3AaOCLq{vyFuzNs6Rg25<`T@#kr}@iqoFLo>w6cj2b7li4&625@dEvl*6B zMKqore@?8TnpD%vO6g7*N>(=cqCf4pJ+*=XY)M4J2_X92euDf7Iy1gbA?88T_{Ry{ zH_&?WC^53}hy&!B+&*@T@e{wDa{hbD8{)jpGpUeYgjQ;x!DR0`+IYIv`iy0Yo ziZV~UkKg~8dURO*$CnM^5AIfho{x54Zc{#aT%~X6MM7GCnqlsTD4lILWGi+(n-V|= z&F-3Rs&IB!vjVL$bR!fkLe{bvHG<#mE_J*3>`mrcnOMGyaZuqvn^$)APOZMShs!iUNGv!OVjB+Or}wCB^iX4tkKn*)OgUZz>5p6 zv^WJqhja1av^<~DhbeC4$h$$V%PCJ~a_$!dt5q)gX|>`48aZ~hMtsEpp_YUKS0Lo(#MKyhp(S}xxeJ|`}9Y;*MEN5mm30xdn;%w9h!>) zU|-GC=u(&<6u2?I9z;~8a~M-hsL^%AN1!8R_i1v8!;p@uvt8r$qhd*)=ZEzDzj2nA zL5?IOJ#3d~!oOZ7l@DQpFl2eQZd?*hqNZw!s{<)4j#qnHS4dAUcQ?w*f72kS?B-VB zlVRSw|5V!J0N%a~i!%UvIDQ|<;kCFFye?H(y&Fe3O3CJ&o|=f$wV@AXyShCJEJZ2x z+a(Jmp1?fhzqb4}+XLbJ<);bR8UNV`!T{L#=tGi5$&*#cg9M3>+tZ~pH>OX0c4U@Z zuZMm?-YSNYzfi*HV+?@1$%^6-=*$2lb#Pa!o*bEym`%bfw&uwQWRjed52z-<`kw&6 z(;wIJR3Nlh^!M=E{52v)<>_Sx0FSq0OYXk*^1Q9+mUuB$SZ*N4r>~#jn0h zP66}D*13W*HHRO!tm|n*Xr2zpn+Spxh!DA&_tCpGf-s!TGI3RS<2!Yg=TOGu850L8 zz14fZ_)9y59Sk?}(a5v(>L@#AuDDtYMvLu4jQ#UVcrxw+-KdDRNxc$Y`*#{Z{ndc^ zH|`L!4&^AO^}Gpx{4O#Bz{4hc=c?LK!c@0$Be8E*c+n_!EtD7GnM=O3PmD&LOxL$&^ay=Wz9#U8mEgs`gfssjc{wayXp2lwhvvMFFBKR zC{M$u{*HH8d82-)GN}yIzYp>8sp;YzjbGT&Cho*YGMN+;g#f~_N z>r~#SR>}0yI!A}fBl#oIQ_auMOOy#1GSK2IrD%}3NNu#&n7LA1O=;^sx-q%24b4Q* z&D7zVjH0+v3f?`RUd`X{=F(EBS^4^zDcwu4$NcWzu!jJmMvMxIH7OZAH7kJdLNdo8 zJ7;;(fxv2-=<)aJM_Z3PDc5BgnbY0On5}p2hLPn{)@>-R z=zazuVHEO|oIGUD+gBNHP~7PK|4g zrg+ciECkv(^H&6SY4bO(`|Z|;6C4?U0DTxout82hTS2eyK)ZUni3%~RkqGUKb;_4i zZH_5A{(LxTF?h|^x=--tgwWMk5doq7Uymig$Lxfu(ew@zdD<&93mx1L9X1gn`!B3- zwG9Xve5PyElgoYON5X9PE2*Ek36Xm&yWy<1m#~!X6?@6p*S0x}x9Yo!9Fx;Y) zZa^L;3@L92S9pjLtuCv@l3k6Bj`n-`a!=3UlZ`}`B$Ngv44M2Yax1EQA{&ZFN^aNr&Ox`5O=9` zBE7j88j{g-%$CcbfkV*n+6&EOs8p8n{Op83ouiVXOK&j&#*CnZo2VbP<2tZ)uEq^M zo!6ra8kydw+B=!qWlbO62<~6@vgv_-XH5gBr)dvxbNRCXRdAsy9aq1cprd-hiWpis z_c3N>%jQMlq;}B5{3CIDjNpD+@rwe->pTl?=sreV1-lDNmW^GbQNqxjF|z{neL=-4 zg#LSKjTd~&TvxWPqCy_KP2HM;8;H)|3N`Nz+6$Gqx`eAeychaY6%4uqw>|xLyiv>u zaJLr@q4NYh>TWk+OZBa(t4@h8@(SSai&-qVQ&8|R%jH&XM9}x_xoj$*KS`aukGN$+ zCKaY!ZL(8O_P5Q1T92y_eX$?*P?&|~-Iu?a$J%<;;}8^h7PEv4TDc2LG6G%t%&TPC zIrZu6PHg>Bep%3Qa(kC+_^^6Ks6u^+s^|Xct|Q@G(YFpv`%s28-h}G!CVO`w38?%v zOcfb-YQ#t!j}wp6ZKKP)qIf)eQ^WMUvdEO4c>;ileS8--P&Lg) z=P08X(5Dd9TOfb_sH^HvCIXuU24&EU-|7EhVcaMC^tlHOaGd z_A)|a=M0SCm+4K6#rs{aBrDrC46grZJRQ5s*(pCC7Or%Z+fCnplJZ>g(+TIy z7qU4N(?fk;jn%9h9?x_q$w&>n%*pq)~7j-kg2zS4$C@rnfqK z>{gyrKD3K3_*VK#)g=+i*$)x3fhv9ZQe}?b%8PeyZYx>>XfUJ;+{w1AN&q()QC)Ww z7dj-3iOZSMRXkI@-uJulJl^kWpV!_rzcr>On-a0Ud*YqfN_^85*_GKz44vZ*!HQ%@ zyWhMIJ&fdyJ{_^;L4JifP*P!5W{;A8AkY`7I?UypHnWf4;#~`e+_iPU=l1ojAE0~L zih>3q-5#9J26^vtM>Z_}BzYmWDzFfjQjvAL>fVRx>GVdV_S@$J%Wg+IWVP1!_L%0p zGV&hAgks4Gs5J@&L)9hZw^gOpH}oeyh*Kk?v?r*>s;{3rK0l`{evY)owfH2A=}Asj z?KT|b(uF<)a%o*Pd4bLe!M|3-r(~vn4&t!IAkUdfGbToi(M^!Jb3*QB*|=_IrBduM6yK54ldfV_val>a4?`=5Do zcb>x;UR^5Nps{-v4@+Pibee!*!kbW)qmtW40sNK{(pmO z{6EtM#^C?pwh#ReZu{^*YkRrJ>2~kntynhpO9}}pgC1t*@OD8bUhebjPeZR-jc@KL zyhK+T*uKC3x>ul+kE=u(Kw34um;n&C5qNN0pcF?%Cm0u|5wYZQ#ODprBrf?g|DW>t z|B*i2txp>XMFauoH}1mx?l*NGB!-M=rH7oX?>ee0`Q#$a@_h6^b(Ua2C+hD`*2>w$ z#uqEA<%188VPr55V}!fnmg#2u8Nj$F1GrlYSj?T06%qKbu&fy}@C*z)aQzyTLC~cp z`7nT|-3-9Yb!`PS4GFj@Wl}zQ7ez5%tC9SgVjh<}+-|^gZ*uv=b9LCX~jK~qe5DRxj((9!gk9wIGVkQ*xmL(X# zi2oEW4!wtJMSyqCLIW{^CcDp$HGEC1G_60NON!t)Q>?IZGUZ;6)VBwGrc!CZdcZ$! z@m3%NT-Un3J8)DJ;E2TKe?;s7?0igG{<5`;m|XL@V0?4_P3gpfrDT1VqZ>*B zLS;Wwehee~*r+0GBoSI=yeh>p&I*jO1MOT=%|*9v55XkE(?JK5w6wRbwMmGaxXd@s zCC59q*>>65o6~za{1|KsA%bqfKKIWwfw{-CjG=dfQOC;RY?GZg>+bO2ZUE9AikT-D zZpI3{C}-ogVN<{{W9DXPL7i|2E^uJVp3X6;PT~@JKY4m#-Ia|#GWPJe#9Hs`&UrjrEi7X8pjB6p5EEEj(Sm=PN>wzEdRt+1SNR3jJ7RrN zV`GnfZggd>?0&*Dp`ypOhlmu6`$Ff$Q52~rV4M$}y!Sx0TA6xcyp4(zNuw1depb`n zRwZY5Q;E_e^3=Zg)}?Dq2RNz*`@F4(jm#dL4lww@5$$`CYx;wQ)LR>&w3DMLVJ+9J z9%6VgFS6Gt3-)mO2T4hA&}vYR56?P~!C;tfv>fsE%1guCFV+EP3|t#9(Tlemmy_LI z816~H9Ag0B;gq?@h-%$d++^%L16U8NP^)}GzJL$jzWDT#|06dmlM>^uhk~|y{6uaF zX)^m>Lm46$Kjnbi3bnha!WMI|wKv32*yPvgcDf2Vhsd$+w7t-dW*f??dh9a&lEouh z;Lz1qN9XSKhDfJ!zO~;B1hob{km^iy#$(rMglRg*Yof`F3ss#0CtvC`pbV%hpA&7! z{NAma@u*YG z2aYE~6#AV{Ddc$Yv@*#MtJPaGQ`x>^x?$6ZIn?@V@YVOpG@|0%&C&O#bz5f?hNJCt z9qSJiW))rJx%_bMRpQl&IsP7%(z{+}&`m8m$2d4p?$AK{&UcoqxZI9RLCX=UvW%=k z=2bP^;?h0dM_ELd1PbhaA}gz}MN-s3 zYg)brH;G+1nppO^SqH_t%I6XnUQ;#$7f^UId<%?1JN1r-r@N@mDQEQNrN>S!%+T!t zvMtenezqHx+@KD|UR-Xd08jl=ErRp&c0Kcvdya_L;I3d-dfTG;OsR#>^1M9yAovz; zG$h`cb{jEQB*{jAbzQLe{`%~a?fP+w!RNzvzAQi5dxadOfs>hb%Ug^^Yg9SB;fj&)_#_wvPNv7f2~c<$4La|y)nI;fU{>rru9ko~ z6~^f=OX*2_p@-7;-evlo3kLc^|JdZ3O>EE#SnVD3b;QUZDgmvQ*>4=z>5Xt2OHlPw z@s{eYVEMX%ez}j?UI6{(hxZWhkS7FLjI7(B3T%;Vz)_fRwpaoTU%aEVY8=$ACF{Cc zcm&`7V|}!~$i-)Bdd}|?H=DUl=Cx|UZSlYRw}fqv4M(lJj#kuK%f7nu>`27jXuVH9 zd$N?)g@6PW$cZzY<>93hrw4dONBDbHU#SW-NILWaQm=e_g z$-WN+^s4-B&nVR{KF}QlLqj#QG|u)3K|bv&79Xo=Od_5ATJp8&B1XFB@!zbB*M(`o z?^qdMCP8=U?^z{(=Kp22{VAWnSgHR*^?{RInLJE-0eiYlI=dJ8F3O(cw4L6oQD>hs z%Ym!iv+tct{|#r;pU$FR*t-cqDjKal4JCz;uRL9G)|^DT#05DO&*0hi_i{g<>gico zwNO?DP9`$*=bYYs#IVZa4)fZlAl$zFE=&lIV5 zV#xZ93}B%K(|(FR3jgj%1!D*<72)WH$X5)Yg9WtH-uoa3qVUV$r;Fg?zru+j3)z2V zN~6QUv!)f8v)SAGex1GRn+11UOXy7fn70mF5)abn_Ev%D^mlmw9RW$HA?TMt`zE0Wfj0py%kL}*DyQNW#1aDoTk|`t|8Mdk zLc+mfqA)6}83W+o0%6!)Fv?`k0r8SknT+{8&VNTdsa)A$xgN}%CXAf@3PXd~GXSQm zw3a`r9#&LScMOfyf&oCTVg8k7fU!q@_ERX*br7Kjs;4xFG!nTw>g#ly<%iC^tj9Vv z>&n zuIyrA&8sy0h`j4yDNIzHzVZh)LjJ8ylHWE;{)^n9%FAF-OfTKe8;_)=6%NpIdXc8i z1E3L-Pc7{3z)^&Cur%4c*D6>V1Ax)>FrTeABe6es;SsF}nmo3hCggxz*-wxA_jrPv zqTk@YMS(*Gu@*Fl`~E_SJ_q(V?KV!Q=X1tYpX$-p+s&Nw1^$z@Dz9zx z)V|t3Nt>BL`7ZTukm5jaZA=v-#ALEo5?5V}>?<0|Z9;^yd2XnV2Ta#~>fX8vPJ1!U zO--~EoEMyL5|@0v^}NE|ft+CG$ftZD--<}#@7odN0I1mY<1V8DR@ea z#GA_1{f1H(Z@FY-y!1+S>phkDb5@S{b^x4pTX%=ls0!;~Qs8_W>r^{GBhU>dy+^@! zG0Z!JxJfmAE)f>=b3@cw++nC=`RCfRAFB`bhSQ3UWi;=SXT705HC|UizuG#~di-Qq z6C%fg-~4*mO`F3U{SM?C?!%Gw7am^ZU&huBPz89$E#5z+UZm`|Gj6RrF4rK@elAy& z`#R~IK{apBq++!{K>78aJy_UKY|hl$^e~xse_D5v zSH9PyAJBx1l6E25`NU47vimJu<-~ zusP0KkexMit%w0A+7pK9U9ZK#-#U`1`pSg6)pVW#U_duO5^~#tW;wTunoh(mWYcrO zT`)8|n)*jJ!~VTI|J48b*Czkb`+xN~!#E=e*7gE{+v97AsE4j|b`Mtb^EP=Yw=3>q zABQ10=?+2P!9bi=3KBMX2|v6--={_wA@0wbAxo*fKl~u|(aAk`9;TjQJ$yUCnh9q_ zM5KIK`pI)x&-eVbvw^XTuZK3PW4?YzSQ6?}1AKnc3?@p?MjquME!7r%Yj9qBIxvKs zxF2MnfT+iHVlKl4Ttam0h5ASzmCiLgM8b>Y?m1*TepU;Eo$wrS{wf?FLODb4!$O-4 zsfO52q>xXDBnCEZ6N`H4hE>B4$~u0^MSly=O~IMNbjV=j1vB-3wR2ukO>XNNw%}3( zMNp(lbO9BO~*h-+aFJeR-6vdlQ6sb?kA@`$>nI zkcNytYF9hc=1wPC%~uG2%cWpTMd{YwOM2roELpgPO)RU-zgoOMSUtAzm+Z`ks7}kv z7OpZM4Q!YJxbx1M1&$};@)D=s&cd=rlw%6>^bq)5cmXXXxxd%xZP!9Gqzu#ui2z!F z>j{UjmpS37_Ms{6p1dTc?5=4HY|pchll4kZeN6mvfV98Iz+Sh-dEy@8O4Z8737l*8 zFTK_??&p0fxf0D@42ilbiZ_M{3t*1MPu2oAhwvtT$4*$!63&yk+u_z^lj8HzH-_I8 zCZ(cx794z^kOOa^WYc+ZVJldo7BQ8*U(Wja8=Grc-Wiq}zV~1?i_2w0MIzLXT)oZ@ z1?f@yC*>tfYE13SJGJu^6;UW;p@9zc>dRP_wN>`#m;Y&}-8m~Vq{Fu)Ob~fbf_3TpZ(1T^j0>c5z3YRj^>?;rF`7WcVRC8ha#X8!p)hkNrWL*z<_)>9v8XH)o|?>dI8U_jaeS&x68?NbBk+EEu9^yDY%P!$HyX4<5A$Mxnsmtn&p5z=8gVU}yh1&hd%Z*NyQL-0 zYR;;xLJtNNiYJf1nfSom$TF%p%0=C+UZ%mxv!U4&xV_GrSkxU$SN>8|g8tzBMMBCm zG;IVLg+nuk?yWm=G`UB-q`?uV0x0|E2UZx}&I)fScWRPO?47G=OS<5COILPhd~Uqk?Zfi0A6DW~7jBdz*C7{JB9XPiTUwQ@?)pw?1~i;Hig~-3 zBO{M#$8SqA`;jT7FgT4#mFRCfU2VGm;z8vvZEalhgo%hGbKl3A-%$30o(c@4>)KXH z#GFTZF(~FlJl09ua`j7q$!S8 zvI&)hU>W~esF?axSau9)rd`P`{CdV=<=OKBKIg^PyB|>85%gEQ1l&w2c~Ox_H`y~`kv977 zC;Q^dz`C!$ZJ=~;ilH%}Cu{?`W0Q9pFlGAUcGmdhB|)thqfJY2OPz z&_kCvv&Nc455Fp$1CY4;!rehhUtcLlg<@jCCqhVnqwPDdS`}V&t@stJNFkha(I^R& zxR_n!;^afTwAZ)DA9gZVgJ0~Y4qUT&9;RmCkBIcuc4`dLzi*#h zB6U_=u~RxgRn1{}dN|qIax347@t#W-zU6rNNynT`A->s`C}($#6twE#e(2>i1Lo)5 zzA-w9bpgs!2)_+d+WpXyGLF2gDz~z%srZ_db7#dVTK7~ULHT;OqjS8jGvbr&k`QZW z3#A0n)X^P@IN&VgyPJ9RxuFXH#2KgD)@&kLuAbkWhJV9xefoI$Z&PMWSqJwiMG;@n3c zRgX#D7PxIVQZf@<^=|2Ca<<3O-%--E+hX2fk)yj57jtIseSr`waTW8VFo%-Nt^L z#YGa<&&-Z(+KJdzFi@fVwjx}cVN@Z*xRLGVdfhz#H#7ycmo;iK#iOH8Xkq3o2v)Cxsh*Iy=~!Fg4< z%-^>0a<;K|Z^>OJd*3+n^$?_6C~3k}?B+YkY7<1dp}l0|G9I6q<-NtCgMY zkTu41HC>w0U05x2p$N82eMB62jQ5PYo&$qs1YC3JB{*1=_Bo6$q&qQkxLt?`lUe)s z>cK>NvQHM@fcYhP$*9yH&q|`xzTUN+2L@;1x3J2Cp@;dOuFmt-V~Wba;s{4%N%K*< zi$hpJSp1NYNVi2lYp@B&QB}*EfJRFXM(Tsdt1N6Rdr2PU=jYKa+Ehh&Of z7HdgDelOlTt~(RxYd0h6OnIWxu&-U)>ANR=z^Zl*QQ+|ni*BK{DLMP8$ul4!4%>OG92jcLFVvH^_>8mq6q&>oq*-MytwBP7b45w2Lyb5_?=^%GczN zCiZ6VNS{MBw-neqk5Z|d5-|ZCPZVA}9Z~IbIpgT@O)--8TV(x_1-1=e5XDMZS7K8d z7fJ`{j3znl+L(#HQ)k?+t2Z>UQBn%0pKd>`q$c8&tulv`!qp$4xHCl;ti6JFEtkDu zwENvzQWG6VY+%2Pv`kWKRpLG@i$=QZ3p?BHnVTJx&+_<|oSRFjQq33`;g3bEs)6(I z7ePw2=7Nm8uAGw?9my36)70d7>gX6Kw5Qg9MnOXug^w6EqvG}J$lPx;OY=o5lB zKs&b7cqx!^0st14*N}Fq-(?KatNPHnt7^;XzntsR`AybW*6WvGRh%}0oVpbACKNCn z9Xe>$E1%Tecvd|qpvqIDI!Yc(bLC9eO(~q*7T9LU6dK2oSFsfC+2mKLTNe@O1Np8mlZ% zh}m%h)b^^3O=?Pr28jV)4Meo`$a3%&sILE8BRPP zX?Dn4C};PZfObNWJKX<~o_Q7~_n9Yr@V@w388_qe!xJ#|e6<_p&+gWwtlg!pFJg+s zx$~6$*n?a{J_7;Jdar$VslRm#a$HTJ2j*rA^edLD&k6V{PouWydiMEJw>P_bLWH$M zhE~@TIc%=+c>&Gap+`Q;z&<-Ym6V=ox@k~cXQCao`m3z(58Hb1f!h{3=5hCkf-MgI zmfoOBh8Y-X$wb7VL_UL}QpRb8PAb>36!U&~)^xb_e2%I8``h-@oBFlK zBD?POPCPYMY^PEWC06Y1ev*@L(-O&q?%~%rUZZV+k!+zBZ9{1`G#)is)uV;Ev+R8( zaYWW3Gkww;&-eGK7&bA%w92ir(BrfY?!GN3$AfL^P|EVVEvFrB09$9n-N{I!8za`b z4=|3D_E<`Yfp2GU+OkF+Ej&fgpY9V!b1=uoTW#Fu{zmdo*Lgkj?7{eOpxwv81jPwG zRo80gu2+pK{ao0S<^#SO84%$h84V0NDAI=7UCZA z8s7POUcIKKxvJE!`Pbxt09|)?{qQ~YyPqPzlPAcFpMj&0;t39?h+-8dRiKhVkY@O? z5`Jg@(yu|9iZubwg!cgw%j+oPE@ZO=7Ha{*N|D+pF z>lupLOpo8pS~$sH5i3d13QQ%|eya|&HT`NKzLD?<;xe|M_)uSig!SUY z<#A-J*wspbIi6(gk`c2r)x~$cB|#}ti*Ur^*Wazk99fDBb_FaG)I0CMs%I9 z(3t?z)%frIYmq^&nQ6l25!fQ#A1@u1oM*q-jPOg{3Dvxfdf+fcDT??*aid;_Gdk6@ zkyjBsSSREjmym!CJ_}bvW+R3-4yIB%mWis*Jg7jlxDHukXoyPdR1q*bXP2HfzHPSx zV8eOq6$~f7M0DgKwP|#xa}2jgH;vXOv+Z>ULSNRh$-MMqfW;0RNs$7O^UGdptc%{H_B-?~JNoa=BWhQ?iNko<^47iok z#DX4^&(?gls{Ade5#0I^yK=D9e{i=fVZnRfRIcjlx2QCY-^zD+`RX{y`*wMaH9F;od3P&-N0|Dne=XwkCu#Kmw3-XJa$ZpY zY>eW8CW(vw6Cy+W2I{Ks%Y#|VstS|t6rII5-(dd6?AtrE^4<_*KJM-7d;D% z_;4;bVSX3BT*rrlZ>8JMZ!9N9t7-AHI@WLWH>OJ#&$bDN?H~$#qv*aNrR6n9xu3DP zK&ZbyV9z6Os-CL!Yk9vW9@L`sX1=12Gp7uOzN6R{jln(dLENf!fCf>NrB*eL6Ka_n z32A}L^kdHu&%Yl2!nuX?b!wH5Zel3*mNTHK{9J#cx}beNf7iy6D6) z8;3ru^nMSd3qcxDsKBbKOtxqrX<5!a$wc&3bh2{z0kl-NE)^;>(M=~#EGJGSB!ntf zmh{<+#KJOaYLg3PjVF-YD7>bR@Qags>$Dq>i(FYFg}o_`_IbWT-M2J*ps0O`;<@C2 zu6j=DFn05Y#+3+Kn6qKQiieWm-9rkg?)xO37ccVUL8T`abJ&>;p}RlwUI%oGHcx`K z&*3*uXNxQ{Q3W@K-m5Fr`WH4$Dd;&)A3i!AMxNkR>8r5iCv}?T*)v8}h9aCdc;Dg1 zyi1Ymb#rNl(W1}1F0~%QJSdO!4&Fyx)s7{sLBQCyRR=f%!(U##ZqWU8V@fKJtbExR zpeBQ|&3+90rhiD`20ntw{C%5Fg_3FBkIdjILJt2pj|lu+kb1r#N1k=M@dj>hP)PHE zAmVjOztM%w^<~xk=*gJsQsd|Y+i_`2UFv4vMdBglW557|4!y(%vXfOk>D84ON~#UZ zGVhRj4L?)i1)7{~@AG=}!s!dG%^^DQGF)2P! zDzcb~+Svqhujma}pq`_6h5KMXzkjDHcFJq}qOQsh8)NY~ce~><;6Nv#(cFq$#t3~B z5y~v|NYC_0%WAg15oe!;aY-72^TyzrYB4|y53iUa{KaOa|37K|p9POQ{=g*qPn$IV W9pwKzKmVC~;@|lW|JP^zKJ+(IFr+^K diff --git a/docs/plugins/maker-setup-images/set_trigger.jpg b/docs/plugins/maker-setup-images/set_trigger.jpg deleted file mode 100644 index 27884f8ac047fb954aa51e6c98335041128ecd94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75137 zcmeFYXIK>7wk}%a43cxsIp?GxS#pvrIW##V&=^3JC?KFjB}k@~C>e<&0+J=uAUSm- zLL*K0Y5mq(d+&4heV%>qv+l3+4VXROo;7OJ9HVAcy>rxT^f&Z6a6?~PPaD9(0svji zAAp7ep<0pN9spoy2nYcHKnUPsF#&iOgi!(1u$cdawXp;MoImZ@0FdYn;Qm9$2vh$S zjI}@e{8eMW#{Q=U*63@Tf8ovFs%R)tf>&s0ppv+_e~6f~TY!tZm}`Kac%*ZnxTKhb zIG~~)8R+Z^au4NjargB0SLHhC=;7k~4PF$inqL$W_se zOI?jaB~mHUFVN3D)R`mF&(}XhDN>c|k8vdo{@pCj#qmca6r{>^*U*GRGa%TVLsm>i zOo9uucd(m>lG$zTf9#9-rpon?PDVsTh($+a|7 z9~y#jUsC+HDK}T8kT4e?ch}H=^i0FqQyc@u|H}sP-$(dQNBphuy9wjQZ}_ixsB!!) ze@Ec&2>cy^za#K>1pbb||9uho4@TwgkD*Z!7`_Ccj{pS|uYk~i5U+qh4rwt7KtV&# z5cfB+!^j`Z`v=~bVNF>`2O4nq9uU1eL}-A~8zjDZnwm}~X2#ljceMWSNfLYKz(8N@ z8vx+v9~x|?qrq|4#+HL%6GI9K0a}0&kZ^Vl3A|-ua_6_rf7XBO|Lfy??hl0orbU0- z`d9P+3{bjZs27HVnqbs@+(KOaFt`(gm0SaZLopbE!Q2s{ff$U>TU~0K}1)c8+jYPmCSnml!PJ@8<1~!JjZ#&DG1< z4FE_8F<8XUFW@(p!C(QG|76GWKVfHQmw(xGcJ}-i{>vB4o&a#e+tAsSL(|#U+a=gJ z)E#5;-z8}B)ZO3G98cu(+h@ZRDz;|=1? z;%(ub}on8=MNiYT3^ zjHsPxf@q8AikOm^pIDXHg4l=nA@NJ%dg4LiW#S(sBqUrUiX^5a-Xsr5UXr{c`9uOG zxg@0`6(ZFnwI>ZDO(U%!?Im3x{Xs@X#z%IO%$6*aERC#+te!B5QmTHcO==u!ZfZ?xSL(;qWz>VzTQvAI{4{zrJ~YWR zbu{BNFj^{F8ComaNZNebF4}cE96CNaJvv{ybh-w*Il5o;tn|0&-RYmv*V9kYUobE; z++=WPNMe96%rg99J(?CowlLFS1~> z2(g&4M6;B#d|~;?%Eqe08p!&JwV(BnjgIXmn-ALywr;jPc4~Gtc5n6<>^uMZo_tajit*djYJFAzdZ`|a*>2~w&&7E6< zw|s8Z-a6Kh&ORYSuRc$V9Pwg6Qn2xMYv`()s zp00szhVHx`tDdV~l^#rAUO!fUz<|`i+#t_j;t;T?{ zo^h7(iV43-kV%IrzNv|6zUj7^q*;vFusOB4lXdr_-zPQh(pMSP#Vkw_e+>SSV9;yTrE6591&p^(HKb?=^yzeN+{}C z)XshF`{mKN(XP>bF`O|EW1z9OV&8zVz%JmvIPSRkxUB~|4=NuLKLkA-dnEBF^U>L3 z>&NZ!tnm-xHxqOcYMzik34Su4sGL~*6!)q3)A480&t5%4CAlSiPL@c{Nk*o)rhHD7 zOnsS(PV-0`PnSzCdXE3x|M^^odPZd?W#;|N%`C&LmKPi^l3tu;J7tgL$mA5~66c2H zuD`tV^1~~hSI=J|^SttA^EL7z1uO;63N8xW3a5&07S$KC7AF_~dhPxC+Z&xXEhT&< zIi>ie;icPUR%OHG3guOAncgP9y{_=DSg$mz9H^47s;XwGPOrhP39H$wwXgkJcf0OG zy=eU#2puH(9q=yf-TwP~@8=o}8u}U)8ta>Qn+lq#o0D3wTB2HDtzNC`A8bBMw&}O^ zwJWzbcZhXVbaHm)chPpGcN2HVccXjm_x$V)>^=PG`Ej$)sc)(OZvV`H>A?7)!QiJM z?V|;%?t*m4tknhN?_-(T7oE`R^s$Hqw&OPnDulsiUTL*y$SBFoID31z` z1&*6eZk~LB-GyzzgW>4Ylpl;gD$Zoi`hJ@HTs`+Yzq&|5Fd`~16)uN=S^wI(ia-(| zUtSAdx1$VD%V<9|I?y@T`41Ps!F*zSU=o?96#zhHgW(QeF`UfqFP`>C1M4qtiNU{F z&hPSD{x|#=m;19t4ge}{0)XWM0Jzf&07aO>i@~Ir`ZvY2xCvlOOaH52T7FB2hqTlm zfJGXNp(Y44`Ufij5VQlpbub!zRftAkmjM9I0s!;|{lyP|YvbPlfOo%>uD};I@bBus z2)Y-bB*fap8pXll0S4wkLT-)sA8E}dVLZ|F604 znRxm51q6j;WaZ=)6qPh@YiaA~>gk(XSXxW0Rq=9bnEZS8&i1A{}upGH1UP0!5E&3{{1gl=qp z-`d{U-P?zs{y6)2eu23B_1iBj0Ov2a{^i;K<`*T#FKk>~99)9meqmupUN+FD1nkBKmhU_#e-TcZs6}TzF`0jU_q>o zvudm)8IU!ZufF^iW_=|SoZ!4nMR*2LMgxgum>cw&3L4mwHbDd5eJ(0t^ zTKjnwa>b>lD#XjynWp*WcI?_xwle#-WcLf2)NcwvCeQ%lzRn>(8ql0Tnafh3v`bNJ z8COJT;Oh@G@M2684P?|f{Zv;&18-sjkhJEQ?^0;MzJcNw!&fx$u?Y=aa-U%*A<@A9 z*$;K-9{aoEYYO$tJ2UE+OzHpC48_k;4vf`Q3M8{J8p!;g_NEdInEyEWML&l*x~2N% zjlVnd&-3(mWd5H<@ZXX7J2HRYXZ~-!10#%e(7>aYsQ&itH*BxmH$R!_8DV{B=xj}i zb<4rk`jvy-y)yOFLEL`&^_+~sONgkLi5@9TAybjEjkLDx5rqr6@YwKo1d^<~Be78V zXo682RWM?I)_~l^O6!?`tL|>F zbV6Wso|pbKz!|9s4 z6H>RXA}XSDW8G^mbz{4}XngVDf}MN#L-hxLwqdJMVLkJ3P*|+Y)x;LE;MA)m33Z_U zSR+Z`HTM7Cr6)#xJ;{l=(>M$gnR^~P%O9O8#mrrIw=`3$gQtq-^Q+wkM$>l+%S8Kz zV1oHW0wkpY%Ba{04ZJryKm!IM2kS_~z9~rm-9an)t#qkV?;6=_ztGr=Ck)k13i-Hu z`pZ*WVDE}hG*EXqv5#>FvLSu-6g`QFDjW@MjeFvgCh5f%a^Jtio641?h9@j6L%B5!hf*3B~4DNpvK z%ait~GeTb8Kx$a(i3!xtLG#{^C)}%@1xu>E?xCC3617!BMkC#jXtr+C=i7|sdS;`$ z?U_j(1|^F-TU)f}>PNg+MBuN*4Rfz3o_2G6TUy@z@rjcutx&LN#ohNgq|NkeL7)ww ziZwwC9}IQB%%Nt#XY97nD0q6&ic92P?%i$!r%-yD|^3G3_&lT{QqK3KVvaJuk>E#7|CT!2$Uy?xm zj|pOdk_Z2#2%ph!t{p0S!>rGZVb({|^v|43vj&Ha$SRm`-FSR7*I-{@u-$T(HvV$!L^upzI|NWbkM3Dklp8Dbr-q5pv zuph@5_wMWD{c-ZQqyH>c-49=bx`pQIVickIip^vi=UPdtiz}oJquhbCl($5T@8N^& zhPtug!~LwoSiR9WccnU&gk&yYr#9_$d(t6J`_4Q(P zif)QXoB{t;S=iN# zkhXB6Hij%SCD%{yyw|I9wTO5$Q@%lM=(wz+&ln+4W0xU#A6r%^vvM_B{2$ zSZoRCOTICOaTp1#TVb`sL?9afw2;+?| zD$(3wouWvWE@ca4{8U~YtED!ajoU6amlf3ur~5o3@6@LVPSxQb%;xatNE?}Z2Y+T8 z(KgCzMRrVG?e*;blzhb|E>owJ?KLixAOLME$1lZQlkq&VFR89U1EXVp%|&ax;BS~4 zyRidvZx0KK9TBmfUhG_oG$^pMTU^VDn6Ags=~Pqz(vMrXtFo-u2b^GPZ=GFWI_ESF!r=WyvFEPFLy=XPZJ zq4yPi3=N_UO2Gi0E)s^Fzpsn5>O*al;q;w1G_Kn7L~`iyfbA5SXX!zepWnOO+-biq zjdKx?UzNJf4J%&6fhIoq8JDoi0s9!`e->-FGPS?R@m9y=gddCHh5I)mD=WuT`-nrk zE6*4rg!%d!J$Q6gdA>Q7zb|+GLfQ+=*JvYp;+$qrQE<~OviQ5TS@ovK$6njP>l&~^ z4B;e-#2l^=>@jXW5zjenw;I{qf;oS^B2U#8&H?KF9fw%(gx?jnZ+ux9PG#5fwV z@AfZhW-QiJ9M;yCdmhft4{f*2G}H3;XF!iVnWTyvii=6Ts)aCEtm0CJ~OZs-**yC&* z-!~0aPl60w9~&crE3udc6NRaIMoI9G_fCP!Gwp|VMb0k zF$A#gwsQ#W?$O))QTB#q{@m|cTq9TWsV;uy4=(L@R6M#LV@MGgwdT|~{IJJ!Odgth z#9K>3rrDPlpI+9~5+NV;@T1$kuY(*`DI;8@n8Kgu^-ye1>XwZ%T4Jk0tPl~~wrinw#jR{Hz?Y=_;|+h=v1`nJ}joqao!w#{jioy5?KS z<5{H&DFO=Xt~e>yhZBcKR~F#0yu?Gjx8R9xZuofxtipbZKT7OG=7Wdy%9~f;`4l;I z)H|)Qo>+dgzgIzU#wJ$t(tPCI*(T$7Z2`@eaiPNAiT=!Ve(G$2tKWsrP7J4kSXH5m zkiG>}U#PT#sWa8UDO_;IhuA8@Ec<++$Px|U30ys)%ak^p0LF<&aUbQuEHQY95%^^{O-$6}Pz^rBRdU*R(X&M` zBH*e|nl$6PjD}I$mbTLT414Ruk<*nzjN5f)Co`;O9SuA^X-+lQnmOXlQ#E2vZ+Xel zTtqGML-&z<#;ci@c}3CZ66EUqD5{v-v)xoN#$VO=c3)i?CB)(FS1PP>1=>(F)>~XL zZ9qHa0#cwpAMEY-HL0&Y^_c~y8Zrm^^+dO{&W3pgP;CUqu+y3jLOG2h16Doj$Wo0ELq}CmB#YoFG{A6%22z#m4A@t-4!-XVUR#5iq(59$LP!%NpaBoRz~uv_mPXG?A2Z(a!5XdwyvT(-udmXV88`7s z?&<6$?W%(&5CRvy?Chw|O09|Als?X#o|_~f0|)&DQ87+0?hKtp%~2i@^U=+($ohqq zjEpQN9HSWbB$Fy$TXx&6via_=bndc3r{f=sZ`&O&I@E7g89$b&58c?E*zcS*zhH0O zv9v9}Mj1>`+u6?97SUd@p$5?aK{qc_2Cj4Du(?L!V~cure)STm4pkM>yVGzx)6Zm_ zMgPhGm%R(X^$1=exOHU?9_S$sn^*`&1Lw~X*6W3K(4uDOrF5m&{rnE1_2ug0hpQTL ziKMmV776#P6}XeHANTk{5**19^wp@*9+sbl=6&JT)OvFHkUdc$L%*FHhaFHd9$y~j z>_<`(9@aqYVcg=6&4}J5ipPmiG|)$pqNWJn?uwQ)81C%(pcK9MfqC;4ukPd!!6$Cq z?}bMx#OFKYT=v>f!C6yFYwl(}^H4KeWp&SLL_yb2Vd;T*L=bGTz**lc)JdsJVb(JL ze%XA}BvMFiGj%o{lO}x@j2g>vf*BRZ=gl7(&>o#6HeIojZ;+6wCXGc$oDp}GEP$k9-d~ZB=Dv#=q+v$ zyQRR4o1DPYYcS)UgjM;0xA; zAvNbsr)Hfa(<|{vobx;B=L**u{>QTU$_q4W`_kN%cjru%x4!Fs$^5+k`pEF16utt^ zFcira@MLhZBC+CGg3hz7OdtKkcfm1Z73FK%*GF~d#-2}uUTO0a*uLd^%M_Z!BqSy# zPI)wAEoA7h5N5DqyLQC>3UmKve;lI-r#?@FSwB>94mj@;wx07n5`(TzUOpe?uyXih z`Q+Aq8RcS+ZI3S+cu@R~;BYa_DN&8>E5sAN_N?hU6Kz3=u?iiP?wz2|M?5QT&*fL8 zTycnBZ}sr@c!)Db20(X?DA$WwBl~s^?^|WmF08Cfye~V2CTV&2RWjxSp(c8V!WdG8 z5STc^ft_sX9I3j)jn{K(!-Sbt<;E3`Z&TZ4e`w9r8CuAc-xLZ-iJsqW+a{413}T}z zRLXXKVo@#_tSF#Z3d&0X}850dac1GClKoO5-VB zOci_rMO0DhrQVYM7)6X!?J8R8Tb0)f;EqavCHunaLD!7)%a|n-3V{}*yZGZ$;CC}| zemx71&tJoeo^1p$#hAg3`y8ST6a7mob}#5}^ee7+uZbyU3>{wj4ZKuvS8-iWr$;TU zQp4zv-at=M*hyqhs1U<_U?xv3;~NemL7Ztvq}Ccsh=p?0IEJO0LlTSW!@jwFm_C~z@5|M@fp5&UZMVz%f=bHLO$1+CcL+4m zyAk5;;`;cFHBI#diOq+(7ug5FCnQa0xqasjBFFa`kYeU6GVh!BoE-#QD$9i=lbgx? zD%|GYBXUmabJQX*bC<&k7~2(!_*E5ntksq?0N-xth&6H19}CxeMB#cjYh1mPw=K@U zz^dY5+YHRZ+I6^Du_VxyUY(H{#X6`{4%K9J53D_Z}WRg|8nzy2b9q zz6e4Qy@JLqCdB#Jsne`FMy3zkh|P$reTS$d+6wJXc9(8hqfCGd|1cbIIN7 z1T$fO5=Rslu*QnK+mPeu)LSGi@sW47Q!KM0n+0q?N>d`wc~`07IkPv9+XISn9rl55 zd13DH6^_zrde&3?4FU>74wwZ9+FCK-zH7D z+d4kri{q06xrIoCU!32D4L@l{1JsCs&65Gc@C%bi+EY!Vs`_xIMJq)Urn}DpiqWfW zbxsxOd-J2}?<mn-gBy8jujGDi5tlQW1<(35PF!+c)NkbDJxFrBW5s z#!vCRnqZVZn>}!eVMre{zV9J5uM~@!4WLb5o3Y>$TCT!A9TVSDpRiv<#~=gtCNeMt zvp(Q_?79O?61j6;j&OpLKr=^c_tq#Nc!TG!IVHL_nkJQX7y?r?M0_n8DwlUyf}_L{ zf=&bC-*z^?)5Wo%ZXjBAOyQ}+3$-58q*8-~%_+LJ+Eg0lZf2HobNA97oPr<%qwgUK zpBq`+S#B#8X{CDY=f42Sm(k|2g#>!y+GWSXh^DKQgs&M7c;p#Jr-mE3zI?^&3N(( zYL8mAL^PkBI%9H(ucI)TL=&w4N%=qXTEoAtA7F09f^j3$2N+r=jjSG)TSL$ z<;P#s^{*{p0Yh;_AT-c$kqVY_iV=Zv%yz0)?^#(@=V^0Fu3mO~{QRNE{Uy)Jw&FRV;`VeWHf9k(P_0rGv7%iT-@`$&TLZtNI+ zLDfx8sG{RWR=i+0GL*9+OiSyA26SfFs4*mK_ z|HzCaVfmBdJ%F#X6gq!6yNQ`S7O~C5c%FBO-}>4#3VEkjbs%5m?sE~j@?Co@izgrK zLc>C?hy64N-%jCk(12Ds=m0ry`g6N+tK}LyM)g&nY5coW!_`IghOFEQ(RtbP1J|8) z;oTEP@MkBcPU?*Sl1RA=qofOScwX+*z4wJ;;IBo_sWuKohUuyM(4-ffjY$#daqcJV zk<@+Gt8&SvlVMk^Y+gq{HB0s>SG$XOYAtd13lco=H0!^w3>|JXr-ePpdXyU39hYcX z-`SJWHM_FgELEhJo|K~QP;5rw~h2(~%ut~tTRO_5x~4t%dDh)$h@QrrzgdYJ1Hn$gvY_KVANYLCA_-cMx~C86OEfAioma>l#u1$g(2 z18Ev#XnfkG>S%f0W`DJ0cVB8nIXHzXd`Ik=rFuD{-qeiu`lCH)( z*F`8n5SR^C{8Yw{GCU?II>@zTacF(ne#GZMf$` zhBw)!B}2aL{?G}iW~Dbt`+0WB>r%;Y@m*L#h&6)mSl*LHWevB2$*3tR-&^>n*;XqG zw;*ot?RrBDs6wbZrOnK+BQ$8c2ZcS;(_cS4c4ocs4%N5DsNU3MNN?8twdo2CP}P<0 z$>rLn1T8z3AG+u+3cRz2aFX1h2U}3xg5ZDcCX3v0_^M*JVfj$hPlYO@(6ZiXR8mi- zTjMqXZ<)6g_7%H+p5h#KwSRVGQ(Ysa3)C_2PTBoFNT6{yUsKDS$_Yx3yllHQ`;@$rq@MKbbz(L}E{J|U zbGGP0jA%QEMz)2mX-zwQSX3kz-=7>*xXMg^5fRb!;=W(aLB(p!d#%{U*ed}1l`i-G z+hl@s)w%a2Bgxl7WJdU1Ev-LP-iL{}KN$sU=DNrYX}%*4aWsXqpL-+HVcTo{zcRZL zpZcnp3NLxL=COWW`zZUxw;G0B@Jv%GwJfAKS7qbfCCbjxhbHJoR)(!yI~zQ zKV|kXA_zc8P= z2uHG|HyWxM=T<^yDB_D7$IByN%$uJ5b>b#pn}tX1Af)>31=cXt)J`_PCEc-b-P^>a zJB;Hu?WrF+aU!PA?;)DkPuO?W$zL}=w(o>nm>QN$l#REB&%?hA;%Eu<_TJOY(fIoJ2z|! zo|2jN)2dk!UUJAcw7q7EmSz#tc~+HH`k=n6pjsv?GrTdpJGb3Xd8rx{8l$BJPWD-A zn13P`=N}!Hct1oalEN$$u41kEG`AnZzGU<8u;zx>LlmsWsl}a7>Dw~ViPTB;$q7}wRY!G@VLHWW(4!VV%=PB z{jSnB1Xpe`Eh99yC0#^nc)Rb5gyoC`uY>ljO_j|L*Hvoxk&UK^E;wkTu0U?l>4}Un zwUe#L1v!UaJ(HDifbRnj8|+g{e99;n0@+y>G(aQ-t6;2PS^Yz93S}|*STiE z&c$SeEM73ZU^0^1UEdjt+iK`KZ|s^#sD#vF^0VLiH`z)nmbeVc1|g0MWExBT4f~XQ zjk0Z;0`4vR%6XDqt~|Qd&zr|%6t8no+!!`^e~nJWzo|~R|M}YJ+ljd9)$#&~Wi6Iq zKbPxox^J+LJrsL;`C3pbqiy!roxXW?KOP9mw(NVYtt~B@JdFn2H>y~?h+M#r`LR1j z(ZB*^gB>YCMi1?Y_ncNSjoo1Q(n94mKk0Cbi}T*$QMM%Rw?X9Be2vUV#`?U49J*{B z{W^=XTxr9_Q3oe?x3!XhQpL)xm+einJ{AQfYeL?RCtB_+E9DhdxfU_kTCq5A`ttxd zq<@XDm|e4S7sWOCrrl1sri=Vi+-z>^qnq9%Xl|s{;x~bB9FnTBwwQ?oAtpDDC|T>h zpD_N6{;Bw@?!j_aZRzMRrrrxSw;tHWExFA9Lf%f5fy5vPBU~l z_o*bk1F)a@(xJg|fZIg67o=?I+!~P;ws~a?MEacQ%rl*SHoW7*6kd)yM`@#>n-leR z8CQ_eykm?wq!%}%C}1P5SDhh7{HsWeYf#kNgFL!YnVfg~d9sVEw%2bt7@^?|ZqEhD znrHmYvp4s;quVkfS!jwX4l%!14ju%CH$gDbiI!XsH z)7CR%nSbBZdiLKq!xP@0z((r9tWvMIBCnv}^60ID_PO_^D>imf!R&I(PV!@ZP<^qL z(S8Yj6&xqQN&CoU8cCBBA-T*K?iG=GdJ$6xPGZ9z1gz#Hibi>cpQY2fD(LB#?BoN~ zc4n!OhOjr+&qTpwgW$MU>!BY9QZ~5HDH>$sO?b-BFFh|Fz7RX=ua^jMGUh*GgoU8! z!g`*r*`NU}r+C+X3h{*pa?V`tu+nu5WmszE3@A4evEV(HRO!MM+Gn zSVEUr`Hs~QI?ZHsrgh&ObsHEqr%y~7t<+^|0ze5SZFuwwkY{MXlj5nZPG4L)m;#Zt zK^y*VG7Mx_Q!L^>Ag~!_x|}eA)5ZXytvSDMRaMy^6jHHdpc0;O+1TV|-~D9J)J9&1m>xu1D&^%)0Bal%b~E&uuzu>Zr-nPJO^ChtBko*&9##6S<>N zP@BGC`DmHBXC3Ii-(ovZFaK5JNnc}uU{f1q50l9I|KLW2c$PND?0sYkGPv#EnWH6#L0Nv^^ZlA zHfiD6#-Oke*AUjD7pXK~-$kyF&smv2zs2&1f@8{FSu?w8+|1uJzpFXuQAJ%zlQ+n{ z>&P!DM(63a(Tx4ydL<0jDBKKeRA@TpK<;tB0W)s+@F;9gdH<&;?k-|SNM zV(aAmMof2jDIx0EsHW zPi((7IgvX?r3YaThltjl%}X#RB#Z)t;h8k9pA*b$a@(ZzT|IFJjD=I5ZK#FMx`x%g%&qu@*Hrj3{ggTQ%z}A! z)F99mF;siqOe*51Z>wXY1z8!&3Qswzz1Ou6Qr^6>f_i&huf`jxvync)N^c9Zg!eQx zz~)jblwW>NcRO$Sl=+%Us5tv0BaZhz5zR!x8f7OlbYdY96M!y{A0u-rdg_U5hOMV7 zom=mVJd1ZM1v+SFkcVv(jIyU&w8z7IZ&+AGhyyao$yCL!+O&Os*;&)Z%5~MXt&b`} zMEvYS42pcb>-?@h>60(6Y4Q6xwsf7Vn{_f@>Bg{6#(7c1t0{k&OHqnT0JEV17aw`- z)nLD$l-{unDFW#sF+a5BU%Op4b^x0r>TUsPj)XAv2c6!qOfs&YE%|9h4hVz%-a)%{@MVaFkVxcyvC-Ay6M!~ zyj4`0LMc0AKQ)7}hWVbbW4Xd~ke~iOyrMiW`*?bB?R636oK}brQeb)8iVqx!%1!sx z#0JqdVh%@Io|;w|6-gMDwnD|opLFwSBVBx;9r1dGqwAGDqJMopsmX~Xu8&hKwK}q! zy}2;j0(M+1_Nro;yMa0A`v?o?Tb!tjDIS)GBYSXO+HU$M?-2LTK-2j~c|Ic=Le|>> z`8kw+j((>rI(bvg$EytW`~xlmR&UIRs#BF)6&04U#T>my_`P_?JjLvW&KsP{da%GM z2<*-Ch(?6)hN$%|*ec}B{=EG8yd&3FbGwH2)=rDn(rY#-^cAC0{Nlj_qnm>UPK$~C zb8*f7#r2WJcE&dlJbNTiR_%=?eM2Ee8PL-&AtK?=AKeaY%zf%dt|71}nS|UbX^7!} z6b71!xZWt7EiEk`*c5XNJ*mFPGdwD3$=F!-Dc8trJuVPA5w%dG75EV>>&M=nZxDO( z%dEKBy5A`=u6g2-is|~M7zFb+2)bI#_Sj{EHPhISw==_j<*7T)MT3D#=FvTQ=Uc8n#9lqbF*?v5Y{X8#QWcy&+ef5{f>5h$R5tGu58rV}fWM27seYM<{kuaoALLv~ zCRBu~M!VV{W@=lh=5M1|Aw0NfKb7ULQrG&u&NvxfpY0=O-xz#faX7a~h)gHP2X30; z@}e!%U~KK6crkjD?HT48PIhF1uk~GZ#Em7|Z!Vd3VMz=+AP+bZ>j-bSCNwdzn+!n#oncyZT!{n?=iV>;lCd;i8T#Wq z%phTn;ZqRvjp74f|Mh%dlQo#1^Nnq1&F5fi?*-d=(--2+D8`7EWW$sGCld!>`-dqQ zv=(F|q8C0(w+`eEvdzz4+MRi@V^+68kTUYaJ#1sO@26uxuMtW8+8-po7=FoZ81kF; zAA>*9LIXJuH6A|F3UMNi^D4$giX$+K=vIo4eyzo$IC`E|On0{8etYUSL;D<(o8xv5 z@as*n4$7Me2|51gDoP8nWS%|C zwCXxry(+F%r-}0t2k!26OTpFq(^(Kfn1RaE)ZW}QjhXlmXo70=$S#*e=yUm2d2Uj^ zRCy+o@C_fB$0WxZDh5^v*4K{cF$-~?6$w&Y=a>0Nj)uB2zjF31eP=qd$k0N-&j2Z| ztdoe5Pw0mV-<$TArA{d`Q;rgA0~K^1^nKOXfY`hVzMUr}8f|_!x`c)7huX1EkMs!gz>Ji)mu$5O3BYINs`1DmJB~6}yYa zWbr>5gpF!RglpY9$5OC_wlv=D8b-ycuo*nc!Ed3;HuAFY(>KUaUeJOB3&~rxRCTAn za}D|88*~;FRuw#+XC#^1^yq1++cv7l&+|e@`?X+0)Q4%~j{E>n-a^N)_D<%(J(Gk$OD3vbuwq>b3_`PN^wRc{;yTV&tW&=<dIeP z@X1p*2MZ#>2%A_~=|?qu%%a$aeup_3b|#$~r_u7=o&`BUFBdI7+@w`3t~U9D5l8%p;AoxFtJNVlFgrmsR7*vZ|z$TI7%3 zA|Zt5Mn?~BBtPYy3G>=~8AliTDyGQOX|Rs@fSHOGQ!-&*&5BUKTcAd}lD;H5wI zqq($}aVaSE_FsxtK8YNQtdSTnDwCAZH#CwmE{>A@a_P=jDm?6#X!&>{h#lD6iJZ91=B0$gya-C8eEgsXC8_!3-FX{1= zJA8B!_F}kfkaQw4wd;RU85^vym=#=EyD}r|ZKM8ZuRI`O*nRGzFUHVmKe%`LQL21s z?f(B_?L5QT{KNLIQ(IK+OVE$}S*O3g|Nf)6OvthQXYOLlf|a<)FeBTA)W&(hnBj}e1zJ3O1Tu4re4T!mGyVVO z{x1h2M`R!Ss4aCPFq8^+Oir*tD~Nko@oz<|J561$fp);l>dhn4+rj29&qz02J*%j= zy=FF|f4Cu+EKM zv%<)K`R4|P9v}sCZy}q*`PH0q!{t%Xdm&`?=}#Zowd^zf_HD1G{JEt(o&7MKb-e}d ziOK#hvBW+TRjH<#P%b;43e}QY*RshsGwXF*USyppTvntNbKmlp@$e`hh??w5iEufJ zLDS{C4Etn-pbIvOyQ$?=iL6>rdwmlbV+JhaO_NK!TW)UWo_ENIp6jR1acQ)6Zt^&m z<9yxS#g+dd0^9dnrB(A7EFbzoPyGO@wti!%wg?`h@1@X@V*m7}BZy%WQJ=(t3XH=D z-?cC5DDh0vlspk7&rlQgH1N(KCao=@- z68hfZzoz1!DT0q;?x~LRt6E$5DP(qLX4bZTn5mKh0Z_72g1ocX%T#5hiVI)dQOwD> z8(Ad|=&!~$%{i(+TiQu`j_(ySb0H@FMaTD^Y=&lT`6IqDtL$fa8_JuDx7>!Q_kcLEqphg6H_nP z*EM2EF^iI?PSVauYiH}Z-Rba>ID(702qU+nL)?`4i*6DOJC)GgGv?-C)2!*yLVfuR zPtuh=cMu?Iv(|x-LR<|Xy|~cJ!*Y$M61>B*=SJ^XIQYnA0O<#krGGI&vm!T_D@G1% zQjDolth1-hLWTslgTLxRP^v`@190=N)xM0jj*>ACCD}rKWrlybNp2yUj;$NZ90j$T ztflFjI#_QLu!hzAzji{n|BQuDj43owxL*Q-$2H{SatL zIKr94t@GRpHJwwwAyAHm-`*kQT2cRN&@77=BoIY^jf4C&NsRO-@GKB(F^;t-6BDr3jhxG88P= zyMxn~%D3FE&oxMR=d}e8kv*So$RRd0quccMmHb!lUkQK;AJ1}6+u)ooPg8R2emJ~S zl&4>9R>nMZ@?DzA&FSl|yBAnKgl5C>mlcJcr4yf%QRiNl2dDDY%+xfqca8-2x{z=$hoFDr2r*8*6C4A9w*9&DzHuDrfZ*97=F zVbMWYCG_K|)fzqGuM`0#{i+b`SHWqCM$>QEQl-BV*-?`4I&M&}=nFPfcJ8DY$H@7*00c9YPm?qBx_gGdp;VnIyE z_SQc<^#4&fwvf|ka&L%Jm;$*$cK%HEgW8;+aw1%h#Pl2Jji00vr+`U_p-~Pm#>z zk^_brfiFBFq^nUGNN`ZWo6LUtnSxc7qFG~uU>8|H{=|D)=DenMEfoqAOr8oWJM)+8 zxiMyCo$0_)qh&_8f*_Ayd)Z1&={JOExTagC1mML)W^VYLzMEu4*}AKGWypwmDLjA$ z(Z!I_Cx^04wd}EZc$+FO?D>LK%tq;F!EEBb=L>k3-_ZgbQ*d;^BDdd{8p-zd^y7nu2Cg!5 zs`DhR8#lZrJ^H#ba|n&|;BL1t2g29iC-KGXD}&S4Ksowv_UUt{)IQIV!b1bk7~<}g za&mgvYUaHgcb@K@7&jVw>88ATXumlFEeEUhNiPcE+rrW0!9mV!^N?xYZ=3a78(*ff# zIEgCnu~EkB^>29axV0Uofr2V)zpv}1`{zCZEY#CQ3NHP;?jic-MwW8I`Gp=~lasG% z!dNs*v%KCQQCm5GK0mWKH*c!BN>_aNH>UeXwF8r|SGoTVEUY>@!+U$P@$tGqK7E^x zmJGko<|OCUq=jHKS@>(f$}|-zHxL7chWn;oju!Dnt4kMx=zfL{+@|E5FZ$D6=i4Pg zOv4@ZsItzKi(rrLsAD@{`nbDzxD*_P*~{9>^F{d!+eVBE>-0R4N@bNN7l{SRWh>b_znN`mLRk~*GNcx*`UtllOxfRk3k`(vZv>c1?Y7PQ zOKb!}P6B5QR!ko2iT0MtvpPL)hp=AFgkOt@L_Z=b;2?c+g***-M?waAFrZqs1PCH% zDgSQLSAJtJPFy}bTne`;Z2U7d$xt*dgqS$bImFKJJZ?|VU)nrFX=(2){zWh|RXYMq zH0H%D@hs-3;>3P1U4yt$T8`5 zZf>qK+pPaIRs5joZECx3dnV1s7d;D9E3SNh2J+)}!8+T)sXCszkhcTD@)-!)Li}48 zz*6P}X6!%z(qDZj>Tfz}%hM%C^jWXo;TFv6{|hV>Y_4yrpOwfy9*;aR@A;y!cP%+I zTR1A|yDxALl+5CFXz=x0t<&FrJ0}8Uh_Sa_xj>e|*Ufnw{yKY{nT4SVAU^bbtl9d70 z60z8|=FnbVQnl9eZ@bJ@bAewE9M&Xq;C%)y1|cajt{=t+=1jbFpgTUhcT%YhJ<^{s@yao!?~QybpqepGL{x?M(nGykF8PhU)#UGrlvPCmyD#qcFE$qlgMHC z_;AVD&>-x$&`TZj_FTg5bJ^HzfAN89J#5O?dN@t})v2e9BW$*sg}1gmfiqpT5b-MJ z9T6q(op6UJ)k32kiHg6g-~RrsEUR2nH_X#iI!&HEM>LCdYx%7%KnM{H#Hk>X$(q&;0RaSZG&|} zK1+z#oPd>H#|nu%TZ$D2ZKV5~A*BQEFkb(Kj>`Shjj2;xm!v#!`j6ty(d)aHS%gU) z+8^7Kesa$6p>8Qj zk2tie%KZ#8vQI8E%MckIVYOq}%`NRG|44-3%e=0;fog>O-;Ld@R#t)VesX4d6WxlL z4|!rC1VbVJ{A~U*`inlqhi$RJ^Vrz(A-8HoRA2awh{ZEYynhr{kFNZq9X>n9N&MU6 zmkrwKsGonWShIfF1b=W!@<5q##H&0jzN|-p)Ka_Hh@DVkFlt@{ms03!E%ibxZ#4C- zD>McR{3(u99OspWdRuL?QkdSwk`=25c^KwSoN12@2SghwV;w$i*&LGh9|c0kT?~f4 z!9YhH?o99|U0IiG_U`FxijAWm%YcsMo=kQ9Xbf`G%hTI_=M|995IPrePa5`ZV~(0n<-R^Xsu{w?_ph5R~x%~A<;aX5w3StxdSx~=fo~dX(JEBeXA|w ziG|R&Q&gW`O-CRgap8|bX@2uJ&-(^8CfD)BV&!?K>8Tu) zC+MI4sG}H3`^W(l?B*x=g&LCUfg==;aTMmCI!nxj0@-UA#;p`_`k2b!{_yKsO@nm$ zjpe7%G=pIb$j-af2r0d;P(9cpU(Q15o{^E5nkiUYGP%1+tYYmzN*@RrWj;LMD=VGJ zM26Y1j_6EyPCq9GU@Y0lj?)62A=PL2+jU?}e5kFRQy3ITV&gj&D~nJu&@g^h0Vv_4 z<_^BM*S%JB#Y7ZYn?$h~k_Dx{M4bY~t!rSyk|g*RBKpOF7)q_-j-|qf>>O|SMBs#v ztqSlz3f8V(lJaiEweALTAlY@Vscn9#WB&t5n*P;hkfp-PmitPF18eUD==)`fsvI$3 z{i@q(9fLWSPNg5asSlESc|6(N84_q8E0@AR&#Jrdw?8COk9AnJfcmzgLfgQ&np1GK zCL_Wq-zxhEliO9Vms3`rWBascOfb+)o@8kdTqzgWR;4ZBLX zg1C?u#6i;YT~vo;U|UGVNtn{BNH#%N(R_88fk~w*;m^+!KDvKk_@Wq=OcJ|bBKqO< z2vyCg26Hkr2J_}PD7q7qNRsDG0+g>TtlYKm4On6PSv6V(jm3FCm%-acsk!n{SX~Gs zyJ$oGaG70#)1eApUS1_u3#$c+hqLYr%D<(8r1;Xb9@31)8fei(CG5Z=K6JiROPO0` zf#Oc+cG^s$)M8Iy>?r>fB_+zHbQB+b{hJBH@n=#`$LiF4xs`uSU(3ht*#AJEma|s} zyNSt>ptOw;vCQ+DE-~A-`N}M3HgWn|28Kg4eKDb8E7!Kuha~1>-B13erb2$6iwx>u zUgNn?M6SaP5r?sWn`Zm1I%F`%l5b81ei5m#0!>8fwO zdWbX_dpl#-d=FWAQ|V1|V@^_?C+5vh_{0jO8KfU|klhX9^d56i4!DzE`)9HEeGl3C zp~>3<|1Cj(wak5O1~JJ=BtHST`U0b{+^G>zH`AQ9ervHGU4Zia`1kspZfmkbqT0y` zKNbHiUicXOc_jvbRtKasc_FoRm4@?-BXBEa9pOCL2D3q1y2AhXfjfR;_E>0RtFQlm z6igX*HMp{>{kQ(!rKSnx@5yzL@`P7Q2?~oHp|{{E*40{lP^N zMfh`KFOIB4VkigI9$bjeY+F{I(7X&`{&ssdXT-axN1^Bawc!ug_EnaPK=MGp`W4Zu zB*H0(ha8`!sr`>aEdX`wd!|(PBPb%o{n@2d;q1>)FCzItMFk;WH2z8?ERG~c3jb%h zT7TXZkg=72u!@j#n0NhWvIwA_DC8ewlEp{>eV4(^RpAFBAedY&No4Vx^XcEVuTGqN zj4nJb&Y5t&ohy9%4phBtsok3AJ4*0^Au|FsTCf9PbJqCP zo$_Q`o_;Hr{a%vAE~LRH@ROx_;sBl79@BVf00Zk_cD0+?l8v|lU`y;M^E_a~DOO~l z-w>tX>Ot+BG@-O$fF%WQQlMJ4B^w zxtU*^Z=IjhDV`uo=#(RHXE7MQriz>oIz9gD3WW zVaTqd9QSKtgO=S3Hb~l(2pVMuKUqYnD-XRghTe_va?+$OeW4z}_@l|_i+{a*kFTev z$o6WKTH{-r>$tP{aGuat$TB=noH9UKEB2HW-xANaEKA_SfiD;aqdu3D~*`}{ZjGpA0)p8anN)_-kZ{^Q!2f{%?7E^BeMx9GO ztFZj+PMd0yYWQSZYJUV{;4o(OvtPl>b#aF-}r_c>O*Mh zLglqh8o%cymQz-B7}`t$#B$q6iuuUlO+Qbm5?$$?nS6(kA+V5e7IP{(fZ$GZSO7u& zKBrGW&bc>|4(t!lv=Gd)4FKN$51cb#Jf-GC%Sp|{x{YVzL2alfw0;~!WXT$B3_jabJG5V!_Se1cJkkEy#RPB)Ua84#XcF*uaik!=!BytQF zvf*@dup!+%vd|E*`FI1Jp9cpA;ud!f9-E>0=!HKbN0JA>I^1A7$aU%I{$#^W+`)oh z8RCAo{1zly3nnwXX!$m_V68=M$l)cVYM-SPS$CdgJ7dCtZS(!UsrU@&Q+l~HGMyeh z+uC^6)Ro$XB=tvE8RsS|P67VPb{_c|CFXOT`<(?eRgqM{=QP&C10L7hAk-aperui1 zyQ2i`l)ZDFZmUka|FMJl?L`NE%WEG$_`cV4OB}v>nm8OT+=5qT*C_a2ij}eC5*CP^ zd&GY8oM~lAEcurXy;%mj+gOG+di92~2+26qZCWPvp2e!GDm_j)crfKFl_vcPpJGTP zo7uCtAWj8?`|}^(W80-f@oP}POw=5GMnXe?0hGgL$6B#4HKZCeob3qWU{A=L%SbXR zKsF?s+swI-8=hJhoLqz^2nlA{MKcFHGP++{m~}#VK!a1#B3{G33BBfped7nGLq+C} zLlGTmgLbkrPDyVsbansUHNK{OHXin(W-t84oGLw;v`{$RLHixpHlX^X^S6XADUjd# z*9y*lFH|lRroX#6eaUJ`;3}bvIJmk;-z--pt zc*t#5Vt%AO()RkJ>dtk>n-sKclgYLT!ZpSMJEPLb%5kQjOZjdu^Bn?^f7^h=zDrtK z+~fC|OL18Sm25`t5K)MtHhsBbdRC65dRcDvINwsD8dC+lqr=p0Eh33*;kYWn&jeZm zaM|sc&hSYciBb&$!6Jzzt$qJ#L)+&fp_Y2OOpmWFx4WwFdNEgbtRi|}H+CSqisJ&HYr$U^alk>Y~KeC)VsPlN4rTbXVw$w7Vt_#y|MZ1l<;m?fuZ=ZHG z8>Wi2?}3y&f0OAN8=2(a!5hk|q=WXeLLyP-(>XFEpzkcXVEqH1(W55Dt=T4o-wS<1 zB%4t0O{*v9#pVRR|2_M5{XlYcoWDtiVJpL{*=?-%?N7-*dPEKu65S>^sK*-0g75BE zqXfRQ4Ls6qZJRlH!Izz@)0LxKDP8(muAf1jE#S_@tu=aGH)X?H2Kw-q@ATcpnyG|@ z!%?fukoLKw*C*WuPJJ0!@)I$E<0C?RnTOcj5RMDA<6|B7xu!qiF7uUvK5J*mh}C!p zjDI;}IM3`wD}Uf=GrRW?J%c>jWvQ`^!cZ-Qmy>h;PryJY6-E?7R%5w*0aCreT?h;h z-QuD=?lSALE63~BFK_1N7M-lPN#W6&dX2?l!wEh3g|RJVD4C%c`IRK#4Rew|%51I`e@-`&+avBNEW#*y9)1#1L)n#Q6z`RZa z659KPtRssI>H0kx5(4uZkAwIMay>z{ldv@6C-t!P?@L79HQW7ej9!u#QBMc&-@dM* zXV8=#=BywNmL^KCv)72+Qd?LMbZen~< z$+yE}3lpe|2r?{ZpEAs80IPcV88`E~&xKS&{o!-S<_#vMv*u(dF$|wd(3uSvT?kZr zgDXQ|BIp)(reu@S)j0`rKSp~6%=x}_#7{-?3wm*KpAM1pHB`8_S5(AAe97QHWgCH< zo;D}gcy_9id?fHloS9b9jzgrwWG%;+`i56V!oK;w2|F}6vlM!_LY@RW)*4h747Uzi zuLg?j)eZc;+W`<}+#MY9^kYQmWDDy8s(pYXV)Wo8z+}p7-joiaVu_3BFVPl@EiW!N=SzFx<#$2PE<}&H_np&=-$i~sFn~$#V z4+V{=hPjKD16oF-;oJc#4u=);l}f85fEtf)GS2|F*!-g@Uk=M;J%jE{zNeNY0A*zBns9~aFTMA7W%9f{ynvpB z<~LJ142-^Bh^(B*JIax?`nC=cy=tMFv~dw2$SqNnUt!T@QN_|?Wrv23yJOm$T&|jS zC+ijyrH?mppcQ4Vs?cZnJTh*sa=rVyYeRQ5OpLFtu1O1ga5a7To%cR5v-Ozj+EY{O zoh%NY+?`)i=NL)D?|&3tN|sFntlP3wa!tT~%~&6&3pG8K=omk14ezYi)4C&ueA)W` zGF?KI0Vvp?Yg4ECjj>%&u>|(jNUzt z-?XYLLk72oOj?U|)*e9r?Rb{J6}6chnDnQUEVn|D6?vALD;A)z+Vn11I618QJy-YJ znr)e zcS59Fnwz+C71={e(!6V=JDyNHs_pZjZMI5lKgH8L`!cMf3{o$garAF^0Pnx3qo$86eRFVB9|!cgJ>c!Q6sB{BtyX zJ!h~q96z@nn#Aw+Yw9h-vA2_CKDki#eVhx68mqWz4^Q$mGyQ-mZ zv{jvdrr(zS{5KJ|f3|umwBN+w9-_^83N{il+GNa5tKK`W86ItzZ5a;(xu1s|bCwPh_*=ijaNJqDVD!RpYlan2PCN8AqUnY5<;Cw zx-Uvz$n`IVih*m0{(bLkcn(xNIReGLMzAcFn=fW^R>V8E%rhaiPhEANfd>U(;}YIe zrikU%*+TUGe-t@3Bc53%2Rd|j)%gXcyG6sUfJ!!_$|-vh!92gh-%Z)VP_+Gek>og_ zDr=}x>&ymD8cBp}C7REc;w{_^R+dG{y+0UGO0Rx>pt`}kIoEOIA+<{uZaaoN_2;=3 zsJRXw;Gy}`R46;$Az1yV5|ce+qE8Rq&$(x!|FzWd`Rz@4^i&c~*U2kPNT|hb3z?o| zT~oTEuA{M^)5&)lL4)3b>P77i_Uh3ABBlaRifkcZZ!!sH1!Ibahda6XMv^-qiIptZG(yaz(rMHhI;U-l*1i zApDcE7fxxgn;|qJ2v4bngU5EfMyi9p%R(J|1fsbWHc477Z_pa%Q0sQb_wVdlD4FQ6 zZRrJ?oYMJZ16$4J_yNDJ_UM_u7Z?%7;J?VO6TLIUI8&!@keO@RmMYPZY}VdxKBC1} z(7Ba$=CYN{bQIB8{^|7S`i1LUhZ@Y)g#Bja#v}po*tD=mQ~J#w-~Ii4hs>vbBj*9& zo*~N8tC7OnI2*X#`f38V#MJZvYz=&K*FRSoIv~f;G4deYj?KjNJ+))n3pUn~AxMRh(=A1F|8j?y>n7Kg#e_T0L)sgd28;W3I8C=1^b!2E@rAjrox!yoa_Vtd%v z^pAh-)iolF#7XSNl87ui7U-o#QmEzJ+g-Yl7I)@%ycAxd9W-bwrXi!*cfPxxCb#yZGZ@h!c?rabR_}aD-rhr?dHCn zQ|DrqHjiQErk5nVLzEl({cMEy+RCU2IM-7tm_k#Xq6FXc-WUU)ME_w7Qasv~G2(JnCp1PpL=MZ-AHlNl#sLcRQ zYY^H=>w( z0ND8)p#kLhE!(=^gGsxJkRVfH!Z>4na3r+S1aIa=ooSuAk!Nu;rmJ|lPin4^#ceE0 ziia{sX`qfNjvaWG9f0CAu(TZK+U)rRb4lJvvyN9P3Fi@h!ROpX0XG%@rHVLkcp|Tx z-|ARU*io0>U<&Xa;Wlx|2{T>Pl`@QZbF5wsQ-HGgB7v3aR{>M zwf~J(j=fMPFDC)I=9j>UO7<}U3B~02?Pz1 zL+-)T_SLAnfs;wAca;^d9^k^ER6u|lDt+Q=V(DF^NRq?&XYt}pjjNiklc94Dh-dgf zB77iRp=Dm6W%k0{f$XuGH@%mkG6-Fu;&b_Ba_?SMg;3*n3Zd&Q1(ZE#S-gIWE!Ceh zR9XXDzQxjrT&CL6Lb=DQxjLA1fyt#i`w+@JrqtQ|m#gJy@|#M;D1;wDpPRD78UWh(Ipi{%2AMgf8-fS>cf3tfC)ApImJ zch%wbj~R$*u2z7=#$W!rX~!6M z>u_sQiB=ROkCie(Zy}GMit9e$cY>4AO%D*3Fdp4H^1`3#l;JRe( z@XM@Xh)CzxR6@P1OMqp$`XO%af!S11bpg%ON@{@9Gq1etZ3tu>DKjF zMGr7ykI#&l`+bKd&{`LDyGx8~Ug*x@wfTP9dx4W{M}umt#7H4_@=P?>I(e>ebo087 z%7$mxCa2ubf%hlM^X2j7*_bDPNl*S(zsk~36s}LQ0FfQdI)=x&Y%F#kHEJy;t>Mxfd)+M=7?QURH56b!|3mOQ8L5!ltk~;_uU&ih(8`XpT z1vf5r2VC}?GbY8E4=^@_6 z)(dkPjHJ@3t`>h!7Ps+f$n7Y;gNy7*u~G+O$Ayn|vi(-+t$T1% zm4`(=d?5+@g)F!9TP7a313C=?LOYVryKKoBoq&~KS1-ds2O#tbd78*yl3u^Htux|7 z+9RR=&Ku5m1d;SFJ`hteN^lBdhT$h)j#j&ZlRYI4OC{s%>zmfRk$iUs+C7|l!{ss% zUf};IKoY6mpj^t&s}@PSg=~nz(LUUwMP5uKmbO80$lb_6T}d`RM&7#}j!NEv#0FAg#`s_w^jLe27n5 zZ$2GvGRE*&nJSJwYnetSs{+D*fse$=H~HU2TfdUuJ3)mY;kLQT$#PWI<@`8z^O^NV zyNYqD7SWpgcd;a@lv)!#dM%>W7EO_`fjO4B>@z~FAFKImImyw)hpZekw;xhy-C!Ih zE1A;cc!6W==|rdK)#L7_+zC*tL&{6=;p3+rZb`AywxU_@60Xy>r-=L_yEN4piG8Py zM|Xia!O%V-{{$pUL0?K~)pbu5w;IL!tzP7u@~zAxne_H$jk-G5Y^hjriqRNldatNC zM7C{C8$wX{-FA8-MAUtHM;xXkc2>Xd#M%GUsIpJSWrQWL7HBRrr$`QhHO+@jL=I!+ zk{VYjY%j#?I~I%Fay)IVmV#UZmMuj@!5y{uMkVUo6x&|{t0SndghQVbRj_ts2`i30 zV<%@w@YABPqn2I9(XgoZ?UXl5H=gW{ddjbvFn5v(=tOh<3q7a}u;{y6SEn|PC3p#xo=osifom{|e$rL*fb+g$ZcOCZ&b05W{F6cH*%HUn zX&}MCAM6)gznT2Y&B&Nbt5vH~Fvz;4TA;n9y7ZqIozC-lMC!f0CL2NAK|jik-50-N zsmInoC@spxrC0UirYW3QLdYZzlQ#{h3m__Ako8TcM&{ffk)w0V)|%ia-{kHTTgiQu zYp7*QMe}*tu<>~?G#XTz7`(XoK2nMO&uXuYWNLrnI-7LfERwA$as5W3{o>Hgmc@L0 z(kTqjYQ?wBo`qo{Pn1LsOVd5Z1z@v+ZBP5Lb)M0c@A5PKzyb#iiC_tG6QeQrYat3N zm{5-6YVK1a5mNgl-IA+0d}C!D+tOuXHfdt~RV_X~_{oqmu+?p$%tA77g-|PNIpKLN zi7Vtzr!cX&&t~!sfLjL~@Gfxrfu;3|G{yNFl1{_&Pgvs`L&8M_@`7ny%tNyke?PI* z1`Q+xk<@=NAMr`PcRcblsQxs`XIe&dA@~!E$oFKlMb1#c?ZIs_Wb>yeN;<`)&^cf0 zc!2p?O}xWn4YX`NH8=WpSfWv*YJ_uYyvuW(f1L;P!aS;%y|5(Eu?=}zz>lC2 z-hKGJX7sh`n}*6|Rac{Rch*@RR0AP}TLwQIX1$DJ*eR4g^&Hn^r9nFKudby z7YsJpJaV8^$k^uNd$Q}kga9IsiaAzqyYVm_h!;YHdMt&wE)X6uq^dvmHM%UrnR8LKt(YY#xkvF9 zf|g1?ja6t!Lbd6130msbN;c?9kuxpZBCN@_D0*ls&6d$8CHUYy$H zVZRdCZHq{huD;a!)r=oJvB+-fdi(0Y^xX(w#rYlTz#yxGRJZ)KBnnFPwbca0xmGOg z4PwCXm0-v36Nx*cBX(isOT5cFbz?#Wg->Gz{pkx9T|~S4^KYrzQbu+-`C%57ZNa7J zk9+vBX9D#gkk;PBOq{s`^y|rXKZbj$wvwI~VPPOF{ zH#fS*eV&B0!Q(W`qDB418Ir2B^}rliP;U1ScZdk2vxL}raH?h%YE07W#i+$~$&$(Z zbs#*$JG@4+PssxCpKj(qZz)?0Uq_dJb2AN}7p0NOv8~T3MTTu=7aLwKK9mhhrN%_m z{R>tznBFu$sC{pruKt)a)xUWBS^TUT zlFh}l%|27($4TL;HT)*x;_1`oO^7Y#tCH+sEwQRY`{3-4Y!9_nB{vVP09?L1CrLo zQ(Sq!Qbb%T#GWf5zO7WVVs;#231|2Kv_}G z^og)3)Q$|SabXy>6_{XL*8r2vG;&;q2C0u>x{X6*o4VRFRk^NaSGiPK0_|6O(G0Ui zihfCOl}ytnljfmO^ZVupxm!Z)^m>A04;{DRGTR6EDC}Eui4!X2Q#GPeo+SRgbMEG7 z`bdD+ha*0Bq~f=0G`tyz*!_z|Y+EYb)dU$Pd?A5LeMy|IG?$z@-4RcJm^QZ6(^U4< z@hfZJW38~N|c=0IQs%Doe+myrfm=$AsU{Oe(ynyHN`;R(5 z-`qTruMsjHIZw*0w8}lEDK7HJx_~c*N zHgw3tQ}bf$Bd&Z}CE=8fhkUfbP;e0_pux&=adA>KJHf*5&0>=F9RsUte?Jb~DBNaR zF%=)Hl4H+&kLo;P-5D2mnXc(PQUJB~YCii_2^BW3;yVCoTl^i)^4sAF7*+fb#v*Z` zfQ31bec}%s@V*&t;ZKMkQGT5hWrOcD9UKSIOt0Tjcz>xdMpb=oq&9Kc@5X{??}TcG z`Fn6#U8uCDAdMSlu#KPvc4rY%_19@pJHMYEE93*DR%9Sl9izuce0l1-%DmHTVcq{d z&AvTm%{zH2vgKyf!UGFmWJpy-OsKW|56+RB8VsrH#TLwLp1f;3Uds{ zFKc|{d}4lks&CE9f=md%mxvR=xFm&h16fe9&DanX=XE1X-}E)ek5y&5AIUEkm?$VY z8AjmQ(kr|sbAC@wz}$17_K`eC&zH%3N$5{T^m;#-dNZBO-{Km|Du=w1wpNwxN=pO* zT}GMqons>WfiS<;)qLm04oT07U2XczhdF%ZHBL|hhjSgru&^dgKt;@p8sMHFSFG zk^i$+?|+Gdrk;|nk=HaC{6~>dK2N5*8@2sMfgDpLcGE>{y$s?Y2C_Ru1lxxI34fG}nVxquM*mU11Ef){DHm@&Pijw+jXQ_~4`Y%*}*K zQih31hlF6Yg_1~9SSk>D^&2g7S*XggbTxRqE9O%E%CqgXE5_5VHPI3jD`44^1VdmK zH+(g1 zlnDEUX+luZ%0{~Y&bTSxk$V{RH3i?2{>(UYgRb|c=}qE`RzTHAsJldl7LXV#FIM_wjZ}`|sU!m3LLw(lOP(DK_%J@^A!~!|Z zd5?qr4=4?iOq-^N;30NmP%NpHg4te+FCDb*;-8k-D*DS?Ya<U6=vT3&A ztXGe7cWi4%1Pgg!;r1gfD@U(A1CFKap|Nso!Q&ppT# z4{GzkRMQ!82W6{Ow`>*(x(}XjP3&*oj0md6X(t>@<}*-hBHSCScB{eM_Myees>%jf}}QH!!ZD&$dzUKq_SY zKCuMkZKbgEJ;Cr&nOTk)Ow`?I_+`Iuj&I3UkU6rg^UE2SWDk9WTm2;F3!wuB3xnpR zP(*kinUpIN{WpG2W9Fdi{gejdQ{Y>dv7c5^lk2kprU6`asrb)&ni|G0tie3`)=VuH z5>JYcy;S<4-$p2Zv*{6wx1@{j&kJrjYA>K4zzWhsv0E?Hd-Wq7Ilx3|& zGI6Fa^3k=HhQ6E=ivU96ubwm`OMhQzV#vlxxgG!cfTn*1znTf2114Ck8J)cxE8TgO z5#3|Xlv!dP^|a+r{!fdnj!wF?YT5}c<-Pg^+Q$V(v$|mH(UE);q^o%Sa8X>{2^_W( z0>pO|=|(@&g1d|rr#H8iX4tH!=XCm?udGTncb4zO?f<&szic2Qj3O2jhjW+b+b$0- zA)lp_Ul|mXeF3-|piV8c?mCZ`co>uKz<;JbC86(-T_T|-#Ix!^(+wOU3y1!XLUZad zr40%7r`a*WL~Te8kV?e3o|9-v5jm(ytD=G)8gdFe@1$Y3|k6@zW~pqxeA1+Sv} zComJ%HRt7unBT06+<54X?UtFXKGIFm%u<1Qz37SAH z9UPy8ROid<@)H7+tb>1e6VBSU^k-N7i^3!b3KCU|3zuiO#+-_=i#sb2wE9eT&Z0j0;99D^M7HD8yn^?dN1gh_I( zD}Bk5=S`89+0tM8`aI=*pMEka`H$}Nvj>&MJsFy>^2r`*rouInnd1k_^* z=Ea0pxKAL6Xoz5eeF`#&2Fsm+a5>S_dg~eD$^V$5{o$2>+IE>)0~Z$oL>Td&4-(bg z4j_h1(JDvvwgjMTY+c1*v}c{c6}xl@OWb;V-}WxWRc_PIkHOLS1xQj{jcoVZ5r;Qu zM|suTDJy!~vndh<1=WGasUwM4&7yk7zDNOS{;u2WuJ(kp+>Lr;tKH#=lnJEfG008< z1Z0tDw%D0~l6pxf?2hv{xs30N_>iu`f}2ACQbqa1)ui8TKYfPlfapDNjVyx?=ZS(( zS1$SR20}Zp*!r5@uWp>R$0~-@oPK z-InpNY=U6=y?sehYObet#ECnWE}cmuX6?!2e5T%*v^vv$5>;j@no{p}$r?6=*XbORe6;Yu-58~%+mV2E^mQRTwGyaY8@yod`Q~#hKsk*6%ieo{l`6zp}uqjn{IDl7YKiniI-$}q?pX_qc)!CuBu5^i@CC0fE7NW!tv^FN-W>8nk3M@2H>XqqM ztw*qj%^gEj!fRaZ>8UBYYvR_fuY5~dWo;9EneDzdl=Zxp<-(^#HRhoe6yv|^6*zVk zSZza#ODdp!DQ@23K_?AsbLLj0JjwS;q2xIM_5Kibj@U&l&$S0W2a$;brh$5HYV@abEF;S5L19kh+SFn+ zx<`_%em>fFJzR%6@lUIm3}R1&rFZW-YCxy+YTn=r=hPL8eSMmF4AHk+@v^*pBjG3e zE%dLSSrXTA+r<6`3?wj{JE(}$rPsnEVvX_(Nt6u3bQ_^QO4;ad=Q4?j*<;i z(8msoyGE>17bL#|;MR#Kvw2_JcdFMSlk7Qz2h>mf<`|ZoDiFlqFlK^t_GaWapKvvt zotQ;ZjfkD}s~F%hYBISKwYfM+sns8iJI_6LXAHJ$l2=k&Ql zyJC0%K@S7;9B~ob*lq(TB`W1*voVPa5+?h^n^smoM`nd96HA|2AF?D0uCY$?)Gth~ zcYqi@0c!2_rNOqrPiDn=&?mn)8B&zsh&go@T-4#YaM75_%Lp6a)CZ=1Ye>n>pZj;6 zlph__Z;qjUYLY9k*u;7&W;@^Ql+-n-5gr>G1Nt$Yt^2Y%;-aJ&dsM3P@v>${aoVYf z{(cAq;_0z7JbNyOL3Ry>E!=?FAm5pJx1T#5J`rd2+FLE+eq-f(e~fFgJmFqFzmPI} zk`RFFHKkAb1hkY-M`I(=h~QmkBuZqItJ0BU;c;WQ*64Z-NrrK=OMq$(M z2Uf>8QH>u4!TKL$$&AxO7VAAZxvz(bXlFU9ExDI4_oWPLv2JD=>uU*q;^fPSbx$Qzn-tZQ*CIP^rcvs=qa%WwVi9#OT*}&c z($g}Ms#bYvCE6{uwtoC+Bt-a>RU>gyHhWSx}I;7&woS60tD47 zxD=Vxwp=!9E#=~#CSSv(21w!b!2b8+Sy3TLgbuB)iiSs(lb|-ld*3c|K{ZK#Wsr*4 z2fnGGvM4Xg)|dY##lWwUfx*l%1Cg&{=j~6PZyU3ue(mmKPQLlR+K&-oM{qV`PYUQ0 zfLYzYPVgwlh$M+*6-sW;O{Z&IF^=M-Nnovf`M7a&O?sNvola)a8|(ZIPTzdPZsB@m zG$p|U6P3IKx^6N(AAo2(%Lo_Ts&?;Nqqh{pO1$_!Tj(s_RiNH`9i0yli7j-3%bkOv z+@8fMxjsoPX4N^q)T!={5?Ok|gqiYFH`Pey_%}aozvOX#@i)#mq@2zbRypKTu1Ymn zg80myD9bt7*=sTXeN zG!H8%erxJ8ow3?Z!c2C1x_uO8kw10&7TNzUd@h(8q)M>Hn?q$Lpsv0E*}Pzv6&w0^ zu0z=OPCD1A76I)Tzpca_Sb}&W%Y&Hy@SF)=rjMeP8$hV&(CWkTS!phnt1}Q zasDVmxKs#zfUeGmuqGUrypzajcv^iEVp{z8p-pd{48G+{JK1f)1Y9_f^am!j>~p&_ zvxy!0aiP80KpoZC^gUWFmMiSSmi1p!qkj9nPRCmllyT5= zJWF#;cUxET1CBnj4CTg{`ueNJ0tQiX6RHf`5^ezNRvElbw=Rdt-K|O&%G^5nYawd^O6PRK!1E@5|I<utcIBSvBVg40k;M4=s@isXJ5+tEv| zxr93BJ^14fUAFNIrTKiaqPBOf;9NP(a$Ror;0E^-Tbat@{eEX3G%}1xgRYLlvk|y} zZHj2UQdqd)6DsO7M3U%PopR}>*H$a(&AQE$Q$$M!Z6jtsO2V1cuD^QOthuH%v@A^# zATCPtUM<{n&>WmvSgP46L*r4=5zSoYK5C}ugtaQ+4)IOzi4RXkc_Om}(8_%$)`J#@ z160sXQ~;!HfgJWGfToj;Zal8T%sBWs{Km#HqvL9g`KOv#S(A|58yt%tYF~&)D+_KP z{IInB-0@o%UL8?b)lZQ_qBCP>zNy8$a*F*uK$%4G;$NjyOt`CE3 zbwcW+@|WZTH1JP{jsSUP(d-5L>By~_$$&bFE7!6)#gM()x6H4Lxm@GjSeP*8@M*%boG`8NWSJNnM{ z;zC4K0K?<)#fjYU-D8?t8=*y$bHbzQEO{-hF6du5q!gEL_Ikz26xRTuTxCi7H6YmQ zD>7bU4=2AM34RNu4?s0oKGqmA)+8Ma!cY}e3P|O}s@+luXIycbmd*QxNgjLi3SExK z{1jWs>upnKdnZZI&HKcl#PLp<0q;aU6c1cEgbcncy59%kaug%BG5&RPg@#y zNUiN_WZeCf*o&Q2J)n4*A@*~tO^TFdZ}FYOZzUF=3Y1O)9K|?o8XsDu}@=pT6%c8^eFVBs*c#-!QKEx6C^cJhQNfzrWb2^qnv~9 z_{AGr-HRQ!!E1G8^Tzyg39{?p+skKLr5a5jjmrQ@_va7Z%+qsoH56ut2%0@`x~)I$ zq^}#zF)?3_aokK=IaSf{@wO@mi$efS*7FB>S$ZOOTa~Hx*8Tiz8uZlz{Ro;k!y>34 zhP))G@o}DAlJtmjxeja4insEx@=h?*w3s2cGE&ZFm+W8%g%bivBP@jt09}iLqo@@x712^UPE5(x#@6a9G{6O!0-}2 zTO*5u;Yz$)^PV*ycXlgTVeJc$v_Y<$vxE22xeX68ILi4wsJXiSAWJzCx33FkGco%T z7prZt^#CbdJ8Kv>WNB(Sy=$cgkJszNJnYm@Gcea(aZj-*Oy`%cDy(QIZ;GqbNpHRf zsEEs>8Q$+HakS=dWZWP2z<=G9r0`HwmS47(m^v7DNy~G~7L5G)w9DP{2wYmyC0RQn zBpIpJerCAVr=ISFZ<}=Wecel=`FM$K_+kp(` zJ`In@jzw=OCG$i>Pzy9Ln<*8lqNSfhmB`n@YH@w1A@SvTdZZN(=?n3iINC+&FeP3e zX$#zY%r%^mIn50ppM|M@TX$FSj_R`Vs<@Wopk!^SpVrfh)lU_m=OXv}%_HSD+xBu& zvh=j_+S1~lSK4Bi5MAtgX)s6qQl<8O@h(T(s{_+KuN0~UvT@DBj%|3XYFi(skR)0!o3+k0tc)s zy|!b0OS~WSi!)2O#70UWO!;K?d-T*LPR1Wpo+j>VDh^&1=`G(H!?-4>ZVoxwo4b#M z+Z9!&?Nb|e0L73yKY$L@s-GG=`T^>djv?XgPhOEz5*#p-MH|cg-{IV(-^ASpU{eYa_#HsEiqs@K4OF8BjVN7VG&Or6an=1W>BwsN*#W z%(y~K+)^;SWT78bLhUot?lpZSxxh;Kgy!yM=IkTkVP&8b=8HEyrM?TxJ1v*Sb*YH8 z^Ef-p9)DSUzG0Y#DA7t*-z}*jz;M`DS3XfQzW1ip7|%}TdA8!(rg{zc1&PS0Jzw{H zb!d2RnsH!x4Ygf*_LaubmW=q_FaVG(-X7QII90;xa1nPWW3X za&~ukX)i~TACNQs<#SBGa}}$ME40I0?ErpJb$Zmqg_FD&VEw$g(d4ag^H@#K6+N;3 z`z{3q*>M>yDaXR1VBA#<80(B?_@Hzjha}$e2TrsTv%LCB2mU=0YH_%3cT zMr`kf?CeugI0VDKOTGxE3mgOFUhWe>xX-qzUEYpxn^Kh@8wU%Uaz7q+GREG`OW|h| zzbpE)i!{Tf?~4vRWS~NGAVE$`Luq_>B)>1`jcR&IMDeP6uNlAK*06fk@Aj2s%kM@x z2Fs$hHU;{6;}NSyo4r!H1zD^XmX*ei;!BF6*f+SCB7(|jAj_uMW)e-dSvY=9Lmqec z*@s^RrRjSgeP3Sl?3OS8Vb!Uus)IWt&92 zel8XfvE5|(nB-BH;4UjEHtakF%8xN$V))c}vpz5qRl>9>_m(1GJv*R5Bix`&P$)_Q z|0$+3d)WDsmw1;~snr$PbYtv$bkuu{G|C7N_F}zj^jkr8DcsWAKH`VkFXdz465k8)??u`g1F8+PyQqLK}%{vC464 zCBE*JvydC2^9MPF5jhMx^Xt0ydwA8Sr{|zo;7DmDDR8ivM~c>Zs7lW6%Cuz@LC<1F zI7F{UE{Y?jokp1Ty^MVIQf+kDLIpTliPlHEySrwhUb`j}Y^emtp5Hl>-{5G9^sZ`* zNE1p8d^vjSCzo*rlp8m-2)+^c8)$F}C^eKeQA?dCdDBH$n^zPecRQ>gpP!anQUGTtMZm5Kc6HZ!ZiedHviZ_}1Z zC1)sKyI=o}4Nti-H7DRGJqV<-`VqVh3;01x8OVnogsOe&YAQC-Dbvo)?ZDD)dvM>2 zxHV#t?tp!Yi^=hk*2e?{Bff2mem56h%SUYbWiupId#&V&^{_no5Muf`9x{{RA_!?k zmZ^2oFyUbB&AcD>RYr;w%;_@!TDwUy+BlSND|WRFz`;D*^* zKxxS@DJ7#s={8*7uyLWg3UhtD)rJT%<25%GFqf{+&nuP>497~b&;N|*_7{66xZ->p z3PIob{t|tAV8Q?bCR5Hb1`9kFwjutun_<#P`&wQ0aBt(PZrEXIU6+4IP=b=tYD119 z=T45G#HpvghIE73l+?~bPFPPli^ATPJ2z{BiG!#Ebr-)eM4rHgm! zfj6ejXSKE(78D%VG&_A zA}g$IXxpuizA|cP&`zd0J=7MK!tkaATB?v(SdzLPzfm%0KWm;;0k6-|NiH`0HHX-n zpB84#$n_9|hUFOJ=WfU9V!xcE*}LVtt9J^v&ueV$8+v{}^;~kM+HR)8(4TxF=-OlD z5>pitCyWjv6!bbY%Hb|5FDDQLJIwI~NvCMo^aV-uvEcY<&gec@(yp6%PS&rFt7>no zg<>lB$P?5_*5k$-+nU#J2*hSl7^!RJc$C=e7L`C8PK@`UJOXsfX4!A57gH;|8jOdr z^-T>@4FHR~`B&iMkNdjp+tPFCWycMz3cvf?)tXe?yNKOj24_KBlm zAj_*^qln32eoiFNVF;W#4zPv*TWK&K=ig=4oV=_EAqr<>r~)BnA)Wq|u@aDEoWJ&LmSBt#C?Mu8-4&Gq2bhv_WmL1!D40%Liwb>DkJE9jiqo7+Cne3w8 z;>nrjCb*|1h;_%Xx6|Au7@)PomuB)R&*fX<9I8(e0gzO4s=T>`>#t9%)-kqsCwM7q zdszLVZ$eon0zn(>713=V>R;7>e05MBe{y^+kW3e`O~9528A-gpF8k`?d~ONdZvbK0 z<9}ywb>EKNTA-#Xp_#R6_(VNPGw2~T{e3><+l2UlIosVVjfnh_|!3#Uz{-Frj)sg|}zY?e4v>Ls(P=C=&U)B#52PlSRGYj}&-t zF+xG1bkmu38iJqUfcMQ!T)(s-SV+}j0)4g_U_Kv_yLcwk7c&axr9Y`!OA_G?#xR-~ zp7pNAzbFtX&|NoJ=vP1QIhDo~0m=@_P?Xc*bL6Nc*C=nSSC~X7WrWEO*T{k_*|t1J z(r>H+IdppJ+%{4(-Y-??^lutA%qd@x=*7Gqg~XzUZgbl)mQgTXFQ6E_{*6SADE8*)m5P*F@|C8E<%%lh&SnGRh_K9VorF8gI1 zx9FPoMsUlFx?1#ZDivUxn%8_b{ zS%RngrJ5ns8zG^c-OP&0YBk6G)%MFA{9dc6Oip4xj0e{RAi+6uUy5XSfuwI$L37k# z&UjR3JFOAjx+<;x?HVy1HAlkQTW!Kr~7)+t&Z6H?YH7$I-$2zd?#niqXcvl z%r|oGG<4Yyhi^k{jw%|B8Zx4;iWdb%WNA#-_9zX1Y_zGj zUV?lAFmVewlgvrq=D>xr^Axn@`P}FJxyW>VR^LrarO$X{A9x!xds~C^mC2lp9CZD% zZf)?Ey25CqTu@7L!qRjOorv`dmPE2I1{1v!MxJ8N=rs>Vnij+xyqu@-!iKv9kk^c7 z)v+WZ!#aN^wy22B(55&xf7inciBa6%AIAR1zgowps(| zkL%CAQj7V7`02VTwRo9?m3oO~uLTzvwst{cgl1MUb?5aIwbM@_G$I+KCF{(MnyLcK zDlQIGaRwcjD~z& z@{AT~AI2}gAMDq{;g@NyMSliU6De^Vr;?g5O1tv;1uGS}@UigAMBinL_c51+bZJM+ zYjU7fDt4MY-!%-4~Xoj9N>#x)Ki z&>X7G__$t>a7&RA91bAImsIGC(NpK6u#3M^4VW*p-T_9A>)j)(uN-!^4O5|v`XVpL zzj9M~@uNO}7l^jZ1;Gy$SQl5Z8ujScd|HQRD{>b8F?rSIr*5eq%S|fX+!Xtb#1yap zFv)+KSzR-ijr#tsw6n%Laf;b$G;&>Ck_s*+l+;;Bzp(aaqg84?M}59dW)fmDp*Ip9 zjYVB*VXIQWj4iyX}x$acC*!ToN)54xF4>{Ghee4bXh5FHB+f_KOrY{>CMl_q5n^;h0hH=C`hqi_+ zj-twBJLQgCeB_)bYrB9xh^elJ5nMT%35Bh__Efz4e7#12n?7kGT6#fmouo3cTY4X( ztFYzqIWo0lYuY2vbJtR>w&OWH_o+c>9jcqSqGk#e4Crax(zhBrB#PPG^cRm|^uU9F zhI8Z8iu49Qyt|bhIu0uY4q+!f7L8_;!UQFKJc^{Xj8hp6I&X}XV6$+o^Sl*1EbDvc z;q7Ae^?Rh?>?&K!x~rp2h=kXA&KbD>%$%fHd)t;1*b(! z5AyJWwc}}ZsZA4mvx&dM)y&y=cq)Jg<0P!IJ1Y% z(d?#amYsLON*Rev&((XbVD$6-kAOlD4Z&-)5~yOB^=B6X^-0(7(=+Nc*r!jI_TD+)yzp`U%p?daAY@vIhf_D ze$+!S^(Mfu8psT^nvtzH<8F!MMAP>#p$fR8<3y!C&{-0l1_k#oOYP6?f*k^T7HYa% z{efQi3zAk)CC_)P=$#E_VeH3Da8=_8jVEHBqrAWL>!slI#ZTrX<&WQt8#4#3L{>^2(mnF(aDRsn`FU@d zRA~YMYgJNs3EH)^#)~fCJ`6l8-0Uy3JL`B@`P;(u>->{1Jgb~uU3y|JYGe_#JMaqj zZs!jf)aS{<3f!m#HZ?S&3wstnvdxUZ3fg=7MP}VO7^a{%fBoCgD-ryawuKAsJ&JU6 zo~qG1M=D&xj6t>JaSl(>-dNk?S{qHzif(d)9~lMwkDJ{+#ovwU5aNu7FTWE=Y6|cb?|A zDs+f3+n*X<^_LaaiLWfd@v25HA<4Fs1ks|MT37Ys+A4$s1s+qDw&vUeD3D&u;+4Ot zwi@X24AaGR`Yd$ACeMLB656%}dLq3~!9w>uBgPiM#n*Tx4x9DX6g)jJW4a+_Qb@i+ zTe+&nvr^YuKo=E@K{=hdzcf2M*A!3+ScVXQxIio5!fA>Uq28 z)}@&_&SO^1l-`3DGniSCVc&54KcG6p!b<#>e{kzioyU3y*}fr+1?_*{OH}?UGwr*X z_5mh+9LcNqThgKEhG|gIzEG|YZz%CV{Vu(&(&7iIzzY&w4R#slxvb@-6K=(V+lB$& zrN677k0n%+d_ISKxI0=z5D}F1VnEsnat}ft?1p?#6vD6-F0<1EtTPi%RCCxuZ^_k; zo$y<+rn3!oPfm^9Z+n%Hep{-?iL<6HS*oR2`j-uL>AI#O#f)>bWQwE`G+~21JZ`SV zq}=TS4gwV?IR)`HIpj{pf`)mc84X&-n}sn{L&F}BR~#==b8AUIJZB-dz|^kuep7S^fAGr%Cm_wx-j`QAcMV?V?gHO(Ah!52W@+XT6=VZqv z_;Wz+mNDx*uospB#@(R#@5laoNd9}3{P)KBKW-GPKp1`OwWOy*YvY0RTjF5#%ZXCP zFQ1iPnqs~DVLr?NGG5(|>C!jLMC`ISkL4yUjI4hT=6qjaFEOX{I>#wAm$-)%*6H8k zKj`EVlMv@uQ#MQpzQ&oykqowgzWeK>Z-4)l`8ljNwj4v9kN${-l@CF02%7w;nAz0i zQnT(R37y>K{Lb+}Otw`L*9k5Kp`VMMa+*QTgTG&p4AD+>U?k`c6{^$5mR1FeQ`{!; zQ4FcUrpcopE90#p6IKrJFJkIk!%ViXesy!j#j5A(ssxmwQ7UxLfjq`PT=d)E>qH9Z zBiyePLdNCls1+ZFXQ{@>LvE95GxKGCstzYkkcXQCiz-LLb*CabzD}o^@?B(pH9M72 zlZr-!MK)I5azor zQxI1fr?res`(+CHV4lV|y6JYibTidhjWyg`g~IWmYtB5e%@a=D(L*Zqb?^Qor}1ZA z`<~Wx9-%+1`WUc=rj3 zmO8|i3fKlta9yT4o;Q9;c5J7(G5tg-?vwohQ!{(a^xj~l%ld)@2)iT#7(TNf z=)VAUA$efWfy@|;3O=Xy7enl?60eg3=`V+87bK;lpfe6XLg1gi0v`h*rbwLF{``Vu zBXoNS7fn>1g5VGrB-L=ocGv-bKd7DNycW2(6!r=>g=_~`F?3q0q4vWhWh=i5OPDvQ zi`<{-_#$E7a3TnW%L>2GkSU2S+!3ApQ`sG|vw#sd#lWM4OPq>4SudYxM!wbM`l97# zEnuR~W&L8>?Gf*9W^8TrHhk)9bRKxdt=ZfeCb;2~CVdRrRRCdwnm$W6`A^S#jUKZz z5`Tdz07TAfom)`v^E86ik1cPdYYo-aYWPkKtKzkrvOp7re-(lF9w>?PF6)--0=M|vWI`0F? zM&nRN88VFlkDtV8DbbA;3-5V6@)RKVt%11cJ>q?WDhrCXp{yXDlgE5+ZgtU&q1l zMo>8%dG1!y$mYD*N7cl&HL&Pl$dFl>AP6tF_ z6CIr-rc~lnn}6RZjY*c42xb3yBS_WpTN$>Z;B=0u%>&hcr=U=O!kB(1t*)p-ufa^P zFoQ?^^UrN%mwY8tUiJCH>M)&YKuphL+2(v5VjYYY-4R7+b%1UKO5nhqR(wrEmGGdb zB33+yh8fB5X|#aA>LeFTAb0qe>wKAlF#bVc?+K9xqqfVvbh zvq<&$TjUxeXOD{U>#3Mt>Zby3>@&Qm_hYa(^82OssY*gB6;Ig=Oh4_#Uyx)I@vHdd zb8zx}D*gdfd8i6J72Sa(50t@)cbJ{Dj})rF?v$Y>KP3U6!=d-l^MN~s9P4ohD=Vza zY^;!sksSS7Rz*)rl%*^}4{G(X#SCVH8QZY6RpU1&c|U@4?0x*`@@wo58rB_>wGrj| z6~ioPCC;mBUeA8wD)78ehO+bI%93gJMYRx5Enm<5+nt$arVEc*Znu@Ia5AnL{yh8? zdXj(@dvMQqCQlen73YI|9{f*bnU{(aN2 zmO;zLAS7OM%jycw0mzCRp+!>B4JxAqQMzU^=EQ_MwSDIZPu3sePL0WQoW^j8E4# z-%34k#MW7&+}EQ&fyzF=I|h?MjWD9!ih=uoBmtTfvlgk4$*W0`W z_H2a@*6P_A0)GMNjv%3CCMXPDjVzfX$Y4BoJJY8v9$gx9EZ(j8^!y5kt*<^MDCp6> zYE^~LEen=6f3x({}(5;`*{d(#~{HW8#RfV}w)>z4_IvR~cnWM9+U*kl4e5!SsRL zCd8oylD$S96qs$ko5d{GHtO0vlf|1CBw1Rdr`;}hwOyF}-lrK$PX}*`o1J z0>}KYWwtMu3iEf5ECt&!$|n`v6?Cx>U!uw%?RQJlF)@JDM zi{4)Jm|;1vx_&fJ6mzV zsc!imX<4_g-Kl+A{I&6m7R$QRaCb11%=HISv9r;;ta#%$^KxSf6sU#wW}bte0phIQ z2lY1_J^j1W>Yq-~(#exnsD8GOy+pRY*0PQDJ$`GeA>es$RiLNg@s#SFq_TL4h7@Sz z9#P3r$Q7^6p7jA?+LktIt&%q%IBqD)?#LX5U2#YkPHOGlcb`=v19FeDY8}xx2v1;4 zTQ$sH4XA!S{G;EF*4GO2?7ePkO2m}DFv&O2le%@Vr?6D6L_-|RU_jHf?9wbJHUxMy zb73-~mwk2ssAS9w=75aQJkDP&#Ru~*p39Otd^|n^MS;+IqStT@OY7~JaBBo!c?fS_Ip#D`rN$L|(C3ZR!3Gjq?U6sJvK&AiPvLO8lh(LQn z)D!_cmKUbTBPcz(Ghh&~Zs!2kbzlAk$>bg9b9Qnc7X1qnjx-&d&Uci~>0K1E^Nh_F zZw>3|_K7CWUXUCmGM^^?v!iEe%0LKrK_2h1pJ~X7@1HU)A-7k6yL10Hs*dlMLYRaY7p`*c#3%AmXGlMNUyI3 zq2Dp!_7`tavck)gn+b2D9F}CtVaA<{562kxHhT^gcl-OCd*JSE&(FGO+27}0kof8e zCO8IKIS}6v3^SXz;)oOg;qlWaX1Ni@3baCtF-Hf~AUOz-YFg$!Cp!Y;&p|*`Spq({ z?}csffIfSTO)w( zd>Cw78B0gFnkZf?GA(Y4OEiJ^X6KSD~{ljrji$SFAaQEyTGge&SPq4BY>m$`xy*4G!4aJXIGLIp$}F5 zv^@V}@cwzR7s=|JlXYWg{`;MOZmWNolK&pt|Bq|vpAN%+wyI}?Sm-%iVt=YadrZN9 zc}{O`Z+^k1;=Z7>vs1P>$*)VVIw;eq-(9j|zlCA5G#4pU4l z$hs_ZxL>9ku>GrW>mWru>-~4t%*w25h^@>xB~7WK>ytYw_D-1im5HplH-i64K@$M2 z{c~a^6~jPO{{h3XuSMsgmx&s0ui_?F2Dbphgc4K*KJVf$ZCB1i!y_Bb7qy-_u+fY{ zMv7fOpzAE#hd!&ab=l5$!XB!qzPERr-47-*YXR6#0Jj z%PNLelgq^VowQSE^Cl27*4i)U#H|`~4pK@=AzRr}yyUjlnTq(`3_3=22yWXY?wcjJ zx8P}cVlaphUj-b;60r7HK#Xwo@PcF|rv%^+DM@})1S&0GI3ov6>vw8|5aK*g3EmJu z5U+|JDy0A**Us}SO$TXef15&t*7xkCw>{e$OV$h=578vL0I=FsexH(dR5NLRC=!OPH4s5^sPs)uAGZCjZ#HwpwNI<8 z$PG-GEM@$BI`peQ!uQn^HH9>{Z*jxb9wndaiA5;bO`l?r2&008W9N!nqN%$(Z~S*- z=jZKfWDy3M{JqxnvM=+qcN;ls?1Y8KD#N23Qvn!r$EYLNu7|*1Q*_3)@O=mL_k#rB zPXB%mz+yw@u$Q*TqZ>LGBqY(Nz>;x(4LhO-mJw;vDO~Fxr#R~$X93!$!aiy0e13TZ z$Wn3=ADuTP14o{r4uKlH79a`en}y@mV86QoM>`Qocpd%sD@gKCnC@@ieie&_06v8w z2rUasKAQM1$8z9~7sGT!E|n4!uczvlAND4n9wok|ZlR2uG}Hi3`r7Uuo565ou%DnB zcX{ykzx`*^CZQ~t#G+guXWikT#`R8NpK4vEM4l@@m$Y_yI>3gfQGvDegImqy;}S5^ z4I-%CCo-`{ajxaL?nO0P05cdS{>eid4TR%#({krIRQk)dC z8g3l)KlfaeZN{48)T{qo`0Rf_;QzE`i?v6vP+W|3_^twN0OcL;B!r$xMEQr*$`T2S z%hvO%%nXLhl&(?K4jm5HWnb$UR%rzB+XZkkWI1~6rJRcUO=Y;N@ESFlY&$}@3)D|` zxrlH6ot-)!{b+)xuDU#|*DD1>mWT|2Wmn zwwcj8LN&zqc0dc{Eda^%f7N#WtOTMhGa_Qq8K?7O`c5Tr^z+kOi5&W_3XU9U)=snc z$r1-#yZs=M&3AF_sFkwEOMNfjj%ayae)R;}l-5s{waUBqGaK@KOH44`Hd!2AVZiTh zS?JbvqOq^(VU|uKHejHbRbrgjvyfs`;bpc^_!~>}U#v{vFe(1K5#faYADc|cH7j{s zALjAWDdHj3s}CmbyDARi8W-Pjv89;N?2OHwcLnyO|&gg$=wVNt4e;iHkF zkhIJ*S@n{-Qa~x|w*vYv>pJ;MK>(Y;fy?8C#LBXtbI>1Z0SnC0fqfE)d7{pXop&xs zb53gBxsM5U;QmITWA>TGb zwgT+Iyy(@$eD)9zL4QEtCt7?kimA9*myF!v+7x3&;m(h4Ut}>UmR^U=HExR+ekk0I9+i5z}V3Yf}--xM|QGT=|VTkbby+gJvW@y^t-f zjK7VlP$tj7bHRuA_(^W-=$i#H;NmbeE&Hy#A0_7=t2+!HuMMm{eFoou`!a4&--@i9 zdFythK)>Z&VFSp|ao-=RI~5S$q=;L``D%+5s>loS+9DdrM-l;KRt?M!X|>*&!HTwx z-n}Fm3>BtaR$*>*>2~&tX34)R7aThN2MZk+;+M4RpyZKgha)?x3vhjIKw8gugM~a2 z&`AkCBFGLzj0pM9Vuxk0gb}WtQD5MuS_g8 z#K`6%bJX=7MmBo1;~cZppPD z;Y@s52E}{(4zhykT|Jvl)d^KKUSkV6=g5x{i<_vigt+?fMuXz z(yzcBApzfJRp>us1JeU;{Ezm&GpebsTQ`V+6h)LGAVuj-1f`eQ05L+OcLE|c0@6b< zK~Q=T5D*X|0wOiirAE4ffJpBo6s0GiA&?Nye$N@>+%wMmo;$vC?|bf#JH8(wj6JgV zUTf~P=bGzT&wS=gL(co|psODXc9KP}obLWO{m2J)I?>gVPYV6nG^`rijSi1w@8&-{gL>bHNXjik#ddPqvPIN$q;3OK0XHd|LJVBh|{{ zwEJ9cca+eg&Y^Zc8q+pH7cA=n3g#!ES+15rHy))k3`tIttlKOE6RiOS6fN_K(O>9D zb;c+(dzd5fqUS}S(;nF;sv$Nq;X`abv(2$yqKUkBBeY6ipRMKTKb8JVr6Ux^jtIiL zhEtt9aWew)MnwDAvVq{@YW-^VnwyVA@;F`R_-5ZMM%;PM??uOmRo7I)W6qMVm>C3h zs3#6)hJ=?6xy#%XW_maK^t|9wep#lrCb9c_%uJ6;$iUC+<|vbpi8K5W0(UO&sd%;D zFikibNqSLpKD%DrEVH)O1#J}&EuC0jor!(CQ`GRVzozt@p=UCOI$6N#b}RK=-z92d)@+tj1fw6!+zwIQ*RHJs zx1NZWwb=|ZHxf%py1kg8gMBWWT1oig8>D=WQJBr?B33PBUgeDLo$6N+s={#_b?6wR zHu2mCLE#DcooCBFH&ydi^))9K)e>QT0`2V5ryd1!)jOs=zF+H-oBk%Rl9aHdB{wII zY5LkLKiG!RHJxs5$sV@eeVSiEQO>P{nm%qUpk5-o;)i0hm9c(rZLDL6{XdPn z)TPqIQ!kcrKKSC)~toHTc&yhGE zSoJI@oU6uW_(U}FVva$%$(0&2C+}z(Zh85C7?+W{H7GcJRV@Af!xc{M`^OfK>F=13 zF+H>^#JR)uJmoQrQs~Qx`;cIb!M@fTg|%DPEORF6lcZ!8lIZ{eC&3JbHwH2O9_YO zf+=_?2Lc(qUCT-VvhVUkgY)LiV+*68Z3(6keG6U1k@Gdd+6s3nZr>NW5)|*X7CJE1 z)9==1H=n)s#=IthKatO`v(mIeG(BhExG8;p*LFy!GJAbtu1PnR;6mvD7LwfqjJ*c+ z5hxD*x7Iq3UHw8CDiVw?MDO3*6-A3?hV2$!It5qU=v+9_B94?G7vCoQ40&qJ_hZ+c zl>Ne_tA2vVv)b>UbE9fLmv89Fc2$ofwA^HuTCe514&w_nH;Z27M zHx!v3j)%2L5@pv=oQH`cm8E_A`EPwMS@HX31s{BJdTyhtIa(gq^a_iTVCwe{-YjAq zsc+UP+k=1kX%WFV=NuQ)_7sJQp!|XXC ztP6XVJk&WI6kWHbx$-`5d+V)>Yc?MLE4?Vg<$jPFOIe<(V58F5lYY1(oO0{nMQXff zbCFWnKbxv=)#xixS5b@h%!rO9e%i|W#%!sX| ze`&jTrc+|hv-r`V!q;%P2`)Mk@JKu1+Go%v^>(giBQC^~o%D*XCCM8eb|p?LMV( zb#t(Zmn6vSH;iq1L;CR!(>~%Up51I=U?=2>VDA94UmbcD!jz;0*HXp1chpawt}?;WLIgV9KVnkbM5f)edC2IpX$0qxz_UbZ#24EFJx!0~-LkUq z_Ox>sqI}ifx?#DIQV8GG!~IU0=$P!=(b>;IqCCDmBaQ3dxE!n+HDBe0OfZP18i*KN z;RzD0Ih(4#u3x#yXlI=mlI}6;YuuW?T^CeWL9%G73$m+My~5V_%!6~y=H}6WY5N*X64tIx3TS)WH5F3EOK@edfvy1 zFDdg4d1MhAOEsxP7>{)9=kc~wNA2oKb|ph0_9k&u zk7&P;_X~~Fs!K^@=?~waY|P#%otp+~Li+X@2SW4)i(DVqg>1t0RHMfPSl0S1a>fU# zUlYt`_A^D273&Y>*sH^g2(H(w$u&eI|6?}2H$T*s#(MGs-$ya?=3iD6T+YAW@+u*l zgg!yN9)$w-iWp51ez%hZAiDL;{?BjoFZ7)BUDu%*>Gd4l|H56o)R$PXb88+}2)=Sk9+a9GyS5W84Y-z!O;CuMzY5 zmFpSZtPZfm>OFSxmh~2m7>tfdm#INfe`vqA>!*dXz%-c5FJ!u)Naxq`b;q@y}UZ{9wDY25`ax<{<5p`-G7iJDp2^e z&u7ftWZZtI7HhZlP)r@{h?QqKOmjp=WncV}O!Zln5f#@X838p`hh;Olw+oBa;Dh`}bFZbly zd>bV1$N&6Gb-nNUostXH%pg)_<1#txGZx;5cE3Z~e>^vqT2o`){Bs}kne994iK5NM z?45HvJE1cg4FQN&uBJ6_IC;boH=y?s$xKc!STk?Zn#X#FWInf&5o^|WRZFxp%Bs(} zp#t(r$@>K(SrYP|EuoUEp;4Op0A}FMxalYBm9)LWztzPG6@7sys%OGy`ve17Vb?{!tB4H&!j6$F3#ylOS^mNsX@2=}96Dggj(y0MscRviw!fDu0HZ08~G9WWC z!{Z>XZUblHyrI%6Q!QSqhi{?#EOc#@bq!euHj%UNi6uX?hx> zofX7TG1kHnm827A*PL)kKkL2&n}aKpcsT@zI<{u71T5n4o>%TRe+`g3wHnHQB;K)B zamH;qO)az0VUhIkSiUzdE^L&drxkD+zB!T2hX?x<{T!pxun9IWS>q*?#K`nAx6iwn8Dwa ztz{c#y>qX!ZV%FaMSwXdP1Q3EEjmelym)1~@~d=uap%G_zMZafb)FLXHk2H1R=W)* z{iNyD!Edy~shEV$^Ucm~xnRVnXodoZmh%=p9AUcTNT#@%-bWjmYZZ2vy%FzXh{j z$4%w*aCZw1s>CsWF;Bx~sJMXg5A>sGF)^ZaGEhXi{G;H<=jz$` zjnRJJvFj>E5|>=Xnpc|cd~OZH-m29s?^g_%buu*2OV`Rvg!56_-C~G0GHB z@n8;>=rDcv;--F&2N}*mMUcswG{G=pGbnub#i>Bv( zgDRuGt=={ox?5cUGE^NZ<{Eh0P~QC(`bIBEamw~nnt_+7BWJ4a35y4VtdcJ6A|et3 z@YrQ?tfB4L9&`Z@RXr|T+*<)6Z)dT2~)v$GRl%v=VSHZy(foPu7glh6n0xJ)56kATQEQKB^Nh(G5K}XNzc?p14l9d6PNG&4t6A zFd%cQp3qYo#5LI>Jl!3wc^0PazCh<6Rr?Ly)h1gtysfE|`Azskl*^TC58Mi}@5kL@ zmXVsakvRXHNr^qaO$(r8$#?Mrf)UAN!|jU7s_)wr`KeXKElT8qbVw1h4qQ=ZSFqNkrtB8lPQo1DD z(*CLW`2o8PXDXyPC{(6m`?0t@S32Iuq)f)%c5s)JfvpX+wp%kCuz|FqUKps55E&z# zhsCi-k&XI!zJ}p|%&*(yZiOG7+g$I z?ObgHJortL`+bffQT|KXItS_B?&T|d;QoBxA{o)SWRF=wGp^eUOl(EYueV)D>pDAE zh70QFNazun`N;c8a;`UajzMpGL>G=sOj8WY3OglGOdH`Zh^B zlDpGZW_NBmPX{teM6hx(wsZ(ZAq76fdVz6DUmfS^gT1^V;z0S1d|rW5s+e2V|5C0}xb9(xM0B6a*R!&=qQ7o2INYgEDdqNPa{w_YKdA$ zaYLd|%{1GVZ{SQ$qX@%M{+Fqs;{g&}J*ZA~@{=%^!{gaSscTY2ClMQJC_t;p%@)f;=jc$R+$NFPp)Q>kzU&2-lVQ!wRm~3dQX?j(^m3FSs!uY8S zV{-26#J7duT6Yw8>ul3`y-x2p$)|pUoMK;c6w3sMGn2OWo)&!BQ$E_k^>TIIQL9r8 zRqb_~*|gE&_uW7~rpf!#%(0$U&PoznVsa~}hR3#;fucrb@?%Qy{8$CpHIv9#hQpF? z1Z;TP+$LTsyc)BUA$3uCA0;Jq)sUX8jM2C#l5H;~Zr57~VWCfOslO_qVi{?b!8sEk zR;}L6x&Ebsujbj_u|KRx;X4_z;U1Ayt%&XxXo-?kfhq~8YJCy3dEu>a{iDzi=wnh(gT*3M$Phs4`NPj4b|9B!{C-XK zhnKTFSFC0~%NSe|ng3P=+A;-!KwO_+-rqZ++Zv*>Y?NkURF|$ip1c6a$MCJJ>}e=& zircB(>l|;;cwthLzP&E`%l^AW%{p2|C1vq&qCFl=zF8UOyvTmqnw%=2i0AjbA%k#< zy3Mzo9y@v`epPoPwhLWNYJTlL-KDUeVh6Vutb-5ec6+Ygx{dG67Wwdi z<2KRt5*L>DO4+|gt4l;cV#xE{EPpxOYcjfHG^$%q;NqWG2D>nEq{jh z5Ci9dS|0V)_`ckLD?AK!s(xjo$>{Te`04~$dIp_AJ36qjz_t@Z8?XjhOq)%6Z?lTz zV>eL^bpza5-i9NZC6IpBkFJv6Ja>l)<(y~txW2nd8%jg~^2!2wUDKzM%hnHTLrmvI zWUqd*o(}GO=XW|dPt^Gt-!;>-Y3-s6s|6!iH~IHr285w5*e1XTAte16Kh&F|4JT`S zs)Ku9L1pfK58P@tRCjIlBI}XTlOY7JWE_lZ$|J}C_Y+Y*V>nhcQjo#zC!B=i5JH$c zMd>DzsEvypT&Vg2_8{}kh4ujAoXncDn|Ed9P~A6L*Nda0Gfgmo?0wm}y5<(rh)%#l z{5NeT2xEK+A{nn;#T50hcI%FTkYcY`SM|b;E23^G#{zpU+kFN-piA|!A0YxzQwI%1 zJe61sPq|sH2M(8eSmD}WmMX7p=6HT%l|k6&`Q)i9BT7rwOg$%$eedAOV<6`jKr1E< zO7zQY`n^LuD_=Kd-RP%GiJ(Jna|JOPPx05h`kqT}C#nzOGir*~)sd;$a&75FGwvxi zy;50$HePg39N2|_ismWm55RxfI)~XJtI-!%XVP^CWPlU_%KRbBldY{GBL8XTSoZg@ zCT&-lw>zPg5IH%|(2e>(WKmC(0i_NOCCpib@eoDhF195j)W$PjDD7;ObdHJiWz~=P z4|gOn`33qWPu+VTq*9V!RhW&INT<%#(+I#m*3HZRC&|};+t%0k-1_0Ed2@&AXUSskk0K z)k%j^sZ*V)rVc{%G2~3T6r7;EkcQrajOw&4t}z;G+3mwq{J4Zp&F*qR7;Asvd`jGo z#4u9+jVrzvV87$Nxfc@UJDLKQ9PNgqzqLkyry!)l^y4XEN<_ZD}`@Zu6{q7EXpr+0J~$_4D`XYc$5B?8T2%cYp2hOZJ~H0DZxJUoVa#0ebz4=oWQ z{-HB@coI#cKTAddbREN^Qt*##1O}k1PoStC$>aw+(*?BHVqoD;FbD#OPi2(wH_7B= zOW-W}Xc~hspwPmQ32<;80zWv1{)a8XiRuagXgXidg9%bh)N8U>S|q^53Gbo-M*36N z3;t{$+M;9uO=KKQ3kS^i z^gV;l46!DYQrb<(an$Qab>PL+`SYXxISa9<>Vd}UQDGBVnh={cf4HLM47X@uUP`J_ z)1`Sj$|+tVhAye%ys|T7QvXL0(hW8+rFyvDTpI>#7mK`fknBI3F-9ULRVuIKwxmyI zzD=%n-K)|u@bUI>e?-c38-|?a^nYZQ{$eqLT{v>oREgr@ircc${i_s?|3<#VKcLd~ zcjjsT)f{pJP~{>XAP4xof!gOc^@8w|4874UQfJmJsv2gq?Is(ZH7#FRnH1#Zhz_AO z$q-#>CsJ@_5ZDv#OT-9CiVmqocCPtFZA0uRk};6FLCVG^QtbvkmJm@D%wXTde6C$X z=vc$P*d%R`fD$Wuf}2*tV}q^t(hlmlexy=nwgD3&?U99Coj^$!G+_eA^lXKQ?M9zo z%i|e#aJKUP1^-Z9k&^S;-Q~eGr~_1Kc7iZKwCJ!0{8z*{;KO{wOemMB7DTSqT*3k_ z?69bGatfSbJap@YjlptR)OD?~k&}B|vLdRyC*FjE-$NtO^{~x!%8d<0g!iIr7nY4& zV-llLmyua&Gdp)Yc?X=D^k5R)+Th*#SOx~XttYXI3qXeTMEk-tQ#-bny^~cAsKHI} zUw|h=`Ce7e*x89|W;wfxJFdK!H4-)T>y)xBA$NAe2#?S`Gw5jzJZv+c03o4TiMH2Tx|6}zImP+Za#Que@ojzx^$WEP=dq`*yY_c z4e&P1Z5QYJ0jFg$jFg~C1#bb2kK^4}edk)g+_)F(DcW|YD)sh*_=h(ow(*$RqMM#Da8Iy5|>idT1&i8BCb=?)kiTFGltB-C4EX`I6 zo09=)5x#2OAQZgT0?_oN1F9oGBVsle2=utey ze)(MBsJY;5?s&Ge`qSd4q7yfCuYm*HFav0^46MgH5latt6cRu*FUm)GYwDESt~JzO z>38%UuUX^vn})8g!!JrXcwQDgC+(MTS&1wFm=Kr`BA(Nx+IWrTrCYECw=GB3FDjI8bN0`zcP`eL{qx?AuN%I%y9x8*#Dn=YQ zLku~EttyVjx_Bp}Yb_#>oYrA{gq^1n^<}_f6YuD9QB%A(#c$Y)-Cx39Opgl4Uf8B{G&@W69 zZhqqGdv7z5H~jvw=j?N(G6$N#tG$SaO*h~$?R3PwC6!HV$&WTZ;^}8Ca;0^f!)yC4 z=H|>-zgZ_RMSjWPP`8Uanp8lwvNlp~gwlnU8#LriP? z{PXZEBi2Z@tf^%k=Fie}6i*!_J(UAExsCQU@7z%-^#Vl#XtWNJRi#4< zg4Z}fRVcCXP*|8A&`jW#6r1|M81x`sdL={e9`T)L|1!Ygrt=}57+%sBP;d_U1p3KXlX*SQv4)+5kgZxqkLMr}MQ52;JjDAblRDl86 zhbRvPbl)Y9D+|g8i;Nl}*F6*xyN{Ui&{?p|ag35! zhRe8&=U(L)Q&zZX0HSQM*1Pg2IgY;%U>^P-UPaMTfMFJsr&!ZW)>{HcxA#t8J+jxj z^)`4an5E~GcKvrHiXW_JVw0X?s0Rr0eO0!Xn&8FagvJWgy~@i5C&e7h?`hqCRO$2C z;9~%0)2rvO-?Tc~c*F$~4}WTPKSTUfsz^ea3|qtrwd0R;P=e(46ti~MF$GWLc54yO zYO1k)$;OZ2qm;$f#}I+%CLI!#X`Y14G|%qCt6Lk~*1$4$H|>S!qm^qFn%_enngZs?i7_`GD8K4(#C_2R;+Vib0^RP5crFsLh3$j9ikF-El%&yT6#3 zh4A%Cw>aEZR$%+!*sF8|8NMdezO#h^{N@fZdUFP7`Wb-sn6?z%4&@1RA=?mnjM~P3 z&MYv_*>?K4`n@ys;+0TdlQQ9N?yh#opMV#fVVRi2Rx@p85wSo-zR5(KS<>4KC75&z z(bHrRsr?l2jk>X4S(Q6GoA+~_-7iMrE@aHFIVg%g>?>NiQ1DTheZxEs2;7y~$$@2)UpD1jQF`+Tp3A^ z#xg=t1v0f!(O4(!bQ&(Xa}M4kM`+OdhN}Nr#&1>BTHjPn;p!_SUep{eds&$Hswb@8 zR+$;NspIH9CL)l!!Vq-y66=PZndpEW$1WBMvXk}jCvTk8ZZD@o3BR)4ls?H8GzXu4 zQwY~~HpXR3-i_f?ncPTKL@mBtsJ3X|i9^+6qJa9|79?}>Gs4DoLX3eqJ13&Rra8f8 z-8`}J-gO@~h!4N=>B5JWzF&?lvu~Ehfe7By1-QXxVl>HtoJ>gTm;u*PO>mE$ZrASd zdj#)~r*;bB5%hiud1KU6;L$2oqTtZz1p-uPnuo?*Lu6lsC0xz5qe?6ZSofM|8a7&1 zR#rYtot8OKu&W@u+jdu6ihn>Tz)%rYr!GlPNT!{fC94o2i$T=0pIdl|(H%{g$X|_` z1|_qtNi|N&X#e4+Yb6)r{Pm>UA5|or_xXku!Y-y_35Mut3p_jZEQ<8{=p{{p46!9Y zu0$-lqbIS16d)7Zde+veJgtW*FXpa`>8+F(m+#F+e*F!C*R8_%w9i9{(Kz`S8rRH5 zc65|YmwMPCiu5*hOm^(c`trsev0MTUqg{DntERGZfpu3l-p1`2o zB<^g^l)BgF34K-SXT|b)Fl^N}dtM|AiGA+BNrJ}`MPuo80w_IFb-d9-@|)i&tW=w$ z52(etGBACZK)s5+_}8$|P`syd`zxKJH}(Bu$px8rNR$sXb#dynyUj>#1Tz)UFn*jiW&X%De^A>$*;-h$ckn?H0b2 zmT_Y7)!HES0WW)KSjf>^)M7eNDFWOJj+p0fBtDzy#IoAt+H_`=<9GKAv2pXxsdM+D z?`!6kSJBHbo4pW-Y8xFxEiPcEO_qA9-XL5_Ge;$1dPJU&NTDX182_~6{a3q9D|Zy} z>;7>Dg_xJdt}M5YyI|jXGb2no^XLhcS&JwptKMRFKBYosW##vYRqdW$5vm2(r;Ioy z1tY@2@j{dGBwex+v6F-)=uAX|A9%+Ko)`|(dX$~}Jyuh{a=u+K=bh!Jv|CO*+(gm! zYGIQzXr%_m>3mBeAnP)qB{VPUIu?+IywsLWB|RE`!TaiJ@MHKNS=P2kuQRD z+7I@*8~I0+V}|vp&{!JkQPmbeh%eeAg4&}jj}O0h+x9LLHUO&rTx78Py7%e+DL$-B z8AY$7Jg(BB^C!;EI)MM(gcn>4rEQvH$6rM?!S_6dDB<~PI-5JPO-FY6W;}!alrsa~ z8R>8xsvQ7d|K7HL)s*`Cl)?Va9R0sqamxJCAOYx3L>8i-AhM#x25J|B~@^%_S$y#cB}G3lA;Klud zg#L9^gU17ba2K@eMiaOm`*fk6eRGUh-6MkmAv&Si!65NLypd;MA?b2|)gU`B2$O%Y zEj8&jP#fN()X_V3Y1EKmwDypj|+p_$)^Ce4hnt5^%+2Q=xJ|Z2aw;Ord$;9GVGV!Z&2UD(I)_lW09c(U|Io9nCa*) zb{7D#0@%qf_BM54@;Wx+^{Ph?Bih&O$0sIG8 z7n#UYi++RVZqmeAX+_urfJE3R^lyy-pe|sFDaoW6{|0U615#lOKpl$(D&TKslYfHV zV25Y`t_MPm0;?n`)c(ESpjcp&qr{tL4*Xp25M%`V{u=}!RUq&>u%vl`rMyFRwWCIX zCdi=nMUFs{m^}bFOeOkBZxam=^u^(okR^(~x zLjO%GTo7i<17Q~bKp+3BR_~3{K!?T?1PTIvf1;fz;pX|76@EQ zWI2ils@+m4IWF5^r(hX_u{YJ=-q+Fmtd@g3f+U!L&tlx;nO4E#gB z-3ELC_zM5i=Pwk`kl=|;CMpMnW{8IU22~kv{02c}H}F&)Ab}7rL}NNA*lJM){?DPK zDIHun3_h*ZzEOM|LyGb7sVXEOMX@+>-K|cKT1f z`KuoO-yZvG3vJ6&IV5lmF%sll{6hTJS@CptV5B>h7dk%p@F7Dgu4LQDk)c%uQxT>T zYnBg<@)`7+NX#sA7k#`CSt>(3?o4-C zhte7DgvuaUK2cFX0-6*Jm_~mJ0pK`;HELHt=&vpXBgeD=uH*U$W#WJr)uoC4k=t zAkvHyPu=C=c`oa{36wX&E_YxJwS~ge0oFE}c^bik8_!})DV#cXp}xVcRMA&oGs8u* zMnM)Tnr2tTwX`~GkiD9cpg_(tjT;mHi4FBcX$`qb;u4BwUKD5I@(rQ7-^S-Ktt}V_ WAWrDe8u_DI&|d}f|I^2QPyGvxwyUWC diff --git a/docs/plugins/maker-setup-images/webhooks_settings.jpg b/docs/plugins/maker-setup-images/webhooks_settings.jpg deleted file mode 100644 index e94f4485c4348c8fcb828450ae95dec8fb8f9a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29102 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 z 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 diff --git a/docs/plugins/maker-setup.md b/docs/plugins/maker-setup.md deleted file mode 100644 index 831e9e05c4d..00000000000 --- a/docs/plugins/maker-setup.md +++ /dev/null @@ -1,107 +0,0 @@ -**Table of Contents** - -- [Nightscout/IFTTT Maker](#nightscoutifttt-maker) - - [Overview](#overview) - - [Events](#events) - - [Creating an Applet](#creating-an-applet) - - [1. Choose a Service](#1.-Choose-a-Service) - - [2. Choose a Trigger](#2.-Choose-a-Trigger) - - [3. Complete the Trigger field](#3.-Complete-the-Trigger-field) - - [4. Create an Action](#4.-Create-an-Action) - - [5. Complete Action Fields](#5.-Complete-Action-Fields) - - [6. Review and Finish](#6.-Review-and-Finish) - - [7. Get your Maker Key](#7.-Get-your-Maker-Key) - - [8. Configure your Nightscout site](#8.-Configure-your-Nightscout-site) - - [9. Configure the IFTTT mobile app](#9.-Configure-the-IFTTT-mobile-app) - -Nightscout/IFTTT Maker -====================================== - -## Overview - -In addition to Nightscout's web-based alarms, your site can also trigger push notifications (or other actions) through the [IFTTT Maker](https://ifttt.com/maker) service. With Maker you are able to integrate with all the other [IFTTT Services](https://ifttt.com/channels). For example, you can send a tweet when there is an alarm, change the color of a smart light, send an email, send a text, and much more. - -#### Note: There have been some recent reports of the IFTTT service delaying Nightscout alarms. Be sure to test your implementation before relying solely on its alerts. [Pushover](https://github.com/nightscout/cgm-remote-monitor/blob/dev/README.md#pushover) is an alternate push notification service that might be worth considering as well. - -## Events - - Plugins can create custom events, but all events sent to Maker will be prefixed with `ns-`. The core events are: - - * `ns-event` - This event is sent on *all* alarms and notifications. This is good catch-all event for general logging. - * `ns-allclear` - This event is sent when an alarm has been acknowledged or when the server starts up without triggering any alarms. (For example, you could use this event to turn a light to green.) - * `ns-info` - All notifications at the `info` level will cause this event to be triggered. - * `ns-warning` - All notifications at the `warning` level will cause this event to be triggered. - * `ns-urgent` - All notifications at the `urgent` level will cause this event to be triggered. - * `ns-warning-high` - This event is triggered when crossing the `BG_TARGET_TOP` threshold. - * `ns-urgent-high` - This event is triggered when crossing the `BG_HIGH` threshold. - * `ns-warning-low` - This event is triggered when crossing the `BG_TARGET_BOTTOM` threshold. - * `ns-urgent-low` - This event is triggered when crossing the `BG_LOW` threshold. - * `ns-info-treatmentnotify` - This event is triggered when a treatment is entered into the `careportal`. - * `ns-warning-bwp` - This event is triggered when the `bwp` plugin generates a warning alarm. - * `ns-urgent-bwp` - This event is triggered when the `bwp` plugin generates an urgent alarm. - -## Creating an Applet -Set up an [IFTTT](https://ifttt.com/) account, and log into it. - -### 1. Choose a Service -On the "My Applets" page, click "New Applet", then click the blue `+this`. Search for "webhooks" among the services, and click it. - -![service_search](./maker-setup-images/service_search.jpg) - -### 2. Choose a Trigger -Click on the "Receive a web request" box. - -### 3. Complete the Trigger field -Enter one of the Nightscout events listed above (like `ns-urgent-low`), and click "Create Trigger". - -![set_trigger](./maker-setup-images/set_trigger.jpg) - -### 4. Create an Action -Click on the blue `+that`. - -![blue_that](./maker-setup-images/blue_that.jpg) - -Search for the action you'd like this event to trigger. In this example, we'll choose the `Notifications` action to send a push notification. - -![action_search](./maker-setup-images/action_search.jpg) - -Choose the "Send a notification from the IFTTT app" action type for a basic push alert. You can experiment with the "rich" notifications later. - -### 5. Complete Action Fields -Enter the message that will display in this push notification. In this example, it was triggered on an `ns-urgent-low`, so we'll write something like "Urgent Low!". We can also display the current BG by including the `Value2` ingredient (via the "Add ingredient" button). - -Click the "Create action" button when you're done. - -![notification_message](./maker-setup-images/notification_message.jpg) - -### 6. Review and Finish -Click the "Finish" button if your applet looks good. - -### 7. Get your Maker Key - -Click on "My Applets" in the main menu, then click the "Services" tab, then search for "Webhooks" and select it. - -![service_settings_search](./maker-setup-images/service_settings_search.jpg) - -Go to the `Settings` for this service, in the upper right. - -![webhooks_settings](./maker-setup-images/webhooks_settings.jpg) - -The string of characters at the end of the URL here is your `MAKER_KEY`. Copy it from there, so we can paste it into your Config Vars. - -![maker_key](./maker-setup-images/maker_key.jpg) - -### 8. Configure your Nightscout site -From your [Heroku dashboard](https://dashboard.heroku.com), go to your app's Settings page, then click the "Reveal Config Vars" button. Find the `MAKER_KEY` entry, and edit its value, pasting in your Maker Key. If you don't already have a `MAKER_KEY` line, add it to the bottom of the list. - -![config_vars_maker](./maker-setup-images/config_vars_maker.jpg) - -Find your `ENABLE` line, and add `maker` to the list of enabled plugins. - -![config_vars_enable](./maker-setup-images/config_vars_enable.jpg) - -### 9. Configure the IFTTT mobile app -That's all of the services complete. In order to receive push notifications on a mobile device, you'll need to have the IFTTT app installed and logged into the same account you set up the actions in. - -To add more alerts for different events, just create a new applet for each trigger. - diff --git a/env.js b/env.js index 808b18fd9ff..d6d1f89d0cd 100644 --- a/env.js +++ b/env.js @@ -25,6 +25,7 @@ function config ( ) { env.HOSTNAME = readENV('HOSTNAME', null); env.IMPORT_CONFIG = readENV('IMPORT_CONFIG', null); env.static_files = readENV('NIGHTSCOUT_STATIC_FILES', __dirname + '/static/'); + env.swagger_files = readENV('NIGHTSCOUT_SWAGGER_FILES', __dirname + '/node_modules/swagger-ui-dist/'); env.debug = { minify: readENVTruthy('DEBUG_MINIFY', true) }; @@ -55,13 +56,6 @@ function setSSL() { env.ca = fs.readFileSync(env.SSL_CA); } } - - env.insecureUseHttp = readENVTruthy("INSECURE_USE_HTTP", false); - env.secureHstsHeader = readENVTruthy("SECURE_HSTS_HEADER", true); - env.secureHstsHeaderIncludeSubdomains = readENVTruthy("SECURE_HSTS_HEADER_INCLUDESUBDOMAINS", false); - env.secureHstsHeaderPreload= readENVTruthy("SECURE_HSTS_HEADER_PRELOAD", false); - env.secureCsp = readENVTruthy("SECURE_CSP", false); - } // A little ugly, but we don't want to read the secret into a var @@ -98,6 +92,20 @@ function setVersion() { function setStorage() { env.storageURI = readENV('STORAGE_URI') || readENV('MONGO_CONNECTION') || readENV('MONGO') || readENV('MONGOLAB_URI') || readENV('MONGODB_URI'); env.entries_collection = readENV('ENTRIES_COLLECTION') || readENV('MONGO_COLLECTION', 'entries'); + env.MQTT_MONITOR = readENV('MQTT_MONITOR', null); + if (env.MQTT_MONITOR) { + var hostDbCollection = [env.storageURI.split('mongodb://').pop().split('@').pop(), env.entries_collection].join('/'); + var mongoHash = crypto.createHash('sha1'); + mongoHash.update(hostDbCollection); + //some MQTT servers only allow the client id to be 23 chars + env.mqtt_client_id = mongoHash.digest('base64').substring(0, 23); + console.info('Using Mongo host/db/collection to create the default MQTT client_id', hostDbCollection); + if (env.MQTT_MONITOR.indexOf('?clientId=') === -1) { + console.info('Set MQTT client_id to: ', env.mqtt_client_id); + } else { + console.info('MQTT configured to use a custom client id, it will override the default: ', env.mqtt_client_id); + } + } env.authentication_collections_prefix = readENV('MONGO_AUTHENTICATION_COLLECTIONS_PREFIX', 'auth_'); env.treatments_collection = readENV('MONGO_TREATMENTS_COLLECTION', 'treatments'); env.profile_collection = readENV('MONGO_PROFILE_COLLECTION', 'profile'); @@ -151,8 +159,7 @@ function readENV(varName, defaultValue) { function readENVTruthy(varName, defaultValue) { var value = readENV(varName, defaultValue); if (typeof value === 'string' && (value.toLowerCase() === 'on' || value.toLowerCase() === 'true')) { value = true; } - else if (typeof value === 'string' && (value.toLowerCase() === 'off' || value.toLowerCase() === 'false')) { value = false; } - else { value=defaultValue } + if (typeof value === 'string' && (value.toLowerCase() === 'off' || value.toLowerCase() === 'false')) { value = false; } return value; } @@ -186,6 +193,6 @@ function findExtendedSettings (envs) { } }); return extended; - } +} module.exports = config; diff --git a/lib/admin_plugins/cleanentriesdb.js b/lib/admin_plugins/cleanentriesdb.js deleted file mode 100644 index 3793eef8ffd..00000000000 --- a/lib/admin_plugins/cleanentriesdb.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -var moment = require('moment'); - -var cleanentriesdb = { - name: 'cleanentriesdb' - , label: 'Clean Mongo entries (glucose entries) database' - , pluginType: 'admin' -}; - -function init() { - return cleanentriesdb; -} - -module.exports = init; - -cleanentriesdb.actions = [ - { - name: 'Delete all documents from entries collection older than 180 days' - , description: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - , buttonLabel: 'Delete old documents' - , confirmText: 'Delete old documents from entries collection?' - , preventClose: true - } - ]; - -cleanentriesdb.actions[0].init = function init(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleanentriesdb.name + '_0_status'); - - $status.hide(); - - var numDays = '
' - + ''; - - $('#admin_' + cleanentriesdb.name + '_0_html').html(numDays); - - if (callback) { callback(); } -}; - -cleanentriesdb.actions[0].code = function deleteOldRecords(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleanentriesdb.name + '_0_status'); - var numDays = Number($('#admin_entries_days').val()); - - if (isNaN(numDays) || (numDays < 3)) { - alert(translate('%1 is not a valid number - must be more than 2', { params: [$('#admin_entries_days').val()] })); - if (callback) { callback(); } - return; - } - var endDate = moment().subtract(numDays, 'days'); - - if (!client.hashauth.isAuthenticated()) { - alert(translate('Your device is not authenticated yet')); - if (callback) { - callback(); - } - return; - } - - $status.hide().text(translate('Deleting records ...')).fadeIn('slow'); - $.ajax('/api/v1/entries/?find[date][$lte]=' + endDate.valueOf(), { - method: 'DELETE' - , headers: client.headers() - , success: function (retVal) { - $status.hide().text(translate('%1 records deleted',{ params: [retVal.n] })).fadeIn('slow'); - } - , error: function () { - $status.hide().text(translate('Error')).fadeIn('slow'); - } - }).done(function success () { - if (callback) { callback(); } - }).fail(function fail() { - if (callback) { callback(); } - }); - -}; diff --git a/lib/admin_plugins/cleanstatusdb.js b/lib/admin_plugins/cleanstatusdb.js index b3e3032c8fe..4769a724789 100644 --- a/lib/admin_plugins/cleanstatusdb.js +++ b/lib/admin_plugins/cleanstatusdb.js @@ -1,7 +1,5 @@ 'use strict'; -var moment = require('moment'); - var cleanstatusdb = { name: 'cleanstatusdb' , label: 'Clean Mongo status database' @@ -21,13 +19,6 @@ cleanstatusdb.actions = [ , buttonLabel: 'Delete all documents' , confirmText: 'Delete all documents from devicestatus collection?' } - , { - name: 'Delete all documents from devicestatus collection older than 30 days' - , description: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - , buttonLabel: 'Delete old documents' - , confirmText: 'Delete old documents from devicestatus collection?' - , preventClose: true - } ]; cleanstatusdb.actions[0].init = function init(client, callback) { @@ -76,58 +67,3 @@ cleanstatusdb.actions[0].code = function deleteRecords(client, callback) { } }); }; - -cleanstatusdb.actions[1].init = function init(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleanstatusdb.name + '_1_status'); - - $status.hide(); - - var numDays = '
' - + ''; - - $('#admin_' + cleanstatusdb.name + '_1_html').html(numDays); - - if (callback) { callback(); } -}; - -cleanstatusdb.actions[1].code = function deleteOldRecords(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleanstatusdb.name + '_1_status'); - var numDays = Number($('#admin_devicestatus_days').val()); - - if (isNaN(numDays) || (numDays < 1)) { - alert(translate('%1 is not a valid number', { params: [$('#admin_devicestatus_days').val()] })); - if (callback) { callback(); } - return; - } - var endDate = moment().subtract(numDays, 'days'); - var dateStr = endDate.format('YYYY-MM-DD'); - - if (!client.hashauth.isAuthenticated()) { - alert(translate('Your device is not authenticated yet')); - if (callback) { - callback(); - } - return; - } - - $status.hide().text(translate('Deleting records ...')).fadeIn('slow'); - $.ajax('/api/v1/devicestatus/?find[created_at][$lte]=' + dateStr, { - method: 'DELETE' - , headers: client.headers() - , success: function (retVal) { - $status.text(translate('%1 records deleted',{ params: [retVal.n] })); - } - , error: function () { - $status.hide().text(translate('Error')).fadeIn('slow'); - } - }).done(function success () { - if (callback) { callback(); } - }).fail(function fail() { - if (callback) { callback(); } - }); -}; diff --git a/lib/admin_plugins/cleantreatmentsdb.js b/lib/admin_plugins/cleantreatmentsdb.js deleted file mode 100644 index a8cc725fd82..00000000000 --- a/lib/admin_plugins/cleantreatmentsdb.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; - -var moment = require('moment'); - -var cleantreatmentsdb = { - name: 'cleantreatmentsdb' - , label: 'Clean Mongo treatments database' - , pluginType: 'admin' -}; - -function init() { - return cleantreatmentsdb; -} - -module.exports = init; - -cleantreatmentsdb.actions = [ - { - name: 'Delete all documents from treatments collection older than 180 days' - , description: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - , buttonLabel: 'Delete old documents' - , confirmText: 'Delete old documents from treatments collection?' - , preventClose: true - } - ]; - -cleantreatmentsdb.actions[0].init = function init(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleantreatmentsdb.name + '_0_status'); - - $status.hide(); - - var numDays = '
' - + ''; - - $('#admin_' + cleantreatmentsdb.name + '_0_html').html(numDays); - - if (callback) { callback(); } -}; - -cleantreatmentsdb.actions[0].code = function deleteOldRecords(client, callback) { - var translate = client.translate; - var $status = $('#admin_' + cleantreatmentsdb.name + '_0_status'); - var numDays = Number($('#admin_treatments_days').val()); - - if (isNaN(numDays) || (numDays < 3)) { - alert(translate('%1 is not a valid number - must be more than 2', { params: [$('#admin_treatments_days').val()] })); - if (callback) { callback(); } - return; - } - var endDate = moment().subtract(numDays, 'days'); - var dateStr = endDate.format('YYYY-MM-DD'); - - if (!client.hashauth.isAuthenticated()) { - alert(translate('Your device is not authenticated yet')); - if (callback) { - callback(); - } - return; - } - - $status.hide().text(translate('Deleting records ...')).fadeIn('slow'); - $.ajax('/api/v1/treatments/?find[created_at][$lte]=' + dateStr, { - method: 'DELETE' - , headers: client.headers() - , success: function (retVal) { - $status.hide().text(translate('%1 records deleted',{ params: [retVal.n] })).fadeIn('slow'); - } - , error: function () { - $status.hide().text(translate('Error')).fadeIn('slow'); - } - }).done(function success () { - if (callback) { callback(); } - }).fail(function fail() { - if (callback) { callback(); } - }); - -}; diff --git a/lib/admin_plugins/index.js b/lib/admin_plugins/index.js index 224054538d1..c6463ecca8e 100644 --- a/lib/admin_plugins/index.js +++ b/lib/admin_plugins/index.js @@ -8,8 +8,6 @@ function init() { require('./subjects')() , require('./roles')() , require('./cleanstatusdb')() - , require('./cleantreatmentsdb')() - , require('./cleanentriesdb')() , require('./futureitems')() ]; @@ -86,4 +84,4 @@ function init() { } -module.exports = init; +module.exports = init; \ No newline at end of file diff --git a/lib/api/devicestatus/index.js b/lib/api/devicestatus/index.js index 5c665b1ffc5..9d6fc1bfce7 100644 --- a/lib/api/devicestatus/index.js +++ b/lib/api/devicestatus/index.js @@ -43,52 +43,17 @@ function configure (app, wares, ctx) { api.post('/devicestatus/', ctx.authorization.isPermitted('api:devicestatus:create'), doPost); - /** - * @function delete_records - * Delete devicestatus. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - function delete_records(req, res, next) { - var query = req.query; - if (!query.count) { - query.count = 10 - } - - console.log('Delete records with query: ', query); - - // remove using the query - ctx.devicestatus.remove(query, function(err, stat) { + // delete record + api.delete('/devicestatus/:_id', ctx.authorization.isPermitted('api:devicestatus:delete'), function(req, res) { + ctx.devicestatus.remove(req.params._id, function (err, removed) { if (err) { - console.log('devicestatus delete error: ', err); - return next(err); + res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); + } else { + res.json(removed); } - // yield some information about success of operation - res.json(stat); - - console.log('devicestatus records deleted'); - - return next(); }); - } - - api.delete('/devicestatus/:id', ctx.authorization.isPermitted('api:devicestatus:delete'), function(req, res, next) { - if (!req.query.find) { - req.query.find = { - _id: req.params.id - }; - } else { - req.query.find._id = req.params.id; - } - - if (req.query.find._id === '*') { - // match any record id - delete req.query.find._id; - } - next(); - }, delete_records); + }); - // delete record that match query - api.delete('/devicestatus/', ctx.authorization.isPermitted('api:devicestatus:delete'), delete_records); } if (app.enabled('api') || true /*TODO: auth disabled for quick UI testing...*/) { diff --git a/lib/api/entries/index.js b/lib/api/entries/index.js index 6c1e873da7f..691cba7ecc0 100644 --- a/lib/api/entries/index.js +++ b/lib/api/entries/index.js @@ -7,13 +7,14 @@ var _includes = require('lodash/includes'); var consts = require('../../constants'); var es = require('event-stream'); +var sgvdata = require('sgvdata'); var expand = require('expand-braces'); var ID_PATTERN = /^[a-f\d]{24}$/; function isId(value) { - //TODO: why did we need tht length check? - return value && ID_PATTERN.test(value) && value.length === 24; + //TODO: why did we need tht length check? + return value && ID_PATTERN.test(value) && value.length === 24; } /** @@ -31,490 +32,481 @@ function isId(value) { * configured. */ function configure(app, wares, ctx) { - // default storage biased towards entries. - var entries = ctx.entries; - var express = require('express') - , api = express.Router(); - - // invoke common middleware - api.use(wares.sendJSONStatus); - // text body types get handled as raw buffer stream - api.use(wares.bodyParser.raw()); - // json body types get handled as parsed json - api.use(wares.bodyParser.json()); - // shortcut to use extension to specify output content-type - api.use(wares.extensions([ + // default storage biased towards entries. + var entries = ctx.entries; + var express = require('express'), + api = express.Router(); + + // invoke common middleware + api.use(wares.sendJSONStatus); + // text body types get handled as raw buffer stream + api.use(wares.bodyParser.raw()); + // json body types get handled as parsed json + api.use(wares.bodyParser.json()); + // shortcut to use extension to specify output content-type + api.use(wares.extensions([ 'json', 'svg', 'csv', 'txt', 'png', 'html', 'tsv' ])); - // also support url-encoded content-type - api.use(wares.bodyParser.urlencoded({ - extended: true - })); - - api.use(ctx.authorization.isPermitted('api:entries:read')); - /** - * @method force_typed_data - * @returns {Stream} Creates a through stream which validates that all - * elements on the stream have a `type` field. - * Generate a stream that ensures elements have a `type` field. - */ - function force_typed_data(opts) { + // also support url-encoded content-type + api.use(wares.bodyParser.urlencoded({ + extended: true + })); + + api.use(ctx.authorization.isPermitted('api:entries:read')); /** - * @function sync - * Iterate over every element in the stream, enforcing some data type. + * @method force_typed_data + * @returns {Stream} Creates a through stream which validates that all + * elements on the stream have a `type` field. + * Generate a stream that ensures elements have a `type` field. */ - function sync(data, next) { - // if element has no data type, but we know what the type should be - if (!data.type && opts.type) { - // bless absence with known type - data.type = opts.type; - } - // continue control flow to next element in the stream - next(null, data); + function force_typed_data(opts) { + /** + * @function sync + * Iterate over every element in the stream, enforcing some data type. + */ + function sync(data, next) { + // if element has no data type, but we know what the type should be + if (!data.type && opts.type) { + // bless absence with known type + data.type = opts.type; + } + // continue control flow to next element in the stream + next(null, data); + } + // return configured stream + return es.map(sync); } - // return configured stream - return es.map(sync); - } - // check for last modified from in-memory data + // check for last modified from in-memory data - function ifModifiedSinceCTX(req, res, next) { + function ifModifiedSinceCTX(req, res, next) { - var lastEntry = _last(ctx.ddata.sgvs); - var lastEntryDate = null; + var lastEntry = _last(ctx.ddata.sgvs); + var lastEntryDate = null; - if (!_isNil(lastEntry)) { - lastEntryDate = new Date(_last(ctx.ddata.sgvs).mills); - res.setHeader('Last-Modified', lastEntryDate.toUTCString()); - } + if (!_isNil(lastEntry)) { + lastEntryDate = new Date(_last(ctx.ddata.sgvs).mills); + res.setHeader('Last-Modified', lastEntryDate.toUTCString()); + } - var ifModifiedSince = req.get('If-Modified-Since'); - if (!ifModifiedSince) { - return next(); - } + var ifModifiedSince = req.get('If-Modified-Since'); + if (!ifModifiedSince) { + return next(); + } - console.log('CGM Entry request with If-Modified-Since: ', ifModifiedSince); + console.log("CGM Entry request with If-Modified-Since: ", ifModifiedSince); - if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { - console.log('Sending Not Modified'); - res.status(304).send({ - status: 304 - , message: 'Not modified' - , type: 'internal' - }); - return; - } + if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { + res.status(304).send({ + status: 304, + message: 'Not modified', + type: 'internal' + }); + return; + } - return next(); - } - - /** - * @method format_entries - * A final middleware to send payloads assembled by previous middlewares - * out to the http client. - * We expect a payload to be attached to `res.entries`. - // Middleware to format any response involving entries. - */ - function format_entries(req, res) { - // deduce what type of records we might expect - var type_params = { - type: (req.query && req.query.find && req.query.find.type && - req.query.find.type !== req.params.model) ? - req.query.find.type : req.params.model - }; - // prepare a stream of elements from some prepared payload - var output = es.readArray(res.entries || []); - // on other hand, if there's been some error, report that - if (res.entries_err) { - return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err); + return next(); } - // IF-Modified-Since support + /** + * @method format_entries + * A final middleware to send payloads assembled by previous middlewares + * out to the http client. + * We expect a payload to be attached to `res.entries`. + // Middleware to format any response involving entries. + */ + function format_entries(req, res) { + // deduce what type of records we might expect + var type_params = { + type: (req.query && req.query.find && req.query.find.type && + req.query.find.type !== req.params.model) ? + req.query.find.type : req.params.model + }; + // prepare a stream of elements from some prepared payload + var output = es.readArray(res.entries || []); + // on other hand, if there's been some error, report that + if (res.entries_err) { + return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err); + } - function compare(a, b) { - var a_field = a.mills ? a.mills : a.date; - var b_field = b.mills ? b.mills : b.date; + // IF-Modified-Since support - if (a_field > b_field) - return -1; - if (a_field < b_field) - return 1; - return 0; - } + function compare(a, b) { + var a_field = a.mills ? a.mills : a.date; + var b_field = b.mills ? b.mills : b.date; - res.entries.sort(compare); + if (a_field > b_field) + return -1; + if (a_field < b_field) + return 1; + return 0; + } - var lastEntry = _first(res.entries); - var lastEntryDate = null; + res.entries.sort(compare); - if (!_isNil(lastEntry)) { - if (lastEntry.mills) lastEntryDate = new Date(lastEntry.mills); - if (!lastEntry.mills && lastEntry.date) lastEntryDate = new Date(lastEntry.date); - res.setHeader('Last-Modified', lastEntryDate.toUTCString()); - } + var lastEntry = _first(res.entries); + var lastEntryDate = null; - var ifModifiedSince = req.get('If-Modified-Since'); + if (!_isNil(lastEntry)) { + if (lastEntry.mills) lastEntryDate = new Date(lastEntry.mills); + if (!lastEntry.mills && lastEntry.date) lastEntryDate = new Date(lastEntry.date); + res.setHeader('Last-Modified', lastEntryDate.toUTCString()); + } - if (lastEntryDate !== null && ifModifiedSince !== null && lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { - console.log('If-Modified-Since: ' + new Date(ifModifiedSince) + ' Last-Modified', lastEntryDate); - res.status(304).send({ - status: 304 - , message: 'Not modified' - , type: 'internal' - }); - return; - } + var ifModifiedSince = req.get('If-Modified-Since'); - function formatWithSeparator(data, separator) { - if (data === null || data.constructor !== Array || data.length == 0) return ""; - - var outputdata = []; - data.forEach(function(e) { - var entry = { - "dateString": e.dateString - , "date": e.date - , "sgv": e.sgv - , "direction": e.direction - , "device": e.device - }; - outputdata.push(entry); - }); - - var fields = Object.keys(outputdata[0]); - var replacer = function(key, value) { - return value === null ? '' : value - } - var csv = outputdata.map(function(row) { - return fields.map(function(fieldName) { - return JSON.stringify(row[fieldName], replacer) - }).join(separator) - }); - return csv.join('\r\n'); - } + console.log('If-Modified-Since: ' + new Date(ifModifiedSince) + ' Last-Modified', lastEntryDate); - // console.log(JSON.stringify(req.headers)); - - // if no error, format the payload - // The general pattern here is to create an output stream that reformats - // the data correctly into the desired representation. - // The stream logic allows some streams to ensure that some basic rules, - // such as enforcing a type property to exist, are followed. - return res.format({ - 'text/plain': function() { - es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { - var output = formatWithSeparator(out, "\t"); - res.send(output); - })); - } - , 'text/tab-separated-values': function() { - es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { - var output = formatWithSeparator(out, '\t'); - res.send(output); - })); - } - , 'text/csv': function() { - es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { - var output = formatWithSeparator(out, ','); - res.send(output); - })); - } - , 'application/json': function() { - // so long as every element has a `type` field, and some kind of - // date, we'll consider it valid - es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { - res.json(out); - })); - } - , 'default': function() { - // Default to JSON output - // so long as every element has a `type` field, and some kind of - // date, we'll consider it valid - es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { - res.json(out); - })); - } - }); - } - - /** - * @method insert_entries - * middleware to process "uploads" of sgv data - * This inspects the http requests's incoming payload. This creates a - * validating stream for the appropriate type of payload, which is piped - * into the configured storage layer, saving the results in mongodb. - */ - // middleware to process "uploads" of sgv data - function insert_entries(req, res, next) { - // list of incoming records - var incoming = []; - // Potentially a single json encoded body. - // This can happen from either an url-encoded or json content-type. - if ('date' in req.body) { - // add it to the incoming list - incoming.push(req.body); - } - // potentially a list of json entries - if (req.body.length) { - // add them to the list - incoming = incoming.concat(req.body); + if (lastEntryDate !== null && ifModifiedSince !== null && lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { + res.status(304).send({ + status: 304, + message: 'Not modified', + type: 'internal' + }); + return; + } + + // if no error, format the payload + // The general pattern here is to create an output stream that reformats + // the data correctly into the desired representation. + // The stream logic allows some streams to ensure that some basic rules, + // such as enforcing a type property to exist, are followed. + return res.format({ + text: function() { + res.set('Content-Type', 'text/plain'); + // sgvdata knows how to format sgv entries as text + es.pipeline(output, sgvdata.format(), es.writeArray(function(err, out) { + res.send(out.join('')); + })); + }, + csv: function() { + // sgvdata knows how to format sgv entries as text + res.set('Content-Type', 'text/plain'); + var csvpipe = require('sgvdata/lib/text')({ + format: ',', + parse: /[\t,]/ + }); + es.pipeline( + output, sgvdata.mapper(csvpipe.format), es.join('\n'), es.writeArray(function(err, out) { + res.send(out.join('')); + }) + ); + }, + json: function() { + // so long as every element has a `type` field, and some kind of + // date, we'll consider it valid + es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { + res.json(out); + })); + } + }); } /** - * @function persist - * @returns {WritableStream} a writable persistent storage stream - * Sends stream elements into storage layer. - * Configures the storage layer stream. + * @method insert_entries + * middleware to process "uploads" of sgv data + * This inspects the http requests's incoming payload. This creates a + * validating stream for the appropriate type of payload, which is piped + * into the configured storage layer, saving the results in mongodb. */ - function persist(fn) { - if (req.persist_entries) { - // store everything - return entries.persist(fn); - } - // support a preview mode, just lint everything - return es.pipeline(entries.map(), es.writeArray(fn)); + // middleware to process "uploads" of sgv data + function insert_entries(req, res, next) { + // list of incoming records + var incoming = []; + // Potentially a single json encoded body. + // This can happen from either an url-encoded or json content-type. + if ('date' in req.body) { + // add it to the incoming list + incoming.push(req.body); + } + // potentially a list of json entries + if (req.body.length) { + // add them to the list + incoming = incoming.concat(req.body); + } + + /** + * @function inputs + * @returns {ReadableStream} Readable stream with all incoming elements + * in the stream. + * in node, pipe is the most interoperable interface + * inputs returns a readable stream representing all the potential + * records from the HTTP body. + * Most content-types are handled by express middeware. + * However, text/* types are given to us as a raw buffer, this + * function switches between these two variants to find the + * correct input stream. + * stream, so use svgdata to handle those. + * The inputs stream always emits sgv json objects. + */ + function inputs() { + var input; + // handle all text types + if (req.is('text/*')) { + // re-use the svgdata parsing stream + input = es.pipeline(req, sgvdata.parse()); + return input; + } + // use established list + return es.readArray(incoming); + } + + /** + * @function persist + * @returns {WritableStream} a writable persistent storage stream + * Sends stream elements into storage layer. + * Configures the storage layer stream. + */ + function persist(fn) { + if (req.persist_entries) { + // store everything + return entries.persist(fn); + } + // support a preview mode, just lint everything + return es.pipeline(entries.map(), es.writeArray(fn)); + } + + /** + * @function done + * Final callback store results on `res.entries`, after all I/O is done. + * store results and move to the next middleware + */ + function done(err, result) { + // assign payload + res.entries = result; + res.entries_err = err; + return next(); + } + + // pipe everything to persistent storage + // when finished, pass to the next piece of middleware + es.pipeline(inputs(), persist(done)); } /** - * @function done - * Final callback store results on `res.entries`, after all I/O is done. - * store results and move to the next middleware + * @function prepReqModel + * @param {Request} req The request to inspect + * @param {String} model The name of the model to use if not found. + * Sets `req.query.find.type` to your chosen model. */ - function done(err, result) { - // assign payload - res.entries = result; - res.entries_err = err; - return next(); + function prepReqModel(req, model) { + var type = model || 'sgv'; + if (!req.query.find) { + req.query.find = { + type: type + }; + } else { + req.query.find.type = type; + } } - // pipe everything to persistent storage - // when finished, pass to the next piece of middleware - es.pipeline(es.readArray(incoming), persist(done)); - } - - /** - * @function prepReqModel - * @param {Request} req The request to inspect - * @param {String} model The name of the model to use if not found. - * Sets `req.query.find.type` to your chosen model. - */ - function prepReqModel(req, model) { - var type = model || 'sgv'; - if (!req.query.find) { - req.query.find = { - type: type - }; - } else { - req.query.find.type = type; - } - } - - /** - * @param model - * Prepare model based on explicit choice in route/path parameter. - */ - api.param('model', function(req, res, next, model) { - prepReqModel(req, model); - next(); - }); - - /** - * @module get#/entries/current - * @route - * Get last entry. - * @response /definitions/Entries - */ - api.get('/entries/current', function(req, res, next) { - //assume sgv - req.params.model = 'sgv'; - entries.list({ - count: 1 - }, function(err, records) { - res.entries = records; - res.entries_err = err; - return next(); + /** + * @param model + * Prepare model based on explicit choice in route/path parameter. + */ + api.param('model', function(req, res, next, model) { + prepReqModel(req, model); + next(); }); - }, format_entries); - - /** - * @module get#/entries/:spec - * @route - * Fetch one entry by id - * @response /definitions/Entries - * @param String spec :spec is either the id of a record or model name to - * search. If it is an id, only the record with that id will be in the - * response. If the string is a model name, like `sgv`, `mbg`, et al, the - * usual query logic is performed biased towards that model type. - * Useful for filtering by type. - */ - api.get('/entries/:spec', function(req, res, next) { - if (isId(req.params.spec)) { - entries.getEntry(req.params.spec, function(err, entry) { - if (err) { - return next(err); - } - res.entries = [entry]; - res.entries_err = err; - req.query.find = req.query.find || {}; - if (entry) { - req.query.find.type = entry.type; + + /** + * @module get#/entries/current + * @route + * Get last entry. + * @response /definitions/Entries + */ + api.get('/entries/current', function(req, res, next) { + //assume sgv + req.params.model = 'sgv'; + entries.list({ + count: 1 + }, function(err, records) { + res.entries = records; + res.entries_err = err; + return next(); + }); + }, format_entries); + + /** + * @module get#/entries/:spec + * @route + * Fetch one entry by id + * @response /definitions/Entries + * @param String spec :spec is either the id of a record or model name to + * search. If it is an id, only the record with that id will be in the + * response. If the string is a model name, like `sgv`, `mbg`, et al, the + * usual query logic is performed biased towards that model type. + * Useful for filtering by type. + */ + api.get('/entries/:spec', function(req, res, next) { + if (isId(req.params.spec)) { + entries.getEntry(req.params.spec, function(err, entry) { + if (err) { + return next(err); + } + res.entries = [entry]; + res.entries_err = err; + req.query.find = req.query.find || {}; + if (entry) { + req.query.find.type = entry.type; + } else { + res.entries_err = 'No such id: \'' + req.params.spec + '\''; + } + next(); + }); } else { - res.entries_err = 'No such id: \'' + req.params.spec + '\''; + req.params.model = req.params.spec; + prepReqModel(req, req.params.model); + query_models(req, res, next); } - next(); - }); - } else { - req.params.model = req.params.spec; - prepReqModel(req, req.params.model); - query_models(req, res, next); + }, format_entries); + + + /** + * @module get#/entries + * @route + * @response /definitions/Entries + * Use the `find` parameter to generate mongo queries. + * Default is `count=10`, for only 10 latest entries, reverse sorted by + * `find[date]`. + * + */ + api.get('/entries', ifModifiedSinceCTX, query_models, format_entries); + + /** + * @function echo_query + * Output the generated query object itself, instead of the query results. + * Useful for understanding how REST api parameters translate into mongodb + * queries. + */ + function echo_query(req, res) { + var query = req.query; + // make a depth-wise copy of the original raw input + var input = JSON.parse(JSON.stringify(query)); + + // If "?count=" is present, use that number to decided how many to return. + if (!query.count) { + query.count = 10; + } + // bias towards entries, but allow expressing preference of storage layer + var storage = req.params.echo || 'entries'; + + // send payload with information about query itself + res.json({ + query: ctx[storage].query_for(query), + input: input, + params: req.params, + storage: storage + }); } - }, format_entries); - - - /** - * @module get#/entries - * @route - * @response /definitions/Entries - * Use the `find` parameter to generate mongo queries. - * Default is `count=10`, for only 10 latest entries, reverse sorted by - * `find[date]`. - * - */ - api.get('/entries', ifModifiedSinceCTX, query_models, format_entries); - - /** - * @function echo_query - * Output the generated query object itself, instead of the query results. - * Useful for understanding how REST api parameters translate into mongodb - * queries. - */ - function echo_query(req, res) { - var query = req.query; - // make a depth-wise copy of the original raw input - var input = JSON.parse(JSON.stringify(query)); - - // If "?count=" is present, use that number to decided how many to return. - if (!query.count) { - query.count = 10; + + /** + * @function query_models + * Perform the standard query logic, translating API parameters into mongo + * db queries in a fairly regimented manner. + * This middleware executes the query, assigning the payload to results on + * `res.entries`. + */ + function query_models(req, res, next) { + var query = req.query; + + // If "?count=" is present, use that number to decided how many to return. + if (!query.count) { + query.count = 10; + } + + // bias to entries, but allow expressing a preference + var storage = req.storage || ctx.entries; + // perform the query + storage.list(query, function payload(err, entries) { + // assign payload + res.entries = entries; + res.entries_err = err; + return next(); + }); } - // bias towards entries, but allow expressing preference of storage layer - var storage = req.params.echo || 'entries'; - - // send payload with information about query itself - res.json({ - query: ctx[storage].query_for(query) - , input: input - , params: req.params - , storage: storage - }); - } - - /** - * @function query_models - * Perform the standard query logic, translating API parameters into mongo - * db queries in a fairly regimented manner. - * This middleware executes the query, assigning the payload to results on - * `res.entries`. - */ - function query_models(req, res, next) { - var query = req.query; - - // If "?count=" is present, use that number to decided how many to return. - if (!query.count) { - query.count = 10; + + function count_records(req, res, next) { + var query = req.query; + var storage = req.storage || ctx.entries; + storage.aggregate(query, function payload(err, entries) { + // assign payload + res.entries = entries; + res.entries_err = err; + return next(err); + }); } - // bias to entries, but allow expressing a preference - var storage = req.storage || ctx.entries; - // perform the query - storage.list(query, function payload(err, entries) { - // assign payload - res.entries = entries; - res.entries_err = err; - return next(); - }); - } - - function count_records(req, res, next) { - var query = req.query; - var storage = req.storage || ctx.entries; - storage.aggregate(query, function payload(err, entries) { - // assign payload - res.entries = entries; - res.entries_err = err; - return next(err); - }); - } - - function format_results(req, res, next) { - res.json(res.entries); - next(); - } - - /** - * @function delete_records - * Delete entries. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - function delete_records(req, res, next) { - // bias towards model, but allow expressing a preference - if (!req.model) { - req.model = ctx.entries; + function format_results(req, res, next) { + res.json(res.entries); + next(); } - var query = req.query; - if (!query.count) { - query.count = 10 + + /** + * @function delete_records + * Delete entries. The query logic works the same way as find/list. This + * endpoint uses same search logic to remove records from the database. + */ + function delete_records(req, res, next) { + // bias towards model, but allow expressing a preference + if (!req.model) { + req.model = ctx.entries; + } + var query = req.query; + if (!query.count) { + query.count = 10 + } + // remove using the query + req.model.remove(query, function(err, stat) { + if (err) { + return next(err); + } + // yield some information about success of operation + res.json(stat); + return next(); + }); } - // remove using the query - req.model.remove(query, function(err, stat) { - if (err) { - return next(err); - } - // yield some information about success of operation - res.json(stat); - return next(); + + /** + * @param spec + * Middleware that prepares the :spec parameter in the routed path. + */ + api.param('spec', function(req, res, next, spec) { + if (isId(spec)) { + prepReqModel(req, req.params.model); + req.query = { + find: { + _id: req.params.spec + } + }; + } else { + prepReqModel(req, req.params.model); + } + next(); }); - } - - /** - * @param spec - * Middleware that prepares the :spec parameter in the routed path. - */ - api.param('spec', function(req, res, next, spec) { - if (isId(spec)) { - prepReqModel(req, req.params.model); - req.query = { - find: { - _id: req.params.spec + + /** + * @param echo + * The echo parameter in the path routing parameters allows the echo + * endpoints to customize the storage layer. + */ + api.param('echo', function(req, res, next, echo) { + console.log('echo', echo); + if (!echo) { + req.params.echo = 'entries'; } - }; - } else { - prepReqModel(req, req.params.model); - } - next(); - }); - - /** - * @param echo - * The echo parameter in the path routing parameters allows the echo - * endpoints to customize the storage layer. - */ - api.param('echo', function(req, res, next, echo) { - console.log('echo', echo); - if (!echo) { - req.params.echo = 'entries'; - } - next(); - }); - - /** - * @module get#/echo/:echo/:model/:spec - * @routed - * Echo information about model/spec queries. - * Useful in understanding how REST API prepares queries against mongo. - */ - api.get('/echo/:echo/:model?/:spec?', echo_query); - - /** + next(); + }); + + /** + * @module get#/echo/:echo/:model/:spec + * @routed + * Echo information about model/spec queries. + * Useful in understanding how REST API prepares queries against mongo. + */ + api.get('/echo/:echo/:model?/:spec?', echo_query); + + /** * Prepare regexp patterns based on `prefix`, and `regex` parameters. * Translates `/:prefix/:regex` strings into fancy mongo queries. * @method prep_patterns @@ -530,140 +522,140 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js ``` */ - function prep_patterns(req, res, next) { - // initialize empty pattern list. - var pattern = []; - // initialize a basic prefix - // also perform bash brace/glob-style expansion - var prefix = expand(req.params.prefix || '.*'); - - // if expansion leads to more than one prefix - if (prefix.length > 1) { - // pre-pend the prefix to the pattern list and wait to expand it as - // part of the full pattern - pattern.push('^' + req.params.prefix); - } - // append any regex parameters - if (req.params.regex) { - // prepend "match any" rule to their rule - pattern.push('.*' + req.params.regex); + function prep_patterns(req, res, next) { + // initialize empty pattern list. + var pattern = []; + // initialize a basic prefix + // also perform bash brace/glob-style expansion + var prefix = expand(req.params.prefix || '.*'); + + // if expansion leads to more than one prefix + if (prefix.length > 1) { + // pre-pend the prefix to the pattern list and wait to expand it as + // part of the full pattern + pattern.push('^' + req.params.prefix); + } + // append any regex parameters + if (req.params.regex) { + // prepend "match any" rule to their rule + pattern.push('.*' + req.params.regex); + } + // create a single pattern with all inputs considered + // expand the pattern using bash/glob style brace expansion to generate + // an array of patterns. + pattern = expand(pattern.join('')); + + /** + * Factory function to customize creation of RegExp patterns. + * @method iter_regex + * @param String prefix Default null + * @param String suffix Default null + * @returns function(pat) which turns the given pattern into a new + * RegExp with the prefix and suffix prepended, and appended, + * respectively. + */ + function iter_regex(prefix, suffix) { + /** + * @function make + * @returns RegExp Make a RegExp with configured prefix and suffix + */ + function make(pat) { + // concat the prefix, pattern, and suffix. + pat = (prefix ? prefix : '') + pat + (suffix ? suffix : ''); + // return RegExp. + return new RegExp(pat); + } + // return functor + return make; + } + + // save pattern for other middlewares, eg echo, query, etc. + req.pattern = pattern; + var matches = pattern.map(iter_regex()); + // prepare the query against a configurable field name. + var field = req.patternField; + var query = {}; + query[field] = { + // $regex: prefix, + // configure query to perform regex against list of potential regexp + $in: matches + }; + if (prefix.length === 1) { + // If there is a single prefix pattern, mongo can optimize this against + // an indexed field + query[field].$regex = prefix.map(iter_regex('^')).pop(); + } + + // Merge into existing query structure. + if (req.query.find) { + if (req.query.find[field]) { + req.query.find[field].$in = query[field].$in; + } else { + req.query.find[field] = query[field]; + } + } else { + req.query.find = query; + } + // Also assist in querying for the requested type. + if (req.params.type) { + req.query.find.type = req.params.type; + } + next(); } - // create a single pattern with all inputs considered - // expand the pattern using bash/glob style brace expansion to generate - // an array of patterns. - pattern = expand(pattern.join('')); /** - * Factory function to customize creation of RegExp patterns. - * @method iter_regex - * @param String prefix Default null - * @param String suffix Default null - * @returns function(pat) which turns the given pattern into a new - * RegExp with the prefix and suffix prepended, and appended, - * respectively. + * @method prep_pattern_field + * Ensure that `req.patternField` is set to assist other middleware in + * deciding which field to generate queries against. + * Default is `dateString`, because that's the iso8601 field for sgv + * entries. */ - function iter_regex(prefix, suffix) { - /** - * @function make - * @returns RegExp Make a RegExp with configured prefix and suffix - */ - function make(pat) { - // concat the prefix, pattern, and suffix. - pat = (prefix ? prefix : '') + pat + (suffix ? suffix : ''); - // return RegExp. - return new RegExp(pat); - } - // return functor - return make; + function prep_pattern_field(req, res, next) { + // If req.params.field from routed path parameter is available use it. + if (req.params.field) { + req.patternField = req.params.field; + } else { + // Default is `dateString`. + req.patternField = 'dateString'; + } + next(); } - // save pattern for other middlewares, eg echo, query, etc. - req.pattern = pattern; - var matches = pattern.map(iter_regex()); - // prepare the query against a configurable field name. - var field = req.patternField; - var query = {}; - query[field] = { - // $regex: prefix, - // configure query to perform regex against list of potential regexp - $in: matches - }; - if (prefix.length === 1) { - // If there is a single prefix pattern, mongo can optimize this against - // an indexed field - query[field].$regex = prefix.map(iter_regex('^')).pop(); + /** + * @method prep_storage + * Prep storage layer for other middleware by setting `req.storage`. + * Some routed paths have a `storage` parameter available, when this is + * set, `req.storage will be set to that value. The default otherwise is + * the entries storage layer, because that's where sgv records are stored + * by default. + */ + function prep_storage(req, res, next) { + if (req.params.storage && _includes(['entries', 'treatments', 'devicestatus'], req.params.storage)) { + req.storage = ctx[req.params.storage]; + } else { + req.storage = ctx.entries; + } + next(); } - // Merge into existing query structure. - if (req.query.find) { - if (req.query.find[field]) { - req.query.find[field].$in = query[field].$in; - } else { - req.query.find[field] = query[field]; - } - } else { - req.query.find = query; - } - // Also assist in querying for the requested type. - if (req.params.type) { - req.query.find.type = req.params.type; - } - next(); - } - - /** - * @method prep_pattern_field - * Ensure that `req.patternField` is set to assist other middleware in - * deciding which field to generate queries against. - * Default is `dateString`, because that's the iso8601 field for sgv - * entries. - */ - function prep_pattern_field(req, res, next) { - // If req.params.field from routed path parameter is available use it. - if (req.params.field) { - req.patternField = req.params.field; - } else { - // Default is `dateString`. - req.patternField = 'dateString'; - } - next(); - } - - /** - * @method prep_storage - * Prep storage layer for other middleware by setting `req.storage`. - * Some routed paths have a `storage` parameter available, when this is - * set, `req.storage will be set to that value. The default otherwise is - * the entries storage layer, because that's where sgv records are stored - * by default. - */ - function prep_storage(req, res, next) { - if (req.params.storage && _includes(['entries', 'treatments', 'devicestatus'], req.params.storage)) { - req.storage = ctx[req.params.storage]; - } else { - req.storage = ctx.entries; - } - next(); - } - - /** - * @module get#/times/echo/:prefix/:regex - * Echo interface for the regex pattern generator. - * @routed - * Useful for understanding how the `/:prefix/:regex` route generates - * mongodb queries. - */ - api.get('/times/echo/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, function(req, res) { - res.json({ - req: { - params: req.params - , query: req.query - } - , pattern: req.pattern + /** + * @module get#/times/echo/:prefix/:regex + * Echo interface for the regex pattern generator. + * @routed + * Useful for understanding how the `/:prefix/:regex` route generates + * mongodb queries. + */ + api.get('/times/echo/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, function(req, res) { + res.json({ + req: { + params: req.params, + query: req.query + }, + pattern: req.pattern + }); }); - }); - /** + /** * @module get#/times/:prefix/:regex * Allows searching for modal times of day across days and months. ``` @@ -674,11 +666,11 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js * @routed * @response 200 /definitions/Entries */ - api.get('/times/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, query_models, format_entries); + api.get('/times/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, query_models, format_entries); - api.get('/count/:storage/where', prep_storage, count_records, format_results); + api.get('/count/:storage/where', prep_storage, count_records, format_results); - /** + /** * @module get#/slice/:storage/:field/:type/:prefix/:regex * @routed * @response 200 /definitions/Entries @@ -689,66 +681,65 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js /api/v1/slice/entries/dateString/mbg/2015.json ``` */ - api.get('/slice/:storage/:field/:type?/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, query_models, format_entries); - - /** - * @module post#/entries/preview - * Allow previewing your post content, just echos everything you - * posted back out. - * Similar to the echo api, useful to lint/debug upload problems. - */ - api.post('/entries/preview', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { - // setting this flag tells insert_entries to not actually store the results - req.persist_entries = false; - next(); - }, insert_entries, format_entries); - - // Protect endpoints with authenticated api. - if (app.enabled('api')) { - // Create and store new sgv entries + api.get('/slice/:storage/:field/:type?/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, query_models, format_entries); + /** - * @module post#/entries - * Allow posting content to store. - * Stores incoming payload that follows basic rules about having a - * `type` field in `entries` storage layer. + * @module post#/entries/preview + * Allow previewing your post content, just echos everything you + * posted back out. + * Similar to the echo api, useful to lint/debug upload problems. */ - api.post('/entries/', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { - // setting this flag tells insert_entries to store the results - req.persist_entries = true; - next(); + api.post('/entries/preview', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { + // setting this flag tells insert_entries to not actually store the results + req.persist_entries = false; + next(); }, insert_entries, format_entries); - /** - * @module delete#/entries/:spec - * @route - * Delete entries. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - api.delete('/entries/:spec', ctx.authorization.isPermitted('api:entries:delete'), function(req, res, next) { - // if ID, prepare to query for one record - if (isId(req.params.spec)) { - prepReqModel(req, req.params.model); - req.query = { - find: { - _id: req.params.spec - } - }; - } else { - req.params.model = req.params.spec; - prepReqModel(req, req.params.model); - if (req.query.find.type === '*') { - delete req.query.find.type; - } - } - next(); - }, delete_records); + // Protect endpoints with authenticated api. + if (app.enabled('api')) { + // Create and store new sgv entries + /** + * @module post#/entries + * Allow posting content to store. + * Stores incoming payload that follows basic rules about having a + * `type` field in `entries` storage layer. + */ + api.post('/entries/', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { + // setting this flag tells insert_entries to store the results + req.persist_entries = true; + next(); + }, insert_entries, format_entries); + + /** + * @module delete#/entries/:spec + * @route + * Delete entries. The query logic works the same way as find/list. This + * endpoint uses same search logic to remove records from the database. + */ + api.delete('/entries/:spec', ctx.authorization.isPermitted('api:entries:delete'), function(req, res, next) { + // if ID, prepare to query for one record + if (isId(req.params.spec)) { + prepReqModel(req, req.params.model); + req.query = { + find: { + _id: req.params.spec + } + }; + } else { + req.params.model = req.params.spec; + prepReqModel(req, req.params.model); + if (req.query.find.type === '*') { + delete req.query.find.type; + } + } + next(); + }, delete_records); - // delete record that match query - api.delete('/entries/', ctx.authorization.isPermitted('api:entries:delete'), delete_records); - } - return api; + } + + return api; } // expose module -module.exports = configure; +module.exports = configure; \ No newline at end of file diff --git a/lib/api/profile/index.js b/lib/api/profile/index.js index 30f8fe240ca..07c6e1dc65a 100644 --- a/lib/api/profile/index.js +++ b/lib/api/profile/index.js @@ -44,6 +44,7 @@ function configure (app, wares, ctx) { res.json(created.ops); console.log('Profile created', created); } + }); }); diff --git a/lib/api/treatments/index.js b/lib/api/treatments/index.js index 0362829fc7b..3fff4ceb331 100644 --- a/lib/api/treatments/index.js +++ b/lib/api/treatments/index.js @@ -99,52 +99,11 @@ function configure(app, wares, ctx) { limit: 1048576 * 50 }), ctx.authorization.isPermitted('api:treatments:create'), post_response); - /** - * @function delete_records - * Delete treatments. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - function delete_records(req, res, next) { - var query = req.query; - if (!query.count) { - query.count = 10 - } - - console.log('Delete records with query: ', query); - - // remove using the query - ctx.treatments.remove(query, function(err, stat) { - if (err) { - console.log('treatments delete error: ', err); - return next(err); - } - // yield some information about success of operation - res.json(stat); - - console.log('treatments records deleted'); - - return next(); - }); - } - - api.delete('/treatments/:id', ctx.authorization.isPermitted('api:treatments:delete'), function(req, res, next) { - if (!req.query.find) { - req.query.find = { - _id: req.params.id - }; - } else { - req.query.find._id = req.params.id; - } - - if (req.query.find._id === '*') { - // match any record id - delete req.query.find._id; - } - next(); - }, delete_records); - - // delete record that match query - api.delete('/treatments/', ctx.authorization.isPermitted('api:treatments:delete'), delete_records); + api.delete('/treatments/:_id', ctx.authorization.isPermitted('api:treatments:delete'), function(req, res) { + ctx.treatments.remove(req.params._id, function() { + res.json({}); + }); + }); // update record api.put('/treatments/', ctx.authorization.isPermitted('api:treatments:update'), function(req, res) { diff --git a/lib/authorization/storage.js b/lib/authorization/storage.js index 9999b9f3178..41969be150f 100644 --- a/lib/authorization/storage.js +++ b/lib/authorization/storage.js @@ -28,11 +28,6 @@ function init (env, ctx) { obj.created_at = (new Date()).toISOString(); } collection.insert(obj, function (err, doc) { - if (err != null && err.message) { - console.log('Data insertion error', err.message); - fn(err.message, null); - return; - } storage.reload(function loaded() { fn(null, doc.ops); }); diff --git a/lib/client/index.js b/lib/client/index.js index 354901bc899..7a305148677 100644 --- a/lib/client/index.js +++ b/lib/client/index.js @@ -1076,11 +1076,9 @@ client.load = function load(serverSettings, callback) { function prepareEntries ( ) { // Post processing after data is in var temp1 = [ ]; - var sbx = client.sbx.withExtendedSettings(client.rawbg); - - if (client.ddata.cal && client.rawbg.isEnabled(sbx)) { + if (client.ddata.cal && client.rawbg.isEnabled(client.sbx)) { temp1 = client.ddata.sgvs.map(function (entry) { - var rawbgValue = client.rawbg.showRawBGs(entry.mgdl, entry.noise, client.ddata.cal, sbx) ? client.rawbg.calc(entry, client.ddata.cal, sbx) : 0; + var rawbgValue = client.rawbg.showRawBGs(entry.mgdl, entry.noise, client.ddata.cal, client.sbx) ? client.rawbg.calc(entry, client.ddata.cal, client.sbx) : 0; if (rawbgValue > 0) { return { mills: entry.mills - 2000, mgdl: rawbgValue, color: 'white', type: 'rawbg' }; } else { @@ -1154,9 +1152,10 @@ client.load = function load(serverSettings, callback) { } else if (!inRetroMode()) { chart.update(false); client.plugins.updateVisualisations(client.nowSBX); - brushed(); } + } + }; module.exports = client; diff --git a/lib/client/renderer.js b/lib/client/renderer.js index bcb605e3bc1..6dc0f68fcb3 100644 --- a/lib/client/renderer.js +++ b/lib/client/renderer.js @@ -137,11 +137,10 @@ function init (client, d3) { function getRawbgInfo ( ) { var info = { }; - var sbx = client.sbx.withExtendedSettings(client.rawbg); if (d.type === 'sgv') { info.noise = client.rawbg.noiseCodeToDisplay(d.mgdl, d.noise); - if (client.rawbg.showRawBGs(d.mgdl, d.noise, client.ddata.cal, sbx)) { - info.value = utils.scaleMgdl(client.rawbg.calc(d, client.ddata.cal, sbx)); + if (client.rawbg.showRawBGs(d.mgdl, d.noise, client.ddata.cal, client.sbx)) { + info.value = utils.scaleMgdl(client.rawbg.calc(d, client.ddata.cal, client.sbx)); } } return info; diff --git a/lib/data/dataloader.js b/lib/data/dataloader.js index cc303da1d72..ee6308d9846 100644 --- a/lib/data/dataloader.js +++ b/lib/data/dataloader.js @@ -259,13 +259,11 @@ function loadProfileSwitchTreatments(ddata, ctx, callback) { var tq = { find: { eventType: 'Profile Switch', - created_at: dateRange, - duration: 0 + created_at: dateRange }, sort: { created_at: -1 - }, - count: 1 + } }; ctx.treatments.list(tq, function(err, results) { diff --git a/lib/hashauth.js b/lib/hashauth.js index d39060a2e2b..e4956860c59 100644 --- a/lib/hashauth.js +++ b/lib/hashauth.js @@ -79,7 +79,7 @@ hashauth.init = function init(client, $) { var translate = client.translate; hashauth.injectHtml(); $( '#requestauthenticationdialog' ).dialog({ - width: 350 + width: 500 , height: 240 , buttons: [ { diff --git a/lib/language.js b/lib/language.js index 875582c6298..e5e879c0929 100644 --- a/lib/language.js +++ b/lib/language.js @@ -24,7 +24,6 @@ function init() { , { code: 'he', language: 'עברית', speechCode: 'he-IL' } , { code: 'hr', language: 'Hrvatski', speechCode: 'hr-HR' } , { code: 'it', language: 'Italiano', speechCode: 'it-IT' } - , { code: 'ja', language: '日本語', speechCode: 'ja-JP' } , { code: 'ko', language: '한국어', speechCode: 'ko-KR' } , { code: 'nb', language: 'Norsk (Bokmål)', speechCode: 'no-NO' } , { code: 'nl', language: 'Nederlands', speechCode: 'nl-NL' } @@ -34,7 +33,6 @@ function init() { , { code: 'ru', language: 'Русский', speechCode: 'ru-RU' } , { code: 'sk', language: 'Slovenčina', speechCode: 'sk-SK' } , { code: 'sv', language: 'Svenska', speechCode: 'sv-SE' } - , { code: 'tr', language: 'Türkçe', speechCode: 'tr-TR' } , { code: 'zh_cn', language: '中文(简体)', speechCode: 'cmn-Hans-CN' } , { code: 'zh_tw', language: '中文(繁體)', speechCode: 'cmn-Hant-TW' } ]; @@ -53,7 +51,6 @@ function init() { ,bg: 'Активиране на порта' ,hr: 'Slušanje na portu' ,it: 'Porta in ascolto' - ,ja: '接続可能' ,fi: 'Kuuntelen porttia' ,nb: 'Lytter på port' ,he: 'מקשיב על פתחה' @@ -63,7 +60,6 @@ function init() { ,de: 'Lauscht auf Port' ,nl: 'Luistert op poort' ,ko: '포트에서 수신' - ,tr: 'Port dinleniyor' ,zh_cn: '正在监听端口' } // Client @@ -79,7 +75,6 @@ function init() { ,bg: 'Пон' ,hr: 'Pon' ,it: 'Lun' - ,ja: '月' ,dk: 'Man' ,fi: 'Ma' ,nb: 'Man' @@ -89,7 +84,6 @@ function init() { ,sk: 'Po' ,nl: 'Ma' ,ko: '월' - ,tr: 'Pzt' ,zh_cn: '一' } ,'Tu' : { @@ -104,7 +98,6 @@ function init() { ,bg: 'Вт' ,hr: 'Ut' ,it: 'Mar' - ,ja: '火' ,dk: 'Tir' ,fi: 'Ti' ,nb: 'Tir' @@ -114,7 +107,6 @@ function init() { ,sk: 'Ut' ,nl: 'Di' ,ko: '화' - ,tr: 'Sal' ,zh_cn: '二' } ,'We' : { @@ -129,7 +121,6 @@ function init() { ,bg: 'Ср' ,hr: 'Sri' ,it: 'Mer' - ,ja: '水' ,dk: 'Ons' ,fi: 'Ke' ,nb: 'Ons' @@ -139,7 +130,6 @@ function init() { ,sk: 'St' ,nl: 'Wo' ,ko: '수' - ,tr: 'Çar' ,zh_cn: '三' } ,'Th' : { @@ -154,7 +144,6 @@ function init() { ,bg: 'Четв' ,hr: 'Čet' ,it: 'Gio' - ,ja: '木' ,dk: 'Tor' ,fi: 'To' ,nb: 'Tor' @@ -164,7 +153,6 @@ function init() { ,sk: 'Št' ,nl: 'Do' ,ko: '목' - ,tr: 'Per' ,zh_cn: '四' } ,'Fr' : { @@ -179,7 +167,6 @@ function init() { ,bg: 'Пет' ,hr: 'Pet' ,it: 'Ven' - ,ja: '金' ,dk: 'Fre' ,fi: 'Pe' ,nb: 'Fre' @@ -189,7 +176,6 @@ function init() { ,sk: 'Pi' ,nl: 'Vr' ,ko: '금' - ,tr: 'Cum' ,zh_cn: '五' } ,'Sa' : { @@ -204,7 +190,6 @@ function init() { ,bg: 'Съб' ,hr: 'Sub' ,it: 'Sab' - ,ja: '土' ,dk: 'Lør' ,fi: 'La' ,nb: 'Lør' @@ -214,7 +199,6 @@ function init() { ,sk: 'So' ,nl: 'Za' ,ko: '토' - ,tr: 'Cmt' ,zh_cn: '六' } ,'Su' : { @@ -229,7 +213,6 @@ function init() { ,bg: 'Нед' ,hr: 'Ned' ,it: 'Dom' - ,ja: '日' ,dk: 'Søn' ,fi: 'Su' ,nb: 'Søn' @@ -239,7 +222,6 @@ function init() { ,sk: 'Ne' ,nl: 'Zo' ,ko: '일' - ,tr: 'Paz' ,zh_cn: '日' } ,'Monday' : { @@ -254,7 +236,6 @@ function init() { ,bg: 'Понеделник' ,hr: 'Ponedjeljak' ,it: 'Lunedì' - ,ja: '月曜日' ,dk: 'Mandag' ,fi: 'Maanantai' ,nb: 'Mandag' @@ -264,7 +245,6 @@ function init() { ,sk: 'Pondelok' ,nl: 'Maandag' ,ko: '월요일' - ,tr: 'Pazartesi' ,zh_cn: '星期一' } ,'Tuesday' : { @@ -279,7 +259,6 @@ function init() { ,hr: 'Utorak' ,sv: 'Tisdag' ,it: 'Martedì' - ,ja: '火曜日' ,dk: 'Tirsdag' ,fi: 'Tiistai' ,nb: 'Tirsdag' @@ -289,7 +268,6 @@ function init() { ,sk: 'Utorok' ,nl: 'Dinsdag' ,ko: '화요일' - ,tr: 'Salı' ,zh_cn: '星期二' } ,'Wednesday' : { @@ -304,7 +282,6 @@ function init() { ,bg: 'Сряда' ,hr: 'Srijeda' ,it: 'Mercoledì' - ,ja: '水曜日' ,dk: 'Onsdag' ,fi: 'Keskiviikko' ,nb: 'Onsdag' @@ -314,7 +291,6 @@ function init() { ,sk: 'Streda' ,nl: 'Woensdag' ,ko: '수요일' - ,tr: 'Çarşamba' ,zh_cn: '星期三' } ,'Thursday' : { @@ -329,7 +305,6 @@ function init() { ,bg: 'Четвъртък' ,hr: 'Četvrtak' ,it: 'Giovedì' - ,ja: '木曜日' ,dk: 'Torsdag' ,fi: 'Torstai' ,nb: 'Torsdag' @@ -339,7 +314,6 @@ function init() { ,sk: 'Štvrtok' ,nl: 'Donderdag' ,ko: '목요일' - ,tr: 'Perşembe' ,zh_cn: '星期四' } ,'Friday' : { @@ -354,7 +328,6 @@ function init() { ,bg: 'Петък' ,hr: 'Petak' ,it: 'Venerdì' - ,ja: '金曜日' ,dk: 'Fredag' ,fi: 'Perjantai' ,nb: 'Fredag' @@ -364,7 +337,6 @@ function init() { ,sk: 'Piatok' ,nl: 'Vrijdag' ,ko: '금요일' - ,tr: 'Cuma' ,zh_cn: '星期五' } ,'Saturday' : { @@ -379,7 +351,6 @@ function init() { ,hr: 'Subota' ,sv: 'Lördag' ,it: 'Sabato' - ,ja: '土曜日' ,dk: 'Lørdag' ,fi: 'Lauantai' ,nb: 'Lørdag' @@ -389,7 +360,6 @@ function init() { ,sk: 'Sobota' ,nl: 'Zaterdag' ,ko: '토요일' - ,tr: 'Cumartesi' ,zh_cn: '星期六' } ,'Sunday' : { @@ -404,7 +374,6 @@ function init() { ,hr: 'Nedjelja' ,sv: 'Söndag' ,it: 'Domenica' - ,ja: '日曜日' ,dk: 'Søndag' ,fi: 'Sunnuntai' ,nb: 'Søndag' @@ -414,7 +383,6 @@ function init() { ,sk: 'Nedeľa' ,nl: 'Zondag' ,ko: '일요일' - ,tr: 'Pazar' ,zh_cn: '星期日' } ,'Category' : { @@ -429,7 +397,6 @@ function init() { ,bg: 'Категория' ,hr: 'Kategorija' ,it:'Categoria' - ,ja: 'カテゴリー' ,dk: 'Kategori' ,fi: 'Luokka' ,nb: 'Kategori' @@ -439,7 +406,6 @@ function init() { ,sk: 'Kategória' ,nl: 'Categorie' ,ko: '분류' - ,tr: 'Kategori' ,zh_cn: '类别' } ,'Subcategory' : { @@ -454,7 +420,6 @@ function init() { ,bg: 'Подкатегория' ,hr: 'Podkategorija' ,it: 'Sottocategoria' - ,ja: 'サブカテゴリー' ,dk: 'Underkategori' ,fi: 'Alaluokka' ,nb: 'Underkategori' @@ -464,7 +429,6 @@ function init() { ,sk: 'Podkategória' ,nl: 'Subcategorie' ,ko: '세부 분류' - ,tr: 'Altkategori' ,zh_cn: '子类别' } ,'Name' : { @@ -479,7 +443,6 @@ function init() { ,bg: 'Име' ,hr: 'Ime' ,it: 'Nome' - ,ja: '名前' ,dk: 'Navn' ,fi: 'Nimi' ,nb: 'Navn' @@ -489,7 +452,6 @@ function init() { ,sk: 'Meno' ,nl: 'Naam' ,ko: '이름' - ,tr: 'İsim' ,zh_cn: '名称' } ,'Today' : { @@ -504,7 +466,6 @@ function init() { ,hr: 'Danas' ,sv: 'Idag' ,it: 'Oggi' - ,ja: '今日' ,dk: 'I dag' ,fi: 'Tänään' ,nb: 'Idag' @@ -514,7 +475,6 @@ function init() { ,sk: 'Dnes' ,nl: 'Vandaag' ,ko: '오늘' - ,tr: 'Bugün' ,zh_cn: '今天' } ,'Last 2 days' : { @@ -529,7 +489,6 @@ function init() { ,hr: 'Posljednja 2 dana' ,sv: 'Senaste 2 dagarna' ,it: 'Ultimi 2 giorni' - ,ja: '直近の2日間' ,dk: 'Sidste 2 dage' ,fi: 'Edelliset 2 päivää' ,nb: 'Siste 2 dager' @@ -539,7 +498,6 @@ function init() { ,sk: 'Posledné 2 dni' ,nl: 'Afgelopen 2 dagen' ,ko: '지난 2일' - ,tr: 'Son 2 gün' ,zh_cn: '过去2天' } ,'Last 3 days' : { @@ -554,7 +512,6 @@ function init() { ,bg: 'Последните 3 дни' ,hr: 'Posljednja 3 dana' ,it: 'Ultimi 3 giorni' - ,ja: '直近の3日間' ,dk: 'Sidste 3 dage' ,fi: 'Edelliset 3 päivää' ,nb: 'Siste 3 dager' @@ -564,7 +521,6 @@ function init() { ,sk: 'Posledné 3 dni' ,nl: 'Afgelopen 3 dagen' ,ko: '지난 3일' - ,tr: 'Son 3 gün' ,zh_cn: '过去3天' } ,'Last week' : { @@ -579,7 +535,6 @@ function init() { ,hr: 'Protekli tjedan' ,sv: 'Senaste veckan' ,it: 'Settimana scorsa' - ,ja: '直近の1週間' ,dk: 'Sidste uge' ,fi: 'Viime viikko' ,nb: 'Siste uke' @@ -589,7 +544,6 @@ function init() { ,sk: 'Posledný týždeň' ,nl: 'Afgelopen week' ,ko: '지난주' - ,tr: 'Geçen Hafta' ,zh_cn: '上周' } ,'Last 2 weeks' : { @@ -604,7 +558,6 @@ function init() { ,hr: 'Protekla 2 tjedna' ,sv: 'Senaste 2 veckorna' ,it: 'Ultime 2 settimane' - ,ja: '直近の2週間' ,dk: 'Sidste 2 uger' ,fi: 'Viimeiset 2 viikkoa' ,nb: 'Siste 2 uker' @@ -614,7 +567,6 @@ function init() { ,sk: 'Posledné 2 týždne' ,nl: 'Afgelopen 2 weken' ,ko: '지난 2주' - ,tr: 'Son 2 hafta' ,zh_cn: '过去2周' } ,'Last month' : { @@ -629,7 +581,6 @@ function init() { ,hr: 'Protekli mjesec' ,sv: 'Senaste månaden' ,it: 'Mese scorso' - ,ja: '直近の1ヶ月' ,dk: 'Sidste måned' ,fi: 'Viime kuu' ,nb: 'Siste måned' @@ -639,7 +590,6 @@ function init() { ,sk: 'Posledný mesiac' ,nl: 'Afgelopen maand' ,ko: '지난달' - ,tr: 'Geçen Ay' ,zh_cn: '上个月' } ,'Last 3 months' : { @@ -654,7 +604,6 @@ function init() { ,hr: 'Protekla 3 mjeseca' ,sv: 'Senaste 3 månaderna' ,it: 'Ultimi 3 mesi' - ,ja: '直近の3ヶ月' ,dk: 'Sidste 3 måneder' ,fi: 'Viimeiset 3 kuukautta' ,nb: 'Siste 3 måneder' @@ -664,7 +613,6 @@ function init() { ,sk: 'Posledné 3 mesiace' ,nl: 'Afgelopen 3 maanden' ,ko: '지난 3달' - ,tr: 'Son 3 ay' ,zh_cn: '过去3个月' } ,'From' : { @@ -679,7 +627,6 @@ function init() { ,bg: 'От' ,hr: 'Od' ,it: 'Da' - ,ja: '開始日' ,dk: 'Fra' ,fi: 'Alkaen' ,nb: 'Fra' @@ -689,7 +636,6 @@ function init() { ,sk: 'Od' ,nl: 'Van' ,ko: '시작일' - ,tr: 'Başlangıç' ,zh_cn: '从' } ,'To' : { @@ -704,7 +650,6 @@ function init() { ,hr: 'Do' ,sv: 'Till' ,it: 'A' - ,ja: '終了日' ,dk: 'Til' ,fi: 'Asti' ,nb: 'Til' @@ -714,7 +659,6 @@ function init() { ,sk: 'Do' ,nl: 'Tot' ,ko: '종료일' - ,tr: 'Bitiş' ,zh_cn: '到' } ,'Notes' : { @@ -729,7 +673,6 @@ function init() { ,bg: 'Бележки' ,hr: 'Bilješke' ,it: 'Note' - ,ja: 'メモ' ,dk: 'Noter' ,fi: 'Merkinnät' ,nb: 'Notater' @@ -739,7 +682,6 @@ function init() { ,sk: 'Poznámky' ,nl: 'Notities' ,ko: '메모' - ,tr: 'Not' ,zh_cn: '记录' } ,'Food' : { @@ -754,7 +696,6 @@ function init() { ,bg: 'Храна' ,hr: 'Hrana' ,it: 'Cibo' - ,ja: '食事' ,dk: 'Mad' ,fi: 'Ruoka' ,nb: 'Mat' @@ -764,7 +705,6 @@ function init() { ,sk: 'Jedlo' ,nl: 'Voeding' ,ko: '음식' - ,tr: 'Gıda' ,zh_cn: '食物' } ,'Insulin' : { @@ -779,7 +719,6 @@ function init() { ,hr: 'Inzulin' ,sv: 'Insulin' ,it: 'Insulina' - ,ja: 'インスリン' ,dk: 'Insulin' ,fi: 'Insuliini' ,nb: 'Insulin' @@ -789,7 +728,6 @@ function init() { ,sk: 'Inzulín' ,nl: 'Insuline' ,ko: '인슐린' - ,tr: 'İnsülin' ,zh_cn: '胰岛素' } ,'Carbs' : { @@ -804,7 +742,6 @@ function init() { ,hr: 'Ugljikohidrati' ,sv: 'Kolhydrater' ,it: 'Carboidrati' - ,ja: '炭水化物' ,dk: 'Kulhydrater' ,fi: 'Hiilihydraatit' ,nb: 'Karbohydrater' @@ -814,7 +751,6 @@ function init() { ,sk: 'Sacharidy' ,nl: 'Koolhydraten' ,ko: '탄수화물' - ,tr: 'Karbonhidrat' ,zh_cn: '碳水化合物' } ,'Notes contain' : { @@ -830,7 +766,6 @@ function init() { ,hr: 'Sadržaj bilješki' ,sv: 'Notering innehåller' ,it: 'Contiene note' - ,ja: 'メモ内容' ,dk: 'Noter indeholder' ,fi: 'Merkinnät sisältävät' ,nb: 'Notater inneholder' @@ -840,7 +775,6 @@ function init() { ,sk: 'Poznámky obsahujú' ,nl: 'Inhoud aantekening' ,ko: '메모 포함' - ,tr: 'Notlar içerir' ,zh_cn: '记录包括' } ,'Target bg range bottom' : { @@ -855,7 +789,6 @@ function init() { ,hr: 'Ciljna donja granica GUK-a' ,sv: 'Gräns för nedre blodsockervärde' ,it: 'Limite inferiore della glicemia' - ,ja: '目標血糖値 下限' ,dk: 'Nedre grænse for blodsukkerværdier' ,fi: 'Tavoitealueen alaraja' ,nb: 'Nedre grense for blodsukkerverdier' @@ -865,7 +798,6 @@ function init() { ,sk: 'Cieľová glykémia spodná' ,nl: 'Ondergrens doelbereik glucose' ,ko: '최저 목표 혈당 범위' - ,tr: 'Hedef KŞ aralığı düşük' ,zh_cn: '目标血糖范围 下限' } ,'top' : { @@ -880,7 +812,6 @@ function init() { ,hr: 'Gornja' ,sv: 'Toppen' ,it: 'Superiore' - ,ja: '上限' ,dk: 'Top' ,fi: 'yläraja' ,nb: 'Topp' @@ -890,7 +821,6 @@ function init() { ,sk: 'horná' ,nl: 'Top' ,ko: '최고치' - ,tr: 'Üstü' ,zh_cn: '上限' } ,'Show' : { @@ -905,7 +835,6 @@ function init() { ,bg: 'Покажи' ,hr: 'Prikaži' ,it: 'Mostra' - ,ja: '作成' ,dk: 'Vis' ,fi: 'Näytä' ,nb: 'Vis' @@ -915,7 +844,6 @@ function init() { ,sk: 'Ukáž' ,nl: 'Laat zien' ,ko: '보여 주세요~' - ,tr: 'Göster' ,zh_cn: '生成' } ,'Display' : { @@ -930,7 +858,6 @@ function init() { ,hr: 'Prikaži' ,sv: 'Visa' ,it: 'Schermo' - ,ja: '表示' ,dk: 'Vis' ,fi: 'Näyttö' ,nb: 'Vis' @@ -940,7 +867,6 @@ function init() { ,sk: 'Zobraz' ,nl: 'Weergeven' ,ko: '출력' - ,tr: 'Görüntüle' ,zh_cn: '显示' } ,'Loading' : { @@ -955,7 +881,6 @@ function init() { ,hr: 'Učitavanje' ,sv: 'Laddar' ,it: 'Carico' - ,ja: 'ロード中' ,dk: 'Indlæser' ,fi: 'Lataan' ,nb: 'Laster' @@ -965,7 +890,6 @@ function init() { ,sk: 'Nahrávam' ,nl: 'Laden' ,ko: '로딩' - ,tr: 'Yükleniyor' ,zh_cn: '载入中' } ,'Loading profile' : { @@ -980,7 +904,6 @@ function init() { ,bg: 'Зареждане на профил' ,hr: 'Učitavanje profila' ,it: 'Carico il profilo' - ,ja: 'プロフィールロード中' ,dk: 'Indlæser profil' ,fi: 'Lataan profiilia' ,nb: 'Leser profil' @@ -990,7 +913,6 @@ function init() { ,sk: 'Nahrávam profil' ,nl: 'Profiel laden' ,ko: '프로파일 로딩' - ,tr: 'Profil yükleniyor' ,zh_cn: '载入配置文件' } ,'Loading status' : { @@ -1005,7 +927,6 @@ function init() { ,bg: 'Зареждане на статус' ,hr: 'Učitavanje statusa' ,it: 'Stato di caricamento' - ,ja: 'ステータスロード中' ,dk: 'Indlæsnings status' ,fi: 'Lataan tilaa' ,nb: 'Leser status' @@ -1015,7 +936,6 @@ function init() { ,sk: 'Nahrávam status' ,nl: 'Laadstatus' ,ko: '상태 로딩' - ,tr: 'Durum Yükleniyor' ,zh_cn: '载入状态' } ,'Loading food database' : { @@ -1030,7 +950,6 @@ function init() { ,bg: 'Зареждане на данни с храни' ,hr: 'Učitavanje baze podataka o hrani' ,it: 'Carico database alimenti' - ,ja: '食事データベースロード中' ,dk: 'Indlæser mad database' ,fi: 'Lataan ruokatietokantaa' ,nb: 'Leser matdatabase' @@ -1040,7 +959,6 @@ function init() { ,sk: 'Nahrávam databázu jedál' ,nl: 'Voeding database laden' ,ko: '음식 데이터 베이스 로딩' - ,tr: 'Gıda veritabanı yükleniyor' ,zh_cn: '载入食物数据库' } ,'not displayed' : { @@ -1055,7 +973,6 @@ function init() { ,hr: 'Ne prikazuje se' ,sv: 'Visas ej' ,it: 'Non visualizzato' - ,ja: '表示できません' ,dk: 'Vises ikke' ,fi: 'ei näytetä' ,nb: 'Vises ikke' @@ -1065,7 +982,6 @@ function init() { ,sk: 'Nie je zobrazené' ,nl: 'Niet weergegeven' ,ko: '출력되지 않음' - ,tr: 'görüntülenmedi' ,zh_cn: '未显示' } ,'Loading CGM data of' : { @@ -1080,7 +996,6 @@ function init() { ,bg: 'Зареждане на CGM данни от' ,hr: 'Učitavanja podataka CGM-a' ,it: 'Carico dati CGM' - ,ja: 'CGMデータロード中' ,dk: 'Indlæser CGM-data for' ,fi: 'Lataan sensoritietoja: ' ,nb: 'Leser CGM-data for' @@ -1090,7 +1005,6 @@ function init() { ,sk: 'Nahrávam CGM dáta' ,nl: 'CGM data laden van' ,ko: 'CGM 데이터 로딩' - ,tr: 'den CGM veriler yükleniyor' ,zh_cn: '载入CGM(连续血糖监测)数据从' } ,'Loading treatments data of' : { @@ -1105,7 +1019,6 @@ function init() { ,bg: 'Зареждане на въведените лечения от' ,hr: 'Učitavanje podataka o tretmanu' ,it: 'Carico dati dei trattamenti' - ,ja: '治療データロード中' ,dk: 'Indlæser behandlingsdata for' ,fi: 'Lataan toimenpidetietoja: ' ,nb: 'Leser behandlingsdata for' @@ -1115,7 +1028,6 @@ function init() { ,sk: 'Nahrávam dáta ošetrenia' ,nl: 'Behandel gegevens laden van' ,ko: '처리 데이터 로딩' - ,tr: 'dan Tedavi verilerini yükle' ,zh_cn: '载入操作数据从' } ,'Processing data of' : { @@ -1130,7 +1042,6 @@ function init() { ,bg: 'Зареждане на данни от' ,hr: 'Obrada podataka' ,it: 'Elaborazione dei dati' - ,ja: 'データ処理中の日付:' ,dk: 'Behandler data for' ,fi: 'Käsittelen tietoja: ' ,nb: 'Behandler data for' @@ -1140,7 +1051,6 @@ function init() { ,sk: 'Spracovávam dáta' ,nl: 'Gegevens verwerken van' ,ko: '데이터 처리 중' - ,tr: 'dan Veri işleme' ,zh_cn: '处理数据从' } ,'Portion' : { @@ -1155,7 +1065,6 @@ function init() { ,hr: 'Dio' ,sv: 'Portion' ,it: 'Porzione' - ,ja: '一食分' ,dk: 'Portion' ,fi: 'Annos' ,nb: 'Porsjon' @@ -1165,7 +1074,6 @@ function init() { ,sk: 'Porcia' ,nl: 'Portie' ,ko: '부분' - ,tr: 'Porsiyon' ,zh_cn: '部分' } ,'Size' : { @@ -1180,7 +1088,6 @@ function init() { ,bg: 'Големина' ,hr: 'Veličina' ,it: 'Formato' - ,ja: '量' ,dk: 'Størrelse' ,fi: 'Koko' ,nb: 'Størrelse' @@ -1190,7 +1097,6 @@ function init() { ,sk: 'Veľkosť' ,nl: 'Grootte' ,ko: '크기' - ,tr: 'Boyut' ,zh_cn: '大小' } ,'(none)' : { @@ -1205,7 +1111,6 @@ function init() { ,bg: '(няма)' ,hr: '(Prazno)' ,it: '(Nessuno)' - ,ja: '(データなし)' ,dk: '(ingen)' ,fi: '(tyhjä)' ,nb: '(ingen)' @@ -1215,7 +1120,6 @@ function init() { ,sk: '(žiadny)' ,nl: '(geen)' ,ko: '(없음)' - ,tr: '(hiç)' ,zh_cn: '(无)' ,zh_tw: '(無)' } @@ -1231,7 +1135,6 @@ function init() { ,bg: 'няма' ,hr: 'Prazno' ,it: 'Nessuno' - ,ja: 'データなし' ,dk: 'Ingen' ,fi: 'tyhjä' ,nb: 'ingen' @@ -1241,7 +1144,6 @@ function init() { ,sk: 'Žiadny' ,nl: 'geen' ,ko: '없음' - ,tr: 'Hiç' ,zh_cn: '无' ,zh_tw: '無' } @@ -1257,7 +1159,6 @@ function init() { ,bg: '<няма>' ,hr: '' ,it: '' - ,ja: '<データなし>' ,dk: '' ,fi: '' ,nb: '' @@ -1267,7 +1168,6 @@ function init() { ,sk: '<žiadny>' ,nl: '' ,ko: '<없음>' - ,tr: '' ,zh_cn: '<无>' } ,'Result is empty' : { @@ -1282,7 +1182,6 @@ function init() { ,bg: 'Няма резултат' ,hr: 'Prazan rezultat' ,it: 'Risultato vuoto' - ,ja: '結果がありません' ,dk: 'Tomt resultat' ,fi: 'Ei tuloksia' ,nb: 'Tomt resultat' @@ -1292,7 +1191,6 @@ function init() { ,sk: 'Prázdny výsledok' ,nl: 'Geen resultaat' ,ko: '결과 없음' - ,tr: 'Sonuç boş' ,zh_cn: '结果为空' } ,'Day to day' : { @@ -1307,7 +1205,6 @@ function init() { ,bg: 'Ден за ден' ,hr: 'Svakodnevno' ,it: 'Giorno per giorno' - ,ja: '日差' ,dk: 'Dag til dag' ,fi: 'Päivittäinen' ,nb: 'Dag til dag' @@ -1317,32 +1214,8 @@ function init() { ,sk: 'Deň po dni' ,nl: 'Dag tot Dag' ,ko: '날짜' - ,tr: 'Günden Güne' ,zh_cn: '日到日' } - ,'Week to week' : { - cs: 'Week to week' - ,de: 'Week to week' - ,es: 'Week to week' - ,fr: 'Week to week' - ,el: 'Week to week' - ,pt: 'Week to week' - ,sv: 'Week to week' - ,ro: 'Week to week' - ,bg: 'Week to week' - ,hr: 'Week to week' - ,it: 'Week to week' - ,dk: 'Week to week' - ,fi: 'Week to week' - ,nb: 'Week to week' - ,he: 'Week to week' - ,pl: 'Week to week' - ,ru: 'Week to week' - ,sk: 'Week to week' - ,nl: 'Week to week' - ,ko: 'Week to week' - ,zh_cn: 'Week to week' - } ,'Daily Stats' : { cs: 'Denní statistiky' ,de: 'Tägliche Statistik' @@ -1355,7 +1228,6 @@ function init() { ,bg: 'Дневна статистика' ,hr: 'Dnevna statistika' ,it: 'Statistiche giornaliere' - ,ja: '1日統計' ,dk: 'Daglig statistik' ,fi: 'Päivittäiset tilastot' ,nb: 'Daglig statistikk' @@ -1365,7 +1237,6 @@ function init() { ,sk: 'Denné štatistiky' ,nl: 'Dagelijkse statistiek' ,ko: '날짜 통계' - ,tr: 'Günlük İstatistikler' ,zh_cn: '每日状态' } ,'Percentile Chart' : { @@ -1380,7 +1251,6 @@ function init() { ,hr: 'Tablica u postotcima' ,sv: 'Procentgraf' ,it: 'Grafico percentile' - ,ja: 'パーセント図' ,dk: 'Procentgraf' ,fi: 'Suhteellinen kuvaaja' ,nb: 'Prosentgraf' @@ -1390,7 +1260,6 @@ function init() { ,sk: 'Percentil' ,nl: 'Procentuele grafiek' ,ko: '백분위 그래프' - ,tr: 'Yüzdelik Grafiği' ,zh_cn: '百分位图形' } ,'Distribution' : { @@ -1405,7 +1274,6 @@ function init() { ,hr: 'Distribucija' ,sv: 'Distribution' ,it: 'Distribuzione' - ,ja: '配分' ,dk: 'Distribution' ,fi: 'Jakauma' ,nb: 'Distribusjon' @@ -1415,7 +1283,6 @@ function init() { ,sk: 'Distribúcia' ,nl: 'Verdeling' ,ko: '분포' - ,tr: 'Dağılım' ,zh_cn: '分布' } ,'Hourly stats' : { @@ -1430,7 +1297,6 @@ function init() { ,bg: 'Статистика по часове' ,hr: 'Statistika po satu' ,it: 'Statistiche per ore' - ,ja: '1時間統計' ,dk: 'Timestatistik' ,fi: 'Tunneittainen tilasto' ,nb: 'Timestatistikk' @@ -1440,19 +1306,15 @@ function init() { ,sk: 'Hodinové štatistiky' ,nl: 'Statistieken per uur' ,ko: '시간 통계' - ,tr: 'Saatlik istatistikler' ,zh_cn: '每小时状态' } ,'netIOB stats': { // hourlystats.js nl: 'netIOB stats' ,sv: 'netIOB statistik' - ,dk: 'netIOB statistik' ,he: 'netIOB סטטיסטיקת' ,de: 'netIOB Statistiken' ,fi: 'netIOB tilasto' ,bg: 'netIOB татистика' - ,ru: 'статистика netIOB' - ,tr: 'netIOB istatistikleri' } ,'temp basals must be rendered to display this report': { //hourlystats.js nl: 'tijdelijk basaal moet zichtbaar zijn voor dit rapport' @@ -1462,8 +1324,6 @@ function init() { ,he: 'חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה' ,bg: 'временните базали трябва да са показани за да се покаже тази това' ,he: 'חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה' - ,ru: 'Для этого отчета требуется показать данные о врем базалах' - ,tr: 'Bu raporu görüntülemek için geçici bazal oluşturulmalıdır' } ,'Weekly success' : { cs: 'Statistika po týdnech' @@ -1478,7 +1338,6 @@ function init() { ,hr: 'Tjedni uspjeh' ,sv: 'Veckoresultat' ,it: 'Statistiche settimanali' - ,ja: '1週間統計' ,dk: 'Uge resultat' ,fi: 'Viikkotilasto' ,he: 'הצלחה שבועית' @@ -1488,7 +1347,6 @@ function init() { ,sk: 'Týždenná úspešnosť' ,nl: 'Wekelijkse successen' ,ko: '주간 통계' - ,tr: 'Haftalık başarı' ,zh_cn: '每周统计' } ,'No data available' : { @@ -1503,7 +1361,6 @@ function init() { ,hr: 'Nema raspoloživih podataka' ,sv: 'Data saknas' ,it: 'Dati non disponibili' - ,ja: '利用できるデータがありません' ,dk: 'Mangler data' ,fi: 'Tietoja ei saatavilla' ,nb: 'Mangler data' @@ -1513,7 +1370,6 @@ function init() { ,sk: 'Žiadne dostupné dáta' ,nl: 'Geen gegevens beschikbaar' ,ko: '활용할 수 있는 데이터 없음' - ,tr: 'Veri yok' ,zh_cn: '无可用数据' } ,'Low' : { @@ -1528,7 +1384,6 @@ function init() { ,bg: 'Ниска' ,hr: 'Nizak' ,it: 'Basso' - ,ja: '目標血糖値低値' ,dk: 'Lav' ,fi: 'Matala' ,nb: 'Lav' @@ -1538,7 +1393,6 @@ function init() { ,sk: 'Nízka' ,nl: 'Laag' ,ko: '낮음' - ,tr: 'Düşük' ,zh_cn: '低血糖' } ,'In Range' : { @@ -1553,7 +1407,6 @@ function init() { ,bg: 'В граници' ,hr: 'U rasponu' ,it: 'Nell\'intervallo' - ,ja: '目標血糖値範囲内' ,dk: 'Indenfor intervallet' ,fi: 'Tavoitealueella' ,nb: 'Innenfor intervallet' @@ -1563,7 +1416,6 @@ function init() { ,sk: 'V rozsahu' ,nl: 'Binnen bereik' ,ko: '범위 안 ' - ,tr: 'Hedef alanında' ,zh_cn: '范围内' } ,'Period' : { @@ -1578,7 +1430,6 @@ function init() { ,bg: 'Период' ,hr: 'Period' ,it: 'Periodo' - ,ja: '期間' ,dk: 'Periode' ,fi: 'Aikaväli' ,nb: 'Periode' @@ -1588,7 +1439,6 @@ function init() { ,sk: 'Obdobie' ,nl: 'Periode' ,ko: '기간 ' - ,tr: 'Periyot' ,zh_cn: '期间' } ,'High' : { @@ -1603,7 +1453,6 @@ function init() { ,bg: 'Висока' ,hr: 'Visok' ,it: 'Alto' - ,ja: '目標血糖値高値' ,dk: 'Høj' ,fi: 'Korkea' ,nb: 'Høy' @@ -1613,7 +1462,6 @@ function init() { ,sk: 'Vysoká' ,nl: 'Hoog' ,ko: '높음' - ,tr: 'Yüksek' ,zh_cn: '高血糖' } ,'Average' : { @@ -1628,7 +1476,6 @@ function init() { ,bg: 'Средна' ,hr: 'Prosjek' ,it: 'Media' - ,ja: '平均値' ,dk: 'Gennemsnit' ,fi: 'Keskiarvo' ,nb: 'Gjennomsnitt' @@ -1638,7 +1485,6 @@ function init() { ,sk: 'Priemer' ,nl: 'Gemiddeld' ,ko: '평균' - ,tr: 'Ortalama' ,zh_cn: '平均' } ,'Low Quartile' : { @@ -1653,7 +1499,6 @@ function init() { ,hr: 'Donji kvartil' ,sv: 'Nedre kvadranten' ,it: 'Quartile basso' - ,ja: '下四分位値' ,dk: 'Nedre kvartil' ,fi: 'Alin neljäsosa' ,nb: 'Nedre kvartil' @@ -1663,7 +1508,6 @@ function init() { ,sk: 'Nizky kvartil' ,nl: 'Eerste kwartiel' ,ko: '낮은 4분위' - ,tr: 'Alt Çeyrek' ,zh_cn: '下四分位数' } ,'Upper Quartile' : { @@ -1678,7 +1522,6 @@ function init() { ,hr: 'Gornji kvartil' ,sv: 'Övre kvadranten' ,it: 'Quartile alto' - ,ja: '高四分位値' ,dk: 'Øvre kvartil' ,fi: 'Ylin neljäsosa' ,nb: 'Øvre kvartil' @@ -1688,7 +1531,6 @@ function init() { ,sk: 'Vysoký kvartil' ,nl: 'Derde kwartiel' ,ko: '높은 4분위' - ,tr: 'Üst Çeyrek' ,zh_cn: '上四分位数' } ,'Quartile' : { @@ -1703,7 +1545,6 @@ function init() { ,hr: 'Kvartil' ,sv: 'Kvadrant' ,it: 'Quartile' - ,ja: '四分位値' ,dk: 'Kvartil' ,fi: 'Neljäsosa' ,nb: 'Kvartil' @@ -1713,7 +1554,6 @@ function init() { ,sk: 'Kvartil' ,nl: 'Kwartiel' ,ko: '4분위' - ,tr: 'Çeyrek' ,zh_cn: '四分位数' } ,'Date' : { @@ -1728,7 +1568,6 @@ function init() { ,bg: 'Дата' ,hr: 'Datum' ,it: 'Data' - ,ja: '日付' ,dk: 'Dato' ,fi: 'Päivämäärä' ,nb: 'Dato' @@ -1738,7 +1577,6 @@ function init() { ,sk: 'Dátum' ,nl: 'Datum' ,ko: '날짜' - ,tr: 'Tarih' ,zh_cn: '日期' } ,'Normal' : { @@ -1754,7 +1592,6 @@ function init() { ,bg: 'Нормалнa' ,hr: 'Normalno' ,it: 'Normale' - ,ja: '通常' ,dk: 'Normal' ,fi: 'Normaali' ,nb: 'Normal' @@ -1764,7 +1601,6 @@ function init() { ,sk: 'Normálny' ,nl: 'Normaal' ,ko: '보통' - ,tr: 'Normal' ,zh_cn: '正常' } ,'Median' : { @@ -1779,7 +1615,6 @@ function init() { ,hr: 'Srednje' ,sv: 'Median' ,it: 'Mediana' - ,ja: '中央値' ,dk: 'Median' ,fi: 'Mediaani' ,nb: 'Median' @@ -1789,7 +1624,6 @@ function init() { ,sk: 'Medián' ,nl: 'Mediaan' ,ko: '중간값' - ,tr: 'Orta Değer' ,zh_cn: '中值' } ,'Readings' : { @@ -1804,8 +1638,7 @@ function init() { ,bg: 'Измервания' ,hr: 'Vrijednosti' ,it: 'Valori' - ,ja: '読み込み' - ,dk: 'Aflæsninger' + ,dk: 'Aflæsning' ,fi: 'Lukemia' ,nb: 'Avlesning' ,he: 'קריאות' @@ -1814,7 +1647,6 @@ function init() { ,sk: 'Záznamy' ,nl: 'Metingen' ,ko: '혈당' - ,tr: 'Ölçüm' ,zh_cn: '读数' } ,'StDev' : { @@ -1829,7 +1661,6 @@ function init() { ,bg: 'Стандартно отклонение' ,hr: 'Standardna devijacija' ,it: 'Dev.std' - ,ja: '標準偏差' ,dk: 'Standard afvigelse' ,fi: 'Keskijakauma' ,nb: 'Standardavvik' @@ -1839,7 +1670,6 @@ function init() { ,ru: 'Стандартное отклонение' ,sk: 'Štand. odch.' ,ko: '표준 편차' - ,tr: 'Standart Sapma' ,zh_cn: '标准偏差' } ,'Daily stats report' : { @@ -1854,17 +1684,15 @@ function init() { ,hr: 'Izvješće o dnevnim statistikama' ,sv: 'Dygnsstatistik' ,it: 'Statistiche giornaliere' - ,ja: '1日ごとの統計のレポート' ,dk: 'Daglig statistik rapport' ,fi: 'Päivittäinen tilasto' ,nb: 'Daglig statistikkrapport' ,he: 'דוח סטטיסטיקה יומית' ,pl: 'Dzienne statystyki' - ,ru: 'Суточная статистика' + ,ru: 'Статистика дня' ,sk: 'Denné štatistiky' ,nl: 'Dagelijkse statistieken' ,ko: '날짜 통계 보고서' - ,tr: 'Günlük istatistikler raporu' ,zh_cn: '每日状态报表' } ,'Glucose Percentile report' : { @@ -1880,7 +1708,6 @@ function init() { ,bg: 'Графика на КЗ' ,hr: 'Izvješće o postotku GUK-a' ,it: 'Percentuale Glicemie' - ,ja: 'グルコース(%)レポート' ,dk: 'Glukoserapport i procent' ,fi: 'Verensokeriarvojen jakauma' ,nb: 'Glukoserapport i prosent' @@ -1890,7 +1717,6 @@ function init() { ,sk: 'Report percentilu glykémií' ,nl: 'Glucose percentiel rapport' ,ko: '혈당 백분위 보고서' - ,tr: 'Glikoz Yüzdelik raporu' ,zh_cn: '血糖百分位报表' } ,'Glucose distribution' : { @@ -1905,7 +1731,6 @@ function init() { ,hr: 'Distribucija GUK-a' ,sv: 'Glukosdistribution' ,it: 'Distribuzione glicemie' - ,ja: '血糖値の分布' ,dk: 'Glukosefordeling' ,fi: 'Glukoosijakauma' ,nb: 'Glukosefordeling' @@ -1915,7 +1740,6 @@ function init() { ,sk: 'Rozloženie glykémie' ,nl: 'Glucose verdeling' ,ko: '혈당 분포' - ,tr: 'Glikoz dağılımı' ,zh_cn: '血糖分布' } ,'days total' : { @@ -1930,7 +1754,6 @@ function init() { ,bg: 'общо за деня' ,hr: 'ukupno dana' ,it: 'Giorni totali' - ,ja: '合計日数' ,dk: 'antal dage' ,fi: 'päivän arvio' ,nb: 'antall dager' @@ -1940,7 +1763,6 @@ function init() { ,sk: 'dní celkom' ,nl: 'Totaal dagen' ,ko: '날짜 전체' - ,tr: 'toplam gün' ,zh_cn: '天总计' } ,'Total per day' : { @@ -1960,11 +1782,10 @@ function init() { ,nb: 'antall dager' ,he: 'מספר ימים' ,pl: 'dni łącznie' - ,ru: 'всего за сутки' + ,ru: 'всего дней' ,sk: 'dní celkom' ,nl: 'Totaal dagen' ,ko: '날짜 전체' - ,tr: 'Günlük toplam' ,zh_cn: '天总计' } ,'Overall' : { @@ -1979,8 +1800,7 @@ function init() { ,bg: 'Общо' ,hr: 'Ukupno' ,it: 'Generale' - ,ja: '総合' - ,dk: 'Gennemsnit' + ,dk: 'Overall' ,fi: 'Yhteenveto' ,nb: 'Generelt' ,he: 'סך הכל' @@ -1989,7 +1809,6 @@ function init() { ,sk: 'Súhrn' ,nl: 'Totaal' ,ko: '전체' - ,tr: 'Tüm' ,zh_cn: '概览' } ,'Range' : { @@ -2004,7 +1823,6 @@ function init() { ,bg: 'Диапазон' ,hr: 'Raspon' ,it: 'Intervallo' - ,ja: '範囲' ,dk: 'Interval' ,fi: 'Alue' ,nb: 'Intervall' @@ -2014,7 +1832,6 @@ function init() { ,sk: 'Rozsah' ,nl: 'Bereik' ,ko: '범위' - ,tr: 'Alan' ,zh_cn: '范围' } ,'% of Readings' : { @@ -2029,7 +1846,6 @@ function init() { ,bg: '% от измервания' ,hr: '% očitanja' ,it: '% dei valori' - ,ja: '%精度' ,dk: '% af aflæsningerne' ,fi: '% lukemista' ,nb: '% af avlesningene' @@ -2039,7 +1855,6 @@ function init() { ,sk: '% záznamov' ,nl: '% metingen' ,ko: '% 읽는 중' - ,tr: '% Okumaların' ,zh_cn: '%已读取' } ,'# of Readings' : { @@ -2054,17 +1869,15 @@ function init() { ,bg: '№ от измервания' ,hr: 'broj očitanja' ,it: '# di valori' - ,ja: '#精度' - ,dk: 'Antal aflæsninger' + ,dk: 'Antal af aflæsninger' ,fi: 'Lukemien määrä' ,nb: 'Antall avlesninger' ,he: 'מספר קריאות' ,pl: 'Ilość Odczytów' - ,ru: 'кол-во измерений' + ,ru: '№ измерения' ,sk: 'Počet záznamov' ,nl: 'Aantal metingen' ,ko: '# 읽는 중' - ,tr: '# Okumaların' ,zh_cn: '#已读取' } ,'Mean' : { @@ -2079,7 +1892,6 @@ function init() { ,bg: 'Средна стойност' ,hr: 'Prosjek' ,it: 'Media' - ,ja: '意味' ,dk: 'Gennemsnit' ,fi: 'Keskiarvo' ,nb: 'Gjennomsnitt' @@ -2089,7 +1901,6 @@ function init() { ,sk: 'Stred' ,nl: 'Gemiddeld' ,ko: '평균' - ,tr: 'ortalama' ,zh_cn: '平均' } ,'Standard Deviation' : { @@ -2104,7 +1915,6 @@ function init() { ,hr: 'Standardna devijacija' ,sv: 'Standardavvikelse' ,it: 'Deviazione Standard' - ,ja: '標準偏差' ,dk: 'Standardafvigelse' ,fi: 'Keskijakauma' ,nb: 'Standardavvik' @@ -2114,7 +1924,6 @@ function init() { ,sk: 'Štandardná odchylka' ,nl: 'Standaard deviatie' ,ko: '표준 편차' - ,tr: 'Standart Sapma' ,zh_cn: '标准偏差' } ,'Max' : { @@ -2129,7 +1938,6 @@ function init() { ,bg: 'Макс.' ,hr: 'Max' ,it: 'Max' - ,ja: '最大値' ,dk: 'Max' ,fi: 'Maks' ,nb: 'Max' @@ -2139,7 +1947,6 @@ function init() { ,sk: 'Max' ,nl: 'Max' ,ko: '최대값' - ,tr: 'Max' ,zh_cn: '最大值' } ,'Min' : { @@ -2154,7 +1961,6 @@ function init() { ,bg: 'Мин.' ,hr: 'Min' ,it: 'Min' - ,ja: '最小値' ,dk: 'Min' ,fi: 'Min' ,nb: 'Min' @@ -2164,7 +1970,6 @@ function init() { ,sk: 'Min' ,nl: 'Min' ,ko: '최소값' - ,tr: 'Min' ,zh_cn: '最小值' } ,'A1c estimation*' : { @@ -2179,7 +1984,6 @@ function init() { ,hr: 'Procjena HbA1c-a' ,sv: 'Beräknat A1c-värde ' ,it: 'Stima A1c' - ,ja: '予想HbA1c' ,dk: 'Beregnet A1c-værdi ' ,fi: 'A1c arvio*' ,nb: 'Beregnet HbA1c' @@ -2189,7 +1993,6 @@ function init() { ,sk: 'Odhadované HbA1C*' ,nl: 'Geschatte HbA1C' ,ko: '예상 당화혈 색소' - ,tr: 'Tahmini A1c *' ,zh_cn: '糖化血红蛋白估算' } ,'Weekly Success' : { @@ -2205,7 +2008,6 @@ function init() { ,hr: 'Tjedni uspjeh' ,sv: 'Veckoresultat' ,it: 'Risultati settimanali' - ,ja: '週間達成度' ,dk: 'Uge resultat' ,fi: 'Viikottainen tulos' ,nb: 'Ukeresultat' @@ -2215,7 +2017,6 @@ function init() { ,sk: 'Týždenná úspešnosť' ,nl: 'Wekelijks succes' ,ko: '주간 통계' - ,tr: 'Haftalık Başarı' ,zh_cn: '每周统计' } ,'There is not sufficient data to run this report. Select more days.' : { @@ -2230,7 +2031,6 @@ function init() { ,hr: 'Nema dovoljno podataka za izvođenje izvještaja. Odaberite još dana.' ,sv: 'Data saknas för att köra rapport. Välj fler dagar.' ,it: 'Non ci sono dati sufficienti per eseguire questo rapporto. Selezionare più giorni.' - ,ja: 'レポートするためのデータが足りません。もっと多くの日を選択してください。' ,dk: 'Der er utilstrækkeligt data til at generere rapporten. Vælg flere dage.' ,fi: 'Raporttia ei voida luoda liian vähäisen tiedon vuoksi. Valitse useampia päiviä.' ,nb: 'Der er ikke nok data til å lage rapporten. Velg flere dager.' @@ -2240,7 +2040,6 @@ function init() { ,sk: 'Nedostatok dát. Vyberte dlhšie časové obdobie.' ,nl: 'Er zijn niet genoeg gegevens voor dit rapport, selecteer meer dagen.' ,ko: '이 보고서를 실행하기 위한 데이터가 충분하지 않습니다. 더 많은 날들을 선택해 주세요.' - ,tr: 'Bu raporu çalıştırmak için yeterli veri yok. Daha fazla gün seçin.' ,zh_cn: '没有足够的数据生成报表,请选择更长时间段。' } // food editor @@ -2257,7 +2056,6 @@ function init() { ,hr: 'Koristi se pohranjeni API tajni hash' ,sv: 'Använd hemlig API-nyckel' ,it: 'Stai utilizzando API hash segreta' - ,ja: '保存されたAPI secret hashを使用する' ,dk: 'Anvender gemt API-nøgle' ,fi: 'Tallennettu salainen API-tarkiste käytössä' ,nb: 'Bruker lagret API nøkkel' @@ -2267,7 +2065,6 @@ function init() { ,sk: 'Používam uložený API hash heslo' ,nl: 'Gebruik opgeslagen geheime API Hash' ,ko: '저장된 API secret hash를 사용 중' - ,tr: 'Kaydedilmiş API secret hash kullan' ,zh_cn: '使用已存储的API密钥哈希值' ,zh_tw: '使用已存儲的API密鑰哈希值' } @@ -2284,7 +2081,6 @@ function init() { ,hr: 'Nema pohranjenog API tajnog hasha. Unesite tajni API' ,sv: 'Hemlig api-nyckel saknas. Du måste ange API hemlighet' ,it: 'API hash segreto non è ancora memorizzato. È necessario inserire API segreto.' - ,ja: 'API secret hashがまだ保存されていません。API secretの入力が必要です。' ,dk: 'Mangler API-nøgle. Du skal indtaste API nøglen' ,fi: 'Salainen API-tarkiste puuttuu. Syötä API tarkiste.' ,nb: 'Mangler API nøkkel. Du må skrive inn API hemmelighet.' @@ -2294,7 +2090,6 @@ function init() { ,sk: 'Nieje uložené žiadne API hash heslo. Musíte zadať API heslo.' ,nl: 'Er is nog geen geheime API Hash opgeslagen. U moet eerst een geheime API code invoeren.' ,ko: 'API secret hash가 아직 저장되지 않았습니다. API secret를 입력해 주세요.' - ,tr: 'Henüz bir API secret hash saklanmadı. API parolasını girmeniz gerekiyor.' ,zh_cn: '没有已存储的API密钥,请输入API密钥。' ,zh_tw: '沒有已存儲的API密鑰,請輸入API密鑰。' } @@ -2311,7 +2106,6 @@ function init() { ,hr: 'Baza podataka je učitana' ,sv: 'Databas laddad' ,it: 'Database caricato' - ,ja: 'データベースロード完了' ,dk: 'Database indlæst' ,fi: 'Tietokanta ladattu' ,nb: 'Database lest' @@ -2321,7 +2115,6 @@ function init() { ,sk: 'Databáza načítaná' ,nl: 'Database geladen' ,ko: '데이터베이스 로드' - ,tr: 'Veritabanı yüklendi' ,zh_cn: '数据库已载入' } ,'Error: Database failed to load' : { @@ -2336,7 +2129,6 @@ function init() { ,hr: 'Greška: Baza podataka nije učitana' ,sv: 'Error: Databas kan ej laddas' ,it: 'Errore: database non è stato caricato' - ,ja: 'エラー:データベースを読み込めません' ,dk: 'Fejl: Database kan ikke indlæses' ,fi: 'Virhe: Tietokannan lataaminen epäonnistui' ,nb: 'Feil: Database kan ikke leses' @@ -2346,33 +2138,8 @@ function init() { ,sk: 'Chyba pri načítaní databázy' ,nl: 'FOUT: Database niet geladen' ,ko: '에러: 데이터베이스 로드 실패' - ,tr: 'Hata: Veritabanı yüklenemedi' ,zh_cn: '错误:数据库载入失败' } - ,'Error' : { - cs: 'Error' - ,he: 'Error' - ,nb: 'Error' - ,fr: 'Error' - ,ro: 'Error' - ,el: 'Error' - ,de: 'Error' - ,es: 'Error' - ,dk: 'Error' - ,sv: 'Error' - ,bg: 'Error' - ,it: 'Error' - ,fi: 'Error' - ,pl: 'Error' - ,pt: 'Error' - ,ru: 'Error' - ,sk: 'Error' - ,nl: 'Error' - ,ko: 'Error' - ,tr: 'Error' - ,zh_cn: 'Error' - ,zh_tw: 'Error' - } ,'Create new record' : { cs: 'Vytvořit nový záznam' ,de: 'Erstelle neuen Datensatz' @@ -2385,8 +2152,7 @@ function init() { ,hr: 'Kreiraj novi zapis' ,sv: 'Skapa ny post' ,it: 'Crea nuovo registro' - ,ja: '新しい記録を作る' - ,dk: 'Opret ny post' + ,dk: 'Danner ny post' ,fi: 'Luo uusi tallenne' ,nb: 'Lager ny registrering' ,he: 'צור רשומה חדשה' @@ -2395,7 +2161,6 @@ function init() { ,sk: 'Vytovriť nový záznam' ,nl: 'Opslaan' ,ko: '새입력' - ,tr: 'Yeni kayıt oluştur' ,zh_cn: '新增记录' } ,'Save record' : { @@ -2410,7 +2175,6 @@ function init() { ,hr: 'Spremi zapis' ,sv: 'Spara post' ,it: 'Salva Registro' - ,ja: '保存' ,dk: 'Gemmer post' ,fi: 'Tallenna' ,nb: 'Lagrer registrering' @@ -2420,7 +2184,6 @@ function init() { ,sk: 'Uložiť záznam' ,nl: 'Sla op' ,ko: '저장' - ,tr: 'Kayıtları kaydet' ,zh_cn: '保存记录' } ,'Portions' : { @@ -2435,7 +2198,6 @@ function init() { ,hr: 'Dijelovi' ,sv: 'Portion' ,it: 'Porzioni' - ,ja: '一食分' ,dk: 'Portioner' ,fi: 'Annokset' ,nb: 'Porsjoner' @@ -2445,7 +2207,6 @@ function init() { ,sk: 'Porcií' ,nl: 'Porties' ,ko: '부분' - ,tr: 'Porsiyonlar' ,zh_cn: '部分' } ,'Unit' : { @@ -2460,7 +2221,6 @@ function init() { ,hr: 'Jedinica' ,sv: 'Enhet' ,it: 'Unità' - ,ja: '単位' ,dk: 'Enheder' ,fi: 'Yksikkö' ,nb: 'Enhet' @@ -2470,7 +2230,6 @@ function init() { ,sk: 'Jednot.' ,nl: 'Eenheid' ,ko: '단위' - ,tr: 'Birim' ,zh_cn: '单位' } ,'GI' : { @@ -2486,7 +2245,6 @@ function init() { ,bg: 'ГИ' ,hr: 'GI' ,it: 'IG-Ind.Glic.' - ,ja: 'GI' ,dk: 'GI' ,fi: 'GI' ,nb: 'GI' @@ -2496,7 +2254,6 @@ function init() { ,he: 'GI' ,nl: 'Glycemische index ' ,ko: '혈당 지수' - ,tr: 'GI-Glisemik İndeks' ,zh_cn: 'GI(血糖生成指数)' } ,'Edit record' : { @@ -2511,7 +2268,6 @@ function init() { ,hr: 'Uredi zapis' ,sv: 'Editera post' ,it: 'Modifica registro' - ,ja: '記録編集' ,dk: 'Rediger post' ,fi: 'Muokkaa tallennetta' ,nb: 'Editere registrering' @@ -2521,7 +2277,6 @@ function init() { ,sk: 'Upraviť záznam' ,nl: 'Bewerk invoer' ,ko: '편집' - ,tr: 'Kaydı düzenle' ,zh_cn: '编辑记录' } ,'Delete record' : { @@ -2536,7 +2291,6 @@ function init() { ,hr: 'Izbriši zapis' ,sv: 'Radera post' ,it: 'Cancella registro' - ,ja: '記録削除' ,dk: 'Slet post' ,fi: 'Tuhoa tallenne' ,nb: 'Slette registrering' @@ -2546,7 +2300,6 @@ function init() { ,sk: 'Zmazať záznam' ,nl: 'Verwijder invoer' ,ko: '삭제' - ,tr: 'Kaydı sil' ,zh_cn: '删除记录' } ,'Move to the top' : { @@ -2561,7 +2314,6 @@ function init() { ,bg: 'Преместване в началото' ,hr: 'Premjesti na vrh' ,it: 'Spostare verso l\'alto' - ,ja: 'トップ画面へ' ,dk: 'Gå til toppen' ,fi: 'Siirrä ylimmäksi' ,nb: 'Gå til toppen' @@ -2571,7 +2323,6 @@ function init() { ,sk: 'Presunúť na začiatok' ,nl: 'Ga naar boven' ,ko: '맨처음으로 이동' - ,tr: 'En üste taşı' ,zh_cn: '移至顶端' } ,'Hidden' : { @@ -2586,7 +2337,6 @@ function init() { ,bg: 'Скрити' ,hr: 'Skriveno' ,it: 'Nascosto' - ,ja: '隠す' ,dk: 'Skjult' ,fi: 'Piilotettu' ,nb: 'Skjult' @@ -2596,7 +2346,6 @@ function init() { ,sk: 'Skrytý' ,nl: 'Verborgen' ,ko: '숨김' - ,tr: 'Gizli' ,zh_cn: '隐藏' } ,'Hide after use' : { @@ -2611,7 +2360,6 @@ function init() { ,hr: 'Sakrij nakon korištenja' ,sv: 'Dölj efter användning' ,it: 'Nascondi dopo l\'uso' - ,ja: '使用後に隠す' ,dk: 'Skjul efter brug' ,fi: 'Piilota käytön jälkeen' ,nb: 'Skjul etter bruk' @@ -2621,7 +2369,6 @@ function init() { ,sk: 'Skryť po použití' ,nl: 'Verberg na gebruik' ,ko: '사용 후 숨김' - ,tr: 'Kullandıktan sonra gizle' ,zh_cn: '使用后隐藏' } ,'Your API secret must be at least 12 characters long' : { @@ -2638,7 +2385,6 @@ function init() { ,he:' הסיסמא הסודית חייבת להיות באורך של 12 תווים לפחות' ,sv: 'Hemlig API-nyckel måsta innehålla 12 tecken' ,it: 'il vostro API secreto deve essere lungo almeno 12 caratteri' - ,ja: 'APIシークレットは12文字以上の長さが必要です' ,dk: 'Din API nøgle skal være mindst 12 tegn lang' ,fi: 'API-avaimen tulee olla ainakin 12 merkin mittainen' ,nb: 'Din API nøkkel må være minst 12 tegn lang' @@ -2647,7 +2393,6 @@ function init() { ,sk: 'Vaše API heslo musí mať najmenej 12 znakov' ,nl: 'Uw API wachtwoord dient tenminste 12 karakters lang te zijn' ,ko: 'API secret는 최소 12자 이상이여야 합니다.' - ,tr: 'PI parolanız en az 12 karakter uzunluğunda olmalıdır' ,zh_cn: 'API密钥最少需要12个字符' ,zh_tw: 'API密鑰最少需要12個字符' } @@ -2664,7 +2409,6 @@ function init() { ,hr: 'Neispravan tajni API' ,sv: 'Felaktig API-nyckel' ,it: 'API secreto non corretto' - ,ja: 'APIシークレットは正しくありません' ,dk: 'Forkert API-nøgle' ,fi: 'Väärä API-avain' ,nb: 'Ugyldig API nøkkel' @@ -2674,7 +2418,6 @@ function init() { ,sk: 'Nesprávne API heslo' ,nl: 'Onjuist API wachtwoord' ,ko: '잘못된 API secret' - ,tr: 'Hatalı API parolası' ,zh_cn: 'API密钥错误' ,zh_tw: 'API密鑰錯誤' } @@ -2691,17 +2434,15 @@ function init() { ,hr: 'API tajni hash je pohranjen' ,sv: 'Lagrad hemlig API-hash' ,it: 'Hash API secreto memorizzato' - ,ja: 'APIシークレットを保存出来ました' ,dk: 'Hemmelig API-hash gemt' ,fi: 'API salaisuus talletettu' ,nb: 'API nøkkel lagret' ,pl: 'Poufne klucz API zapisane' ,he: ' הסיסמא הסודית נשמרה' - ,ru: 'Хэш пароля API сохранен' + ,ru: 'Пароль API сохранен' ,sk: 'Hash API hesla uložený' ,nl: 'API wachtwoord opgeslagen' ,ko: 'API secret hash가 저장 되었습니다.' - ,tr: 'API secret hash parolası saklandı' ,zh_cn: 'API密钥已存储' ,zh_tw: 'API密鑰已存儲' } @@ -2717,7 +2458,6 @@ function init() { ,bg: 'Статус' ,hr: 'Status' ,it: 'Stato' - ,ja: '統計' ,dk: 'Status' ,fi: 'Tila' ,nb: 'Status' @@ -2727,7 +2467,6 @@ function init() { ,sk: 'Status' ,nl: 'Status' ,ko: '상태' - ,tr: 'Durum' ,zh_cn: '状态' } ,'Not loaded' : { @@ -2743,7 +2482,6 @@ function init() { ,hr: 'Nije učitano' ,sv: 'Ej laddad' ,it: 'Non caricato' - ,ja: '読み込めません' ,dk: 'Ikke indlæst' ,fi: 'Ei ladattu' ,nb: 'Ikke lest' @@ -2753,7 +2491,6 @@ function init() { ,sk: 'Nenačítaný' ,nl: 'Niet geladen' ,ko: '로드되지 않음' - ,tr: 'Yüklü değil' ,zh_cn: '未载入' } ,'Food Editor' : { @@ -2769,7 +2506,6 @@ function init() { ,hr: 'Editor hrane' ,sv: 'Födoämneseditor' ,it: 'NS - Database Alimenti' - ,ja: '食事編集' ,he: 'עורך מזון' ,dk: 'Mad editor' ,fi: 'Muokkaa ruokia' @@ -2779,7 +2515,6 @@ function init() { ,sk: 'Editor jedál' ,nl: 'Voeding beheer' ,ko: '음식 편집기' - ,tr: 'Gıda Editörü' ,zh_cn: '食物编辑器' } ,'Your database' : { @@ -2794,7 +2529,6 @@ function init() { ,bg: 'Твоята база с данни' ,hr: 'Vaša baza podataka' ,it: 'Vostro database' - ,ja: 'あなたのデータベース' ,dk: 'Din database' ,fi: 'Tietokantasi' ,nb: 'Din database' @@ -2804,7 +2538,6 @@ function init() { ,sk: 'Vaša databáza' ,nl: 'Uw database' ,ko: '당신의 데이터베이스' - ,tr: 'Sizin Veritabanınız' ,zh_cn: '你的数据库' } ,'Filter' : { @@ -2819,7 +2552,6 @@ function init() { ,bg: 'Филтър' ,hr: 'Filter' ,it: 'Filtro' - ,ja: 'フィルター' ,dk: 'Filter' ,fi: 'Suodatin' ,nb: 'Filter' @@ -2829,7 +2561,6 @@ function init() { ,ru: 'Фильтр' ,sk: 'Filter' ,ko: '필터' - ,tr: 'Filtre' ,zh_cn: '过滤器' } ,'Save' : { @@ -2844,7 +2575,6 @@ function init() { ,hr: 'Spremi' ,sv: 'Spara' ,it: 'Salva' - ,ja: '保存' ,dk: 'Gem' ,fi: 'Tallenna' ,nb: 'Lagre' @@ -2854,7 +2584,6 @@ function init() { ,sk: 'Uložiť' ,nl: 'Opslaan' ,ko: '저장' - ,tr: 'Kaydet' ,zh_cn: '保存' ,zh_tw: '保存' } @@ -2870,7 +2599,6 @@ function init() { ,hr: 'Očisti' ,sv: 'Rensa' ,it: 'Pulisci' - ,ja: 'クリア' ,dk: 'Rense' ,fi: 'Tyhjennä' ,nb: 'Tøm' @@ -2880,7 +2608,6 @@ function init() { ,sk: 'Vymazať' ,nl: 'Leeg maken' ,ko: '취소' - ,tr: 'Temizle' ,zh_cn: '清除' } ,'Record' : { @@ -2895,7 +2622,6 @@ function init() { ,bg: 'Запиши' ,hr: 'Zapis' ,it: 'Registro' - ,ja: '記録' ,dk: 'Post' ,fi: 'Tietue' ,nb: 'Registrering' @@ -2905,7 +2631,6 @@ function init() { ,sk: 'Záznam' ,nl: 'Toevoegen' ,ko: '기록' - ,tr: 'Kayıt' ,zh_cn: '记录' } ,'Quick picks' : { @@ -2920,7 +2645,6 @@ function init() { ,hr: 'Brzi izbor' ,sv: 'Snabbval' ,it: 'Scelta rapida' - ,ja: 'クイック選択' ,dk: 'Hurtig valg' ,fi: 'Nopeat valinnat' ,nb: 'Hurtigvalg' @@ -2930,7 +2654,6 @@ function init() { ,sk: 'Rýchly výber' ,nl: 'Snelkeuze' ,ko: '빠른 선택' - ,tr: 'Hızlı seçim' ,zh_cn: '快速选择' } ,'Show hidden' : { @@ -2945,7 +2668,6 @@ function init() { ,hr: 'Prikaži skriveno' ,sv: 'Visa dolda' ,it: 'Mostra nascosto' - ,ja: '表示する' ,dk: 'Vis skjulte' ,fi: 'Näytä piilotettu' ,nb: 'Vis skjulte' @@ -2955,7 +2677,6 @@ function init() { ,sk: 'Zobraziť skryté' ,nl: 'Laat verborgen zien' ,ko: '숨김 보기' - ,tr: 'Gizli göster' ,zh_cn: '显示隐藏值' } ,'Your API secret' : { @@ -2972,7 +2693,6 @@ function init() { ,hr: 'Vaš tajni API' ,he: 'הסיסמא הסודית שלך' ,it: 'Il tuo API secreto' - ,ja: 'あなたのAPI Secret' ,dk: 'Din API-nøgle' ,fi: 'Sinun API-avaimesi' ,nb: 'Din API nøkkel' @@ -2981,7 +2701,6 @@ function init() { ,sk: 'Vaše API heslo' ,nl: 'Uw API wachtwoord' ,ko: 'API secret' - ,tr: 'API secret parolanız' ,zh_cn: 'API密钥' ,zh_tw: 'API密鑰' } @@ -2998,17 +2717,15 @@ function init() { ,hr: 'Pohrani hash na ovom računalu (Koristiti samo na osobnom računalu)' ,sv: 'Lagra hashvärde på denna dator (använd endast på privat dator)' ,it: 'Conservare hash su questo computer (utilizzare solo su computer privati)' - ,ja: 'このコンピューターにハッシュ値を保存する(このコンピューターでのみ使用する)' ,dk: 'Gemme hash på denne computer (brug kun på privat computer)' ,fi: 'Tallenna avain tälle tietokoneelle (käytä vain omalla tietokoneellasi)' ,nb: 'Lagre hash på denne pc (bruk kun på privat pc)' ,he:'שמור סיסמא הסודית על המחשב ( יש להשתמש רק על מחשב פרטי)' ,pl: 'Zapisz na tym komputerze (korzystaj tylko na komputerach prywatnych)' - ,ru: 'Сохранить хеш на этом ПК (только для личных компьютеров)' + ,ru: 'Сохранить на этом ПК (только для личных компьютеров)' ,sk: 'Uložiť hash na tomto počítači (Používajte iba na súkromných počítačoch)' ,nl: 'Sla wachtwoord op. (gebruik dit alleen op prive computers)' ,ko: '이 컴퓨터에 hash를 저장하세요.(단, 개인 컴퓨터를 사용하세요.)' - ,tr: 'Bu bilgisayarda hash parolasını sakla (Yalnızca özel bilgisayarlarda kullanın)' ,zh_cn: '在本机存储API密钥\n(请勿在公用电脑上使用本功能)' ,zh_tw: '在本機存儲API密鑰\n(請勿在公用電腦上使用本功能)' } @@ -3024,7 +2741,6 @@ function init() { ,bg: 'Събития' ,hr: 'Tretmani' ,it: 'Somministrazioni' - ,ja: '治療' ,dk: 'Behandling' ,fi: 'Hoitotoimenpiteet' ,nb: 'Behandlinger' @@ -3034,7 +2750,6 @@ function init() { ,sk: 'Ošetrenie' ,nl: 'Behandelingen' ,ko: '대처' - ,tr: 'Tedaviler' ,zh_cn: '操作' } ,'Time' : { @@ -3049,7 +2764,6 @@ function init() { ,bg: 'Време' ,hr: 'Vrijeme' ,it: 'Tempo' - ,ja: '時間' ,dk: 'Tid' ,fi: 'Aika' ,nb: 'Tid' @@ -3059,7 +2773,6 @@ function init() { ,sk: 'Čas' ,nl: 'Tijd' ,ko: '시간' - ,tr: 'Zaman' ,zh_cn: '时间' ,zh_tw: '時間' } @@ -3075,7 +2788,6 @@ function init() { ,bg: 'Вид събитие' ,hr: 'Vrsta događaja' ,it: 'Tipo di evento' - ,ja: 'イベント' ,dk: 'Hændelsestype' ,fi: 'Tapahtumatyyppi' ,nb: 'Type' @@ -3085,7 +2797,6 @@ function init() { ,sk: 'Typ udalosti' ,nl: 'Soort' ,ko: '입력 유형' - ,tr: 'Etkinlik tipi' ,zh_cn: '事件类型' } ,'Blood Glucose' : { @@ -3100,7 +2811,6 @@ function init() { ,bg: 'Кръвна захар' ,hr: 'GUK' ,it: 'Glicemie' - ,ja: '血糖値' ,dk: 'Glukoseværdi' ,fi: 'Verensokeri' ,nb: 'Blodsukker' @@ -3110,7 +2820,6 @@ function init() { ,sk: 'Glykémia' ,nl: 'Bloed glucose' ,ko: '혈당' - ,tr: 'Kan Şekeri' ,zh_cn: '血糖值' } ,'Entered By' : { @@ -3125,7 +2834,6 @@ function init() { ,bg: 'Въведено от' ,hr: 'Unos izvršio' ,it: 'inserito da' - ,ja: '入力者' ,dk: 'Indtastet af' ,fi: 'Tiedot syötti' ,nb: 'Lagt inn av' @@ -3135,7 +2843,6 @@ function init() { ,sk: 'Zadal' ,nl: 'Ingevoerd door' ,ko: '입력됨' - ,tr: 'Tarafından girildi' ,zh_cn: '输入人' } ,'Delete this treatment?' : { @@ -3150,7 +2857,6 @@ function init() { ,hr: 'Izbriši ovaj tretman?' ,sv: 'Ta bort händelse?' ,it: 'Eliminare questa somministrazione?' - ,ja: 'この治療データを削除しますか?' ,dk: 'Slet denne hændelse?' ,fi: 'Tuhoa tämä hoitotoimenpide?' ,nb: 'Slett denne hendelsen?' @@ -3160,7 +2866,6 @@ function init() { ,sk: 'Vymazať toto ošetrenie?' ,nl: 'Verwijder' ,ko: '이 대처를 지울까요?' - ,tr: 'Bu tedaviyi sil?' ,zh_cn: '删除这个操作?' } ,'Carbs Given' : { @@ -3175,7 +2880,6 @@ function init() { ,hr: 'Količina UH' ,sv: 'Antal kolhydrater' ,it: 'Carboidrati' - ,ja: '摂取糖質量' ,dk: 'Antal kulhydrater' ,fi: 'Hiilihydraatit' ,nb: 'Karbo' @@ -3185,7 +2889,6 @@ function init() { ,sk: 'Sacharidov' ,nl: 'Aantal koolhydraten' ,ko: '탄수화물 요구량' - ,tr: 'Karbonhidrat Verilen' ,zh_cn: '碳水化合物量' } ,'Inzulin Given' : { @@ -3200,7 +2903,6 @@ function init() { ,hr: 'Količina inzulina' ,sv: 'Insulin' ,it: 'Insulina' - ,ja: 'インスリン投与量' ,dk: 'Insulin' ,fi: 'Insuliiniannos' ,nb: 'Insulin' @@ -3210,7 +2912,6 @@ function init() { ,sk: 'Inzulínu' ,nl: 'Insuline' ,ko: '인슐린 요구량' - ,tr: 'İnsülin Verilen' ,zh_cn: '胰岛素输注' } ,'Event Time' : { @@ -3225,7 +2926,6 @@ function init() { ,bg: 'Въвеждане' ,hr: 'Vrijeme događaja' ,it: 'Ora Evento' - ,ja: 'イベント時間' ,dk: 'Tidspunkt for hændelsen' ,fi: 'Aika' ,nb: 'Tidspunkt for hendelsen' @@ -3235,7 +2935,6 @@ function init() { ,sk: 'Čas udalosti' ,nl: 'Tijdstip' ,ko: '입력 시간' - ,tr: 'Etkinliğin zamanı' ,zh_cn: '事件时间' } ,'Please verify that the data entered is correct' : { @@ -3250,7 +2949,6 @@ function init() { ,hr: 'Molim Vas provjerite jesu li uneseni podaci ispravni' ,sv: 'Vänligen verifiera att inlagd data är korrekt' ,it: 'Si prega di verificare che i dati inseriti siano corretti' - ,ja: '入力したデータが正しいか確認をお願いします。' ,dk: 'Venligst verificer at indtastet data er korrekt' ,fi: 'Varmista, että tiedot ovat oikein' ,nb: 'Vennligst verifiser at inntastet data er korrekt' @@ -3260,7 +2958,6 @@ function init() { ,sk: 'Prosím, skontrolujte správnosť zadaných údajov' ,nl: 'Controleer uw invoer' ,ko: '입력한 데이터가 정확한지 확인해 주세요.' - ,tr: 'Lütfen girilen verilerin doğru olduğunu kontrol edin.' ,zh_cn: '请验证输入的数据是否正确' } ,'BG' : { @@ -3276,7 +2973,6 @@ function init() { ,bg: 'КЗ' ,hr: 'GUK' ,it: 'Glicemie' - ,ja: 'BG' ,dk: 'BS' ,fi: 'VS' ,nb: 'BS' @@ -3285,7 +2981,6 @@ function init() { ,sk: 'Glykémia' ,nl: 'BG' ,ko: '혈당' - ,tr: 'KŞ' ,zh_cn: '血糖' } ,'Use BG correction in calculation' : { @@ -3301,16 +2996,14 @@ function init() { ,hr: 'Koristi korekciju GUK-a u izračunu' ,sv: 'Använd BS-korrektion för beräkning' ,it: 'Utilizzare la correzione nei calcoli delle Glicemie' - ,ja: 'ボーラス計算機能使用' ,dk: 'Anvend BS-korrektion i beregning' ,fi: 'Käytä korjausannosta laskentaan' ,nb: 'Bruk blodsukkerkorrigering i beregning' ,pl: 'Użyj BG w obliczeniach korekty' - ,ru: 'При расчете проводите коррекцию на СК' + ,ru: 'При рассчете проводите коррекцию на СК' ,sk: 'Použite korekciu na glykémiu' ,nl: 'Gebruik BG in berekeningen' ,ko: '계산에 보정된 혈당을 사용하세요.' - ,tr: 'Hesaplamada KŞ düzeltmesini kullan' ,zh_cn: '使用血糖值修正计算' } ,'BG from CGM (autoupdated)' : { @@ -3326,7 +3019,6 @@ function init() { ,bg: 'КЗ от сензора (автоматично)' ,hr: 'GUK sa CGM-a (ažuriran automatski)' ,it: 'Glicemie da CGM (aggiornamento automatico)' - ,ja: 'CGMグルコース値' ,dk: 'BS fra CGM (automatisk)' ,fi: 'VS sensorilta (päivitetty automaattisesti)' ,nb: 'BS fra CGM (automatisk)' @@ -3335,7 +3027,6 @@ function init() { ,sk: 'Glykémia z CGM (automatická aktualizácia) ' ,nl: 'BG van CGM (automatische invoer)' ,ko: 'CGM 혈당(자동 업데이트)' - ,tr: 'CGM den KŞ (otomatik güncelleme)' ,zh_cn: 'CGM(连续血糖监测)测量的血糖值(自动更新)' } ,'BG from meter' : { @@ -3351,7 +3042,6 @@ function init() { ,bg: 'КЗ от глюкомер' ,hr: 'GUK s glukometra' ,it: 'Glicemie da glucometro' - ,ja: '血糖測定器使用グルコース値' ,dk: 'BS fra blodsukkerapperat' ,fi: 'VS mittarilta' ,nb: 'BS fra blodsukkerapparat' @@ -3360,7 +3050,6 @@ function init() { ,sk: 'Glykémia z glukomeru' ,nl: 'BG van meter' ,ko: '혈당 측정기에서의 혈당' - ,tr: 'Glikometre KŞ' ,zh_cn: '血糖仪测量的血糖值' } ,'Manual BG' : { @@ -3376,7 +3065,6 @@ function init() { ,hr: 'Ručno unesen GUK' ,sv: 'Manuellt BS' ,it: 'Inserisci Glicemia' - ,ja: '手動入力グルコース値' ,dk: 'Manuelt BS' ,fi: 'Käsin syötetty VS' ,nb: 'Manuelt BS' @@ -3385,7 +3073,6 @@ function init() { ,sk: 'Ručne zadaná glykémia' ,nl: 'Handmatige BG' ,ko: '수동 입력 혈당' - ,tr: 'Manuel KŞ' ,zh_cn: '手动输入的血糖值' } ,'Quickpick' : { @@ -3401,7 +3088,6 @@ function init() { ,hr: 'Brzi izbor' ,sv: 'Snabbval' ,it: 'Scelta rapida' - ,ja: 'クイック選択' ,dk: 'Hurtig valg' ,fi: 'Pikavalinta' ,nb: 'Hurtigvalg' @@ -3410,7 +3096,6 @@ function init() { ,sk: 'Rýchly výber' ,nl: 'Snelkeuze' ,ko: '빠른 선택' - ,tr: 'Hızlı seçim' ,zh_cn: '快速选择' } ,'or' : { @@ -3425,7 +3110,6 @@ function init() { ,bg: 'или' ,hr: 'ili' ,it: 'o' - ,ja: 'または' ,dk: 'eller' ,fi: 'tai' ,nb: 'eller' @@ -3435,7 +3119,6 @@ function init() { ,sk: 'alebo' ,nl: 'of' ,ko: '또는' - ,tr: 'veya' ,zh_cn: '或' } ,'Add from database' : { @@ -3450,7 +3133,6 @@ function init() { ,hr: 'Dodaj iz baze podataka' ,sv: 'Lägg till från databas' ,it: 'Aggiungi dal database' - ,ja: 'データベースから追加' ,dk: 'Tilføj fra database' ,fi: 'Lisää tietokannasta' ,nb: 'Legg til fra database' @@ -3460,7 +3142,6 @@ function init() { ,sk: 'Pridať z databázy' ,nl: 'Toevoegen uit database' ,ko: '데이터베이스로 부터 추가' - ,tr: 'Veritabanından ekle' ,zh_cn: '从数据库增加' } ,'Use carbs correction in calculation' : { @@ -3476,16 +3157,14 @@ function init() { ,hr: 'Koristi korekciju za UH u izračunu' ,sv: 'Använd kolhydratkorrektion för beräkning' ,it: 'Utilizzare la correzione dei carboidrati nel calcolo' - ,ja: '糖質量計算機能を使用' ,dk: 'Benyt kulhydratkorrektion i beregning' ,fi: 'Käytä hiilihydraattikorjausta laskennassa' ,nb: 'Bruk karbohydratkorrigering i beregning' ,pl: 'Użyj wartość węglowodanów w obliczeniach korekty' - ,ru: 'Пользуйтесь коррекцией углеводов при расчете' + ,ru: 'Пользуйтесь коррекцией углеводов при рассчете' ,sk: 'Použite korekciu na sacharidy' ,nl: 'Gebruik KH correctie in berekening' ,ko: '계산에 보정된 탄수화물을 사용하세요.' - ,tr: 'Hesaplamada karbonhidrat düzeltmesini kullan' ,zh_cn: '使用碳水化合物修正计算结果' } ,'Use COB correction in calculation' : { @@ -3501,16 +3180,14 @@ function init() { ,hr: 'Koristi aktivne UH u izračunu' ,sv: 'Använd aktiva kolhydrater för beräkning' ,it: 'Utilizzare la correzione COB nel calcolo' - ,ja: 'COB補正計算を使用' ,dk: 'Benyt aktive kulhydrater i beregning' ,fi: 'Käytä aktiivisia hiilihydraatteja laskennassa' ,nb: 'Benytt aktive karbohydrater i beregning' ,pl: 'Użyj COB do obliczenia korekty' - ,ru: 'Учитывайте активные углеводы при расчете (COB)' + ,ru: 'Учитывайте активные углеводы при рассчете (COB)' ,sk: 'Použite korekciu na COB' ,nl: 'Gebruik ingenomen KH in berekening' ,ko: '계산에 보정된 COB를 사용하세요.' - ,tr: 'Hesaplamada COB aktif karbonhidrat düzeltmesini kullan' ,zh_cn: '使用COB(活性碳水化合物)修正计算结果' } ,'Use IOB in calculation' : { @@ -3526,16 +3203,14 @@ function init() { ,hr: 'Koristi aktivni inzulin u izračunu' ,sv: 'Använd aktivt insulin för beräkning' ,it: 'Utilizzare la correzione IOB nel calcolo' - ,ja: 'IOB計算を使用' ,dk: 'Benyt aktivt insulin i beregningen' ,fi: 'Käytä aktiviivista insuliinia laskennassa' ,nb: 'Bruk aktivt insulin i beregningen' ,pl: 'Użyj IOB w obliczeniach' - ,ru: 'Учитывайте активный инсулин при расчете (IOB)' + ,ru: 'Учитывайте активный инсулин при рассчете (IOB)' ,sk: 'Použite IOB vo výpočte' ,nl: 'Gebruik IOB in berekening' ,ko: '계산에 IOB를 사용하세요.' - ,tr: 'Hesaplamada IOB aktif insülin düzeltmesini kullan' ,zh_cn: '使用IOB(活性胰岛素)修正计算结果' } ,'Other correction' : { @@ -3551,7 +3226,6 @@ function init() { ,hr: 'Druga korekcija' ,sv: 'Övrig korrektion' ,it: 'Altre correzioni' - ,ja: 'その他の補正' ,dk: 'Øvrig korrektion' ,fi: 'Muu korjaus' ,nb: 'Annen korrigering' @@ -3560,7 +3234,6 @@ function init() { ,sk: 'Iná korekcia' ,nl: 'Andere correctie' ,ko: '다른 보정' - ,tr: 'Diğer düzeltme' ,zh_cn: '其它修正' } ,'Rounding' : { @@ -3576,7 +3249,6 @@ function init() { ,bg: 'Закръгляне' ,hr: 'Zaokruživanje' ,it: 'Arrotondamento' - ,ja: '端数処理' ,dk: 'Afrunding' ,fi: 'Pyöristys' ,nb: 'Avrunding' @@ -3585,7 +3257,6 @@ function init() { ,sk: 'Zaokrúhlenie' ,nl: 'Afgerond' ,ko: '라운딩' - ,tr: 'yuvarlama' ,zh_cn: '取整' } ,'Enter insulin correction in treatment' : { @@ -3601,7 +3272,6 @@ function init() { ,hr: 'Unesi korekciju inzulinom u tretman' ,sv: 'Ange insulinkorrektion för händelse' ,it: 'Inserisci correzione insulina nella somministrazione' - ,ja: '治療にインスリン補正を入力する。' ,dk: 'Indtast insulinkorrektion' ,fi: 'Syötä insuliinikorjaus' ,nb: 'Task inn insulinkorrigering' @@ -3610,7 +3280,6 @@ function init() { ,sk: 'Zadajte korekciu inzulínu do ošetrenia' ,nl: 'Voer insuline correctie toe aan behandeling' ,ko: '대처를 위해 보정된 인슐린을 입력하세요.' - ,tr: 'Tedavide insülin düzeltmesini girin' ,zh_cn: '在操作中输入胰岛素修正' } ,'Insulin needed' : { @@ -3625,7 +3294,6 @@ function init() { ,hr: 'Potrebno inzulina' ,sv: 'Beräknad insulinmängd' ,it: 'Insulina necessaria' - ,ja: '必要インスリン単位' ,dk: 'Insulin påkrævet' ,fi: 'Insuliinitarve' ,nb: 'Insulin nødvendig' @@ -3635,7 +3303,6 @@ function init() { ,sk: 'Potrebný inzulín' ,nl: 'Benodigde insuline' ,ko: '인슐린 필요' - ,tr: 'İnsülin gerekli' ,zh_cn: '需要的胰岛素量' } ,'Carbs needed' : { @@ -3650,7 +3317,6 @@ function init() { ,hr: 'Potrebno UH' ,sv: 'Beräknad kolhydratmängd' ,it: 'Carboidrati necessari' - ,ja: '必要糖質量' ,dk: 'Kulhydrater påkrævet' ,fi: 'Hiilihydraattitarve' ,nb: 'Karbohydrater nødvendig' @@ -3660,7 +3326,6 @@ function init() { ,sk: 'Potrebné sacharidy' ,nl: 'Benodigde koolhydraten' ,ko: '탄수화물 필요' - ,tr: 'Karbonhidrat gerekli' ,zh_cn: '需要的碳水量' } ,'Carbs needed if Insulin total is negative value' : { @@ -3676,7 +3341,6 @@ function init() { ,hr: 'Potrebno UH ako je ukupna vrijednost inzulina negativna' ,sv: 'Nödvändig kolhydratmängd för angiven insulinmängd' ,it: 'Carboidrati necessari se l\'insulina totale è un valore negativo' - ,ja: 'インスリン合計値がマイナスであればカーボ値入力が必要です。' ,dk: 'Kulhydrater er nødvendige når total insulin mængde er negativ' ,fi: 'Hiilihydraattitarve, jos yhteenlaskettu insuliini on negatiivinen' ,nb: 'Karbohydrater er nødvendige når total insulinmengde er negativ' @@ -3685,7 +3349,6 @@ function init() { ,sk: 'Potrebné sacharidy, ak je celkový inzulín záporná hodnota' ,nl: 'Benodigde KH als insuline een negatieve waarde geeft' ,ko: '인슐린 전체가 마이너스 값이면 탄수화물이 필요합니다.' - ,tr: 'Toplam insülin negatif değer olduğunda karbonhidrat gereklidir' ,zh_cn: '如果胰岛素总量为负时所需的碳水化合物量' } ,'Basal rate' : { @@ -3701,16 +3364,14 @@ function init() { ,hr: 'Bazal' ,sv: 'Basaldos' ,it: 'Velocità basale' - ,ja: '基礎インスリン割合' ,dk: 'Basal rate' ,fi: 'Perusannos' ,nb: 'Basal' ,pl: 'Dawka bazowa' - ,ru: 'Скорость базала' + ,ru: 'Базальный' ,sk: 'Bazál' ,nl: 'Basaal snelheid' ,ko: '기초량 비율' - ,tr: 'Basal oranı' ,zh_cn: '基础率' } ,'60 minutes earlier' : { @@ -3726,7 +3387,6 @@ function init() { ,bg: 'Преди 60 минути' ,hr: 'Prije 60 minuta' ,it: '60 minuti prima' - ,ja: '60分前' ,dk: '60 min tidligere' ,fi: '60 minuuttia aiemmin' ,nb: '60 min tidligere' @@ -3735,7 +3395,6 @@ function init() { ,sk: '60 min. pred' ,nl: '60 minuten eerder' ,ko: '60분 더 일찍' - ,tr: '60 dak. önce' //erken önce ??? ,zh_cn: '60分钟前' } ,'45 minutes earlier' : { @@ -3751,7 +3410,6 @@ function init() { ,bg: 'Преди 45 минути' ,hr: 'Prije 45 minuta' ,it: '45 minuti prima' - ,ja: '45分前' ,dk: '45 min tidligere' ,fi: '45 minuuttia aiemmin' ,nb: '45 min tidligere' @@ -3760,7 +3418,6 @@ function init() { ,sk: '45 min. pred' ,nl: '45 minuten eerder' ,ko: '45분 더 일찍' - ,tr: '45 dak. önce' ,zh_cn: '45分钟前' } ,'30 minutes earlier' : { @@ -3776,7 +3433,6 @@ function init() { ,bg: 'Преди 30 минути' ,hr: 'Prije 30 minuta' ,it: '30 minuti prima' - ,ja: '30分前' ,dk: '30 min tidigere' ,fi: '30 minuuttia aiemmin' ,nb: '30 min tidigere' @@ -3785,7 +3441,6 @@ function init() { ,sk: '30 min. pred' ,nl: '30 minuten eerder' ,ko: '30분 더 일찍' - ,tr: '30 dak. önce' ,zh_cn: '30分钟前' } ,'20 minutes earlier' : { @@ -3801,7 +3456,6 @@ function init() { ,bg: 'Преди 20 минути' ,hr: 'Prije 20 minuta' ,it: '20 minuti prima' - ,ja: '20分前' ,dk: '20 min tidligere' ,fi: '20 minuuttia aiemmin' ,nb: '20 min tidligere' @@ -3810,7 +3464,6 @@ function init() { ,sk: '20 min. pred' ,nl: '20 minuten eerder' ,ko: '20분 더 일찍' - ,tr: '20 dak. önce' ,zh_cn: '20分钟前' } ,'15 minutes earlier' : { @@ -3826,7 +3479,6 @@ function init() { ,bg: 'Преди 15 минути' ,hr: 'Prije 15 minuta' ,it: '15 minuti prima' - ,ja: '15分前' ,dk: '15 min tidligere' ,fi: '15 minuuttia aiemmin' ,nb: '15 min tidligere' @@ -3835,7 +3487,6 @@ function init() { ,sk: '15 min. pred' ,nl: '15 minuten eerder' ,ko: '15분 더 일찍' - ,tr: '15 dak. önce' ,zh_cn: '15分钟前' } ,'Time in minutes' : { @@ -3859,7 +3510,6 @@ function init() { ,sk: 'Čas v minútach' ,nl: 'Tijd in minuten' ,ko: '분' - ,tr: 'Dakika cinsinden süre' ,zh_cn: '1分钟前' } ,'15 minutes later' : { @@ -3874,7 +3524,6 @@ function init() { ,hr: '15 minuta kasnije' ,sv: '15 min senare' ,it: '15 minuti più tardi' - ,ja: '15分後' ,dk: '15 min senere' ,fi: '15 minuuttia myöhemmin' ,nb: '15 min senere' @@ -3884,7 +3533,6 @@ function init() { ,sk: '15 min. po' ,nl: '15 minuten later' ,ko: '15분 더 나중에' - ,tr: '15 dak. sonra' //sonra daha sonra ,zh_cn: '15分钟后' } ,'20 minutes later' : { @@ -3899,7 +3547,6 @@ function init() { ,hr: '20 minuta kasnije' ,sv: '20 min senare' ,it: '20 minuti più tardi' - ,ja: '20分後' ,dk: '20 min senere' ,fi: '20 minuuttia myöhemmin' ,nb: '20 min senere' @@ -3909,7 +3556,6 @@ function init() { ,sk: '20 min. po' ,nl: '20 minuten later' ,ko: '20분 더 나중에' - ,tr: '20 dak. sonra' ,zh_cn: '20分钟后' } ,'30 minutes later' : { @@ -3924,7 +3570,6 @@ function init() { ,hr: '30 minuta kasnije' ,sv: '30 min senare' ,it: '30 minuti più tardi' - ,ja: '30分後' ,dk: '30 min senere' ,fi: '30 minuuttia myöhemmin' ,nb: '30 min senere' @@ -3934,7 +3579,6 @@ function init() { ,sk: '30 min. po' ,nl: '30 minuten later' ,ko: '30분 더 나중에' - ,tr: '30 dak. sonra' ,zh_cn: '30分钟后' } ,'45 minutes later' : { @@ -3949,7 +3593,6 @@ function init() { ,hr: '45 minuta kasnije' ,sv: '45 min senare' ,it: '45 minuti più tardi' - ,ja: '45分後' ,dk: '45 min senere' ,fi: '45 minuuttia myöhemmin' ,nb: '45 min senere' @@ -3959,7 +3602,6 @@ function init() { ,sk: '45 min. po' ,nl: '45 minuten later' ,ko: '45분 더 나중에' - ,tr: '45 dak. sonra' ,zh_cn: '45分钟后' } ,'60 minutes later' : { @@ -3974,7 +3616,6 @@ function init() { ,hr: '60 minuta kasnije' ,sv: '60 min senare' ,it: '60 minuti più tardi' - ,ja: '60分後' ,dk: '60 min senere' ,fi: '60 minuuttia myöhemmin' ,nb: '60 min senere' @@ -3984,7 +3625,6 @@ function init() { ,sk: '60 min. po' ,nl: '60 minuten later' ,ko: '60분 더 나중에' - ,tr: '60 dak. sonra' ,zh_cn: '60分钟后' } ,'Additional Notes, Comments' : { @@ -3999,7 +3639,6 @@ function init() { ,hr: 'Dodatne bilješke, komentari' ,sv: 'Notering, övrigt' ,it: 'Note aggiuntive, commenti' - ,ja: '追加メモ、コメント' ,dk: 'Ekstra noter, kommentarer' ,fi: 'Lisähuomiot, kommentit' ,nb: 'Ekstra notater, kommentarer' @@ -4009,7 +3648,6 @@ function init() { ,sk: 'Ďalšie poznámky, komentáre' ,nl: 'Extra aantekeningen' ,ko: '추가 메모' - ,tr: 'Ek Notlar, Yorumlar' ,zh_cn: '备注' } ,'RETRO MODE' : { @@ -4025,7 +3663,6 @@ function init() { ,bg: 'МИНАЛО ВРЕМЕ' ,hr: 'Retrospektivni način' ,it: 'Modalità retrospettiva' - ,ja: '振り返りモード' ,dk: 'Retro mode' ,fi: 'VANHENTUNEET TIEDOT' ,nb: 'Retro mode' @@ -4034,7 +3671,6 @@ function init() { ,ru: 'режим РЕТРО' ,sk: 'V MINULOSTI' ,ko: 'PETRO MODE' - ,tr: 'RETRO MODE' ,zh_cn: '历史模式' } ,'Now' : { @@ -4049,7 +3685,6 @@ function init() { ,bg: 'Сега' ,hr: 'Sad' ,it: 'Ora' - ,ja: '今' ,dk: 'Nu' ,fi: 'Nyt' ,nb: 'Nå' @@ -4059,7 +3694,6 @@ function init() { ,sk: 'Teraz' ,nl: 'Nu' ,ko: '현재' - ,tr: 'Şimdi' ,zh_cn: '现在' } ,'Other' : { @@ -4074,7 +3708,6 @@ function init() { ,bg: 'Друго' ,hr: 'Drugo' ,it: 'Altro' - ,ja: '他の' ,dk: 'Øvrige' ,fi: 'Muu' ,nb: 'Annet' @@ -4084,7 +3717,6 @@ function init() { ,sk: 'Iný' ,nl: 'Andere' ,ko: '다른' - ,tr: 'Diğer' ,zh_cn: '其它' } ,'Submit Form' : { @@ -4099,7 +3731,6 @@ function init() { ,bg: 'Въвеждане на данните' ,hr: 'Predaj obrazac' ,it: 'Invia il modulo' - ,ja: 'フォームを投稿する' ,dk: 'Gem hændelsen' ,fi: 'Lähetä tiedot' ,nb: 'Lagre' @@ -4109,7 +3740,6 @@ function init() { ,sk: 'Odoslať formulár' ,nl: 'Formulier opslaan' ,ko: '양식 제출' - ,tr: 'Formu gönder' ,zh_cn: '提交' } ,'Profile Editor' : { @@ -4124,7 +3754,6 @@ function init() { ,bg: 'Редактор на профила' ,hr: 'Editor profila' ,it: 'NS - Dati Personali' - ,ja: 'プロフィール編集' ,dk: 'Profil editor' ,fi: 'Profiilin muokkaus' ,nb: 'Profileditor' @@ -4134,7 +3763,6 @@ function init() { ,sk: 'Editor profilu' ,nl: 'Profiel beheer' ,ko: '프로 편집기' - ,tr: 'Profil Düzenleyicisi' ,zh_cn: '配置文件编辑器' ,zh_tw: '配置文件編輯器' } @@ -4151,7 +3779,6 @@ function init() { ,bg: 'Статистика' ,hr: 'Alat za prijavu' ,it: 'NS - Statistiche' - ,ja: '報告' ,dk: 'Rapporteringsværktøj' ,fi: 'Raportointityökalu' ,nb: 'Rapporteringsverktøy' @@ -4160,7 +3787,6 @@ function init() { ,sk: 'Správy' ,nl: 'Rapporten' ,ko: '보고서' - ,tr: 'Raporlar' ,zh_cn: '生成报表' ,zh_tw: '生成報表' } @@ -4177,7 +3803,6 @@ function init() { ,hr: 'Dodajte hranu iz svoje baze podataka' ,sv: 'Lägg till livsmedel från databas' ,it: 'Aggiungere cibo al database' - ,ja: 'データベースから食べ物を追加' ,dk: 'Tilføj mad fra din database' ,fi: 'Lisää ruoka tietokannasta' ,nb: 'Legg til mat fra din database' @@ -4186,7 +3811,6 @@ function init() { ,sk: 'Pridať jedlo z Vašej databázy' ,nl: 'Voeg voeding toe uit uw database' ,ko: '데이터베이스에서 음식을 추가하세요.' - ,tr: 'Veritabanınızdan yemek ekleyin' ,zh_cn: '从数据库增加食物' } ,'Reload database' : { @@ -4202,7 +3826,6 @@ function init() { ,hr: 'Ponovo učitajte bazu podataka' ,sv: 'Ladda om databas' ,it: 'Ricarica database' - ,ja: 'データベース再読み込み' ,dk: 'Genindlæs databasen' ,fi: 'Lataa tietokanta uudelleen' ,nb: 'Last inn databasen på nytt' @@ -4211,7 +3834,6 @@ function init() { ,sk: 'Obnoviť databázu' ,nl: 'Database opnieuw laden' ,ko: '데이터베이스 재로드' - ,tr: 'Veritabanını yeniden yükle' ,zh_cn: '重新载入数据库' } ,'Add' : { @@ -4227,7 +3849,6 @@ function init() { ,hr: 'Dodaj' ,sv: 'Lägg till' ,it: 'Aggiungere' - ,ja: '追加' ,dk: 'Tilføj' ,fi: 'Lisää' ,nb: 'Legg til' @@ -4236,7 +3857,6 @@ function init() { ,sk: 'Pridať' ,nl: 'Toevoegen' ,ko: '추가' - ,tr: 'Ekle' ,zh_cn: '增加' } ,'Unauthorized' : { @@ -4252,16 +3872,14 @@ function init() { ,bg: 'Неразрешен достъп' ,hr: 'Neautorizirano' ,it: 'Non Autorizzato' - ,ja: '認証されていません' ,dk: 'Uautoriseret' - ,fi: 'Et ole autentikoitunut' + ,fi: 'Kielletty' ,nb: 'Uautorisert' ,pl: 'Nieuwierzytelniono' ,ru: 'Не авторизовано' ,sk: 'Neautorizované' ,nl: 'Ongeauthoriseerd' ,ko: '미인증' - ,tr: 'Yetkisiz' ,zh_cn: '未授权' ,zh_tw: '未授權' } @@ -4278,7 +3896,6 @@ function init() { ,hr: 'Neuspjeli unos podataka' ,sv: 'Lägga till post nekas' ,it: 'Voce del Registro fallita' - ,ja: '入力されたものは記録できませんでした' ,dk: 'Tilføjelse af post fejlede' ,fi: 'Tiedon tallentaminen epäonnistui' ,nb: 'Lagring feilet' @@ -4287,7 +3904,6 @@ function init() { ,sk: 'Zadanie záznamu zlyhalo' ,nl: 'Toevoegen mislukt' ,ko: '입력 실패' - ,tr: 'Kayıt girişi başarısız oldu' ,zh_cn: '输入记录失败' } ,'Device authenticated' : { @@ -4303,7 +3919,6 @@ function init() { ,bg: 'Устройстово е разпознато' ,hr: 'Uređaj autenticiran' ,it: 'Disp. autenticato' - ,ja: '機器は認証されました。' ,dk: 'Enhed godkendt' ,fi: 'Laite autentikoitu' ,nb: 'Enhet godkjent' @@ -4312,7 +3927,6 @@ function init() { ,sk: 'Zariadenie overené' ,nl: 'Apparaat geauthenticeerd' ,ko: '기기 인증' - ,tr: 'Cihaz kimliği doğrulandı' ,zh_cn: '设备已认证' ,zh_tw: '設備已認證' } @@ -4329,7 +3943,6 @@ function init() { ,bg: 'Устройсройството не е разпознато' ,hr: 'Uređaj nije autenticiran' ,it: 'Disp. non autenticato' - ,ja: '機器は認証されていません。' ,dk: 'Enhed ikke godkendt' ,fi: 'Laite ei ole autentikoitu' ,nb: 'Enhet ikke godkjent' @@ -4338,7 +3951,6 @@ function init() { ,sk: 'Zariadenie nieje overené' ,nl: 'Apparaat niet geauthenticeerd' ,ko: '미인증 기기' - ,tr: 'Cihaz kimliği doğrulanmamış' ,zh_cn: '设备未认证' ,zh_tw: '設備未認證' } @@ -4355,7 +3967,6 @@ function init() { ,hr: 'Status autentikacije' ,sv: 'Autentiseringsstatus' ,it: 'Stato di autenticazione' - ,ja: '認証ステータス' ,dk: 'Godkendelsesstatus' ,fi: 'Autentikoinnin tila' ,nb: 'Autentiseringsstatus' @@ -4364,7 +3975,6 @@ function init() { ,sk: 'Stav overenia' ,nl: 'Authenticatie status' ,ko: '인증 상태' - ,tr: 'Kimlik doğrulama durumu' ,zh_cn: '认证状态' ,zh_tw: '認證狀態' } @@ -4381,7 +3991,6 @@ function init() { ,bg: 'Удостоверяване' ,hr: 'Autenticirati' ,it: 'Autenticare' - ,ja: '認証' ,dk: 'Godkende' ,fi: 'Autentikoi' ,nb: 'Autentiser' @@ -4390,7 +3999,6 @@ function init() { ,sk: 'Overiť' ,nl: 'Authenticatie' ,ko: '인증' - ,tr: 'Kimlik doğrulaması' ,zh_cn: '认证' ,zh_tw: '認證' } @@ -4407,7 +4015,6 @@ function init() { ,hr: 'Ukloniti' ,sv: 'Ta bort' ,it: 'Rimuovere' - ,ja: '除く' ,dk: 'Fjern' ,fi: 'Poista' ,nb: 'Slett' @@ -4416,7 +4023,6 @@ function init() { ,sk: 'Odstrániť' ,nl: 'Verwijder' ,ko: '삭제' - ,tr: 'Kaldır' ,zh_cn: '取消' ,zh_tw: '取消' } @@ -4433,7 +4039,6 @@ function init() { ,hr: 'Vaš uređaj još nije autenticiran' ,sv: 'Din enhet är ej autentiserad' ,it: 'Il tuo dispositivo non è ancora stato autenticato' - ,ja: '機器はまだ承認されていません。' ,dk: 'Din enhed er ikke godkendt endnu' ,fi: 'Laitettasi ei ole vielä autentikoitu' ,nb: 'Din enhet er ikke godkjent enda' @@ -4442,7 +4047,6 @@ function init() { ,sk: 'Toto zariadenie zatiaľ nebolo overené' ,nl: 'Uw apparaat is nog niet geauthenticeerd' ,ko: '당신의 기기는 아직 인증되지 않았습니다.' - ,tr: 'Cihazınız henüz doğrulanmamış' ,zh_cn: '此设备还未进行认证' ,zh_tw: '這個設備還未進行認證' } @@ -4458,7 +4062,6 @@ function init() { ,bg: 'Сензор' ,hr: 'Senzor' ,it: 'Sensore' - ,ja: 'センサー' ,dk: 'Sensor' ,fi: 'Sensori' ,nb: 'Sensor' @@ -4468,7 +4071,6 @@ function init() { ,sk: 'Senzor' ,nl: 'Sensor' ,ko: '센서' - ,tr: 'Sensor' ,zh_cn: 'CGM探头' } ,'Finger' : { @@ -4483,7 +4085,6 @@ function init() { ,bg: 'От пръстта' ,hr: 'Prst' ,it: 'Dito' - ,ja: '指' ,dk: 'Finger' ,fi: 'Sormi' ,nb: 'Finger' @@ -4493,7 +4094,6 @@ function init() { ,sk: 'Glukomer' ,nl: 'Vinger' ,ko: '손가락' - ,tr: 'Parmak' ,zh_cn: '手指' } ,'Manual' : { @@ -4508,7 +4108,6 @@ function init() { ,bg: 'Ръчно' ,hr: 'Ručno' ,it: 'Manuale' - ,ja: '手動入力' ,dk: 'Manuel' ,fi: 'Manuaalinen' ,nb: 'Manuell' @@ -4518,7 +4117,6 @@ function init() { ,sk: 'Ručne' ,nl: 'Handmatig' ,ko: '수' - ,tr: 'Elle' ,zh_cn: '手动' } ,'Scale' : { @@ -4534,7 +4132,6 @@ function init() { ,hr: 'Skala' ,sv: 'Skala' ,it: 'Scala' - ,ja: 'グラフ縦軸' ,dk: 'Skala' ,fi: 'Skaala' ,nb: 'Skala' @@ -4543,7 +4140,6 @@ function init() { ,sk: 'Mierka' ,nl: 'Schaal' ,ko: '규모' - ,tr: 'Ölçek' ,zh_cn: '函数' ,zh_tw: '函數' } @@ -4559,7 +4155,6 @@ function init() { ,bg: 'Линейна' ,hr: 'Linearno' ,it: 'Lineare' - ,ja: '線形軸表示' ,dk: 'Lineær' ,fi: 'Lineaarinen' ,nb: 'Lineær' @@ -4569,7 +4164,6 @@ function init() { ,sk: 'Lineárne' ,nl: 'Lineair' ,ko: 'Linear' - ,tr: 'Doğrusal' //çizgisel ,zh_cn: '线性' ,zh_tw: '線性' } @@ -4585,7 +4179,6 @@ function init() { ,bg: 'Логоритмична' ,hr: 'Logaritamski' ,it: 'Logaritmica' - ,ja: '対数軸表示' ,dk: 'Logaritmisk' ,fi: 'Logaritminen' ,nb: 'Logaritmisk' @@ -4595,7 +4188,6 @@ function init() { ,sk: 'Logaritmické' ,nl: 'Logaritmisch' ,ko: '다수' - ,tr: 'Logaritmik' ,zh_cn: '对数' ,zh_tw: '對數' } @@ -4606,7 +4198,6 @@ function init() { ,es: 'Logarítmo (Dinámico)' ,dk: 'Logaritmisk (Dynamisk)' ,it: 'Logaritmica (Dinamica)' - ,ja: '対数軸(動的)表示' ,fr: 'Logarithmique (Dynamique)' ,el: 'Λογαριθμική (Δυναμική)' ,ro: 'Logaritmic (Dinamic)' @@ -4620,7 +4211,6 @@ function init() { ,sk: 'Logaritmické (Dynamické)' ,nl: 'Logaritmisch (Dynamisch)' ,ko: '다수(동적인)' - ,tr: 'Logaritmik (Dinamik)' ,zh_cn: '对数(动态)' ,zh_tw: '對數(動態)' } @@ -4632,7 +4222,6 @@ function init() { ,fr: 'Insuline à bord' ,dk: 'Aktivt insulin (IOB)' ,it: 'IOB-Insulina a Bordo' - ,ja: 'IOB・残存インスリン' ,nb: 'AI' ,el: 'Ενεργή Ινσουλίνη (IOB)' ,ro: 'IOB-Insulină activă' @@ -4641,11 +4230,10 @@ function init() { ,sv: 'Aktivt insulin (IOB)' ,pl: 'Aktywna insulina (IOB)' ,pt: 'Insulina ativa' - ,ru: 'Активный инсулин IOB' + ,ru: 'Активный инсулин' ,sk: 'Aktívny inzulín (IOB)' ,nl: 'Actieve insuline (IOB)' ,ko: 'IOB' - ,tr: 'Aktif İnsülin (IOB)' ,zh_cn: '活性胰岛素(IOB)' ,zh_tw: '活性胰島素(IOB)' } @@ -4657,7 +4245,6 @@ function init() { ,fr: 'Glucides à bord' ,dk: 'Aktive kulhydrater (COB)' ,it: 'COB-Carboidrati a Bordo' - ,ja: 'COB・残存カーボ' ,nb: 'AK' ,el: 'Ενεργοί Υδατάνθρακες (COB)' ,ro: 'COB-Carbohidrați activi' @@ -4666,23 +4253,21 @@ function init() { ,sv: 'Aktiva kolhydrater (COB)' ,pl: 'Aktywne wglowodany (COB)' ,pt: 'Carboidratos ativos' - ,ru: 'Активные углеводы COB' + ,ru: 'Активные углеводы' ,sk: 'Aktívne sacharidy (COB)' ,nl: 'Actieve koolhydraten (COB)' ,ko: 'COB' - ,tr: 'Aktif Karbonhidrat (COB)' ,zh_cn: '活性碳水化合物(COB)' ,zh_tw: '活性碳水化合物(COB)' } ,'Bolus Wizard Preview' : { cs: 'BWP-Náhled bolusového kalk.' ,he: 'סקירת אשף הבולוס' - ,de: 'Bolus-Kalkulator Vorschau (BWP)' + ,de: 'Bolus-Kalkulator Vorschau' ,es: 'Vista previa del cálculo del bolo' ,fr: 'Prévue du Calculatuer de bolus' ,dk: 'Bolus Wizard (BWP)' ,it: 'BWP-Calcolatore di bolo' - ,ja: 'BWP・ボーラスウィザード参照' ,nb: 'Boluskalkulator' ,el: 'Εργαλείο Εκτίμησης Επάρκειας Ινσουλίνης (BWP)' ,ro: 'BWP-Sugestie de bolusare' @@ -4695,7 +4280,6 @@ function init() { ,sk: 'Bolus Wizard' ,nl: 'Bolus Wizard Preview (BWP)' ,ko: 'Bolus 마법사 미리보기' - ,tr: 'Bolus hesaplama Sihirbazı Önizlemesi (BWP)' //İnsülin etkinlik süresi hesaplaması ,zh_cn: '大剂量向导预览(BWP)' ,zh_tw: '大劑量嚮導預覽(BWP)' } @@ -4707,7 +4291,6 @@ function init() { ,fr: 'Valeur chargée' ,dk: 'Værdi indlæst' ,it: 'Valori Caricati' - ,ja: '数値読み込み完了' ,nb: 'Verdi lastet' ,el: 'Τιμή ανακτήθηκε' ,ro: 'Valoare încărcată' @@ -4720,7 +4303,6 @@ function init() { ,nl: 'Waarde geladen' ,sk: 'Hodnoty načítané' ,ko: '값이 로드됨' - ,tr: 'Yüklenen Değer' ,zh_cn: '数值已读取' ,zh_tw: '數值已讀取' } @@ -4730,9 +4312,8 @@ function init() { ,de: 'Kanülenalter' ,es: 'Antigüedad cánula' ,fr: 'Age de la canule' - ,dk: 'Indstik alder (CAGE)' + ,dk: 'Insuflon alder (CAGE)' ,it: 'CAGE-Cambio Ago' - ,ja: 'CAGE・カニューレ使用日数' ,el: 'Ημέρες Χρήσης Κάνουλας (CAGE)' ,nb: 'Nålalder' ,ro: 'CAGE-Vechime canulă' @@ -4745,7 +4326,6 @@ function init() { ,sk: 'Zavedenie kanyly (CAGE)' ,nl: 'Canule leeftijd (CAGE)' ,ko: '캐뉼라 사용기간' - ,tr: 'Kanül yaşı' ,zh_cn: '管路使用时间(CAGE)' ,zh_tw: '管路使用時間(CAGE)' } @@ -4757,7 +4337,6 @@ function init() { ,fr: 'Profil Basal' ,dk: 'Basal profil' ,it: 'BASAL-Profilo Basale' - ,ja: 'ベーサルプロフィール' ,el: 'Προφίλ Βασικής Ινσουλίνης (BASAL)' ,nb: 'Basalprofil' ,ro: 'Profil bazală' @@ -4766,11 +4345,10 @@ function init() { ,sv: 'Basalprofil' ,pl: 'Profil dawki bazowej' ,pt: 'Perfil de Basal' - ,ru: 'Профиль Базала' + ,ru: 'Профиль Базального' ,sk: 'Bazál' ,nl: 'Basaal profiel' ,ko: 'Basal 프로파일' - ,tr: 'Bazal Profil' ,zh_cn: '基础率配置文件' ,zh_tw: '基礎率配置文件' } @@ -4787,7 +4365,6 @@ function init() { ,hr: 'Tišina 30 minuta' ,sv: 'Tyst i 30 min' ,it: 'Silenzio per 30 minuti' - ,ja: '30分静かにする' ,dk: 'Stilhed i 30 min' ,fi: 'Hiljennä 30 minuutiksi' ,nb: 'Stille i 30 min' @@ -4796,7 +4373,6 @@ function init() { ,sk: 'Stíšiť na 30 minút' ,nl: 'Sluimer 30 minuten' ,ko: '30분간 무음' - ,tr: '30 dakika sessizlik' ,zh_cn: '静音30分钟' ,zh_tw: '靜音30分鐘' } @@ -4813,7 +4389,6 @@ function init() { ,hr: 'Tišina 60 minuta' ,sv: 'Tyst i 60 min' ,it: 'Silenzio per 60 minuti' - ,ja: '60分静かにする' ,dk: 'Stilhed i 60 min' ,fi: 'Hiljennä tunniksi' ,nb: 'Stille i 60 min' @@ -4822,7 +4397,6 @@ function init() { ,sk: 'Stíšiť na 60 minút' ,nl: 'Sluimer 60 minuten' ,ko: '60분간 무음' - ,tr: '60 dakika sessizlik' ,zh_cn: '静音60分钟' ,zh_tw: '靜音60分鐘' } @@ -4839,7 +4413,6 @@ function init() { ,hr: 'Tišina 90 minuta' ,sv: 'Tyst i 90 min' ,it: 'Silenzio per 90 minuti' - ,ja: '90分静かにする' ,dk: 'Stilhed i 90 min' ,fi: 'Hiljennä 1.5 tunniksi' ,nb: 'Stille i 90 min' @@ -4848,7 +4421,6 @@ function init() { ,sk: 'Stíšiť na 90 minút' ,nl: 'Sluimer 90 minuten' ,ko: '90분간 무음' - ,tr: '90 dakika sessizlik' ,zh_cn: '静音90分钟' ,zh_tw: '靜音90分鐘' } @@ -4865,7 +4437,6 @@ function init() { ,hr: 'Tišina 120 minuta' ,sv: 'Tyst i 120 min' ,it: 'Silenzio per 120 minuti' - ,ja: '120分静かにする' ,dk: 'Stilhed i 120 min' ,fi: 'Hiljennä 2 tunniksi' ,nb: 'Stile i 120 min' @@ -4874,7 +4445,6 @@ function init() { ,sk: 'Stíšiť na 120 minút' ,nl: 'Sluimer 2 uur' ,ko: '120분간 무음' - ,tr: '120 dakika sessizlik' ,zh_cn: '静音2小时' ,zh_tw: '靜音2小時' } @@ -4890,7 +4460,6 @@ function init() { ,bg: '2часа' ,hr: '2h' ,it: '2ORE' - ,ja: '2時間' ,dk: '2t' ,fi: '2h' ,nb: '2t' @@ -4899,7 +4468,6 @@ function init() { ,sk: '2 hod' ,nl: '2uur' ,ko: '2시간' - ,tr: '2sa.' ,zh_cn: '2小时' ,zh_tw: '2小時' } @@ -4916,7 +4484,6 @@ function init() { ,bg: '3часа' ,hr: '3h' ,it: '3ORE' - ,ja: '3時間' ,dk: '3t' ,fi: '3h' ,nb: '3t' @@ -4925,7 +4492,6 @@ function init() { ,sk: '3 hod' ,nl: '3uur' ,ko: '3시간' - ,tr: '3sa.' ,zh_cn: '3小时' ,zh_tw: '3小時' } @@ -4942,7 +4508,6 @@ function init() { ,bg: '6часа' ,hr: '6h' ,it: '6ORE' - ,ja: '6時間' ,dk: '6t' ,fi: '6h' ,nb: '6t' @@ -4951,7 +4516,6 @@ function init() { ,sk: '6 hod' ,nl: '6uur' ,ko: '6시간' - ,tr: '6sa.' ,zh_cn: '6小时' ,zh_tw: '6小時' } @@ -4968,8 +4532,7 @@ function init() { ,bg: '12часа' ,hr: '12h' ,it: '12ORE' - ,ja: '12時間' - ,dk: '12t' + ,dk: '12tim' ,fi: '12h' ,nb: '12t' ,pl: '12h' @@ -4977,7 +4540,6 @@ function init() { ,sk: '12 hod' ,nl: '12uur' ,ko: '12시간' - ,tr: '12sa.' ,zh_cn: '12小时' ,zh_tw: '12小時' } @@ -4994,7 +4556,6 @@ function init() { ,bg: '24часа' ,hr: '24h' ,it: '24ORE' - ,ja: '24時間' ,dk: '24t' ,fi: '24h' ,nb: '24t' @@ -5003,7 +4564,6 @@ function init() { ,sk: '24 hod' ,nl: '24uur' ,ko: '24시간' - ,tr: '24sa.' ,zh_cn: '24小时' ,zh_tw: '24小時' } @@ -5020,7 +4580,6 @@ function init() { ,bg: 'Настройки' ,hr: 'Postavke' ,it: 'Impostazioni' - ,ja: '設定' ,dk: 'Indstillinger' ,fi: 'Asetukset' ,nb: 'Innstillinger' @@ -5029,7 +4588,6 @@ function init() { ,sk: 'Nastavenia' ,nl: 'Instellingen' ,ko: '설정' - ,tr: 'Ayarlar' ,zh_cn: '设置' ,zh_tw: '設置' } @@ -5054,7 +4612,6 @@ function init() { ,sk: 'Jednotky' ,nl: 'Eenheden' ,ko: '단위' - ,tr: 'Birim' //Birim Ünite ,zh_cn: '计量单位' ,zh_tw: '计量單位' } @@ -5071,7 +4628,6 @@ function init() { ,bg: 'Формат на датата' ,hr: 'Format datuma' ,it: 'Formato data' - ,ja: '日数初期化' ,dk: 'Dato format' ,fi: 'Aikamuoto' ,nb: 'Datoformat' @@ -5080,7 +4636,6 @@ function init() { ,sk: 'Formát času' ,nl: 'Datum formaat' ,ko: '날짜 형식' - ,tr: 'Veri formatı' ,zh_cn: '时间格式' ,zh_tw: '時間格式' } @@ -5097,7 +4652,6 @@ function init() { ,bg: '12 часа' ,hr: '12 sati' ,it: '12 ore' - ,ja: '12時間制' ,dk: '12 timer' ,fi: '12 tuntia' ,nb: '12 timer' @@ -5106,7 +4660,6 @@ function init() { ,sk: '12 hodín' ,nl: '12 uur' ,ko: '12 시간' - ,tr: '12 saat' ,zh_cn: '12小时制' ,zh_tw: '12小時制' } @@ -5123,7 +4676,6 @@ function init() { ,bg: '24 часа' ,hr: '24 sata' ,it: '24 ore' - ,ja: '24時間制' ,dk: '24 timer' ,fi: '24 tuntia' ,nb: '24 timer' @@ -5132,7 +4684,6 @@ function init() { ,sk: '24 hodín' ,nl: '24 uur' ,ko: '24 시간' - ,tr: '24 saat' ,zh_cn: '24小时制' ,zh_tw: '24小時制' } @@ -5148,7 +4699,6 @@ function init() { ,hr: 'Evidencija tretmana' ,sv: 'Ange händelse' ,it: 'Somministrazioni' - ,ja: '治療を記録' ,dk: 'Log en hændelse' ,fi: 'Tallenna tapahtuma' ,nb: 'Logg en hendelse' @@ -5158,7 +4708,6 @@ function init() { ,sk: 'Záznam ošetrenia' ,nl: 'Registreer een behandeling' ,ko: 'Treatment 로그' - ,tr: 'Tedaviyi günlüğe kaydet' ,zh_cn: '记录操作' } ,'BG Check' : { @@ -5173,7 +4722,6 @@ function init() { ,bg: 'Проверка на КЗ' ,hr: 'Kontrola GUK-a' ,it: 'Controllo Glicemia' - ,ja: 'BG測定' ,dk: 'BS kontrol' ,fi: 'Verensokerin tarkistus' ,nb: 'Blodsukkerkontroll' @@ -5183,7 +4731,6 @@ function init() { ,sk: 'Kontrola glykémie' ,nl: 'Bloedglucose check' ,ko: '혈당 체크' - ,tr: 'KŞ Kontol' ,zh_cn: '测量血糖' } ,'Meal Bolus' : { @@ -5198,7 +4745,6 @@ function init() { ,hr: 'Bolus za obrok' ,sv: 'Måltidsbolus' ,it: 'Bolo Pasto' - ,ja: '食事ボーラス' ,dk: 'Måltidsbolus' ,fi: 'Ruokailubolus' ,nb: 'Måltidsbolus' @@ -5208,7 +4754,6 @@ function init() { ,sk: 'Bolus na jedlo' ,nl: 'Maaltijd bolus' ,ko: '식사 인슐린' - ,tr: 'Yemek bolus' ,zh_cn: '正餐大剂量' } ,'Snack Bolus' : { @@ -5223,7 +4768,6 @@ function init() { ,bg: 'Болус-лека закуска' ,hr: 'Bolus za užinu' ,it: 'Bolo Merenda' - ,ja: '間食ボーラス' ,dk: 'Mellemmåltidsbolus' ,fi: 'Ruokakorjaus' ,nb: 'Mellommåltidsbolus' @@ -5233,7 +4777,6 @@ function init() { ,sk: 'Bolus na desiatu/olovrant' ,nl: 'Snack bolus' ,ko: '스넥 인슐린' - ,tr: 'Aperatif (Snack) Bolus' ,zh_cn: '加餐大剂量' } ,'Correction Bolus' : { @@ -5248,7 +4791,6 @@ function init() { ,hr: 'Korekcija' ,sv: 'Korrektionsbolus' ,it: 'Bolo Correttivo' - ,ja: '補正ボーラス' ,dk: 'Korrektionsbolus' ,fi: 'Korjausbolus' ,nb: 'Korreksjonsbolus' @@ -5258,7 +4800,6 @@ function init() { ,sk: 'Korekčný bolus' ,nl: 'Correctie bolus' ,ko: '수정 인슐린' - ,tr: 'Düzeltme Bolusu' ,zh_cn: '临时大剂量' } ,'Carb Correction' : { @@ -5273,7 +4814,6 @@ function init() { ,hr: 'Bolus za hranu' ,sv: 'Kolhydratskorrektion' ,it: 'Carboidrati Correttivi' - ,ja: 'カーボ治療' ,dk: 'Kulhydratskorrektion' ,fi: 'Hiilihydraattikorjaus' ,nb: 'Karbohydratkorrigering' @@ -5283,7 +4823,6 @@ function init() { ,sk: 'Prídavok sacharidov' ,nl: 'Koolhydraat correctie' ,ko: '탄수화물 수정' - ,tr: 'Karbonhidrat Düzeltme' ,zh_cn: '碳水修正' } ,'Note' : { @@ -5298,7 +4837,6 @@ function init() { ,bg: 'Бележка' ,hr: 'Bilješka' ,it: 'Nota' - ,ja: 'メモ' ,dk: 'Note' ,fi: 'Merkintä' ,nb: 'Notat' @@ -5308,7 +4846,6 @@ function init() { ,sk: 'Poznámka' ,nl: 'Notitie' ,ko: '메모' - ,tr: 'Not' ,zh_cn: '备忘' } ,'Question' : { @@ -5323,7 +4860,6 @@ function init() { ,bg: 'Въпрос' ,hr: 'Pitanje' ,it: 'Domanda' - ,ja: '質問' ,dk: 'Spørgsmål' ,fi: 'Kysymys' ,nb: 'Spørsmål' @@ -5333,7 +4869,6 @@ function init() { ,sk: 'Otázka' ,nl: 'Vraag' ,ko: '질문' - ,tr: 'Soru' ,zh_cn: '问题' } ,'Exercise' : { @@ -5348,7 +4883,6 @@ function init() { ,bg: 'Спорт' ,hr: 'Aktivnost' ,it: 'Esercizio Fisico' - ,ja: '運動' ,dk: 'Træning' ,fi: 'Fyysinen harjoitus' ,nb: 'Trening' @@ -5358,7 +4892,6 @@ function init() { ,sk: 'Cvičenie' ,nl: 'Beweging / sport' ,ko: '운동' - ,tr: 'Egzersiz' ,zh_cn: '运动' } ,'Pump Site Change' : { @@ -5373,7 +4906,6 @@ function init() { ,bg: 'Смяна на сет' ,hr: 'Promjena seta' ,it: 'CAGE-Cambio Ago' - ,ja: 'CAGE・ポンプ注入場所変更' ,dk: 'Skift insulin infusionssted' ,fi: 'Kanyylin vaihto' ,nb: 'Pumpebytte' @@ -5383,7 +4915,6 @@ function init() { ,sk: 'Výmena setu' ,nl: 'Nieuwe pomp infuus' ,ko: '펌프 위치 변경' - ,tr: 'Pompa Kanül değişimi' ,zh_cn: '更换胰岛素输注部位' } ,'CGM Sensor Start' : { @@ -5398,7 +4929,6 @@ function init() { ,bg: 'Ре/Стартиране на сензор' ,hr: 'Start senzora' ,it: 'CGM Avvio sensore' - ,ja: 'CGMセンサー開始' ,dk: 'Sensorstart' ,fi: 'Sensorin aloitus' ,nb: 'Sensorstart' @@ -5408,34 +4938,8 @@ function init() { ,sk: 'Spustenie senzoru' ,nl: 'CGM Sensor start' ,ko: 'CGM 센서 시작' - ,tr: 'CGM Sensörü Başlat' ,zh_cn: '启动CGM(连续血糖监测)探头' } - ,'CGM Sensor Stop' : { - cs: 'CGM Sensor Stop' - ,de: 'CGM Sensor Stop' - ,es: 'CGM Sensor Stop' - ,fr: 'CGM Sensor Stop' - ,el: 'CGM Sensor Stop' - ,pt: 'CGM Sensor Stop' - ,sv: 'CGM Sensor Stop' - ,ro: 'CGM Sensor Stop' - ,bg: 'CGM Sensor Stop' - ,hr: 'CGM Sensor Stop' - ,it: 'CGM Sensor Stop' - ,ja: 'CGM Sensor Stop' - ,dk: 'CGM Sensor Stop' - ,fi: 'CGM Sensor Stop' - ,nb: 'CGM Sensor Stop' - ,he: 'CGM Sensor Stop' - ,pl: 'CGM Sensor Stop' - ,ru: 'CGM Sensor Stop' - ,sk: 'CGM Sensor Stop' - ,nl: 'CGM Sensor Stop' - ,ko: 'CGM Sensor Stop' - ,tr: 'CGM Sensor Stop' - ,zh_cn: 'CGM Sensor Stop' - } ,'CGM Sensor Insert' : { cs: 'Výměna sensoru' ,de: 'CGM Sensor Wechsel' @@ -5448,7 +4952,6 @@ function init() { ,bg: 'Смяна на сензор' ,hr: 'Promjena senzora' ,it: 'CGM Cambio sensore' - ,ja: 'CGMセンサー挿入' ,dk: 'Sensor ombytning' ,fi: 'Sensorin vaihto' ,nb: 'Sensorbytte' @@ -5458,7 +4961,6 @@ function init() { ,sk: 'Výmena senzoru' ,nl: 'CGM sensor wissel' ,ko: 'CGM 센서 삽입' - ,tr: 'CGM Sensor yerleştir' ,zh_cn: '植入CGM(连续血糖监测)探头' } ,'Dexcom Sensor Start' : { @@ -5473,7 +4975,6 @@ function init() { ,bg: 'Ре/Стартиране на Декском сензор' ,hr: 'Start Dexcom senzora' ,it: 'Avvio sensore Dexcom' - ,ja: 'Dexcomセンサー開始' ,dk: 'Dexcom sensor start' ,fi: 'Sensorin aloitus' ,nb: 'Dexcom sensor start' @@ -5483,7 +4984,6 @@ function init() { ,sk: 'Spustenie senzoru DEXCOM' ,nl: 'Dexcom sensor start' ,ko: 'Dexcom 센서 시작' - ,tr: 'Dexcom Sensör Başlat' ,zh_cn: '启动Dexcom探头' } ,'Dexcom Sensor Change' : { @@ -5498,7 +4998,6 @@ function init() { ,bg: 'Смяна на Декском сензор' ,hr: 'Promjena Dexcom senzora' ,it: 'Cambio sensore Dexcom' - ,ja: 'Dexcomセンサー挿入' ,dk: 'Dexcom sensor ombytning' ,fi: 'Sensorin vaihto' ,nb: 'Dexcom sensor bytte' @@ -5508,7 +5007,6 @@ function init() { ,sk: 'Výmena senzoru DEXCOM' ,nl: 'Dexcom sensor wissel' ,ko: 'Dexcom 센서 교체' - ,tr: 'Dexcom Sensör değiştir' ,zh_cn: '更换Dexcom探头' } ,'Insulin Cartridge Change' : { @@ -5523,7 +5021,6 @@ function init() { ,bg: 'Смяна на резервоар' ,hr: 'Promjena spremnika inzulina' ,it: 'Cambio cartuccia insulina' - ,ja: 'インスリンリザーバー交換' ,dk: 'Skift insulin beholder' ,fi: 'Insuliinisäiliön vaihto' ,nb: 'Skifte insulin beholder' @@ -5533,7 +5030,6 @@ function init() { ,sk: 'Výmena inzulínu' ,nl: 'Insuline cartridge wissel' ,ko: '인슐린 카트리지 교체' - ,tr: 'İnsülin rezervuar değişimi' ,zh_cn: '更换胰岛素储液器' } ,'D.A.D. Alert' : { @@ -5548,7 +5044,6 @@ function init() { ,bg: 'Сигнал от обучено куче' ,hr: 'Obavijest dijabetičkog psa' ,it: 'Allarme D.A.D.(Diabete Alert Dog)' - ,ja: 'メディカルアラート犬(DAD)の知らせ' ,dk: 'Vuf Vuf! (Diabeteshundealarm!)' ,fi: 'Diabeteskoirahälytys' ,nb: 'Diabeteshundalarm' @@ -5558,7 +5053,6 @@ function init() { ,sk: 'Upozornenie signálneho psa' ,nl: 'Hulphond waarschuwing' ,ko: 'D.A.D(Diabetes Alert Dog) 알림' - ,tr: 'D.A.D(Diabetes Alert Dog)' ,zh_cn: 'D.A.D(低血糖通报犬)警告' } ,'Glucose Reading' : { @@ -5582,7 +5076,6 @@ function init() { ,sk: 'Hodnota glykémie' ,nl: 'Glucose meting' ,ko: '혈당 읽기' - ,tr: 'Glikoz Değeri' ,zh_cn: '血糖数值' } ,'Measurement Method' : { @@ -5597,7 +5090,6 @@ function init() { ,bg: 'Метод на измерване' ,hr: 'Metoda mjerenja' ,it: 'Metodo di misurazione' - ,ja: '測定方法' ,dk: 'Målemetode' ,fi: 'Mittaustapa' ,nb: 'Målemetode' @@ -5607,7 +5099,6 @@ function init() { ,sk: 'Metóda merania' ,nl: 'Meetmethode' ,ko: '측정 방법' - ,tr: 'Ölçüm Metodu' ,zh_cn: '测量方法' } ,'Meter' : { @@ -5622,8 +5113,7 @@ function init() { ,bg: 'Глюкомер' ,hr: 'Glukometar' ,it: 'Glucometro' - ,ja: '血糖測定器' - ,dk: 'Blodsukkermåler' + ,dk: 'Glukosemeter' ,fi: 'Sokerimittari' ,nb: 'Måleapparat' ,he: 'מד סוכר' @@ -5632,7 +5122,6 @@ function init() { ,sk: 'Glukomer' ,nl: 'Glucosemeter' ,ko: '혈당 측정기' - ,tr: 'Glikometre' ,zh_cn: '血糖仪' } ,'Insulin Given' : { @@ -5647,7 +5136,6 @@ function init() { ,bg: 'Инсулин' ,hr: 'Količina iznulina' ,it: 'Insulina' - ,ja: '投与されたインスリン' ,dk: 'Insulin dosis' ,fi: 'Insuliiniannos' ,nb: 'Insulin' @@ -5657,7 +5145,6 @@ function init() { ,sk: 'Podaný inzulín' ,nl: 'Toegediende insuline' ,ko: '인슐린 요구량' - ,tr: 'Verilen İnsülin' ,zh_cn: '胰岛素输注量' } ,'Amount in grams' : { @@ -5672,7 +5159,6 @@ function init() { ,bg: 'К-во в грамове' ,hr: 'Količina u gramima' ,it: 'Quantità in grammi' - ,ja: 'グラム換算' ,dk: 'Antal gram' ,fi: 'Määrä grammoissa' ,nb: 'Antall gram' @@ -5682,7 +5168,6 @@ function init() { ,sk: 'Množstvo v gramoch' ,nl: 'Hoeveelheid in gram' ,ko: '합계(grams)' - ,tr: 'Gram cinsinden miktar' ,zh_cn: '总量(g)' } ,'Amount in units' : { @@ -5697,7 +5182,6 @@ function init() { ,hr: 'Količina u jedinicama' ,sv: 'Antal enheter' ,it: 'Quantità in unità' - ,ja: '単位換算' ,dk: 'Antal enheder' ,fi: 'Annos yksiköissä' ,nb: 'Antall enheter' @@ -5707,7 +5191,6 @@ function init() { ,sk: 'Množstvo v jednotkách' ,nl: 'Aantal in eenheden' ,ko: '합계(units)' - ,tr: 'Birim miktarı' ,zh_cn: '总量(U)' } ,'View all treatments' : { @@ -5722,7 +5205,6 @@ function init() { ,bg: 'Преглед на всички събития' ,hr: 'Prikaži sve tretmane' ,it: 'Visualizza tutti le somministrazioni' - ,ja: '全治療内容を参照' ,dk: 'Vis behandlinger' ,fi: 'Katso kaikki hoitotoimenpiteet' ,nb: 'Vis behandlinger' @@ -5732,7 +5214,6 @@ function init() { ,sk: 'Zobraziť všetky ošetrenia' ,nl: 'Bekijk alle behandelingen' ,ko: '모든 treatments 보기' - ,tr: 'Tüm tedavileri görüntüle' ,zh_cn: '查看所有操作' } ,'Enable Alarms' : { @@ -5747,7 +5228,6 @@ function init() { ,bg: 'Активни аларми' ,hr: 'Aktiviraj alarme' ,it: 'Attiva Allarme' - ,ja: 'アラームを有効にする' ,dk: 'Aktivere alarmer' ,fi: 'Aktivoi hälytykset' ,nb: 'Aktiver alarmer' @@ -5757,45 +5237,32 @@ function init() { ,sk: 'Aktivovať alarmy' ,nl: 'Alarmen aan!' ,ko: '알람 켜기' - ,tr: 'Alarmları Etkinleştir' ,zh_cn: '启用报警' ,zh_tw: '啟用報警' } ,'Pump Battery Change' : { nl: 'Pompbatterij vervangen' ,sv: 'Byte av pumpbatteri' - ,dk: 'Udskift pumpebatteri' ,de: 'Pumpenbatterie wechseln' ,fi: 'Pumpun patterin vaihto' ,bg: 'Смяна на батерия на помпата' - ,ja: 'ポンプバッテリー交換' ,pl: 'Zmiana baterii w pompie' - ,ru: 'замена батареи помпы' - ,tr: 'Pompa pil değişimi' } ,'Pump Battery Low Alarm' : { nl: 'Pompbatterij bijna leeg Alarm' ,sv: 'Pumpbatteri lågt Alarm' - ,dk: 'Pumpebatteri lav Alarm' ,de: 'Pumpenbatterie niedrig Alarm' ,fi: 'Varoitus! Pumpun patteri loppumassa' ,bg: 'Аларма за слаба батерия на помпата' - ,ja: 'ポンプバッテリーが低下' ,pl: 'Alarm! Niski poziom baterii w pompie' - ,ru: 'Внимание! низкий заряд батареи помпы' - ,tr: 'Pompa Düşük pil alarmı' } ,'Pump Battery change overdue!' : { // batteryage.js nl: 'Pompbatterij moet vervangen worden!' ,sv: 'Pumpbatteriet måste bytas!' - ,dk: 'Pumpebatteri skal skiftes!' ,de: 'Pumpenbatterie Wechsel überfällig!' ,fi: 'Pumpun patterin vaihto myöhässä!' ,bg: 'Смяната на батерията на помпата - наложителна' - ,ja: 'ポンプバッテリー交換期限切れてます!' , pl: 'Bateria pompy musi być wymieniona!' - ,ru: 'пропущен срок замены батареи!' - ,tr: 'Pompa pil değişimi gecikti!' } ,'When enabled an alarm may sound.' : { cs: 'Při povoleném alarmu zní zvuk' @@ -5809,7 +5276,6 @@ function init() { ,bg: 'Когато е активирано, алармата ще има звук' ,hr: 'Kad je aktiviran, alarm se može oglasiti' ,it: 'Quando si attiva un allarme acustico.' - ,ja: '有効にすればアラームが鳴動します。' ,dk: 'Når aktiveret kan alarm lyde' ,fi: 'Aktivointi mahdollistaa äänihälytykset' ,nb: 'Når aktivert er alarmer aktive' @@ -5819,7 +5285,6 @@ function init() { ,sk: 'Pri aktivovanom alarme znie zvuk ' ,nl: 'Als ingeschakeld kan alarm klinken' ,ko: '알림을 활성화 하면 알람이 울립니다.' - ,tr: 'Etkinleştirilirse, alarm çalar.' ,zh_cn: '启用后可发出声音报警' ,zh_tw: '啟用後可發出聲音報警' } @@ -5835,8 +5300,7 @@ function init() { ,bg: 'Много висока КЗ' ,hr: 'Hitni alarm za hiper' ,it: 'Urgente:Glicemia Alta' - ,ja: '緊急高血糖アラーム' - ,dk: 'Kritisk høj grænse overskredet' + ,dk: 'Kritisk grænse overskredet' ,fi: 'Kriittinen korkea' ,nb: 'Kritisk høy alarm' ,he: 'התראת גבוה דחופה' @@ -5845,7 +5309,6 @@ function init() { ,sk: 'Naliehavý alarm vysokej glykémie' ,nl: 'Urgent Alarm Hoge BG' ,ko: '긴급 고혈당 알람' - ,tr: 'Acil Yüksek Alarm' //Dikkat yüksek alarm ,zh_cn: '血糖过高报警' ,zh_tw: '血糖過高報警' } @@ -5861,7 +5324,6 @@ function init() { ,bg: 'Висока КЗ' ,hr: 'Alarm za hiper' ,it: 'Glicemia Alta' - ,ja: '高血糖アラーム' ,dk: 'Høj grænse overskredet' ,fi: 'Korkea verensokeri' ,nb: 'Høy alarm' @@ -5871,7 +5333,6 @@ function init() { ,sk: 'Alarm vysokej glykémie' ,nl: 'Alarm hoge BG' ,ko: '고혈당 알람' - ,tr: 'Yüksek Alarmı' ,zh_cn: '高血糖报警' ,zh_tw: '高血糖報警' } @@ -5887,7 +5348,6 @@ function init() { ,bg: 'Ниска КЗ' ,hr: 'Alarm za hipo' ,it: 'Glicemia bassa' - ,ja: '低血糖アラーム' ,dk: 'Lav grænse overskredet' ,fi: 'Matala verensokeri' ,nb: 'Lav alarm' @@ -5897,7 +5357,6 @@ function init() { ,sk: 'Alarm nízkej glykémie' ,nl: 'Alarm lage BG' ,ko: '저혈당 알람' - ,tr: 'Düşük Alarmı' ,zh_cn: '低血糖报警' ,zh_tw: '低血糖報警' } @@ -5913,7 +5372,6 @@ function init() { ,bg: 'Много ниска КЗ' ,hr: 'Hitni alarm za hipo' ,it: 'Urgente:Glicemia Bassa' - ,ja: '緊急低血糖アラーム' ,dk: 'Advarsel: Lav' ,fi: 'Kriittinen matala' ,nb: 'Kritisk lav alarm' @@ -5923,7 +5381,6 @@ function init() { ,sk: 'Naliehavý alarm nízkej glykémie' ,nl: 'Urgent Alarm lage BG' ,ko: '긴급 저혈당 알람' - ,tr: 'Acil Düşük Alarmı' ,zh_cn: '血糖过低报警' ,zh_tw: '血糖過低報警' } @@ -5940,7 +5397,6 @@ function init() { ,bg: 'Стари данни' ,hr: 'Pažnja: Stari podaci' ,it: 'Notifica Dati' - ,ja: '注意:古いデータ' ,dk: 'Advarsel: Gamle data' ,fi: 'Vanhat tiedot: varoitus' ,nb: 'Advarsel: Gamle data' @@ -5949,7 +5405,6 @@ function init() { ,sk: 'Varovanie: Zastaralé dáta' ,nl: 'Waarschuwing Oude gegevens na' ,ko: '손실 데이터 : 경고' - ,tr: 'Eski Veri: Uyarı' //Uyarı: veri artık geçerli değil ,zh_cn: '数据过期:提醒' ,zh_tw: '數據過期:提醒' } @@ -5966,7 +5421,6 @@ function init() { ,bg: 'Много стари данни' ,hr: 'Hitno: Stari podaci' ,it: 'Notifica:Urgente' - ,ja: '緊急:古いデータ' ,dk: 'Kritisk: Gamle data' ,fi: 'Vanhat tiedot: hälytys' ,nb: 'Advarsel: Veldig gamle data' @@ -5975,7 +5429,6 @@ function init() { ,sk: 'Naliehavé: Zastaralé dáta' ,nl: 'Urgente Waarschuwing Oude gegevens na' ,ko: '손실 데이터 : 긴급' - ,tr: 'Eski Veri: Acil' ,zh_cn: '数据过期:警告' ,zh_tw: '數據過期:警告' } @@ -5992,7 +5445,6 @@ function init() { ,bg: 'мин' ,hr: 'min' ,it: 'min' - ,ja: '分' ,dk: 'min' ,fi: 'minuuttia' ,nb: 'min' @@ -6001,7 +5453,6 @@ function init() { ,sk: 'min.' ,nl: 'minuten' ,ko: '분' - ,tr: 'dk.' ,zh_cn: '分' ,zh_tw: '分' } @@ -6018,8 +5469,7 @@ function init() { ,bg: 'Нощен режим' ,hr: 'Noćni način' ,it: 'Modalità Notte' - ,ja: '夜間モード' - ,dk: 'Nat tilstand' + ,dk: 'Nat mode' ,fi: 'Yömoodi' ,nb: 'Nattmodus' ,pl: 'Tryb nocny' @@ -6027,7 +5477,6 @@ function init() { ,sk: 'Nočný mód' ,nl: 'Nachtstand' ,ko: '나이트 모드' - ,tr: 'Gece Modu' ,zh_cn: '夜间模式' ,zh_tw: '夜間模式' } @@ -6044,7 +5493,6 @@ function init() { ,bg: 'Когато е активирано, страницата ще е затъмнена от 22-06ч' ,hr: 'Kad je uključen, stranica će biti zatamnjena od 22-06' ,it: 'Attivandola, la pagina sarà oscurata dalle 22:00-06:00.' - ,ja: '有効にすると、ページは 夜22時から 朝6時まで単色表示になります。' ,dk: 'Når aktiveret vil denne side nedtones fra 22:00-6:00' ,fi: 'Aktivoituna sivu himmenee kello 22 ja 06 välillä' ,nb: 'Når aktivert vil denne siden nedtones fra 22:00-06:00' @@ -6053,7 +5501,6 @@ function init() { ,sk: 'Keď je povolený, obrazovka bude stlmená od 22:00 do 6:00.' ,nl: 'Scherm dimmen tussen 22:00 en 06:00' ,ko: '페이지를 켜면 오후 10시 부터 오전 6시까지 비활성화 될 것이다.' - ,tr: 'Etkinleştirildiğinde, ekran akşam 22\'den sabah 6\'ya kadar kararır.' ,zh_cn: '启用后将在夜间22点至早晨6点降低页面亮度' ,zh_tw: '啟用後將在夜間22點至早晨6點降低頁面亮度' } @@ -6070,7 +5517,6 @@ function init() { ,bg: 'Активен' ,hr: 'Aktiviraj' ,it: 'Permettere' - ,ja: '有効' ,dk: 'Aktivere' ,fi: 'Aktivoi' ,nb: 'Aktiver' @@ -6079,7 +5525,6 @@ function init() { ,sk: 'Povoliť' ,nl: 'Activeren' ,ko: '활성화' - ,tr: 'Etkinleştir' ,zh_cn: '启用' ,zh_tw: '啟用' } @@ -6096,16 +5541,14 @@ function init() { ,bg: 'Показвай RAW данни' ,hr: 'Prikazuj sirove podatke o GUK-u' ,it: 'Mostra dati Raw BG' - ,ja: '素のBGデータを表示する' - ,dk: 'Vis rå BS data' + ,dk: 'Vis rå data' ,fi: 'Näytä raaka VS tieto' ,nb: 'Vis rådata' ,pl: 'Wyświetl surowe dane RAW' - ,ru: 'Показывать необработанные данные RAW' + ,ru: 'Показывать данные RAW' ,sk: 'Zobraziť RAW dáta' ,nl: 'Laat ruwe data zien' ,ko: 'Raw 혈당 데이터 보기' - ,tr: 'Ham KŞ verilerini göster' ,zh_cn: '显示原始血糖数据' ,zh_tw: '顯示原始血糖數據' } @@ -6122,7 +5565,6 @@ function init() { ,bg: 'Никога' ,hr: 'Nikad' ,it: 'Mai' - ,ja: '決して' ,dk: 'Aldrig' ,fi: 'Ei koskaan' ,nb: 'Aldri' @@ -6131,7 +5573,6 @@ function init() { ,sk: 'Nikdy' ,nl: 'Nooit' ,ko: '보지 않기' - ,tr: 'Hiçbir zaman' //Asla ,zh_cn: '不显示' ,zh_tw: '不顯示' } @@ -6148,7 +5589,6 @@ function init() { ,bg: 'Винаги' ,hr: 'Uvijek' ,it: 'Sempre' - ,ja: 'いつも' ,dk: 'Altid' ,fi: 'Aina' ,nb: 'Alltid' @@ -6157,7 +5597,6 @@ function init() { ,sk: 'Vždy' ,nl: 'Altijd' ,ko: '항상' - ,tr: 'Her zaman' ,zh_cn: '一直显示' ,zh_tw: '一直顯示' } @@ -6174,7 +5613,6 @@ function init() { ,bg: 'Когато има шум' ,hr: 'Kad postoji šum' ,it: 'Quando vi è rumore' - ,ja: '測定不良があった時' ,dk: 'Når der er støj' ,fi: 'Signaalihäiriöiden yhteydessä' ,nb: 'Når det er støy' @@ -6183,7 +5621,6 @@ function init() { ,sk: 'Pri šume' ,nl: 'Bij ruis' ,ko: '노이즈가 있을 때' - ,tr: 'Gürültü olduğunda' ,zh_cn: '当有噪声时显示' ,zh_tw: '當有噪聲時顯示' } @@ -6200,7 +5637,6 @@ function init() { ,bg: 'Когато е активно, малки бели точки ще показват RAW данните' ,hr: 'Kad je omogućeno, male bijele točkice će prikazivati sirove podatke o GUK-u.' ,it: 'Quando lo abiliti, visualizzerai piccoli puntini bianchi (raw BG data)' - ,ja: '有効にすると、小さい白ドットが素のBGデータ用に表示されます' ,dk: 'Ved aktivering vil små hvide prikker blive vist for rå BG tal' ,fi: 'Aktivoituna raaka VS tieto piirtyy aikajanalle valkoisina pisteinä' ,nb: 'Ved aktivering vil små hvite prikker bli vist for rå BG tall' @@ -6209,7 +5645,6 @@ function init() { ,sk: 'Keď je povolené, malé bodky budú zobrazovať RAW dáta.' ,nl: 'Indien geactiveerd is ruwe data zichtbaar als witte punten' ,ko: '활성화 하면 작은 흰점들이 raw 혈당 데이터를 표시하게 될 것이다.' - ,tr: 'Etkinleştirildiğinde, ham KŞ verileri için küçük beyaz noktalar görüntülenecektir.' ,zh_cn: '启用后将使用小白点标注原始血糖数据' ,zh_tw: '啟用後將使用小白點標註原始血糖數據' } @@ -6226,7 +5661,6 @@ function init() { ,bg: 'Име на страницата' ,hr: 'Vlastiti naziv' ,it: 'Titolo personalizzato' - ,ja: 'カスタムタイトル' ,dk: 'Valgfri titel' ,fi: 'Omavalintainen otsikko' ,nb: 'Egen tittel' @@ -6235,7 +5669,6 @@ function init() { ,sk: 'Vlastný názov stránky' ,ko: '사용자 정의 제목' ,nl: 'Eigen titel' - ,tr: 'Özel Başlık' ,zh_cn: '自定义标题' ,zh_tw: '自定義標題' } @@ -6252,7 +5685,6 @@ function init() { ,hr: 'Tema' ,sv: 'Tema' ,it: 'Tema' - ,ja: 'テーマ' ,dk: 'Tema' ,fi: 'Teema' ,nb: 'Tema' @@ -6261,7 +5693,6 @@ function init() { ,sk: 'Vzhľad' ,nl: 'Thema' ,ko: '테마' - ,tr: 'Tema' ,zh_cn: '主题' ,zh_tw: '主題' } @@ -6278,7 +5709,6 @@ function init() { ,bg: 'Черно-бяла' ,hr: 'Default' ,it: 'Predefinito' - ,ja: 'デフォルト' ,dk: 'Standard' ,fi: 'Oletus' ,nb: 'Standard' @@ -6287,7 +5717,6 @@ function init() { ,sk: 'Predvolený' ,nl: 'Standaard' ,ko: '초기설정' - ,tr: 'Varsayılan' ,zh_cn: '默认' ,zh_tw: '默認' } @@ -6304,7 +5733,6 @@ function init() { ,bg: 'Цветна' ,hr: 'Boje' ,it: 'Colori' - ,ja: '色付き' ,dk: 'Farver' ,fi: 'Värit' ,nb: 'Farger' @@ -6313,7 +5741,6 @@ function init() { ,sk: 'Farebný' ,nl: 'Kleuren' ,ko: '색상' - ,tr: 'Renkler' ,zh_cn: '彩色' ,zh_tw: '彩色' } @@ -6334,13 +5761,10 @@ function init() { ,ko: '색맹 친화적인 색상' ,bg: 'Цветове за далтонисти' ,it: 'Colori per daltonici' - ,ja: '色覚異常の方向けの色' ,fi: 'Värisokeille sopivat värit' ,zh_cn: '色盲患者可辨识的颜色' ,zh_tw: '色盲患者可辨識的顏色' ,pl: 'Kolory dla niedowidzących' - ,tr: 'Renk körü dostu görünüm' - ,ru: 'Цветовая гамма для людей с дальтонизмом' } ,'Reset, and use defaults' : { cs: 'Vymaž a nastav výchozí hodnoty' @@ -6355,7 +5779,6 @@ function init() { ,bg: 'Нулирай и използвай стандартните настройки' ,hr: 'Resetiraj i koristi defaultne vrijednosti' ,it: 'Resetta le impostazioni predefinite' - ,ja: 'リセットしてデフォルト設定を使用' ,dk: 'Returner til standardopsætning' ,fi: 'Palauta oletusasetukset' ,nb: 'Gjenopprett standardinnstillinger' @@ -6364,7 +5787,6 @@ function init() { ,sk: 'Resetovať do pôvodného nastavenia' ,nl: 'Herstel standaard waardes' ,ko: '초기화 그리고 초기설정으로 사용' - ,tr: 'Sıfırla ve varsayılanları kullan' ,zh_cn: '使用默认值重置' ,zh_tw: '使用默認值重置' } @@ -6381,7 +5803,6 @@ function init() { ,bg: 'Калибрации' ,hr: 'Kalibriranje' ,it: 'Calibrazioni' - ,ja: '較生' ,dk: 'Kalibrering' ,fi: 'Kalibraatiot' ,nb: 'Kalibreringer' @@ -6390,7 +5811,6 @@ function init() { ,sk: 'Kalibrácie' ,nl: 'Kalibraties' ,ko: '보정' - ,tr: 'Kalibrasyon' ,zh_cn: '校准' } ,'Alarm Test / Smartphone Enable' : { @@ -6406,7 +5826,6 @@ function init() { ,bg: 'Тестване на алармата / Активно за мобилни телефони' ,hr: 'Alarm test / Aktiviraj smartphone' ,it: 'Test Allarme / Abilita Smartphone' - ,ja: 'アラームテスト/スマートフォンを有効にする' ,dk: 'Alarm test / Smartphone aktiveret' ,fi: 'Hälytyksien testaus / Älypuhelimien äänet päälle' ,nb: 'Alarmtest / Smartphone aktivering' @@ -6415,7 +5834,6 @@ function init() { ,sk: 'Test alarmu' ,nl: 'Alarm test / activeer Smartphone' ,ko: '알람 테스트 / 스마트폰 활성화' - ,tr: 'Alarm Testi / Akıllı Telefon için Etkin' ,zh_cn: '报警测试/智能手机启用' ,zh_tw: '報警測試/智能手機啟用' } @@ -6432,16 +5850,14 @@ function init() { ,bg: 'Болус съветник ' ,hr: 'Bolus wizard' ,it: 'BW-Calcolatore di Bolo' - ,ja: 'ボーラスウィザード' ,dk: 'Bolusberegner' ,fi: 'Annosopas' ,nb: 'Boluskalkulator' ,pl: 'Kalkulator bolusa' - ,ru: 'калькулятор болюса' + ,ru: 'Болюс Мастер' ,sk: 'Bolusový kalkulátor' ,nl: 'Bolus calculator' ,ko: 'Bolus 마법사' - ,tr: 'Bolus Hesaplayıcısı' ,zh_cn: '大剂量向导' ,zh_tw: '大劑量嚮導' } @@ -6458,7 +5874,6 @@ function init() { ,bg: 'в бъдещето' ,hr: 'U budućnosti' ,it: 'nel futuro' - ,ja: '先の時間' ,dk: 'i fremtiden' ,fi: 'tulevaisuudessa' ,nb: 'fremtiden' @@ -6467,7 +5882,6 @@ function init() { ,sk: 'v budúcnosti' ,nl: 'In de toekomst' ,ko: '미래' - ,tr: 'gelecekte' ,zh_cn: '在未来' ,zh_tw: '在未來' } @@ -6484,7 +5898,6 @@ function init() { ,bg: 'преди време' ,hr: 'prije' ,it: 'tempo fa' - ,ja: '時間前' ,dk: 'tid siden' ,fi: 'aikaa sitten' ,nb: 'tid siden' @@ -6493,7 +5906,6 @@ function init() { ,sk: 'čas pred' ,nl: 'tijd geleden' ,ko: '시간 전' - ,tr: 'süre önce' //yakın zamanda ,zh_cn: '在过去' ,zh_tw: '在過去' } @@ -6510,7 +5922,6 @@ function init() { ,bg: 'час по-рано' ,hr: 'sat unazad' ,it: 'ora fa' - ,ja: '時間前' ,dk: 'time siden' ,fi: 'tunti sitten' ,nb: 'Time siden' @@ -6519,7 +5930,6 @@ function init() { ,sk: 'hod. pred' ,nl: 'uur geleden' ,ko: '시간 전' - ,tr: 'saat önce' ,zh_cn: '小时前' ,zh_tw: '小時前' } @@ -6536,7 +5946,6 @@ function init() { ,bg: 'часа по-рано' ,hr: 'sati unazad' ,it: 'ore fa' - ,ja: '時間前' ,dk: 'timer siden' ,fi: 'tuntia sitten' ,nb: 'Timer siden' @@ -6545,7 +5954,6 @@ function init() { ,sk: 'hod. pred' ,nl: 'uren geleden' ,ko: '시간 전' - ,tr: 'saatler önce' ,zh_cn: '小时前' ,zh_tw: '小時前' } @@ -6562,7 +5970,6 @@ function init() { ,bg: 'мин. по-рано' ,hr: 'minuta unazad' ,it: 'minuto fa' - ,ja: '分前' ,dk: 'minut siden' ,fi: 'minuutti sitten' ,nb: 'minutter siden' @@ -6571,7 +5978,6 @@ function init() { ,sk: 'min. pred' ,nl: 'm geleden' ,ko: '분 전' - ,tr: 'dk. önce' ,zh_cn: '分钟前' ,zh_tw: '分鐘前' } @@ -6588,7 +5994,6 @@ function init() { ,bg: 'мин. по-рано' ,hr: 'minuta unazad' ,it: 'minuti fa' - ,ja: '分前' ,dk: 'minutter siden' ,fi: 'minuuttia sitten' ,nb: 'minutter siden' @@ -6597,7 +6002,6 @@ function init() { ,sk: 'min. pred' ,nl: 'm geleden' ,ko: '분 전' - ,tr: 'dakika önce' ,zh_cn: '分钟前' ,zh_tw: '分鐘前' } @@ -6614,7 +6018,6 @@ function init() { ,bg: 'ден по-рано' ,hr: 'dan unazad' ,it: 'Giorno fa' - ,ja: '日前' ,dk: 'dag siden' ,fi: 'päivä sitten' ,nb: 'dag siden' @@ -6623,7 +6026,6 @@ function init() { ,sk: 'deň pred' ,nl: 'dag geleden' ,ko: '일 전' - ,tr: 'gün önce' ,zh_cn: '天前' ,zh_tw: '天前' } @@ -6640,7 +6042,6 @@ function init() { ,bg: 'дни по-рано' ,hr: 'dana unazad' ,it: 'giorni fa' - ,ja: '日前' ,dk: 'dage siden' ,fi: 'päivää sitten' ,nb: 'dager siden' @@ -6649,7 +6050,6 @@ function init() { ,sk: 'dni pred' ,nl: 'dagen geleden' ,ko: '일 전' - ,tr: 'günler önce' ,zh_cn: '天前' ,zh_tw: '天前' } @@ -6666,7 +6066,6 @@ function init() { ,bg: 'преди много време' ,hr: 'prije dosta vremena' ,it: 'Molto tempo fa' - ,ja: '前の期間' ,dk: 'længe siden' ,fi: 'Pitkän aikaa sitten' ,nb: 'lenge siden' @@ -6675,7 +6074,6 @@ function init() { ,sk: 'veľmi dávno' ,nl: 'lang geleden' ,ko: '기간 전' - ,tr: 'uzun zaman önce' ,zh_cn: '很长时间前' ,zh_tw: '很長時間前' } @@ -6692,7 +6090,6 @@ function init() { ,bg: 'Чист' ,hr: 'Čisto' ,it: 'Pulito' - ,ja: 'なし' ,dk: 'Rent' ,fi: 'Puhdas' ,nb: 'Rent' @@ -6701,7 +6098,6 @@ function init() { ,sk: 'Čistý' ,nl: 'Schoon' ,ko: 'Clean' - ,tr: 'Temiz' ,zh_cn: '无' ,zh_tw: '無' } @@ -6718,7 +6114,6 @@ function init() { ,bg: 'Лек' ,hr: 'Lagano' ,it: 'Leggero' - ,ja: '軽い' ,dk: 'Let' ,fi: 'Kevyt' ,nb: 'Lite' @@ -6727,7 +6122,6 @@ function init() { ,sk: 'Nízky' ,nl: 'Licht' ,ko: 'Light' - ,tr: 'Kolay' ,zh_cn: '轻度' ,zh_tw: '輕度' } @@ -6744,7 +6138,6 @@ function init() { ,bg: 'Среден' ,hr: 'Srednje' ,it: 'Medio' - ,ja: '中間' ,dk: 'Middel' ,fi: 'Keskiverto' ,nb: 'Middels' @@ -6753,7 +6146,6 @@ function init() { ,sk: 'Stredný' ,nl: 'Gemiddeld' ,ko: '보통' - ,tr: 'Orta' ,zh_cn: '中度' ,zh_tw: '中度' } @@ -6769,7 +6161,6 @@ function init() { ,bg: 'Висок' ,hr: 'Teško' ,it: 'Pesante' - ,ja: '重たい' ,dk: 'Meget' ,fi: 'Raskas' ,nb: 'Mye' @@ -6778,7 +6169,6 @@ function init() { ,sk: 'Veľký' ,nl: 'Zwaar' ,ko: '심한' - ,tr: 'Ağır' ,zh_cn: '重度' ,zh_tw: '嚴重' } @@ -6794,7 +6184,6 @@ function init() { ,bg: 'Вид събитие' ,hr: 'Vrsta tretmana' ,it: 'Somministrazione' - ,ja: '治療タイプ' ,dk: 'Behandlingstype' ,fi: 'Hoidon tyyppi' ,nb: 'Behandlingstype' @@ -6803,7 +6192,6 @@ function init() { ,sk: 'Typ ošetrenia' ,nl: 'Type behandeling' ,ko: 'Treatment 타입' - ,tr: 'Tedavi tipi' ,zh_cn: '操作类型' } ,'Raw BG' : { @@ -6826,7 +6214,6 @@ function init() { ,sk: 'RAW dáta glykémie' ,nl: 'Ruwe BG data' ,ko: 'Raw 혈당' - ,tr: 'Ham KŞ' ,zh_cn: '原始血糖' } ,'Device' : { @@ -6841,7 +6228,6 @@ function init() { ,hr: 'Uređaj' ,sv: 'Enhet' ,it: 'Dispositivo' - ,ja: '機器' ,dk: 'Enhed' ,fi: 'Laite' ,nb: 'Enhet' @@ -6850,7 +6236,6 @@ function init() { ,sk: 'Zariadenie' ,nl: 'Apparaat' ,ko: '기기' - ,tr: 'Cihaz' ,zh_cn: '设备' } ,'Noise' : { @@ -6866,7 +6251,6 @@ function init() { ,bg: 'Шум' ,hr: 'Šum' ,it: 'Rumore' - ,ja: '測定不良' ,dk: 'Støj' ,fi: 'Kohina' ,nb: 'Støy' @@ -6875,7 +6259,6 @@ function init() { ,sk: 'Šum' ,nl: 'Ruis' ,ko: '노이즈' - ,tr: 'parazit' // gürültü ,zh_cn: '噪声' } ,'Calibration' : { @@ -6891,7 +6274,6 @@ function init() { ,bg: 'Калибрация' ,hr: 'Kalibriranje' ,it: 'Calibratura' - ,ja: '較正' ,dk: 'Kalibrering' ,fi: 'Kalibraatio' ,nb: 'Kalibrering' @@ -6900,7 +6282,6 @@ function init() { ,sk: 'Kalibrácia' ,nl: 'Kalibratie' ,ko: '보정' - ,tr: 'Kalibrasyon' ,zh_cn: '校准' } ,'Show Plugins' : { @@ -6916,7 +6297,6 @@ function init() { ,hr: 'Prikaži plugine' ,sv: 'Visa tillägg' ,it: 'Mostra Plugin' - ,ja: 'プラグイン表示' ,dk: 'Vis plugins' ,fi: 'Näytä pluginit' ,nb: 'Vis plugins' @@ -6925,7 +6305,6 @@ function init() { ,sk: 'Zobraziť pluginy' ,nl: 'Laat Plug-Ins zien' ,ko: '플러그인 보기' - ,tr: 'Eklentileri Göster' ,zh_cn: '显示插件' ,zh_tw: '顯示插件' } @@ -6942,7 +6321,6 @@ function init() { ,hr: 'O aplikaciji' ,sv: 'Om' ,it: 'Informazioni' - ,ja: '約' ,dk: 'Om' ,fi: 'Nightscoutista' ,nb: 'Om' @@ -6951,7 +6329,6 @@ function init() { ,sk: 'O aplikácii' ,nl: 'Over' ,ko: '대하여' - ,tr: 'Hakkında' ,zh_cn: '关于' ,zh_tw: '關於' } @@ -6968,7 +6345,6 @@ function init() { ,hr: 'Vrijednost u' ,sv: 'Värde om' ,it: 'Valore in' - ,ja: '数値' ,dk: 'Værdi i' ,fi: 'Arvo yksiköissä' ,nb: 'Verdi i' @@ -6977,7 +6353,6 @@ function init() { ,sk: 'Hodnota v' ,nl: 'Waarde in' ,ko: '값' - ,tr: 'Değer cinsinden' ,zh_cn: '数值' } ,'Carb Time' : { @@ -6992,17 +6367,15 @@ function init() { ,hr: 'Vrijeme unosa UH' ,sv: 'Kolhydratstid' ,it: 'Tempo' - ,ja: 'カーボ時間' ,dk: 'Kulhydratstid' ,fi: 'Syöntiaika' ,nb: 'Karbohydrattid' ,he: 'זמן פחמימה' ,pl: 'Czas posiłku' - ,ru: 'Время действия углеводов' + ,ru: 'Время приема углеводов' ,sk: 'Čas jedla' ,nl: 'Koolhydraten tijd' ,ko: '탄수화물 시간' - ,tr: 'Karbonhidratların alım zamanı' ,zh_cn: '碳水时间' } ,'Language' : { @@ -7021,12 +6394,10 @@ function init() { ,bg: 'Език' ,pl: 'Język' ,it: 'Lingua' - ,ja: '言語' ,ru: 'Язык' ,sk: 'Jazyk' ,nl: 'Taal' ,ko: '언어' - ,tr: 'Dil' ,zh_cn: '语言' ,zh_tw: '語言' } @@ -7050,8 +6421,6 @@ function init() { ,nl: 'Voeg toe' ,ko: '새입력' ,it: 'Aggiungi nuovo' - ,ja: '新たに加える' - ,tr: 'Yeni ekle' ,zh_cn: '新增' } ,'g' : { // grams shortcut @@ -7073,8 +6442,6 @@ function init() { ,nl: 'g' ,ko: 'g' ,it: 'g' - ,ja: 'g' - ,tr: 'g' ,zh_cn: '克' ,zh_tw: '克' } @@ -7097,8 +6464,6 @@ function init() { ,nl: 'ml' ,ko: 'ml' ,it: 'ml' - ,ja: 'ml' - ,tr: 'ml' ,zh_cn: '毫升' ,zh_tw: '毫升' } @@ -7121,8 +6486,6 @@ function init() { ,nl: 'stk' ,ko: '조각 바로 가기(pieces shortcut)' ,it: 'pz' - ,ja: 'pcs' - ,tr: 'parça' ,zh_cn: '件' ,zh_tw: '件' } @@ -7132,7 +6495,7 @@ function init() { ,de: 'Mahlzeit hierher verschieben' ,es: 'Arrastre y suelte aquí alimentos' ,fr: 'Glisser et déposer repas ici ' - ,dk: 'Træk og slip mad her' + ,dk: 'Hiv og slip mad her' ,sv: 'Dra&Släpp mat här' ,ro: 'Drag&drop aliment aici' ,el: 'Σύρετε εδώ φαγητό' @@ -7145,7 +6508,6 @@ function init() { ,sk: 'Potiahni a pusti jedlo sem' ,ko: '음식을 여기에 드래그&드랍 해주세요.' ,it: 'Trascina&rilascia cibo qui' - ,tr: 'Yiyecekleri buraya sürükle bırak' ,zh_cn: '拖放食物到这' ,nl: 'Maaltijd naar hier verplaatsen' } @@ -7168,7 +6530,6 @@ function init() { ,sk: 'Portál starostlivosti' ,nl: 'Zorgportaal' ,ko: 'Care Portal' - ,tr: 'Care Portal' ,zh_cn: '服务面板' ,zh_tw: '服務面板' } @@ -7192,7 +6553,6 @@ function init() { ,nl: 'Medium/Onbekend' ,ko: '보통/알려지지 않은' ,it: 'Media/Sconosciuto' - ,tr: 'Orta/Bilinmeyen' ,zh_cn: '中等/不知道' } ,'IN THE FUTURE' : { @@ -7215,7 +6575,6 @@ function init() { ,nl: 'IN DE TOEKOMST' ,ko: '미래' ,it: 'NEL FUTURO' - ,tr: 'GELECEKTE' ,zh_cn: '在未来' } ,'Update' : { // Update button @@ -7233,12 +6592,11 @@ function init() { ,bg: 'Актуализирай' ,it: 'Aggiornamento' ,pl: 'Aktualizacja' - ,fi: 'Tallenna' + ,fi: 'Päivitys' ,ru: 'Обновить' ,sk: 'Aktualizovať' ,nl: 'Update' ,ko: '업데이트' - ,tr: 'Güncelleştirme' ,zh_cn: '更新认证状态' ,zh_tw: '更新認證狀態' } @@ -7262,7 +6620,6 @@ function init() { ,sk: 'Usporiadať' ,nl: 'Sortering' ,ko: '순서' - ,tr: 'Sıra' ,zh_cn: '排序' } ,'oldest on top' : { @@ -7271,7 +6628,7 @@ function init() { ,de: 'älteste oben' ,es: 'Más antiguo arriba' ,fr: 'Plus vieux en tête de liste' - ,dk: 'ældste først' + ,dk: 'ældste øverst' ,sv: 'Äldst först' ,nb: 'Eldste først' ,el: 'τα παλαιότερα πρώτα' @@ -7285,7 +6642,6 @@ function init() { ,sk: 'najstaršie hore' ,nl: 'Oudste boven' ,ko: '오래된 것 부터' - ,tr: 'en eski üste' ,zh_cn: '按时间升序排列' } ,'newest on top' : { @@ -7295,7 +6651,7 @@ function init() { ,de: 'neueste oben' ,es: 'Más nuevo arriba' ,fr: 'Nouveaux en tête de liste' - ,dk: 'nyeste først' + ,dk: 'nyeste øverst' ,nb: 'Nyeste først' ,el: 'τα νεότερα πρώτα' ,ro: 'mai noi primele' @@ -7308,14 +6664,12 @@ function init() { ,sk: 'najnovšie hore' ,nl: 'Nieuwste boven' ,ko: '새로운 것 부터' - ,tr: 'en yeni üste' ,zh_cn: '按时间降序排列' } ,'All sensor events' : { cs: 'Všechny události sensoru' ,he: 'כל האירועים חיישן' ,sv: 'Alla sensorhändelser' - ,dk: 'Alle sensorhændelser' ,nb: 'Alle sensorhendelser' ,de: 'Alle Sensor-Ereignisse' ,es: 'Todos los eventos del sensor' @@ -7332,7 +6686,6 @@ function init() { ,sk: 'Všetky udalosti senzoru' ,nl: 'Alle sensor gegevens' ,ko: '모든 센서 이벤트' - ,tr: 'Tüm sensör olayları' ,zh_cn: '所有探头事件' } ,'Remove future items from mongo database' : { @@ -7355,7 +6708,6 @@ function init() { ,sk: 'Odobrať budúce položky z Mongo databázy' ,nl: 'Verwijder items die in de toekomst liggen uit database' ,ko: 'mongo DB에서 미래 항목들을 지우세요.' - ,tr: 'Gelecekteki öğeleri mongo veritabanından kaldır' ,zh_cn: '从数据库中清除所有未来条目' ,zh_tw: '從數據庫中清除所有未來條目' } @@ -7379,7 +6731,6 @@ function init() { ,sk: 'Nájsť a odstrániť záznamy ošetrenia v budúcnosti' ,nl: 'Zoek en verwijder behandelingen met datum in de toekomst' ,ko: '미래에 treatments를 검색하고 지우세요.' - ,tr: 'Gelecekte tedavileri bulun ve kaldır' ,zh_cn: '查找并清除所有未来的操作' ,zh_tw: '查找並清除所有未來的操作' } @@ -7403,7 +6754,6 @@ function init() { ,sk: 'Táto úloha nájde a odstáni záznamy ošetrenia v budúcnosti.' ,nl: 'Dit commando zoekt en verwijdert behandelingen met datum in de toekomst' ,ko: '이 작업은 미래에 treatments를 검색하고 지우는 것입니다.' - ,tr: 'Bu görev gelecekte tedavileri bul ve kaldır.' ,zh_cn: '此功能查找并清除所有未来的操作。' ,zh_tw: '此功能查找並清除所有未來的操作。' } @@ -7427,7 +6777,6 @@ function init() { ,sk: 'Odstrániť záznamy ošetrenia v budúcnosti' ,nl: 'Verwijder behandelingen met datum in de toekomst' ,ko: '미래 treatments 지우기' - ,tr: 'Gelecekte tedavileri kaldır' ,zh_cn: '清除未来操作' ,zh_tw: '清除未來操作' } @@ -7451,7 +6800,6 @@ function init() { ,sk: 'Nájsť a odstrániť CGM dáta v budúcnosti' ,nl: 'Zoek en verwijder behandelingen met datum in de toekomst' ,ko: '미래에 입력을 검색하고 지우세요.' - ,tr: 'Gelecekteki girdileri bul ve kaldır' ,zh_cn: '查找并清除所有的未来的记录' ,zh_tw: '查找並清除所有的未來的記錄' } @@ -7475,7 +6823,6 @@ function init() { ,sk: 'Táto úloha nájde a odstráni CGM dáta v budúcnosti vzniknuté zle nastaveným časom uploaderu.' ,nl: 'Dit commando zoekt en verwijdert behandelingen met datum in de toekomst' ,ko: '이 작업은 잘못된 날짜/시간으로 업로드 되어 생성된 미래의 CGM 데이터를 검색하고 지우는 것입니다.' - ,tr: 'Yükleyicinin oluşturduğu gelecekteki CGM verilerinin yanlış tarih/saat olanlarını bul ve kaldır.' ,zh_cn: '此功能查找并清除所有上传时日期时间错误导致生成在未来时间的CGM数据。' ,zh_tw: '此功能查找並清除所有上傳時日期時間錯誤導致生成在未來時間的CGM數據。' } @@ -7495,11 +6842,10 @@ function init() { ,fi: 'Poista tapahtumat' ,pl: 'Usuń wpisy w przyszłości' ,pt: 'Remover entradas futuras' - ,ru: 'Удалить данные из будущего' + ,ru: 'Удаляются данные из будущего' ,sk: 'Odstrániť CGM dáta v budúcnosti' ,nl: 'Verwijder invoer met datum in de toekomst' ,ko: '미래의 입력 지우기' - ,tr: 'Gelecekteki girdileri kaldır' ,zh_cn: '清除未来记录' ,zh_tw: '清除未來記錄' } @@ -7523,7 +6869,6 @@ function init() { ,sk: 'Nahrávam databázu...' ,nl: 'Database laden ....' ,ko: '데이터베이스 로딩' - ,tr: 'Veritabanı yükleniyor ...' ,zh_cn: '载入数据库...' ,zh_tw: '載入數據庫...' } @@ -7547,7 +6892,6 @@ function init() { ,sk: 'Databáza obsahuje %1 záznamov v budúcnosti' ,nl: 'Database bevat %1 toekomstige data' ,ko: '데이터베이스는 미래 기록을 %1 포함하고 있습니다.' - ,tr: 'Veritabanı %1 gelecekteki girdileri içeriyor' ,zh_cn: '数据库包含%1条未来记录' ,zh_tw: '數據庫包含%1條未來記錄' } @@ -7571,7 +6915,6 @@ function init() { ,sk: 'Odstrániť %1 vybraných záznamov' ,nl: 'Verwijder %1 geselecteerde data?' ,ko: '선택된 기록 %1를 지우시겠습니까?' - ,tr: 'Seçilen %1 kayıtlar kaldırılsın? ' ,zh_cn: '清除%1条选择的记录?' ,zh_tw: '清除%1條選擇的記錄?' } @@ -7595,7 +6938,6 @@ function init() { ,sk: 'Chyba pri nahrávanií databázy' ,nl: 'Fout bij het laden van database' ,ko: '데이터베이스 로딩 에러' - ,tr: 'Veritabanını yüklerken hata oluştu' ,zh_cn: '载入数据库错误' ,zh_tw: '載入數據庫錯誤' } @@ -7619,7 +6961,6 @@ function init() { ,sk: '%1 záznamov bolo odstránených...' ,nl: 'Data %1 verwijderd ' ,ko: '기록 %1가 삭제되었습니다.' - ,tr: '%1 kaydı silindi ...' ,zh_cn: '%1条记录已清除' ,zh_tw: '%1條記錄已清除' } @@ -7643,7 +6984,6 @@ function init() { ,sk: 'Chyba pri odstraňovaní záznamu %1' ,nl: 'Fout bij het verwijderen van %1 data' ,ko: '기록 %1을 삭제하는 중에 에러가 발생했습니다.' - ,tr: '%1 kayıt kaldırılırken hata oluştu' ,zh_cn: '%1条记录清除出错' ,zh_tw: '%1條記錄清除出錯' } @@ -7667,34 +7007,9 @@ function init() { ,sk: 'Odstraňovanie záznamov...' ,nl: 'Verwijderen van data .....' ,ko: '기록 삭제 중' - ,tr: 'Kayıtlar siliniyor ...' ,zh_cn: '正在删除记录...' ,zh_tw: '正在刪除記錄...' } - ,'%1 records deleted' : { - cs: '%1 records deleted' - ,he: '%1 records deleted' - ,nb: '%1 records deleted' - ,fr: '%1 records deleted' - ,ro: '%1 records deleted' - ,el: '%1 records deleted' - ,de: '%1 records deleted' - ,es: '%1 records deleted' - ,dk: '%1 records deleted' - ,sv: '%1 records deleted' - ,bg: '%1 records deleted' - ,it: '%1 records deleted' - ,fi: '%1 records deleted' - ,pl: '%1 records deleted' - ,pt: '%1 records deleted' - ,ru: '%1 records deleted' - ,sk: '%1 records deleted' - ,nl: '%1 records deleted' - ,ko: '%1 records deleted' - ,tr: '%1 records deleted' - ,zh_cn: '%1 records deleted' - ,zh_tw: '%1 records deleted' - } ,'Clean Mongo status database' : { cs: 'Vyčištění Mongo databáze statusů' ,he: 'נקי מסד הנתונים מצב מונגו ' @@ -7715,7 +7030,6 @@ function init() { ,sk: 'Vyčistiť Mongo databázu statusov' ,nl: 'Ruim Mongo database status op' ,ko: 'Mongo 상태 데이터베이스를 지우세요.' - ,tr: 'Mongo durum veritabanını temizle' ,zh_cn: '清除状态数据库' } ,'Delete all documents from devicestatus collection' : { @@ -7737,7 +7051,6 @@ function init() { ,ru: 'Стереть все документы из коллекции статус устройства' ,sk: 'Odstránenie všetkých záznamov z kolekcie "devicestatus"' ,ko: 'devicestatus 수집에서 모든 문서들을 지우세요' - ,tr: 'Devicestatus koleksiyonundan tüm dokümanları sil' ,zh_cn: '从设备状态采集删除所有文档' ,nl: 'Verwijder alle documenten uit "devicestatus" database' } @@ -7748,7 +7061,7 @@ function init() { ,el: 'Αυτή η ενέργεια διαγράφει όλα τα δεδομένα της κατάστασης της συσκευής ανάγνωσης. Χρήσιμη όταν η κατάσταση της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.' ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' ,es: 'Este comando elimina todos los documentos desde la colección devicestatus. Útil cuando el estado de la batería cargadora no se actualiza correctamente' - ,dk: 'Denne handling fjerner alle dokumenter fra device status tabellen. Brugbart når uploader batteri status ikke opdateres korrekt.' + ,dk: 'Denne handling fjerner alle dokumenter fra device status tabellen. Brugbart når uploader betteri status ikke er korrekt opdateret.' ,ro: 'Acest instrument șterge toate documentele din colecția devicestatus. Se folosește când încărcarea bateriei nu se afișează corect.' ,sv: 'Denna uppgift tar bort alla dokument från devicestatuskollektionen. Användbart när batteristatus ej uppdateras' ,bg: 'Тази опция премахва всички документи от папката статус-устройство. Полезно е, когато статусът на батерията не се обновява.' @@ -7759,7 +7072,6 @@ function init() { ,ru: 'Эта опция удаляет все документы из коллекции статус устройства. Полезно когда состояние батвреи загрузчика не обновляется' ,sk: 'Táto úloha vymaže všetky záznamy z kolekcie "devicestatus". Je to vhodné keď sa stav batérie nezobrazuje správne.' ,ko: '이 작업은 모든 문서를 devicestatus 수집에서 지웁니다. 업로더 배터리 상태가 적절하게 업데이트 되지 않을 때 유용합니다.' - ,tr: 'Bu görev tüm durumları Devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu güncellenmiyorsa kullanışlıdır.' ,zh_cn: '此功能从设备状态采集中删除所有文档。适用于上传设备电量信息不能正常同步时使用。' ,nl: 'Dit commando verwijdert alle documenten uit "devicestatus" database. Handig wanneer de batterij status niet correct wordt geupload.' } @@ -7783,10 +7095,9 @@ function init() { ,sk: 'Zmazať všetky záznamy' ,nl: 'Verwijder alle documenten' ,ko: '모든 문서들을 지우세요' - ,tr: 'Tüm Belgeleri sil' ,zh_cn: '删除所有文档' } - ,'Delete all documents from devicestatus collection?' : { + ,'Delete all documents from devicestatus collection devicestatus?' : { cs: 'Odstranit všechny dokumenty z kolekce devicestatus?' ,he: 'מחק את כל המסמכים מרשימת סטטוס ההתקנים ' ,nb: 'Fjern alle dokumenter fra device status tabellen?' @@ -7805,7 +7116,6 @@ function init() { ,ru: 'Стереть все документы коллекции статус устройства?' ,sk: 'Zmazať všetky záznamy z kolekcie "devicestatus"?' ,ko: 'devicestatus 수집의 모든 문서들을 지우세요.' - ,tr: 'Tüm Devicestatus koleksiyon belgeleri silinsin mi?' ,zh_cn: '从设备状态采集删除所有文档?' ,nl: 'Wil je alle data van "devicestatus" database verwijderen?' } @@ -7829,7 +7139,6 @@ function init() { ,sk: 'Databáza obsahuje %1 záznamov' ,nl: 'Database bevat %1 gegevens' ,ko: '데이터베이스는 %1 기록을 포함합니다.' - ,tr: 'Veritabanı %1 kayıt içeriyor' ,zh_cn: '数据库包含%1条记录' } ,'All records removed ...' : { @@ -7839,7 +7148,7 @@ function init() { ,de: 'Alle Einträge entfernt...' ,es: 'Todos los registros eliminados ...' ,fr: 'Toutes les valeurs ont été effacées' - ,dk: 'Alle hændelser fjernet ...' + ,dk: 'Alle indgange fjernet ...' ,el: 'Έγινε διαγραφή όλων των δεδομένων' ,ro: 'Toate înregistrările au fost șterse.' ,sv: 'Alla händelser raderade ...' @@ -7852,369 +7161,8 @@ function init() { ,sk: 'Všetky záznamy boli zmazané...' ,nl: 'Alle gegevens verwijderd' ,ko: '모든 기록들이 지워졌습니다.' - ,tr: 'Tüm kayıtlar kaldırıldı ...' ,zh_cn: '所有记录已经被清除' } - ,'Delete all documents from devicestatus collection older than 30 days' : { - cs: 'Delete all documents from devicestatus collection older than 30 days' - ,he: 'Delete all documents from devicestatus collection older than 30 days' - ,nb: 'Delete all documents from devicestatus collection older than 30 days' - ,fr: 'Delete all documents from devicestatus collection older than 30 days' - ,ro: 'Delete all documents from devicestatus collection older than 30 days' - ,el: 'Delete all documents from devicestatus collection older than 30 days' - ,de: 'Delete all documents from devicestatus collection older than 30 days' - ,es: 'Delete all documents from devicestatus collection older than 30 days' - ,dk: 'Delete all documents from devicestatus collection older than 30 days' - ,sv: 'Delete all documents from devicestatus collection older than 30 days' - ,bg: 'Delete all documents from devicestatus collection older than 30 days' - ,it: 'Delete all documents from devicestatus collection older than 30 days' - ,fi: 'Delete all documents from devicestatus collection older than 30 days' - ,pl: 'Delete all documents from devicestatus collection older than 30 days' - ,pt: 'Delete all documents from devicestatus collection older than 30 days' - ,ru: 'Delete all documents from devicestatus collection older than 30 days' - ,sk: 'Delete all documents from devicestatus collection older than 30 days' - ,nl: 'Delete all documents from devicestatus collection older than 30 days' - ,ko: 'Delete all documents from devicestatus collection older than 30 days' - ,tr: 'Delete all documents from devicestatus collection older than 30 days' - ,zh_cn: 'Delete all documents from devicestatus collection older than 30 days' - ,zh_tw: 'Delete all documents from devicestatus collection older than 30 days' - } - ,'Number of Days to Keep:' : { - cs: 'Number of Days to Keep:' - ,he: 'Number of Days to Keep:' - ,nb: 'Number of Days to Keep:' - ,fr: 'Number of Days to Keep:' - ,ro: 'Number of Days to Keep:' - ,el: 'Number of Days to Keep:' - ,de: 'Number of Days to Keep:' - ,es: 'Number of Days to Keep:' - ,dk: 'Number of Days to Keep:' - ,sv: 'Number of Days to Keep:' - ,bg: 'Number of Days to Keep:' - ,it: 'Number of Days to Keep:' - ,fi: 'Number of Days to Keep:' - ,pl: 'Number of Days to Keep:' - ,pt: 'Number of Days to Keep:' - ,ru: 'Number of Days to Keep:' - ,sk: 'Number of Days to Keep:' - ,nl: 'Number of Days to Keep:' - ,ko: 'Number of Days to Keep:' - ,tr: 'Number of Days to Keep:' - ,zh_cn: 'Number of Days to Keep:' - ,zh_tw: 'Number of Days to Keep:' - } - ,'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' : { - cs: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,he: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,nb: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,fr: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,ro: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,el: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,de: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,es: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,dk: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,sv: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,bg: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,it: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,fi: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,pl: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,pt: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,ru: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,sk: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,nl: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,ko: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,tr: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,zh_cn: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - ,zh_tw: 'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' - } - ,'Delete old documents from devicestatus collection?' : { - cs: 'Delete old documents from devicestatus collection?' - ,he: 'Delete old documents from devicestatus collection?' - ,nb: 'Delete old documents from devicestatus collection?' - ,fr: 'Delete old documents from devicestatus collection?' - ,ro: 'Delete old documents from devicestatus collection?' - ,el: 'Delete old documents from devicestatus collection?' - ,de: 'Delete old documents from devicestatus collection?' - ,es: 'Delete old documents from devicestatus collection?' - ,dk: 'Delete old documents from devicestatus collection?' - ,sv: 'Delete old documents from devicestatus collection?' - ,bg: 'Delete old documents from devicestatus collection?' - ,it: 'Delete old documents from devicestatus collection?' - ,fi: 'Delete old documents from devicestatus collection?' - ,pl: 'Delete old documents from devicestatus collection?' - ,pt: 'Delete old documents from devicestatus collection?' - ,ru: 'Delete old documents from devicestatus collection?' - ,sk: 'Delete old documents from devicestatus collection?' - ,nl: 'Delete old documents from devicestatus collection?' - ,ko: 'Delete old documents from devicestatus collection?' - ,tr: 'Delete old documents from devicestatus collection?' - ,zh_cn: 'Delete old documents from devicestatus collection?' - ,zh_tw: 'Delete old documents from devicestatus collection?' - } - ,'Clean Mongo entries (glucose entries) database' : { - cs: 'Clean Mongo entries (glucose entries) database' - ,he: 'Clean Mongo entries (glucose entries) database' - ,nb: 'Clean Mongo entries (glucose entries) database' - ,fr: 'Clean Mongo entries (glucose entries) database' - ,ro: 'Clean Mongo entries (glucose entries) database' - ,el: 'Clean Mongo entries (glucose entries) database' - ,de: 'Clean Mongo entries (glucose entries) database' - ,es: 'Clean Mongo entries (glucose entries) database' - ,dk: 'Clean Mongo entries (glucose entries) database' - ,sv: 'Clean Mongo entries (glucose entries) database' - ,bg: 'Clean Mongo entries (glucose entries) database' - ,it: 'Clean Mongo entries (glucose entries) database' - ,fi: 'Clean Mongo entries (glucose entries) database' - ,pl: 'Clean Mongo entries (glucose entries) database' - ,pt: 'Clean Mongo entries (glucose entries) database' - ,ru: 'Clean Mongo entries (glucose entries) database' - ,sk: 'Clean Mongo entries (glucose entries) database' - ,nl: 'Clean Mongo entries (glucose entries) database' - ,ko: 'Clean Mongo entries (glucose entries) database' - ,tr: 'Clean Mongo entries (glucose entries) database' - ,zh_cn: 'Clean Mongo entries (glucose entries) database' - ,zh_tw: 'Clean Mongo entries (glucose entries) database' - } - ,'Delete all documents from entries collection older than 180 days' : { - cs: 'Delete all documents from entries collection older than 180 days' - ,he: 'Delete all documents from entries collection older than 180 days' - ,nb: 'Delete all documents from entries collection older than 180 days' - ,fr: 'Delete all documents from entries collection older than 180 days' - ,ro: 'Delete all documents from entries collection older than 180 days' - ,el: 'Delete all documents from entries collection older than 180 days' - ,de: 'Delete all documents from entries collection older than 180 days' - ,es: 'Delete all documents from entries collection older than 180 days' - ,dk: 'Delete all documents from entries collection older than 180 days' - ,sv: 'Delete all documents from entries collection older than 180 days' - ,bg: 'Delete all documents from entries collection older than 180 days' - ,it: 'Delete all documents from entries collection older than 180 days' - ,fi: 'Delete all documents from entries collection older than 180 days' - ,pl: 'Delete all documents from entries collection older than 180 days' - ,pt: 'Delete all documents from entries collection older than 180 days' - ,ru: 'Delete all documents from entries collection older than 180 days' - ,sk: 'Delete all documents from entries collection older than 180 days' - ,nl: 'Delete all documents from entries collection older than 180 days' - ,ko: 'Delete all documents from entries collection older than 180 days' - ,tr: 'Delete all documents from entries collection older than 180 days' - ,zh_cn: 'Delete all documents from entries collection older than 180 days' - ,zh_tw: 'Delete all documents from entries collection older than 180 days' - } - ,'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' : { - cs: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,he: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,nb: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,fr: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ro: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,el: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,de: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,es: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,dk: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,sv: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,bg: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,it: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,fi: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,pl: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,pt: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ru: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,sk: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,nl: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ko: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,tr: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,zh_cn: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,zh_tw: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - } - ,'Delete old documents' : { - cs: 'Delete old documents' - ,he: 'Delete old documents' - ,nb: 'Delete old documents' - ,fr: 'Delete old documents' - ,ro: 'Delete old documents' - ,el: 'Delete old documents' - ,de: 'Delete old documents' - ,es: 'Delete old documents' - ,dk: 'Delete old documents' - ,sv: 'Delete old documents' - ,bg: 'Delete old documents' - ,it: 'Delete old documents' - ,fi: 'Delete old documents' - ,pl: 'Delete old documents' - ,pt: 'Delete old documents' - ,ru: 'Delete old documents' - ,sk: 'Delete old documents' - ,nl: 'Delete old documents' - ,ko: 'Delete old documents' - ,tr: 'Delete old documents' - ,zh_cn: 'Delete old documents' - ,zh_tw: 'Delete old documents' - } - ,'Delete old documents from entries collection?' : { - cs: 'Delete old documents from entries collection?' - ,he: 'Delete old documents from entries collection?' - ,nb: 'Delete old documents from entries collection?' - ,fr: 'Delete old documents from entries collection?' - ,ro: 'Delete old documents from entries collection?' - ,el: 'Delete old documents from entries collection?' - ,de: 'Delete old documents from entries collection?' - ,es: 'Delete old documents from entries collection?' - ,dk: 'Delete old documents from entries collection?' - ,sv: 'Delete old documents from entries collection?' - ,bg: 'Delete old documents from entries collection?' - ,it: 'Delete old documents from entries collection?' - ,fi: 'Delete old documents from entries collection?' - ,pl: 'Delete old documents from entries collection?' - ,pt: 'Delete old documents from entries collection?' - ,ru: 'Delete old documents from entries collection?' - ,sk: 'Delete old documents from entries collection?' - ,nl: 'Delete old documents from entries collection?' - ,ko: 'Delete old documents from entries collection?' - ,tr: 'Delete old documents from entries collection?' - ,zh_cn: 'Delete old documents from entries collection?' - ,zh_tw: 'Delete old documents from entries collection?' - } - ,'%1 is not a valid number' : { - cs: '%1 is not a valid number' - ,he: '%1 is not a valid number' - ,nb: '%1 is not a valid number' - ,fr: '%1 is not a valid number' - ,ro: '%1 is not a valid number' - ,el: '%1 is not a valid number' - ,de: '%1 is not a valid number' - ,es: '%1 is not a valid number' - ,dk: '%1 is not a valid number' - ,sv: '%1 is not a valid number' - ,bg: '%1 is not a valid number' - ,it: '%1 is not a valid number' - ,fi: '%1 is not a valid number' - ,pl: '%1 is not a valid number' - ,pt: '%1 is not a valid number' - ,ru: '%1 is not a valid number' - ,sk: '%1 is not a valid number' - ,nl: '%1 is not a valid number' - ,ko: '%1 is not a valid number' - ,tr: '%1 is not a valid number' - ,zh_cn: '%1 is not a valid number' - ,zh_tw: '%1 is not a valid number' - } - ,'%1 is not a valid number - must be more than 2' : { - cs: '%1 is not a valid number - must be more than 2' - ,he: '%1 is not a valid number - must be more than 2' - ,nb: '%1 is not a valid number - must be more than 2' - ,fr: '%1 is not a valid number - must be more than 2' - ,ro: '%1 is not a valid number - must be more than 2' - ,el: '%1 is not a valid number - must be more than 2' - ,de: '%1 is not a valid number - must be more than 2' - ,es: '%1 is not a valid number - must be more than 2' - ,dk: '%1 is not a valid number - must be more than 2' - ,sv: '%1 is not a valid number - must be more than 2' - ,bg: '%1 is not a valid number - must be more than 2' - ,it: '%1 is not a valid number - must be more than 2' - ,fi: '%1 is not a valid number - must be more than 2' - ,pl: '%1 is not a valid number - must be more than 2' - ,pt: '%1 is not a valid number - must be more than 2' - ,ru: '%1 is not a valid number - must be more than 2' - ,sk: '%1 is not a valid number - must be more than 2' - ,nl: '%1 is not a valid number - must be more than 2' - ,ko: '%1 is not a valid number - must be more than 2' - ,tr: '%1 is not a valid number - must be more than 2' - ,zh_cn: '%1 is not a valid number - must be more than 2' - ,zh_tw: '%1 is not a valid number - must be more than 2' - } - ,'Clean Mongo treatments database' : { - cs: 'Clean Mongo treatments database' - ,he: 'Clean Mongo treatments database' - ,nb: 'Clean Mongo treatments database' - ,fr: 'Clean Mongo treatments database' - ,ro: 'Clean Mongo treatments database' - ,el: 'Clean Mongo treatments database' - ,de: 'Clean Mongo treatments database' - ,es: 'Clean Mongo treatments database' - ,dk: 'Clean Mongo treatments database' - ,sv: 'Clean Mongo treatments database' - ,bg: 'Clean Mongo treatments database' - ,it: 'Clean Mongo treatments database' - ,fi: 'Clean Mongo treatments database' - ,pl: 'Clean Mongo treatments database' - ,pt: 'Clean Mongo treatments database' - ,ru: 'Clean Mongo treatments database' - ,sk: 'Clean Mongo treatments database' - ,nl: 'Clean Mongo treatments database' - ,ko: 'Clean Mongo treatments database' - ,tr: 'Clean Mongo treatments database' - ,zh_cn: 'Clean Mongo treatments database' - ,zh_tw: 'Clean Mongo treatments database' - } - ,'Delete all documents from treatments collection older than 180 days' : { - cs: 'Delete all documents from treatments collection older than 180 days' - ,he: 'Delete all documents from treatments collection older than 180 days' - ,nb: 'Delete all documents from treatments collection older than 180 days' - ,fr: 'Delete all documents from treatments collection older than 180 days' - ,ro: 'Delete all documents from treatments collection older than 180 days' - ,el: 'Delete all documents from treatments collection older than 180 days' - ,de: 'Delete all documents from treatments collection older than 180 days' - ,es: 'Delete all documents from treatments collection older than 180 days' - ,dk: 'Delete all documents from treatments collection older than 180 days' - ,sv: 'Delete all documents from treatments collection older than 180 days' - ,bg: 'Delete all documents from treatments collection older than 180 days' - ,it: 'Delete all documents from treatments collection older than 180 days' - ,fi: 'Delete all documents from treatments collection older than 180 days' - ,pl: 'Delete all documents from treatments collection older than 180 days' - ,pt: 'Delete all documents from treatments collection older than 180 days' - ,ru: 'Delete all documents from treatments collection older than 180 days' - ,sk: 'Delete all documents from treatments collection older than 180 days' - ,nl: 'Delete all documents from treatments collection older than 180 days' - ,ko: 'Delete all documents from treatments collection older than 180 days' - ,tr: 'Delete all documents from treatments collection older than 180 days' - ,zh_cn: 'Delete all documents from treatments collection older than 180 days' - ,zh_tw: 'Delete all documents from treatments collection older than 180 days' - } - ,'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' : { - cs: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,he: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,nb: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,fr: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ro: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,el: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,de: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,es: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,dk: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,sv: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,bg: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,it: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,fi: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,pl: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,pt: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ru: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,sk: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,nl: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,ko: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,tr: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,zh_cn: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - ,zh_tw: 'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' - } - ,'Delete old documents from treatments collection?' : { - cs: 'Delete old documents from treatments collection?' - ,he: 'Delete old documents from treatments collection?' - ,nb: 'Delete old documents from treatments collection?' - ,fr: 'Delete old documents from treatments collection?' - ,ro: 'Delete old documents from treatments collection?' - ,el: 'Delete old documents from treatments collection?' - ,de: 'Delete old documents from treatments collection?' - ,es: 'Delete old documents from treatments collection?' - ,dk: 'Delete old documents from treatments collection?' - ,sv: 'Delete old documents from treatments collection?' - ,bg: 'Delete old documents from treatments collection?' - ,it: 'Delete old documents from treatments collection?' - ,fi: 'Delete old documents from treatments collection?' - ,pl: 'Delete old documents from treatments collection?' - ,pt: 'Delete old documents from treatments collection?' - ,ru: 'Delete old documents from treatments collection?' - ,sk: 'Delete old documents from treatments collection?' - ,nl: 'Delete old documents from treatments collection?' - ,ko: 'Delete old documents from treatments collection?' - ,tr: 'Delete old documents from treatments collection?' - ,zh_cn: 'Delete old documents from treatments collection?' - ,zh_tw: 'Delete old documents from treatments collection?' - } ,'Admin Tools' : { cs: 'Nástroje pro správu' ,he: 'כלי אדמיניסטרציה ' @@ -8226,7 +7174,6 @@ function init() { ,dl: 'Administrator opgaver' ,el: 'Εργαλεία Διαχειριστή' ,sv: 'Adminverktyg' - ,dk: 'Administrations værktøj' ,bg: 'Настройки на администратора' ,it: 'NS - Dati Mongo' ,fi: 'Ylläpitotyökalut' @@ -8236,7 +7183,6 @@ function init() { ,sk: 'Nástroje pre správu' ,nl: 'Admin tools' ,ko: '관리 도구' - ,tr: 'Yönetici araçları' ,zh_cn: '管理工具' ,zh_tw: '管理工具' } @@ -8260,7 +7206,6 @@ function init() { ,sk: 'Nightscout výkazy' ,nl: 'Nightscout rapportages' ,ko: 'Nightscout 보고하기' - ,tr: 'NightScout raporları' ,zh_cn: 'Nightscout报表生成器' } ,'Cancel' : { @@ -8276,7 +7221,6 @@ function init() { ,sv: 'Avbryt' ,bg: 'Откажи' ,it: 'Cancellare' - ,ja: '中止' ,fi: 'Peruuta' ,pl: 'Anuluj' ,pt: 'Cancelar' @@ -8284,7 +7228,6 @@ function init() { ,sk: 'Zrušiť' ,nl: 'Annuleer' ,ko: '취소' - ,tr: 'İptal' ,zh_cn: '取消' } ,'Edit treatment' : { @@ -8295,7 +7238,7 @@ function init() { ,de: 'Bearbeite Behandlung' ,es: 'Editar tratamiento' ,fr: 'Modifier un traitement' - ,dk: 'Rediger behandling' + ,dk: 'Rediger indgang' ,el: 'Επεξεργασία Εγγραφής' ,sv: 'Redigera behandling' ,bg: 'Редакция на събитие' @@ -8307,7 +7250,6 @@ function init() { ,sk: 'Upraviť ošetrenie' ,nl: 'Bewerkt behandeling' ,ko: 'Treatments 편집' - ,tr: 'Tedaviyi düzenle' ,zh_cn: '编辑操作' } ,'Duration' : { @@ -8330,7 +7272,6 @@ function init() { ,sk: 'Trvanie' ,nl: 'Duur' ,ko: '기간' - ,tr: 'süre' ,zh_cn: '持续' } ,'Duration in minutes' : { @@ -8353,7 +7294,6 @@ function init() { ,sk: 'Trvanie v minútach' ,nl: 'Duur in minuten' ,ko: '분당 지속 기간' - ,tr: 'Süre dakika cinsinden' ,zh_cn: '持续时间(分钟)' } ,'Temp Basal' : { @@ -8375,7 +7315,6 @@ function init() { ,sk: 'Dočasný bazál' ,nl: 'Tijdelijke basaal' ,ko: '임시 basal' - ,tr: 'Geçici Bazal Oranı' ,zh_cn: '临时基础率' } ,'Temp Basal Start' : { @@ -8397,7 +7336,6 @@ function init() { ,sk: 'Začiatok dočasného bazálu' ,nl: 'Start tijdelijke basaal' ,ko: '임시 basal 시작' - ,tr: 'Geçici Bazal Oranını Başlanğıcı' ,zh_cn: '临时基础率开始' } ,'Temp Basal End' : { @@ -8419,7 +7357,6 @@ function init() { ,sk: 'Koniec dočasného bazálu' ,nl: 'Einde tijdelijke basaal' ,ko: '임시 basal 종료' - ,tr: 'Geçici bazal oranını Bitişi' ,zh_cn: '临时基础率结束' } ,'Percent' : { // value in % for temp basal @@ -8442,7 +7379,6 @@ function init() { ,sk: 'Percent' ,nl: 'Procent' ,ko: '퍼센트' - ,tr: 'Yüzde' ,zh_cn: '百分比' } ,'Basal change in %' : { @@ -8464,7 +7400,6 @@ function init() { ,sk: 'Zmena bazálu v %' ,nl: 'Basaal aanpassing in %' ,ko: '% 이내의 basal 변경' - ,tr: 'Bazal değişimi % cinsinden' ,zh_cn: '基础率变化百分比' } ,'Basal value' : { // absolute value for temp basal @@ -8482,11 +7417,10 @@ function init() { ,fi: 'Basaalin määrä' ,pl: 'Dawka podstawowa' ,pt: 'Valor da basal' - ,ru: 'величина временного базалал' + ,ru: 'Временный базал' ,sk: 'Hodnota bazálu' ,nl: 'Basaal snelheid' ,ko: 'Basal' - ,tr: 'Bazal değeri' ,zh_cn: '基础率值' } ,'Absolute basal value' : { @@ -8504,11 +7438,10 @@ function init() { ,fi: 'Absoluuttinen basaalimäärä' ,pl: 'Bezwględna wartość dawki podstawowej' ,pt: 'Valor absoluto da basal' - ,ru: 'Абсолютная величина базала' + ,ru: 'Абсолютный базал' ,sk: 'Absolútna hodnota bazálu' ,nl: 'Absolute basaal waarde' ,ko: '절대적인 basal' - ,tr: 'Mutlak bazal değeri' ,zh_cn: '绝对基础率值' } ,'Announcement' : { @@ -8531,7 +7464,6 @@ function init() { ,sk: 'Oznámenia' ,nl: 'Mededeling' ,ko: '공지' - ,tr: 'Duyuru' ,zh_cn: '通告' } ,'Loading temp basal data' : { @@ -8553,7 +7485,6 @@ function init() { ,sk: 'Nahrávam dáta dočasného bazálu' ,nl: 'Laden tijdelijke basaal gegevens' ,ko: '임시 basal 로딩' - ,tr: 'Geçici bazal verileri yükleniyor' ,zh_cn: '载入临时基础率数据' } ,'Save current record before changing to new?' : { @@ -8566,7 +7497,7 @@ function init() { ,el: 'Αποθήκευση τρεχουσας εγγραφής πριν δημιουργήσουμε νέα?' ,de: 'Aktuelle Einträge speichern?' ,es: 'Grabar datos actuales antes de cambiar por nuevos?' - ,dk: 'Gem aktuelle hændelse før der skiftes til ny?' + ,dk: 'Gem aktuelle indgang før der skiftes til ny?' ,fi: 'Tallenna nykyinen merkintä ennen vaihtoa uuteen?' ,bg: 'Запази текущият запис преди да промениш новия ' ,pl: 'Zapisać bieżący rekord przed zamianą na nowy?' @@ -8576,7 +7507,6 @@ function init() { ,nl: 'Opslaan voor verder te gaan?' ,ko: '새 데이터로 변경하기 전에 현재의 기록을 저장하시겠습니까?' ,it: 'Salvare i dati correnti prima di cambiarli?' - ,tr: 'Yenisine geçmeden önce mevcut girişleri kaydet?' ,zh_cn: '在修改至新值前保存当前记录?' } ,'Profile Switch' : { @@ -8588,7 +7518,7 @@ function init() { ,el: 'Εναλλαγή προφίλ' ,de: 'Profil wechseln' ,es: 'Cambiar Perfil' - ,dk: 'Skift profil' + ,dk: 'Byt profil' ,nb: 'Bytt profil' ,fi: 'Vaihda profiilia' ,bg: 'Смяна на профил' @@ -8599,7 +7529,6 @@ function init() { ,nl: 'Profiel wissel' ,ko: '프로파일 변경' ,it: 'Cambio profilo' - ,tr: 'Profil Değiştir' ,zh_cn: '切换配置文件' } ,'Profile' : { @@ -8622,7 +7551,6 @@ function init() { ,sk: 'Profil' ,nl: 'Profiel' ,ko: '프로파일' - ,tr: 'Profil' ,zh_cn: '配置文件' } ,'General profile settings' : { @@ -8645,7 +7573,6 @@ function init() { ,nl: 'Profiel instellingen' ,ko: '일반 프로파일 설정' ,it: 'Impostazioni generali profilo' - ,tr: 'Genel profil ayarları' ,zh_cn: '通用配置文件设置' } ,'Title' : { @@ -8668,7 +7595,6 @@ function init() { ,nl: 'Titel' ,ko: '제목' ,it: 'Titolo' - ,tr: 'Başlık' ,zh_cn: '标题' } ,'Database records' : { @@ -8681,7 +7607,7 @@ function init() { ,nb: 'Databaseverdier' ,de: 'Datenbankeinträge' ,es: 'Registros grabados en base datos' - ,dk: 'Database hændelser' + ,dk: 'Database indgange' ,fi: 'Tietokantamerkintöjä' ,bg: 'Записи в базата с данни' ,pl: 'Rekordy bazy danych' @@ -8690,7 +7616,6 @@ function init() { ,sk: 'Záznamy databázi' ,ko: '데이터베이스 기록' ,it: 'Record del database' - ,tr: 'Veritabanı kayıtları' ,zh_cn: '数据库记录' ,nl: 'Database gegevens' } @@ -8704,7 +7629,7 @@ function init() { ,nb: 'Legg til ny rad' ,de: 'Neuen Eintrag hinzufügen' ,es: 'Añadir nuevo registro' - ,dk: 'Tilføj ny hændelse' + ,dk: 'Tilføj ny indgang' ,fi: 'Lisää uusi merkintä' ,bg: 'Добави нов запис' ,pl: 'Dodaj nowy rekord' @@ -8714,8 +7639,6 @@ function init() { ,nl: 'Toevoegen' ,ko: '새 기록 추가' ,it: 'Aggiungi un nuovo record' - ,ja: '新しい記録を加える' - ,tr: 'Yeni kayıt ekle' ,zh_cn: '新增记录' } ,'Remove this record' : { @@ -8738,8 +7661,6 @@ function init() { ,nl: 'Verwijder' ,ko: '이 기록 삭' ,it: 'Rimuovi questo record' - ,ja: 'この記録を除く' - ,tr: 'Bu kaydı kaldır' ,zh_cn: '删除记录' } ,'Clone this record to new' : { @@ -8752,7 +7673,7 @@ function init() { ,es: 'Duplicar este registro como nuevo' ,nb: 'Kopier til ny rad' ,de: 'Diesen Eintrag duplizieren' - ,dk: 'Kopier denne hændelse til ny' + ,dk: 'Dupliker denne indgang' ,fi: 'Kopioi tämä merkintä uudeksi' ,bg: 'Копирай този запис като нов' ,pl: 'Powiel ten rekord na nowy' @@ -8762,7 +7683,6 @@ function init() { ,nl: 'Kopieer deze invoer naar nieuwe' ,ko: '이 기록을 새기록으로 복제하기' ,it: 'Clona questo record in uno nuovo' - ,tr: 'Bu kaydı yeniden kopyala' ,zh_cn: '复制记录' } ,'Record valid from' : { @@ -8774,7 +7694,7 @@ function init() { ,el: 'Ισχύει από' ,de: 'Eintrag gültig ab' ,es: 'Registro válido desde' - ,dk: 'Hændelse gyldig fra' + ,dk: 'Indgang gyldig fra' ,nb: 'Rad gyldig fra' ,fi: 'Merkintä voimassa alkaen' ,bg: 'Записът е валиден от ' @@ -8785,7 +7705,6 @@ function init() { ,nl: 'Geldig van' ,ko: '유효 기록' ,it: 'Record valido da' - ,tr: 'Buradan geçerli giriş' ,zh_cn: '有效记录,从' } ,'Stored profiles' : { @@ -8808,7 +7727,6 @@ function init() { ,nl: 'Opgeslagen profielen' ,ko: '저장된 프로파일' ,it: 'Profili salvati' - ,tr: 'Kaydedilmiş profiller' //Kayıtlı profiller,Saklanan profiller ,zh_cn: '配置文件已存储' } ,'Timezone' : { @@ -8831,7 +7749,6 @@ function init() { ,nl: 'Tijdzone' ,ko: '타임존' ,it: 'Fuso orario' - ,tr: 'Saat dilimi' ,zh_cn: '时区' } ,'Duration of Insulin Activity (DIA)' : { @@ -8854,7 +7771,6 @@ function init() { ,nl: 'Werkingsduur insuline (DIA)' ,ko: '활성 인슐린 지속 시간(DIA)' ,it: 'Durata Attività Insulinica (DIA)' - ,tr: 'İnsülin Etki Süresi (DIA)' ,zh_cn: '胰岛素作用时间(DIA)' } ,'Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.' : { @@ -8877,7 +7793,6 @@ function init() { ,nl: 'Geeft de werkingsduur van de insuline in het lichaam aan. Dit verschilt van patient tot patient er per soort insuline, algemeen gemiddelde is 3 tot 4 uur. ' ,ko: '인슐린이 작용하는 지속시간을 나타냅니다. 사람마다 그리고 인슐린 종류에 따라 다르고 일반적으로 3~4시간간 동안 지속되며 인슐린 작용 시간(Insulin lifetime)이라고 불리기도 합니다.' ,it: 'Rappresenta la durata tipica nel quale l\'insulina ha effetto. Varia in base al paziente ed al tipo d\'insulina. Tipicamente 3-4 ore per la maggior parte dei microinfusori e dei pazienti. Chiamata anche durata d\'azione insulinica.' - ,tr: 'İnsülinin etki ettiği tipik süreye karşılık gelir. Hastaya ve insülin tipine göre değişir. Çoğu pompa insülini ve çoğu hasta için genellikle 3-4 saattir. Bazen de insülin etki süresi de denir.' ,zh_cn: '体现典型的胰岛素活性持续时间。 通过百分比和胰岛素类型体现。对于大多数胰岛素和患者来说是3至4个小时。也称为胰岛素生命周期。' } ,'Insulin to carb ratio (I:C)' : { @@ -8890,17 +7805,16 @@ function init() { ,nb: 'IKH forhold' ,de: 'Insulin/Kohlenhydrate-Verhältnis (I:KH)' ,es: 'Relación Insulina/Carbohidratos (I:C)' - ,dk: 'Insulin til kulhydrat forhold også kaldet Kulhydrat-insulinratio (I:C)' + ,dk: 'Insulin til kulhydrat forhold (I:C)' ,fi: 'Insuliiniannoksen hiilihydraattisuhde (I:HH)' ,bg: 'Съотношение инсулин/въглехидратите ICR I:C И:ВХ' ,pl: 'Współczynnik insulina/węglowodany (I:C)' ,pt: 'Relação Insulina-Carboidrato (I:C)' - ,ru: 'Соотношение инсулин/углеводы I:C' + ,ru: 'Соотношение инсулин/углеводы' ,sk: 'Inzulín-sacharidový pomer (I:C)' ,nl: 'Insuline - Koolhydraat ratio (I:C)' ,ko: '탄수화물에 대한 인슐린 비율(I:C)' ,it: 'Rapporto Insulina-Carboidrati (I:C)' - ,tr: 'İnsülin/Karbonhidrat oranı (I:C)' ,zh_cn: '碳水化合物系数(ICR)' } ,'hours' : { @@ -8923,7 +7837,6 @@ function init() { ,nl: 'Uren' ,ko: '시간' ,it: 'ore' - ,tr: 'saat' ,zh_cn: '小时' } ,'g/hour' : { @@ -8945,7 +7858,6 @@ function init() { ,nl: 'g/uur' ,ko: 'g/시간' ,it: 'g/ora' - ,tr: 'g/saat' ,zh_cn: 'g/小时' } ,'g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.' : { @@ -8955,7 +7867,6 @@ function init() { ,fr: 'g de glucides par Uninté d\'insuline. Le rapport représentant la quantité de glucides compensée par une unité d\'insuline.' ,el: 'Γραμμάρια (g) υδατάνθρακα ανά μονάδα (U) ινσουλίνης. Πόσα γραμμάρια υδατάνθρακα αντιστοιχούν σε μία μονάδα ινσουλίνης' ,sv: 'gram kolhydrater per enhet insulin. Antal gram kolhydrater varje enhet insulin sänker' - ,dk: 'gram kulhydrater per enhed insulin. (Kulhydrat-insulinratio) Den mængde kulhydrat, som dækkes af en enhed insulin.' ,es: 'gr. de carbohidratos por unidad de insulina. La proporción de cuántos gramos de carbohidratos se consumen por unidad de insulina.' ,de: 'g Kohlenhydrate pro Einheit Insulin. Das Verhältnis wie viele Gramm Kohlenhydrate je Einheit Insulin verbraucht werden.' ,nb: 'g karbohydrater per enhet insulin. Beskriver hvor mange gram karbohydrater som hånderes av en enhet insulin.' @@ -8963,11 +7874,10 @@ function init() { ,bg: 'грам въглехидрат към 1 единица инсулин. Съотношението колко грама въглехидрат се покриват от 1 единица инсулин.' ,pl: 'g węglowodanów na 1j insuliny. Współczynnik ilości gram weglowodanów równoważonych przez 1j insuliny.' ,pt: 'g de carboidrato por unidade de insulina. A razão de quantos gramas de carboidrato são processados por cada unidade de insulina.' - ,ru: 'г углеводов на ед инсулина. Соотношение показывает количество гр углеводов компенсируемого единицей инсулина.' + ,ru: 'г углеводов на ед инсулина. Соотношение ед инсулина необходимого для компенсации некоторого количества граммов углеводов' ,sk: 'gramy sacharidov na jednotku inzulínu. Pomer udáva aké množstvo sacharidov pokryje jednotka inzulínu.' ,ko: '인슐린 단위 당 탄수화물 g. 인슐린 단위에 대한 탄수화물의 양의 비율을 나타냅니다.' ,it: 'g carbo per U di insulina. Il rapporto tra quanti grammi di carboidrati sono compensati da ogni U di insulina.' - ,tr: 'İnsülin ünite başına g karbonhidrat. İnsülin ünite başına kaç gram karbonhidrat tüketildiği oranıdır.' ,zh_cn: '克碳水每单位胰岛素。每单位胰岛素可以抵消的碳水化合物克值比例。' ,nl: 'G KH per Eh insuline. De verhouding tussen hoeveel grammen koohlhydraten er verwerkt kunnen worden per eenheid insuline.' } @@ -8980,18 +7890,16 @@ function init() { ,fr: 'Facteur de sensibilité à l\'insuline (ISF)' ,el: 'Ευαισθησία στην Ινοσυλίνη (ISF)' ,sv: 'Insulinkänslighetsfaktor (ISF)' - ,dk: 'Insulinfølsomhedsfaktor (ISF)' ,nb: 'Insulinfølsomhetsfaktor' ,fi: 'Insuliiniherkkyys (ISF)' ,bg: 'Фактор на инсулинова чувствителност ISF ' ,pl: 'Współczynnik wrażliwosci na insulinę (ISF)' ,pt: 'Fator de Sensibilidade da Insulina (ISF)' - ,ru: 'Фактор чувствительности к инсулину ISF' + ,ru: 'Фактор чувствительности к инсулину' ,sk: 'Citlivosť na inzulín (ISF)' ,nl: 'Insuline gevoeligheid (ISF)' ,ko: '인슐린 민감도(ISF)' ,it: 'Fattore di Sensibilità Insulinica (ISF)' - ,tr: '(ISF) İnsülin Duyarlılık Faktörü' ,zh_cn: '胰岛素敏感系数(ISF)' } ,'mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.' : { @@ -9003,7 +7911,6 @@ function init() { ,de: 'mg/dL oder mmol/L pro Einheit Insulin. Verhältnis von BG-Veränderung je Einheit Korrekturinsulin.' ,es: 'mg/dl o mmol/L por unidad Insulina. La relación de la caída de glucosa y cada unidad de insulina de corrección administrada.' ,sv: 'mg/dl eller mmol per enhet insulin. Hur varje enhet insulin sänker blodsockret' - ,dk: 'mg/dl eller mmol per enhed insulin. Beskriver hvor mange mmol eller mg/dl blodsukkeret sænkes per enhed insulin (Insulinfølsomheden)' ,nb: 'mg/dl eller mmol/l per enhet insulin. Beskriver hvor mye blodsukkeret senkes per enhet insulin.' ,fi: 'mg/dL tai mmol/L / 1 yksikkö insuliinia. Suhde, joka kertoo montako yksikköä verensokeria yksi yksikkö insuliinia laskee.' ,bg: 'мг/дл или ммол към 1 единица инсулин. Съотношението как се променя кръвната захар със всяка единица инсулинова корекция' @@ -9014,7 +7921,6 @@ function init() { ,nl: 'mg/dL of mmol/L per E insuline. Ratio daling BG waarde per eenheid correctie' ,ko: '인슐린 단위당 mg/dL 또는 mmol/L. 인슐린 단위당 얼마나 많은 혈당 변화가 있는지의 비율을 나타냅니다.' ,it: 'mg/dL o mmol/L per U insulina. Il rapporto di quanto la glicemia varia per ogni U di correzione insulinica.' - ,tr: 'Ünite insülin başına mg/dL veya mmol/L. Her bir Ünite düzeltme insülin ile KŞ\'nin ne kadar değiştiğini gösteren orandır.' ,zh_cn: 'mg/dL或mmol/L每单位胰岛素。每单位输入胰岛素导致血糖变化的比例' } ,'Carbs activity / absorption rate' : { @@ -9026,7 +7932,6 @@ function init() { ,de: 'Kohlenhydrataktivität / Aufnahme Kohlenhydrate' ,es: 'Actividad de carbohidratos / tasa de absorción' ,sv: 'Kolhydratstid' - ,dk: 'Kulhydrattid / optagelsestid' ,nb: 'Karbohydrattid' ,fi: 'Hiilihydraattiaktiivisuus / imeytymisnopeus' ,bg: 'Активност на въглехидратите / време за абсорбиране' @@ -9037,7 +7942,6 @@ function init() { ,nl: 'Koolhydraat opname snelheid' ,ko: '활성 탄수화물/흡수율' ,it: 'Attività carboidrati / Velocità di assorbimento' - ,tr: 'Karbonhidrat aktivitesi / emilim oranı' ,zh_cn: '碳水化合物活性/吸收率' } ,'grams peUr unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).' : { @@ -9047,7 +7951,6 @@ function init() { ,fr: 'grammes par unité de temps. Représente l\'augmentation de COB par unité de temps et la quantité de glucides agissant durant cette période. L\'absorption des glucides est imprécise et est évaluée en moyenne. L\'unité est grammes par heure (g/h).' ,ro: 'grame pe unitatea de timp. Reprezintă atât schimbarea COB pe unitatea de timp, cât și cantitatea de carbohidrați care ar influența în perioada de timp. Graficele ratei de absorbție sunt mai puțin înțelese decât senzitivitatea la insulină, dar se poate aproxima folosind o întârziere implicită și apoi o rată constantă de aborbție (g/h).' ,sv: 'gram per tidsenhet. Representerar både ändring i aktiva kolhydrater per tidsenhet som mängden kolhydrater som tas upp under denna tid. Kolhydratsupptag / aktivitetskurvor är svårare att förutspå än aktivt insulin men kan beräknas genom att använda en startfördröjning följd av en konstant absorbtionsgrad (g/timme) ' - ,dk: 'gram per tidsenhed. Repræsentere både ændring i aktive kulhydrater per tidsenhed, samt mængden af kulhydrater der indtages i dette tidsrum. Kulhydratsoptag / aktivitetskurver er svære at forudse i forhold til aktiv insulin, men man kan lave en tilnærmet beregning, ved at inkludere en forsinkelse i beregningen, sammen med en konstant absorberingstid (g/time).' ,de: 'Gramm pro Zeiteinheit. Bedeutet sowohl die Änderung in COB je Zeiteinheit, als auch die Menge an Kohlenhydraten die über diese Zeit wirken sollten. Kohlenhydrat-Absorption / Aktivitätskurven werden weniger genau verstanden als Insulinaktivität, aber sie können angenähert werden indem eine Anfangsverzögerung mit konstanter Aufnahme (g/Std.) verwendet wird.' ,es: 'gramos por unidad de tiempo. Representa tanto el cambio en carbohidratos activos por unidad de tiempo como la cantidad de carbohidratos absorbidos durante este tiempo. Las curvas de captación / actividad de carbohidratos son más difíciles de predecir que la insulina activa, pero se pueden calcular utilizando un retraso de inicio seguido de una tasa de absorción constante (gr/h)' ,nb: 'gram per tidsenhet. Representerer både endringen i COB per tidsenhet, såvel som mengden av karbohydrater som blir tatt opp i løpet av den tiden. Carb absorpsjon / virkningskurver er mindre forstått enn insulinaktivitet, men kan tilnærmes ved hjelp av en forsinkelse fulgt av en konstant hastighet av absorpsjon ( g / time ) .' @@ -9059,7 +7962,6 @@ function init() { ,sk: 'gramy za jednotku času. Reprezentuje súčasne zmenu COB za jednotku času, ako aj množstvo sacharidov ktoré sa za tú dobu prejavili. Krivka vstrebávania sacharidov je omnoho menej pochopiteľná ako pôsobenie inzulínu (IOB), ale môže byť približne s použitím počiatočného oneskorenia a následne s konštantným vstrebávaním (g/hod). ' ,ko: '단위 시간당 그램. 시간당 작용하는 탄수화물의 총량 뿐 아니라 시간 단위당 COB의 변화를 나타냅니다. 탄수화물 흡수율/활성도 곡선은 인슐린 활성도보다 이해가 잘 되지는 않지만 지속적인 흡수율(g/hr)에 따른 초기 지연을 사용하여 근사치를 구할 수 있습니다.' ,it: 'grammi per unità di tempo. Rappresentano sia il cambio di COB per unità di tempo, sia la quantità di carboidrati che faranno effetto nel tempo. Assorbimento di carboidrati / curva di attività sono meno conosciute rispetto all\'attività insulinica, ma possono essere approssimate usando un ritardo iniziale seguito da un rapporto costante di assorbimento (g/hr).' - ,tr: 'Ur birim zaman başına gram. Birim zamanda (COB) Aktif Krabonhidratdaki değişimin yanı sıra o zaman üzerinde etki etmesi gereken karbonhidrat miktarını ifade eder. Karbonhidrat emme/aktivite eğrileri, insülin aktivitesinden daha zor anlaşılmaktadır, ancak bir başlangıç gecikmesi ve ardından sabit bir emilim oranı (g/hr) kullanılarak yaklaşık olarak tahmin edilebilmektedir.' ,zh_cn: '克每单位时间。表示每单位时间COB(活性碳水化合物)的变化,以及在该时间应该生效的碳水化合物的量。碳水化合物活性/吸收曲线比胰岛素活性难理解,但可以使用初始延迟,接着恒定吸收速率(克/小时)来近似模拟。' ,nl: 'grammen per tijdseenheid. Geeft de wijzigingen in COB per tijdseenheid alsookde hoeveelheid KH dat impact zou moeten hebben over deze tijdspanne. KH absorbtie / activiteits curveszijn minder eenvoudig uitzetbaar, maar kunnen geschat worden door gebruik te maken van een startvertreging en daarna een constante curve van absorbtie (g/u).' } @@ -9078,12 +7980,11 @@ function init() { ,bg: 'Базална стойност [единица/час]' ,pl: 'Dawka podstawowa [j/h]' ,pt: 'Taxas de basal [unidades/hora]' - ,ru: 'Базал ед/час' + ,ru: 'Стойкость базала ед/час' ,sk: 'Bazál [U/hod]' ,nl: 'Basaal snelheid [eenheden/uur]' ,ko: 'Basal 비율[unit/hour]' ,it: 'Basale [unità/ora]' - ,tr: 'Bazal oranı [ünite/saat]' ,zh_cn: '基础率 [U/小时]' } ,'Target BG range [mg/dL,mmol/L]' : { @@ -9092,7 +7993,7 @@ function init() { ,ro: 'Intervalul țintă al glicemiei [mg/dL, mmol/L]' ,el: 'Στόχος Γλυκόζης Αίματος [mg/dl , mmol/l]' ,de: 'Blutzucker-Zielbereich [mg/dL, mmol/L]' - ,dk: 'Ønsket blodsukkerinterval [mg/dl,mmol]' + ,dk: 'Ønskbart blodsukkerinterval [mg/dl,mmol]' ,es: 'Intervalo glucemia dentro del objetivo [mg/dL,mmol/L]' ,fr: 'Cible d\'intervalle de glycémie' ,sv: 'Önskvärt blodsockerintervall [mg/dl,mmol]' @@ -9106,7 +8007,6 @@ function init() { ,nl: 'Doel BG waarde in [mg/dl,mmol/L' ,ko: '목표 혈당 범위 [mg/dL,mmol/L]' ,it: 'Obiettivo d\'intervallo glicemico [mg/dL,mmol/L]' - ,tr: 'Hedef KŞ aralığı [mg / dL, mmol / L]' ,zh_cn: '目标血糖范围 [mg/dL,mmol/L]' } ,'Start of record validity' : { @@ -9117,19 +8017,18 @@ function init() { ,el: 'Ισχύει από' ,sv: 'Starttid för händelse' ,de: 'Beginn der Aufzeichnungsgültigkeit' - ,dk: 'Starttid for gyldighed' + ,dk: 'Starttid for hændelse' ,es: 'Inicio de validez de datos' ,nb: 'Starttidspunkt for gyldighet' ,fi: 'Merkinnän alkupäivämäärä' ,bg: 'Начало на записа' ,pl: 'Początek ważnych rekordów' ,pt: 'Início da validade dos dados' - ,ru: 'Начало валидности записей' + ,ru: 'Начало записей' ,sk: 'Začiatok platnosti záznamu' ,nl: 'Start geldigheid' ,ko: '기록 유효기간의 시작일' ,it: 'Inizio di validità del dato' - ,tr: 'Kayıt geçerliliği başlangıcı' ,zh_cn: '有效记录开始' } ,'Icicle' : { @@ -9151,7 +8050,6 @@ function init() { ,ru: 'Силуэт сосульки' ,sk: 'Inverzne' ,ko: '고드름 방향' - ,tr: 'Buzsaçağı' //Sarkıt ,zh_cn: 'Icicle' ,zh_tw: 'Icicle' } @@ -9171,11 +8069,10 @@ function init() { ,bg: 'Базал' ,pl: 'Zmiana dawki bazowej' ,pt: 'Renderizar basal' - ,ru: 'показывать базал' + ,ru: 'Дать базал' ,sk: 'Zobrazenie bazálu' ,nl: 'Toon basaal' ,ko: 'Basal 사용하기' - ,tr: 'Bazal Grafik' ,zh_cn: '使用基础率' ,zh_tw: '使用基礎率' } @@ -9199,7 +8096,6 @@ function init() { ,nl: 'Gebruikt profiel' ,ko: '프로파일이 사용됨' ,it: 'Profilo usato' - ,tr: 'Kullanılan profil' ,zh_cn: '配置文件已使用' } ,'Calculation is in target range.' : { @@ -9209,7 +8105,7 @@ function init() { ,fr: 'La valeur calculée est dans l\'intervalle cible' ,el: 'Ο υπολογισμός είναι εντός στόχου' ,de: 'Berechnung ist innerhalb des Zielbereichs' - ,dk: 'Beregning er i målområdet' + ,dk: 'Inden i intervalområde' ,es: 'El cálculo está dentro del rango objetivo' ,sv: 'Inom intervallområde' ,nb: 'Innenfor målområde' @@ -9222,7 +8118,6 @@ function init() { ,nl: 'Berekening valt binnen doelwaards' ,ko: '계산은 목표 범위 안에 있습니다.' ,it: 'Calcolo all\'interno dell\'intervallo' - ,tr: 'Hesaplama hedef aralıktadır.' ,zh_cn: '预计在目标范围内' } ,'Loading profile records ...' : { @@ -9245,7 +8140,6 @@ function init() { ,nl: 'Laden profiel gegevens' ,ko: '프로파일 기록 로딩' ,it: 'Caricamento dati del profilo ...' - ,tr: 'Profil kayıtları yükleniyor ...' ,zh_cn: '载入配置文件记录...' } ,'Values loaded.' : { @@ -9268,7 +8162,6 @@ function init() { ,nl: 'Gegevens geladen' ,ko: '값이 로드됨' ,it: 'Valori caricati.' - ,tr: 'Değerler yüklendi.' ,zh_cn: '已载入数值' } ,'Default values used.' : { @@ -9291,7 +8184,6 @@ function init() { ,nl: 'Standaard waardes gebruikt' ,ko: '초기 설정 값이 사용됨' ,it: 'Valori standard usati.' - ,tr: 'Varsayılan değerler kullanıldı.' ,zh_cn: '已使用默认值' } ,'Error. Default values used.' : { @@ -9314,7 +8206,6 @@ function init() { ,nl: 'FOUT: Standaard waardes gebruikt' ,ko: '에러. 초기 설정 값이 사용됨' ,it: 'Errore. Valori standard usati.' - ,tr: 'Hata. Varsayılan değerler kullanıldı.' ,zh_cn: '错误,已使用默认值' } ,'Time ranges of target_low and target_high don\'t match. Values are restored to defaults.' : { @@ -9324,7 +8215,7 @@ function init() { ,fr: 'Les intervalles de temps pour la cible glycémique supérieure et inférieure diffèrent. Les valeurs par défault sont restaurées.' ,el: 'Το χρονικό διάστημα του χαμηλού ορίου/στόχου και του υψηλού, δεν συμπίπτουν. Γίνεται επαναφορά στις προκαθορισμένες τιμές.' ,de: 'Zeitspanne vom untersten und obersten Wert wird nicht berücksichtigt. Werte auf Standard zurückgesetzt.' - ,dk: 'Tidsinterval for målområde lav og høj stemmer ikke overens. Standardværdier er brugt' + ,dk: 'Tidsinterval for målområde for lav og høj stemmer ikke overens' ,es: 'Los marcos temporales para objetivo inferior y objetivo superior no coinciden. Los valores predeterminados son usados.' ,ro: 'Intervalele temporale pentru țintă_inferioară și țintă_superioară nu se potrivesc. Se folosesc valorile implicite.' ,sv: 'Tidsintervall för målområde låg och hög stämmer ej' @@ -9337,7 +8228,6 @@ function init() { ,ko: '설정한 저혈당과 고혈당의 시간 범위와 일치하지 않습니다. 값은 초기 설정값으로 다시 저장 될 것입니다.' ,it: 'Intervalli di tempo della glicemia obiettivo inferiore e superiore non corretti. Valori ripristinati a quelli standard.' ,nl: 'Tijdspanne van laag en hoog doel zijn niet correct. Standaard waarden worden gebruikt' - ,tr: 'Target_low ve target_high öğelerinin zaman aralıkları eşleşmiyor. Değerler varsayılanlara geri yüklendi.' ,zh_cn: '时间范围内的目标高低血糖值不匹配。已恢复使用默认值。' } ,'Valid from:' : { @@ -9360,7 +8250,6 @@ function init() { ,nl: 'Geldig van:' ,ko: '유효' ,it: 'Valido da:' - ,tr: 'Tarihinden itibaren geçerli' ,zh_cn: '生效从:' } ,'Save current record before switching to new?' : { @@ -9383,7 +8272,6 @@ function init() { ,nl: 'Opslaan voor verder te gaan?' ,ko: '새 데이터로 변환하기 전에 현재의 기록을 저장하겠습니까?' ,it: 'Salvare il dato corrente prima di passare ad uno nuovo?' - ,tr: 'Yenisine geçmeden önce mevcut kaydı kaydet' ,zh_cn: '切换至新记录前保存当前记录?' } ,'Add new interval before' : { @@ -9406,7 +8294,6 @@ function init() { ,nl: 'Voeg interval toe voor' ,ko: '새로운 구간을 추가하세요' ,it: 'Aggiungere prima un nuovo intervallo' - ,tr: 'Daha önce yeni aralık ekle' ,zh_cn: '在此前新增区间' } ,'Delete interval' : { @@ -9416,7 +8303,7 @@ function init() { ,fr: 'Effacer l\'intervalle' ,el: 'Διαγραφή διαστήματος' ,de: 'Intervall löschen' - ,dk: 'Slet interval' + ,dk: 'Fjern interval' ,es: 'Borrar intervalo' ,ro: 'Șterge interval' ,sv: 'Ta bort intervall' @@ -9429,7 +8316,6 @@ function init() { ,nl: 'Verwijder interval' ,ko: '구간을 지우세요.' ,it: 'Elimina intervallo' - ,tr: 'Aralığı sil' ,zh_cn: '删除区间' } ,'I:C' : { @@ -9451,7 +8337,6 @@ function init() { ,nl: 'I:C' ,ko: 'I:C' ,it: 'I:C' - ,tr: 'İ:K' ,zh_cn: 'ICR' } ,'ISF' : { @@ -9469,11 +8354,10 @@ function init() { ,pl: 'ISF' ,pt: 'ISF' ,nl: 'ISF' - ,ru: 'Чувствительность к инсулину ISF' + ,ru: 'Чувствительность к инсулину' ,sk: 'ISF' ,ko: 'ISF' ,it: 'ISF' - ,tr: 'ISF' ,zh_cn: 'ISF' } ,'Combo Bolus' : { @@ -9481,7 +8365,7 @@ function init() { ,he: 'בולוס קומבו ' ,pl: 'Bolus złożony' ,de: 'Verzögerter Bolus' - ,dk: 'Kombineret bolus' + ,dk: 'Kombo-bolus' ,es: 'Combo-Bolo' ,fr: 'Bolus Duo/Combo' ,el: '' @@ -9496,7 +8380,6 @@ function init() { ,nl: 'Pizza Bolus' ,ko: 'Combo Bolus' ,it: 'Combo Bolo' - ,tr: 'Kombo (Yayma) Bolus' ,zh_cn: '双波' } ,'Difference' : { @@ -9519,7 +8402,6 @@ function init() { ,nl: 'Verschil' ,ko: '차이' ,it: 'Differenza' - ,tr: 'fark' ,zh_cn: '差别' } ,'New time' : { @@ -9542,7 +8424,6 @@ function init() { ,nl: 'Nieuwe tijd' ,ko: '새로운 시간' ,it: 'Nuovo Orario' - ,tr: 'Yeni zaman' ,zh_cn: '新时间' } ,'Edit Mode' : { @@ -9551,7 +8432,7 @@ function init() { ,ro: 'Mod editare' ,fr: 'Mode Édition' ,de: 'Bearbeitungsmodus' - ,dk: 'Redigerings tilstand' + ,dk: 'Redigerings mode' ,es: 'Modo edición' ,sv: 'Editeringsläge' ,el: 'Λειτουργία Επεξεργασίας' @@ -9564,9 +8445,7 @@ function init() { ,pt: 'Modo de edição' ,ko: '편집 모드' ,it: 'Modalità di Modifica' - ,ja: '編集モード' ,nl: 'Wijzigen uitvoeren' - ,tr: 'Düzenleme Modu' ,zh_cn: '编辑模式' ,zh_tw: '編輯模式' } @@ -9590,7 +8469,6 @@ function init() { ,nl: 'Als geactiveerd is Wijzigen modus beschikbaar' ,ko: '편집모드를 시작하기 위해 아이콘을 활성화하면 볼 수 있습니다.' ,it: 'Quando abilitata, l\'icona della Modalità di Modifica è visibile' - ,tr: 'Etkinleştirildiğinde düzenleme modunun başında simgesi görünecektir.' ,zh_cn: '启用后开始编辑模式图标可见' ,zh_tw: '啟用後開始編輯模式圖標可見' } @@ -9614,7 +8492,6 @@ function init() { ,nl: 'Operatie' ,ko: '동작' ,it: 'Operazione' - ,tr: 'İşlem' //Operasyon ,zh_cn: '操作' } ,'Move' : { @@ -9637,7 +8514,6 @@ function init() { ,nl: 'Verplaats' ,ko: '이동' ,it: 'Muovi' - ,tr: 'Taşı' ,zh_cn: '移动' } ,'Delete' : { @@ -9660,8 +8536,6 @@ function init() { ,nl: 'Verwijder' ,ko: '삭제' ,it: 'Elimina' - ,ja: '削除' - ,tr: 'Sil' ,zh_cn: '删除' } ,'Move insulin' : { @@ -9684,7 +8558,6 @@ function init() { ,nl: 'Verplaats insuline' ,ko: '인슐린을 이동하세요.' ,it: 'Muovi Insulina' - ,tr: 'İnsülini taşı' ,zh_cn: '移动胰岛素' } ,'Move carbs' : { @@ -9707,7 +8580,6 @@ function init() { ,nl: 'Verplaats KH' ,ko: '탄수화물을 이동하세요.' ,it: 'Muovi carboidrati' - ,tr: 'Karbonhidratları taşı' ,zh_cn: '移动碳水' } ,'Remove insulin' : { @@ -9730,7 +8602,6 @@ function init() { ,nl: 'Verwijder insuline' ,ko: '인슐린을 지우세요.' ,it: 'Rimuovi insulina' - ,tr: 'İnsülini kaldır' ,zh_cn: '去除胰岛素' } ,'Remove carbs' : { @@ -9753,7 +8624,6 @@ function init() { ,nl: 'Verwijder KH' ,ko: '탄수화물을 지우세요.' ,it: 'Rimuovi carboidrati' - ,tr: 'Karbonhidratları kaldır' ,zh_cn: '去除碳水' } ,'Change treatment time to %1 ?' : { @@ -9776,7 +8646,6 @@ function init() { ,nl: 'Wijzig behandel tijdstip naar %1' ,ko: '%1 treatment을 변경하세요.' ,it: 'Cambiare tempo alla somministrazione a %1 ?' - ,tr: 'Tedavi tarihini %1 e değiştirilsin mi?' ,zh_cn: '修改操作时间到%1?' } ,'Change carbs time to %1 ?' : { @@ -9799,7 +8668,6 @@ function init() { ,nl: 'Wijzig KH tijdstip naar %1' ,ko: '%1로 탄수화물 시간을 변경하세요.' ,it: 'Cambiare durata carboidrati a %1 ?' - ,tr: 'Karbonhidrat zamanını %1 e değiştirilsin mi?' ,zh_cn: '修改碳水时间到%1?' } ,'Change insulin time to %1 ?' : { @@ -9822,7 +8690,6 @@ function init() { ,nl: 'Wijzig insuline tijdstip naar %1' ,ko: '%1로 인슐린 시간을 변경하세요.' ,it: 'Cambiare durata insulina a %1 ?' - ,tr: 'İnsülin tarihini %1 e değiştirilsin mi?' // zamanı ,zh_cn: '修改胰岛素时间到%1?' } ,'Remove treatment ?' : { @@ -9845,7 +8712,6 @@ function init() { ,nl: 'Verwijder behandeling' ,ko: 'Treatment를 지우세요.' ,it: 'Rimuovere somministrazione ?' - ,tr: 'Tedavi kaldırılsın mı? ' ,zh_cn: '去除操作?' } ,'Remove insulin from treatment ?' : { @@ -9868,7 +8734,6 @@ function init() { ,nl: 'Verwijder insuline van behandeling' ,ko: 'Treatment에서 인슐린을 지우세요.' ,it: 'Rimuovere insulina dalla somministrazione ?' - ,tr: 'İnsülini tedaviden çıkartılsın mı?' ,zh_cn: '从操作中去除胰岛素?' } ,'Remove carbs from treatment ?' : { @@ -9891,7 +8756,6 @@ function init() { ,nl: 'Verwijder KH van behandeling' ,ko: 'Treatment에서 탄수화물을 지우세요.' ,it: 'Rimuovere carboidrati dalla somministrazione ?' - ,tr: 'Karbonhidratları tedaviden çıkartılsın mı ?' // kaldırılsın mı ,zh_cn: '从操作中去除碳水化合物?' } ,'Rendering' : { @@ -9914,7 +8778,6 @@ function init() { ,nl: 'Renderen' ,ko: '랜더링' ,it: 'Traduzione' - ,tr: 'Grafik oluşturuluyor...' ,zh_cn: '渲染' } ,'Loading OpenAPS data of' : { @@ -9930,14 +8793,13 @@ function init() { ,nb: 'Laster OpenAPS data for' ,bg: 'Зареждане на OpenAPS данни от' ,fi: 'Lataan OpenAPS tietoja' - ,ru: 'Загрузка данных OpenAPS от' + ,ru: 'Загрузка данных OpenAPS' ,sk: 'Nahrávam OpenAPS dáta z' ,pl: 'Ładuję dane OpenAPS z' ,pt: 'Carregando dados de OpenAPS de' ,ko: 'OpenAPS 데이터 로딩' ,it: 'Caricamento in corso dati OpenAPS' ,nl: 'OpenAPS gegevens opladen van' - ,tr: 'dan OpenAPS verileri yükleniyor' ,zh_cn: '载入OpenAPS数据从' } ,'Loading profile switch data' : { @@ -9960,7 +8822,6 @@ function init() { ,ko: '프로파일 변환 데이터 로딩' ,it: 'Caricamento in corso dati cambio profilo' ,nl: 'Ophalen van data om profiel te wisselen' - ,tr: 'Veri profili değişikliği yükleniyor' ,zh_cn: '载入配置文件交换数据' } ,'Profile is going to be saved in newer format used in Nightscout 0.9.0 and above and will not be usable in older versions anymore.\nAre you sure?' : { @@ -9983,7 +8844,6 @@ function init() { ,ko: '프로파일은 Nightscout 0.9.0 에서 새로운 형식으로 저장될 예정입니다. 구버전은 더이상 사용되지 않을 예정입니다. 확인 하셨습니까?' ,it: 'Profilo sta per essere salvato nel formato più recente utilizzato in Nightscout 0.9.0 e/o superiori e non sarà più possibile utilizzarlo nelle versioni precedenti. \nSei sicuro?' ,nl: 'Profiel wordt opgeslagen in een nieuw formaat dat gebruikt wordt vanaf Nightscout 0.9.0 hierdoor is deze niet meer bruikbaar voor oudere versies. \nWil je doorgaan?' - ,tr: 'Profil, Nightscout 0.9.0 ve sonraki sürümlerinde kullanılan daha yeni bir formatta kaydedilecek ve artık eski sürümlerde kullanılamayacaktır.\nemin misiniz?' ,zh_cn: '配置文件将使用0.9.0版本之后的新格式保存,旧版本程序将无法使用。\n你确定吗?' } ,'Wrong profile setting.\nNo profile defined to displayed time.\nRedirecting to profile editor to create new profile.' : { @@ -9992,7 +8852,7 @@ function init() { ,el: 'Λάθος προφίλ. Παρακαλώ δημιουργήστε ένα νέο προφίλ' ,fr: 'Erreur de réglage de profil. \nAucun profil défini pour indiquer l\'heure. \nRedirection vers la création d\'un nouveau profil. ' ,de: 'Falsche Profileinstellung.\nKein Profil festgelegt zur angezeigten Zeit.\n Weiter zum Profileditor, um ein neues Profil zu erstellen.' - ,dk: 'Forkert profilindstilling.\nIngen profil defineret til at vise tid.\nOmdirigere til profil editoren for at lave en ny profil.' + ,dk: 'Forkert profilindstilling.\nIngen profil defineret til at vise tid.\nOmdirigerar til profil editoren for at lave en ny profil.' ,es: 'Configuración incorrecta del perfil. \n No establecido ningún perfil en el tiempo mostrado. \n Continuar en editor de perfil para crear perfil nuevo.' ,bg: 'Грешни настройки на профила. \nНяма определен профил към избраното време. \nПрепращане към редактора на профила, за създаване на нов профил.' ,ro: 'Setare de profil eronată.\nNu este definit niciun profil pentru perioada afișată.\nMergeți la editorul de profiluri pentru a defini unul nou.' @@ -10006,7 +8866,6 @@ function init() { ,ko: '잘못된 프로파일 설정. \n프로파일이 없어서 표시된 시간으로 정의됩니다. 새 프로파일을 생성하기 위해 프로파일 편집기로 리다이렉팅' ,it: 'Impostazione errata del profilo. \nNessun profilo definito per visualizzare l\'ora. \nReindirizzamento al profilo editor per creare un nuovo profilo.' ,nl: 'Verkeerde profiel instellingen.\ngeen profiel beschibaar voor getoonde tijd.\nVerder naar profiel editor om een profiel te maken.' - ,tr: 'Yanlış profil ayarı.\nGörüntülenen zamana göre profil tanımlanmamış.\nYeni profil oluşturmak için profil düzenleyicisine yönlendiriliyor.' ,zh_cn: '配置文件设置错误。\n没有配置文件定义为显示时间。\n返回配置文件编辑器以新建配置文件。' } ,'Pump' : { @@ -10028,7 +8887,6 @@ function init() { ,fi: 'Pumppu' ,pt: 'Bomba' ,it: 'Pompa' - ,tr: 'Pompa' ,zh_cn: '胰岛素泵' ,pl: 'Pompa' } @@ -10041,17 +8899,16 @@ function init() { ,el: 'Ημέρες χρήσης αισθητήρα (SAGE)' ,nb: 'Sensoralder (SAGE)' ,de: 'Sensor-Alter' - ,dk: 'Sensor alder (SAGE)' + ,dk: 'Sensoralder (SAGE)' ,es: 'Días uso del sensor' ,bg: 'Възраст на сензора (ВС)' ,ro: 'Vechimea senzorului' - ,ru: 'Сенсор проработал' + ,ru: 'Возраст сенсора' ,nl: 'Sensor leeftijd' ,ko: '센서 사용 기간' ,fi: 'Sensorin ikä' ,pt: 'Idade do sensor' ,it: 'SAGE - Durata Sensore' - ,tr: '(SAGE) Sensör yaşı ' ,zh_cn: '探头使用时间(SAGE)' ,zh_tw: '探頭使用時間(SAGE)' ,pl: 'Wiek sensora' @@ -10075,7 +8932,6 @@ function init() { ,pt: 'Idade da insulina' ,it: 'IAGE - Durata Insulina' ,nl: 'Insuline ouderdom (IAGE)' - ,tr: '(IAGE) İnsülin yaşı' ,zh_cn: '胰岛素使用时间(IAGE)' ,zh_tw: '胰島素使用時間(IAGE)' ,pj: 'Wiek insuliny' @@ -10099,7 +8955,6 @@ function init() { ,fi: 'Tilapäinen tavoite' ,pt: 'Meta temporária' ,it: 'Obiettivo Temporaneo' - ,tr: 'Geçici hedef' ,zh_cn: '临时目标' } ,'Reason' : { @@ -10121,7 +8976,6 @@ function init() { ,fi: 'Syy' ,pt: 'Razão' ,it: 'Ragionare' - ,tr: 'Neden' // Gerekçe ,zh_cn: '原因' ,pl: 'Powód' } @@ -10143,7 +8997,6 @@ function init() { ,fi: 'Syödään pian' ,pt: 'Refeição em breve' ,it: 'Mangiare prossimamente' - ,tr: 'Yakında yemek' // Kısa zamanda yemek yenecek ,zh_cn: '接近用餐时间' ,pl: 'Zjedz wkrótce' } @@ -10166,7 +9019,6 @@ function init() { ,fi: 'Ylä' ,pt: 'Superior' ,it: 'Superiore' - ,tr: 'Üst' ,zh_cn: '顶部' ,pl: 'Góra' } @@ -10189,7 +9041,6 @@ function init() { ,fi: 'Ala' ,pt: 'Inferior' ,it: 'Inferiore' - ,tr: 'Alt' //aşağı, alt, düşük ,zh_cn: '底部' ,pl: "Dół" } @@ -10212,7 +9063,6 @@ function init() { ,fi: 'Aktiviteetti' ,pt: 'Atividade' ,it: 'Attività' - ,tr: 'Aktivite' ,zh_cn: '有效的' ,pl: 'Aktywność' } @@ -10235,7 +9085,6 @@ function init() { ,fi: 'Tavoitteet' ,pt: 'Metas' ,it: 'Obiettivi' - ,tr: 'Hedefler' ,zh_cn: '目标' ,pl: 'Cele' } @@ -10258,7 +9107,6 @@ function init() { ,sk: 'Bolusový inzulín:' ,it: 'Insulina Bolo' ,nl: 'Bolus insuline' - ,tr: 'Bolus insülin:' ,zh_cn: '大剂量胰岛素' ,pl: 'Bolus insuliny' } @@ -10281,7 +9129,6 @@ function init() { ,sk: 'Základný bazálny inzulín:' ,it: 'Insulina Basale:' ,nl: 'Basis basaal insuline' - ,tr: 'Temel bazal insülin' ,zh_cn: '基础率胰岛素' ,pl: 'Bazowa dawka insuliny' } @@ -10299,12 +9146,11 @@ function init() { ,ko: '초과된 임시 basal 인슐린' ,fi: 'Positiivinen tilapäisbasaali:' ,de: 'Positives temporäres Basal Insulin:' - ,dk: 'Positiv midlertidig basalinsulin:' + ,dk: 'Positiv tempbasal insulin:' ,pt: 'Insulina basal temporária positiva:' ,sk: 'Pozitívny dočasný bazálny inzulín:' ,it: 'Insulina basale temp positiva:' ,nl: 'Extra tijdelijke basaal insuline' - ,tr: 'Pozitif geçici bazal insülin:' ,zh_cn: '实际临时基础率胰岛素' , pl: 'Zwiększona bazowa dawka insuliny' } @@ -10322,12 +9168,11 @@ function init() { ,ko: '남은 임시 basal 인슐린' ,fi: 'Negatiivinen tilapäisbasaali:' ,de: 'Negatives temporäres Basal Insulin:' - ,dk: 'Negativ midlertidig basalinsulin:' + ,dk: 'Negativ tempbasal insulin:' ,pt: 'Insulina basal temporária negativa:' ,sk: 'Negatívny dočasný bazálny inzulín:' ,it: 'Insulina basale Temp negativa:' ,nl: 'Negatieve tijdelijke basaal insuline' - ,tr: 'Negatif geçici bazal insülin:' ,zh_cn: '其余临时基础率胰岛素' , pl: 'Zmniejszona bazowa dawka insuliny' } @@ -10345,12 +9190,11 @@ function init() { ,ko: '전체 basal 인슐린' ,fi: 'Basaali yhteensä:' ,de: 'Gesamt Basal Insulin:' - ,dk: 'Total daglig basalinsulin:' + ,dk: 'Total basalinsulin:' ,pt: 'Insulina basal total:' ,sk: 'Celkový bazálny inzulín:' ,it: 'Insulina Basale Totale:' ,nl: 'Totaal basaal insuline' - ,tr: 'Toplam bazal insülin:' ,zh_cn: '基础率胰岛素合计' , pl: 'Całkowita ilość bazowej dawki insuliny' } @@ -10361,7 +9205,7 @@ function init() { ,fr: 'Insuline totale journalière' ,ro: 'Insulina totală zilnică:' ,el: 'Συνολική Ημερήσια Ινσουλίνη' - ,ru: 'Всего суточн базал инсулина' + ,ru: 'Всего ежедн базал инсулина' ,sv: 'Total dagsdos insulin' ,nb: 'Total daglig insulin' ,ko: '하루 인슐린 총량' @@ -10373,7 +9217,6 @@ function init() { ,sk: 'Celkový denný inzulín:' ,it: 'Totale giornaliero d\'insulina:' ,nl: 'Totaal dagelijkse insuline' - ,tr: 'Günlük toplam insülin:' ,zh_cn: '每日胰岛素合计' ,pl: 'Całkowita dzienna ilość insuliny' } @@ -10389,13 +9232,12 @@ function init() { ,nb: 'Kan ikke %1 rolle' ,fi: '%1 operaatio roolille opäonnistui' ,de: 'Unpassend zu %1 Rolle' - ,dk: 'Kan ikke slette %1 rolle' + ,dk: 'Kan ikke fjerne %1 rolle' ,pt: 'Função %1 não foi possível' ,sk: 'Chyba volania %1 Role' ,ko: '%1로 비활성' ,it: 'Incapace di %1 Ruolo' ,nl: 'Kan %1 rol niet verwijderen' - ,tr: '%1 Rolü yapılandırılamadı' ,zh_cn: '%1角色不可用' ,pl: 'Nie można %1 roli' } @@ -10411,13 +9253,12 @@ function init() { ,nb: 'Kan ikke ta bort rolle' ,fi: 'Roolin poistaminen epäonnistui' ,de: 'Rolle nicht löschbar' - ,dk: 'Kan ikke slette rolle' + ,dk: 'Kan ikke fjerne rolle' ,pt: 'Não foi possível apagar a Função' ,sk: 'Rola sa nedá zmazať' ,ko: '삭제로 비활성' ,it: 'Incapace di eliminare Ruolo' ,nl: 'Niet mogelijk rol te verwijderen' - ,tr: 'Rol silinemedi' ,zh_cn: '无法删除角色' ,pl: 'Nie można usunąć roli' } @@ -10439,7 +9280,6 @@ function init() { ,ko: '데이터베이스가 %1 포함' ,it: 'Database contiene %1 ruolo' ,nl: 'Database bevat %1 rollen' - ,tr: 'Veritabanı %1 rol içerir' ,zh_cn: '数据库包含%1个角色' , pl: 'Baza danych zawiera %1 ról' } @@ -10461,7 +9301,6 @@ function init() { ,ko: '편집 모드' ,it: 'Modifica ruolo' ,nl: 'Pas rol aan' - ,tr: 'Rolü düzenle' ,zh_cn: '编辑角色' ,pl: 'Edycja roli' } @@ -10483,7 +9322,6 @@ function init() { ,ko: '관리자, 학교, 가족 등' ,it: 'amministrazione, scuola, famiglia, etc' ,nl: 'admin, school, familie, etc' - ,tr: 'yönetici, okul, aile, vb' ,zh_cn: '政府、学校、家庭等' ,pl: 'administrator, szkoła, rodzina, itp' } @@ -10505,7 +9343,6 @@ function init() { ,ko: '허가' ,it: 'Permessi' ,nl: 'Rechten' - ,tr: 'İzinler' ,zh_cn: '权限' ,pl: 'Uprawnienia' } @@ -10527,7 +9364,6 @@ function init() { ,ko: '정말로 삭제하시겠습니까: ' ,it: 'Sei sicuro di voler eliminare:' ,nl: 'Weet u het zeker dat u wilt verwijderen?' - ,tr: 'Silmek istediğinizden emin misiniz:' ,zh_cn: '你确定要删除:' ,pl: 'Jesteś pewien, że chcesz usunąć:' } @@ -10538,7 +9374,6 @@ function init() { ,ro: 'Fiecare rol va avea cel puțin o permisiune. Permisiunea * este totală, permisiunile sunt ierarhice utilizând : pe post de separator.' ,ru: 'Каждая роль имеет 1 или более разрешений. Разрешение * это подстановочный символ, разрешения это иерархия, использующая : как разделитель.' ,sv: 'Varje roll kommer få en eller flera rättigheter. * är en wildcard, rättigheter sätts hirarkiskt med : som avgränsare.' - ,dk: 'Hver rolle vil have en eller flere rettigheder. Rollen * fungere som wildcard / joker, rettigheder sættes hierakisk med : som skilletegn.' ,nb: 'Hver enkelt rolle vil ha en eller flere rettigheter. *-rettigheten er wildcard. Rettigheter settes hierarkisk med : som separator.' ,fi: 'Jokaisella roolilla on yksi tai useampia oikeuksia. * on jokeri (tunnistuu kaikkina oikeuksina), oikeudet ovat hierarkia joka käyttää : merkkiä erottimena.' ,de: 'Jede Rolle hat eine oder mehrere Berechtigungen. Die * Berechtigung ist ein Platzhalter, Berechtigungen sind hierachrchisch mit : als Separator.' @@ -10549,7 +9384,6 @@ function init() { ,ko: '각각은 1 또는 그 이상의 허가를 가지고 있습니다. 허가는 예측이 안되고 구분자로 : 사용한 계층이 있습니다' ,it: 'Ogni ruolo avrà un 1 o più autorizzazioni. Il * il permesso è un jolly, i permessi sono una gerarchia utilizzando : come separatore.' ,nl: 'Elke rol heeft mintens 1 machtiging. De * machtiging is een wildcard, machtigingen hebben een hyrarchie door gebruik te maken van : als scheidingsteken.' - ,tr: 'Her rolün bir veya daha fazla izni vardır.*izni bir yer tutucudur ve izinler ayırıcı olarak : ile hiyerarşiktir.' ,zh_cn: '每个角色都具有一个或多个权限。权限设置时使用*作为通配符,层次结构使用:作为分隔符。' , pl: 'Każda rola będzie mieć 1 lub więcej uprawnień. Symbol * uprawnia do wszystkiego. Uprawnienia są hierarchiczne, używając : jako separatora.' } @@ -10565,13 +9399,12 @@ function init() { ,nb: 'Legg til ny rolle' ,fi: 'Lisää uusi rooli' ,de: 'Eine neue Rolle hinzufügen' - ,dk: 'Tilføj ny rolle' + ,dk: 'Tilføj en ny rolle' ,pt: 'Adicionar novo Papel' ,sk: 'Pridať novú rolu' ,ko: '새 역할 추가' ,it: 'Aggiungere un nuovo ruolo' ,nl: 'Voeg rol toe' - ,tr: 'Yeni Rol ekle' ,zh_cn: '添加新角色' ,pl: 'Dodaj nową rolę' } @@ -10593,7 +9426,6 @@ function init() { ,ko: '역할 - 그룹, 기기, 등' ,it: 'Ruoli - gruppi di persone, dispositivi, etc' ,nl: 'Rollen - Groepen mensen apparaten etc' - ,tr: 'Roller - İnsan grupları, Cihazlar vb.' ,zh_cn: '角色 - 一组人或设备等' ,pl: 'Role - Grupy ludzi, urządzeń, itp' } @@ -10615,7 +9447,6 @@ function init() { ,ko: '이 역할 편집' ,it: 'Modifica questo ruolo' ,nl: 'Pas deze rol aan' - ,tr: 'Bu rolü düzenle' ,zh_cn: '编辑角色' ,pl: 'Edytuj rolę' } @@ -10631,13 +9462,12 @@ function init() { ,nb: 'Administratorgodkjent' ,fi: 'Ylläpitäjä valtuutettu' ,de: 'Admin Authorisierung' - ,dk: 'Administrator godkendt' + ,dk: 'Administratorgodkendt' ,pt: 'Administrador autorizado' ,sk: 'Admin autorizovaný' ,ko: '인증된 관리자' ,it: 'Amministrativo autorizzato' ,nl: 'Admin geauthoriseerd' - ,tr: 'Yönetici yetkilendirildi' ,zh_cn: '已授权' ,zh_tw: '已授權' ,pl: 'Administrator autoryzowany' @@ -10660,7 +9490,6 @@ function init() { ,ko: '주제 - 사람, 기기 등' ,it: 'Soggetti - persone, dispositivi, etc' ,nl: 'Onderwerpen - Mensen, apparaten etc' - ,tr: 'Konular - İnsanlar, Cihazlar, vb.' ,zh_cn: '用户 - 人、设备等' ,pl: 'Obiekty - ludzie, urządzenia itp' } @@ -10676,13 +9505,12 @@ function init() { ,nb: 'Hver enkelt ressurs får en unik sikkerhetsnøkkel og en eller flere roller. Klikk på sikkerhetsnøkkelen for å åpne valgte ressurs, den hemmelige lenken kan så deles.' ,fi: 'Jokaisella käyttäjällä on uniikki pääsytunniste ja yksi tai useampi rooli. Klikkaa pääsytunnistetta nähdäksesi käyttäjän, jolloin saat jaettavan osoitteen tämän käyttäjän oikeuksilla.' ,de: 'Jedes Subjekt erhält einen einzigartigen Zugriffsschlüssel und eine oder mehrere Rollen. Klicke auf den Zugriffsschlüssel, um eine neue Ansicht mit dem ausgewählten Subjekt zu erhalten. Dieser geheime Link kann geteilt werden.' - ,dk: 'Hvert emne vil have en unik sikkerhedsnøgle samt en eller flere roller. Klik på sikkerhedsnøglen for at åbne et nyt view med det valgte emne, dette hemmelige link kan derefter blive delt.' + ,dk: 'Hvert emne vil have en unik sikkerhedsnøgle og en eller flere roller. Klik på sikkerhedsnøglen for at åbne et nyt view med det valgte emne, dette hemmelige link kan derefter blive delt.' ,pt: 'Cada assunto terá um único token de acesso e uma ou mais Funções. Clique no token de acesso para abrir uma nova visualização com o assunto selecionado. Este link secreto poderá então ser compartilhado' ,sk: 'Každý objekt má svoj unikátny prístupový token a 1 alebo viac rolí. Klikni na prístupový token pre otvorenie nového okna pre tento subjekt. Tento link je možné zdielať.' ,ko: '각 주제는 유일한 access token을 가지고 1 또는 그 이상의 역할을 가질 것이다. 선택된 주제와 새로운 뷰를 열기 위해 access token을 클릭하세요. 이 비밀 링크는 공유되어질 수 있다.' ,it: 'Ogni soggetto avrà un gettone d\'accesso unico e 1 o più ruoli. Fare clic sul gettone d\'accesso per aprire una nuova vista con il soggetto selezionato, questo legame segreto può quindi essere condiviso.' ,nl: 'Elk onderwerp heeft een unieke toegangscode en 1 of meer rollen. Klik op de toegangscode om een nieu venster te openen om het onderwerp te bekijken, deze verborgen link kan gedeeld worden.' - ,tr: 'Her konu benzersiz bir erişim anahtarı ve bir veya daha fazla rol alır. Seçilen konuyla ilgili yeni bir görünüm elde etmek için erişim tuşuna tıklayın. Bu gizli bağlantı paylaşılabilinir.' ,zh_cn: '每个用户具有唯一的访问令牌和一个或多个角色。在访问令牌上单击打开新窗口查看已选择用户,此时该链接可分享。' ,pl: 'Każdy obiekt będzie miał unikalny token dostępu i jedną lub więcej ról. Kliknij token dostępu, aby otworzyć nowy widok z wybranym obiektem, ten tajny link może być następnie udostępniony' } @@ -10704,7 +9532,6 @@ function init() { ,ko: '새 주제 추가' ,it: 'Aggiungere un nuovo Soggetto' ,nl: 'Voeg onderwerp toe' - ,tr: 'Yeni konu ekle' ,zh_cn: '添加新用户' ,pl: 'Dodaj obiekt' } @@ -10726,7 +9553,6 @@ function init() { ,ko: '%1 주제 비활성화' ,it: 'Incapace di %1 sottoporre' ,nl: 'Niet in staat %1 Onderwerp' - ,tr: '%1 konu yapılamıyor' ,zh_cn: '%1用户不可用' ,pl: 'Nie można %1 obiektu' } @@ -10741,14 +9567,13 @@ function init() { ,nb: 'Kan ikke slette ressurs' ,fi: 'Käyttäjän poistaminen epäonnistui' ,de: 'Kann Subjekt nicht löschen' - ,dk: 'Kan ikke slette emne' + ,dk: 'Kan ikke fjerne emne' ,es: 'Imposible eliminar sujeto' ,pt: 'Impossível apagar assunto' ,sk: 'Subjekt sa nedá odstrániť' ,ko: '주제를 지우기 위해 비활성화' ,it: 'Impossibile eliminare Soggetto' ,nl: 'Kan onderwerp niet verwijderen' - ,tr: 'Konu silinemedi' ,zh_cn: '无法删除用户' ,pl: 'Nie można usunąć obiektu' } @@ -10770,7 +9595,6 @@ function init() { ,ko: '데이터베이스는 %1 주제를 포함' ,it: 'Database contiene %1 soggetti' ,nl: 'Database bevat %1 onderwerpen' - ,tr: 'Veritabanı %1 konu içeriyor' ,zh_cn: '数据库包含%1个用户' ,pl: 'Baza danych zawiera %1 obiektów' } @@ -10792,7 +9616,6 @@ function init() { ,ko: '주제 편집' ,it: 'Modifica Oggetto' ,nl: 'Pas onderwerp aan' - ,tr: 'Konuyu düzenle' ,zh_cn: '编辑用户' ,pl: 'Edytuj obiekt' } @@ -10814,7 +9637,6 @@ function init() { ,ko: '사람, 기기 등' ,it: 'persona, dispositivo, ecc' ,nl: 'persoon, apparaat etc' - ,tr: 'kişi, cihaz, vb' ,zh_cn: '人、设备等' ,pl: 'osoba, urządzenie, itp' } @@ -10836,7 +9658,6 @@ function init() { ,ko: '역할1, 역할2' ,it: 'ruolo1, ruolo2' ,nl: 'rol1, rol2' - ,tr: 'rol1, rol2' ,zh_cn: '角色1、角色2' ,pl: 'rola1, rola2' } @@ -10858,7 +9679,6 @@ function init() { ,ko: '이 주제 편집' ,it: 'Modifica questo argomento' ,nl: 'pas dit onderwerp aan' - ,tr: 'Bu konuyu düzenle' ,zh_cn: '编辑此用户' ,pl: 'Edytuj ten obiekt' } @@ -10880,7 +9700,6 @@ function init() { ,ko: '이 주제 삭제' ,it: 'Eliminare questo argomento' ,nl: 'verwijder dit onderwerp' - ,tr: 'Bu konuyu sil' ,zh_cn: '删除此用户' ,pl: 'Usuń ten obiekt' } @@ -10902,7 +9721,6 @@ function init() { ,ko: '역할' ,it: 'Ruoli' ,nl: 'Rollen' - ,tr: 'Roller' ,zh_cn: '角色' ,pl: 'Role' } @@ -10924,7 +9742,6 @@ function init() { ,ko: 'Access Token' ,it: 'Gettone d\'accesso' ,nl: 'toegangscode' - ,tr: 'Erişim Simgesi (Access Token)' ,zh_cn: '访问令牌' ,pl: 'Token dostępu' } @@ -10946,7 +9763,6 @@ function init() { ,ko: '시간 후' ,it: 'ora fa' ,nl: 'uur geleden' - ,tr: 'saat önce' ,zh_cn: '小时前' ,pl: 'Godzię temu' } @@ -10968,7 +9784,6 @@ function init() { ,ko: '시간 후' ,it: 'ore fa' ,nl: 'uren geleden' - ,tr: 'saatler önce' ,zh_cn: '小时前' ,pl: 'Godzin temu' } @@ -10990,7 +9805,6 @@ function init() { ,ko: '%1 분 동안 무음' ,it: 'Silenzio per %1 minuti' ,nl: 'Sluimer %1 minuten' - ,tr: '%1 dakika sürelik sessizlik' ,zh_cn: '静音%1分钟' ,zh_tw: '靜音%1分鐘' ,pl: 'Wycisz na %1 minut' @@ -10999,7 +9813,7 @@ function init() { cs:'Zkontrolovat glykémii' ,he: 'בדוק סוכר בדם ' ,de: 'BZ kontrollieren' - ,dk: 'Kontroller blodsukker' + ,dk: 'Kontroler blodglukos' ,ro: 'Verificați glicemia' ,es: 'Verificar glucemia' ,fr: 'Vérifier la glycémie' @@ -11013,7 +9827,6 @@ function init() { ,ko: '혈당 체크' ,it: 'Controllare BG' ,nl: 'Controleer BG' - ,tr: 'KŞ\'ini kontrol et' ,zh_cn: '测量血糖' ,pl: 'Sprawdź glukozę z krwi' } @@ -11035,7 +9848,6 @@ function init() { ,es: 'BASAL' ,it: 'BASALE' ,nl: 'Basaal' - ,tr: 'Bazal' ,zh_cn: '基础率' ,zh_tw: '基礎率' ,pl: 'BAZA' @@ -11058,7 +9870,6 @@ function init() { ,ko: '현재 basal' ,it: 'Basale corrente' ,nl: 'Huidige basaal' - ,tr: 'Geçerli Bazal' ,zh_cn: '当前基础率' ,pl: 'Dawka podstawowa' } @@ -11080,7 +9891,6 @@ function init() { ,ko: '인슐린 민감도(ISF)' ,it: 'ISF - sensibilità' ,nl: 'Gevoeligheid' - ,tr: 'Duyarlılık Faktörü (ISF)' ,zh_cn: '胰岛素敏感系数' ,pl: 'Wrażliwość' } @@ -11102,7 +9912,6 @@ function init() { ,ko: '현재 탄수화물 비율(ICR)' ,it: 'Attuale rapporto I:C' ,nl: 'Huidige KH ratio' - ,tr: 'Geçerli Karbonhidrat oranı I/C (ICR)' ,zh_cn: '当前碳水化合物系数' ,pl: 'Obecny przelicznik węglowodanowy' } @@ -11114,7 +9923,7 @@ function init() { ,ro: 'Fus orar pentru bazală' ,es: 'Zona horaria basal' ,fr: 'Fuseau horaire' - ,ru: 'Часовой пояс базала' + ,ru: 'Временная зона базала' ,sk: 'Časová zóna pre bazál' ,sv: 'Basal tidszon' ,nb: 'Basal tidssone' @@ -11124,7 +9933,6 @@ function init() { ,ko: 'Basal 타임존' ,it: 'fuso orario basale' ,nl: 'Basaal tijdzone' - ,tr: 'Bazal saat dilimi' ,zh_cn: '基础率时区' ,pl: 'Strefa czasowa dawki podstawowej' } @@ -11146,7 +9954,6 @@ function init() { ,ko: '활성 프로파일' ,it: 'Attiva profilo' ,nl: 'Actief profiel' - ,tr: 'Aktif profil' ,zh_cn: '当前配置文件' ,pl: 'Profil aktywny' } @@ -11154,7 +9961,7 @@ function init() { cs:'Aktivní dočasný bazál' ,he: 'רמה בזלית זמנית פעילה ' ,de: 'Aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal' + ,dk: 'Aktiv tempbasal' ,ro: 'Bazală temporară activă' ,fr: 'Débit basal temporaire actif' ,ru: 'Активный временный базал' @@ -11168,7 +9975,6 @@ function init() { ,ko: '활성 임시 basal' ,it: 'Attiva Basale Temp' ,nl: 'Actieve tijdelijke basaal' - ,tr: 'Aktif geçici bazal oranı' ,zh_cn: '当前临时基础率' ,pl: 'Aktywa tymczasowa dawka podstawowa' } @@ -11176,7 +9982,7 @@ function init() { cs:'Začátek dočasného bazálu' ,he: 'התחלה רמה בזלית זמנית ' ,de: 'Start aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal start' + ,dk: 'Aktiv tempbasal start' ,ro: 'Start bazală temporară activă' ,fr: 'Début du débit basal temporaire' ,ru: 'Старт активного временного базала' @@ -11190,7 +9996,6 @@ function init() { ,ko: '활성 임시 basal 시작' ,it: 'Attiva Inizio Basale temp' ,nl: 'Actieve tijdelijke basaal start' - ,tr: 'Aktif geçici bazal oranı başlangıcı' ,zh_cn: '当前临时基础率开始' ,pl: 'Start aktywnej tymczasowej dawki podstawowej' } @@ -11198,7 +10003,7 @@ function init() { cs:'Trvání dočasného bazálu' ,he: 'משך רמה בזלית זמנית ' ,de: 'Dauer aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal varighed' + ,dk: 'Aktiv tempbasal varighed' ,ro: 'Durata bazalei temporare active' ,fr: 'Durée du débit basal temporaire' ,ru: 'Длительность активного временного базала' @@ -11214,13 +10019,12 @@ function init() { ,nl: 'Actieve tijdelijk basaal duur' ,zh_cn: '当前临时基础率期间' ,pl: 'Czas trwania aktywnej tymczasowej dawki podstawowej' - ,tr: 'Aktif geçici bazal süresi' } ,'Active temp basal remaining' : { cs:'Zbývající dočasný bazál' ,he: 'זמן שנשאר ברמה בזלית זמנית ' ,de: 'Verbleibene Dauer temp. Basalrate' - ,dk: 'Resterende tid for aktiv midlertidig basal' + ,dk: 'Resterende aktiv tempbasal' ,ro: 'Rest de bazală temporară activă' ,fr: 'Durée restante de débit basal temporaire' ,ru: 'Остаток акивного временного базала' @@ -11236,7 +10040,6 @@ function init() { ,nl: 'Actieve tijdelijke basaal resteert' ,zh_cn: '当前临时基础率剩余' ,pl: 'Pozostała aktywna tymczasowa dawka podstawowa' - ,tr: 'Aktif geçici bazal kalan' } ,'Basal profile value' : { cs: 'Základní hodnota bazálu' @@ -11244,7 +10047,7 @@ function init() { ,de: 'Basal-Profil Wert' ,dk: 'Basalprofil værdi' ,ro: 'Valoarea profilului bazalei' - ,ru: 'значение профиля базала' + ,ru: 'Значение профайла базала' ,fr: 'Valeur du débit basal' ,sv: 'Basalprofil värde' ,es: 'Valor perfil Basal' @@ -11258,7 +10061,6 @@ function init() { ,nl: 'Basaal profiel waarde' ,zh_cn: '基础率配置文件值' ,pl: 'Wartość profilu podstawowego' - ,tr: 'Bazal profil değeri' } ,'Active combo bolus' : { cs:'Aktivní kombinovaný bolus' @@ -11280,7 +10082,6 @@ function init() { ,nl: 'Actieve combo bolus' ,zh_cn: '当前双波大剂量' ,pl: 'Aktywny bolus złożony' - ,tr: 'Aktive kombo bolus' } ,'Active combo bolus start' : { cs: 'Začátek kombinovaného bolusu' @@ -11302,7 +10103,6 @@ function init() { ,nl: 'Actieve combo bolus start' ,zh_cn: '当前双波大剂量开始' ,pl: 'Start aktywnego bolusa złożonego' - ,tr: 'Aktif gecikmeli bolus başlangıcı' } ,'Active combo bolus duration' : { cs: 'Trvání kombinovaného bolusu' @@ -11324,7 +10124,6 @@ function init() { ,nl: 'Actieve combo bolus duur' ,zh_cn: '当前双波大剂量期间' ,pl: 'Czas trwania aktywnego bolusa złożonego' - ,tr: 'Active combo bolus süresi' } ,'Active combo bolus remaining' : { cs: 'Zbývající kombinovaný bolus' @@ -11346,7 +10145,6 @@ function init() { ,nl: 'Actieve combo bolus resteert' ,zh_cn: '当前双波大剂量剩余' ,pl: 'Pozostały aktywny bolus złożony' - ,tr: 'Aktif kombo (yayım) bolus kaldı' } ,'BG Delta' : { cs:'Změna glykémie' @@ -11369,7 +10167,6 @@ function init() { ,zh_cn: '血糖增量' ,zh_tw: '血糖增量' ,pl: 'Zmiana glikemii' - ,tr: 'KŞ farkı' } ,'Elapsed Time' : { cs:'Dosažený čas' @@ -11392,7 +10189,6 @@ function init() { ,zh_cn: '所需时间' ,zh_tw: '所需時間' ,pl: 'Upłynął czas' - ,tr: 'Geçen zaman' } ,'Absolute Delta' : { cs:'Absolutní rozdíl' @@ -11415,7 +10211,6 @@ function init() { ,zh_cn: '绝对增量' ,zh_tw: '絕對增量' ,pl: 'różnica absolutna' - ,tr: 'Mutlak fark' } ,'Interpolated' : { cs:'Interpolováno' @@ -11438,7 +10233,6 @@ function init() { ,zh_cn: '插值' ,zh_tw: '插值' ,pl: 'Interpolowany' - ,tr: 'Aralıklı' } ,'BWP' : { // Bolus Wizard Preview cs: 'KALK' @@ -11461,7 +10255,6 @@ function init() { ,zh_cn: 'BWP' ,zh_tw: 'BWP' ,pl: 'Kalkulator bolusa' - ,tr: 'BWP' } ,'Urgent' : { cs:'Urgentní' @@ -11480,12 +10273,10 @@ function init() { ,bg: 'Спешно' ,ko: '긴급' ,it: 'Urgente' - ,ja: '緊急' ,nl: 'Urgent' ,zh_cn: '紧急' ,zh_tw: '緊急' ,pl:'Pilny' - ,tr: 'Acil' } ,'Warning' : { cs:'Varování' @@ -11508,7 +10299,6 @@ function init() { ,zh_cn: '警告' ,zh_tw: '警告' ,pl: 'Ostrzeżenie' - ,tr: 'Uyarı' } ,'Info' : { cs: 'Informativní' @@ -11531,7 +10321,6 @@ function init() { ,zh_cn: '信息' ,zh_tw: '資訊' ,pl: 'Informacja' - ,tr: 'Info' } ,'Lowest' : { cs: 'Nejnižší' @@ -11551,7 +10340,6 @@ function init() { ,ko: '가장 낮은' ,it: 'Minore' ,nl: 'Laagste' - ,tr: 'En düşük değer' ,zh_cn: '血糖极低' ,zh_tw: '血糖極低' ,pl: 'Niski' @@ -11560,7 +10348,7 @@ function init() { cs:'Vypínání alarmu vyskoké glykémie, protože je dostatek IOB' ,he: 'נודניק את ההתראה הגבוהה מפני שיש מספיק אינסולין פעיל בגוף' ,de: 'Ignoriere Alarm hoch, da genügend aktives Bolus-Insulin (IOB) vorhanden' - ,dk: 'Udsætter høj alarm siden der er nok aktiv insulin (IOB)' + ,dk: 'Snoozer høj alarm siden der er nok aktiv insulin (IOB)' ,ro: 'Ignoră alarma de hiper deoarece este suficientă insulină activă IOB' ,fr: 'Alarme haute ignorée car suffisamment d\'insuline à bord (IOB)' ,bg: 'Изключване на аларма за висока КЗ, тъй като има достатъчно IOB' @@ -11573,7 +10361,6 @@ function init() { ,sk: 'Odloženie alarmu vysokej glykémie, pretože je dostatok IOB' ,it: 'Addormenta allarme alto poiché non vi è sufficiente IOB' ,nl: 'Snooze hoog alarm, er is genoeg IOB' - ,tr: 'Yeterli IOB(Aktif İnsülin) olduğundan KŞ yüksek uyarımını ertele' ,zh_cn: '有足够的IOB(活性胰岛素),暂停高血糖警报' ,pl: 'Wycisz alarm wysokiej glikemi, jest wystarczająco dużo aktywnej insuliny' } @@ -11594,7 +10381,6 @@ function init() { ,sk: 'Skontrolovať glykémiu, čas na bolus?' ,it: 'Controllare BG, il tempo del bolo?' ,nl: 'Controleer BG, tijd om te bolussen?' - ,tr: 'KŞine bakın, gerekirse bolus verin?' ,zh_cn: '测量血糖,该输注大剂量了?' ,pl: 'Sprawdź glikemię, czas na bolusa ?' } @@ -11615,7 +10401,6 @@ function init() { ,pt: 'Nota' ,sk: 'Poznámka' ,it: 'Preavviso' - ,tr: 'Not' ,zh_cn: '提示' ,pl: 'Uwaga' } @@ -11636,7 +10421,6 @@ function init() { ,sk: 'chýbajúca informácia' ,it: 'richiesta informazioni mancanti' ,nl: 'vereiste gegevens ontbreken' - ,tr: 'gerekli bilgi eksik' ,zh_cn: '所需信息不全' ,pl: 'brak wymaganych informacji' } @@ -11657,7 +10441,6 @@ function init() { ,sk: 'Aktívny inzulín (IOB)' ,it: 'IOB - Insulina Attiva' ,nl: 'IOB - Inuline on board' - ,tr: '(IOB) Aktif İnsülin' ,zh_cn: '活性胰岛素(IOB)' ,pl: 'Aktywna insulina' } @@ -11678,7 +10461,6 @@ function init() { ,sk: 'Aktuálny cieľ' ,it: 'Obiettivo attuale' ,nl: 'huidig doel' - ,tr: 'Mevcut hedef' ,zh_cn: '当前目标' ,pl: 'Aktualny cel' } @@ -11699,7 +10481,6 @@ function init() { ,sk: 'Očakávaný efekt' ,it: 'Effetto Previsto' ,nl: 'verwacht effect' - ,tr: 'Beklenen etki' ,zh_cn: '预期效果' ,pl: 'Oczekiwany efekt' } @@ -11720,7 +10501,6 @@ function init() { ,sk: 'Očakávaný výsledok' ,it: 'Risultato previsto' ,nl: 'Veracht resultaat' - ,tr: 'Beklenen sonuç' ,zh_cn: '预期结果' ,pl: 'Oczekowany resultat' } @@ -11741,7 +10521,6 @@ function init() { ,pt: 'Equivalente em carboidratos' ,sk: 'Sacharidový ekvivalent' ,it: 'Carb equivalenti' - ,tr: 'Karbonhidrat eşdeğeri' ,zh_cn: '碳水当量' ,pl: 'Odpowiednik w węglowodanach' } @@ -11749,12 +10528,12 @@ function init() { cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. Nepočítáno se sacharidy.' ,he: 'עודף אינסולין שווה ערך ליחידה אחת%1 יותר מאשר הצורך להגיע ליעד נמוך, לא לוקח בחשבון פחמימות ' ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig, Kohlenhydrate sind unberücksichtigt' - ,dk: 'Overskud af insulin modsvarende %1U mere end nødvendigt for at nå lav mål, kulhydrater ikke medregnet' + ,dk: 'Overskud af insulin modsvarande %1U mere end nødvændigt for at nå lav målværdi, kulhydrater ikke medregnet' ,es: 'Exceso de insulina en %1U más de lo necesario para alcanzar un objetivo bajo, sin tener en cuenta los carbohidratos' ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, fără a ține cont de carbohidrați' ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, sans prendre en compte les glucides' ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ВХ не се вземат под внимание' - ,ru: 'Избыток инсулина равного %1U, необходимого для достижения нижнего целевого значения, углеводы не учитываются' + ,ru: 'Избыток инсулина равного %1U, необходимого для достижения нижнего целевого значения, углеводы не будут учтены' ,sv: 'Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, kolhydrater ej medräknade' ,nb: 'Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, karbohydrater ikke medregnet' ,nl: 'Insulineoverschot van %1U om laag doel te behalen (excl. koolhydraten)' @@ -11763,7 +10542,6 @@ function init() { ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. Neráta sa so sacharidmi.' ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessari per raggiungere l\'obiettivo basso, non rappresentano i carboidrati.' ,nl: 'Overschot insuline %1U meer dan nodig om het laag doel te bereiken, geen rekening gehouden met KH' - ,tr: 'Fazla insülin: Karbonhidratları dikkate alınmadan, alt hedefe ulaşmak için gerekenden %1U\'den daha fazla' //??? ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,不计算碳水化合物' , pl: 'Nadmiar insuliny, %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy, nie biorąc pod uwagę węglowodanów' } @@ -11771,7 +10549,7 @@ function init() { cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. UJISTĚTE SE, ŽE JE TO POKRYTO SACHARIDY' ,he: 'עודף אינסולין %1 נדרש כדי להגיע למטרה התחתונה. שים לב כי עליך לכסות אינסולין בגוף על ידי פחמימות ' ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD' - ,dk: 'Overskud af insulin modsvarande %1U mere end nødvendigt for at nå lav målværdi, VÆR SIKKER PÅ AT IOB ER DÆKKET IND AF KULHYDRATER' + ,dk: 'Overskud af insulin modsvarande %1U mere end nødvændigt for at nå lav målværdi, VÆR SIKKER PÅ AT IOB ER DÆKKET IND AF KULHYDRATER' ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, ASIGURAȚI-VĂ CĂ INSULINA ESTE ACOPERITĂ DE CARBOHIDRAȚI' ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, ASSUREZ UN APPORT SUFFISANT DE GLUCIDES' ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ПРОВЕРИ ДАЛИ IOB СЕ ПОКРИВА ОТ ВЪГЛЕХИДРАТИТЕ' @@ -11784,7 +10562,6 @@ function init() { ,pt: 'Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior. ASSEGURE-SE DE QUE A IOB ESTEJA COBERTA POR CARBOIDRATOS' ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. UISTITE SA, ŽE JE TO POKRYTÉ SACHARIDMI' ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessario per raggiungere l\'obiettivo basso, ASSICURARSI IOB SIA COPERTO DA CARBOIDRATI' - ,tr: 'Fazla insülin: Alt KŞ hedefine ulaşmak için gerekenden %1 daha fazla insülin.IOB(Aktif İnsülin) Karbonhidrat tarafından karşılandığından emin olun.' ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,确认IOB(活性胰岛素)被碳水化合物覆盖' ,pl: 'Nadmiar insuliny: o %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy. UPEWNIJ SIĘ, ŻE AKTYWNA INSULINA JEST POKRYTA WĘGLOWODANAMI' } @@ -11792,7 +10569,7 @@ function init() { cs:'Nutné snížení aktivního inzulínu o %1U k dosažení spodního cíle. Příliž mnoho bazálu?' ,he: 'צריך %1 פחות אינסולין כדי להגיע לגבול התחתון. האם הרמה הבזלית גבוהה מדי? ' ,de: 'Aktives Insulin um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?' - ,dk: '%1U reduktion nødvendig i aktiv insulin for at nå lav mål, for meget basal?' + ,dk: '%1U reduktion nødventid i aktiv insulin for at nå lav værdi, for meget basal?' ,ro: '%1U sunt în plus ca insulină activă pentru a atinge ținta inferioară, bazala este prea mare?' ,fr: 'Réduction d\'insuline active nécessaire pour atteindre la cible inférieure. Débit basal trop élevé ?' ,bg: '%1U намаляне е необходимо в активния инсулин до достигане до долната граница, прекалено висок базал?' @@ -11805,7 +10582,6 @@ function init() { ,nl: '%1U reductie vereist in actieve insuline om laag doel te bereiken, teveel basaal?' ,sk: 'Nutné zníženie aktívneho inzulínu o %1U pre dosiahnutie spodnej cieľovej hranice. Príliš veľa bazálu?' ,it: 'Riduzione 1U% necessaria d\'insulina attiva per raggiungere l\'obiettivo basso, troppa basale?' - ,tr: 'Alt KŞ hedefi için %1U aktif insülin azaltılmalı, bazal oranı çok mu yüksek?' ,zh_cn: '活性胰岛素已可至血糖下限目标,需减少%1单位,基础率过高?' , pl: '%1J potrzebnej redukcji w aktywnej insulinie, aby osiągnąć niski cel dolnej granicy, Za duża dawka podstawowa ?' } @@ -11813,7 +10589,7 @@ function init() { cs:'úprava změnou bazálu není možná. Podat sacharidy?' ,he: 'השינוי ברמה הבזלית גדול מדי. תן פחמימות? ' ,de: 'Basalrate geht außerhalb des Zielbereiches. Kohlenhydrate nehmen?' - ,dk: 'basalændring uden for grænseværdi, giv kulhydrater?' + ,dk: 'basalændring uden for grænseværdi, gi kulhydrater?' ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați carbohirații?' ,fr: 'ajustement de débit basal hors de limites, prenez des glucides?' ,bg: 'Корекция на базала не е възможна, добавка на въглехидрати? ' @@ -11826,7 +10602,6 @@ function init() { ,sk: 'úprava pomocou zmeny bazálu nie je možná. Podať sacharidy?' ,it: 'regolazione basale fuori campo, dare carboidrati?' ,nl: 'basaal aanpassing buiten bereik, geef KH?' - ,tr: 'Bazal oran ayarlaması limit dışı, karbonhidrat alınsın mı?' ,zh_cn: '基础率调整在范围之外,需要碳水化合物?' ,pl: 'dawka podstawowa poza zakresem, podać węglowodany?' } @@ -11834,7 +10609,7 @@ function init() { cs:'úprava změnou bazálu není možná. Podat bolus?' ,he: 'השינוי ברמה הבזלית גדול מדי. תן אינסולין? ' ,de: 'Anpassung der Basalrate außerhalb des Zielbereichs. Bolus abgeben?' - ,dk: 'basalændring udenfor grænseværdi, giv bolus?' + ,dk: 'basalændring udenfor grænseværdi, gi bolus?' ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați insulina?' ,fr: 'ajustement de débit basal hors de limites, prenez un bolus?' ,bg: 'Корекция на базала не е възможна, добавка на болус? ' @@ -11847,7 +10622,6 @@ function init() { ,sk: 'úprava pomocou zmeny bazálu nie je možná. Podať bolus?' ,it: 'regolazione basale fuori campo, dare bolo?' ,nl: 'basaal aanpassing buiten bereik, bolus?' - ,tr: 'Bazal oran ayarlaması limit dışı, bolus alınsın mı?' ,zh_cn: '基础率调整在范围之外,需要大剂量?' ,pl: 'dawka podstawowa poza zakresem, podać insulinę?' } @@ -11855,7 +10629,7 @@ function init() { cs:'nad horním' ,he: 'מעל גבוה ' ,de: 'überhalb Obergrenze' - ,dk: 'over højt grænse' + ,dk: 'over højt niveau' ,ro: 'peste ținta superioară' ,fr: 'plus haut que la limite supérieure' ,ru: 'Выше верхнего' @@ -11868,7 +10642,6 @@ function init() { ,es: 'por encima límite superior' ,it: 'sopra alto' ,nl: 'boven hoog' - ,tr: 'üzerinde yüksek' ,zh_cn: '血糖过高' ,zh_tw: '血糖過高' ,pl: 'powyżej wysokiego' @@ -11877,7 +10650,7 @@ function init() { cs:'pod spodním' ,he: 'מתחת נמוך ' ,de: 'unterhalb Untergrenze' - ,dk: 'under lavt grænse' + ,dk: 'under lavt niveau' ,ro: 'sub ținta inferioară' ,fr: 'plus bas que la limite inférieure' ,bg: 'под долната' @@ -11890,7 +10663,6 @@ function init() { ,sk: 'pod spodným' ,it: 'sotto bassa' ,nl: 'onder laag' - ,tr: 'altında düşük' ,zh_cn: '血糖过低' ,zh_tw: '血糖過低' ,pl: 'poniżej niskiego' @@ -11912,7 +10684,6 @@ function init() { ,it: 'Proiezione BG %1 obiettivo' ,es: 'Glucemia estimada %1 en objetivo' ,nl: 'Verwachte BG %1 doel' - ,tr: 'Beklenen KŞ %1 hedefi' ,zh_cn: '预计血糖%1目标' ,pl: 'Oczekiwany poziom glikemii %1' } @@ -11933,7 +10704,6 @@ function init() { ,sk: 'cieľom' ,it: 'puntare a' ,nl: 'doel is' - ,tr: 'istenen sonuç' ,zh_cn: '目标在' ,pl: 'pożądany wynik' } @@ -11954,7 +10724,6 @@ function init() { ,sk: 'Bolus %1 jednotiek' ,it: 'Bolo %1 unità' ,nl: 'Bolus %1 eenheden' - ,tr: 'Bolus %1 Ünite' ,zh_cn: '大剂量%1单位' ,pl: 'Bolus %1 jednostek' } @@ -11975,7 +10744,6 @@ function init() { ,sk: 'alebo úprava bazálu' ,it: 'o regolare basale' ,nl: 'of pas basaal aan' - ,tr: 'ya da bazal ayarlama' ,zh_cn: '或调整基础率' ,pl: 'lub dostosuj dawkę bazową' } @@ -11983,7 +10751,7 @@ function init() { cs:'Před korekcí zkontrolujte glukometrem glykémii!' ,he: 'מדוד רמת סוכר בדם באמצעות מד סוכר לפני תיקון ' ,de: 'Überprüfe deinen BZ mit dem Messgerät, bevor du eine Korrektur vornimmst!' - ,dk: 'Kontrollere blodsukker med fingerprikker / blodsukkermåler før der korrigeres!' + ,dk: 'Kontrol blodsukker med fingerprikker før der korrigeres!' ,ro: 'Verifică glicemia cu glucometrul înainte de a face o corecție!' ,fr: 'Vérifier la glycémie avec un glucomètre avant de corriger!' ,bg: 'Провери КЗ с глюкомер, преди кореция!' @@ -11998,7 +10766,6 @@ function init() { ,nl: 'Controleer BG met bloeddruppel voor correctie!' ,zh_cn: '校正前请使用血糖仪测量血糖!' ,pl: 'Sprawdź glikemię z krwi przed podaniem korekty!' - ,tr: 'Düzeltme bolusu öncesi glikometreyle parmaktan KŞini kontrol edin!' } ,'Basal reduction to account %1 units:' : { cs:'Úprava bazálu pro náhradu bolusu %1 U ' @@ -12019,13 +10786,12 @@ function init() { ,nl: 'Basaal verlaagd voor %1 eenheden' ,zh_cn: '基础率减少到%1单位' ,pl: 'Dawka bazowa zredukowana do 1% J' - ,tr: '%1 birimi telafi etmek için azaltılmış Bazaloranı:' } ,'30m temp basal' : { cs:'30ti minutový dočasný bazál' ,he: 'שלושים דקות רמה בזלית זמנית ' ,de: '30min temporäres Basal' - ,dk: '30 minuters midlertidig basal' + ,dk: '30 minuters temporer basal' ,ro: 'bazală temporară de 30 minute' ,fr: 'débit basal temporaire de 30 min' ,bg: '30м временен базал' @@ -12040,13 +10806,12 @@ function init() { ,nl: '30 minuten tijdelijke basaal' ,zh_cn: '30分钟临时基础率' ,pl: '30 minut tymczasowej dawki bazowej' - ,tr: '30 dk. geçici Bazal ' } ,'1h temp basal' : { cs:'hodinový dočasný bazál' ,he: 'שעה רמה בזלית זמנית ' ,de: '1h temporäres Basal' - ,dk: '60 minutters midlertidig basal' + ,dk: '1t temporer basal' ,ro: 'bazală temporară de 1 oră' ,fr: 'débit basal temporaire de 1 heure' ,bg: '1 час временен базал' @@ -12061,17 +10826,16 @@ function init() { ,nl: '1 uur tijdelijke basaal' ,zh_cn: '1小时临时基础率' ,pl: '1 godzina tymczasowej dawki bazowej' - ,tr: '1 sa. geçici bazal' } ,'Cannula change overdue!' : { cs:'Čas na výměnu set vypršel!' ,he: 'יש צורך בהחלפת קנולה! ' ,de: 'Kanülenwechsel überfällig!' - ,dk: 'Tid for skift af Infusionssæt overskredet!' + ,dk: 'Infusionsset, skift overskredet' ,ro: 'Depășire termen schimbare canulă!' ,bg: 'Времето за смяна на сет просрочено' ,fr: 'Dépassement de date de changement de canule!' - ,ru: 'Срок работы катеттера истек' + ,ru: 'С' ,sv: 'Infusionsset, bytestid överskriden' ,nb: 'Byttetid for infusjonssett overskredet' ,fi: 'Kanyylin ikä yli määräajan!' @@ -12082,17 +10846,16 @@ function init() { ,nl: 'Cannule te oud!' ,zh_cn: '超过更换管路的时间' ,pl: 'Przekroczono czas wymiany wkłucia!' - ,tr: 'Kanül değişimi gecikmiş!' } ,'Time to change cannula' : { cs:'Čas na výměnu setu' ,he: 'הגיע הזמן להחליף קנולה ' ,de: 'Es ist Zeit, die Kanüle zu wechseln' - ,dk: 'Tid til at skifte infusionssæt' + ,dk: 'Tid til at skifte infusionsset' ,fr: 'Le moment est venu de changer de canule' ,ro: 'Este vremea să schimbați canula' ,bg: 'Време за смяна на сет' - ,ru: 'Пора заменить катеттер' + ,ru: 'Пора заменить канюлю' ,sv: 'Dags att byta infusionsset' ,nb: 'På tide å bytte infusjonssett' ,fi: 'Aika vaihtaa kanyyli' @@ -12103,17 +10866,16 @@ function init() { ,nl: 'Verwissel canule' ,zh_cn: '已到更换管路的时间' ,pl: 'Czas do wymiany wkłucia' - ,tr: 'Kanül değiştirme zamanı' } ,'Change cannula soon' : { cs:'Blíží se čas na výměnu setu' ,he: 'החלף קנולה בקרוב ' ,de: 'Kanüle bald wechseln' - ,dk: 'Skift infusionssæt snart' + ,dk: 'Skift infusionsset snart' ,ro: 'Schimbați canula în curând' ,fr: 'Changement de canule bientòt' ,bg: 'Смени сета скоро' - ,ru: 'Подходит время замены катеттера' + ,ru: 'Подходит время замены канюли' ,sv: 'Byt infusionsset snart' ,nb: 'Bytt infusjonssett snart' ,fi: 'Vaihda kanyyli pian' @@ -12123,17 +10885,16 @@ function init() { ,nl: 'Verwissel canule binnenkort' ,zh_cn: '接近更换管路的时间' ,pl: 'Wkrótce wymiana wkłucia' - ,tr: 'Yakında kanül değiştirin' } ,'Cannula age %1 hours' : { cs:'Stáří setu %1 hodin' ,he: 'כיל הקנולה %1 שעות ' ,de: 'Kanülen Alter %1 Stunden' - ,dk: 'Infusionssæt tid %1 timer' + ,dk: 'Infusionsset tid %1 timer' ,fr: 'âge de la canule %1 heures' ,ro: 'Vechimea canulei în ore: %1' ,bg: 'Сетът е на %1 часове' - ,ru: 'Возраст катеттера %1 час' + ,ru: 'Возраст канюли %1 час' ,sv: 'Infusionsset tid %1 timmar' ,nb: 'infusjonssett alder %1 timer' ,fi: 'Kanyylin ikä %1 tuntia' @@ -12144,13 +10905,12 @@ function init() { ,nl: 'Canule leeftijd %1 uren' ,zh_cn: '管路已使用%1小时' ,pl: 'Czas od wymiany wkłucia %1 godzin' - ,tr: 'Kanül yaşı %1 saat' } ,'Inserted' : { cs:'Nasazený' ,he: 'הוכנס ' ,de: 'Eingesetzt' - ,dk: 'Isat' + ,dk: 'Indsat' ,ro: 'Inserat' ,fr: 'Insérée' ,bg: 'Поставен' @@ -12166,18 +10926,17 @@ function init() { ,zh_cn: '已植入' ,zh_tw: '已植入' ,pl: 'Zamontowano' - ,tr: 'Yerleştirilmiş' } ,'CAGE' : { cs:'SET' ,he: 'גיל הקנולה ' ,de: 'CAGE' - ,dk: 'Indstik alder' + ,dk: 'CAGE' ,ro: 'VC' ,bg: 'ВС' ,fr: 'CAGE' - ,ru: 'ВозрКат' + ,ru: 'ВКан' ,sv: 'Nål' ,nb: 'Nål alder' ,fi: 'KIKÄ' @@ -12189,7 +10948,6 @@ function init() { ,zh_cn: '管路' ,zh_tw: '管路' ,pl: 'Wiek wkłucia' - ,tr: 'CAGE' } ,'COB' : { cs:'SACH' @@ -12201,7 +10959,7 @@ function init() { ,fr: 'COB' ,ru: 'Активн углеводы' ,sv: 'COB' - ,nb: 'Aktive karbohydrater' + ,nb: 'Aktive katbohydrater' ,fi: 'AH' ,pt: 'COB' ,es: 'Carbohidratos activos' @@ -12210,7 +10968,6 @@ function init() { ,nl: 'COB' ,zh_cn: '活性碳水COB' ,pl: 'Aktywne węglowodany' - ,tr: 'COB' } ,'Last Carbs' : { cs:'Poslední sacharidy' @@ -12231,7 +10988,6 @@ function init() { ,nl: 'Laatse KH' ,zh_cn: '上次碳水' ,pl: 'Ostatnie węglowodany' - ,tr: 'Son Karbonhidrat' } ,'IAGE' : { cs:'INZ' @@ -12253,19 +11009,18 @@ function init() { ,zh_cn: '胰岛素' ,zh_tw: '胰島素' ,pl: 'Wiek insuliny' - ,tr: 'IAGE' } ,'Insulin reservoir change overdue!' : { cs:'Čas na výměnu zásobníku vypršel!' ,he: 'החלף מאגר אינסולין! ' ,de: 'Ampullenwechsel überfällig!' - ,dk: 'Tid for skift af insulinreservoir overskredet!' + ,dk: 'Insulinbyttetid overskredet!' ,fr: 'Dépassement de date de changement de réservoir d\'insuline!' ,ro: 'Termenul de schimbare a rezervorului de insulină a fost depășit' ,bg: 'Смянатата на резервоара просрочена' - ,ru: 'Срок замены резервуара инсулина истек' + ,ru: 'Срок замены тубы инсулина истек' ,sv: 'Insulinbytestid överskriden' - ,nb: 'Insulinbyttetid overskrevet' + ,nb: 'Insulinbytestid overskrevet' ,fi: 'Insuliinisäiliö vanhempi kuin määräaika!' ,pt: 'Substituição de reservatório vencida!' ,es: 'Excedido plazo del cambio depósito de insulina!' @@ -12274,7 +11029,6 @@ function init() { ,nl: 'Verwissel insulinereservoir nu!' ,zh_cn: '超过更换胰岛素储液器的时间' ,pl: 'Przekroczono czas wymiany zbiornika na insulinę!' - ,tr: 'İnsülin rezervuarı değişimi gecikmiş!' } ,'Time to change insulin reservoir' : { cs:'Čas na výměnu zásobníku' @@ -12284,7 +11038,7 @@ function init() { ,ro: 'Este timpul pentru schimbarea rezervorului de insulină' ,fr: 'Le moment est venu de changer de réservoir d\'insuline' ,bg: 'Време е за смяна на резервоара' - ,ru: 'Наступил срок замены резервуара инсулина' + ,ru: 'Наступил срок замены тубы инсулина' ,sv: 'Dags att byta insulinreservoar' ,nb: 'På tide å bytte insulinreservoar' ,fi: 'Aika vaihtaa insuliinisäiliö' @@ -12295,7 +11049,6 @@ function init() { ,nl: 'Verwissel insuline reservoir' ,zh_cn: '已到更换胰岛素储液器的时间' ,pl: 'Czas do zmiany zbiornika na insulinę!' - ,tr: 'İnsülin rezervuarını değiştirme zamanı!' } ,'Change insulin reservoir soon' : { cs:'Blíží se čas na výměnu zásobníku' @@ -12305,7 +11058,7 @@ function init() { ,ro: 'Rezervorul de insulină trebuie schimbat în curând' ,fr: 'Changement de réservoir d\'insuline bientôt' ,bg: 'Смени резервоара скоро' - ,ru: 'Наступает срок замены резервуара инсулина' + ,ru: 'Наступает срок замены тубы инсулина' ,sv: 'Byt insulinreservoar snart' ,nb: 'Bytt insulinreservoar snart' ,fi: 'Vaihda insuliinisäiliö pian' @@ -12316,7 +11069,6 @@ function init() { ,nl: 'Verwissel insuline reservoir binnenkort' ,zh_cn: '接近更换胰岛素储液器的时间' ,pl: 'Wkrótce wymiana zbiornika na insulinę!' - ,tr: 'Yakında insülin rezervuarını değiştirin' } ,'Insulin reservoir age %1 hours' : { cs:'Stáří zásobníku %1 hodin' @@ -12337,7 +11089,6 @@ function init() { ,nl: 'Insuline reservoir leeftijd %1 uren' ,zh_cn: '胰岛素储液器已使用%1小时' ,pl: 'Wiek zbiornika na insulinę %1 godzin' - ,tr: 'İnsülin rezervuar yaşı %1 saat' } ,'Changed' : { cs:'Vyměněno' @@ -12358,7 +11109,6 @@ function init() { ,nl: 'veranderd' ,zh_cn: '已更换' ,pl: 'Wymieniono' - ,tr: 'Değişmiş' } ,'IOB' : { cs:'IOB' @@ -12366,7 +11116,7 @@ function init() { ,de: 'IOB' ,dk: 'IOB' ,ro: 'IOB' - ,ru: 'Активный Инсулин IOB' + ,ru: 'Активный Инсулин' ,fr: 'IOB' ,bg: 'АИ' ,sv: 'IOB' @@ -12379,7 +11129,6 @@ function init() { ,nl: 'IOB' ,zh_cn: '活性胰岛素IOB' ,pl: 'Aktywna insulina' - ,tr: 'IOB' } ,'Careportal IOB' : { cs:'IOB z ošetření' @@ -12400,7 +11149,6 @@ function init() { ,nl: 'Careportal IOB' ,zh_cn: '服务面板IOB(活性胰岛素)' ,pl: 'Aktywna insulina z portalu' - ,tr: 'Careportal IOB (Aktif İnsülin)' } ,'Last Bolus' : { cs:'Poslední bolus' @@ -12421,7 +11169,6 @@ function init() { ,nl: 'Laatste bolus' ,zh_cn: '上次大剂量' ,pl: 'Ostatni bolus' - ,tr: 'Son Bolus' } ,'Basal IOB' : { cs:'IOB z bazálů' @@ -12429,7 +11176,7 @@ function init() { ,de: 'Basal IOB' ,dk: 'Basal IOB' ,ro: 'IOB bazală' - ,ru: 'Активн Базал IOB' + ,ru: 'Активн Базал' ,fr: 'IOB du débit basal' ,bg: 'Базален АИ' ,sv: 'Basal IOB' @@ -12442,7 +11189,6 @@ function init() { ,nl: 'Basaal IOB' ,zh_cn: '基础率IOB(活性胰岛素)' ,pl: 'Aktywna insulina z dawki bazowej' - ,tr: 'Bazal IOB' } ,'Source' : { cs:'Zdroj' @@ -12463,13 +11209,12 @@ function init() { ,nl: 'bron' ,zh_cn: '来源' ,pl: 'Źródło' - ,tr: 'Kaynak' } ,'Stale data, check rig?' : { cs:'Zastaralá data, zkontrolovat mobil?' ,he: 'מידע ישן, בדוק את המערכת? ' ,de: 'Daten sind veraltet, Übertragungsgerät prüfen?' - ,dk: 'Gammel data, kontrollere uploader?' + ,dk: 'Gammel data, kontrol uploader?' ,ro: 'Date învechite, verificați uploaderul!' ,fr: 'Valeurs trop anciennes, vérifier l\'uploadeur' ,ru: 'Устаревшие данные, проверьте загрузчик' @@ -12484,7 +11229,6 @@ function init() { ,nl: 'Geen data, controleer uploader' ,zh_cn: '数据过期,检查一下设备?' , pl: 'Dane są nieaktualne, sprawdź urządzenie transmisyjne.' - ,tr: 'Veri güncel değil, vericiyi kontrol et?' } ,'Last received:' : { cs:'Naposledy přijato:' @@ -12505,7 +11249,6 @@ function init() { ,nl: 'laatste ontvangen' ,zh_cn: '上次接收:' ,pl: 'Ostatnio odebrane:' - ,tr: 'Son alınan:' } ,'%1m ago' : { cs:'%1m zpět' @@ -12526,7 +11269,6 @@ function init() { ,nl: '%1m geleden' ,zh_cn: '%1分钟前' ,pl: '%1 minut temu' - ,tr: '%1 dk. önce' } ,'%1h ago' : { cs:'%1h zpět' @@ -12547,7 +11289,6 @@ function init() { ,nl: '%1u geleden' ,zh_cn: '%1小时前' ,pl: '%1 godzin temu' - ,tr: '%1 sa. önce' } ,'%1d ago' : { cs:'%1d zpět' @@ -12568,7 +11309,6 @@ function init() { ,nl: '%1d geleden' ,zh_cn: '%1天前' ,pl: '%1 dni temu' - ,tr: '%1 gün önce' } ,'RETRO' : { cs:'RETRO' @@ -12589,7 +11329,6 @@ function init() { ,nl: 'RETRO' ,zh_cn: '历史数据' ,pl: 'RETRO' - ,tr: 'RETRO Geçmiş' } ,'SAGE' : { cs:'SENZ' @@ -12611,13 +11350,12 @@ function init() { ,zh_cn: '探头' ,zh_tw: '探頭' ,pl: 'Wiek sensora' - ,tr: 'SAGE' } ,'Sensor change/restart overdue!' : { cs:'Čas na výměnu senzoru vypršel!' ,he: 'שנה או אתחל את הסנסור! ' ,de: 'Sensorwechsel/-neustart überfällig!' - ,dk: 'Sensor skift/genstart overskredet!' + ,dk: 'Sensor bytte/genstart overskredet!' ,ro: 'Depășire termen schimbare/restart senzor!' ,fr: 'Changement/Redémarrage du senseur dépassé!' ,ru: 'Рестарт сенсора просрочен' @@ -12632,7 +11370,6 @@ function init() { ,nl: 'Sensor vevang/hertstart tijd gepasseerd' ,zh_cn: '超过更换/重启探头的时间' ,pl: 'Przekroczono czas wymiany/restartu sensora!' - ,tr: 'Sensör değişimi/yeniden başlatma gecikti!' } ,'Time to change/restart sensor' : { cs:'Čas na výměnu senzoru' @@ -12653,13 +11390,12 @@ function init() { ,nl: 'Sensor vervangen of herstarten' ,zh_cn: '已到更换/重启探头的时间' ,pl: 'Czas do wymiany/restartu sensora' - ,tr: 'Sensörü değiştirme/yeniden başlatma zamanı' } ,'Change/restart sensor soon' : { cs:'Blíží se čas na výměnu senzoru' ,he: 'שנה או אתחל את הסנסור בקרוב ' ,de: 'Sensor bald wechseln/neustarten' - ,dk: 'Skift eller genstart sensor snart' + ,dk: 'Byt/genstart sensor snart' ,ro: 'Schimbați/restartați senzorul în curând' ,fr: 'Changement/Redémarrage du senseur bientôt' ,ru: 'Приближается срок замены/рестарта сенсора' @@ -12674,7 +11410,6 @@ function init() { ,nl: 'Herstart of vervang sensor binnenkort' ,zh_cn: '接近更换/重启探头的时间' ,pl: 'Wkrótce czas wymiany/restartu sensora' - ,tr: 'Sensörü yakında değiştir/yeniden başlat' } ,'Sensor age %1 days %2 hours' : { cs:'Stáří senzoru %1 dní %2 hodin' @@ -12695,13 +11430,12 @@ function init() { ,nl: 'Sensor leeftijd %1 dag(en) en %2 uur' ,zh_cn: '探头使用了%1天%2小时' ,pl: 'Wiek sensora: %1 dni %2 godzin' - ,tr: 'Sensör yaşı %1 gün %2 saat' } ,'Sensor Insert' : { cs: 'Výměna sensoru' ,he: 'הכנס סנסור ' ,de: 'Sensor eingesetzt' - ,dk: 'Sensor isat' + ,dk: 'Sensor indsæt' ,ro: 'Inserția senzorului' ,fr: 'Insertion du senseur' ,ru: 'Установка сенсора' @@ -12716,13 +11450,12 @@ function init() { ,nl: 'Sensor ingebracht' ,zh_cn: '植入探头' ,pl: 'Zamontuj sensor' - ,tr: 'Sensor yerleştirme' } ,'Sensor Start' : { cs: 'Znovuspuštění sensoru' ,he: 'סנסור התחיל ' ,de: 'Sensorstart' - ,dk: 'Sensor start' + ,dk: 'Sensorstart' ,ro: 'Pornirea senzorului' ,ru: 'Запуск сенсора' ,fr: 'Démarrage du senseur' @@ -12737,7 +11470,6 @@ function init() { ,nl: 'Sensor start' ,zh_cn: '启动探头' ,pl: 'Uruchom sensor' - ,tr: 'Sensör başlatma' } ,'days' : { cs: 'dní' @@ -12758,13 +11490,12 @@ function init() { ,nl: 'dagen' ,zh_cn: '天' ,pl: 'dni' - ,tr: 'Gün' } ,'Insulin distribution' : { cs: 'Rozložení inzulínu' ,he: 'התפלגות אינסולין ' ,de: 'Insulinverteilung' - ,dk: 'Insulinfordeling' + ,dk: 'Insulindistribution' ,ro: 'Distribuția de insulină' ,fr: 'Distribution de l\'insuline' ,ru: 'распределение инсулина' @@ -12773,10 +11504,8 @@ function init() { ,it: 'Distribuzione di insulina' ,es: 'Distribución de la insulina' ,nl: 'Insuline verdeling' - ,zh_cn: '胰岛素分布' ,bg: 'разпределение на инсулина' ,pl: 'podawanie insuliny' - ,tr: 'İnsülin dağılımı' } ,'To see this report, press SHOW while in this view' : { cs: 'Pro zobrazení toho výkazu stiskněte Zobraz na této záložce' @@ -12790,11 +11519,9 @@ function init() { ,it: 'Per guardare questo report, premere SHOW all\'interno della finestra' ,es: 'Presione SHOW para mostrar el informe en esta vista' ,nl: 'Om dit rapport te zien, druk op "Laat zien"' - ,zh_cn: '要查看此报告,请在此视图中按生成' ,sv: 'För att se denna rapport, klicka på "Visa"' ,bg: 'За да видите тази статистика, натиснете ПОКАЖИ' , pl: 'Aby wyświetlić ten raport, naciśnij przycisk POKAŻ w tym widoku' - ,tr: 'Bu raporu görmek için bu görünümde GÖSTER düğmesine basın.' } ,'AR2 Forecast' : { cs: 'AR2 predikci' @@ -12808,11 +11535,9 @@ function init() { ,fi: 'AR2 Ennusteet' ,it: 'Previsione AR2' ,nl: 'AR2 Voorspelling' - ,zh_cn: 'AR2 预测' ,sv: 'AR2 Förutsägelse' ,bg: 'AR2 прогнози' ,pl: 'Prognoza AR2' - ,tr: 'AR2 Tahmini' } ,'OpenAPS Forecasts' : { cs: 'OpenAPS predikci' @@ -12826,11 +11551,9 @@ function init() { ,fi: 'OpenAPS Ennusteet' ,it: 'Previsione OpenAPS' ,nl: 'OpenAPS Voorspelling' - ,zh_cn: 'OpenAPS 预测' ,sv: 'OpenAPS Förutsägelse' ,bg: 'OpenAPS прогнози' ,pl: 'Prognoza OpenAPS' - ,tr: 'OpenAPS Tahminleri' } ,'Temporary Target' : { cs: 'Dočasný cíl glykémie' @@ -12844,11 +11567,9 @@ function init() { ,es: 'Objetivo temporal' ,it: 'Obbiettivo temporaneo' ,nl: 'Tijdelijk doel' - ,zh_cn: '临时目标' ,sv: 'Tillfälligt mål' ,bg: 'временна цел' ,pl: 'Cel tymczasowy' - ,tr: 'Geçici Hedef' } ,'Temporary Target Cancel' : { cs: 'Dočasný cíl glykémie konec' @@ -12862,11 +11583,9 @@ function init() { ,es: 'Objetivo temporal cancelado' ,it: 'Obbiettivo temporaneo cancellato' ,nl: 'Annuleer tijdelijk doel' - ,zh_cn: '临时目标取消' ,sv: 'Avsluta tillfälligt mål' ,bg: 'Отмяна на временна цел' ,pl: 'Zel tymczasowy anulowany' - ,tr: 'Geçici Hedef İptal' } ,'OpenAPS Offline' : { cs: 'OpenAPS vypnuto' @@ -12880,11 +11599,9 @@ function init() { ,it: 'OpenAPS disconnesso' ,es: 'OpenAPS desconectado' ,nl: 'OpenAPS Offline' - ,zh_cn: 'OpenAPS 离线' ,sv: 'OpenAPS Offline' ,bg: 'OpenAPS спрян' ,pl: 'OpenAPS nieaktywny' - ,tr: 'OpenAPS Offline (çevrimdışı)' } ,'Profiles' : { cs: 'Profily' @@ -12898,11 +11615,9 @@ function init() { ,it: 'Profili' ,es: 'Perfil' ,nl: 'Profielen' - ,zh_cn: '配置文件' ,sv: 'Profiler' ,bg: 'Профили' ,pl: 'Profile' - ,tr: 'Profiller' } ,'Time in fluctuation' : { cs: 'Doba měnící se glykémie' @@ -12914,13 +11629,11 @@ function init() { ,es: 'Tiempo fluctuando' ,ru: 'время флуктуаций' ,nl: 'Tijd met fluctuaties' - ,zh_cn: '波动时间' ,sv: 'Tid i fluktation' ,de: 'Zeit in Fluktuation (Schwankung)' ,dk: 'Tid i fluktation' ,bg: 'Време в промяна' ,pl: 'Czas fluaktacji (odchyleń)' - ,tr: 'Dalgalanmada geçen süre' } ,'Time in rapid fluctuation' : { cs: 'Doba rychle se měnící glykémie' @@ -12932,13 +11645,11 @@ function init() { ,es: 'Tiempo fluctuando rápido' ,ru: 'время быстрых флуктуаций' ,nl: 'Tijd met grote fluctuaties' - ,zh_cn: '快速波动时间' ,sv: 'Tid i snabb fluktation' ,de: 'Zeit in starker Fluktuation (Schwankung)' ,dk: 'Tid i hurtig fluktation' ,bg: 'Време в бърза промяна' ,pl: 'Czas szybkich fluaktacji (odchyleń)' - ,tr: 'Hızlı dalgalanmalarda geçen süre' } ,'This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:' : { cs: 'Toto je pouze hrubý odhad, který může být nepřesný a nenahrazuje kontrolu z krve. Vzorec je převzatý z:' @@ -12949,14 +11660,12 @@ function init() { ,ro: 'Aceasta este doar o aproximare brută, care poate fi foarte imprecisă și nu ține loc de testare capilară. Formula matematică folosită este luată din:' ,es: 'Esto es sólo una estimación apróximada que puede ser muy inexacta y no reemplaza las pruebas de sangre reales. La fórmula utilizada está tomada de: ' ,ru: 'Это приблизительная оценка не заменяющая фактический анализ крови. Используемая формула взята из:' - ,zh_cn: '这只是一个粗略的估计,可能非常不准确,并不能取代测指血' ,nl: 'Dit is enkel een grove schatting die onjuist kan zijn welke geen bloedtest vervangt. De gebruikte formule is afkomstig van:' ,sv: 'Detta är en grov uppskattning som kan vara missvisande. Det ersätter inte blodprov. Formeln är hämtad från:' ,de: 'Dies ist lediglich eine grobe Schätzung, die sehr ungenau sein kann und eine Überprüfung des tatsächlichen Blutzuckers nicht ersetzen kann. Die verwendete Formel wurde genommen von:' ,dk: 'Dette er kun en grov estimering som kan være misvisende. Det erstatter ikke en blodprøve. Formelen er hemtet fra:' ,bg: 'Това е само грубо изчисление, което може да е много неточно и не изключва реалния кръвен тест. Формулата, кокято е използвана е взета от:' ,pl: 'To tylko przybliżona ocena, która może być bardzo niedokładna i nie może zastąpić faktycznego poziomu cukru we krwi. Zastosowano formułę:' - ,tr: 'Bu bir kaba tahmindir ve çok hata içerebilir gerçek kan şekeri testlerinin yerini tutmayacaktır. Kullanılan formülde buradandır:' } , 'Filter by hours' : { cs: ' Filtr podle hodin' @@ -12967,13 +11676,11 @@ function init() { ,es: 'Filtrar por horas' ,ru: 'почасовой фильтр' ,nl: 'Filter op uren' - ,zh_cn: '按小时过滤' ,sv: 'Filtrera per timme' ,de: 'Filtern nach Stunden' ,dk: 'Filtrer per time' ,bg: 'Филтър по часове' ,pl: 'Filtruj po godzinach' - ,tr: 'Saatlere göre filtrele' } , 'Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.' : { cs: 'Doba měnící se glykémie a rapidně se měnící glykémie měří % času ve zkoumaném období, během kterého se glykémie měnila relativně rychle nebo rapidně. Nižší hodnota je lepší.' @@ -12984,13 +11691,11 @@ function init() { ,es: 'Tiempo en fluctuación y Tiempo en fluctuación rápida miden el % de tiempo del período exáminado, durante la cual la glucosa en sangre ha estado cambiando relativamente rápido o rápidamente. Valores más bajos son mejores.' ,ru: 'время флуктуаций и время быстрых флуктуаций означает % времени в рассматриваемый период в течение которого СК менялся относительно быстро или просто быстро. Более низкие значения предпочтительней' ,nl: 'Tijd met fluctuaties of grote fluctuaties in % van de geevalueerde periode, waarbij de bloed glucose relatief snel wijzigde.Lagere waarden zijn beter.' - ,zh_cn: '在检查期间血糖波动时间和快速波动时间占的时间百分比,在此期间血糖相对快速或快速地变化。百分比值越低越好。' ,sv: 'Tid i fluktuation och tid i snabb fluktuation mäter% av tiden under den undersökta perioden, under vilken blodsockret har förändrats relativt snabbt eller snabbt. Lägre värden är bättre' ,de: 'Zeit in Fluktuation und Zeit in starker Fluktuation messen den Teil der Zeit, in der sich der Blutzuckerwert relativ oder sehr schnell verändert hat. Niedrigere Werte sind besser.' ,dk: 'Tid i fluktuation og tid i hurtig fluktuation måler % af tiden i den undersøgte periode, under vilket blodsukkret har ændret sig relativt hurtigt. Lavere værdier er bedre.' ,bg: 'Време в промяна и време в бърза промяна измерват % от време в разгледания период, през който КЗ са се променяли бързо или много бързо. По-ниски стойности са по-добри.' ,pl: 'Czas fluktuacji i szybki czas fluktuacji mierzą % czasu w badanym okresie, w którym poziom glukozy we krwi zmieniał się szybko lub bardzo szybko. Preferowane są wolniejsze zmiany' - ,tr: 'Dalgalanmadaki zaman ve Hızlı dalgalanmadaki zaman, kan şekerinin nispeten hızlı veya çok hızlı bir şekilde değiştiği, incelenen dönemdeki zamanın %\'sini ölçer. Düşük değerler daha iyidir.' } , 'Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.' : { cs: 'Průměrná celková denní změna je součet absolutních hodnoty všech glykémií za sledované období, děleno počtem dní. Nižší hodnota je lepší.' @@ -13001,13 +11706,11 @@ function init() { ,ru: 'усредненное ежедневное изменение это сумма абсолютных величин всех отклонений СК в рассматриваемый период, деленное на количество дней. Меньшая величина предпочтительней' ,es: 'El cambio medio diario total es la suma de los valores absolutos de todas las glucémias en el período examinado, dividido por el número de días. Mejor valores bajos.' ,nl: 'Gemiddelde veranderingen per dag is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal dagen in deze periode. Lager is beter.' - ,zh_cn: '平均每日总变化是检查期间所有血糖偏移的绝对值之和除以天数。越低越好' ,sv: 'Medel Total Daglig Förändring är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden, dividerat med antalet dagar. Lägre är bättre.' ,de: 'Die gesamte mittlere Änderung pro Tag ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Tage. Niedrigere Werte sind besser.' ,dk: 'Middel Total Daglig Ændring er summen af absolutværdier af alla glukoseændringer i den undersøgte periode, divideret med antallet af dage. Lavere er bedre.' ,bg: 'Средната дневна промяна е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя дни в периода. По-ниската стойност е по-добра' ,pl: 'Sednia całkowita dziennych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę dni. Mniejsze są lepsze' - ,tr: 'Toplam Günlük Değişim, incelenen süre için, gün sayısına bölünen tüm glukoz değerlerinin mutlak değerinin toplamıdır. Düşük değer daha iyidir.' } , 'Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.' : { cs: 'Průměrná hodinová změna je součet absolutní hodnoty všech glykémií za sledované období, dělených počtem hodin v daném období. Nižší hodnota je lepší.' @@ -13018,49 +11721,27 @@ function init() { ,ru: 'усредненное часовое изменение это сумма абсолютных величин всех отклонений СК в рассматриваемый период, деленное на количество часов в этот период. Более низкое предпочтительней' ,es: 'El cambio medio por hora, es la suma del valor absoluto de todas las glucemias para el período examinado, dividido por el número de horas en el período. Más bajo es mejor.' ,nl: 'Gemiddelde veranderingen per uur is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal uur in deze periode. Lager is beter.' - ,zh_cn: '平均每小时变化是检查期间所有血糖偏移的绝对值之和除以该期间的小时数。 越低越好' ,sv: 'Medelvärde per timme är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden dividerat med antalet timmar under perioden. Lägre är bättre.' ,de: 'Die mittlere Änderung pro Stunde ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Stunden. Niedrigere Werte sind besser.' ,dk: 'Middelværdier per time er summen af absolutværdier fra alle glukoseændringer i den undersøgte periode divideret med antallet af timer. Lavere er bedre.' ,bg: 'Средната промяна за час е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя часове в периода. По-ниската стойност е по-добра' ,pl: 'Sednia całkowita godzinnych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę godzin. Mniejsze są lepsze' - ,tr: 'Saat başına ortalama değişim, gözlem periyodu üzerindeki tüm glikoz değişikliklerinin mutlak değerlerinin saat sayısına bölünmesiyle elde edilen toplam değerdir. Düşük değerler daha iyidir.' - } - , 'GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.' : { - cs: '">zde.' - ,he: '">here.' - ,fi: '">here.' - ,it: '">qui.' - ,es: '">here.' - ,fr: '">ici.' - ,ro: '">aici.' - ,ru: '">here.' - ,nl: '">is hier te vinden.' - ,zh_cn: '">here.' - ,sv: '">här.' - ,de: '">hier.' - ,dk: '">her.' - ,bg: '">тук.' - ,pl: '">tutaj.' - ,tr: '">buradan.' + } + , 'GVI and PGS are measures developed by Dexcom, detailed here.' : { + cs: 'GVI a PGS jsou měření vyvinutá společností Dexcom, podrobněji zde.' + ,he: 'GVI and PGS are measures developed by Dexcom, detailed here. ' + ,fi: 'GVI ja PGS ovat Dexcom-yrityksen kehittämiä mittaustapoja, joista voit lukea lisää täällä..' + ,it: 'GVI e PGS sono misure sviluppate da Dexcom, dettagliate qui.' + ,es: 'Variabilidad de la glucosa en sangre y el estado glucémico del paciente es un valor diseñado por Dexcom, más detalles en here.' + ,fr: 'GVI et PGS sont des mesures développées par la firme Dexcom, présentées en détail ici.' + ,ro: 'GVI și PGS sunt caracteristici de măsurare inventate de Dexcom, ale căror detalii le găsiți aici.' + ,ru: 'вариабельность гликемии и статус гликемии больного это величины, разработанные декскомом, подробнее here.' + ,nl: 'GVI en PGS zijn maten ontworpen door Dexcom, gedetaillieerde info here.' + ,sv: 'GVI och PGS är värden utvecklade av Dexcom, detaljer här.' + ,de: 'GVI und PGS sind von Dexcom entwickelte Werte. Details hier.' + ,dk: 'GVI og PGS er værdier udviklet af Dexcom, detaljer her.' + ,bg: 'GVI и PGS са параметри разработени от Декском, повече детайли тук.' + ,pl: 'GVI i PGS są pomiarami opracowanymi przez Dexcom, szczegóły tutaj.' } , 'Mean Total Daily Change' : { cs: 'Průměrná celková denní změna' @@ -13072,13 +11753,11 @@ function init() { ,ru: 'усредненное изменение за день' ,es: 'Variación media total diaria' ,nl: 'Gemiddelde veranderingen per dag' - ,zh_cn: '平均每日总变化' ,sv: 'Medel Total Daglig Förändring' ,de: 'Gesamte mittlere Änderung pro Tag' ,dk: 'Middel Total Daglig Ændring' ,bg: 'Средна промяна за ден' ,pl: 'Średnia całkowita dziennych zmian' - ,tr: 'Günde toplam ortalama değişim' } , 'Mean Hourly Change' : { cs: 'Průměrná hodinová změna' @@ -13090,13 +11769,11 @@ function init() { ,es: 'Variación media total por horas' ,ru: 'усредненное изменение за час' ,nl: 'Gemiddelde veranderingen per uur' - ,zh_cn: '平均每小时变化' ,sv: 'Medelvärde per timme' ,de: 'Mittlere Änderung pro Stunde' ,dk: 'Middelværdier per time' ,bg: 'Средна промяна за час' ,pl: 'Średnia całkowita godzinnych zmian' - ,tr: 'Saatte ortalama değişim' } , 'FortyFiveDown': { bg: 'slightly dropping' @@ -13112,7 +11789,7 @@ function init() { , hr: 'slightly dropping' , it: 'leggera diminuzione' , ko: 'slightly dropping' - , nb: 'svakt fallende' + , nb: 'slightly dropping' , pl: 'niewielki spadek' , pt: 'slightly dropping' , ro: 'scădere ușoară' @@ -13120,15 +11797,14 @@ function init() { , sk: 'slightly dropping' , sv: 'slightly dropping' , nl: 'slightly dropping' - , tr: 'biraz düşen' - , zh_cn: '缓慢下降' + , zh_cn: 'slightly dropping' , zh_tw: 'slightly dropping' }, 'FortyFiveUp': { bg: 'slightly rising' , cs: 'lehce nahoru' - , de: 'leicht steigend' + , de: 'leicht fallend' , dk: 'svagt stigende' , el: 'slightly rising' , en: 'slightly rising' @@ -13139,7 +11815,7 @@ function init() { , hr: 'slightly rising' , it: 'leggero aumento' , ko: 'slightly rising' - , nb: 'svakt stigende' + , nb: 'slightly rising' , pl: 'niewielki wzrost' , pt: 'slightly rising' , ro: 'creștere ușoară' @@ -13147,8 +11823,7 @@ function init() { , sk: 'slightly rising' , sv: 'slightly rising' , nl: 'slightly rising' - , tr: 'biraz yükselen' - , zh_cn: '缓慢上升' + , zh_cn: 'slightly rising' , zh_tw: 'slightly rising' }, 'Flat': { @@ -13165,7 +11840,7 @@ function init() { , hr: 'holding' , it: 'stabile' , ko: 'holding' - , nb: 'stabilt' + , nb: 'holding' , pl: 'stabilny' , pt: 'holding' , ro: 'stabil' @@ -13173,8 +11848,7 @@ function init() { , sk: 'holding' , sv: 'holding' , nl: 'holding' - , tr: 'sabit' - , zh_cn: '平' + , zh_cn: 'holding' , zh_tw: 'holding' }, 'SingleUp': { @@ -13191,7 +11865,7 @@ function init() { , hr: 'rising' , it: 'aumento' , ko: 'rising' - , nb: 'stigende' + , nb: 'rising' , pl: 'wzrost' , pt: 'rising' , ro: 'creștere' @@ -13199,8 +11873,7 @@ function init() { , sk: 'rising' , sv: 'rising' , nl: 'rising' - , tr: 'yükseliyor' - , zh_cn: '上升' + , zh_cn: 'rising' , zh_tw: 'rising' }, 'SingleDown': { @@ -13217,7 +11890,7 @@ function init() { , hr: 'dropping' , it: 'diminuzione' , ko: 'dropping' - , nb: 'fallende' + , nb: 'dropping' , pl: 'spada' , pt: 'dropping' , ro: 'scădere' @@ -13225,8 +11898,7 @@ function init() { , sk: 'dropping' , sv: 'dropping' , nl: 'dropping' - , tr: 'düşüyor' - , zh_cn: '下降' + , zh_cn: 'dropping' , zh_tw: 'dropping' }, 'DoubleDown': { @@ -13243,7 +11915,7 @@ function init() { , hr: 'rapidly dropping' , it: 'rapida diminuzione' , ko: 'rapidly dropping' - , nb: 'hurtig stigende' + , nb: 'rapidly dropping' , pl: 'szybko spada' , pt: 'rapidly dropping' , ro: 'scădere bruscă' @@ -13251,8 +11923,7 @@ function init() { , sk: 'rapidly dropping' , sv: 'rapidly dropping' , nl: 'rapidly dropping' - , tr: 'hızlı düşen' - , zh_cn: '快速下降' + , zh_cn: 'rapidly dropping' , zh_tw: 'rapidly dropping' }, 'DoubleUp': { @@ -13269,16 +11940,15 @@ function init() { , hr: 'rapidly rising' , it: 'rapido aumento' , ko: 'rapidly rising' - , nb: 'hurtig fallende' + , nb: 'rapidly rising' , pl: 'szybko rośnie' , pt: 'rapidly rising' , ro: 'creștere rapidă' - , ru: 'быстрый рост' + , ru: 'быстро растет' , sk: 'rapidly rising' , sv: 'rapidly rising' , nl: 'rapidly rising' - , tr: 'hızla yükselen' - , zh_cn: '快速上升' + , zh_cn: 'rapidly rising' , zh_tw: 'rapidly rising' }, 'alexaStatus': { @@ -13303,8 +11973,7 @@ function init() { , ru: '%1 и %2 начиная с %3.' , sk: '%1 and %2 as of %3.' , sv: '%1 and %2 as of %3.' - , tr: '%1 ve %2 e kadar %3.' - , zh_cn: '%1 和 %2 到 %3.' + , zh_cn: '%1 and %2 as of %3.' , zh_tw: '%1 and %2 as of %3.' }, 'alexaBasal': { @@ -13329,8 +11998,7 @@ function init() { , sk: '%1 current basal is %2 units per hour' , sv: '%1 current basal is %2 units per hour' , nl: '%1 current basal is %2 units per hour' - , tr: '%1 geçerli bazal oranı saatte %2 ünite' - , zh_cn: '%1 当前基础率是 %2 U/小时' + , zh_cn: '%1 current basal is %2 units per hour' , zh_tw: '%1 current basal is %2 units per hour' }, 'alexaBasalTemp': { @@ -13355,8 +12023,7 @@ function init() { , sk: '%1 temp basal of %2 units per hour will end %3' , sv: '%1 temp basal of %2 units per hour will end %3' , nl: '%1 temp basal of %2 units per hour will end %3' - , tr: '%1 geçici bazal %2 ünite %3 sona eriyor' - , zh_cn: '%1 临时基础率 %2 U/小时将会在 %3结束' + , zh_cn: '%1 temp basal of %2 units per hour will end %3' , zh_tw: '%1 temp basal of %2 units per hour will end %3' }, 'alexaIob': { @@ -13381,8 +12048,7 @@ function init() { , sk: 'and you have %1 insulin on board.' , sv: 'and you have %1 insulin on board.' , nl: 'and you have %1 insulin on board.' - , tr: 've Sizde %1 aktif insulin var' - , zh_cn: '并且你有 %1 的活性胰岛素.' + , zh_cn: 'and you have %1 insulin on board.' , zh_tw: 'and you have %1 insulin on board.' }, 'alexaIobIntent': { @@ -13407,8 +12073,7 @@ function init() { , sk: 'You have %1 insulin on board' , sv: 'You have %1 insulin on board' , nl: 'You have %1 insulin on board' - , tr: 'Sizde %1 aktif insülin var' - , zh_cn: '你有 %1 的活性胰岛素' + , zh_cn: 'You have %1 insulin on board' , zh_tw: 'You have %1 insulin on board' }, 'alexaIobUnits': { @@ -13433,8 +12098,7 @@ function init() { , ru: '%1 единиц' , sk: '%1 units of' , sv: '%1 units of' - , tr: 'hala %1 birim' - , zh_cn: '%1 单位' + , zh_cn: '%1 units of' , zh_tw: '%1 units of' }, 'alexaPreamble': { @@ -13459,8 +12123,7 @@ function init() { , ru: 'ваш' , sk: 'Your' , sv: 'Your' - , tr: 'Senin' - , zh_cn: '你的' + , zh_cn: 'Your' , zh_tw: 'Your' }, 'alexaPreamble3person': { @@ -13485,8 +12148,7 @@ function init() { , ru: '%1 имеет ' , sk: '%1 has a ' , sv: '%1 has a ' - , tr: '%1 bir tane var' - , zh_cn: '%1 有一个 ' + , zh_cn: '%1 has a ' , zh_tw: '%1 has a ' }, 'alexaNoInsulin': { @@ -13511,8 +12173,7 @@ function init() { , ru: 'нет' , sk: 'no' , sv: 'no' - , tr: 'yok' - , zh_cn: '否' + , zh_cn: 'no' , zh_tw: 'no' }, 'alexaUploadBattery': { @@ -13522,13 +12183,10 @@ function init() { , de: 'Der Akku deines Uploader Handys ist bei %1' , dk: 'Din uploaders batteri er %1' , nl: 'De batterij van je mobiel is bij %l' - ,zh_cn: '你的手机电池电量是 %1 ' , sv: 'Din uppladdares batteri är %1' , fi: 'Lähettimen paristoa jäljellä %1' , ro: 'Bateria uploaderului este la %1' , pl: 'Twoja bateria ma %1' - , ru: 'батарея загрузчика %1' - , tr: 'Yükleyici piliniz %1' }, 'alexaReservoir': { bg: 'You have %1 units remaining' @@ -13537,13 +12195,10 @@ function init() { , de: 'Du hast %1 Einheiten übrig' , dk: 'Du har %1 enheder tilbage' , nl: 'Je hebt nog %l eenheden in je reservoir' - ,zh_cn: '你剩余%1 U的胰岛素' , sv: 'Du har %1 enheter kvar' , fi: '%1 yksikköä insuliinia jäljellä' , ro: 'Mai aveți %1 unități rămase' , pl: 'W zbiorniku pozostało %1 jednostek' - , ru: 'остается %1 ед' - , tr: '%1 birim kaldı' }, 'alexaPumpBattery': { bg: 'Your pump battery is at %1 %2' @@ -13552,13 +12207,10 @@ function init() { , de: 'Der Batteriestand deiner Pumpe ist bei %1 %2' , dk: 'Din pumpes batteri er %1 %2' , nl: 'Je pomp batterij is bij %1 %2' - ,zh_cn: '你的泵电池电量是%1 %2' , sv: 'Din pumps batteri är %1 %2' , fi: 'Pumppu on %1 %2' , ro: 'Bateria pompei este la %1 %2' , pl: 'Bateria pompy jest w %1 %2' - , ru: 'батарея помпы %1 %2' - , tr: 'Pompa piliniz %1 %2' }, 'alexaLastLoop': { bg: 'The last successful loop was %1' @@ -13567,13 +12219,10 @@ function init() { , de: 'Der letzte erfolgreiche Loop war %1' , dk: 'Seneste successfulde loop var %1' , nl: 'De meest recente goede loop was %1' - ,zh_cn: '最后一次成功闭环的是在%1' , sv: 'Senaste lyckade loop var %1' , fi: 'Viimeisin onnistunut loop oli %1' , ro: 'Ultima decizie loop implementată cu succes a fost %1' , pl: 'Ostatnia pomyślna pętla była %1' - , ru: 'недавний успешный цикл был %1' - , tr: 'Son başarılı döngü %1 oldu' }, 'alexaLoopNotAvailable': { bg: 'Loop plugin does not seem to be enabled' @@ -13582,13 +12231,10 @@ function init() { , de: 'Das Loop Plugin scheint nicht aktiviert zu sein' , dk: 'Loop plugin lader ikke til at være slået til' , nl: 'De Loop plugin is niet geactiveerd' - ,zh_cn: 'Loop插件看起来没有被启用' , sv: 'Loop plugin verkar inte vara aktiverad' , fi: 'Loop plugin ei ole aktivoitu' , ro: 'Extensia loop pare a fi dezactivată' , pl: 'Plugin Loop prawdopodobnie nie jest włączona' - , ru: 'плагин ЗЦ Loop не активирован ' - , tr: 'Döngü eklentisi etkin görünmüyor' }, 'alexaLoopForecast': { bg: 'According to the loop forecast you are expected to be %1 over the next %2' @@ -13597,13 +12243,10 @@ function init() { , de: 'Entsprechend der Loop Vorhersage landest du bei %1 während der nächsten %2' , dk: 'Ifølge Loops forudsigelse forventes du at blive %1 i den næste %2' , nl: 'Volgens de Loop voorspelling is je waarde %1 over de volgnede %2' - ,zh_cn: '根据loop的预测,在接下来的%2你的血糖将会是%1' , sv: 'Enligt Loops förutsägelse förväntas du bli %1 inom %2' , fi: 'Ennusteen mukaan olet %1 seuraavan %2 ajan' , ro: 'Potrivit previziunii date de loop se estiemază %1 pentru următoarele %2' , pl: 'Zgodnie z prognozą pętli, glikemia %1 będzie podczas następnego %2' - , ru: 'по прогнозу алгоритма ЗЦ ожидается $1 за последующие %2' - , tr: 'Döngü tahminine göre sonraki %2 ye göre %1 olması bekleniyor' }, 'alexaForecastUnavailable': { bg: 'Unable to forecast with the data that is available' @@ -13612,13 +12255,10 @@ function init() { , de: 'Mit den verfügbaren Daten ist eine Loop Vorhersage nicht möglich' , dk: 'Det er ikke muligt at forudsige md de tilgængelige data' , nl: 'Niet mogelijk om een voorspelling te doen met de data die beschikbaar is' - ,zh_cn: '血糖数据不可用,无法预测未来走势' , sv: 'Förutsägelse ej möjlig med tillgänlig data' , fi: 'Ennusteet eivät ole toiminnassa puuttuvan tiedon vuoksi' , ro: 'Estimarea este imposibilă pe baza datelor disponibile' , pl: 'Prognoza pętli nie jest możliwa, z dostępnymi danymi.' - , ru: 'прогноз при таких данных невозможен' - , tr: 'Mevcut verilerle tahmin edilemedi' }, 'alexaRawBG': { en: 'Your raw bg is %1' @@ -13626,14 +12266,11 @@ function init() { , de: 'Dein Rohblutzucker ist %1' , dk: 'Dit raw blodsukker er %1' , nl: 'Je raw bloedwaarde is %1' - ,zh_cn: '你的血糖是 %1' , sv: 'Ditt raw blodsocker är %1' , fi: 'Suodattamaton verensokeriarvo on %1' , ro: 'Glicemia brută este %1' , bg: 'Your raw bg is %1' , pl: 'Glikemia RAW wynosi %1' - , ru: 'ваши необработанные данные RAW $1' - , tr: 'Ham kan şekeriniz %1' }, 'alexaOpenAPSForecast': { en: 'The OpenAPS Eventual BG is %1' @@ -13641,14 +12278,11 @@ function init() { , de: 'Der von OpenAPS vorhergesagte Blutzucker ist %1' , dk: 'OpenAPS forventet blodsukker er %1' , nl: 'OpenAPS uiteindelijke bloedglucose van %1' - ,zh_cn: 'OpenAPS 预测最终血糖是 %1' , sv: 'OpenAPS slutgiltigt blodsocker är %1' , fi: 'OpenAPS verensokeriarvio on %1' , ro: 'Glicemia estimată de OpenAPS este %1' ,bg: 'The OpenAPS Eventual BG is %1' , pl: 'Glikemia prognozowana przez OpenAPS wynosi %1' - , ru: 'OpenAPS прогнозирует ваш СК как %1 ' - , tr: 'OpenAPS tarafından tahmin edilen kan şekeri %1' }, 'alexaCOB': { en: '%1 %2 carbohydrates on board' @@ -13656,14 +12290,11 @@ function init() { , de: '%1 %2 Gramm Kohlenhydrate wirkend.' , dk: '%1 %2 gram aktive kulhydrater' , nl: '%1 %2 actieve koolhydraten' - ,zh_cn: '%1 %2 活性碳水化合物' , sv: '%1 %2 gram aktiva kolhydrater' , fi: '%1 %2 aktiivista hiilihydraattia' , ro: '%1 %2 carbohidrați activi în corp' ,bg: '%1 %2 carbohydrates on board' , pl: '%1 %2 aktywnych węglowodanów' - , ru: '%1 $2 активных углеводов' - , tr: '%1 %2 aktif karbonhidrat' }, 'Fat [g]': { cs: 'Tuk [g]' @@ -13673,14 +12304,12 @@ function init() { ,fi: 'Rasva [g]' ,fr: 'Graisses [g]' ,nl: 'Vet [g]' - ,zh_cn: '脂肪[g]' ,ro: 'Grăsimi [g]' - ,ru: 'жиры [g]' + ,ru: 'жиры' ,it: 'Grassi [g]' ,sv: 'Fett [g]' ,bg: 'Мазнини [гр]' ,pl: 'Tłuszcz [g]' - ,tr: 'Yağ [g]' }, 'Protein [g]': { cs: 'Proteiny [g]' @@ -13690,14 +12319,12 @@ function init() { ,fi: 'Proteiini [g]' ,fr: 'Protéines [g]' ,nl: 'Proteine [g]' - ,zh_cn: '蛋白质[g]' ,ro: 'Proteine [g]' - ,ru: 'белки [g]' + ,ru: 'белки' ,it: 'Proteine [g]' ,sv: 'Protein [g]' ,bg: 'Протеини [гр]' ,pl: 'Białko [g]' - ,tr: 'Protein [g]' }, 'Energy [kJ]': { cs: 'Energie [kJ]' @@ -13707,14 +12334,12 @@ function init() { ,es: 'Energía [Kj]' ,fr: 'Énergie [kJ]' ,ro: 'Energie [g]' - ,ru: 'энергия [kJ' + ,ru: 'энергетика' ,it: 'Energia [kJ]' - ,zh_cn: '能量 [kJ]' ,nl: 'Energie [kJ]' ,sv: 'Energi [kJ]' ,bg: 'Енергия [kJ]' ,pl: 'Energia [kJ}' - ,tr: 'Enerji [kJ]' }, 'Clock Views:': { cs: 'Hodiny:' @@ -13725,20 +12350,17 @@ function init() { ,ro: 'Vedere tip ceas:' ,ru: 'цифры крупно:' ,it: 'Vista orologio:' - ,zh_cn: '时钟视图' ,sv: 'Visa klocka:' ,de: 'Uhr-Anzeigen' ,dk: 'Vis klokken:' ,bg: 'Часовник изглед:' ,pl: 'Widoki zegarów' - ,tr: 'Saat Görünümü' }, 'Clock': { cs: 'Hodiny' ,fr: 'L\'horloge' ,nl: 'Klok' - ,zh_cn: '时钟' - ,sv: 'Klocka' + ,sv: 'Klocka' ,de: 'Uhr' ,dk: 'Klokken' ,fi: 'Kello' @@ -13746,15 +12368,12 @@ function init() { ,it: 'Orologio' ,bg: 'Часовник' ,pl: 'Zegar' - ,ru: 'часы' - ,tr: 'Saat' }, 'Color': { cs: 'Barva' ,fr: 'Couleur' ,nl: 'Kleur' - ,zh_cn: '彩色' - ,sv: 'Färg' + ,sv: 'Färg' ,de: 'Farbe' ,dk: 'Farve' ,fi: 'Väri' @@ -13762,14 +12381,11 @@ function init() { ,it: 'Colore' ,bg: 'Цвят' ,pl: 'Kolor' - ,ru: 'цвет' - ,tr: 'Renk' }, 'Simple': { cs: 'Jednoduchý' ,fr: 'Simple' ,nl: 'Simpel' - ,zh_cn: '简单' ,sv: 'Simpel' ,de: 'Einfach' ,dk: 'Simpel' @@ -13778,14 +12394,11 @@ function init() { ,it: 'Semplice' ,bg: 'Прост' ,pl: 'Prosty' - ,ru: 'простой' - ,tr: 'Basit' }, 'TDD average': { cs: 'Průměrná denní dávka' , fi: 'Päivän kokonaisinsuliinin keskiarvo' , nl: 'Gemiddelde dagelijkse insuline (TDD)' - ,zh_cn: '日胰岛素用量平均值' , sv: 'Genomsnittlig daglig mängd insulin' , de: 'durchschnittliches Insulin pro Tag (TDD)' , dk: 'Gennemsnitlig daglig mængde insulin' @@ -13793,14 +12406,11 @@ function init() { , it: 'Totale Dose Giornaliera media (TDD)' , bg: 'Обща дневна доза средно' , pl: 'Średnia dawka dzienna' - , ru: 'средняя суточная доза инсулина' - , tr: 'Ortalama günlük Toplam Doz (TDD)' }, 'Carbs average': { cs: 'Průměrné množství sacharidů' , fi: 'Hiilihydraatit keskiarvo' , nl: 'Gemiddelde koolhydraten per dag' - ,zh_cn: '碳水化合物平均值' , sv: 'Genomsnittlig mängd kolhydrater per dag' , de: 'durchschnittliche Kohlenhydrate pro Tag' , dk: 'Gennemsnitlig mængde kulhydrater per dag' @@ -13808,14 +12418,11 @@ function init() { , it: 'Media carboidrati' , bg: 'Въглехидрати средно' , pl: 'Średnia ilość węglowodanów' - , ru: 'среднее кол-во углеводов за сутки' - , tr: 'Günde ortalama karbonhidrat' }, 'Eating Soon': { cs: 'Blížící se jídlo' , fi: 'Ruokailu pian' , nl: 'Pre-maaltijd modus' - ,zh_cn: '过会吃饭' , sv: 'Äter snart' , de: 'Bald Essen' , dk: 'Spiser snart' @@ -13823,14 +12430,11 @@ function init() { , it: 'Mangiare presto' , bg: 'Преди хранене' , pl: 'Przed jedzeniem' - , ru: 'скоро прием пищи' - , tr: 'Yakında Yenecek' }, 'Last entry {0} minutes ago': { cs: 'Poslední hodnota {0} minut zpět' , fi: 'Edellinen verensokeri {0} minuuttia sitten' , nl: 'Laatste waarde {0} minuten geleden' - ,zh_cn: '最后一个条目 {0} 分钟之前' , sv: 'Senaste värde {0} minuter sedan' , de: 'Letzter Eintrag vor {0} Minuten' , dk: 'Seneste værdi {0} minutter siden' @@ -13838,14 +12442,11 @@ function init() { , it: 'Ultimo inserimento {0} minuti fa' , bg: 'Последен запис преди {0} минути' , pl: 'Ostatni wpis przed {0} minutami' - , ru: 'предыдущая запись {0} минут назад' - , tr: 'Son giriş {0} dakika önce' }, 'change': { cs: 'změna' , fi: 'muutos' , nl: 'wijziging' - ,zh_cn: '改变' , sv: 'byta' , de: 'verändern' , dk: 'ændre' @@ -13853,14 +12454,11 @@ function init() { , it: 'cambio' , bg: 'промяна' , pl: 'zmiana' - , ru: 'замена' - , tr: 'değişiklik' }, 'Speech': { cs: 'Hlas' , fi: 'Puhe' , nl: 'Spraak' - ,zh_cn: '朗读' , sv: 'Tal' , de: 'Sprache' , dk: 'Tale' @@ -13868,8 +12466,6 @@ function init() { , it: 'Voce' , bg: 'Глас' , pl: 'Głos' - , ru: 'речь' - , tr: 'Konuş' }, 'Target Top': { cs: 'Horní cíl' @@ -13878,117 +12474,85 @@ function init() { , nl: 'Hoog tijdelijk doel' , ro: 'Țintă superioară' , it: 'Limite superiore' - ,zh_cn: '目标高值' , sv: 'Högt målvärde' , bg: 'Горна граница' , pl: 'Górny limit' - , ru: 'верхняя граница цели' - , de: 'Oberes Ziel' - , tr: 'Hedef Üst' }, 'Target Bottom': { cs: 'Dolní cíl' , dk: 'Lavt mål' , fi: 'Tavoite ala' , nl: 'Laag tijdelijk doel' - ,zh_cn: '目标低值' , ro: 'Țintă inferioară' , it: 'Limite inferiore' , sv: 'Lågt målvärde' , bg: 'Долна граница' , pl: 'Dolny limit' - , ru: 'нижняя граница цели' - , de: 'Unteres Ziel' - , tr: 'Hedef Alt' }, 'Canceled': { cs: 'Zrušený' , dk: 'Afbrudt' , fi: 'Peruutettu' , nl: 'Geannuleerd' - ,zh_cn: '被取消了' , ro: 'Anulat' , it: 'Cancellato' , sv: 'Avbruten' , bg: 'Отказан' , pl: 'Anulowane' - , ru: 'отменено' - , de: 'Abgebrochen' - , tr: 'İptal edildi' }, 'Meter BG': { cs: 'Hodnota z glukoměru' , dk: 'Blodsukkermåler BS' , fi: 'Mittarin VS' , nl: 'Bloedglucosemeter waarde' - ,zh_cn: '指血血糖值' , ro: 'Glicemie din glucometru' , it: 'Glicemia Capillare' , sv: 'Blodsockermätare BG' , bg: 'Измерена КЗ' , pl: 'Glikemia z krwi' - , ru: 'СК по глюкометру' - , de: 'Wert Blutzuckermessgerät' - , tr: 'Glikometre KŞ' }, 'predicted': { cs: 'přepověď' , dk: 'forudset' , fi: 'ennuste' , nl: 'verwachting' - ,zh_cn: '预测' , ro: 'estimat' , it: 'predetto' , sv: 'prognos' ,bg: 'прогнозна' , pl: 'prognoza' - , ru: 'прогноз' - , de: 'vorhergesagt' - , tr: 'tahmin' }, 'future': { cs: 'budoucnost' , dk: 'fremtidige' , fi: 'tulevaisuudessa' , nl: 'toekomstig' - ,zh_cn: '将来' , ro: 'viitor' , it: 'futuro' , sv: 'framtida' , bg: 'бъдеще' , pl: 'przyszłość' - , ru: 'будущее' - , de: 'Zukunft' - , tr: 'gelecek' }, 'ago': { cs: 'zpět' , dk: 'siden' , fi: 'sitten' , nl: 'geleden' - ,zh_cn: '之前' , ro: 'în trecut' , sv: 'förfluten' , bg: 'преди' , pl: 'temu' - , ru: 'назад' - , de: 'vor' - , tr: 'önce' }, 'Last data received': { cs: 'Poslední data přiajata' , dk: 'Sidste data modtaget' , fi: 'Tietoa vastaanotettu viimeksi' , nl: 'Laatste gegevens ontvangen' - ,zh_cn: '上次收到数据' , ro: 'Ultimele date primite' , it: 'Ultimo dato ricevuto' , sv: 'Data senast mottagen' , bg: 'Последни данни преди' , pl: 'Ostatnie otrzymane dane' - , ru: 'недавние данные получены' - , de: 'Zuletzt Daten empfangen' - , tr: 'Son veri alındı' }, 'Clock View': { cs: 'Hodiny' @@ -13997,15 +12561,13 @@ function init() { ,es: 'Vista del reloj' ,fr: 'Vue Horloge' ,ro: 'Vedere tip ceas' - ,ru: 'вид циферблата' + ,ru: 'цифры крупно' ,it: 'Vista orologio' ,sv: 'Visa klocka' ,bg: 'Изглед часовник' ,nl: 'Klokweergave' - ,zh_cn: '时钟视图' ,de: 'Uhr-Anzeigen' , pl: 'Widok zegara' - ,tr: 'Saat Görünümü' } }; diff --git a/docs/plugins/alexa-plugin.md b/lib/plugins/alexa-plugin.md similarity index 90% rename from docs/plugins/alexa-plugin.md rename to lib/plugins/alexa-plugin.md index a5dcb886e9c..ab2c897c66e 100644 --- a/docs/plugins/alexa-plugin.md +++ b/lib/plugins/alexa-plugin.md @@ -1,24 +1,3 @@ - - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [Nightscout Alexa Plugin](#nightscout-alexa-plugin) - - [Overview](#overview) - - [Activate the Nightscout Alexa Plugin](#activate-the-nightscout-alexa-plugin) - - [Create Your Alexa Skill](#create-your-alexa-skill) - - [Get an Amazon Developer account](#get-an-amazon-developer-account) - - [Create a new Alexa skill](#create-a-new-alexa-skill) - - [Define the interaction model](#define-the-interaction-model) - - [Point your skill at your site](#point-your-skill-at-your-site) - - [Test your skill out with the test tool](#test-your-skill-out-with-the-test-tool) - - [What questions can you ask it?](#what-questions-can-you-ask-it) - - [Activate the skill on your Echo or other device](#activate-the-skill-on-your-echo-or-other-device) - - [Adding Alexa support to a plugin](#adding-alexa-support-to-a-plugin) - - [Intent Handlers](#intent-handlers) - - [Rollup handlers](#rollup-handlers) - - - Nightscout Alexa Plugin ====================================== @@ -35,7 +14,6 @@ To add Alexa support for a plugin, [check this out](#adding-alexa-support-to-a-p 1. Your Nightscout site needs to be new enough that it supports the `alexa` plugin. It needs to be [version 0.9.1 (Grilled Cheese)](https://github.com/nightscout/cgm-remote-monitor/releases/tag/0.9.1) or later. See [updating my version](https://github.com/nightscout/cgm-remote-monitor#updating-my-version) if you need a newer version. 1. Add `alexa` to the list of plugins in your `ENABLE` setting. ([Environment variables](https://github.com/nightscout/cgm-remote-monitor#environment) are set in the configuration section for your monitor. Typically Azure, Heroku, etc.) -1. The Alexa plugin pulls its units preferences from your site's defaults. If you don't have a `DISPLAY_UNITS` entry, it will default to `mg/dl`. If you want it to use mmol/L, make sure you have a `DISPLAY_UNITS` line, and set it to `mmol` (*not* `mmol/l`). ## Create Your Alexa Skill diff --git a/lib/plugins/careportal.js b/lib/plugins/careportal.js index b3149f73555..b30a51532af 100644 --- a/lib/plugins/careportal.js +++ b/lib/plugins/careportal.js @@ -69,10 +69,6 @@ function init() { , name: 'CGM Sensor Insert' , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false } - , { val: 'Sensor Stop' - , name: 'CGM Sensor Stop' - , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false - } , { val: 'Pump Battery Change' , name: 'Pump Battery Change' , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false diff --git a/lib/plugins/maker-setup.md b/lib/plugins/maker-setup.md new file mode 100644 index 00000000000..a7d89084376 --- /dev/null +++ b/lib/plugins/maker-setup.md @@ -0,0 +1,88 @@ + + +**Table of Contents** + +- [Nightscout/IFTTT Maker](#nightscoutifttt-maker) + - [Overview](#overview) + - [Events](#events) + - [Configuration](#configuration) + - [Create a recipe](#create-a-recipe) + - [Start [creating a recipe](https://ifttt.com/myrecipes/personal/new)](#start-creating-a-recipehttpsiftttcommyrecipespersonalnew) + - [1. Choose a Trigger Channel](#1-choose-a-trigger-channel) + - [2. Choose a Trigger](#2-choose-a-trigger) + - [3. Complete Trigger Fields](#3-complete-trigger-fields) + - [4. That](#4-that) + - [5. Choose an Action](#5-choose-an-action) + - [6. Complete Action Fields](#6-complete-action-fields) + - [7. Create and Connect](#7-create-and-connect) + - [Result](#result) + + + +Nightscout/IFTTT Maker +====================================== + +## Overview + + In addition to the normal web based alarms, and pushover, there is also integration for [IFTTT Maker](https://ifttt.com/maker). + + With Maker you are able to integrate with all the other [IFTTT Channels](https://ifttt.com/channels). For example you can send a tweet when there is an alarm, change the color of hue light, send an email, send and sms, and so much more. + +## Events + + Plugins can create custom events, but all events sent to maker will be prefixed with `ns-`. The core events are: + + * `ns-event` - This event is sent to the maker service for all alarms and notifications. This is good catch all event for general logging. + * `ns-allclear` - This event is sent to the maker service when an alarm has been ack'd or when the server starts up without triggering any alarms. For example, you could use this event to turn a light to green. + * `ns-info` - Plugins that generate notifications at the info level will cause this event to also be triggered. It will be sent in addition to `ns-event`. + * `ns-warning` - Alarms at the warning level with cause this event to also be triggered. It will be sent in addition to `ns-event`. + * `ns-urgent` - Alarms at the urgent level with cause this event to also be triggered. It will be sent in addition to `ns-event`. + * `ns-warning-high` - Alarms at the warning level with cause this event to also be triggered. It will be sent in addition to `ns-event` and `ns-warning`. + * `ns-urgent-high` - Alarms at the urgent level with cause this event to also be triggered. It will be sent in addition to `ns-event` and `ns-urgent`. + * `ns-warning-low` - Alarms at the warning level with cause this event to also be triggered. It will be sent in addition to `ns-event` and `ns-warning`. + * `ns-urgent-low` - Alarms at the urgent level with cause this event to also be triggered. It will be sent in addition to `ns-event` and `ns-urgent`. + * `ns-info-treatmentnotify` - When a treatment is entered into the care portal this event is triggered. It will be sent in addition to `ns-event` and `ns-info`. + * `ns-warning-bwp` - When the BWP plugin generates a warning alarm. It will be sent in addition to `ns-event` and `ns-warning`. + * `ns-urgent-bwp` - When the BWP plugin generates an urgent alarm. It will be sent in addition to `ns-event` and `ns-urget`. + +## Configuration + + 1. Setup IFTTT account: [login](https://ifttt.com/login) or [create an account](https://ifttt.com/join) + 2. Find your secret key on the [maker page](https://ifttt.com/maker) + 3. Configure Nightscout by setting these environment variables: + * `ENABLE` - `maker` should be added to the list of plugin, for example: `ENABLE="maker"`. + * `MAKER_KEY` - Set this to your secret key that you located in step 2, for example: `MAKER_KEY="abcMyExampleabc123defjt1DeNSiftttmak-XQb69p"` + +## Create a recipe + +### Start [creating a recipe](https://ifttt.com/myrecipes/personal/new) +![screen shot 2015-06-29 at 10 58 48 pm](https://cloud.githubusercontent.com/assets/751143/8425240/bab51986-1eb8-11e5-88fb-5aed311896be.png) + +### 1. Choose a Trigger Channel + ![screen shot 2015-06-29 at 10 59 01 pm](https://cloud.githubusercontent.com/assets/751143/8425243/c007ace6-1eb8-11e5-96d1-b13f9c3d071f.png) + +### 2. Choose a Trigger + ![screen shot 2015-06-29 at 10 59 18 pm](https://cloud.githubusercontent.com/assets/751143/8425246/c77c5a4e-1eb8-11e5-9084-32ae40518ee0.png) + +### 3. Complete Trigger Fields + ![screen shot 2015-06-29 at 10 59 33 pm](https://cloud.githubusercontent.com/assets/751143/8425249/ced7b450-1eb8-11e5-95a3-730f6b9b2925.png) + +### 4. That + ![screen shot 2015-06-29 at 10 59 46 pm](https://cloud.githubusercontent.com/assets/751143/8425251/d46e1dc8-1eb8-11e5-91be-8dc731e308b2.png) + +### 5. Choose an Action + ![screen shot 2015-06-29 at 11 00 12 pm](https://cloud.githubusercontent.com/assets/751143/8425254/de634844-1eb8-11e5-8f09-cd43c41ccf3f.png) + +### 6. Complete Action Fields + **Example:** `Nightscout: {{Value1}} {{Value2}} {{Value3}}` + + ![screen shot 2015-06-29 at 11 02 14 pm](https://cloud.githubusercontent.com/assets/751143/8425267/f2da6dd4-1eb8-11e5-8e4d-cad2590d111f.png) + ![screen shot 2015-06-29 at 11 02 21 pm](https://cloud.githubusercontent.com/assets/751143/8425272/f83ceb62-1eb8-11e5-8ea2-afd4dcbd391f.png) + +### 7. Create and Connect + ![screen shot 2015-06-29 at 11 02 43 pm](https://cloud.githubusercontent.com/assets/751143/8425277/fe52f618-1eb8-11e5-8d7f-e0b34eebe29a.png) + +### Result + ![cinpiqkumaa33u7](https://cloud.githubusercontent.com/assets/751143/8425925/e7d08d2c-1ebf-11e5-853c-cdc5381c4186.png) + + diff --git a/lib/plugins/rawbg.js b/lib/plugins/rawbg.js index f19e669f63b..a3853f88e11 100644 --- a/lib/plugins/rawbg.js +++ b/lib/plugins/rawbg.js @@ -13,12 +13,6 @@ function init (ctx) { , pillFlip: true }; - rawbg.getPrefs = function getPrefs (sbx) { - return { - display: (sbx && sbx.extendedSettings.display) ? sbx.extendedSettings.display : 'unsmoothed' - }; - }; - rawbg.setProperties = function setProperties (sbx) { sbx.offerProperty('rawbg', function setRawBG ( ) { var result = { }; @@ -55,18 +49,14 @@ function init (ctx) { sbx.pluginBase.updatePillText(rawbg, options); }; - rawbg.calc = function calc(sgv, cal, sbx) { + rawbg.calc = function calc(sgv, cal) { var raw = 0; var cleaned = cleanValues(sgv, cal); - var prefs = rawbg.getPrefs(sbx); - if (cleaned.slope === 0 || cleaned.unfiltered === 0 || cleaned.scale === 0) { raw = 0; - } else if (cleaned.filtered === 0 || sgv.mgdl < 40 || prefs.display === 'unfiltered') { + } else if (cleaned.filtered === 0 || sgv.mgdl < 40) { raw = cleaned.scale * (cleaned.unfiltered - cleaned.intercept) / cleaned.slope; - } else if (prefs.display === 'filtered') { - raw = cleaned.scale * (cleaned.filtered - cleaned.intercept) / cleaned.slope; } else { var ratio = cleaned.scale * (cleaned.filtered - cleaned.intercept) / cleaned.slope / sgv.mgdl; raw = cleaned.scale * (cleaned.unfiltered - cleaned.intercept) / cleaned.slope / ratio; diff --git a/lib/plugins/xdrip-js.js b/lib/plugins/xdrip-js.js index d66f112cfcf..677d2b42674 100644 --- a/lib/plugins/xdrip-js.js +++ b/lib/plugins/xdrip-js.js @@ -172,7 +172,7 @@ function init(ctx) { result.level = levels.WARN; } - if (sensorInfo.xdripjs.voltageb && (sensorInfo.xdripjs.voltageb < (prefs.warnBatV - 10))) { + if (sensorInfo.xdripjs.voltageb && (sensorInfo.xdripjs.voltageb < prefs.warnBatV)) { sendNotification = true; message = 'CGM Battery B Low Voltage: ' + sensorInfo.xdripjs.voltageb; title = 'CGM Battery Low'; diff --git a/lib/report_plugins/daytoday.js b/lib/report_plugins/daytoday.js index b071706899b..1d6b6f84f40 100644 --- a/lib/report_plugins/daytoday.js +++ b/lib/report_plugins/daytoday.js @@ -31,7 +31,6 @@ daytoday.html = function html(client) { + ''+translate('Raw')+'' + ''+translate('IOB')+'' + ''+translate('COB')+'' - + ''+translate('Predictions')+'' + ''+translate('OpenAPS')+'' + ''+translate('Insulin distribution')+'' + ' '+translate('Size') @@ -40,7 +39,6 @@ daytoday.html = function html(client) { + ' ' + ' ' + ' ' - + ' ' + '' + '
' + translate('Scale') + ': ' @@ -48,19 +46,6 @@ daytoday.html = function html(client) { + translate('Linear') + '' + translate('Logarithmic') - + '' + '
' + '
' + '
' @@ -307,115 +292,6 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options) return sel; } - // PREDICTIONS START - // - function preparePredictedData() { - - var treatmentsTimestamps = []; // Only timestamps for (carbs and bolus insulin) treatments will be captured in this array - treatmentsTimestamps.push(dataRange[0]); // Create a fake timestamp at midnight so we can show predictions during night - for (var i in data.treatments) { - var treatment = data.treatments[i]; - if (undefined != treatment.carbs && null != treatment.carbs && treatment.carbs > 0) { - if (treatment.timestamp) - treatmentsTimestamps.push(treatment.timestamp); - else if (treatment.created_at) - treatmentsTimestamps.push(treatment.created_at); - } - if (undefined != treatment.insulin && null != treatment.insulin && treatment.insulin > 0) { - if (treatment.timestamp) - treatmentsTimestamps.push(treatment.timestamp); - else if (treatment.created_at) - treatmentsTimestamps.push(treatment.created_at); - } - } - - var predictions = []; - if (data && data.devicestatus) { - for (var i = data.devicestatus.length - 1; i >= 0; i--) { - if (data.devicestatus[i].loop && data.devicestatus[i].loop.predicted) { - predictions.push(data.devicestatus[i].loop.predicted); - } else if (data.devicestatus[i].openaps && data.devicestatus[i].openaps.suggested && data.devicestatus[i].openaps.suggested.predBGs) { - var entry = {}; - entry.startDate = data.devicestatus[i].openaps.suggested.timestamp; - // For OpenAPS/AndroidAPS we fall back from COB if present, to UAM, then IOB - if (data.devicestatus[i].openaps.suggested.predBGs.COB) { - entry.values = data.devicestatus[i].openaps.suggested.predBGs.COB; - } else if (data.devicestatus[i].openaps.suggested.predBGs.UAM) { - entry.values = data.devicestatus[i].openaps.suggested.predBGs.UAM; - } else entry.values = data.devicestatus[i].openaps.suggested.predBGs.IOB; - predictions.push(entry); - } - } - } - - var p = []; - if (predictions.length > 0 && treatmentsTimestamps.length > 0) { - - // Iterate over all treatments, find the predictions for each and add them to the predicted array p - for (var treatmentsIndex = 0; treatmentsIndex < treatmentsTimestamps.length; treatmentsIndex++) { - var timestamp = treatmentsTimestamps[treatmentsIndex]; - var predictedIndex = findPredicted(predictions, timestamp, predictedOffset); // Find predictions offset before or after timestamp - - if (predictedIndex != null) { - var entry = predictions[predictedIndex]; // Start entry - var d = moment(entry.startDate); - var end = moment().endOf('day'); - if (options.predictedTruncate) { - if (predictedOffset >= 0) { - // If we are looking forward we want to stop at the next treatment - if (treatmentsIndex < treatmentsTimestamps.length - 1) { - end = moment(treatmentsTimestamps[treatmentsIndex + 1]); - } - } else { - // If we are looking back, then we want to stop at "this" treatment - end = moment(treatmentsTimestamps[treatmentsIndex]); - } - } - for (var entryIndex in entry.values) { - if (!d.isAfter(end)) { - var value = {}; - value.sgv = client.utils.scaleMgdl(entry.values[entryIndex]); - value.date = d.toDate(); - value.color = 'purple'; - p.push(value); - d.add(5, 'minutes'); - } - } - } - } - } - return p; - } - - /* Find the earliest new predicted instance that has a timestamp equal to or larger than timestamp */ - /* (so if we have bolused or eaten we want to find the prediction that Loop has estimated just after that) */ - /* Returns the index into the predictions array that is the predicted we are looking for */ - function findPredicted(predictions, timestamp, offset) { - var ts = moment(timestamp).add(offset, 'minutes'); - var predicted = null; - if (offset && offset < 0) { // If offset is negative, start searching from first prediction going forward - for (var i = 0; i < predictions.length; i++) { - if (predictions[i] && predictions[i].startDate && moment(predictions[i].startDate) <= ts) { - predicted = i; - } - } - } else { // If offset is positive or zero, start searching from last prediction going backward - for (var i = predictions.length - 1; i > 0; i--) { - if (predictions[i] && predictions[i].startDate && moment(predictions[i].startDate) >= ts) { - predicted = i; - } - } - } - return predicted; - } - // - // PREDICTIONS ENDS - - - // bind up the context chart data to an array of circles - var contextData = (options.predicted ? data.sgv.concat(preparePredictedData()) : data.sgv); - var contextCircles = context.selectAll('circle').data(contextData); - // if new circle then just display prepareContextCircles(contextCircles.enter().append('circle')); @@ -1023,9 +899,6 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options) }); function appendProfileSwitch(context, treatment) { - - if (!treatment.cutting && !treatment.profile) { return; } - var sign = treatment.first ? '▲▲▲' : '▬▬▬'; var text; if (treatment.cutting) { diff --git a/lib/report_plugins/glucosedistribution.js b/lib/report_plugins/glucosedistribution.js index e16ad104d77..ad08c3084ff 100644 --- a/lib/report_plugins/glucosedistribution.js +++ b/lib/report_plugins/glucosedistribution.js @@ -32,13 +32,11 @@ glucosedistribution.html = function html(client) { '
' + '* ' + translate('This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:') + 'Nathan, David M., et al. "Translating the A1C assay into estimated average glucose values." Diabetes care 31.8 (2008): 1473-1478.' + '

' + - translate('Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.') + '

' + + translate('Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.') + '

' + translate('Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.')+ '

' + translate('Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.')+ '

' + translate('Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.')+ '

' + - translate('GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.')+ + translate('GVI and PGS are measures developed by Dexcom, detailed here.')+ '


' + translate('Filter by hours') + ':' + '
' + diff --git a/lib/report_plugins/index.js b/lib/report_plugins/index.js index 94bc282395f..12cd024bdd2 100644 --- a/lib/report_plugins/index.js +++ b/lib/report_plugins/index.js @@ -11,7 +11,6 @@ function init() { } , allPlugins = [ require('./daytoday')() - , require('./weektoweek')() , require('./dailystats')() , require('./glucosedistribution')() , require('./hourlystats')() @@ -20,7 +19,6 @@ function init() { , require('./calibrations')() , require('./treatments')() , require('./profiles')() - , require('./loopalyzer')() ]; consts.scaleYFromSettings = function scaleYFromSettings (client) { diff --git a/lib/report_plugins/loopalyzer.js b/lib/report_plugins/loopalyzer.js deleted file mode 100644 index 8eb96e68102..00000000000 --- a/lib/report_plugins/loopalyzer.js +++ /dev/null @@ -1,1267 +0,0 @@ -'use strict'; - -//var _ = require('lodash'); -var moment = window.moment; -//var times = require('../times'); -//var d3 = (global && global.d3) || require('d3'); - -var loopalyzer = { - name: 'loopalyzer' - , label: 'Loopalyzer' - , pluginType: 'report' -}; - -function init() { - return loopalyzer; -} - -module.exports = init; - -var laDebug = false; // If we should print console.logs -var laVersion = '2019-02-02 v6'; -var risingInterpolationGap = 6; // How large a gap in COB/IOB graph is allowed to be to be interpolated if end value is larger than start -var fallingInterpolationGap = 24; // And if less than start -var interpolationRatio = 1.25; // But do allow rising interpolation if gap larger than interpolationGap and end value is less than 10% larger than start - -loopalyzer.html = function html(client) { - var translate = client.translate; - var ret = ''; - ret += '

Loopalyzer  

'; - ret += '' + translate('The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.'); - ret += '

' + translate('Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time. '); - ret += '
' + translate('In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.'); - ret += '

' + translate('Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.'); - ret += '

' + translate('Note that time shift is available only when viewing multiple days.'); - ret += '

'; - ret += translate('To see this report, press SHOW while in this view'); - ret += '
'; - ret += ''; - ret += '';/* loopalyzer-button */ - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - ret += '
'; - return ret; -}; - -loopalyzer.css = -'#loopalyzer-charts, #loopalyzer-profiles { padding: 20px; } ' -+ '#loopalyzer-basal, #loopalyzer-bg, #loopalyzer-tempbasal, #loopalyzer-iob, #loopalyzer-cob, #loopalyzer-profiles {' -+ ' width: 100%;' -+ ' height: 100%;' -+ '}' -+ '#loopalyzer-profiles-table table { margin: 0 10px; border-collapse: collapse; border: 0px; }' -+ '#loopalyzer-profiles-table td { vertical-align: top; }' -+ '#loopalyzer-profiles-table td table { margin: 0 10px; border-collapse: collapse; border: 0px; }' -+ '#loopalyzer-profiles-table td caption { text-align: left; font-weight: bold; }' -+ '#loopalyzer-profiles-table td th { background-color: #4CAF50; color: white; }' -+ '#loopalyzer-profiles-table td td { text-align: right; vertical-align: top; padding: 0 1px; }' -+ '#loopalyzer-profiles-table td td td { padding: 1px 8px; }' -; - -loopalyzer.prepareHtml = function loopalyzerPrepareHtml() { -// $('#loopalyzer-charts').append($('
')); -}; - -// loopalyzer.ss = require('simple-statistics'); - -// -// Functions to pull data from datastorage and prepare in bins -// -loopalyzer.getSGVs = function(datastorage, daysToShow) { - var data = datastorage.allstatsrecords; - var bins = loopalyzer.getEmptyBins(); - - // Loop thru the days to show, for each day find the matching SGVs and insert into the bins entry array - daysToShow.forEach(function(day) { - var entries = []; // Array with all SGVs for this day, we'll fill this and then insert into the bins later - for (var i=0; i<288; i++) entries.push(NaN); // Fill the array with NaNs so we have something in case we don't find an SGV - var fromDate = moment(day); - var toDate = moment(day); - fromDate.set({'hours':0, 'minutes':0, 'seconds':0, 'milliseconds':0}); - toDate.set({'hours':0, 'minutes':5, 'seconds':0, 'milliseconds':0}); // toDate is 5 mins ahead - for (var i=0; i<288; i++) { - var found = false; - data.some(function(record) { - var recDate = moment(record.displayTime); - if (!found && recDate.isAfter(fromDate) && recDate.isBefore(toDate)) { - entries[i]=record.sgv; - found = true; - } - return found; // Breaks .some loop if found is true - }) - fromDate.add(5, 'minutes'); - toDate.add(5, 'minutes'); - } - loopalyzer.addArrayToBins(bins, entries); - }); - return bins; -} - -loopalyzer.getBasals = function(datastorage, daysToShow, profile) { - var bins = loopalyzer.getEmptyBins(); - - daysToShow.forEach(function(day) { - var dayStart = moment(day).startOf('day'); - var dayEnd = moment(day).endOf('day'); - var basals = []; - for (var i=0; i<288; i++) basals.push(NaN); // Clear the basals by filling with NaNs - - var index = 0; - for (var dt=dayStart; dt < dayEnd; dt.add(5, 'minutes')) { - var basal = profile.getTempBasal(dt.toDate()); - if (basal) - basals[index++] = basal.basal; - } - if (laDebug) console.log('getBasals ' + day, basals); - loopalyzer.addArrayToBins(bins, basals); - }); - return bins; -} - -loopalyzer.getTempBasalDeltas = function(datastorage, daysToShow, profile) { - var bins = loopalyzer.getEmptyBins(); - - daysToShow.forEach(function(day) { - var dayStart = moment(day).startOf('day'); - var dayEnd = moment(day).endOf('day'); - var temps = []; - for (var i=0; i<288; i++) temps.push(NaN); // Clear the basals by filling with NaNs - - var index = 0; - for (var dt=dayStart; dt < dayEnd; dt.add(5, 'minutes')) { - var basal = profile.getTempBasal(dt.toDate()); - if (basal) - temps[index++] = basal.tempbasal - basal.basal; - } - if (laDebug) console.log('getTempBasalDeltas ' + day, temps); - loopalyzer.addArrayToBins(bins, temps); - }); - return bins; -} - -loopalyzer.getIOBs = function(datastorage, daysToShow, profile, client, treatments) { - var iobStatusAvailable = client.plugins('iob').isDeviceStatusAvailable(datastorage.devicestatus); - if (laDebug) console.log('getIOBs iobStatusAvailable=' + iobStatusAvailable); - - var bins = loopalyzer.getEmptyBins(); - - daysToShow.forEach(function(day) { - var dayStart = moment(day).startOf('day'); - var dayEnd = moment(day).endOf('day'); - var iobs = []; - if (iobStatusAvailable) { - // var dayStartMills = dayStart.milliseconds(); - for (var i=0; i<288; i++) iobs.push(NaN); // Clear the IOBs by filling with NaNs - var iobArray = client.plugins('iob').IOBDeviceStatusesInTimeRange(datastorage.devicestatus, dayStart.valueOf(), dayEnd.valueOf()); - if (laDebug) console.log('getIOBs iobArray', iobArray); - iobArray.forEach(function(entry){ - var index = Math.floor(moment(entry.mills).diff(dayStart,'minutes') / 5); - iobs[index] = entry.iob; - }); - - if (daysToShow.length===1) loopalyzer.fillNanWithTreatments(iobs, treatments); - - // Loop thru these entries and where no IOB has been found, interpolate between nearby to get a continuous array - var startIndex = 0, stopIndex = 0; - while (startIndex < iobs.length && isNaN(iobs[startIndex])) { - startIndex++; // Advance start to the first real number - } - if (startIndex < iobs.length) { - stopIndex = startIndex+1; - while (stopIndex=0 && isNaN(array[start])) {}; - while (stop++ interpolationGap || (gap < interpolationGap && array[start]= interpolationGap || array[start]==0)) ) { - var interpolate = (isNaN(array[start]) || isNaN(array[stop]) ? true : loopalyzer.canInterpolate(array,start,stop)); - if (!interpolate) { - array[index] = treatment.amount; - } - } - }) -} - -/* Returns true if we can interpolate between this start and end */ -loopalyzer.canInterpolate = function(array, start, stop) { - var interpolate = false; - if (array[stop] <= array[start]*interpolationRatio) { - // Falling - if (stop-start0}).forEach(function(treatment){ - if (moment(treatment.created_at).isBetween(startDate, endDate)) { - treatments.push({date:treatment.created_at, amount:treatment.carbs}); - } - }) - if (laDebug) console.log('Carb treatments', treatments); - return treatments; -} - -/* Returns the insulin treatments array as [date, amount] */ -loopalyzer.getInsulinTreatments = function(datastorage, daysToShow) { - var treatments = []; // Holds the treatments [date, amount] - var startDate = moment(daysToShow[0]); - var endDate = moment(daysToShow[daysToShow.length-1]).add(1, 'days'); - - datastorage.treatments.filter(function(treatment){return treatment.insulin && treatment.insulin >0}).forEach(function(treatment){ - if (moment(treatment.created_at).isBetween(startDate, endDate)) { - treatments.push({date:treatment.created_at, amount:treatment.insulin}); - } - }) - if (laDebug) console.log('Insulin treatments', treatments); - return treatments; -} - -// PREDICTIONS START -// -loopalyzer.getAllTreatmentTimestampsForADay = function(datastorage, day) { - var timestamps = []; - var dayStart = moment(day).startOf('day'); - var carbTreatments = loopalyzer.getCarbTreatments(datastorage,[day]); - var insulinTreatments = loopalyzer.getInsulinTreatments(datastorage,[day]); - carbTreatments.forEach(function(entry) { timestamps.push(entry.date)}); - insulinTreatments.forEach(function(entry) { timestamps.push(entry.date)}); - timestamps.sort(function(a,b) { return (a= 0; i--) { - if (datastorage.devicestatus[i].loop && datastorage.devicestatus[i].loop.predicted) { - var predicted = datastorage.devicestatus[i].loop.predicted; - if (moment(predicted.startDate).isSame(dayStart,'day')) - predictions.push(datastorage.devicestatus[i].loop.predicted); - } else if (datastorage.devicestatus[i].openaps && datastorage.devicestatus[i].openaps.suggested && datastorage.devicestatus[i].openaps.suggested.predBGs) { - var entry = {}; - entry.startDate = datastorage.devicestatus[i].openaps.suggested.timestamp; - // For OpenAPS/AndroidAPS we fall back from COB if present, to UAM, then IOB - if (datastorage.devicestatus[i].openaps.suggested.predBGs.COB) { - entry.values = datastorage.devicestatus[i].openaps.suggested.predBGs.COB; - } else if (datastorage.devicestatus[i].openaps.suggested.predBGs.UAM) { - entry.values = datastorage.devicestatus[i].openaps.suggested.predBGs.UAM; - } else entry.values = datastorage.devicestatus[i].openaps.suggested.predBGs.IOB; - predictions.push(entry); - } - } - // Remove duplicates before we're done - var p = []; - predictions.forEach(function(prediction) { - if (p.length === 0 || prediction.startDate !== p[p.length-1].startDate) - p.push(prediction); - }) - return p; -} - -/* Find the earliest new predicted instance that has a timestamp equal to or larger than timestamp */ -/* (so if we have bolused or eaten we want to find the prediction that Loop has estimated just after that) */ -/* Returns the index into the predictions array that is the predicted we are looking for */ -loopalyzer.findPredicted = function(predictions, timestamp, offset) { - var ts = moment(timestamp).add(offset, 'minutes'); - var predicted = null; - if (offset && offset < 0) { // If offset is negative, start searching from first prediction going forward - for (var i = 0; i < predictions.length; i++) { - if (predictions[i] && predictions[i].startDate && moment(predictions[i].startDate) <= ts) { - predicted = i; - } - } - } else { // If offset is positive or zero, start searching from last prediction going backward - for (var i = predictions.length - 1; i > 0; i--) { - if (predictions[i] && predictions[i].startDate && moment(predictions[i].startDate) >= ts) { - predicted = i; - } - } - } - return predicted; -} - - -loopalyzer.getPredictions = function(datastorage, daysToShow, client) { - - if (!datastorage.devicestatus) - return []; - - var predictedOffset = 0; - var truncatePredictions = true; - - // Fill the bins array with the timestamp, one per 5 minutes - var bins = []; - var date = moment(); - date.set({'hours':0, 'minutes':0, 'seconds':0, 'milliseconds':0}); - for (var i=0; i<288; i++) { - bins.push([date.toDate(),[]]); - date.add(5, 'minutes'); - } - - daysToShow.forEach(function(day) { - var p = []; // Array with all prediction SGVs for this day, we'll fill this and then insert into the bins later - for (var i=0; i<288; i++) p.push(NaN); - var treatmentTimestamps = loopalyzer.getAllTreatmentTimestampsForADay(datastorage, day); - var predictions = loopalyzer.getAllPredictionsForADay(datastorage, day); - - if (predictions.length > 0 && treatmentTimestamps.length > 0) { - - // Iterate over all treatments, find the predictions for each and add them to the entries array p, aligned on timestamp - for (var treatmentsIndex = 0; treatmentsIndex < treatmentTimestamps.length; treatmentsIndex++) { - var timestamp = treatmentTimestamps[treatmentsIndex]; - var predictedIndex = loopalyzer.findPredicted(predictions, timestamp, predictedOffset); // Find predictions offset before or after timestamp - - if (predictedIndex != null) { - var entry = predictions[predictedIndex]; // Start entry - var d = moment(entry.startDate); - var end = moment(day).endOf('day'); // Default to stop and end of the day - if (truncatePredictions) { - if (predictedOffset >= 0) { - // But if we are looking forward we want to stop at the next treatment - if (treatmentsIndex < treatmentTimestamps.length - 1) { - end = moment(treatmentTimestamps[treatmentsIndex + 1]); - } - } else { - // And if we are looking backward then we want to stop at "this" treatment - end = moment(treatmentTimestamps[treatmentsIndex]); - } - } - for (var entryIndex in entry.values) { - if (!d.isAfter(end)) { - var dayStart = moment(d).startOf('day'); - var minutesAfterMidnight = moment(d).diff(dayStart, 'minutes'); - var index = Math.floor(minutesAfterMidnight/5); - p[index] = client.utils.scaleMgdl(entry.values[entryIndex]); - d.add(5, 'minutes'); - } - } - } - } - } - for (var i=0; i<288; i++) { - bins[i][1].push(p[i]); - } - }) - return bins; - } - // - // PREDICTIONS ENDS - - -// VARIOUS UTILITY FUNCTIONS // - -/* Create an empty bins array with date stamps for today */ -loopalyzer.getEmptyBins = function() { - var bins=[]; - var todayStart = moment().startOf('day'); - var todayEnd = moment().endOf('day'); - for (var dt=todayStart; dt < todayEnd; dt.add(5, 'minutes')) { - bins.push([dt.toDate(), []]); - } - return bins; -} - -/* Takes an array of 288 values and adds to the bins */ -loopalyzer.addArrayToBins = function(bins, values) { - if (bins && bins.length === 288 && values && values.length === 288) { - values.forEach(function(value,index) { - bins[index][1].push(value); - }); - } else - console.log('addArrayToBins - array must have 288 items', values); -} - -/* Fill all NaNs in an array by interpolating between adjacent values */ -loopalyzer.interpolateArray = function(values, allowNegative) { - var startIndex=0, stopIndex=0, k=0, m=0; - - while (isNaN(values[startIndex])) { - startIndex++; // Advance start to the first real number - } - stopIndex = startIndex+1; - while (stopIndexmax) max = xBins[i][1]; - } - return max; -} - -/* Compute avg value in bins */ -loopalyzer.avg = function(xBins) { - var out=[]; - xBins.forEach(function(entry){ - var sum = 0; - var count = 0; - entry[1].forEach(function(value){ - if (value && value != NaN) { - sum += value; - count++; - } - }) - var avg = sum / count; - out.push([entry[0], avg]); - }) - return out; -} - -// Timeshifts a bins array with subarrays for multiple days -loopalyzer.timeShiftBins = function(bins, timeShift) { - if (bins && bins.length>0) { - timeShift.forEach(function(minutes, dayIndex){ - if (minutes !==0) { - var tempBin = []; - bins.forEach(function(){ - tempBin.push(NaN); // Fill tempBin with NaNs - }) - var minutesBy5 = Math.floor(minutes/5); - if (minutesBy5>0) { - var count = 288-minutesBy5; - // If minutes>0 it means we should shift forward in time - // Example: Shift by 15 mins = 3 buckets - // bin : 0 1 2 3 4 5 6 7 8 9 10 - // tempBin: NaN NaN NaN 0 1 2 3 4 5 6 7 - for (var i=0; i0) { - daysToShow.forEach(function(day, dayIndex){ - var minutesToAdd = timeShift[dayIndex]; - var date = moment(day); - bin.forEach(function(entry, entryIndex){ - var entryDate = moment(entry.date); - if (entryDate.isSame(date, 'day')) { - entryDate.add(minutesToAdd, 'minutes'); - bin[entryIndex].date=entryDate.toDate(); - } - }) - }) - } -} - -/* Returns true if the profile values in a is identical to values in b, false otherwise */ -loopalyzer.isSameProfileValues = function(a,b) { - // Because the order of the keys are random when stringifying we do our own custom stringify ourselves - var aString = ''; - var bString = ''; - if (a.basal) { - aString += 'basal:'; - a.basal.forEach(function(entry) { - aString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - if (a.carbratio) { - aString += 'carbratio:'; - a.carbratio.forEach(function(entry) { - aString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - if (a.sens) { - aString += 'sens:'; - a.sens.forEach(function(entry) { - aString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - if (b.basal) { - bString += 'basal:'; - b.basal.forEach(function(entry) { - bString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - if (b.carbratio) { - bString += 'carbratio:'; - b.carbratio.forEach(function(entry) { - bString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - if (b.sens) { - bString += 'sens:'; - b.sens.forEach(function(entry) { - bString += 's' + entry.timeAsSeconds + 't' + entry.time + 'v' + entry.value; - }) - } - return (aString == bString); -} - -loopalyzer.renderProfilesTable = function (datastoreProfiles, daysToShow, client) { - - // Loop thru the daysToShow and get the timestamp of the first day displayed - var beginningOfFirstDay = null; - var endOfLastDay = null; - daysToShow.forEach(function (day) { - var dayStart = moment(day).startOf('day'); - var dayEnd = moment(day).endOf('day'); - if (!beginningOfFirstDay || dayStart < beginningOfFirstDay) - beginningOfFirstDay = dayStart; - if (!endOfLastDay || dayEnd > endOfLastDay) - endOfLastDay = dayEnd; - }); - - // Now some profile juggling... We want to display only the profiles relevant to the days we are showing. - // This includes the last profile created before the first display date, and the profiles created on the display dates. - // However we don't want to show duplicate profiles and we also don't want to show more than just a few if there are many. - - // First, extract the profiles that have a startDate less than the endOfLastDay as only these are relevant, and sort - // these on ascending startDate (create a clone array so we don't modify the Store array). And only save the profiles - // that have basal, carbratio, or sens. - var profilesArray1 = []; - datastoreProfiles.forEach(function (entry) { - var newEntry = {}; - newEntry.startDate = entry.startDate; - var store=entry.store; - if (store) { - for(var key in store){ - if (laDebug) console.log('profile ' + key); - if (store.hasOwnProperty(key)){ - var defaultProfile=store[key]; - newEntry.profileName=key; - if (defaultProfile.basal) newEntry.basal = defaultProfile.basal; - if (defaultProfile.carbratio) newEntry.carbratio = defaultProfile.carbratio; - if (defaultProfile.sens) newEntry.sens = defaultProfile.sens; - if ((newEntry.basal || newEntry.carbratio || newEntry.sens) && moment(entry.startDate).isBefore(endOfLastDay)) - profilesArray1.push(newEntry); - } - } - } - }) - profilesArray1.sort(function (a, b) { return (a.startDate > b.startDate ? 1 : -1) }); // Ascending - if (laDebug) { - profilesArray1.forEach(function (entry) { - console.log('profilesArray1 - ' + entry.startDate); - }) - } - if (laDebug) console.log('profilesArray1 has ' + profilesArray1.length + ' profiles'); - - // Second, the deduplication - remove all duplicates which have a later startDate but identical data - var profilesArray2 = []; - var profileToCompareWith = profilesArray1[0]; - profilesArray2.push(profileToCompareWith); // Push the first profile, which should always be included. - profilesArray1.forEach(function (entry) { - if (laDebug) { - console.log('Comparing ' + JSON.stringify(profileToCompareWith.startDate) + ' to ' + JSON.stringify(entry.startDate)); - console.log(profileToCompareWith, entry); - } - if (!loopalyzer.isSameProfileValues(profileToCompareWith, entry)) { - profilesArray2.push(entry); - profileToCompareWith = entry; - if (laDebug) - console.log('ADDING IT'); - } else { - // Do NOT push the entry to profilesArray2, and keep comparing with the same (olders unique) profile - if (laDebug) - console.log('SKIPPING IT'); - } - }) - if (laDebug) console.log('profilesArray2 has ' + profilesArray2.length + ' profiles'); - - // Sort the newest Profile first - profilesArray2.sort(function (a, b) { return (a.startDate > b.startDate ? 1 : -1) }); // Ascending - - // Third, find the latest profile with a startDate before beginningOfFirstDay - var latestProfile = profilesArray2[0]; // This is the oldest one - profilesArray2.forEach(function (entry) { - if (laDebug) - console.log(entry.startDate + ' isBefore ' + beginningOfFirstDay + ' = ' + moment(entry.startDate).isBefore(beginningOfFirstDay)); - if (moment(entry.startDate).isBefore(beginningOfFirstDay)) - latestProfile = entry; - }); - if (laDebug) console.log('latest profile is ' + latestProfile.startDate); - - // Now create a final array with the latest profile found above and add all - // the other profiles with a startDate between beginningOfFirstDay and endOfLastDay - var profiles = []; - profiles.push(latestProfile); // Add the latest one - profilesArray2.forEach(function (entry) { - if (laDebug) - console.log(entry.startDate + ' isAfter ' + beginningOfFirstDay + ' = ' + moment(entry.startDate).isAfter(beginningOfFirstDay)); - if (moment(entry.startDate).isAfter(beginningOfFirstDay)) - profiles.push(entry); // Add the profile if it's between beginning and end of show dates - }); - - // Now we have an array of all the profiles that are relevant for the days we are displaying. - if (laDebug) { - profiles.forEach(function (entry) { - console.log('profiles - ' + entry.startDate); - }) - } - if (laDebug) console.log('profiles has ' + profiles.length + ' profiles'); - - var translate = client.translate; - var tableHtml = ''; - - profiles.forEach(function (theProfile, index) { - - if (index < 3) { - tableHtml += ''; - - } else - if (index == 3) { - // Add ellipsis if too many profiles to display, but only one ellipsis even if there are more profiles - tableHtml += ''; - } - }); - - // Close the entire table - tableHtml += '
'; - tableHtml += ''; - tableHtml += ''; - tableHtml += ''; - - // Add Basal as a table in the first td - tableHtml += ''; - - // Add Carb Ratio as a table in the second td - tableHtml += ''; - - // Add Sensitivity as a table in the third td - tableHtml += ''; - - // Close theProfile table - tableHtml += '
' + theProfile.profileName + ' (' + new Date(theProfile.startDate).toLocaleString() + ')
' + translate('Basal') + '' + translate('Carb ratio') + '' + translate('Sensitivity') + '
'; - if (theProfile.basal) { - theProfile.basal.forEach(function (entry) { - tableHtml += '' - }); - } - tableHtml += '
' + entry.time + '' + parseFloat(entry.value).toFixed(3) + '
'; - if (theProfile.carbratio) { - theProfile.carbratio.forEach(function (entry) { - tableHtml += '' - }); - } - tableHtml += '
' + entry.time + '' + parseFloat(entry.value).toFixed(1) + '
'; - if (theProfile.sens) { - theProfile.sens.forEach(function (entry) { - tableHtml += '' - }); - } - tableHtml += '
' + entry.time + '' + parseFloat(entry.value).toFixed(1) + '
.....
'; - - // And add our HTML to the view - $("#loopalyzer-profiles").html(tableHtml); - -}; - -// Main method -loopalyzer.report = function(datastorage,sorteddaystoshow,options) { - if (laDebug) console.log('Loopalyzer ' + laVersion); - - // Copy the sorteddaystoshow into new array (clone) and re-sort ascending (so we don't mess with original array) - var daysToShow = []; - sorteddaystoshow.forEach(function(day){daysToShow.push(day)}); - daysToShow.sort(function(a,b) { return (a1) dateInfo += ' - ' + moment(daysToShow[daysToShow.length-1]).format('ddd MMM D'); // .split(',')[0]; - $("#loopalyzer-dateinfo").html(dateInfo); - - loopalyzer.prepareHtml(); - $("#loopalyzer-buttons").show(); - if (daysToShow.length==1) { - // Disable and gray out timeShift if only a single day - $("#rp_loopalyzertimeshift").prop('checked', false); - $("#rp_loopalyzertimeshift").attr("disabled", true); - $("#rp_loopalyzermincarbs").attr("disabled", true); - $("#rp_loopalyzert1").attr("disabled", true); - $("#rp_loopalyzert2").attr("disabled", true); - $("#rp_loopalyzertimeshiftinput").css('color', 'gray'); - } else { - // Enable and turn the timeShift black if multiple days - $("#rp_loopalyzertimeshift").removeAttr("disabled"); - $("#rp_loopalyzermincarbs").removeAttr("disabled"); - $("#rp_loopalyzert1").removeAttr("disabled"); - $("#rp_loopalyzert2").removeAttr("disabled"); - $("#rp_loopalyzertimeshiftinput").css('color', 'black'); - } - // Check if there is data in the profiles and render the profiles table if there is - if ($("#rp_loopalyzerprofiles").is(":checked") && (datastorage.profiles && datastorage.profiles.length > 0)) { - $("#loopalyzer-profiles-table").show(); - loopalyzer.renderProfilesTable(datastorage.profiles, daysToShow, client); - } else - $("#loopalyzer-profiles-table").hide(); - - // Pull all necessary treatment information - profile.updateTreatments(datastorage.profileSwitchTreatments, datastorage.tempbasalTreatments, datastorage.combobolusTreatments); - - var carbTreatments = loopalyzer.getCarbTreatments(datastorage,daysToShow); - var insulinTreatments = loopalyzer.getInsulinTreatments(datastorage,daysToShow); - var sgvBin = loopalyzer.getSGVs(datastorage,daysToShow); - var basalsBin = loopalyzer.getBasals(datastorage,daysToShow,profile); - var tempBasalsBin = loopalyzer.getTempBasalDeltas(datastorage,daysToShow,profile); - var iobBin = loopalyzer.getIOBs(datastorage,daysToShow, profile, client, insulinTreatments); - var cobBin = loopalyzer.getCOBs(datastorage,daysToShow, profile, client, carbTreatments); - var predictionsBin = []; - - if ($("#rp_loopalyzerpredictions").is(":checked")) { - predictionsBin = loopalyzer.getPredictions(datastorage,daysToShow,client); - } - - // Prepare an array with the minutes to timeShift each day (0 as default since timeShift is off by default) - var timeShifts = []; - var firstCarbs = []; - var timeShiftStartTime = null; // If timeShifting this is the average time the meals were eaten - var timeShiftStopTime = null; // and this is the start + DIA according to profile - var doTimeShift = false; - daysToShow.forEach(function(){ timeShifts.push(0); firstCarbs.push(NaN) }); - - // Check to see if we are doing timeShift or not - if ($("#rp_loopalyzertimeshift").is(":checked") && daysToShow.length>1) { - var mealMinCarbs = $("#rp_loopalyzermincarbs").val(); - var t1 = $("#rp_loopalyzert1").val(); - var t2 = $("#rp_loopalyzert2").val(); - - if (t2>t1) { - var h1 = t1.split(':')[0]; - var m1 = t1.split(':')[1]; - var h2 = t2.split(':')[0]; - var m2 = t2.split(':')[1]; - - var timeShiftBegin = moment(); - timeShiftBegin.set({'hours':h1, 'minutes':m1, 'seconds':0}); - - var timeShiftEnd = moment(); - timeShiftEnd.set({'hours':h2, 'minutes':m2, 'seconds':0}); - - //Loop through the carb treatments and find the first meal each day - daysToShow.forEach(function(day, dayIndex){ - var timeShiftBegin = moment(day); - var timeShiftEnd = moment(day); - timeShiftBegin.set({'hours':h1, 'minutes':m1, 'seconds':0}); - timeShiftEnd.set({'hours':h2, 'minutes':m2, 'seconds':0}); - - var found = false; - carbTreatments.forEach(function(entry){ - if (!found && entry.amount >= mealMinCarbs) { - var date = moment(entry.date); - if ( (date.isSame(timeShiftBegin,'minute') || date.isAfter(timeShiftBegin,'minute')) && - (date.isSame(timeShiftEnd,'minute') || date.isBefore(timeShiftEnd,'minute')) ) { - var startOfDay = moment(entry.date); - startOfDay.set({'hours':0, 'minutes':0, 'seconds':0}); - var minutesAfterMidnight = date.diff(startOfDay, 'minutes'); - firstCarbs[dayIndex]=minutesAfterMidnight; - found = true; - doTimeShift = true; - } - } - }) - }) - - // Calculate the average starting time, in minutes after midnight - var averageMinutesAfterMidnight = 0, sum = 0, count = 0; - firstCarbs.forEach(function(minutesAfterMidnight){ - if (minutesAfterMidnight) { // Avoid NaN - sum += minutesAfterMidnight; - count++; - } - }); - var averageMinutesAfterMidnight = Math.round(sum / count); - - var dia = profile.getDIA(); - if (!dia || dia <= 0) - dia=6; // Default to 6h if DIA not set in profile - timeShiftStartTime = moment(todayJSON); - timeShiftStartTime.minutes(averageMinutesAfterMidnight); - timeShiftStopTime = moment(todayJSON); - if (averageMinutesAfterMidnight + dia*60 < 24*60) - timeShiftStopTime.minutes(averageMinutesAfterMidnight + dia*60); // If not beyond midnight, stop at end of DIA - else - timeShiftStopTime.minutes(24*60-1); // If beyond midnight, stop at midnight - - // Compute the timeShift (+ / -) that we should add to each entry (sgv, iob, carbs, etc) for each day - firstCarbs.forEach(function(minutesAfterMidnight,index){ - if (minutesAfterMidnight) { // Avoid NaN - var delta = Math.round(averageMinutesAfterMidnight - minutesAfterMidnight); - timeShifts[index]=delta; - } - }); - - if (doTimeShift) { - loopalyzer.timeShiftBins(sgvBin, timeShifts); - loopalyzer.timeShiftBins(basalsBin, timeShifts); - loopalyzer.timeShiftBins(tempBasalsBin, timeShifts); - loopalyzer.timeShiftBins(iobBin, timeShifts); - loopalyzer.timeShiftBins(cobBin, timeShifts); - loopalyzer.timeShiftBins(predictionsBin, timeShifts); - loopalyzer.timeShiftSingleBin(carbTreatments, daysToShow, timeShifts); - loopalyzer.timeShiftSingleBin(insulinTreatments, daysToShow, timeShifts); - } - } else { - console.log('Loopalyzer - Timeshift end must be later than beginning.'); - } - } - - // After timeShift code block, get the average values - var sgvAvg = loopalyzer.avg(sgvBin); - var basalsAvg = loopalyzer.avg(basalsBin); - var tempBasalsAvg = loopalyzer.avg(tempBasalsBin); - var iobAvg = loopalyzer.avg(iobBin); - var cobAvg = loopalyzer.avg(cobBin); - var predictionsAvg = loopalyzer.avg(predictionsBin); - - var high = options.targetHigh; - var low = options.targetLow; - - // Set up the charts basics - function tickFormatter(val,axis) { - if (val <= axis.min) { return ''; } - if (val >= axis.max) { return ''; } - return val + ''; - } - - var tickColor = '#DDDDDD'; - var basalColor = '#33A0FF'; - var glucoseColor = '#33AA33'; - var predictionsColor = '#8E1578'; - var glucoseRangeColor = '#D6FFD6'; - var insulinColor = '#FF7000'; - var carbColor = '#23D820'; - var timeShiftBackgroundColor = "#F3F3F3"; - var barWidth = (24 * 60 * 60 * 1000 / 288); - var borderWidth = 1; - var labelWidth = 25; - var xaxisCfg = { - mode: 'time', - timezone: 'browser', - timeformat: '%H:%M', - tickColor: tickColor, - tickSize: [1, "hour"], - font: { size: 0 } - }; - - var hiddenAxis = { - position: "right", - show: true, - labelWidth: 10, - tickColor: "#FFFFFF", - font: { size: 0} - } - - // For drawing the carbs and insulin treatments - var markings = []; - var markingColor = "#000000"; - - - // Chart 1: Basal - markings = []; - if (doTimeShift) - markings.push( { xaxis: { from: timeShiftStartTime.toDate(), to: timeShiftStopTime.toDate()}, color: timeShiftBackgroundColor } ); - var chartBasalData = [{ - data: basalsAvg, - label: translate('Basal profile'), - id: 'basals', - color: basalColor, - points: { show: false }, - bars: { show: true, fill: true, barWidth: barWidth }, - yaxis: 1 - }]; - var chartBasalOptions = { - xaxis: xaxisCfg, - yaxes: [{ - tickColor: tickColor, - labelWidth: labelWidth, - tickFormatter: function(val,axis) { return tickFormatter(val,axis); } - }, - hiddenAxis], - grid: { - borderWidth: borderWidth, - markings: markings - } - }; - $.plot( '#loopalyzer-basal', chartBasalData, chartBasalOptions ); - - - // Chart 2: Blood glucose - markings = []; - if (doTimeShift) - markings.push( { xaxis: { from: timeShiftStartTime.toDate(), to: timeShiftStopTime.toDate()}, color: timeShiftBackgroundColor } ); - markings.push({ yaxis: { from: low, to: high }, color: glucoseRangeColor }); - - var chartBGData = [{ - label: translate('Blood glucose'), - data: sgvAvg, - id: 'glucose', - color: glucoseColor, - points: { show: false }, - lines: { show: true } - }]; - if (predictionsAvg && predictionsAvg.length>0) { - chartBGData.push({ - label: translate('Predictions'), - data: predictionsAvg, - id: 'predictions', - color: predictionsColor, - points: { show: true, fill: true, radius: 0.75, fillColor: predictionsColor }, - lines: { show: false } - }); - } - var chartBGOptions = { - xaxis: xaxisCfg, - yaxes: [{ - min: 0, - max: options.units === 'mmol' ? 20 : 400, - tickColor: tickColor, - labelWidth: labelWidth, - tickFormatter: function(val,axis) { return tickFormatter(val,axis); } - }, - hiddenAxis], - grid: { - borderWidth: borderWidth, - markings: markings - } - }; - $.plot( '#loopalyzer-bg', chartBGData, chartBGOptions ); - - - // Chart 3: Delta temp basals - markings = []; - if (doTimeShift) - markings.push( { xaxis: { from: timeShiftStartTime.toDate(), to: timeShiftStopTime.toDate()}, color: timeShiftBackgroundColor } ); - markings.push( { yaxis: { from: 0, to: 0 }, color: insulinColor, lineWidth: 2 }); - - var chartTempBasalData = [{ - data: tempBasalsAvg, - label: translate('Temp basal delta'), - id: 'tempBasals', - color: insulinColor, - points: { show: false }, - bars: { show: true, barWidth: barWidth } - }]; - var chartTempBasalOptions = { - xaxis: xaxisCfg, - yaxes: [{ - tickColor: tickColor, - labelWidth: labelWidth, - tickFormatter: function(val,axis) { return tickFormatter(val,axis); } - }, - hiddenAxis], - grid: { - borderWidth: borderWidth, - markings: markings - } - }; - $.plot( '#loopalyzer-tempbasal', chartTempBasalData, chartTempBasalOptions ); - - - // Chart 4: IOB - markings = []; - if (doTimeShift) - markings.push( { xaxis: { from: timeShiftStartTime.toDate(), to: timeShiftStopTime.toDate()}, color: timeShiftBackgroundColor } ); - insulinTreatments.forEach(function(treatment){ - var startDate = moment(treatment.date); - var endDate = moment(treatment.date); - startDate.set(todayJSON); - endDate.set(todayJSON); - endDate.add(5, 'minutes'); - markings.push( { xaxis: { from: startDate.toDate(), to: endDate.toDate()}, yaxis: { from: 0, to: treatment.amount }, color: markingColor } ); - }) - - var chartIOBData = [{ - data: iobAvg, - label: translate('IOB'), - id: 'iobs', - color: insulinColor, - points: { show: false }, - bars: { show: true, fill: true, barWidth: barWidth } - }]; - var chartIOBOptions = { - xaxis: xaxisCfg, - yaxes: [{ - tickColor: tickColor, - labelWidth: labelWidth, - tickFormatter: function(val,axis) { return tickFormatter(val,axis); } - }, - hiddenAxis], - grid: { - borderWidth: borderWidth, - markings: markings - } - }; - $.plot( '#loopalyzer-iob', chartIOBData, chartIOBOptions ); - - - // Chart 5: COB - markings = []; - if (doTimeShift) - markings.push( { xaxis: { from: timeShiftStartTime.toDate(), to: timeShiftStopTime.toDate()}, color: timeShiftBackgroundColor } ); - carbTreatments.forEach(function(treatment){ - var startDate = moment(treatment.date); - var endDate = moment(treatment.date); - startDate.set(todayJSON); - endDate.set(todayJSON); - endDate.add(5, 'minutes'); - markings.push( { xaxis: { from: startDate.toDate(), to: endDate.toDate()}, yaxis: { from: 0, to: treatment.amount }, color: markingColor } ); - }) - delete xaxisCfg.font; // Remove the font config so HH:MM is shown on the last chart - - var chartCOBData = [{ - data: cobAvg, - label: translate('COB'), - id: 'cobs', - color: carbColor, - points: { show: false }, - bars: { show: true, fil: true, barWidth: barWidth } - }]; - var chartCOBOptions = { - xaxis: xaxisCfg, - yaxes: [{ - tickColor: tickColor, - labelWidth: labelWidth, - tickFormatter: function(val,axis) { return tickFormatter(val,axis); } - }, - hiddenAxis], - grid: { - borderWidth: borderWidth, - markings: markings - } - }; - $.plot( '#loopalyzer-cob', chartCOBData, chartCOBOptions ); - -}; diff --git a/lib/report_plugins/weektoweek.js b/lib/report_plugins/weektoweek.js deleted file mode 100644 index 3ff84a78639..00000000000 --- a/lib/report_plugins/weektoweek.js +++ /dev/null @@ -1,333 +0,0 @@ -'use strict'; - -var _ = require('lodash'); -var moment = window.moment; -var d3 = (global && global.d3) || require('d3'); - -var dayColors = [ - 'rgb(73, 22, 153)' - , 'rgb(34, 201, 228)' - , 'rgb(0, 153, 123)' - , 'rgb(135, 135, 228)' - , 'rgb(135, 49, 204)' - , 'rgb(36, 36, 228)' - , 'rgb(0, 234, 188)' -]; - -var weektoweek = { - name: 'weektoweek' - , label: 'Week to week' - , pluginType: 'report' -}; - -function init() { - return weektoweek; -} - -module.exports = init; - -weektoweek.html = function html(client) { - var translate = client.translate; - var ret = - '

' + translate('Week to week') + '

' - + '' + translate('To see this report, press SHOW while in this view') + '
' - + ' '+translate('Size') - + ' ' - + '
' - + translate('Scale') + ': ' - + '' - + translate('Linear') - + '' - + translate('Logarithmic') - + '
' - + '
' - + '
' - ; - return ret; -}; - -weektoweek.prepareHtml = function weektoweekPrepareHtml(weekstoshow) { - $('#weektoweekcharts').html(''); - - var colorIdx = 0; - - var legend = ''; - - legend += ''; - legend += ''; - legend += ''; - legend += ''; - legend += ''; - legend += ''; - legend += ''; - legend += '
SundayMondayTuesdayWednesday
ThursdayFridaySaturday
'; - - $('#weektoweekcharts').append($(legend)); - - weekstoshow.forEach(function eachWeek(d) { - $('#weektoweekcharts').append($('
')); - }); -}; - -weektoweek.report = function report_weektoweek(datastorage, sorteddaystoshow, options) { - var Nightscout = window.Nightscout; - var client = Nightscout.client; - var report_plugins = Nightscout.report_plugins; - - var TOOLTIP_TRANS_MS = 300; - - var padding = { top: 15, right: 22, bottom: 30, left: 35 }; - - var weekstoshow = [ ]; - - var startDay = moment(sorteddaystoshow[0] + ' 00:00:00'); - - sorteddaystoshow.forEach( function eachDay(day) { - var weekNum = Math.abs(moment(day + ' 00:00:00').diff(startDay, 'weeks')); - - if (typeof weekstoshow[weekNum] === 'undefined') { - weekstoshow[weekNum] = [ ]; - } - - weekstoshow[weekNum].push(day); - }); - - weekstoshow = weekstoshow.map(function orderWeek(week) { - return _.sortBy(week); - }); - - weektoweek.prepareHtml(weekstoshow); - - weekstoshow.forEach( function eachWeek(week) { - var sgvData = [ ]; - var weekStart = moment(week[0] + ' 00:00:00'); - - week.forEach( function eachDay(day) { - var dayNum = Math.abs(moment(day + ' 00:00:00').diff(weekStart, 'days')); - - datastorage[day].sgv.forEach ( function eachSgv(sgv) { - var sgvWeekday = moment(sgv.date).day(); - var sgvColor = dayColors[sgvWeekday]; - - if (sgv.color === 'gray') { - sgvColor = sgv.color; - } - - sgvData.push( { - 'color': sgvColor - , 'date': moment(sgv.date).subtract(dayNum, 'days').toDate() - , 'filtered': sgv.filtered - , 'mills': sgv.mills - dayNum * 24*60*60000 - , 'noise': sgv.noise - , 'sgv': sgv.sgv - , 'type': sgv.type - , 'unfiltered': sgv.unfiltered - , 'y': sgv.y - }); - }); - }); - - drawChart(week, sgvData, options); - }); - - function timeTicks(n, i) { - var t12 = [ - '12am', '', '2am', '', '4am', '', '6am', '', '8am', '', '10am', '', - '12pm', '', '2pm', '', '4pm', '', '6pm', '', '8pm', '', '10pm', '', '12am' - ]; - if (Nightscout.client.settings.timeFormat === 24) { - return ('00' + i).slice(-2); - } else { - return t12[i]; - } - } - - function drawChart(week, sgvData, options) { - var tickValues - , charts - , context - , xScale2, yScale2 - , xAxis2, yAxis2 - , dateFn = function (d) { return new Date(d.date); }; - - tickValues = client.ticks(client, { - scaleY: options.weekscale === report_plugins.consts.SCALE_LOG ? 'log' : 'linear' - , targetTop: options.targetHigh - , targetBottom: options.targetLow - }); - - // add defs for combo boluses - var dashWidth = 5; - d3.select('body').append('svg') - .append('defs') - .append('pattern') - .attr('id', 'hash') - .attr('patternUnits', 'userSpaceOnUse') - .attr('width', 6) - .attr('height', 6) - .attr('x', 0) - .attr('y', 0) - .append('g') - .style('fill', 'none') - .style('stroke', '#0099ff') - .style('stroke-width', 2) - .append('path').attr('d', 'M0,0 l' + dashWidth + ',' + dashWidth) - .append('path').attr('d', 'M' + dashWidth + ',0 l-' + dashWidth + ',' + dashWidth); - - // create svg and g to contain the chart contents - charts = d3.select('#weektoweekchart-' + week[0] + '-' + week[week.length-1]).html( - ''+ - report_plugins.utils.localeDate(week[0])+ - '-' + - report_plugins.utils.localeDate(week[week.length-1])+ - '
' - ).append('svg'); - - charts.append('rect') - .attr('width', '100%') - .attr('height', '100%') - .attr('fill', 'WhiteSmoke'); - - context = charts.append('g'); - - // define the parts of the axis that aren't dependent on width or height - xScale2 = d3.time.scale() - .domain(d3.extent(sgvData, dateFn)); - - if (options.weekscale === report_plugins.consts.SCALE_LOG) { - yScale2 = d3.scale.log() - .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); - } else { - yScale2 = d3.scale.linear() - .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); - } - - xAxis2 = d3.svg.axis() - .scale(xScale2) - .tickFormat(timeTicks) - .ticks(24) - .orient('bottom'); - - yAxis2 = d3.svg.axis() - .scale(yScale2) - .tickFormat(d3.format('d')) - .tickValues(tickValues) - .orient('left'); - - // get current data range - var dataRange = d3.extent(sgvData, dateFn); - - // get the entire container height and width subtracting the padding - var chartWidth = options.weekwidth - padding.left - padding.right; - var chartHeight = options.weekheight - padding.top - padding.bottom; - - //set the width and height of the SVG element - charts.attr('width', options.weekwidth) - .attr('height', options.weekheight); - - // ranges are based on the width and height available so reset - xScale2.range([0, chartWidth]); - yScale2.range([chartHeight,0]); - - // add target BG rect - context.append('rect') - .attr('x', xScale2(dataRange[0])+padding.left) - .attr('y', yScale2(options.targetHigh)+padding.top) - .attr('width', xScale2(dataRange[1]- xScale2(dataRange[0]))) - .attr('height', yScale2(options.targetLow)-yScale2(options.targetHigh)) - .style('fill', '#D6FFD6') - .attr('stroke', 'grey'); - - // create the x axis container - context.append('g') - .attr('class', 'x axis'); - - // create the y axis container - context.append('g') - .attr('class', 'y axis'); - - context.select('.y') - .attr('transform', 'translate(' + (padding.left) + ',' + padding.top + ')') - .style('stroke', 'black') - .style('shape-rendering', 'crispEdges') - .style('fill', 'none') - .call(yAxis2); - - // if first run then just display axis with no transition - context.select('.x') - .attr('transform', 'translate(' + padding.left + ',' + (chartHeight + padding.top) + ')') - .style('stroke', 'black') - .style('shape-rendering', 'crispEdges') - .style('fill', 'none') - .call(xAxis2); - - _.each(tickValues, function (n, li) { - context.append('line') - .attr('class', 'high-line') - .attr('x1', xScale2(dataRange[0])+padding.left) - .attr('y1', yScale2(tickValues[li])+padding.top) - .attr('x2', xScale2(dataRange[1])+padding.left) - .attr('y2', yScale2(tickValues[li])+padding.top) - .style('stroke-dasharray', ('1, 5')) - .attr('stroke', 'grey'); - }); - - // bind up the context chart data to an array of circles - var contextCircles = context.selectAll('circle') - .data(sgvData); - - function prepareContextCircles(sel) { - var badData = []; - sel.attr('cx', function (d) { - return xScale2(d.date) + padding.left; - }) - .attr('cy', function (d) { - if (isNaN(d.sgv)) { - badData.push(d); - return yScale2(client.utils.scaleMgdl(450) + padding.top); - } else { - return yScale2(d.sgv) + padding.top; - } - }) - .attr('fill', function (d) { - if (d.color === 'gray') { - return 'transparent'; - } - return d.color; - }) - .style('opacity', function () { return 0.5 }) - .attr('stroke-width', function (d) {if (d.type === 'mbg') { return 2; } else { return 0; }}) - .attr('stroke', function () { return 'black'; }) - .attr('r', function(d) { - if (d.type === 'mbg') { - return 4; - } else { - return 2 + (options.weekwidth - 800) / 400; - } - }) - .on('mouseout', hideTooltip); - - if (badData.length > 0) { - console.warn('Bad Data: isNaN(sgv)', badData); - } - return sel; - } - - // if new circle then just display - prepareContextCircles(contextCircles.enter().append('circle')); - - contextCircles.exit() - .remove(); - } - - function hideTooltip ( ) { - client.tooltip.transition() - .duration(TOOLTIP_TRANS_MS) - .style('opacity', 0); - } -}; diff --git a/lib/server/activity.js b/lib/server/activity.js index 45b77e60587..f7df9f48268 100644 --- a/lib/server/activity.js +++ b/lib/server/activity.js @@ -9,11 +9,6 @@ function storage (env, ctx) { function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); api().insert(obj, function (err, doc) { - if (err != null && err.message) { - console.log('Activity data insertion error', err.message); - fn(err.message, null); - return; - } fn(null, doc.ops); }); } @@ -61,8 +56,7 @@ function storage (env, ctx) { } function remove (_id, fn) { - var objId = new ObjectID(_id); - return api( ).remove({ '_id': objId }, fn); + return api( ).remove({ '_id': new ObjectID(_id) }, fn); } function api ( ) { diff --git a/lib/server/bootevent.js b/lib/server/bootevent.js index ab8a55f18ac..f1580932ecd 100644 --- a/lib/server/bootevent.js +++ b/lib/server/bootevent.js @@ -2,46 +2,10 @@ var _ = require('lodash'); -var UPDATE_THROTTLE = 5000; +var UPDATE_THROTTLE = 1000; function boot (env, language) { - ////////////////////////////////////////////////// - // Check Node version. - // Latest Node 8 LTS and Latest Node 10 LTS are recommended and supported. - // Latest Node version on Azure is tolerated, but not recommended - // Other versions will not start - // More explicit: - // < 8 does not work, not supported - // >= 8.15.0 works, supported and recommended - // == 9.x does not work, not supported - // == 10.14.1 works, not fully supported and not recommended (Azure version) - // == 10.14.2 does not work, not supported and not recommended, - // >= 10.15.1 works, supported and recommended - // >= 11.6.0 does not work, not recommended, will not be supported. We only support Node LTS releases - /////////////////////////////////////////////////// - function checkNode (ctx, next) { - var semver = require('semver'); - var nodeVersion = process.version; - - if ( semver.satisfies(nodeVersion, '^8.15.0') || semver.satisfies(nodeVersion, '^10.15.1')) { - //Latest Node 8 LTS and Latest Node 10 LTS are recommended and supported. - console.debug('Node version ' + nodeVersion + ' is supported'); - next(); - } - else if ( semver.eq(nodeVersion, '10.14.1')) { - //Latest Node version on Azure is tolerated, but not recommended - console.log('WARNING: Node version v10.14.1 and Microsoft Azure are not recommended.'); - console.log('WARNING: Please migrate to another hosting provider. Your Node version is outdated and insecure'); - next(); - } else { - // Other versions will not start - console.log( 'ERROR: Node version ' + nodeVersion + ' is not supported. Please upgrade your Node'); - process.exit(1); - } - } - - function checkEnv (ctx, next) { ctx.language = language; if (env.err) { @@ -141,7 +105,7 @@ function boot (env, language) { if (hasBootErrors(ctx)) { return next(); } - + ctx.levels = require('../levels'); ctx.levels.translate = ctx.language.translate; @@ -215,7 +179,6 @@ function boot (env, language) { }); ctx.bus.on('data-loaded', function updatePlugins ( ) { - console.info('reloading sandbox data'); var sbx = require('../sandbox')().serverInit(env, ctx); ctx.plugins.setProperties(sbx); ctx.notifications.initRequests(); @@ -264,7 +227,6 @@ function boot (env, language) { } return require('bootevent')( ) - .acquire(checkNode) .acquire(checkEnv) .acquire(augmentSettings) .acquire(setupStorage) diff --git a/lib/server/devicestatus.js b/lib/server/devicestatus.js index e74c0124841..1939450adb5 100644 --- a/lib/server/devicestatus.js +++ b/lib/server/devicestatus.js @@ -10,11 +10,6 @@ function storage (collection, ctx) { obj.created_at = (new Date()).toISOString(); } api().insert(obj, function (err, doc) { - if (err != null && err.message) { - console.log('Error inserting the device status object', err.message); - fn(err.message, null); - return; - } fn(null, doc.ops); ctx.bus.emit('data-received'); }); @@ -64,8 +59,14 @@ function storage (collection, ctx) { ).toArray(toArray); } - function remove (opts, fn) { - return api( ).remove(query_for(opts), fn); + function remove (_id, fn) { + var filter; + if (_id === '*') { + filter = {}; + } else { + filter = { '_id': new ObjectID(_id) }; + } + return api( ).remove(filter, fn); } function api() { diff --git a/lib/server/entries.js b/lib/server/entries.js index 84f8f234bfa..72cd009f607 100644 --- a/lib/server/entries.js +++ b/lib/server/entries.js @@ -1,6 +1,7 @@ 'use strict'; var es = require('event-stream'); +var sgvdata = require('sgvdata'); var find_options = require('./query'); var ObjectID = require('mongodb').ObjectID; @@ -45,11 +46,7 @@ function storage(env, ctx) { } function remove (opts, fn) { - api( ).remove(query_for(opts), function (err, stat) { - //TODO: this is triggering a read from Mongo, we can do better - ctx.bus.emit('data-received'); - fn(err, stat); - }); + api( ).remove(query_for(opts), fn); } // return writable stream to lint each sgv record passing through it @@ -78,6 +75,8 @@ function storage(env, ctx) { //function update (fn) { //} // + //function remove (fn) { + //} // store new documents using the storage mechanism function create (docs, fn) { @@ -122,6 +121,7 @@ function storage(env, ctx) { // Expose all the useful functions api.list = list; + api.echo = sgvdata.sync.json.echo; api.map = map; api.create = create; api.remove = remove; diff --git a/lib/server/food.js b/lib/server/food.js index 92c41843f7b..18a293690bf 100644 --- a/lib/server/food.js +++ b/lib/server/food.js @@ -6,11 +6,6 @@ function storage (env, ctx) { function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); api().insert(obj, function (err, doc) { - if (err != null && err.message) { - console.log('Data insertion error', err.message); - fn(err.message, null); - return; - } fn(null, doc.ops); }); } @@ -41,8 +36,7 @@ function storage (env, ctx) { } function remove (_id, fn) { - var objId = new ObjectID(_id); - return api( ).remove({ '_id': objId }, fn); + return api( ).remove({ '_id': new ObjectID(_id) }, fn); } diff --git a/lib/server/mqtt.js b/lib/server/mqtt.js new file mode 100644 index 00000000000..0a4058e1a8e --- /dev/null +++ b/lib/server/mqtt.js @@ -0,0 +1,317 @@ +'use strict'; + +var es = require('event-stream'); +var Long = require('long'); +var decoders = require('sgvdata/lib/protobuf'); +var direction = require('sgvdata/lib/utils').direction; +var moment = require('moment'); +var url = require('url'); + +function init (env, ctx) { + + function mqtt ( ) { + return mqtt; + } + var info = url.parse(env.MQTT_MONITOR); + var username = info.auth.split(':').slice(0, -1).join(''); + var shared_topic = '/downloads/' + username + '/#'; + var alias_topic = '/downloads/' + username + '/protobuf'; + var notification_topic = '/notifications/' + username + '/json'; + env.mqtt_shared_topic = shared_topic; + + mqtt.client = connect(env); + var downloads = mqtt.downloads = downloader(); + + if (mqtt.client) { + listenForMessages(ctx); + } + + mqtt.every = every; + mqtt.entries = process(); + + //expose for tests that don't need to connect + mqtt.sgvSensorMerge = sgvSensorMerge; + + function listenForMessages ( ) { + mqtt.client.on('message', function (topic, msg) { + console.log('topic', topic); + // XXX: ugly hack + if (topic === alias_topic) { + topic = '/downloads/protobuf'; + } + + console.log(topic, 'on message', 'msg', msg.length); + switch (topic) { + case '/uploader': + console.log({type: topic, msg: msg.toString()}); + break; + case '/downloads/protobuf': + downloadProtobuf(msg, topic, downloads, ctx); + break; + + default: + console.log(topic, 'on message', 'msg', msg); + // ctx.entries.write(msg); + break; + } + }); + } + + mqtt.emitNotification = function emitNotification(notify) { + console.info('Publishing notification to mqtt: ', notify); + [notification_topic, '/notifications/json'].forEach(function iter_notify (topic) { + mqtt.client.publish(topic, JSON.stringify(notify), function mqttCallback (err) { + if (err) { + console.error('Unable to publish notification to MQTT', err); + } + }); + }); + }; + + return mqtt(); +} + +function connect (env) { + var uri = env.MQTT_MONITOR; + var shared_topic = env.mqtt_shared_topic; + if (!uri) { + return null; + } + + var opts = { + encoding: 'binary', + clean: false, + clientId: env.mqtt_client_id + }; + var client = require('mqtt').connect(uri, opts); + + function granted () { console.log('granted', arguments); } + + client.subscribe('sgvs'); + client.subscribe('published'); + client.subscribe('/downloads/protobuf', {qos: 2}, granted); + client.subscribe(shared_topic, {qos: 2}, granted); + client.subscribe('/uploader', granted); + client.subscribe('/entries/sgv', granted); + + return client; +} + +function process ( ) { + var stream = es.through( + function _write(data) { + this.push(data); + } + ); + return stream; +} + +function every (storage) { + function iter(item, next) { + storage.create(item, next); + } + + return es.map(iter); +} + +function downloader ( ) { + var opts = { + model: decoders.models.G4Download + , json: function (o) { + return o; + } + , payload: function (o) { + return o; + } + }; + return decoders(opts); +} + +function downloadProtobuf (msg, topic, downloads, ctx) { + var b = new Buffer(msg, 'binary'); + console.log('BINARY', b.length, b.toString('hex')); + var packet; + try { + packet = downloads.parse(b); + if (!packet.type) { + packet.type = topic; + + } + console.log('DOWNLOAD msg', msg.length, packet); + console.log('download SGV', packet.sgv[0]); + console.log('download_timestamp', packet.download_timestamp, new Date(Date.parse(packet.download_timestamp))); + console.log('WRITE TO MONGO'); + var download_timestamp = moment(packet.download_timestamp); + if (packet.download_status === 0) { + es.readArray(sgvSensorMerge(packet)).pipe(ctx.entries.persist(function empty(err, result) { + console.log('DONE WRITING MERGED SGV TO MONGO', err, result); + })); + + iter_mqtt_record_stream(packet, 'cal', toCal) + .pipe(ctx.entries.persist(function empty(err, result) { + console.log('DONE WRITING Cal TO MONGO', err, result.length); + })); + iter_mqtt_record_stream(packet, 'meter', toMeter) + .pipe(ctx.entries.persist(function empty(err, result) { + console.log('DONE WRITING Meter TO MONGO', err, result.length); + })); + } + packet.type = 'download'; + ctx.devicestatus.create({ + uploaderBattery: packet.uploader_battery, + created_at: download_timestamp.toISOString() + }, function empty(err, result) { + console.log('DONE WRITING TO MONGO devicestatus ', result, err); + }); + + ctx.entries.create([ packet ], function empty(err) { + if (err) { + console.log('Error writting to mongo: ', err); + } else { + console.log('Download written to mongo: ', packet); + } + }); + } catch (e) { + console.log('DID NOT PARSE', e); + } +} + +function toSGV (proto, vars) { + vars.sgv = proto.sgv_mgdl; + vars.direction = direction(proto.trend); + vars.noise = proto.noise; + vars.type = 'sgv'; + return vars; +} + +function toCal (proto, vars) { + vars.slope = proto.slope; + vars.intercept = proto.intercept; + vars.scale = proto.scale; + vars.type = 'cal'; + return vars; +} + +function toSensor (proto, vars) { + vars.filtered = new Long(proto.filtered).toInt(); + vars.unfiltered = new Long(proto.unfiltered).toInt(); + vars.rssi = proto.rssi; + vars.type = 'sensor'; + return vars; +} + +function toMeter (proto, result) { + result.type = 'mbg'; + result.mbg = proto.mbg || proto.meter_bg_mgdl; + return result; +} + +function toTimestamp (proto, receiver_time, download_time) { + var record_offset = receiver_time - proto.sys_timestamp_sec; + var record_time = download_time.clone( ).subtract(record_offset, 'second'); + var obj = { + device: 'dexcom' + , date: record_time.unix() * 1000 + , dateString: record_time.format( ) + }; + return obj; +} + +function timestampFactory (packet) { + var receiver_time = packet.receiver_system_time_sec; + var download_time = moment(packet.download_timestamp); + function timestamp (item) { + return toTimestamp(item, receiver_time, download_time.clone( )); + } + return timestamp; +} + +function timeSort (a, b) { + return a.date - b.date; +} + +function sgvSensorMerge (packet) { + var timestamp = timestampFactory(packet); + var sgvs = (packet['sgv'] || []).map(function(sgv) { + var timestamped = timestamp(sgv); + return toSGV(sgv, timestamped); + }).sort(timeSort); + + var sensors = (packet['sensor'] || []).map(function(sensor) { + var timestamped = timestamp(sensor); + return toSensor(sensor, timestamped); + }).sort(timeSort); + + //based on com.nightscout.core.dexcom.Utils#mergeGlucoseDataRecords + var merged = [] + , sgvsLength = sgvs.length + , sensorsLength = sensors.length; + + if (sgvsLength >= 0 && sensorsLength === 0) { + merged = sgvs; + } else { + var smallerLength = Math.min(sgvsLength, sensorsLength); + for (var i = 1; i <= smallerLength; i++) { + var sgv = sgvs[sgvsLength - i]; + var sensor = sensors[sensorsLength - i]; + if (sgv && sensor && Math.abs(sgv.date - sensor.date) < 10000) { + //timestamps are close so merge + sgv.filtered = sensor.filtered; + sgv.unfiltered = sensor.unfiltered; + sgv.rssi = sensor.rssi; + merged.push(sgv); + } else { + console.info('mismatch or missing, sgv: ', sgv, ' sensor: ', sensor); + //timestamps aren't close enough so add both + if (sgv) { merged.push(sgv); } + //but the sensor will become and sgv now + if (sensor) { + sensor.type = 'sgv'; + merged.push(sensor); + } + } + } + + //any extra sgvs? + if (sgvsLength > smallerLength) { + for (var j = 0; j < sgvsLength - smallerLength; j++) { + var extraSGV = sgvs[j]; + merged.push(extraSGV); + } + } + + //any extra sensors? + if (sensorsLength > smallerLength) { + for (var k = 0; k < sensorsLength - smallerLength; k++) { + var extraSensor = sensors[k]; + //from now on we consider it a sgv + extraSensor.type = 'sgv'; + merged.push(extraSensor); + } + } + + } + + return merged; +} + +function iter_mqtt_record_stream (packet, prop, sync) { + var list = packet[prop]; + console.log('incoming', prop, (list || [ ]).length); + var stream = es.readArray(list || [ ]); + var receiver_time = packet.receiver_system_time_sec; + var download_time = moment(packet.download_timestamp); + function map(item, next) { + var timestamped = toTimestamp(item, receiver_time, download_time.clone( )); + var r = sync(item, timestamped); + if (!('type' in r)) { + r.type = prop; + } + console.log('ITEM', item, 'TO', prop, r); + next(null, r); + } + return stream.pipe(es.map(map)); +} + +init.downloadProtobuf = downloadProtobuf; +module.exports = init; diff --git a/lib/server/profile.js b/lib/server/profile.js index d456b590959..110f7b64e87 100644 --- a/lib/server/profile.js +++ b/lib/server/profile.js @@ -32,8 +32,7 @@ function storage (collection, ctx) { } function remove (_id, fn) { - var objId = new ObjectID(_id); - api( ).remove({ '_id': objId }, fn); + api( ).remove({ '_id': new ObjectID(_id) }, fn); ctx.bus.emit('data-received'); } diff --git a/lib/server/treatments.js b/lib/server/treatments.js index aa8f1e0d8af..0ad9f4e8451 100644 --- a/lib/server/treatments.js +++ b/lib/server/treatments.js @@ -96,12 +96,11 @@ function storage (env, ctx) { return find_options(opts, storage.queryOpts); } - function remove (opts, fn) { - return api( ).remove(query_for(opts), function (err, stat) { - //TODO: this is triggering a read from Mongo, we can do better - ctx.bus.emit('data-received'); - fn(err, stat); - }); + + function remove (_id, fn) { + api( ).remove({ '_id': new ObjectID(_id) }, fn); + + ctx.bus.emit('data-received'); } function save (obj, fn) { diff --git a/lib/server/websocket.js b/lib/server/websocket.js index 11451a50586..8143577c48e 100644 --- a/lib/server/websocket.js +++ b/lib/server/websocket.js @@ -226,9 +226,8 @@ function init (env, ctx, server) { return; } - var objId = new ObjectID(data._id); ctx.store.collection(collection).update( - { '_id': objId }, + { '_id': new ObjectID(data._id) }, { $unset: data.data } ); @@ -326,9 +325,8 @@ function init (env, ctx, server) { if (err || array.length > 0) { console.log(LOG_DEDUP + 'Found similiar', array[0]); array[0].created_at = data.data.created_at; - var objId = new ObjectID(array[0]._id); ctx.store.collection(collection).update( - { '_id': objId }, + { '_id': new ObjectID(array[0]._id) }, { $set: {created_at: data.data.created_at} } ); if (callback) { @@ -340,10 +338,6 @@ function init (env, ctx, server) { // if not found create new record console.log(LOG_DEDUP + 'Adding new record'); ctx.store.collection(collection).insert(data.data, function insertResult (err, doc) { - if (err != null && err.message) { - console.log('treatments data insertion error: ', err.message); - return; - } if (callback) { callback(doc.ops); } @@ -373,10 +367,6 @@ function init (env, ctx, server) { } }); ctx.store.collection(collection).insert(data.data, function insertResult (err, doc) { - if (err != null && err.message) { - console.log('devicestatus insertion error: ', err.message); - return; - } if (callback) { callback(doc.ops); } @@ -384,10 +374,6 @@ function init (env, ctx, server) { }); } else { ctx.store.collection(collection).insert(data.data, function insertResult (err, doc) { - if (err != null && err.message) { - console.log(data.collection + ' insertion error: ', err.message); - return; - } if (callback) { callback(doc.ops); } @@ -412,9 +398,8 @@ function init (env, ctx, server) { return; } - var objId = new ObjectID(data._id); ctx.store.collection(collection).remove( - { '_id': objId } + { '_id': new ObjectID(data._id) } ); if (callback) { diff --git a/lib/settings.js b/lib/settings.js index e4d15f99f63..ae5ce30e484 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -41,12 +41,7 @@ function init ( ) { , bgTargetTop: 180 , bgTargetBottom: 80 , bgLow: 55 - }, - insecureUseHttp: false, - secureHstsHeader: true, - secureHstsHeaderIncludeSubdomains: false, - secureHstsHeaderPreload: false, - secureCsp: false + } }; var valueMappers = { @@ -64,10 +59,6 @@ function init ( ) { , alarmTimeagoUrgent: mapTruthy , alarmWarnMins: mapNumberArray , timeFormat: mapNumber - , insecureUseHttp: mapTruthy - , secureHstsHeader: mapTruthy - , secureCsp: mapTruthy - }; function mapNumberArray (value) { diff --git a/lib/storage/mongo-storage.js b/lib/storage/mongo-storage.js index 275cde6eb8a..b132e42dc4c 100644 --- a/lib/storage/mongo-storage.js +++ b/lib/storage/mongo-storage.js @@ -25,8 +25,7 @@ function init (env, cb, forceNewConnection) { console.log('Setting up new connection to MongoDB'); var timeout = 30 * 1000; - var options = { reconnectInterval: 10000, reconnectTries: 500, connectTimeoutMS: timeout, - socketTimeoutMS: timeout, useNewUrlParser: true }; + var options = { reconnectInterval: 10000, reconnectTries: 500, connectTimeoutMS: timeout, socketTimeoutMS: timeout }; var connect_with_retry = function(i) { return MongoClient.connect(env.storageURI, options, function connected(err, client) { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index faa7b310f6d..f8d6d9b757c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,197 +1,393 @@ { - "name": "nightscout", - "version": "0.11.1", + "name": "Nightscout", + "version": "0.10.3-master-20180805", "lockfileVersion": 1, "requires": true, "dependencies": { "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/wast-printer": "1.5.13" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "ieee754": "^1.1.11" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true + "@webpack-contrib/config-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz", + "integrity": "sha512-C7XsS6bXft0aRlyt7YCLg+fm97Mb3tWd+i5fVVlEl0NW5HKy8LoXVKj3mB7ECcEHNEEdHhgzg8gxP+Or8cMj8Q==", + "dev": true, + "requires": { + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "chalk": "^2.1.0", + "cosmiconfig": "^5.0.2", + "is-plain-obj": "^1.1.0", + "loud-rejection": "^1.6.0", + "merge-options": "^1.0.1", + "minimist": "^1.2.0", + "resolve": "^1.6.0", + "webpack-log": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" + "@webpack-contrib/schema-utils": { + "version": "1.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz", + "integrity": "sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chalk": "^2.3.2", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "webpack-log": "^1.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "abbrev": { "version": "1.0.9", @@ -200,80 +396,88 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "requires": { - "mime-types": "~2.1.18", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", "dev": true }, - "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==" - } + "acorn": "^5.0.0" } }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" - }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "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" + "uri-js": "^4.2.1" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" + }, + "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.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + } + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, - "optional": true + "requires": { + "string-width": "^2.0.0" + } }, "ansi-regex": { "version": "2.1.1", @@ -293,17 +497,6 @@ "requires": { "micromatch": "^3.1.4", "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.0.1" - } - } } }, "aproba": { @@ -313,10 +506,9 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { "sprintf-js": "~1.0.2" } @@ -342,7 +534,14 @@ "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + "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": "1.1.1", @@ -364,12 +563,19 @@ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", "requires": { - "safer-buffer": "~2.1.0" + "colour": "~0.7.1", + "optjs": "~3.2.2" } }, "asn1.js": { @@ -409,11 +615,6 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -442,20 +643,28 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", "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=" + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-code-frame": { "version": "6.26.0", @@ -475,8 +684,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -530,6 +738,12 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -553,6 +767,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -575,38 +790,83 @@ "callsite": "1.0.0" } }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", "dev": true, "requires": { "bluebird": "^3.5.1", "check-types": "^7.3.0", - "hoopy": "^0.1.2", "tryer": "^1.0.0" - } + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + } + } }, "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=" }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, "bn.js": { @@ -630,6 +890,21 @@ "qs": "6.5.2", "raw-body": "2.3.3", "type-is": "~1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } } }, "bootevent": { @@ -640,11 +915,68 @@ "chainsaw": "~0.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==", + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -665,9 +997,10 @@ "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==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true }, "browser-stdout": { "version": "1.3.1", @@ -710,6 +1043,14 @@ "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "browserify-rsa": { @@ -746,10 +1087,19 @@ "pako": "~1.0.5" } }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, "bson": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", - "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" }, "buffer": { "version": "4.9.1", @@ -760,14 +1110,6 @@ "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } } }, "buffer-equal-constant-time": { @@ -776,9 +1118,9 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "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==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" }, "buffer-xor": { "version": "1.0.3", @@ -786,53 +1128,63 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "bufferview": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bufferview/-/bufferview-1.0.1.tgz", + "integrity": "sha1-ev10pF+Tf6QiodM4wIu/3HbNcl0=" + }, + "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 }, + "bytebuffer": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-3.1.1.tgz", + "integrity": "sha1-KGuLPxZz43kPX7K+Iu+l61uW25A=", + "requires": { + "bufferview": "~1", + "long": "~1" + }, + "dependencies": { + "long": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-1.2.3.tgz", + "integrity": "sha1-EX/i4rHEU9g+Mid2yNRwY5+qK38=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "cache-base": { @@ -852,26 +1204,102 @@ "unset-value": "^1.0.0" } }, + "callback-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/callback-stream/-/callback-stream-1.1.0.tgz", + "integrity": "sha1-RwGlEmbwbgbqpx/BcjOCLYdfSQg=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "> 1.0.0 < 3.0.0" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "camelize": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-db": { + "version": "1.0.30000862", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000862.tgz", + "integrity": "sha1-bB4pb4u+Xl6kbwQhXouQ7Y+52o0=" + }, + "capture-stack-trace": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } }, "chainsaw": { "version": "0.1.0", @@ -907,22 +1335,24 @@ "dev": true }, "chokidar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", - "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", "glob-parent": "^3.1.0", - "inherits": "^2.0.3", + "inherits": "^2.0.1", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" + "readdirp": "^2.0.0", + "upath": "^1.0.5" }, "dependencies": { "array-unique": { @@ -961,9 +1391,9 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true }, "chrome-trace-event": { @@ -975,6 +1405,12 @@ "tslib": "^1.9.0" } }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -985,6 +1421,14 @@ "safe-buffer": "^5.0.1" } }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "requires": { + "chalk": "^1.1.3" + } + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1009,51 +1453,82 @@ } }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "requires": { + "source-map": "0.5.x" + } + }, + "clear-require": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clear-require/-/clear-require-2.0.0.tgz", + "integrity": "sha1-qgH1w1WJMmvVXphp6r2kj4ZEfes=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^2.0.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "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": { - "source-map": "~0.6.0" + "restore-cursor": "^2.0.0" } }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "optional": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "optional": true } } }, "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" }, - "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 + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "requires": { + "q": "^1.1.2" + } }, "collection-visit": { "version": "1.0.0", @@ -1065,39 +1540,83 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, "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==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "requires": { - "color-name": "1.1.3" + "color-name": "1.1.1" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colour": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", + "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" }, - "commondir": { - "version": "1.0.1", + "commist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-1.0.0.tgz", + "integrity": "sha1-wMNSUBz29S6RJOPvicmAbiAi6+8=", + "requires": { + "leven": "^1.0.0", + "minimist": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "commondir": { + "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true @@ -1118,11 +1637,18 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.34.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + } } }, "compression": { @@ -1137,19 +1663,46 @@ "on-headers": "~1.0.1", "safe-buffer": "5.1.2", "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "requires": { + "mime-db": "~1.35.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "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.0.0", "inherits": "^2.0.3", @@ -1157,6 +1710,20 @@ "typedarray": "^0.0.6" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1177,11 +1744,6 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, - "content-security-policy-builder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", - "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" - }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -1228,6 +1790,17 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cosmiconfig": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.5.tgz", + "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -1238,6 +1811,15 @@ "elliptic": "^6.0.0" } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -1266,14 +1848,12 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", + "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -1297,29 +1877,49 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "requires": { "babel-code-frame": "^6.26.0", "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", "icss-utils": "^2.1.0", "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", "postcss-modules-extract-imports": "^1.2.0", "postcss-modules-local-by-default": "^1.2.0", "postcss-modules-scope": "^1.1.0", "postcss-modules-values": "^1.3.0", "postcss-value-parser": "^3.3.0", "source-list-map": "^2.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } } }, "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==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "requires": { "cssesc": "^0.1.0", "fastparse": "^1.1.1", @@ -1336,17 +1936,79 @@ "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz", "integrity": "sha1-yRlAd+Dr2s1pHV9ZAVudgZ840BU=" }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, "cssom": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true }, - "cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, "requires": { - "cssom": "0.3.x" + "array-find-index": "^1.0.1" } }, "cyclist": { @@ -1355,6 +2017,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, "d3": { "version": "3.5.17", "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", @@ -1366,32 +2037,58 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } } }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" - }, "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" }, "dependencies": { "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true }, "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -1417,8 +2114,25 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } }, "decode-uri-component": { "version": "0.2.0", @@ -1426,10 +2140,36 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } }, "define-property": { "version": "2.0.2", @@ -1469,6 +2209,12 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -1497,12 +2243,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -1520,11 +2260,6 @@ "randombytes": "^2.0.0" } }, - "dns-prefetch-control": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", - "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -1535,25 +2270,43 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, "requires": { "webidl-conversions": "^4.0.2" + }, + "dependencies": { + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + } } }, - "dont-sniff-mimetype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", - "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -1562,12 +2315,12 @@ } }, "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "~0.1.0" } }, "ecdsa-sig-formatter": { @@ -1588,10 +2341,15 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" }, + "electron-to-chromium": { + "version": "1.3.50", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz", + "integrity": "sha1-dDi3b5K0G5GfP73TUPvQdX2s3fc=" + }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -1617,15 +2375,14 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } }, "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "requires": { "accepts": "~1.3.4", "base64id": "1.0.0", @@ -1635,6 +2392,15 @@ "ws": "~3.3.1" }, "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -1643,14 +2409,17 @@ "ms": "2.0.0" } }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "mime-db": "~1.33.0" } } } @@ -1680,28 +2449,18 @@ "requires": { "ms": "2.0.0" } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } } } }, "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", + "blob": "0.0.4", "has-binary2": "~1.0.2" } }, @@ -1725,6 +2484,15 @@ "prr": "~1.0.1" } }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "errorhandler": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.0.tgz", @@ -1734,6 +2502,62 @@ "escape-html": "~1.0.3" } }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1745,15 +2569,25 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", + "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", + "dev": true, "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, "eslint-scope": { @@ -1769,7 +2603,8 @@ "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true }, "esrecurse": { "version": "4.2.1", @@ -1783,7 +2618,8 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, "esutils": { "version": "2.0.2", @@ -1797,7 +2633,7 @@ }, "event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "requires": { "duplexer": "~0.1.1", @@ -1810,9 +2646,9 @@ } }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, "evp_bytestokey": { @@ -1826,13 +2662,13 @@ } }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -1894,34 +2730,19 @@ "repeat-string": "^0.2.2" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect-ct": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", - "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" - }, "expose-loader": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz", - "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==", - "dev": true + "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==" }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { "accepts": "~1.3.5", "array-flatten": "1.1.1", - "body-parser": "1.18.3", + "body-parser": "1.18.2", "content-disposition": "0.5.2", "content-type": "~1.0.4", "cookie": "0.3.1", @@ -1938,10 +2759,10 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", + "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", @@ -1951,27 +2772,105 @@ "vary": "~1.1.2" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "express-minify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz", - "integrity": "sha512-04/iYxB79jGeNZBBkbAW7L7FMG4Wtu78F1SayXIKiJD6MfqYnOI3DD8no7QOntgedYCdYUpj+Skg8QWR/2WnMQ==", - "requires": { - "clean-css": "^4.1.7", - "on-headers": "^1.0.1", - "uglify-js": "^3.0.28" - } + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "express-minify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz", + "integrity": "sha512-04/iYxB79jGeNZBBkbAW7L7FMG4Wtu78F1SayXIKiJD6MfqYnOI3DD8no7QOntgedYCdYUpj+Skg8QWR/2WnMQ==", + "requires": { + "clean-css": "^4.1.7", + "on-headers": "^1.0.1", + "uglify-js": "^3.0.28" + } }, "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extend-shallow": { "version": "3.0.2", @@ -2062,6 +2961,12 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -2083,32 +2988,21 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "feature-policy": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", - "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=" }, "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", - "dev": true, + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "requires": { "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "schema-utils": "^0.4.5" } }, "filesize": { @@ -2147,15 +3041,6 @@ "kind-of": "^3.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.5" - } - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -2186,47 +3071,29 @@ } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "pkg-dir": "^2.0.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" } }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "flot": { "version": "0.8.0-alpha", @@ -2234,26 +3101,13 @@ "integrity": "sha1-nLvHFHwQpH0lSduQvSmH7BunhLo=" }, "flush-write-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz", - "integrity": "sha512-6MHED/cmsyux1G4/Cek2Z776y9t7WCNd3h2h/HW91vFeU7pzMhA8XvAlDhHcanG5IWuIh/xcC7JASY4WQpG6xg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -2262,19 +3116,37 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "1.0.6", "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + } } }, "formidable": { @@ -2297,11 +3169,6 @@ "map-cache": "^0.2.2" } }, - "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -2337,180 +3204,892 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, + "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "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, + "optional": 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 + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, "requires": { - "is-extglob": "^2.1.0" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - } - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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": { - "lodash": "^4.17.10" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - } - }, - "has-cors": { - "version": "1.1.0", + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true, + "optional": 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 + }, + "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 + }, + "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 + }, + "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, + "optional": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "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.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "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.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-value": { "version": "1.0.0", @@ -2575,9 +4154,9 @@ } }, "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -2590,48 +4169,17 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, - "helmet": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.0.tgz", - "integrity": "sha512-j9JjtAnWJj09lqe/PEICrhuDaX30TeokXJ9tW6ZPhVH0+LMoihDeJ58CdWeTGzM66p6EiIODmgAaWfdeIWI4Gg==", - "requires": { - "dns-prefetch-control": "0.1.0", - "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.1", - "feature-policy": "0.2.0", - "frameguard": "3.0.0", - "helmet-crossdomain": "0.3.0", - "helmet-csp": "2.7.1", - "hide-powered-by": "1.0.0", - "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", - "nocache": "2.0.0", - "referrer-policy": "1.1.0", - "x-xss-protection": "1.1.0" - } - }, - "helmet-crossdomain": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz", - "integrity": "sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==" - }, - "helmet-csp": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz", - "integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==", + "help-me": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-1.1.0.tgz", + "integrity": "sha1-jy1QjQYAtKRW2i8IZVbn5cBWo8Y=", "requires": { - "camelize": "1.0.0", - "content-security-policy-builder": "2.0.0", - "dasherize": "2.0.0", - "platform": "1.3.5" + "callback-stream": "^1.0.2", + "glob-stream": "^6.1.0", + "through2": "^2.0.1", + "xtend": "^4.0.0" } }, - "hide-powered-by": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", - "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -2643,38 +4191,16 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" - }, - "hsts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", - "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, "http-errors": { "version": "1.6.3", @@ -2687,16 +4213,6 @@ "statuses": ">= 1.4.0 < 2" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -2704,12 +4220,9 @@ "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "icss-replace-symbols": { "version": "1.1.0", @@ -2722,6 +4235,54 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "ieee754": { @@ -2730,24 +4291,25 @@ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, - "ienoopen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" - }, "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", + "pkg-dir": "^2.0.0", "resolve-cwd": "^2.0.0" } }, @@ -2757,6 +4319,17 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -2766,7 +4339,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2783,22 +4355,30 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, - "invert-kv": { + "irregular-plurals": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, "is-accessor-descriptor": { "version": "0.1.6", @@ -2807,19 +4387,14 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "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.5" - } - } } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -2830,11 +4405,35 @@ } }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2842,19 +4441,14 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "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.5" - } - } } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2874,6 +4468,12 @@ } } }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -2901,11 +4501,52 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=" }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2915,27 +4556,83 @@ "isobject": "^3.0.1" } }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -3007,10 +4704,23 @@ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", "dev": true }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, "source-map": { @@ -3031,6 +4741,12 @@ "requires": { "has-flag": "^1.0.0" } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true } } }, @@ -3049,6 +4765,11 @@ "resolved": "https://registry.npmjs.org/jquery.tooltips/-/jquery.tooltips-1.0.0.tgz", "integrity": "sha1-/Ko2Il0IXQ/NY71E4rAGtUGDHHI=" }, + "js-base64": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==" + }, "js-storage": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/js-storage/-/js-storage-1.0.4.tgz", @@ -3060,9 +4781,9 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", + "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -3070,9 +4791,9 @@ }, "dependencies": { "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true } } @@ -3080,12 +4801,14 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true }, "jsdom": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "dev": true, "requires": { "abab": "^1.0.4", "acorn": "^5.3.0", @@ -3113,6 +4836,127 @@ "whatwg-url": "^6.4.1", "ws": "^4.0.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "cssstyle": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", + "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + } } }, "jsesc": { @@ -3136,23 +4980,33 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jsonwebtoken": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", - "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", + "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", "requires": { "jws": "^3.1.5", "lodash.includes": "^4.3.0", @@ -3181,12 +5035,19 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } } }, "jwa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.2.0.tgz", - "integrity": "sha512-Grku9ZST5NNQ3hqNUodSkDfEBqAmGA1R8yiyPHOnLzEKI0GaCQC/XhFmsheXYuXzFQJdILbh+lYBiliqG5R/Vg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", + "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.10", @@ -3194,73 +5055,113 @@ } }, "jws": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.1.tgz", - "integrity": "sha512-bGA2omSrFUkd72dhh05bIAN832znP4wOU3lfuXtRBuGTbsmNmDXMQg28f0Vsxaxgk4myF5YkKQpz6qeRpMgX9g==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", + "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", "requires": { - "jwa": "^1.2.0", + "jwa": "^1.1.5", "safe-buffer": "^5.0.1" } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "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.5" + } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "package-json": "^4.0.0" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", "dev": true }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "^5.2.2", + "big.js": "^3.1.3", "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "json5": "^0.5.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, "lodash.difference": { "version": "4.5.0", @@ -3298,6 +5199,11 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -3306,15 +5212,105 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "loglevelnext": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", + "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "dev": true, + "requires": { + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "yallist": "^3.0.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3326,14 +5322,11 @@ "pify": "^3.0.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true }, "map-cache": { "version": "0.2.2", @@ -3341,6 +5334,12 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", @@ -3355,33 +5354,32 @@ "object-visit": "^1.0.0" } }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" + }, "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "inherits": "^2.0.1" } }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -3392,17 +5390,37 @@ "readable-stream": "^2.0.1" } }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.1" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -3463,6 +5481,12 @@ } } } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -3477,21 +5501,21 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.27.0" } }, "mimic-fn": { @@ -3515,8 +5539,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "^1.1.7" } @@ -4035,14 +6058,25 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } }, "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -4051,10 +6085,22 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^3.0.0", + "pump": "^2.0.1", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "mixin-deep": { @@ -4082,7 +6128,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -4090,8 +6135,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -4129,19 +6173,11 @@ "ms": "2.0.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.4.0", @@ -4155,9 +6191,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" }, "moment-locales-webpack-plugin": { "version": "1.0.7", @@ -4169,31 +6205,28 @@ } }, "moment-timezone": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", - "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", + "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", "requires": { "moment": ">= 2.9.0" } }, "mongodb": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", - "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.11.tgz", + "integrity": "sha512-60KV+DPW++fzaD5cYbieCRQcXiYWQdRLHBqQyuu3rJmrP8vYZgI4u5UwfsUX6nGLON69FUIu4d3tH+WL4jShuA==", "requires": { - "mongodb-core": "3.1.11", - "safe-buffer": "^5.1.2" + "mongodb-core": "3.0.11" } }, "mongodb-core": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", - "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.11.tgz", + "integrity": "sha512-agzBbSP3ahEYJyBMQicj70B+n+NNYsKaroezu5ETcImXs9nqf89/QI6e8iipg2rY3a8OWZBHWvqYxnsWasrUQA==", "requires": { - "bson": "^1.1.0", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" + "bson": "~1.0.4", + "require_optional": "^1.0.1" } }, "mongomock": { @@ -4218,11 +6251,90 @@ "run-queue": "^1.0.3" } }, + "mqtt": { + "version": "2.18.3", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-2.18.3.tgz", + "integrity": "sha512-BXCUugFgA6FOWJGxhvUWtVLOdt6hYTmiMGPksEyKuuF1FQ0ji7UJBJ/0kVRMUtUWCAtPGnt4mZZZgJpzNLcuQg==", + "requires": { + "commist": "^1.0.0", + "concat-stream": "^1.6.2", + "end-of-stream": "^1.4.1", + "help-me": "^1.0.1", + "inherits": "^2.0.3", + "minimist": "^1.2.0", + "mqtt-packet": "^5.6.0", + "pump": "^3.0.0", + "readable-stream": "^2.3.6", + "reinterval": "^1.1.0", + "split2": "^2.1.1", + "websocket-stream": "^5.1.2", + "xtend": "^4.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "mqtt-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-5.6.0.tgz", + "integrity": "sha512-QECe2ivqcR1LRsPobRsjenEKAC3i1a5gmm+jNKJLrsiq9PaSQ18LlKFuxvhGxWkvGEPadWv6rKd31O4ICqS1Xw==", + "requires": { + "bl": "^1.2.1", + "inherits": "^2.0.3", + "process-nextick-args": "^2.0.0", + "safe-buffer": "^5.1.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4247,6 +6359,12 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -4256,22 +6374,17 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" - }, "node-cache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", @@ -4279,12 +6392,19 @@ "requires": { "clone": "2.x", "lodash": "4.x" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + } } }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { "assert": "^1.1.1", @@ -4294,7 +6414,7 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^3.0.0", + "events": "^1.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "0.0.0", @@ -4308,16 +6428,8 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } } }, "nopt": { @@ -4329,11 +6441,49 @@ "abbrev": "1" } }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "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.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } }, "npm-run-path": { "version": "2.0.2", @@ -4344,21 +6494,21 @@ "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, "nwsapi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.0.tgz", - "integrity": "sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz", + "integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g==", + "dev": true }, "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-component": { "version": "0.0.3", @@ -4384,18 +6534,15 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "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.5" - } } } }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4405,6 +6552,18 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -4414,6 +6573,18 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4431,45 +6602,39 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", "dev": true }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "is-wsl": "^1.1.0" } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -4477,71 +6642,147 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "requires": { + "readable-stream": "^2.0.1" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "^1.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, "parallel-transform": { @@ -4556,17 +6797,16 @@ } }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "pbkdf2": "^3.0.3" } }, "parse-duration": { @@ -4574,16 +6814,15 @@ "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-0.1.1.tgz", "integrity": "sha1-ExFN3JiRwezSgANiRFVN5DZHoiY=" }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { + "parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } }, "parseqs": { "version": "0.0.5", @@ -4621,8 +6860,7 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "3.0.0", @@ -4633,7 +6871,12 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { @@ -4642,11 +6885,26 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -4656,9 +6914,9 @@ } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -4680,38 +6938,388 @@ "dev": true }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "plur": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.0.1.tgz", + "integrity": "sha512-lJl0ojUynAM1BZn58Pas2WT/TXeC1+bS+UqShl0x9+49AtOn7DixRXVzaC8qrDOIxNDmepKnLuMTH7NQmkX0PA==", "dev": true, "requires": { - "find-up": "^3.0.0" + "irregular-plurals": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "requires": { + "postcss": "^5.0.16" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=" + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "platform": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", - "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -4723,69 +7331,162 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "^3.0.0" } } } }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "requires": { - "postcss": "^6.0.1" + "postcss": "^5.0.5" } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "pretty-bytes": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", + "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==", + "dev": true }, "prettyjson": { "version": "1.2.1", @@ -4794,6 +7495,18 @@ "requires": { "colors": "^1.1.2", "minimist": "^1.2.0" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } } }, "process": { @@ -4803,10 +7516,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise-inflight": { "version": "1.0.1", @@ -4814,13 +7526,22 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "protobufjs": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-3.2.4.tgz", + "integrity": "sha1-k/kbBym7yHTtywAr3xrY+OxXAdo=", + "requires": { + "ascli": "^1.0.1", + "bytebuffer": "~3.1" + } + }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.6.0" } }, "prr": { @@ -4829,30 +7550,35 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", + "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", + "dev": true }, "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "randombytes": "^2.0.1" } }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -4862,7 +7588,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -4873,7 +7598,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -4882,19 +7606,41 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "pushover-notifications": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pushover-notifications/-/pushover-notifications-1.2.0.tgz", - "integrity": "sha512-Da2XgHDDq9ZU4idbIx5Y9N4kCsHVgeeHViHK2wxdtdkdP58OvrsKCqpLZnr5nS+I4/PphjTORGSVzwMV2UaPLg==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/pushover-notifications/-/pushover-notifications-0.2.4.tgz", + "integrity": "sha1-icuU+RgsNqpZqaxnROSa2K/00Gc=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } }, "querystring": { "version": "0.2.0", @@ -4908,6 +7654,12 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, "random-token": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/random-token/-/random-token-0.0.8.tgz", @@ -4946,46 +7698,126 @@ "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", + "process-nextick-args": "~1.0.6", "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", + "string_decoder": "~1.0.3", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, - "referrer-policy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", - "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "requires": { + "balanced-match": "^0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + } + } }, "regenerate": { "version": "1.4.0", @@ -5012,6 +7844,25 @@ "regjsparser": "^0.1.4" } }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", @@ -5025,16 +7876,20 @@ "jsesc": "~0.5.0" } }, + "reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { @@ -5043,45 +7898,142 @@ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=" }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", + "aws4": "^1.6.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "uuid": "^3.1.0" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "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=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "psl": "^1.1.24", "punycode": "^1.4.1" } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } } } }, @@ -5089,32 +8041,11 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, "requires": { "lodash": "^4.13.1" } }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -5125,10 +8056,13 @@ } }, "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } }, "resolve-cwd": { "version": "2.0.0", @@ -5147,16 +8081,6 @@ } } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", @@ -5168,6 +8092,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -5180,29 +8114,23 @@ "integrity": "sha1-ZCfee3/u+n02QBUH62SlOFvFjcc=", "dev": true }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "glob": "^7.0.5" } }, "ripemd160": { @@ -5225,9 +8153,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "safe-regex": { "version": "1.1.0", @@ -5243,35 +8171,33 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "requires": { "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } }, "send": { "version": "0.16.2", @@ -5306,9 +8232,9 @@ } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", "dev": true }, "serve-static": { @@ -5322,10 +8248,10 @@ "send": "0.16.2" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, "set-value": { @@ -5362,6 +8288,38 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "sgvdata": { + "version": "git://github.com/ktind/sgvdata.git#150873bc92e80bf645796ee19f13c6cff79d5630", + "from": "git://github.com/ktind/sgvdata.git#wip/protobuf", + "requires": { + "event-stream": "~3.1.5", + "protobufjs": "~3.2.0" + }, + "dependencies": { + "event-stream": { + "version": "3.1.7", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz", + "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=", + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.2", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "split": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", + "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", + "requires": { + "through": "2" + } + } + } + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -5373,31 +8331,27 @@ } }, "share2nightscout-bridge": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/share2nightscout-bridge/-/share2nightscout-bridge-0.2.0.tgz", - "integrity": "sha512-GdM8iXueC1n0YSiopCeadiq2G7pBYMroNhpqekjtX+cBFG1bqJRxvM9OH7vp27icWKx8AF+ZHdjUfwU5xn9kQQ==", + "version": "git://github.com/nightscout/share2nightscout-bridge.git#d4a0d75db30461fee3131bd4efd66326c63496e6", + "from": "git://github.com/nightscout/share2nightscout-bridge.git#wip/generalize", "requires": { - "request": "^2.88.0" + "request": "^2.87.0" }, "dependencies": { "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "fast-deep-equal": "^2.0.1", + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "json-schema-traverse": "^0.3.0" } }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert-plus": { "version": "1.0.0", @@ -5415,14 +8369,15 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -5432,10 +8387,15 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "~1.0.0" } @@ -5459,12 +8419,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "~0.1.0" } }, "extend": { @@ -5478,9 +8438,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -5493,12 +8453,12 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "1.0.6", "mime-types": "^2.1.12" } }, @@ -5516,11 +8476,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "^6.5.5", + "ajv": "^5.1.0", "har-schema": "^2.0.0" } }, @@ -5547,7 +8507,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true }, "json-schema": { "version": "0.2.3", @@ -5555,9 +8516,9 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stringify-safe": { "version": "5.0.1", @@ -5576,37 +8537,32 @@ } }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.35.0" } }, "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { "version": "6.5.2", @@ -5614,30 +8570,30 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", + "aws4": "^1.6.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "uuid": "^3.1.0" } }, "safe-buffer": { @@ -5651,9 +8607,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5667,19 +8623,11 @@ } }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "psl": "^1.1.24", "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } } }, "tunnel-agent": { @@ -5693,15 +8641,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true }, "uuid": { "version": "3.3.2", @@ -5736,14 +8677,14 @@ "dev": true }, "shiro-trie": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/shiro-trie/-/shiro-trie-0.4.8.tgz", - "integrity": "sha512-CtBcRIbueg6dnSE1XuFf03RX67GdSUFcb5+zhbTL+cESTd8Vjr42YvtHMKlOZvsLt0RmtbuLzslLix8E4nKFwg==" + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/shiro-trie/-/shiro-trie-0.3.13.tgz", + "integrity": "sha1-pKZrVJjWm5RgLnqYsAVzFbO1x0Q=" }, "should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.2.tgz", + "integrity": "sha512-3y3b/1GsvXZU2rMVDOGtaeX8N0KhdtiaGG6IhMsVkZyjcR0PokdPS9UUmlnYj5h94+ECqUr+Z6KYTm846A/tfQ==", "dev": true, "requires": { "should-equal": "^2.0.0", @@ -5838,12 +8779,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -5895,6 +8830,12 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -5905,17 +8846,6 @@ "dev": true, "requires": { "kind-of": "^3.2.0" - }, - "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.5" - } - } } }, "socket.io": { @@ -5994,18 +8924,31 @@ "requires": { "ms": "2.0.0" } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", @@ -6020,30 +8963,44 @@ "urix": "^0.1.0" } }, - "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, "requires": { - "memory-pager": "^1.0.2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -6061,16 +9018,23 @@ "extend-shallow": "^3.0.0" } }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "requires": { + "through2": "^2.0.2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -6081,15 +9045,27 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -6121,12 +9097,13 @@ "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true }, "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { "inherits": "~2.0.1", @@ -6139,12 +9116,19 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "requires": { "duplexer": "~0.1.1" + }, + "dependencies": { + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + } } }, "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -6162,13 +9146,49 @@ "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { "version": "2.1.1", @@ -6198,10 +9218,9 @@ } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", "requires": { "safe-buffer": "~5.1.0" } @@ -6214,26 +9233,43 @@ "ansi-regex": "^2.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "dev": true, + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz", + "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==", "requires": { "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "schema-utils": "^0.4.5" } }, "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", + "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", "dev": true, "requires": { "component-emitter": "^1.2.0", @@ -6241,20 +9277,20 @@ "debug": "^3.1.0", "extend": "^3.0.0", "form-data": "^2.3.1", - "formidable": "^1.2.0", + "formidable": "^1.1.1", "methods": "^1.1.1", "mime": "^1.4.1", "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "readable-stream": "^2.0.5" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "mime": { @@ -6262,23 +9298,17 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true } } }, "supertest": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", - "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.1.0.tgz", + "integrity": "sha512-O44AMnmJqx294uJQjfUmEyYOg7d9mylNFsMw/Wkz4evKd1njyPrtCN+U6ZIC7sKtfEVQhfTqFFijlXx8KP/Czw==", "dev": true, "requires": { - "methods": "^1.1.2", - "superagent": "^3.8.3" + "methods": "~1.1.2", + "superagent": "3.8.2" } }, "supports-color": { @@ -6286,76 +9316,97 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, - "swagger-ui-dist": { - "version": "3.20.6", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.20.6.tgz", - "integrity": "sha512-CN+2z6AP0/KR6Z7wPtBA9ZWr9z28dzA5R88VturLmDSVtYIAB3D6aTt1bCj39sUtLsVwxFVrBDbNtdXcZCvFHQ==" + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + } + } }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", "dev": true }, - "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" - } - }, - "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "dev": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" - } - } + "execa": "^0.7.0" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "~2.3.6", + "readable-stream": "^2.1.5", "xtend": "~4.0.1" } }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -6365,6 +9416,21 @@ "setimmediate": "^1.0.4" } }, + "titleize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz", + "integrity": "sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==", + "dev": true + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", @@ -6383,17 +9449,6 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "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.5" - } - } } }, "to-regex": { @@ -6427,15 +9482,6 @@ "kind-of": "^3.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.5" - } - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -6445,20 +9491,13 @@ } }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { - "punycode": "^2.1.0" + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "traverse": { @@ -6466,6 +9505,12 @@ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -6484,23 +9529,17 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -6512,21 +9551,89 @@ "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.18" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + } } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz", + "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==", "requires": { - "commander": "~2.17.1", + "commander": "~2.16.0", "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz", + "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } } }, "ultron": { @@ -6534,6 +9641,11 @@ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -6569,24 +9681,52 @@ } } }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "requires": { + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -6629,27 +9769,89 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "urix": { @@ -6676,6 +9878,15 @@ } } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -6683,9 +9894,9 @@ "dev": true }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "requires": { "inherits": "2.0.3" @@ -6694,8 +9905,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -6708,16 +9918,31 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz", + "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6726,6 +9951,13 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } } }, "vm-browserify": { @@ -6741,6 +9973,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, "requires": { "browser-process-hrtime": "^0.1.2" } @@ -6756,23 +9989,28 @@ "neo-async": "^2.5.0" } }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.3.tgz", - "integrity": "sha512-xPJvFeB+8tUflXFq+OgdpiSnsCD5EANyv56co5q8q8+YtEasn5Sj3kzY44mta+csCIEB0vneSxnuaHkOL2h94A==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.3.tgz", + "integrity": "sha512-3VcrVoFgzSz1IYgga71YpU3HO89Al5bSnDOj9RJQPsy+FNyI1sFsUyJITn3pktNuaRBlQT0usvKZE3GgkPGAIw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", "ajv-keywords": "^3.1.0", "chrome-trace-event": "^1.0.0", @@ -6786,41 +10024,39 @@ "mkdirp": "~0.5.0", "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", - "dev": true - } + "webpack-sources": "^1.0.1" } }, "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", - "dev": true, - "requires": { - "acorn": "^5.7.3", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.10", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", + "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", + "dev": true, + "requires": { + "acorn": "^5.3.0", + "bfj-node4": "^5.2.0", + "chalk": "^2.3.0", + "commander": "^2.13.0", + "ejs": "^2.5.7", + "express": "^4.16.2", + "filesize": "^3.5.11", + "gzip-size": "^4.1.0", + "lodash": "^4.17.4", "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" + "opener": "^1.4.3", + "ws": "^4.0.0" }, "dependencies": { + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -6831,9 +10067,9 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6841,51 +10077,74 @@ "supports-color": "^5.3.0" } }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "ws": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", - "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } } } }, - "webpack-cli": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", - "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", + "webpack-command": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webpack-command/-/webpack-command-0.4.1.tgz", + "integrity": "sha512-4u23PTUcjLJCcPqs53ugjFIp2c3I6rGZgYYwgD7LPPU745MzbS3tLXuOpKdgFNN+qDdWtzfLKZhMTQyf7jklcg==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", + "@webpack-contrib/config-loader": "^1.2.0", + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "camelcase": "^5.0.0", + "chalk": "^2.3.2", + "debug": "^3.1.0", + "decamelize": "^2.0.0", + "enhanced-resolve": "^4.0.0", + "import-local": "^1.0.0", + "isobject": "^3.0.1", "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" + "log-symbols": "^2.2.0", + "loud-rejection": "^1.6.0", + "meant": "^1.0.1", + "meow": "^5.0.0", + "merge-options": "^1.0.0", + "object.values": "^1.0.4", + "opn": "^5.3.0", + "ora": "^2.1.0", + "plur": "^3.0.0", + "pretty-bytes": "^5.0.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "titleize": "^1.0.1", + "update-notifier": "^2.3.0", + "v8-compile-cache": "^2.0.0", + "webpack-log": "^1.1.2", + "wordwrap": "^1.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -6895,10 +10154,16 @@ "color-convert": "^1.9.0" } }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6906,79 +10171,177 @@ "supports-color": "^5.3.0" } }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "^3.0.0" } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true } } }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "webpack-log": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", + "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" }, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" } } } }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "websocket-stream": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.1.2.tgz", + "integrity": "sha512-lchLOk435iDWs0jNuL+hiU14i3ERSrMA0IKSiJh7z6X/i4XNsutBZrtqu2CPOZuA4G/zabiqVAos0vW+S7GEVw==", "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "duplexify": "^3.5.1", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "safe-buffer": "^5.1.1", + "ws": "^3.2.0", + "xtend": "^4.0.0" } }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=" + }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-module": { + "widest-line": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true }, "worker-farm": { "version": "1.6.0", @@ -6989,73 +10352,53 @@ "errno": "~0.1.7" } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "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.0" - } - }, - "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.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "x-xss-protection": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", - "integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==" - }, - "xml-name-validator": { + "xdg-basedir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "4.0.0", @@ -7064,39 +10407,26 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } } }, "yeast": { diff --git a/package.json b/package.json index c72a2d15341..517d351520b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "nightscout", - "version": "0.11.1", + "name": "Nightscout", + "version": "0.10.3-master-20180805", "description": "Nightscout acts as a web-based CGM (Continuous Glucose Montinor) to allow multiple caregivers to remotely view a patients glucose data in realtime.", "license": "AGPL-3.0", "author": "Nightscout Team", @@ -48,66 +48,67 @@ } }, "engines": { - "node": "^10.14.1 || ^8.15.0", - "npm": "6.x" + "node": "8.11.x", + "npm": "6.x || 5.8.x || 5.7.x || 5.6.x" }, "dependencies": { + "ajv": "^6.5.1", "async": "^0.9.2", "body-parser": "^1.18.3", "bootevent": "0.0.1", "compression": "^1.7.3", - "css-loader": "^1.0.1", + "css-loader": "^0.28.11", "cssmin": "^0.4.3", "d3": "^3.5.17", "ejs": "^2.6.1", "errorhandler": "^1.5.0", - "event-stream": "3.3.4", + "event-stream": "^3.3.4", "expand-braces": "^0.1.2", - "express": "^4.16.4", + "expose-loader": "^0.7.5", + "express": "^4.16.3", "express-minify": "^1.0.0", + "file-loader": "^1.1.11", "flot": "^0.8.0-alpha", - "helmet": "^3.15.0", "jquery": "^3.3.1", "jquery-ui-bundle": "^1.12.1-migrate", "jquery.tooltips": "^1.0.0", "js-storage": "^1.0.4", - "jsdom": "~11.11.0", - "jsonwebtoken": "^8.4.0", - "lodash": "^4.17.11", - "mime": "^2.4.0", + "jsonwebtoken": "^8.3.0", + "lodash": "^4.17.10", + "long": "^3.2.0", + "mime": "^2.3.1", "minimed-connect-to-nightscout": "^1.1.1", - "moment": "^2.24.0", - "moment-timezone": "^0.5.23", - "mongodb": "^3.1.13", + "moment": "^2.22.2", + "moment-timezone": "^0.5.21", + "mongodb": "~3.0.11", "mongomock": "^0.1.2", + "mqtt": "^2.18.3", "node-cache": "^4.2.0", "parse-duration": "^0.1.1", "prettyjson": "^1.2.1", - "pushover-notifications": "^1.2.0", + "pushover-notifications": "^0.2.4", "random-token": "0.0.8", - "request": "^2.88.0", - "semver": "^5.6.0", - "share2nightscout-bridge": "^0.2.0", - "shiro-trie": "^0.4.8", + "request": "^2.87.0", + "sgvdata": "git://github.com/ktind/sgvdata.git#wip/protobuf", + "share2nightscout-bridge": "git://github.com/nightscout/share2nightscout-bridge.git#wip/generalize", + "shiro-trie": "^0.3.13", "simple-statistics": "^0.7.0", - "socket.io": "~2.1.1", - "swagger-ui-dist": "^3.20.6", - "terser": "^3.16.1", - "traverse": "^0.6.6" + "socket.io": "^2.1.1", + "style-loader": "^0.20.2", + "traverse": "^0.6.6", + "uglify-js": "^3.4.6", + "uuid": "^3.2.1" }, "devDependencies": { "benv": "^3.3.0", - "expose-loader": "^0.7.5", - "file-loader": "^3.0.1", + "clear-require": "^2.0.0", "istanbul": "^0.4.5", "mocha": "^5.2.0", "moment-locales-webpack-plugin": "^1.0.7", - "should": "^13.2.3", - "style-loader": "^0.23.1", - "supertest": "^3.4.2", - "terser-webpack-plugin": "^1.2.2", - "webpack": "^4.29.3", - "webpack-bundle-analyzer": "^3.0.3", - "webpack-cli": "^3.2.3" + "should": "^13.2.2", + "supertest": "^3.1.0", + "webpack": "^4.16.3", + "webpack-bundle-analyzer": "^2.13.1", + "webpack-command": "^0.4.1" } } diff --git a/server.js b/server.js index df99724747a..27d629034a2 100644 --- a/server.js +++ b/server.js @@ -54,6 +54,12 @@ require('./lib/server/bootevent')(env, language).boot(function booted (ctx) { return; } + if (env.MQTT_MONITOR) { + ctx.mqtt = require('./lib/server/mqtt')(env, ctx); + var es = require('event-stream'); + es.pipeline(ctx.mqtt.entries, ctx.entries.map( ), ctx.mqtt.every(ctx.entries)); + } + /////////////////////////////////////////////////// // setup socket io for data and message transmission /////////////////////////////////////////////////// @@ -65,6 +71,9 @@ require('./lib/server/bootevent')(env, language).boot(function booted (ctx) { ctx.bus.on('notification', function(notify) { websocket.emitNotification(notify); + if (ctx.mqtt) { + ctx.mqtt.emitNotification(notify); + } }); //after startup if there are no alarms send all clear diff --git a/setup.sh b/setup.sh index d77c8f3d1de..605696532ff 100755 --- a/setup.sh +++ b/setup.sh @@ -2,6 +2,8 @@ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get update -sudo apt-get install -y nodejs build-essential git +sudo apt-get install -y nodejs +sudo apt-get install -y python-software-properties python git +sudo apt-get install -y build-essential npm install \ No newline at end of file diff --git a/static/colorbrewer/README.md b/static/colorbrewer/README.md index fed63690d50..9f3c8f79c07 100644 --- a/static/colorbrewer/README.md +++ b/static/colorbrewer/README.md @@ -1,11 +1,3 @@ - - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [colorbrewer](#colorbrewer) - - - colorbrewer =========== diff --git a/static/css/main.css b/static/css/main.css index 2d45c2d081e..75492290675 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -86,18 +86,6 @@ body { z-index: 2; } -button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.ui-button { - background-color: grey; - border: 1px solid white; - padding: 2px; -} - a, a:visited, a:link { color: #2196f3; text-decoration: none; diff --git a/static/glyphs/css/fontello-embedded.css b/static/glyphs/css/fontello-embedded.css index 92ad1b9d889..1bd83157f9a 100755 --- a/static/glyphs/css/fontello-embedded.css +++ b/static/glyphs/css/fontello-embedded.css @@ -1,15 +1,15 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?73205958'); - src: url('../font/fontello.eot?73205958#iefix') format('embedded-opentype'), - url('../font/fontello.svg?73205958#fontello') format('svg'); + src: url('../font/fontello.eot?37278242'); + src: url('../font/fontello.eot?37278242#iefix') format('embedded-opentype'), + url('../font/fontello.svg?37278242#fontello') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'fontello'; - src: url('data:application/octet-stream;base64,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') format('woff'), - url('data:application/octet-stream;base64,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LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=') format('truetype'); } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ @@ -17,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?73205958#fontello') format('svg'); + src: url('../font/fontello.svg?37278242#fontello') format('svg'); } } */ diff --git a/static/glyphs/css/fontello.css b/static/glyphs/css/fontello.css index 6548310e8e0..777b4dc367b 100755 --- a/static/glyphs/css/fontello.css +++ b/static/glyphs/css/fontello.css @@ -1,11 +1,11 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?50735338'); - src: url('../font/fontello.eot?50735338#iefix') format('embedded-opentype'), - url('../font/fontello.woff2?50735338') format('woff2'), - url('../font/fontello.woff?50735338') format('woff'), - url('../font/fontello.ttf?50735338') format('truetype'), - url('../font/fontello.svg?50735338#fontello') format('svg'); + src: url('../font/fontello.eot?25902905'); + src: url('../font/fontello.eot?25902905#iefix') format('embedded-opentype'), + url('../font/fontello.woff2?25902905') format('woff2'), + url('../font/fontello.woff?25902905') format('woff'), + url('../font/fontello.ttf?25902905') format('truetype'), + url('../font/fontello.svg?25902905#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -15,7 +15,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?50735338#fontello') format('svg'); + src: url('../font/fontello.svg?25902905#fontello') format('svg'); } } */ diff --git a/static/glyphs/demo.html b/static/glyphs/demo.html index 0ec1b165923..eedc1ca63f0 100755 --- a/static/glyphs/demo.html +++ b/static/glyphs/demo.html @@ -229,11 +229,11 @@ } @font-face { font-family: 'fontello'; - src: url('./font/fontello.eot?92660326'); - src: url('./font/fontello.eot?92660326#iefix') format('embedded-opentype'), - url('./font/fontello.woff?92660326') format('woff'), - url('./font/fontello.ttf?92660326') format('truetype'), - url('./font/fontello.svg?92660326#fontello') format('svg'); + src: url('./font/fontello.eot?94753240'); + src: url('./font/fontello.eot?94753240#iefix') format('embedded-opentype'), + url('./font/fontello.woff?94753240') format('woff'), + url('./font/fontello.ttf?94753240') format('truetype'), + url('./font/fontello.svg?94753240#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -275,7 +275,7 @@ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } - + - - - - + + diff --git a/webpack.config.js b/webpack.config.js index 514f83ea1af..9e781a3bf77 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,113 +1,105 @@ const path = require('path'); const webpack = require('webpack'); const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const pluginArray = []; -const sourceMapType = 'source-map'; -const TerserPlugin = require('terser-webpack-plugin'); -/*if (process.env.NODE_ENV !== 'development') { - console.log('Development environment detected, enabling Bundle Analyzer'); - const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; - pluginArray.push(new BundleAnalyzerPlugin({ - // Can be `server`, `static` or `disabled`. - // In `server` mode analyzer will start HTTP server to show bundle report. - // In `static` mode single HTML file with bundle report will be generated. - // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting - // `generateStatsFile` to `true`. - analyzerMode: 'static', - // Host that will be used in `server` mode to start HTTP server. - analyzerHost: '127.0.0.1', - // Port that will be used in `server` mode to start HTTP server. - analyzerPort: 8888, - // Path to bundle report file that will be generated in `static` mode. - // Relative to bundles output directory. - reportFilename: 'bundle_report.html', - // Module sizes to show in report by default. - // Should be one of `stat`, `parsed` or `gzip`. - // See "Definitions" section for more information. - defaultSizes: 'parsed', - // Automatically open report in default browser - openAnalyzer: true, - // If `true`, Webpack Stats JSON file will be generated in bundles output directory - generateStatsFile: false, - // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`. - // Relative to bundles output directory. - statsFilename: 'stats.json', - // Options for `stats.toJson()` method. - // For example you can exclude sources of your modules from stats file with `source: false` option. - // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21 - statsOptions: null, - // Log level. Can be 'info', 'warn', 'error' or 'silent'. - logLevel: 'info' - })); - }*/ +var pluginArray = []; -pluginArray.push(new webpack.ProvidePlugin({ - $: 'jquery', - jQuery: 'jquery', - 'window.jQuery': 'jquery', - 'window.$': 'jquery' -})); +var sourceMapType = 'source-map'; + +if (process.env.NODE_ENV !== 'development') { + +/* + console.log('Development environment detected, enabling Bundle Analyzer'); + + var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; + + pluginArray.push(new BundleAnalyzerPlugin({ + // Can be `server`, `static` or `disabled`. + // In `server` mode analyzer will start HTTP server to show bundle report. + // In `static` mode single HTML file with bundle report will be generated. + // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting `generateStatsFile` to `true`. + analyzerMode: 'static', + // Host that will be used in `server` mode to start HTTP server. + analyzerHost: '127.0.0.1', + // Port that will be used in `server` mode to start HTTP server. + analyzerPort: 8888, + // Path to bundle report file that will be generated in `static` mode. + // Relative to bundles output directory. + reportFilename: 'bundle_report.html', + // Module sizes to show in report by default. + // Should be one of `stat`, `parsed` or `gzip`. + // See "Definitions" section for more information. + defaultSizes: 'parsed', + // Automatically open report in default browser + openAnalyzer: true, + // If `true`, Webpack Stats JSON file will be generated in bundles output directory + generateStatsFile: false, + // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`. + // Relative to bundles output directory. + statsFilename: 'stats.json', + // Options for `stats.toJson()` method. + // For example you can exclude sources of your modules from stats file with `source: false` option. + // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21 + statsOptions: null, + // Log level. Can be 'info', 'warn', 'error' or 'silent'. + logLevel: 'info' + })); +*/ + +} + +var jq = new webpack.ProvidePlugin({ + $: "jquery", + jQuery: "jquery", + "window.jQuery": "jquery'", + "window.$": "jquery" +}); + +pluginArray.push(jq); // Strip all locales except the ones defined in lib/language.js // (“en” is built into Moment and can’t be removed, 'dk' is not defined in moment) -pluginArray.push(new MomentLocalesPlugin({ - localesToKeep: ['bg', 'cs', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'it', 'ko', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru', - 'sk', 'sv', 'zh_cn', 'zh_tw'], -})); + var momentLocales = new MomentLocalesPlugin({ + localesToKeep: ['bg', 'cs', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'it', 'ko', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'zh_cn', 'zh_tw'], + }) ; +pluginArray.push(momentLocales); + module.exports = { - context: path.resolve(__dirname, '.'), - entry: { - app: './bundle/bundle.source.js' - }, - output: { - path: path.resolve(__dirname, './tmp'), - publicPath: '/', - filename: 'js/bundle.js', - sourceMapFilename: 'js/bundle.js.map', - }, - devtool: sourceMapType, - optimization: { - minimizer: [ - new TerserPlugin( { - cache: true, - parallel: true, - sourceMap: true, // Must be set to true if using source-maps in production - terserOptions: { - ie8: false, - safari10: false - // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions - } - } ), - ], - }, - plugins: pluginArray, - module: { - rules: [{ - test: /\.(jpe?g|png|gif)$/i, - loader: 'file-loader', - query: { - name: '[name].[ext]', - outputPath: 'images/' - //the images will be emmited to public/assets/images/ folder - //the images will be put in the DOM - + - - + + + + diff --git a/webpack.config.js b/webpack.config.js index 9e781a3bf77..514f83ea1af 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,105 +1,113 @@ const path = require('path'); const webpack = require('webpack'); const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); +const pluginArray = []; +const sourceMapType = 'source-map'; +const TerserPlugin = require('terser-webpack-plugin'); +/*if (process.env.NODE_ENV !== 'development') { + console.log('Development environment detected, enabling Bundle Analyzer'); + const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -var pluginArray = []; + pluginArray.push(new BundleAnalyzerPlugin({ + // Can be `server`, `static` or `disabled`. + // In `server` mode analyzer will start HTTP server to show bundle report. + // In `static` mode single HTML file with bundle report will be generated. + // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting + // `generateStatsFile` to `true`. + analyzerMode: 'static', + // Host that will be used in `server` mode to start HTTP server. + analyzerHost: '127.0.0.1', + // Port that will be used in `server` mode to start HTTP server. + analyzerPort: 8888, + // Path to bundle report file that will be generated in `static` mode. + // Relative to bundles output directory. + reportFilename: 'bundle_report.html', + // Module sizes to show in report by default. + // Should be one of `stat`, `parsed` or `gzip`. + // See "Definitions" section for more information. + defaultSizes: 'parsed', + // Automatically open report in default browser + openAnalyzer: true, + // If `true`, Webpack Stats JSON file will be generated in bundles output directory + generateStatsFile: false, + // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`. + // Relative to bundles output directory. + statsFilename: 'stats.json', + // Options for `stats.toJson()` method. + // For example you can exclude sources of your modules from stats file with `source: false` option. + // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21 + statsOptions: null, + // Log level. Can be 'info', 'warn', 'error' or 'silent'. + logLevel: 'info' + })); + }*/ -var sourceMapType = 'source-map'; - -if (process.env.NODE_ENV !== 'development') { - -/* - console.log('Development environment detected, enabling Bundle Analyzer'); - - var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; - - pluginArray.push(new BundleAnalyzerPlugin({ - // Can be `server`, `static` or `disabled`. - // In `server` mode analyzer will start HTTP server to show bundle report. - // In `static` mode single HTML file with bundle report will be generated. - // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting `generateStatsFile` to `true`. - analyzerMode: 'static', - // Host that will be used in `server` mode to start HTTP server. - analyzerHost: '127.0.0.1', - // Port that will be used in `server` mode to start HTTP server. - analyzerPort: 8888, - // Path to bundle report file that will be generated in `static` mode. - // Relative to bundles output directory. - reportFilename: 'bundle_report.html', - // Module sizes to show in report by default. - // Should be one of `stat`, `parsed` or `gzip`. - // See "Definitions" section for more information. - defaultSizes: 'parsed', - // Automatically open report in default browser - openAnalyzer: true, - // If `true`, Webpack Stats JSON file will be generated in bundles output directory - generateStatsFile: false, - // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`. - // Relative to bundles output directory. - statsFilename: 'stats.json', - // Options for `stats.toJson()` method. - // For example you can exclude sources of your modules from stats file with `source: false` option. - // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21 - statsOptions: null, - // Log level. Can be 'info', 'warn', 'error' or 'silent'. - logLevel: 'info' - })); -*/ - -} - -var jq = new webpack.ProvidePlugin({ - $: "jquery", - jQuery: "jquery", - "window.jQuery": "jquery'", - "window.$": "jquery" -}); - -pluginArray.push(jq); +pluginArray.push(new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery', + 'window.$': 'jquery' +})); // Strip all locales except the ones defined in lib/language.js // (“en” is built into Moment and can’t be removed, 'dk' is not defined in moment) - var momentLocales = new MomentLocalesPlugin({ - localesToKeep: ['bg', 'cs', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'it', 'ko', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'zh_cn', 'zh_tw'], - }) ; -pluginArray.push(momentLocales); - +pluginArray.push(new MomentLocalesPlugin({ + localesToKeep: ['bg', 'cs', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'it', 'ko', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru', + 'sk', 'sv', 'zh_cn', 'zh_tw'], +})); module.exports = { - context: path.resolve(__dirname, '.'), - entry: { - app: './bundle/bundle.source.js' - }, - output: { - path: path.resolve(__dirname, './tmp'), - publicPath: '/', - filename: 'js/bundle.js', - sourceMapFilename: "js/bundle.js.map", + context: path.resolve(__dirname, '.'), + entry: { + app: './bundle/bundle.source.js' + }, + output: { + path: path.resolve(__dirname, './tmp'), + publicPath: '/', + filename: 'js/bundle.js', + sourceMapFilename: 'js/bundle.js.map', + }, + devtool: sourceMapType, + optimization: { + minimizer: [ + new TerserPlugin( { + cache: true, + parallel: true, + sourceMap: true, // Must be set to true if using source-maps in production + terserOptions: { + ie8: false, + safari10: false + // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions + } + } ), + ], + }, + plugins: pluginArray, + module: { + rules: [{ + test: /\.(jpe?g|png|gif)$/i, + loader: 'file-loader', + query: { + name: '[name].[ext]', + outputPath: 'images/' + //the images will be emmited to public/assets/images/ folder + //the images will be put in the DOM