summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2020-08-31 21:13:07 +0530
committerSunil Shetye2021-04-11 21:23:03 +0530
commit9bec162439c87241a94a4d1b93c62a262b8406ee (patch)
tree562de622bc823de42d0311877229e03c54eacd3e
parent4d7b98da44c89db08e415b11c521f85e16b6a02a (diff)
downloadCommon-Interface-Project-9bec162439c87241a94a4d1b93c62a262b8406ee.tar.gz
Common-Interface-Project-9bec162439c87241a94a4d1b93c62a262b8406ee.tar.bz2
Common-Interface-Project-9bec162439c87241a94a4d1b93c62a262b8406ee.zip
adding frontend files
-rw-r--r--blocks/eda-frontend/.dockerignore1
-rw-r--r--blocks/eda-frontend/.eslintignore15
-rw-r--r--blocks/eda-frontend/.eslintrc.json35
-rw-r--r--blocks/eda-frontend/.gitignore27
-rw-r--r--blocks/eda-frontend/Dockerfile7
-rw-r--r--blocks/eda-frontend/README.md34
-rw-r--r--blocks/eda-frontend/package-lock.json14636
-rw-r--r--blocks/eda-frontend/package.json68
-rw-r--r--blocks/eda-frontend/public/favicon.icobin0 -> 1150 bytes
-rw-r--r--blocks/eda-frontend/public/index.html41
-rw-r--r--blocks/eda-frontend/public/manifest.json15
-rw-r--r--blocks/eda-frontend/src/App.js80
-rw-r--r--blocks/eda-frontend/src/App.test.js15
-rw-r--r--blocks/eda-frontend/src/__snapshots__/App.test.js.snap7
-rw-r--r--blocks/eda-frontend/src/components/Dashboard/DashboardHome.js93
-rw-r--r--blocks/eda-frontend/src/components/Dashboard/DashboardSidebar.js133
-rw-r--r--blocks/eda-frontend/src/components/Dashboard/ProgressPanel.js128
-rw-r--r--blocks/eda-frontend/src/components/Dashboard/SchematicCard.js196
-rw-r--r--blocks/eda-frontend/src/components/Dashboard/SchematicsList.js112
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/ComponentProperties.js90
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/ComponentSidebar.js298
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Header.js361
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentDrag.js737
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentParametersData.js378
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/KeyboardShorcuts.js63
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/SchematicEditor.css99
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/SideBar.js97
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/SvgParser.js186
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/Helper/ToolbarTools.js885
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/PropertiesSidebar.js172
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/RightSidebar.js78
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js468
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/SideComp.js97
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/SimulationProperties.js757
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/SimulationScreen.js375
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js541
-rw-r--r--blocks/eda-frontend/src/components/Shared/Graph.js160
-rw-r--r--blocks/eda-frontend/src/components/Shared/Layout.js73
-rw-r--r--blocks/eda-frontend/src/components/Shared/LayoutMain.js30
-rw-r--r--blocks/eda-frontend/src/components/Shared/LayoutSidebar.js76
-rw-r--r--blocks/eda-frontend/src/components/Shared/Navbar.js252
-rw-r--r--blocks/eda-frontend/src/components/Simulator/Editor.js36
-rw-r--r--blocks/eda-frontend/src/components/Simulator/NetlistUpload.js156
-rw-r--r--blocks/eda-frontend/src/components/Simulator/SimulationScreen.js360
-rw-r--r--blocks/eda-frontend/src/components/Simulator/textToFile.js10
-rw-r--r--blocks/eda-frontend/src/index.css9
-rw-r--r--blocks/eda-frontend/src/index.js26
-rw-r--r--blocks/eda-frontend/src/pages/Dashboard.js54
-rw-r--r--blocks/eda-frontend/src/pages/Gallery.js147
-rw-r--r--blocks/eda-frontend/src/pages/Home.js59
-rw-r--r--blocks/eda-frontend/src/pages/Login.js193
-rw-r--r--blocks/eda-frontend/src/pages/NotFound.js35
-rw-r--r--blocks/eda-frontend/src/pages/SchematiEditor.js85
-rw-r--r--blocks/eda-frontend/src/pages/Simulator.js218
-rw-r--r--blocks/eda-frontend/src/pages/signUp.js193
-rw-r--r--blocks/eda-frontend/src/redux/actions/actions.js47
-rw-r--r--blocks/eda-frontend/src/redux/actions/authActions.js234
-rw-r--r--blocks/eda-frontend/src/redux/actions/componentPropertiesActions.js30
-rw-r--r--blocks/eda-frontend/src/redux/actions/dashboardActions.js53
-rw-r--r--blocks/eda-frontend/src/redux/actions/index.js8
-rw-r--r--blocks/eda-frontend/src/redux/actions/netlistActions.js51
-rw-r--r--blocks/eda-frontend/src/redux/actions/saveSchematicActions.js182
-rw-r--r--blocks/eda-frontend/src/redux/actions/schematicEditorActions.js85
-rw-r--r--blocks/eda-frontend/src/redux/actions/simulationActions.js31
-rw-r--r--blocks/eda-frontend/src/redux/reducers/authReducer.js91
-rw-r--r--blocks/eda-frontend/src/redux/reducers/componentPropertiesReducer.js41
-rw-r--r--blocks/eda-frontend/src/redux/reducers/dashboardReducer.js19
-rw-r--r--blocks/eda-frontend/src/redux/reducers/index.js17
-rw-r--r--blocks/eda-frontend/src/redux/reducers/netlistReducer.js47
-rw-r--r--blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js73
-rw-r--r--blocks/eda-frontend/src/redux/reducers/schematicEditorReducer.js50
-rw-r--r--blocks/eda-frontend/src/redux/reducers/simulationReducer.js40
-rw-r--r--blocks/eda-frontend/src/redux/store.js8
-rw-r--r--blocks/eda-frontend/src/serviceWorker.js141
-rw-r--r--blocks/eda-frontend/src/setupTests.js5
-rw-r--r--blocks/eda-frontend/src/static/dot.gifbin0 -> 517 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery0.pngbin0 -> 14522 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery1.pngbin0 -> 17623 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery2.pngbin0 -> 20015 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery3.pngbin0 -> 28857 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery4.pngbin0 -> 14589 bytes
-rw-r--r--blocks/eda-frontend/src/static/gallery/gallery5.pngbin0 -> 16268 bytes
-rw-r--r--blocks/eda-frontend/src/static/google.pngbin0 -> 1594 bytes
-rw-r--r--blocks/eda-frontend/src/static/grid.gifbin0 -> 58 bytes
-rw-r--r--blocks/eda-frontend/src/static/logo.pngbin0 -> 37915 bytes
-rw-r--r--blocks/eda-frontend/src/theme.js22
-rw-r--r--blocks/eda-frontend/src/utils/Api.js7
-rw-r--r--blocks/eda-frontend/src/utils/GallerySchSample.js54
88 files changed, 24833 insertions, 0 deletions
diff --git a/blocks/eda-frontend/.dockerignore b/blocks/eda-frontend/.dockerignore
new file mode 100644
index 00000000..c2658d7d
--- /dev/null
+++ b/blocks/eda-frontend/.dockerignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/blocks/eda-frontend/.eslintignore b/blocks/eda-frontend/.eslintignore
new file mode 100644
index 00000000..d6c29ac1
--- /dev/null
+++ b/blocks/eda-frontend/.eslintignore
@@ -0,0 +1,15 @@
+
+/build/**
+/coverage/**
+/docs/**
+/jsdoc/**
+/templates/**
+/tests/bench/**
+/tests/fixtures/**
+/tests/performance/**
+/tmp/**
+/tools/internal-rules/node_modules/**
+test.js
+!.eslintrc.js
+node_modules/**
+/node_modules/**
diff --git a/blocks/eda-frontend/.eslintrc.json b/blocks/eda-frontend/.eslintrc.json
new file mode 100644
index 00000000..0cf9d84b
--- /dev/null
+++ b/blocks/eda-frontend/.eslintrc.json
@@ -0,0 +1,35 @@
+{
+ "parser": "babel-eslint",
+ "env": {
+ "browser": true,
+ "es6": true,
+ "commonjs": true
+ },
+ "extends": [
+ "plugin:react/recommended",
+ "standard"
+ ],
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly"
+ },
+ "parserOptions": {
+ "ecmaFeatures": {
+ "jsx": true
+ },
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "plugins": [
+ "react"
+ ],
+ "rules": {
+ "react/prop-types": "warn"
+ },
+
+ "settings": {
+ "react": {
+ "version": "latest"
+ }
+ }
+}
diff --git a/blocks/eda-frontend/.gitignore b/blocks/eda-frontend/.gitignore
new file mode 100644
index 00000000..0789c1ed
--- /dev/null
+++ b/blocks/eda-frontend/.gitignore
@@ -0,0 +1,27 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+.svg
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+.env.prod
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+#bundle-parcel
+/dist
+/.cache
diff --git a/blocks/eda-frontend/Dockerfile b/blocks/eda-frontend/Dockerfile
new file mode 100644
index 00000000..0a49e4d5
--- /dev/null
+++ b/blocks/eda-frontend/Dockerfile
@@ -0,0 +1,7 @@
+FROM node:10-alpine3.11
+
+RUN mkdir /code
+WORKDIR /code
+
+COPY package.json /code/package.json
+COPY package-lock.json /code/package-lock.json
diff --git a/blocks/eda-frontend/README.md b/blocks/eda-frontend/README.md
new file mode 100644
index 00000000..65e364fc
--- /dev/null
+++ b/blocks/eda-frontend/README.md
@@ -0,0 +1,34 @@
+# EDA Frontend
+
+### React application for EDA frontend
+
+<hr>
+
+## Prerequisites
+
+#### Install Node JS
+Refer to https://nodejs.org/en/ to install nodejs
+
+<hr>
+
+## Cloning and Running the Application in local
+
+Clone the project into local
+
+#### Install all the npm packages.
+Go into the project folder and type the following command to install all npm packages and dependencies
+
+```bash
+npm install
+```
+
+In order to run the application Type the following command
+
+```bash
+npm start
+```
+Runs the application in the development mode.<br />
+Open **[localhost:3000](http://localhost:3000)** to view it in the browser.
+
+The page will reload if you make edits.<br />
+You will also see any lint errors in the console.
diff --git a/blocks/eda-frontend/package-lock.json b/blocks/eda-frontend/package-lock.json
new file mode 100644
index 00000000..ef883fb2
--- /dev/null
+++ b/blocks/eda-frontend/package-lock.json
@@ -0,0 +1,14636 @@
+{
+ "name": "eda-frontend",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz",
+ "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==",
+ "requires": {
+ "browserslist": "^4.11.1",
+ "invariant": "^2.2.4",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz",
+ "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.6",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helpers": "^7.9.6",
+ "@babel/parser": "^7.9.6",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+ "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
+ "requires": {
+ "@babel/types": "^7.9.6",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
+ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
+ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz",
+ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/types": "^7.9.0"
+ }
+ },
+ "@babel/helper-builder-react-jsx-experimental": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz",
+ "integrity": "sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/types": "^7.9.5"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz",
+ "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==",
+ "requires": {
+ "@babel/compat-data": "^7.9.6",
+ "browserslist": "^4.11.1",
+ "invariant": "^2.2.4",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz",
+ "integrity": "sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==",
+ "requires": {
+ "@babel/helper-function-name": "^7.9.5",
+ "@babel/helper-member-expression-to-functions": "^7.8.3",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.9.6",
+ "@babel/helper-split-export-declaration": "^7.8.3"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
+ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-regex": "^7.8.3",
+ "regexpu-core": "^4.7.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
+ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/types": "^7.8.3",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
+ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
+ "requires": {
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
+ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.9.5"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
+ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
+ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.6",
+ "@babel/helper-simple-access": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/template": "^7.8.6",
+ "@babel/types": "^7.9.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ },
+ "@babel/helper-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
+ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
+ "requires": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
+ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-wrap-function": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz",
+ "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==",
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.8.3",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
+ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
+ "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.9.0",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
+ "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q=="
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
+ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz",
+ "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz",
+ "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-decorators": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
+ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz",
+ "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz",
+ "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-transform-parameters": "^7.9.5"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz",
+ "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz",
+ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.8",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz",
+ "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz",
+ "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
+ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz",
+ "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
+ "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz",
+ "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
+ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
+ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
+ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
+ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz",
+ "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-define-map": "^7.8.3",
+ "@babel/helper-function-name": "^7.9.5",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.6",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
+ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz",
+ "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
+ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
+ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
+ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz",
+ "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-flow": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
+ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
+ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
+ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
+ "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz",
+ "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz",
+ "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-simple-access": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz",
+ "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.8.3",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
+ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
+ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
+ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
+ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz",
+ "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
+ "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-constant-elements": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.9.0.tgz",
+ "integrity": "sha512-wXMXsToAUOxJuBBEHajqKLFWcCkOSLshTI2ChCFFj1zDd7od4IOxiwLCOObNUvOpkxLpjIuaIdBMmNt6ocCPAw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-display-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz",
+ "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.9.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz",
+ "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==",
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.9.0",
+ "@babel/helper-builder-react-jsx-experimental": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-development": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz",
+ "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==",
+ "requires": {
+ "@babel/helper-builder-react-jsx-experimental": "^7.9.0",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz",
+ "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz",
+ "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
+ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
+ "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz",
+ "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.1"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
+ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
+ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
+ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-regex": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
+ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
+ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz",
+ "integrity": "sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.9.6",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-typescript": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
+ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz",
+ "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==",
+ "requires": {
+ "@babel/compat-data": "^7.9.6",
+ "@babel/helper-compilation-targets": "^7.9.6",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
+ "@babel/plugin-proposal-dynamic-import": "^7.8.3",
+ "@babel/plugin-proposal-json-strings": "^7.8.3",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-proposal-numeric-separator": "^7.8.3",
+ "@babel/plugin-proposal-object-rest-spread": "^7.9.6",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-proposal-optional-chaining": "^7.9.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3",
+ "@babel/plugin-transform-arrow-functions": "^7.8.3",
+ "@babel/plugin-transform-async-to-generator": "^7.8.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
+ "@babel/plugin-transform-block-scoping": "^7.8.3",
+ "@babel/plugin-transform-classes": "^7.9.5",
+ "@babel/plugin-transform-computed-properties": "^7.8.3",
+ "@babel/plugin-transform-destructuring": "^7.9.5",
+ "@babel/plugin-transform-dotall-regex": "^7.8.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.8.3",
+ "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
+ "@babel/plugin-transform-for-of": "^7.9.0",
+ "@babel/plugin-transform-function-name": "^7.8.3",
+ "@babel/plugin-transform-literals": "^7.8.3",
+ "@babel/plugin-transform-member-expression-literals": "^7.8.3",
+ "@babel/plugin-transform-modules-amd": "^7.9.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.9.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.9.6",
+ "@babel/plugin-transform-modules-umd": "^7.9.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
+ "@babel/plugin-transform-new-target": "^7.8.3",
+ "@babel/plugin-transform-object-super": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.9.5",
+ "@babel/plugin-transform-property-literals": "^7.8.3",
+ "@babel/plugin-transform-regenerator": "^7.8.7",
+ "@babel/plugin-transform-reserved-words": "^7.8.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.8.3",
+ "@babel/plugin-transform-spread": "^7.8.3",
+ "@babel/plugin-transform-sticky-regex": "^7.8.3",
+ "@babel/plugin-transform-template-literals": "^7.8.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.8.4",
+ "@babel/plugin-transform-unicode-regex": "^7.8.3",
+ "@babel/preset-modules": "^0.1.3",
+ "@babel/types": "^7.9.6",
+ "browserslist": "^4.11.1",
+ "core-js-compat": "^3.6.2",
+ "invariant": "^2.2.2",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz",
+ "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/preset-react": {
+ "version": "7.9.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz",
+ "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-transform-react-display-name": "^7.8.3",
+ "@babel/plugin-transform-react-jsx": "^7.9.4",
+ "@babel/plugin-transform-react-jsx-development": "^7.9.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.9.0",
+ "@babel/plugin-transform-react-jsx-source": "^7.9.0"
+ }
+ },
+ "@babel/preset-typescript": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz",
+ "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-transform-typescript": "^7.9.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
+ "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz",
+ "integrity": "sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==",
+ "requires": {
+ "core-js-pure": "^3.0.0",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.6",
+ "@babel/types": "^7.8.6"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+ "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.6",
+ "@babel/helper-function-name": "^7.9.5",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.9.5",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@cnakazawa/watch": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
+ "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
+ "requires": {
+ "exec-sh": "^0.3.2",
+ "minimist": "^1.2.0"
+ }
+ },
+ "@csstools/convert-colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
+ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
+ },
+ "@csstools/normalize.css": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
+ "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
+ },
+ "@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "@hapi/address": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+ "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
+ },
+ "@hapi/bourne": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
+ },
+ "@hapi/hoek": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
+ "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
+ },
+ "@hapi/joi": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+ "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+ "requires": {
+ "@hapi/address": "2.x.x",
+ "@hapi/bourne": "1.x.x",
+ "@hapi/hoek": "8.x.x",
+ "@hapi/topo": "3.x.x"
+ }
+ },
+ "@hapi/topo": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+ "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+ "requires": {
+ "@hapi/hoek": "^8.3.0"
+ }
+ },
+ "@jest/console": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
+ "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
+ "requires": {
+ "@jest/source-map": "^24.9.0",
+ "chalk": "^2.0.1",
+ "slash": "^2.0.0"
+ }
+ },
+ "@jest/core": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
+ "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
+ "requires": {
+ "@jest/console": "^24.7.1",
+ "@jest/reporters": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.15",
+ "jest-changed-files": "^24.9.0",
+ "jest-config": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve": "^24.9.0",
+ "jest-resolve-dependencies": "^24.9.0",
+ "jest-runner": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
+ "jest-watcher": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "p-each-series": "^1.0.0",
+ "realpath-native": "^1.1.0",
+ "rimraf": "^2.5.4",
+ "slash": "^2.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "@jest/environment": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
+ "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
+ "requires": {
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0"
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
+ "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0"
+ }
+ },
+ "@jest/reporters": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
+ "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
+ "requires": {
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "istanbul-lib-coverage": "^2.0.2",
+ "istanbul-lib-instrument": "^3.0.1",
+ "istanbul-lib-report": "^2.0.4",
+ "istanbul-lib-source-maps": "^3.0.1",
+ "istanbul-reports": "^2.2.6",
+ "jest-haste-map": "^24.9.0",
+ "jest-resolve": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.6.0",
+ "node-notifier": "^5.4.2",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0",
+ "string-length": "^2.0.0"
+ }
+ },
+ "@jest/source-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
+ "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
+ "requires": {
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.1.15",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ }
+ }
+ },
+ "@jest/test-result": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
+ "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/istanbul-lib-coverage": "^2.0.0"
+ }
+ },
+ "@jest/test-sequencer": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
+ "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
+ "requires": {
+ "@jest/test-result": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-runner": "^24.9.0",
+ "jest-runtime": "^24.9.0"
+ }
+ },
+ "@jest/transform": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
+ "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^24.9.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.15",
+ "jest-haste-map": "^24.9.0",
+ "jest-regex-util": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "pirates": "^4.0.1",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "2.4.1"
+ }
+ },
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@material-ui/core": {
+ "version": "4.9.14",
+ "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.14.tgz",
+ "integrity": "sha512-71oYrOpInx5honJ9GzZlygPjmsFhn7Bui61/SWLJsPTkMnfvuZfU3qVqlEHjXyDsnZ+uKmLAIdsrOYnphJxxXw==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/styles": "^4.9.14",
+ "@material-ui/system": "^4.9.14",
+ "@material-ui/types": "^5.1.0",
+ "@material-ui/utils": "^4.9.12",
+ "@types/react-transition-group": "^4.2.0",
+ "clsx": "^1.0.4",
+ "hoist-non-react-statics": "^3.3.2",
+ "popper.js": "^1.16.1-lts",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0",
+ "react-transition-group": "^4.4.0"
+ }
+ },
+ "@material-ui/icons": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz",
+ "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==",
+ "requires": {
+ "@babel/runtime": "^7.4.4"
+ }
+ },
+ "@material-ui/lab": {
+ "version": "4.0.0-alpha.53",
+ "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.53.tgz",
+ "integrity": "sha512-D2lNbMj6ZcTCbI9yPnlhGW6D/STI2RRTdXFXCKrfWGAFWV27xevNlLNwBuk++mQ5TH9mcJAMI24ej15ztOZXCQ==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/utils": "^4.9.6",
+ "clsx": "^1.0.4",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0"
+ }
+ },
+ "@material-ui/styles": {
+ "version": "4.9.14",
+ "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.14.tgz",
+ "integrity": "sha512-zecwWKgRU2VzdmutNovPB4s5LKI0TWyZKc/AHfPu9iY8tg4UoLjpa4Rn9roYrRfuTbBZHI6b0BXcQ8zkis0nzQ==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@emotion/hash": "^0.8.0",
+ "@material-ui/types": "^5.1.0",
+ "@material-ui/utils": "^4.9.6",
+ "clsx": "^1.0.4",
+ "csstype": "^2.5.2",
+ "hoist-non-react-statics": "^3.3.2",
+ "jss": "^10.0.3",
+ "jss-plugin-camel-case": "^10.0.3",
+ "jss-plugin-default-unit": "^10.0.3",
+ "jss-plugin-global": "^10.0.3",
+ "jss-plugin-nested": "^10.0.3",
+ "jss-plugin-props-sort": "^10.0.3",
+ "jss-plugin-rule-value-function": "^10.0.3",
+ "jss-plugin-vendor-prefixer": "^10.0.3",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "@material-ui/system": {
+ "version": "4.9.14",
+ "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.14.tgz",
+ "integrity": "sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/utils": "^4.9.6",
+ "csstype": "^2.5.2",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "@material-ui/types": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
+ "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A=="
+ },
+ "@material-ui/utils": {
+ "version": "4.9.12",
+ "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.9.12.tgz",
+ "integrity": "sha512-/0rgZPEOcZq5CFA4+4n6Q6zk7fi8skHhH2Bcra8R3epoJEYy5PL55LuMazPtPH1oKeRausDV/Omz4BbgFsn1HQ==",
+ "requires": {
+ "@babel/runtime": "^7.4.4",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0"
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+ },
+ "@sheerun/mutationobserver-shim": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz",
+ "integrity": "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw=="
+ },
+ "@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
+ "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig=="
+ },
+ "@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz",
+ "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ=="
+ },
+ "@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz",
+ "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w=="
+ },
+ "@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz",
+ "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w=="
+ },
+ "@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz",
+ "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w=="
+ },
+ "@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz",
+ "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w=="
+ },
+ "@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz",
+ "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw=="
+ },
+ "@svgr/babel-plugin-transform-svg-component": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz",
+ "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw=="
+ },
+ "@svgr/babel-preset": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz",
+ "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==",
+ "requires": {
+ "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3",
+ "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0",
+ "@svgr/babel-plugin-transform-svg-component": "^4.2.0"
+ }
+ },
+ "@svgr/core": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz",
+ "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==",
+ "requires": {
+ "@svgr/plugin-jsx": "^4.3.3",
+ "camelcase": "^5.3.1",
+ "cosmiconfig": "^5.2.1"
+ }
+ },
+ "@svgr/hast-util-to-babel-ast": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz",
+ "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==",
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@svgr/plugin-jsx": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz",
+ "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==",
+ "requires": {
+ "@babel/core": "^7.4.5",
+ "@svgr/babel-preset": "^4.3.3",
+ "@svgr/hast-util-to-babel-ast": "^4.3.2",
+ "svg-parser": "^2.0.0"
+ }
+ },
+ "@svgr/plugin-svgo": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz",
+ "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==",
+ "requires": {
+ "cosmiconfig": "^5.2.1",
+ "merge-deep": "^3.0.2",
+ "svgo": "^1.2.2"
+ }
+ },
+ "@svgr/webpack": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz",
+ "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==",
+ "requires": {
+ "@babel/core": "^7.4.5",
+ "@babel/plugin-transform-react-constant-elements": "^7.0.0",
+ "@babel/preset-env": "^7.4.5",
+ "@babel/preset-react": "^7.0.0",
+ "@svgr/core": "^4.3.3",
+ "@svgr/plugin-jsx": "^4.3.3",
+ "@svgr/plugin-svgo": "^4.3.1",
+ "loader-utils": "^1.2.3"
+ }
+ },
+ "@testing-library/dom": {
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.16.0.tgz",
+ "integrity": "sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==",
+ "requires": {
+ "@babel/runtime": "^7.8.4",
+ "@sheerun/mutationobserver-shim": "^0.3.2",
+ "@types/testing-library__dom": "^6.12.1",
+ "aria-query": "^4.0.2",
+ "dom-accessibility-api": "^0.3.0",
+ "pretty-format": "^25.1.0",
+ "wait-for-expect": "^3.0.2"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
+ "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^3.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "15.0.5",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
+ "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "pretty-format": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz",
+ "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==",
+ "requires": {
+ "@jest/types": "^25.5.0",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^16.12.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@testing-library/jest-dom": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz",
+ "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==",
+ "requires": {
+ "@babel/runtime": "^7.5.1",
+ "chalk": "^2.4.1",
+ "css": "^2.2.3",
+ "css.escape": "^1.5.1",
+ "jest-diff": "^24.0.0",
+ "jest-matcher-utils": "^24.0.0",
+ "lodash": "^4.17.11",
+ "pretty-format": "^24.0.0",
+ "redent": "^3.0.0"
+ }
+ },
+ "@testing-library/react": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz",
+ "integrity": "sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==",
+ "requires": {
+ "@babel/runtime": "^7.8.4",
+ "@testing-library/dom": "^6.15.0",
+ "@types/testing-library__react": "^9.1.2"
+ }
+ },
+ "@testing-library/user-event": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz",
+ "integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA=="
+ },
+ "@types/babel__core": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
+ "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==",
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz",
+ "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
+ "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz",
+ "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==",
+ "requires": {
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ },
+ "@types/eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag=="
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz",
+ "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w=="
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
+ "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "*",
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
+ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA=="
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
+ },
+ "@types/node": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz",
+ "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA=="
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ },
+ "@types/prop-types": {
+ "version": "15.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
+ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "@types/raf": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz",
+ "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw=="
+ },
+ "@types/react": {
+ "version": "16.9.35",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
+ "integrity": "sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ==",
+ "requires": {
+ "@types/prop-types": "*",
+ "csstype": "^2.2.0"
+ }
+ },
+ "@types/react-dom": {
+ "version": "16.9.8",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz",
+ "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/react-transition-group": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz",
+ "integrity": "sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/stack-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw=="
+ },
+ "@types/testing-library__dom": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz",
+ "integrity": "sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA==",
+ "requires": {
+ "pretty-format": "^24.3.0"
+ }
+ },
+ "@types/testing-library__react": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.3.tgz",
+ "integrity": "sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==",
+ "requires": {
+ "@types/react-dom": "*",
+ "@types/testing-library__dom": "*",
+ "pretty-format": "^25.1.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
+ "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^3.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "15.0.5",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
+ "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "pretty-format": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz",
+ "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==",
+ "requires": {
+ "@jest/types": "^25.5.0",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^16.12.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
+ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "2.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.33.0.tgz",
+ "integrity": "sha512-QV6P32Btu1sCI/kTqjTNI/8OpCYyvlGjW5vD8MpTIg+HGE5S88HtT1G+880M4bXlvXj/NjsJJG0aGcVh0DdbeQ==",
+ "requires": {
+ "@typescript-eslint/experimental-utils": "2.33.0",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.0.0",
+ "tsutils": "^3.17.1"
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "2.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.33.0.tgz",
+ "integrity": "sha512-qzPM2AuxtMrRq78LwyZa8Qn6gcY8obkIrBs1ehqmQADwkYzTE1Pb4y2W+U3rE/iFkSWcWHG2LS6MJfj6SmHApg==",
+ "requires": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/typescript-estree": "2.33.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "2.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.33.0.tgz",
+ "integrity": "sha512-AUtmwUUhJoH6yrtxZMHbRUEMsC2G6z5NSxg9KsROOGqNXasM71I8P2NihtumlWTUCRld70vqIZ6Pm4E5PAziEA==",
+ "requires": {
+ "@types/eslint-visitor-keys": "^1.0.0",
+ "@typescript-eslint/experimental-utils": "2.33.0",
+ "@typescript-eslint/typescript-estree": "2.33.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "2.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.33.0.tgz",
+ "integrity": "sha512-d8rY6/yUxb0+mEwTShCQF2zYQdLlqihukNfG9IUlLYz5y1CH6G/9XYbrxQLq3Z14RNvkCC6oe+OcFlyUpwUbkg==",
+ "requires": {
+ "debug": "^4.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "glob": "^7.1.6",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+ }
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+ "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+ "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ=="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+ "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA=="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+ "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q=="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+ "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+ "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow=="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+ "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "mamacro": "^0.0.3"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+ "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ=="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+ "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+ "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+ "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+ "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw=="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+ "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/helper-wasm-section": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-opt": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+ "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+ "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+ "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+ "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-code-frame": "1.8.5",
+ "@webassemblyjs/helper-fsm": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+ "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "abab": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "ace-builds": {
+ "version": "1.4.11",
+ "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.11.tgz",
+ "integrity": "sha512-keACH1d7MvAh72fE/us36WQzOFQPJbHphNpj33pXwVZOM84pTWcdFzIAvngxOGIGLTm7gtUP2eJ4Ku6VaPo8bw=="
+ },
+ "acorn": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
+ "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ=="
+ },
+ "acorn-globals": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
+ "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ=="
+ },
+ "acorn-walk": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
+ },
+ "address": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
+ "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA=="
+ },
+ "adjust-sourcemap-loader": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz",
+ "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==",
+ "requires": {
+ "assert": "1.4.1",
+ "camelcase": "5.0.0",
+ "loader-utils": "1.2.3",
+ "object-path": "0.11.4",
+ "regex-parser": "2.2.10"
+ },
+ "dependencies": {
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA=="
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "aggregate-error": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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=="
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
+ },
+ "ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "requires": {
+ "type-fest": "^0.11.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
+ }
+ }
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "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"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "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=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "aria-query": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.0.2.tgz",
+ "integrity": "sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w==",
+ "requires": {
+ "@babel/runtime": "^7.7.4",
+ "@babel/runtime-corejs3": "^7.7.4"
+ }
+ },
+ "arity-n": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
+ "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U="
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
+ },
+ "array-includes": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
+ "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0",
+ "is-string": "^1.0.5"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "array.prototype.flat": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
+ "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "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"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "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=="
+ },
+ "autoprefixer": {
+ "version": "9.7.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz",
+ "integrity": "sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ==",
+ "requires": {
+ "browserslist": "^4.11.1",
+ "caniuse-lite": "^1.0.30001039",
+ "chalk": "^2.4.2",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.27",
+ "postcss-value-parser": "^4.0.3"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ }
+ }
+ },
+ "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="
+ },
+ "aws4": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
+ },
+ "axios": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+ "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
+ "requires": {
+ "follow-redirects": "1.5.10"
+ }
+ },
+ "axobject-query": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
+ "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ=="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "babel-extract-comments": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz",
+ "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==",
+ "requires": {
+ "babylon": "^6.18.0"
+ }
+ },
+ "babel-jest": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
+ "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
+ "requires": {
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/babel__core": "^7.1.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "babel-preset-jest": "^24.9.0",
+ "chalk": "^2.4.2",
+ "slash": "^2.0.0"
+ }
+ },
+ "babel-loader": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
+ "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
+ "requires": {
+ "find-cache-dir": "^2.1.0",
+ "loader-utils": "^1.4.0",
+ "mkdirp": "^0.5.3",
+ "pify": "^4.0.1",
+ "schema-utils": "^2.6.5"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ }
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
+ "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "find-up": "^3.0.0",
+ "istanbul-lib-instrument": "^3.3.0",
+ "test-exclude": "^5.2.3"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ }
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
+ "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
+ "requires": {
+ "@types/babel__traverse": "^7.0.6"
+ }
+ },
+ "babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+ "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.7.2"
+ }
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ }
+ }
+ },
+ "babel-plugin-named-asset-import": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz",
+ "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA=="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+ "babel-runtime": "^6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-remove-prop-types": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA=="
+ },
+ "babel-preset-jest": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
+ "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
+ "requires": {
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+ "babel-plugin-jest-hoist": "^24.9.0"
+ }
+ },
+ "babel-preset-react-app": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz",
+ "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==",
+ "requires": {
+ "@babel/core": "7.9.0",
+ "@babel/plugin-proposal-class-properties": "7.8.3",
+ "@babel/plugin-proposal-decorators": "7.8.3",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3",
+ "@babel/plugin-proposal-numeric-separator": "7.8.3",
+ "@babel/plugin-proposal-optional-chaining": "7.9.0",
+ "@babel/plugin-transform-flow-strip-types": "7.9.0",
+ "@babel/plugin-transform-react-display-name": "7.8.3",
+ "@babel/plugin-transform-runtime": "7.9.0",
+ "@babel/preset-env": "7.9.0",
+ "@babel/preset-react": "7.9.1",
+ "@babel/preset-typescript": "7.9.0",
+ "@babel/runtime": "7.9.0",
+ "babel-plugin-macros": "2.8.0",
+ "babel-plugin-transform-react-remove-prop-types": "0.4.24"
+ },
+ "dependencies": {
+ "@babel/core": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
+ "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.0",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helpers": "^7.9.0",
+ "@babel/parser": "^7.9.0",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.9.0",
+ "@babel/types": "^7.9.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz",
+ "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==",
+ "requires": {
+ "@babel/compat-data": "^7.9.0",
+ "@babel/helper-compilation-targets": "^7.8.7",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
+ "@babel/plugin-proposal-dynamic-import": "^7.8.3",
+ "@babel/plugin-proposal-json-strings": "^7.8.3",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-proposal-numeric-separator": "^7.8.3",
+ "@babel/plugin-proposal-object-rest-spread": "^7.9.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-proposal-optional-chaining": "^7.9.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3",
+ "@babel/plugin-transform-arrow-functions": "^7.8.3",
+ "@babel/plugin-transform-async-to-generator": "^7.8.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
+ "@babel/plugin-transform-block-scoping": "^7.8.3",
+ "@babel/plugin-transform-classes": "^7.9.0",
+ "@babel/plugin-transform-computed-properties": "^7.8.3",
+ "@babel/plugin-transform-destructuring": "^7.8.3",
+ "@babel/plugin-transform-dotall-regex": "^7.8.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.8.3",
+ "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
+ "@babel/plugin-transform-for-of": "^7.9.0",
+ "@babel/plugin-transform-function-name": "^7.8.3",
+ "@babel/plugin-transform-literals": "^7.8.3",
+ "@babel/plugin-transform-member-expression-literals": "^7.8.3",
+ "@babel/plugin-transform-modules-amd": "^7.9.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.9.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.9.0",
+ "@babel/plugin-transform-modules-umd": "^7.9.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
+ "@babel/plugin-transform-new-target": "^7.8.3",
+ "@babel/plugin-transform-object-super": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.8.7",
+ "@babel/plugin-transform-property-literals": "^7.8.3",
+ "@babel/plugin-transform-regenerator": "^7.8.7",
+ "@babel/plugin-transform-reserved-words": "^7.8.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.8.3",
+ "@babel/plugin-transform-spread": "^7.8.3",
+ "@babel/plugin-transform-sticky-regex": "^7.8.3",
+ "@babel/plugin-transform-template-literals": "^7.8.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.8.4",
+ "@babel/plugin-transform-unicode-regex": "^7.8.3",
+ "@babel/preset-modules": "^0.1.3",
+ "@babel/types": "^7.9.0",
+ "browserslist": "^4.9.1",
+ "core-js-compat": "^3.6.2",
+ "invariant": "^2.2.2",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/preset-react": {
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz",
+ "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-transform-react-display-name": "^7.8.3",
+ "@babel/plugin-transform-react-jsx": "^7.9.1",
+ "@babel/plugin-transform-react-jsx-development": "^7.9.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.9.0",
+ "@babel/plugin-transform-react-jsx-source": "^7.9.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz",
+ "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ }
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
+ "bn.js": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA=="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+ },
+ "brace": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz",
+ "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg="
+ },
+ "brace-ace": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/brace-ace/-/brace-ace-0.9.2.tgz",
+ "integrity": "sha1-EWSMKF6JyeSEumy6lMpBQoxvyKE=",
+ "requires": {
+ "w3c-blob": "0.0.1"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "browserify-sign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz",
+ "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==",
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.2",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "~1.0.5"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
+ "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001043",
+ "electron-to-chromium": "^1.3.413",
+ "node-releases": "^1.1.53",
+ "pkg-up": "^2.0.0"
+ }
+ },
+ "bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "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="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cacache": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
+ "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
+ "requires": {
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.2",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "minipass": "^3.0.0",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "p-map": "^3.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.7.1",
+ "ssri": "^7.0.0",
+ "unique-filename": "^1.1.1"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "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=",
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+ },
+ "camel-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
+ "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
+ "requires": {
+ "pascal-case": "^3.1.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001061",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001061.tgz",
+ "integrity": "sha512-SMICCeiNvMZnyXpuoO+ot7FHpMVPlrsR+HmfByj6nY4xYDHXLqMTbgH7ecEkDNXWkH1vaip+ZS0D7VTXwM1KYQ=="
+ },
+ "canvg": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.6.tgz",
+ "integrity": "sha512-eFUy8R/4DgocR93LF8lr+YUxW4PYblUe/Q1gz2osk/cI5n8AsYdassvln0D9QPhLXQ6Lx7l8hwtT8FLvOn2Ihg==",
+ "requires": {
+ "@babel/runtime": "^7.6.3",
+ "@types/raf": "^3.4.0",
+ "core-js": "3",
+ "raf": "^3.4.1",
+ "rgbcolor": "^1.0.1",
+ "stackblur-canvas": "^2.0.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+ }
+ }
+ },
+ "capture-exit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "requires": {
+ "rsvp": "^4.8.4"
+ }
+ },
+ "case-sensitive-paths-webpack-plugin": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz",
+ "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+ },
+ "chart.js": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz",
+ "integrity": "sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ },
+ "chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+ "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+ "requires": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ }
+ },
+ "chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "chartjs-plugin-colorschemes": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chartjs-plugin-colorschemes/-/chartjs-plugin-colorschemes-0.4.0.tgz",
+ "integrity": "sha512-GUAulGFa6igdhi/xF9XopLJknwtXZT0wwEB+e/D4SJcRGY1HdwzX84pVn5BSpnk1idF6RJxZoA7w396R7BOE9A=="
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "classnames": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ },
+ "clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "requires": {
+ "source-map": "~0.6.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ },
+ "cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "clone-deep": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
+ "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
+ "requires": {
+ "for-own": "^0.1.3",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "lazy-cache": "^1.0.3",
+ "shallow-clone": "^0.1.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "clsx": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz",
+ "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA=="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "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="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
+ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "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==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "common-tags": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "compose-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
+ "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
+ "requires": {
+ "arity-n": "^1.0.4"
+ }
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "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==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "confusing-browser-globals": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz",
+ "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw=="
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ },
+ "core-js-compat": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
+ "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
+ "requires": {
+ "browserslist": "^4.8.5",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
+ }
+ }
+ },
+ "core-js-pure": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
+ "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA=="
+ },
+ "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="
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "source-map": "^0.6.1",
+ "source-map-resolve": "^0.5.2",
+ "urix": "^0.1.0"
+ }
+ },
+ "css-blank-pseudo": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
+ "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "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-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-has-pseudo": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
+ "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^5.0.0-rc.4"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "css-loader": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
+ "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.23",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.1.1",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.0.2",
+ "schema-utils": "^2.6.0"
+ },
+ "dependencies": {
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+ "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.16",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ }
+ }
+ },
+ "css-prefers-color-scheme": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
+ "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==",
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ }
+ },
+ "css-vendor": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
+ "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
+ "requires": {
+ "@babel/runtime": "^7.8.3",
+ "is-in-browser": "^1.0.2"
+ }
+ },
+ "css-what": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz",
+ "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw=="
+ },
+ "css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s="
+ },
+ "cssdb": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
+ "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "cssnano": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
+ },
+ "csso": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
+ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
+ "requires": {
+ "css-tree": "1.0.0-alpha.39"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.39",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
+ "requires": {
+ "mdn-data": "2.0.6",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA=="
+ }
+ }
+ },
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ },
+ "cssstyle": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "csstype": {
+ "version": "2.6.10",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
+ "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+ },
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
+ "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.2.0",
+ "whatwg-url": "^7.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-diff": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
+ "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ="
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "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="
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I="
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
+ },
+ "detect-port-alt": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
+ "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
+ "requires": {
+ "address": "^1.0.1",
+ "debug": "^2.6.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
+ },
+ "diff-sequences": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
+ "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew=="
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "dir-glob": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "requires": {
+ "arrify": "^1.0.1",
+ "path-type": "^3.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
+ },
+ "dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-accessibility-api": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz",
+ "integrity": "sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA=="
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-helpers": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
+ "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^2.6.7"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
+ },
+ "entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz",
+ "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw=="
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
+ "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "dot-prop": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
+ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "dotenv-expand": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
+ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.441",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.441.tgz",
+ "integrity": "sha512-leBfJwLuyGs1jEei2QioI+PjVMavmUIvPYidE8dCCYWLAq0uefhN3NYgDNb8WxD3uiUNnJ3ScMXg0upSlwySzQ=="
+ },
+ "elliptic": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
+ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
+ "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "requires": {
+ "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==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ },
+ "dependencies": {
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
+ }
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.53",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "eslint": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.3",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "eslint-config-react-app": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz",
+ "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==",
+ "requires": {
+ "confusing-browser-globals": "^1.0.9"
+ }
+ },
+ "eslint-config-standard": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz",
+ "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
+ "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
+ "requires": {
+ "debug": "^2.6.9",
+ "resolve": "^1.13.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-loader": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz",
+ "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==",
+ "requires": {
+ "fs-extra": "^8.1.0",
+ "loader-fs-cache": "^1.0.2",
+ "loader-utils": "^1.2.3",
+ "object-hash": "^2.0.1",
+ "schema-utils": "^2.6.1"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
+ "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
+ "requires": {
+ "debug": "^2.6.9",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ }
+ },
+ "eslint-plugin-flowtype": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz",
+ "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==",
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.20.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
+ "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "array.prototype.flat": "^1.2.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.2",
+ "eslint-module-utils": "^2.4.1",
+ "has": "^1.0.3",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.0",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
+ "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
+ "requires": {
+ "@babel/runtime": "^7.4.5",
+ "aria-query": "^3.0.0",
+ "array-includes": "^3.0.3",
+ "ast-types-flow": "^0.0.7",
+ "axobject-query": "^2.0.2",
+ "damerau-levenshtein": "^1.0.4",
+ "emoji-regex": "^7.0.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.2.1"
+ },
+ "dependencies": {
+ "aria-query": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
+ "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
+ "requires": {
+ "ast-types-flow": "0.0.7",
+ "commander": "^2.11.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz",
+ "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz",
+ "integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.1",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.2.3",
+ "object.entries": "^1.1.1",
+ "object.fromentries": "^2.0.2",
+ "object.values": "^1.1.1",
+ "prop-types": "^15.7.2",
+ "resolve": "^1.15.1",
+ "string.prototype.matchall": "^4.0.2",
+ "xregexp": "^4.3.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
+ "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA=="
+ },
+ "eslint-plugin-standard": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz",
+ "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+ "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
+ "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
+ },
+ "espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "esquery": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
+ "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw=="
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "eventemitter3": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
+ "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ=="
+ },
+ "events": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
+ },
+ "eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "exec-sh": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
+ "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A=="
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expect": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
+ "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "ansi-styles": "^3.2.0",
+ "jest-get-type": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-regex-util": "^24.9.0"
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "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="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ }
+ }
+ },
+ "ext": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
+ "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
+ "requires": {
+ "type": "^2.0.0"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
+ "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow=="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ },
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fb-watchman": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
+ "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "requires": {
+ "bser": "2.1.1"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
+ "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "file-saver": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz",
+ "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "fork-ts-checker-webpack-plugin": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz",
+ "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==",
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.4.1",
+ "chokidar": "^3.3.0",
+ "micromatch": "^3.1.10",
+ "minimatch": "^3.0.4",
+ "semver": "^5.6.0",
+ "tapable": "^1.0.0",
+ "worker-rpc": "^0.1.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow=="
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
+ "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "readdirp": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "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": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "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=",
+ "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=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "requires": {
+ "global-prefix": "^3.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "globby": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
+ "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==",
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "2.0.0",
+ "fast-glob": "^2.0.2",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
+ },
+ "gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ }
+ }
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
+ },
+ "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"
+ }
+ },
+ "harmony-reflect": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
+ "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA=="
+ },
+ "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"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
+ },
+ "history": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "loose-envify": "^1.2.0",
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
+ },
+ "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-entities": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
+ "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
+ },
+ "html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "requires": {
+ "camel-case": "^4.1.1",
+ "clean-css": "^4.2.3",
+ "commander": "^4.1.1",
+ "he": "^1.2.0",
+ "param-case": "^3.0.3",
+ "relateurl": "^0.2.7",
+ "terser": "^4.6.3"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+ },
+ "terser": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz",
+ "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ }
+ }
+ }
+ }
+ },
+ "html-webpack-plugin": {
+ "version": "4.0.0-beta.11",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz",
+ "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==",
+ "requires": {
+ "html-minifier-terser": "^5.0.1",
+ "loader-utils": "^1.2.3",
+ "lodash": "^4.17.15",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.3",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
+ },
+ "http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q="
+ },
+ "http-proxy": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "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",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "hyphenate-style-name": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
+ "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "identity-obj-proxy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
+ "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
+ "requires": {
+ "harmony-reflect": "^1.4.6"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ },
+ "immer": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz",
+ "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg=="
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "inquirer": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
+ "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.15",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.5.3",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
+ "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
+ "requires": {
+ "es-abstract": "^1.17.0-next.1",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.2"
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "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=="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ },
+ "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",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^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",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-docker": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz",
+ "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ=="
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-in-browser": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
+ "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "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",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
+ },
+ "is-root": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
+ "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg=="
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "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=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "istanbul-lib-coverage": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA=="
+ },
+ "istanbul-lib-instrument": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+ "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
+ "requires": {
+ "@babel/generator": "^7.4.0",
+ "@babel/parser": "^7.4.3",
+ "@babel/template": "^7.4.0",
+ "@babel/traverse": "^7.4.3",
+ "@babel/types": "^7.4.0",
+ "istanbul-lib-coverage": "^2.0.5",
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
+ "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
+ "requires": {
+ "istanbul-lib-coverage": "^2.0.5",
+ "make-dir": "^2.1.0",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
+ "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^2.0.5",
+ "make-dir": "^2.1.0",
+ "rimraf": "^2.6.3",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz",
+ "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==",
+ "requires": {
+ "html-escaper": "^2.0.0"
+ }
+ },
+ "jest": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
+ "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==",
+ "requires": {
+ "import-local": "^2.0.0",
+ "jest-cli": "^24.9.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "jest-cli": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
+ "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
+ "requires": {
+ "@jest/core": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "import-local": "^2.0.0",
+ "is-ci": "^2.0.0",
+ "jest-config": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
+ "prompts": "^2.0.1",
+ "realpath-native": "^1.1.0",
+ "yargs": "^13.3.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
+ "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "execa": "^1.0.0",
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
+ "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/test-sequencer": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "babel-jest": "^24.9.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^24.9.0",
+ "jest-environment-node": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "jest-jasmine2": "^24.9.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "pretty-format": "^24.9.0",
+ "realpath-native": "^1.1.0"
+ }
+ },
+ "jest-diff": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
+ "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff-sequences": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
+ }
+ },
+ "jest-docblock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
+ "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
+ "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.0.1",
+ "jest-get-type": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "pretty-format": "^24.9.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
+ "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
+ "requires": {
+ "@jest/environment": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jsdom": "^11.5.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg=="
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "jest-environment-jsdom-fourteen": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz",
+ "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==",
+ "requires": {
+ "@jest/environment": "^24.3.0",
+ "@jest/fake-timers": "^24.3.0",
+ "@jest/types": "^24.3.0",
+ "jest-mock": "^24.0.0",
+ "jest-util": "^24.0.0",
+ "jsdom": "^14.1.0"
+ }
+ },
+ "jest-environment-node": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
+ "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
+ "requires": {
+ "@jest/environment": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-util": "^24.9.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
+ "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q=="
+ },
+ "jest-haste-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
+ "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "anymatch": "^2.0.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.7",
+ "graceful-fs": "^4.1.15",
+ "invariant": "^2.2.4",
+ "jest-serializer": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
+ "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^24.9.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "pretty-format": "^24.9.0",
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
+ "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
+ "requires": {
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
+ "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-diff": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
+ "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/stack-utils": "^1.0.1",
+ "chalk": "^2.0.1",
+ "micromatch": "^3.1.10",
+ "slash": "^2.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+ "requires": {
+ "@jest/types": "^24.9.0"
+ }
+ },
+ "jest-pnp-resolver": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
+ "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ=="
+ },
+ "jest-regex-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
+ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA=="
+ },
+ "jest-resolve": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+ "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "jest-pnp-resolver": "^1.2.1",
+ "realpath-native": "^1.1.0"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
+ "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-snapshot": "^24.9.0"
+ }
+ },
+ "jest-runner": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
+ "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
+ "requires": {
+ "@jest/console": "^24.7.1",
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.4.2",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.15",
+ "jest-config": "^24.9.0",
+ "jest-docblock": "^24.3.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-jasmine2": "^24.9.0",
+ "jest-leak-detector": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-resolve": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.6.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-runtime": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
+ "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
+ "requires": {
+ "@jest/console": "^24.7.1",
+ "@jest/environment": "^24.9.0",
+ "@jest/source-map": "^24.3.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/yargs": "^13.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "jest-config": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "strip-bom": "^3.0.0",
+ "yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
+ "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ=="
+ },
+ "jest-snapshot": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
+ "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
+ "requires": {
+ "@babel/types": "^7.0.0",
+ "@jest/types": "^24.9.0",
+ "chalk": "^2.0.1",
+ "expect": "^24.9.0",
+ "jest-diff": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-resolve": "^24.9.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^24.9.0",
+ "semver": "^6.2.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "jest-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+ "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/source-map": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "callsites": "^3.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.15",
+ "is-ci": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
+ "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "camelcase": "^5.3.1",
+ "chalk": "^2.0.1",
+ "jest-get-type": "^24.9.0",
+ "leven": "^3.1.0",
+ "pretty-format": "^24.9.0"
+ }
+ },
+ "jest-watch-typeahead": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz",
+ "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^2.4.1",
+ "jest-regex-util": "^24.9.0",
+ "jest-watcher": "^24.3.0",
+ "slash": "^3.0.0",
+ "string-length": "^3.1.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+ },
+ "string-length": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz",
+ "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==",
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^5.2.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "jest-watcher": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
+ "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
+ "requires": {
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/yargs": "^13.0.0",
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "jest-util": "^24.9.0",
+ "string-length": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ }
+ }
+ },
+ "jest-worker": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
+ "requires": {
+ "merge-stream": "^2.0.0",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "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=="
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "jsdom": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz",
+ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==",
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^6.0.4",
+ "acorn-globals": "^4.3.0",
+ "array-equal": "^1.0.0",
+ "cssom": "^0.3.4",
+ "cssstyle": "^1.1.1",
+ "data-urls": "^1.1.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.11.0",
+ "html-encoding-sniffer": "^1.0.2",
+ "nwsapi": "^2.1.3",
+ "parse5": "5.1.0",
+ "pn": "^1.1.0",
+ "request": "^2.88.0",
+ "request-promise-native": "^1.0.5",
+ "saxes": "^3.1.9",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.5.0",
+ "w3c-hr-time": "^1.0.1",
+ "w3c-xmlserializer": "^1.1.2",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^7.0.0",
+ "ws": "^6.1.2",
+ "xml-name-validator": "^3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
+ },
+ "escodegen": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "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=="
+ },
+ "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-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
+ "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="
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA=="
+ },
+ "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"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jss": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz",
+ "integrity": "sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "csstype": "^2.6.5",
+ "is-in-browser": "^1.1.3",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "jss-plugin-camel-case": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz",
+ "integrity": "sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "hyphenate-style-name": "^1.0.3",
+ "jss": "10.1.1"
+ }
+ },
+ "jss-plugin-default-unit": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz",
+ "integrity": "sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.1.1"
+ }
+ },
+ "jss-plugin-global": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz",
+ "integrity": "sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.1.1"
+ }
+ },
+ "jss-plugin-nested": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz",
+ "integrity": "sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.1.1",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "jss-plugin-props-sort": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz",
+ "integrity": "sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.1.1"
+ }
+ },
+ "jss-plugin-rule-value-function": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz",
+ "integrity": "sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.1.1"
+ }
+ },
+ "jss-plugin-vendor-prefixer": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz",
+ "integrity": "sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw==",
+ "requires": {
+ "@babel/runtime": "^7.3.1",
+ "css-vendor": "^2.0.7",
+ "jss": "10.1.1"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
+ "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
+ "requires": {
+ "array-includes": "^3.0.3",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
+ },
+ "last-call-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
+ "requires": {
+ "lodash": "^4.17.5",
+ "webpack-sources": "^1.1.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
+ },
+ "levenary": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
+ "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
+ "requires": {
+ "leven": "^3.1.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
+ },
+ "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=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "loader-fs-cache": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
+ "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
+ "requires": {
+ "find-cache-dir": "^0.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "requires": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "requires": {
+ "find-up": "^1.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=="
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ },
+ "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.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+ },
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "loglevel": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA=="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
+ "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "yallist": "^3.0.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "mamacro": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
+ },
+ "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==",
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "material-ui-popup-state": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/material-ui-popup-state/-/material-ui-popup-state-1.5.4.tgz",
+ "integrity": "sha512-aHPrOZeOy4o5PDQ8WlFvxlxSB5m6G+Co/1uD4Eh7Uml6wxJUbRr9ZPHzdvaQ2TMFyYAExGFrPquVuNE8X9ZkXw==",
+ "requires": {
+ "@babel/runtime": "^7.1.5",
+ "@material-ui/types": "^4.1.1",
+ "classnames": "^2.2.6",
+ "prop-types": "^15.0.0"
+ },
+ "dependencies": {
+ "@material-ui/types": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.1.1.tgz",
+ "integrity": "sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==",
+ "requires": {
+ "@types/react": "*"
+ }
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="
+ },
+ "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.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ }
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge-deep": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz",
+ "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "clone-deep": "^0.2.4",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw=="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "microevent.ts": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
+ "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "min-indent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
+ "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY="
+ },
+ "mini-create-react-context": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz",
+ "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "tiny-warning": "^1.0.3"
+ }
+ },
+ "mini-css-extract-plugin": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
+ "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "normalize-url": "1.9.1",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "dependencies": {
+ "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": {
+ "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"
+ }
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "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="
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz",
+ "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mixin-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+ "requires": {
+ "for-in": "^0.1.3",
+ "is-extendable": "^0.1.1"
+ },
+ "dependencies": {
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE="
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "moment": {
+ "version": "2.25.3",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
+ "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg=="
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+ },
+ "mxgraph": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mxgraph/-/mxgraph-4.2.0.tgz",
+ "integrity": "sha512-GU5c+6IaFH2gwM88NuUkM2zb2l5GQi4MCxyuRvxZdDzIUP/9ZpgMexxgb8T3c0w/dioael5jGbPit1QKEJIlCw=="
+ },
+ "nan": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "no-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
+ "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
+ "requires": {
+ "lower-case": "^2.0.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
+ },
+ "node-notifier": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
+ "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
+ "requires": {
+ "growly": "^1.3.0",
+ "is-wsl": "^1.1.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.55",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz",
+ "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.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=="
+ },
+ "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": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "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="
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-hash": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz",
+ "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg=="
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object-path": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
+ "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "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==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
+ "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
+ "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "open": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz",
+ "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==",
+ "requires": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ }
+ }
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimize-css-assets-webpack-plugin": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz",
+ "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==",
+ "requires": {
+ "cssnano": "^4.1.10",
+ "last-call-webpack-plugin": "^3.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "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==",
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "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="
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+ },
+ "p-each-series": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
+ "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
+ "requires": {
+ "p-reduce": "^1.0.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-reduce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo="
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "param-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
+ "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
+ "requires": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ }
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+ "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"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parse5": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "pascal-case": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
+ "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "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="
+ },
+ "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="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "requires": {
+ "node-modules-regexp": "^1.0.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "find-up": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ }
+ }
+ },
+ "pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
+ },
+ "pnp-webpack-plugin": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
+ "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
+ "requires": {
+ "ts-pnp": "^1.1.6"
+ }
+ },
+ "popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+ },
+ "portfinder": {
+ "version": "1.0.26",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
+ "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "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="
+ },
+ "postcss": {
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-attribute-case-insensitive": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
+ "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^6.0.2"
+ }
+ },
+ "postcss-browser-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz",
+ "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==",
+ "requires": {
+ "postcss": "^7"
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz",
+ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==",
+ "requires": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ }
+ }
+ },
+ "postcss-color-functional-notation": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
+ "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-gray": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
+ "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-hex-alpha": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+ "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
+ "requires": {
+ "postcss": "^7.0.14",
+ "postcss-values-parser": "^2.0.1"
+ }
+ },
+ "postcss-color-mod-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
+ "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-color-rebeccapurple": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
+ "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-custom-media": {
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+ "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "postcss-custom-properties": {
+ "version": "8.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
+ "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
+ "requires": {
+ "postcss": "^7.0.17",
+ "postcss-values-parser": "^2.0.1"
+ }
+ },
+ "postcss-custom-selectors": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
+ "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-dir-pseudo-class": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
+ "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-double-position-gradients": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
+ "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
+ "requires": {
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-env-function": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
+ "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-flexbugs-fixes": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz",
+ "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-focus-visible": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
+ "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-focus-within": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
+ "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-font-variant": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
+ "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-gap-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
+ "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-image-set-function": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
+ "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-initial": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
+ "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+ "requires": {
+ "lodash.template": "^4.5.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-lab-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
+ "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+ "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "postcss-logical": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
+ "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-media-minmax": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
+ "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-nesting": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
+ "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-normalize": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz",
+ "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==",
+ "requires": {
+ "@csstools/normalize.css": "^10.1.0",
+ "browserslist": "^4.6.2",
+ "postcss": "^7.0.17",
+ "postcss-browser-comments": "^3.0.0",
+ "sanitize.css": "^10.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-overflow-shorthand": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
+ "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-page-break": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
+ "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-place": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
+ "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ }
+ },
+ "postcss-preset-env": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
+ "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==",
+ "requires": {
+ "autoprefixer": "^9.6.1",
+ "browserslist": "^4.6.4",
+ "caniuse-lite": "^1.0.30000981",
+ "css-blank-pseudo": "^0.1.4",
+ "css-has-pseudo": "^0.10.0",
+ "css-prefers-color-scheme": "^3.1.1",
+ "cssdb": "^4.4.0",
+ "postcss": "^7.0.17",
+ "postcss-attribute-case-insensitive": "^4.0.1",
+ "postcss-color-functional-notation": "^2.0.1",
+ "postcss-color-gray": "^5.0.0",
+ "postcss-color-hex-alpha": "^5.0.3",
+ "postcss-color-mod-function": "^3.0.3",
+ "postcss-color-rebeccapurple": "^4.0.1",
+ "postcss-custom-media": "^7.0.8",
+ "postcss-custom-properties": "^8.0.11",
+ "postcss-custom-selectors": "^5.1.2",
+ "postcss-dir-pseudo-class": "^5.0.0",
+ "postcss-double-position-gradients": "^1.0.0",
+ "postcss-env-function": "^2.0.2",
+ "postcss-focus-visible": "^4.0.0",
+ "postcss-focus-within": "^3.0.0",
+ "postcss-font-variant": "^4.0.0",
+ "postcss-gap-properties": "^2.0.0",
+ "postcss-image-set-function": "^3.0.1",
+ "postcss-initial": "^3.0.0",
+ "postcss-lab-function": "^2.0.1",
+ "postcss-logical": "^3.0.0",
+ "postcss-media-minmax": "^4.0.0",
+ "postcss-nesting": "^7.0.0",
+ "postcss-overflow-shorthand": "^2.0.0",
+ "postcss-page-break": "^2.0.0",
+ "postcss-place": "^4.0.1",
+ "postcss-pseudo-class-any-link": "^6.0.0",
+ "postcss-replace-overflow-wrap": "^3.0.0",
+ "postcss-selector-matches": "^4.0.0",
+ "postcss-selector-not": "^4.0.0"
+ }
+ },
+ "postcss-pseudo-class-any-link": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
+ "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-replace-overflow-wrap": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
+ "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-safe-parser": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
+ "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-selector-matches": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
+ "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-selector-not": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
+ "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "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=="
+ },
+ "postcss-values-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
+ "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "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.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
+ "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg=="
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "requires": {
+ "renderkid": "^2.0.1",
+ "utila": "~0.4"
+ }
+ },
+ "pretty-format": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
+ "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "ansi-regex": "^4.0.0",
+ "ansi-styles": "^3.2.0",
+ "react-is": "^16.8.4"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ },
+ "promise": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz",
+ "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "prompts": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz",
+ "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==",
+ "requires": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.4"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "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"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^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==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "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=="
+ },
+ "query-string": {
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz",
+ "integrity": "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==",
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
+ },
+ "raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+ "requires": {
+ "performance-now": "^2.1.0"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "react": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
+ "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "react-ace": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-9.0.0.tgz",
+ "integrity": "sha512-wcVlnffzKif2ejHCvTpawYS5jglTCsIUmLENo4hiwPU0vViKl/xuKp9afjKEQHzjLua9NfzbH8gA79GzGpmSnA==",
+ "requires": {
+ "ace-builds": "^1.4.6",
+ "diff-match-patch": "^1.0.4",
+ "lodash.get": "^4.4.2",
+ "lodash.isequal": "^4.5.0",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "react-app-polyfill": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz",
+ "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==",
+ "requires": {
+ "core-js": "^3.5.0",
+ "object-assign": "^4.1.1",
+ "promise": "^8.0.3",
+ "raf": "^3.4.1",
+ "regenerator-runtime": "^0.13.3",
+ "whatwg-fetch": "^3.0.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+ }
+ }
+ },
+ "react-brace": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/react-brace/-/react-brace-3.6.6.tgz",
+ "integrity": "sha1-xopU+tsVBstc3bziGIzsJ9B8XS0=",
+ "requires": {
+ "brace-ace": "^0.9.0",
+ "lodash.isequal": "^4.1.1"
+ }
+ },
+ "react-chartjs-2": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.9.0.tgz",
+ "integrity": "sha512-IYwqUUnQRAJ9SNA978vxulHJTcUFTJk2LDVfbAyk0TnJFZZG7+6U/2flsE4MCw6WCbBjTTypy8T82Ch7XrPtRw==",
+ "requires": {
+ "lodash": "^4.17.4",
+ "prop-types": "^15.5.8"
+ }
+ },
+ "react-dev-utils": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz",
+ "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==",
+ "requires": {
+ "@babel/code-frame": "7.8.3",
+ "address": "1.1.2",
+ "browserslist": "4.10.0",
+ "chalk": "2.4.2",
+ "cross-spawn": "7.0.1",
+ "detect-port-alt": "1.1.6",
+ "escape-string-regexp": "2.0.0",
+ "filesize": "6.0.1",
+ "find-up": "4.1.0",
+ "fork-ts-checker-webpack-plugin": "3.1.1",
+ "global-modules": "2.0.0",
+ "globby": "8.0.2",
+ "gzip-size": "5.1.1",
+ "immer": "1.10.0",
+ "inquirer": "7.0.4",
+ "is-root": "2.1.0",
+ "loader-utils": "1.2.3",
+ "open": "^7.0.2",
+ "pkg-up": "3.1.0",
+ "react-error-overlay": "^6.0.7",
+ "recursive-readdir": "2.2.2",
+ "shell-quote": "1.7.2",
+ "strip-ansi": "6.0.0",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "browserslist": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz",
+ "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001035",
+ "electron-to-chromium": "^1.3.378",
+ "node-releases": "^1.1.52",
+ "pkg-up": "^3.1.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+ "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
+ },
+ "filesize": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz",
+ "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg=="
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "dependencies": {
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ }
+ }
+ },
+ "inquirer": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
+ "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.15",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.5.3",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "requires": {
+ "find-up": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ }
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "react-dom": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
+ "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.19.1"
+ }
+ },
+ "react-error-overlay": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz",
+ "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA=="
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "react-loader-spinner": {
+ "version": "3.1.14",
+ "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-3.1.14.tgz",
+ "integrity": "sha512-7V+upnW+RVA/O94LIB/EQLK2uaz/TpZBHG5uNXlOXgvxvALxlxVYeEDmus5Oex2C58fiwrsRvSyu/4VRmLbZ9Q==",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "react-redux": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
+ "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "hoist-non-react-statics": "^3.3.0",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.9.0"
+ }
+ },
+ "react-router": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
+ "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "hoist-non-react-statics": "^3.1.0",
+ "loose-envify": "^1.3.1",
+ "mini-create-react-context": "^0.4.0",
+ "path-to-regexp": "^1.7.0",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.6.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ }
+ },
+ "react-router-dom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz",
+ "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "loose-envify": "^1.3.1",
+ "prop-types": "^15.6.2",
+ "react-router": "5.2.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ }
+ },
+ "react-scripts": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz",
+ "integrity": "sha512-JpTdi/0Sfd31mZA6Ukx+lq5j1JoKItX7qqEK4OiACjVQletM1P38g49d9/D0yTxp9FrSF+xpJFStkGgKEIRjlQ==",
+ "requires": {
+ "@babel/core": "7.9.0",
+ "@svgr/webpack": "4.3.3",
+ "@typescript-eslint/eslint-plugin": "^2.10.0",
+ "@typescript-eslint/parser": "^2.10.0",
+ "babel-eslint": "10.1.0",
+ "babel-jest": "^24.9.0",
+ "babel-loader": "8.1.0",
+ "babel-plugin-named-asset-import": "^0.3.6",
+ "babel-preset-react-app": "^9.1.2",
+ "camelcase": "^5.3.1",
+ "case-sensitive-paths-webpack-plugin": "2.3.0",
+ "css-loader": "3.4.2",
+ "dotenv": "8.2.0",
+ "dotenv-expand": "5.1.0",
+ "eslint": "^6.6.0",
+ "eslint-config-react-app": "^5.2.1",
+ "eslint-loader": "3.0.3",
+ "eslint-plugin-flowtype": "4.6.0",
+ "eslint-plugin-import": "2.20.1",
+ "eslint-plugin-jsx-a11y": "6.2.3",
+ "eslint-plugin-react": "7.19.0",
+ "eslint-plugin-react-hooks": "^1.6.1",
+ "file-loader": "4.3.0",
+ "fs-extra": "^8.1.0",
+ "fsevents": "2.1.2",
+ "html-webpack-plugin": "4.0.0-beta.11",
+ "identity-obj-proxy": "3.0.0",
+ "jest": "24.9.0",
+ "jest-environment-jsdom-fourteen": "1.0.1",
+ "jest-resolve": "24.9.0",
+ "jest-watch-typeahead": "0.4.2",
+ "mini-css-extract-plugin": "0.9.0",
+ "optimize-css-assets-webpack-plugin": "5.0.3",
+ "pnp-webpack-plugin": "1.6.4",
+ "postcss-flexbugs-fixes": "4.1.0",
+ "postcss-loader": "3.0.0",
+ "postcss-normalize": "8.0.1",
+ "postcss-preset-env": "6.7.0",
+ "postcss-safe-parser": "4.0.1",
+ "react-app-polyfill": "^1.0.6",
+ "react-dev-utils": "^10.2.1",
+ "resolve": "1.15.0",
+ "resolve-url-loader": "3.1.1",
+ "sass-loader": "8.0.2",
+ "semver": "6.3.0",
+ "style-loader": "0.23.1",
+ "terser-webpack-plugin": "2.3.5",
+ "ts-pnp": "1.1.6",
+ "url-loader": "2.3.0",
+ "webpack": "4.42.0",
+ "webpack-dev-server": "3.10.3",
+ "webpack-manifest-plugin": "2.2.0",
+ "workbox-webpack-plugin": "4.3.1"
+ },
+ "dependencies": {
+ "@babel/core": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
+ "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.0",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helpers": "^7.9.0",
+ "@babel/parser": "^7.9.0",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.9.0",
+ "@babel/types": "^7.9.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
+ },
+ "eslint": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.3",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
+ "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==",
+ "requires": {
+ "array-includes": "^3.0.3",
+ "array.prototype.flat": "^1.2.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.2",
+ "eslint-module-utils": "^2.4.1",
+ "has": "^1.0.3",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.0",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz",
+ "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==",
+ "requires": {
+ "array-includes": "^3.1.1",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.2.3",
+ "object.entries": "^1.1.1",
+ "object.fromentries": "^2.0.2",
+ "object.values": "^1.1.1",
+ "prop-types": "^15.7.2",
+ "resolve": "^1.15.1",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.2",
+ "xregexp": "^4.3.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
+ "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
+ },
+ "resolve": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
+ "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "react-test-renderer": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz",
+ "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.8.6",
+ "scheduler": "^0.19.1"
+ }
+ },
+ "react-transition-group": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
+ "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
+ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+ "requires": {
+ "find-up": "^3.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "realpath-native": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "recursive-readdir": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
+ "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "redux": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
+ "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "symbol-observable": "^1.2.0"
+ }
+ },
+ "redux-logger": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
+ "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=",
+ "requires": {
+ "deep-diff": "^0.3.5"
+ }
+ },
+ "redux-thunk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+ "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+ },
+ "regenerator-transform": {
+ "version": "0.14.4",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
+ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==",
+ "requires": {
+ "@babel/runtime": "^7.8.4",
+ "private": "^0.1.8"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regex-parser": {
+ "version": "2.2.10",
+ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz",
+ "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA=="
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "regexpp": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="
+ },
+ "regexpu-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
+ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.2.0",
+ "regjsgen": "^0.5.1",
+ "regjsparser": "^0.6.4",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.2.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="
+ },
+ "regjsparser": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+ },
+ "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="
+ },
+ "renderkid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+ "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+ "requires": {
+ "css-select": "^1.1.0",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.3.0",
+ "strip-ansi": "^3.0.0",
+ "utila": "^0.4.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.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",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
+ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
+ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+ "requires": {
+ "request-promise-core": "1.1.3",
+ "stealthy-require": "^1.1.1",
+ "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="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ },
+ "resolve-pathname": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "resolve-url-loader": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz",
+ "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==",
+ "requires": {
+ "adjust-sourcemap-loader": "2.0.0",
+ "camelcase": "5.3.1",
+ "compose-function": "3.0.3",
+ "convert-source-map": "1.7.0",
+ "es6-iterator": "2.0.3",
+ "loader-utils": "1.2.3",
+ "postcss": "7.0.21",
+ "rework": "1.0.1",
+ "rework-visit": "1.0.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "postcss": {
+ "version": "7.0.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz",
+ "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
+ },
+ "rework": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
+ "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
+ "requires": {
+ "convert-source-map": "^0.3.3",
+ "css": "^2.0.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+ "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA="
+ }
+ }
+ },
+ "rework-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
+ "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo="
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
+ },
+ "rgbcolor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
+ "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0="
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rsvp": {
+ "version": "4.8.5",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA=="
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
+ "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
+ "requires": {
+ "tslib": "^1.9.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=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sane": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+ "requires": {
+ "@cnakazawa/watch": "^1.0.3",
+ "anymatch": "^2.0.0",
+ "capture-exit": "^2.0.0",
+ "exec-sh": "^0.3.2",
+ "execa": "^1.0.0",
+ "fb-watchman": "^2.0.0",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5"
+ }
+ },
+ "sanitize.css": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz",
+ "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg=="
+ },
+ "sass-loader": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz",
+ "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==",
+ "requires": {
+ "clone-deep": "^4.0.1",
+ "loader-utils": "^1.2.3",
+ "neo-async": "^2.6.1",
+ "schema-utils": "^2.6.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "requires": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "saxes": {
+ "version": "3.1.11",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
+ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
+ "requires": {
+ "xmlchars": "^2.1.1"
+ }
+ },
+ "scheduler": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo="
+ },
+ "selfsigned": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
+ "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
+ "requires": {
+ "node-forge": "0.9.0"
+ },
+ "dependencies": {
+ "node-forge": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
+ "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ=="
+ }
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "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=="
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
+ "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
+ "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+ "requires": {
+ "is-extendable": "^0.1.1",
+ "kind-of": "^2.0.1",
+ "lazy-cache": "^0.2.3",
+ "mixin-object": "^2.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+ "requires": {
+ "is-buffer": "^1.0.2"
+ }
+ },
+ "lazy-cache": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+ "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U="
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
+ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="
+ },
+ "side-channel": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
+ "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
+ "requires": {
+ "es-abstract": "^1.17.0-next.1",
+ "object-inspect": "^1.7.0"
+ },
+ "dependencies": {
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
+ }
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ }
+ }
+ },
+ "sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "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="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "requires": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "requires": {
+ "debug": "^3.2.5",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "~0.11.1",
+ "inherits": "^2.0.3",
+ "json3": "^3.3.2",
+ "url-parse": "^1.4.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "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=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "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="
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+ },
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-on-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
+ "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "minipass": "^3.1.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA=="
+ },
+ "stackblur-canvas": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.3.0.tgz",
+ "integrity": "sha512-3ZHJv+43D8YttgumssIxkfs3hBXW7XaMS5Ux65fOBhKDYMjbG5hF8Ey8a90RiiJ58aQnAhWbGilPzZ9rkIlWgQ=="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
+ "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==",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "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==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
+ "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "string.prototype.matchall": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz",
+ "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0",
+ "has-symbols": "^1.0.1",
+ "internal-slot": "^1.0.2",
+ "regexp.prototype.flags": "^1.3.0",
+ "side-channel": "^1.0.2"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "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"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.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="
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-comments": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz",
+ "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==",
+ "requires": {
+ "babel-extract-comments": "^1.0.0",
+ "babel-plugin-transform-object-rest-spread": "^6.26.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
+ "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w=="
+ },
+ "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==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
+ },
+ "svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+ },
+ "terser-webpack-plugin": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz",
+ "integrity": "sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w==",
+ "requires": {
+ "cacache": "^13.0.1",
+ "find-cache-dir": "^3.2.0",
+ "jest-worker": "^25.1.0",
+ "p-limit": "^2.2.2",
+ "schema-utils": "^2.6.4",
+ "serialize-javascript": "^2.1.2",
+ "source-map": "^0.6.1",
+ "terser": "^4.4.3",
+ "webpack-sources": "^1.4.3"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "jest-worker": {
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz",
+ "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==",
+ "requires": {
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "terser": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz",
+ "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ }
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+ "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "requires": {
+ "glob": "^7.1.3",
+ "minimatch": "^3.0.4",
+ "read-pkg-up": "^4.0.0",
+ "require-main-filename": "^2.0.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo="
+ },
+ "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==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="
+ },
+ "timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
+ },
+ "tiny-invariant": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
+ "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ },
+ "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=",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "ts-pnp": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz",
+ "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ=="
+ },
+ "tslib": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
+ },
+ "tsutils": {
+ "version": "3.17.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+ "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "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="
+ },
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "typescript": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz",
+ "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ=="
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "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"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-loader": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
+ "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "mime": "^2.4.4",
+ "schema-utils": "^2.5.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
+ "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w=="
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "util.promisify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8-compile-cache": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
+ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
+ },
+ "w3c-blob": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/w3c-blob/-/w3c-blob-0.0.1.tgz",
+ "integrity": "sha1-sM01KhpQ9RVWNCD/1YYflQ8dhbg="
+ },
+ "w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "requires": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "w3c-xmlserializer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+ "requires": {
+ "domexception": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "wait-for-expect": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz",
+ "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag=="
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "watchpack": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
+ "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
+ "requires": {
+ "chokidar": "^3.4.0",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "optional": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
+ "optional": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "optional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
+ "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
+ "optional": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "optional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "optional": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "optional": true
+ },
+ "readdirp": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+ "optional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+ "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "requires": {
+ "minimalistic-assert": "^1.0.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.42.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz",
+ "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==",
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/wasm-edit": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "acorn": "^6.2.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.6.0",
+ "webpack-sources": "^1.4.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
+ },
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "terser": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz",
+ "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
+ "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^2.1.2",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
+ "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w=="
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz",
+ "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==",
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.2.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.6",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.25",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.7",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.19",
+ "sockjs-client": "1.4.0",
+ "spdy": "^4.0.1",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "12.0.5"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.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="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "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=="
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.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==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "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="
+ },
+ "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==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.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="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "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=",
+ "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=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "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==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-manifest-plugin": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz",
+ "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==",
+ "requires": {
+ "fs-extra": "^7.0.0",
+ "lodash": ">=3.5 <5",
+ "object.entries": "^1.1.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+ "requires": {
+ "http-parser-js": ">=0.4.0 <0.4.11",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+ },
+ "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"
+ }
+ },
+ "whatwg-fetch": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+ "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
+ },
+ "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=="
+ },
+ "whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+ },
+ "workbox-background-sync": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",
+ "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-broadcast-update": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz",
+ "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-build": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz",
+ "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==",
+ "requires": {
+ "@babel/runtime": "^7.3.4",
+ "@hapi/joi": "^15.0.0",
+ "common-tags": "^1.8.0",
+ "fs-extra": "^4.0.2",
+ "glob": "^7.1.3",
+ "lodash.template": "^4.4.0",
+ "pretty-bytes": "^5.1.0",
+ "stringify-object": "^3.3.0",
+ "strip-comments": "^1.0.2",
+ "workbox-background-sync": "^4.3.1",
+ "workbox-broadcast-update": "^4.3.1",
+ "workbox-cacheable-response": "^4.3.1",
+ "workbox-core": "^4.3.1",
+ "workbox-expiration": "^4.3.1",
+ "workbox-google-analytics": "^4.3.1",
+ "workbox-navigation-preload": "^4.3.1",
+ "workbox-precaching": "^4.3.1",
+ "workbox-range-requests": "^4.3.1",
+ "workbox-routing": "^4.3.1",
+ "workbox-strategies": "^4.3.1",
+ "workbox-streams": "^4.3.1",
+ "workbox-sw": "^4.3.1",
+ "workbox-window": "^4.3.1"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "workbox-cacheable-response": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz",
+ "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-core": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+ "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+ },
+ "workbox-expiration": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz",
+ "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-google-analytics": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz",
+ "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==",
+ "requires": {
+ "workbox-background-sync": "^4.3.1",
+ "workbox-core": "^4.3.1",
+ "workbox-routing": "^4.3.1",
+ "workbox-strategies": "^4.3.1"
+ }
+ },
+ "workbox-navigation-preload": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz",
+ "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-precaching": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz",
+ "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-range-requests": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz",
+ "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-routing": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz",
+ "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-strategies": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz",
+ "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-streams": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz",
+ "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "workbox-sw": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz",
+ "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w=="
+ },
+ "workbox-webpack-plugin": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz",
+ "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==",
+ "requires": {
+ "@babel/runtime": "^7.0.0",
+ "json-stable-stringify": "^1.0.1",
+ "workbox-build": "^4.3.1"
+ }
+ },
+ "workbox-window": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz",
+ "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==",
+ "requires": {
+ "workbox-core": "^4.3.1"
+ }
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "worker-rpc": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
+ "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
+ "requires": {
+ "microevent.ts": "~0.1.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+ "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "requires": {
+ "async-limiter": "~1.0.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=="
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ },
+ "xregexp": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
+ "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==",
+ "requires": {
+ "@babel/runtime-corejs3": "^7.8.3"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "yaml": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+ }
+ }
+}
diff --git a/blocks/eda-frontend/package.json b/blocks/eda-frontend/package.json
new file mode 100644
index 00000000..c6af0418
--- /dev/null
+++ b/blocks/eda-frontend/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "eda-frontend",
+ "version": "1.0.0",
+ "description": "Xcos Blocks Frontend",
+ "private": true,
+ "dependencies": {
+ "@material-ui/core": "^4.9.11",
+ "@material-ui/icons": "^4.9.1",
+ "@material-ui/lab": "^4.0.0-alpha.52",
+ "@testing-library/jest-dom": "^4.2.4",
+ "@testing-library/react": "^9.5.0",
+ "@testing-library/user-event": "^7.2.1",
+ "axios": "^0.19.2",
+ "brace": "^0.11.1",
+ "canvg": "^3.0.6",
+ "chart.js": "^2.9.3",
+ "chartjs-plugin-colorschemes": "^0.4.0",
+ "file-saver": "^2.0.2",
+ "material-ui-popup-state": "^1.5.4",
+ "mxgraph": "^4.2.0",
+ "query-string": "^6.12.1",
+ "react": "^16.13.1",
+ "react-ace": "^9.0.0",
+ "react-brace": "^3.6.6",
+ "react-chartjs-2": "^2.9.0",
+ "react-dom": "^16.13.1",
+ "react-loader-spinner": "^3.1.14",
+ "react-redux": "^7.2.0",
+ "react-router-dom": "^5.1.2",
+ "react-scripts": "3.4.1",
+ "redux": "^4.0.5",
+ "redux-logger": "^3.0.6",
+ "redux-thunk": "^2.3.0",
+ "typescript": "^3.9.3"
+ },
+ "scripts": {
+ "start": "react-scripts start",
+ "build": "react-scripts build",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject"
+ },
+ "eslintConfig": {
+ "extends": "react-app"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "devDependencies": {
+ "babel-eslint": "^10.1.0",
+ "eslint": "^6.6.0",
+ "eslint-config-standard": "^14.1.1",
+ "eslint-plugin-import": "^2.20.2",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^4.2.1",
+ "eslint-plugin-react": "^7.19.0",
+ "eslint-plugin-standard": "^4.0.1",
+ "react-test-renderer": "^16.13.1"
+ }
+}
diff --git a/blocks/eda-frontend/public/favicon.ico b/blocks/eda-frontend/public/favicon.ico
new file mode 100644
index 00000000..a1869b60
--- /dev/null
+++ b/blocks/eda-frontend/public/favicon.ico
Binary files differ
diff --git a/blocks/eda-frontend/public/index.html b/blocks/eda-frontend/public/index.html
new file mode 100644
index 00000000..fc7459e5
--- /dev/null
+++ b/blocks/eda-frontend/public/index.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="theme-color" content="#000000" />
+ <!-- Fonts to support Material Design -->
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
+ <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
+ <!--
+ manifest.json provides metadata used when your web app is installed on a
+ user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
+ -->
+ <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
+ <!--
+ Notice the use of %PUBLIC_URL% in the tags above.
+ It will be replaced with the URL of the `public` folder during the build.
+ Only files inside the `public` folder can be referenced from the HTML.
+
+ Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
+ work correctly both with client-side routing and a non-root public URL.
+ Learn how to configure a non-root public URL by running `npm run build`.
+ -->
+ <title>EDA</title>
+ </head>
+ <body>
+ <noscript>You need to enable JavaScript to run this app.</noscript>
+ <div id="root"></div>
+ <!--
+ This HTML file is a template.
+ If you open it directly in the browser, you will see an empty page.
+
+ You can add webfonts, meta tags, or analytics to this file.
+ The build step will place the bundled scripts into the <body> tag.
+
+ To begin the development, run `npm start` or `yarn start`.
+ To create a production bundle, use `npm run build` or `yarn build`.
+ -->
+ </body>
+</html>
diff --git a/blocks/eda-frontend/public/manifest.json b/blocks/eda-frontend/public/manifest.json
new file mode 100644
index 00000000..1f2f141f
--- /dev/null
+++ b/blocks/eda-frontend/public/manifest.json
@@ -0,0 +1,15 @@
+{
+ "short_name": "React App",
+ "name": "Create React App Sample",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24 16x16",
+ "type": "image/x-icon"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff"
+}
diff --git a/blocks/eda-frontend/src/App.js b/blocks/eda-frontend/src/App.js
new file mode 100644
index 00000000..7f612234
--- /dev/null
+++ b/blocks/eda-frontend/src/App.js
@@ -0,0 +1,80 @@
+/* eslint-disable react/prop-types */
+import React, { useEffect } from 'react'
+import { HashRouter, Switch, Route, Redirect } from 'react-router-dom'
+import CircularProgress from '@material-ui/core/CircularProgress'
+
+import Navbar from './components/Shared/Navbar'
+import Home from './pages/Home'
+import Login from './pages/Login'
+import NotFound from './pages/NotFound'
+import SchematicEditor from './pages/SchematiEditor'
+
+import Simulator from './pages/Simulator'
+import Gallery from './pages/Gallery'
+import Dashboard from './pages/Dashboard'
+import SignUp from './pages/signUp'
+
+import { useSelector, useDispatch } from 'react-redux'
+import { loadUser } from './redux/actions/index'
+
+// Controls Private routes, this are accessible for authenticated users. [ e.g : dashboard ]
+// and restricted routes disabled for authenticated users. [ e.g : login , signup ]
+function PrivateRoute ({ component: Component, ...rest }) {
+ const auth = useSelector(state => state.authReducer)
+ const dispatch = useDispatch()
+
+ useEffect(() => dispatch(loadUser()), [dispatch])
+
+ return <Route {...rest} render={props => {
+ if (auth.isLoading) {
+ return <CircularProgress style={{ margin: '50vh 50vw' }} />
+ } else if (!auth.isAuthenticated) {
+ return <Redirect to="/login" />
+ } else {
+ return <Component {...props} />
+ }
+ }} />
+}
+
+// Public routes accessible to all users. [ e.g. editor, gallery ]
+function PublicRoute ({ component: Component, restricted, nav, ...rest }) {
+ const auth = useSelector(state => state.authReducer)
+ const dispatch = useDispatch()
+
+ useEffect(() => dispatch(loadUser()), [dispatch])
+
+ return <Route {...rest} render={props => {
+ if (auth.isLoading) {
+ return <CircularProgress style={{ margin: '50vh 50vw' }} />
+ } else if (auth.isAuthenticated && restricted) {
+ return <Redirect to="/dashboard" />
+ } else if (nav) {
+ return (<><Navbar /><Component {...props} /></>)
+ } else {
+ return <Component {...props} />
+ }
+ }} />
+}
+
+function App () {
+ return (
+ // Handles Routing for an application
+ <HashRouter>
+ <Switch>
+ <PublicRoute exact path="/login" restricted={true} nav={false} component={Login} />
+ <PublicRoute exact path="/signup" restricted={true} nav={false} component={SignUp} />
+ <PublicRoute exact path="/" restricted={false} nav={true} component={Home} />
+ {localStorage.getItem('Xcos_token') !== null
+ ? <PublicRoute exact path="/editor" restricted={false} nav={false} component={SchematicEditor} />
+ : <Route path="/editor" component={SchematicEditor} />
+ }
+ <PublicRoute exact path="/simulator/ngspice" restricted={false} nav={true} component={Simulator} />
+ <PublicRoute exact path="/gallery" restricted={false} nav={true} component={Gallery} />
+ <PrivateRoute path="/dashboard" component={Dashboard} />
+ <PublicRoute restricted={false} nav={true} component={NotFound} />
+ </Switch>
+ </HashRouter>
+ )
+}
+
+export default App
diff --git a/blocks/eda-frontend/src/App.test.js b/blocks/eda-frontend/src/App.test.js
new file mode 100644
index 00000000..463dc9d4
--- /dev/null
+++ b/blocks/eda-frontend/src/App.test.js
@@ -0,0 +1,15 @@
+// Basic unit test for React application.
+/* eslint-disable no-undef */
+import React from 'react'
+import { create } from 'react-test-renderer'
+
+function Button (props) {
+ return <button>Nothing to do for now</button>
+}
+
+describe('Button component', () => {
+ test('Matches the snapshot', () => {
+ const button = create(<Button />)
+ expect(button.toJSON()).toMatchSnapshot()
+ })
+})
diff --git a/blocks/eda-frontend/src/__snapshots__/App.test.js.snap b/blocks/eda-frontend/src/__snapshots__/App.test.js.snap
new file mode 100644
index 00000000..1448c55c
--- /dev/null
+++ b/blocks/eda-frontend/src/__snapshots__/App.test.js.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Button component Matches the snapshot 1`] = `
+<button>
+ Nothing to do for now
+</button>
+`;
diff --git a/blocks/eda-frontend/src/components/Dashboard/DashboardHome.js b/blocks/eda-frontend/src/components/Dashboard/DashboardHome.js
new file mode 100644
index 00000000..d9909cff
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Dashboard/DashboardHome.js
@@ -0,0 +1,93 @@
+import React from 'react'
+import {
+ Card,
+ Grid,
+ Button,
+ Typography,
+ CardActions,
+ CardContent
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import { Link as RouterLink } from 'react-router-dom'
+import { useSelector } from 'react-redux'
+
+import ProgressPanel from './ProgressPanel'
+
+const useStyles = makeStyles((theme) => ({
+ mainHead: {
+ width: '100%',
+ backgroundColor: '#404040',
+ color: '#fff'
+ },
+ title: {
+ fontSize: 14,
+ color: '#80ff80'
+ }
+}))
+
+// Card displaying user dashboard home page header.
+function MainCard () {
+ const classes = useStyles()
+ const auth = useSelector(state => state.authReducer)
+
+ return (
+ <Card className={classes.mainHead}>
+ <CardContent>
+ <Typography className={classes.title} gutterBottom>
+ Welcome to your EDA Dashboard
+ </Typography>
+ <Typography variant="h5" component="h2">
+ Welcome {auth.user.username}...
+ </Typography>
+ </CardContent>
+ <CardActions>
+ <Button
+ component={RouterLink}
+ to="/dashboard/schematics"
+ color="primary"
+ size="small"
+ >
+ My Schematics
+ </Button>
+ </CardActions>
+ </Card>
+ )
+}
+
+export default function DashboardHome () {
+ const classes = useStyles()
+ const auth = useSelector(state => state.authReducer)
+
+ return (
+ <>
+ <Grid
+ container
+ direction="row"
+ justify="flex-start"
+ alignItems="flex-start"
+ alignContent="center"
+ spacing={3}
+ >
+ {/* User Dashboard Home Header */}
+ <Grid item xs={12}>
+ <MainCard />
+ </Grid>
+
+ <Grid item xs={12}>
+ <Card style={{ padding: '7px 15px' }} className={classes.mainHead}>
+ <Typography variant="subtitle1" gutterBottom>
+ Hey {auth.user.username} , Track your schematics status here...
+ </Typography>
+ </Card>
+ </Grid>
+
+ {/* List recent schematics saved by user */}
+ <Grid item xs={12}>
+ <Card>
+ <ProgressPanel />
+ </Card>
+ </Grid>
+ </Grid>
+ </>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/Dashboard/DashboardSidebar.js b/blocks/eda-frontend/src/components/Dashboard/DashboardSidebar.js
new file mode 100644
index 00000000..e56a52f6
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Dashboard/DashboardSidebar.js
@@ -0,0 +1,133 @@
+import React, { useEffect } from 'react'
+import {
+ Hidden,
+ Divider,
+ Avatar,
+ List,
+ Typography,
+ ListItem,
+ InputBase,
+ ListItemText,
+ ListItemAvatar
+} from '@material-ui/core'
+import { Link as RouterLink } from 'react-router-dom'
+import { makeStyles } from '@material-ui/core/styles'
+import { deepPurple } from '@material-ui/core/colors'
+import { useDispatch, useSelector } from 'react-redux'
+import { fetchSchematics } from '../../redux/actions/index'
+
+const useStyles = makeStyles((theme) => ({
+ toolbar: {
+ minHeight: '45px'
+ },
+ purple: {
+ color: theme.palette.getContrastText(deepPurple[500]),
+ backgroundColor: deepPurple[500]
+ },
+ sideItem: {
+ padding: theme.spacing(1.5, 2)
+ },
+ nested: {
+ paddingLeft: theme.spacing(2),
+ overflow: 'auto',
+ width: '100%',
+ maxHeight: 200
+ },
+ nestedSearch: {
+ padding: theme.spacing(0),
+ border: '1px solid #cccccc',
+ margin: theme.spacing(1, 2),
+ borderRadius: '5px'
+ },
+ input: {
+ marginLeft: theme.spacing(1),
+ flex: 1
+ }
+}))
+
+// Vertical Navbar for user dashboard
+export default function DashSidebar (props) {
+ const classes = useStyles()
+ const auth = useSelector(state => state.authReducer)
+ const schematics = useSelector(state => state.dashboardReducer.schematics)
+
+ const dispatch = useDispatch()
+
+ // For Fetching Saved Schematics
+ useEffect(() => {
+ dispatch(fetchSchematics())
+ }, [dispatch])
+
+ return (
+ <>
+ <Hidden smDown>
+ <div className={classes.toolbar} />
+ </Hidden>
+ <List>
+ <ListItem
+ alignItems="flex-start"
+ component={RouterLink}
+ to="/dashboard"
+ style={{ marginTop: '15px' }}
+ className={classes.sideItem}
+ button
+ divider
+ >
+ <ListItemAvatar>
+ <Avatar className={classes.purple}>
+ {auth.user.username.charAt(0).toUpperCase()}
+ </Avatar>
+ </ListItemAvatar>
+ <ListItemText
+ primary={auth.user.username}
+ secondary={
+ <React.Fragment>
+ <Typography
+ component="span"
+ variant="body2"
+ color="textSecondary"
+ >
+ Contributor
+ </Typography>
+ </React.Fragment>
+ }
+ />
+ </ListItem>
+
+ <ListItem
+ component={RouterLink}
+ to="/dashboard/profile"
+ className={classes.sideItem}
+ button
+ divider
+ >
+ <ListItemText primary='My Profile'/>
+ </ListItem>
+ <ListItem
+ component={RouterLink}
+ to="/dashboard/schematics"
+ className={classes.sideItem}
+ button
+ >
+ <ListItemText primary='My Schematics'/>
+ </ListItem>
+
+ {/* List name of saved schematics */}
+ <List className={classes.nestedSearch} >
+ <InputBase
+ className={classes.input}
+ placeholder="Find your schematic..."
+ />
+ </List>
+ <div className={classes.nested} >
+ {schematics.map((sch) => (
+ <ListItem key={sch.save_id} button>
+ <ListItemText primary={`${sch.name}`} />
+ </ListItem>
+ ))}
+ </div>
+ <Divider />
+ </List>
+ </>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/Dashboard/ProgressPanel.js b/blocks/eda-frontend/src/components/Dashboard/ProgressPanel.js
new file mode 100644
index 00000000..91b54e8f
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Dashboard/ProgressPanel.js
@@ -0,0 +1,128 @@
+/* eslint-disable react/no-unescaped-entities */
+import React, { useEffect } from 'react'
+import { Tab, Box, Tabs, AppBar, Typography, Grid } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import PropTypes from 'prop-types'
+
+import SchematicCard from './SchematicCard'
+import { useDispatch, useSelector } from 'react-redux'
+import { fetchSchematics } from '../../redux/actions/index'
+
+const useStyles = makeStyles((theme) => ({
+ root: {
+ flexGrow: 1,
+ width: '100%',
+ backgroundColor: theme.palette.background.paper
+ }
+}))
+
+function TabPanel (props) {
+ const { children, value, index, ...other } = props
+
+ return (
+ <div
+ role="tabpanel"
+ hidden={value !== index}
+ id={`scrollable-auto-tabpanel-${index}`}
+ aria-labelledby={`scrollable-auto-tab-${index}`}
+ {...other}
+ >
+ {value === index && (
+ <Box p={3}>
+ <Typography>{children}</Typography>
+ </Box>
+ )}
+ </div>
+ )
+}
+
+TabPanel.propTypes = {
+ children: PropTypes.node,
+ index: PropTypes.any.isRequired,
+ value: PropTypes.any.isRequired
+}
+
+function a11yProps (index) {
+ return {
+ id: `scrollable-auto-tab-${index}`,
+ 'aria-controls': `scrollable-auto-tabpanel-${index}`
+ }
+}
+
+export default function ProgressPanel () {
+ const classes = useStyles()
+ const [value, setValue] = React.useState(0)
+
+ const handleChange = (event, newValue) => {
+ setValue(newValue)
+ }
+
+ const schematics = useSelector(state => state.dashboardReducer.schematics)
+
+ const dispatch = useDispatch()
+
+ // For Fetching Saved Schematics
+ useEffect(() => {
+ dispatch(fetchSchematics())
+ }, [dispatch])
+
+ return (
+ <div className={classes.root}>
+ <AppBar position="static">
+ <Tabs
+ value={value}
+ onChange={handleChange}
+ variant="scrollable"
+ scrollButtons="auto"
+ aria-label="scrollable auto tabs example"
+ >
+ <Tab label="Recent Schematics" {...a11yProps(0)} />
+ {/* <Tab label="Under Reviewer" {...a11yProps(1)} />
+ <Tab label="Under Domain Expert" {...a11yProps(2)} /> */}
+ </Tabs>
+ </AppBar>
+
+ {/* Display overview of recently 4 saved schematics */}
+ <TabPanel value={value} index={0}>
+ {schematics.length !== 0
+ ? <Grid
+ container
+ direction="row"
+ justify="flex-start"
+ alignItems="flex-start"
+ alignContent="center"
+ spacing={3}
+ >
+ {schematics.slice(0, 4).map(
+ (sch) => {
+ return (
+ <Grid item xs={12} sm={6} lg={3} key={sch.save_id}>
+ <SchematicCard sch={sch} />
+ </Grid>
+ )
+ }
+ )}
+ </Grid>
+ : <Typography variant="button" display="block" gutterBottom>
+ You have not created any schematic , Create your first one now...
+ </Typography>
+ }
+ </TabPanel>
+
+ {/* Listing Schematics Under Review */}
+ {/* <TabPanel value={value} index={1}>
+ <Typography variant="button" display="block" gutterBottom>
+ Start publishing circuit , You don't have any schematics under review...
+ </Typography>
+ </TabPanel> */}
+
+ {/* Listing Reviewed Schematics */}
+ {/* <TabPanel value={value} index={2}>
+ <Typography variant="button" display="block" gutterBottom>
+ Start publishing circuit , You don't have any schematics to be tagged by
+ domain expert...
+ </Typography>
+ </TabPanel> */}
+ </div>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/Dashboard/SchematicCard.js b/blocks/eda-frontend/src/components/Dashboard/SchematicCard.js
new file mode 100644
index 00000000..72acaa59
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Dashboard/SchematicCard.js
@@ -0,0 +1,196 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import {
+ Button,
+ Typography,
+ Card,
+ CardActionArea,
+ CardActions,
+ CardContent,
+ CardMedia,
+ CardHeader,
+ Tooltip,
+ Snackbar
+} from '@material-ui/core'
+import ShareIcon from '@material-ui/icons/Share'
+import { makeStyles } from '@material-ui/core/styles'
+import { Link as RouterLink } from 'react-router-dom'
+import DeleteIcon from '@material-ui/icons/Delete'
+import { useDispatch } from 'react-redux'
+import { deleteSchematic } from '../../redux/actions/index'
+import MuiAlert from '@material-ui/lab/Alert'
+
+const useStyles = makeStyles((theme) => ({
+ media: {
+ height: 0,
+ paddingTop: '56.25%' // 16:9
+ },
+ rating: {
+ marginTop: theme.spacing(1),
+ marginLeft: 'auto'
+ }
+}))
+function Alert (props) {
+ return <MuiAlert elevation={6} variant="filled" {...props} />
+}
+
+// Schematic delete snackbar
+function SimpleSnackbar ({ open, close, sch }) {
+ const dispatch = useDispatch()
+
+ return (
+ <Snackbar
+ anchorOrigin={{
+ vertical: 'bottom',
+ horizontal: 'center'
+ }}
+ open={open}
+ autoHideDuration={6000}
+ onClose={close}
+ >
+ <Alert icon={false} severity="warning" color="error" style={{ width: '100%' }} action={
+ <>
+ <Button size="small" aria-label="close" color="inherit" onClick={() => { dispatch(deleteSchematic(sch.save_id)) }}>
+ Yes
+ </Button>
+ <Button size="small" aria-label="close" color="inherit" onClick={close}>
+ NO
+ </Button>
+ </>
+ }
+ >
+ {'Delete ' + sch.name + ' ?'}
+ </Alert>
+ </Snackbar>
+ )
+}
+
+SimpleSnackbar.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ sch: PropTypes.object
+}
+
+// Display schematic updated status (e.g : updated 2 hours ago...)
+function timeSince (jsonDate) {
+ var json = jsonDate
+
+ var date = new Date(json)
+
+ var seconds = Math.floor((new Date() - date) / 1000)
+
+ var interval = Math.floor(seconds / 31536000)
+
+ if (interval > 1) {
+ return interval + ' years'
+ }
+ interval = Math.floor(seconds / 2592000)
+ if (interval > 1) {
+ return interval + ' months'
+ }
+ interval = Math.floor(seconds / 86400)
+ if (interval > 1) {
+ return interval + ' days'
+ }
+ interval = Math.floor(seconds / 3600)
+ if (interval > 1) {
+ return interval + ' hours'
+ }
+ interval = Math.floor(seconds / 60)
+ if (interval > 1) {
+ return interval + ' minutes'
+ }
+ return Math.floor(seconds) + ' seconds'
+}
+
+// Display schematic created date (e.g : Created On 29 Jun 2020)
+function getDate (jsonDate) {
+ var json = jsonDate
+ var date = new Date(json)
+ const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' })
+ const [{ value: month }, , { value: day }, , { value: year }] = dateTimeFormat.formatToParts(date)
+ return `${day}-${month}-${year}`
+}
+
+// Card displaying overview of onCloud saved schematic.
+export default function SchematicCard ({ sch }) {
+ const classes = useStyles()
+
+ // To handel delete schematic snackbar
+ const [snacOpen, setSnacOpen] = React.useState(false)
+
+ const handleSnacClick = () => {
+ setSnacOpen(true)
+ }
+
+ const handleSnacClose = (event, reason) => {
+ if (reason === 'clickaway') {
+ return
+ }
+ setSnacOpen(false)
+ }
+
+ return (
+ <>
+ {/* User saved Schematic Overview Card */}
+ <Card>
+ <CardActionArea>
+ <CardHeader
+ title={sch.name}
+ subheader={'Created On ' + getDate(sch.create_time)} /* Display created date */
+ />
+ <CardMedia
+ className={classes.media}
+ image={sch.base64_image}
+ title={sch.name}
+ />
+ <CardContent>
+ <Typography variant="body2" component="p">
+ {sch.description}
+ </Typography>
+ {/* Display updated status */}
+ <Typography variant="body2" color="textSecondary" component="p" style={{ margin: '5px 0px 0px 0px' }}>
+ Updated {timeSince(sch.save_time)} ago...
+ </Typography>
+ </CardContent>
+ </CardActionArea>
+
+ <CardActions>
+ <Button
+ target="_blank"
+ component={RouterLink}
+ to={'/editor?id=' + sch.save_id}
+ size="small"
+ color="primary"
+ >
+ Launch in Editor
+ </Button>
+
+ {/* Display delete option */}
+ <Tooltip title='Delete' placement="bottom" arrow>
+ <DeleteIcon
+ color='secondary'
+ fontSize="small"
+ style={{ marginLeft: 'auto' }}
+ onClick={() => { handleSnacClick() }}
+ />
+ </Tooltip>
+ <SimpleSnackbar open={snacOpen} close={handleSnacClose} sch={sch} />
+
+ {/* Display share status */}
+ <Tooltip title={!sch.shared ? 'SHARE OFF' : 'SHARE ON'} placement="bottom" arrow>
+ <ShareIcon
+ color={!sch.shared ? 'disabled' : 'primary'}
+ fontSize="small"
+ style={{ marginRight: '10px' }}
+ />
+ </Tooltip>
+ </CardActions>
+ </Card>
+ </>
+ )
+}
+
+SchematicCard.propTypes = {
+ sch: PropTypes.object
+}
diff --git a/blocks/eda-frontend/src/components/Dashboard/SchematicsList.js b/blocks/eda-frontend/src/components/Dashboard/SchematicsList.js
new file mode 100644
index 00000000..ab6830a0
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Dashboard/SchematicsList.js
@@ -0,0 +1,112 @@
+import React, { useEffect } from 'react'
+import {
+ Card,
+ Grid,
+ Button,
+ Typography,
+ CardActions,
+ CardContent
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import { Link as RouterLink } from 'react-router-dom'
+
+import SchematicCard from './SchematicCard'
+import { useDispatch, useSelector } from 'react-redux'
+import { fetchSchematics } from '../../redux/actions/index'
+
+const useStyles = makeStyles({
+ mainHead: {
+ width: '100%',
+ backgroundColor: '#404040',
+ color: '#fff'
+ },
+ title: {
+ fontSize: 14,
+ color: '#80ff80'
+ }
+})
+
+// Card displaying user my schematics page header.
+function MainCard () {
+ const classes = useStyles()
+
+ return (
+ <Card className={classes.mainHead}>
+ <CardContent>
+ <Typography className={classes.title} gutterBottom>
+ All schematics are Listed Below
+ </Typography>
+ <Typography variant="h5" component="h2">
+ My Schematics
+ </Typography>
+ </CardContent>
+ <CardActions>
+ <Button
+ target="_blank"
+ component={RouterLink}
+ to="/editor"
+ size="small"
+ color="primary"
+ >
+ Create New
+ </Button>
+ <Button size="small" color="secondary">
+ Load More
+ </Button>
+ </CardActions>
+ </Card>
+ )
+}
+
+export default function SchematicsList () {
+ const classes = useStyles()
+ const auth = useSelector(state => state.authReducer)
+ const schematics = useSelector(state => state.dashboardReducer.schematics)
+
+ const dispatch = useDispatch()
+
+ // For Fetching Saved Schematics
+ useEffect(() => {
+ dispatch(fetchSchematics())
+ }, [dispatch])
+
+ return (
+ <>
+ <Grid
+ container
+ direction="row"
+ justify="flex-start"
+ alignItems="flex-start"
+ alignContent="center"
+ spacing={3}
+ >
+ {/* User Dashboard My Schematic Header */}
+ <Grid item xs={12}>
+ <MainCard />
+ </Grid>
+
+ {/* List all schematics saved by user */}
+ {schematics.length !== 0
+ ? <>
+ {schematics.map(
+ (sch) => {
+ return (
+ <Grid item xs={12} sm={6} lg={3} key={sch.save_id}>
+ <SchematicCard sch={sch} />
+ </Grid>
+ )
+ }
+ )}
+ </>
+ : <Grid item xs={12}>
+ <Card style={{ padding: '7px 15px' }} className={classes.mainHead}>
+ <Typography variant="subtitle1" gutterBottom>
+ Hey {auth.user.username} , You dont have any saved schematics...
+ </Typography>
+ </Card>
+ </Grid>
+ }
+ </Grid>
+ </>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/ComponentProperties.js b/blocks/eda-frontend/src/components/SchematicEditor/ComponentProperties.js
new file mode 100644
index 00000000..e4a2540f
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/ComponentProperties.js
@@ -0,0 +1,90 @@
+/* eslint-disable brace-style */
+import React, { useState, useEffect } from 'react'
+import { useSelector, useDispatch } from 'react-redux'
+import { setCompProperties } from '../../redux/actions/index'
+import { ListItem, ListItemText, Button, TextField, TextareaAutosize } from '@material-ui/core'
+
+export default function ComponentProperties () {
+ // component properties that are displayed on the right side bar when user clicks on a component on the grid.
+
+ const properties = useSelector(state => state.componentPropertiesReducer.compProperties)
+ const isOpen = useSelector(state => state.componentPropertiesReducer.isPropertiesWindowOpen)
+ const id = useSelector(state => state.componentPropertiesReducer.id)
+ const [val, setVal] = useState(properties)
+
+ const dispatch = useDispatch()
+
+ useEffect(() => {
+ setVal(properties)
+ }, [properties])
+
+ const getInputValues = (evt) => {
+ const value = evt.target.value
+ setVal({
+ ...val,
+ [evt.target.id]: value
+ })
+ }
+
+ const setProps = () => {
+ dispatch(setCompProperties(id, val))
+ }
+
+ return (
+
+ <div style={isOpen ? {} : { display: 'none' }}>
+
+ <ListItem>
+ <ListItemText primary='Component Properties' secondary={properties.NAME} />
+ </ListItem>
+
+ {
+ Object.keys(properties).map((keyName, i) => {
+ if (keyName === 'MODEL') {
+ return <ListItem key={i}>
+ <TextareaAutosize id={keyName} label={keyName} value={val[keyName] || ''} rowsMin={4} aria-label={keyName} onChange={getInputValues} placeholder={keyName} style={{ width: '100%' }} />
+ </ListItem>
+ // eslint-disable-next-line brace-style
+ }
+
+ else if (keyName === 'EXTRA_EXPRESSION') {
+ return <ListItem key={i}>
+ <TextareaAutosize id={keyName} label={keyName} value={val[keyName] || ''} rowsMin={4} aria-label={keyName} onChange={getInputValues} placeholder={'EXPRESSION'} style={{ width: '100%' }} />
+ </ListItem>
+ }
+
+ //
+ else if (keyName.charAt(0) === 'N' && keyName !== 'NAME') {
+ return <span key={i} />
+ } else if (keyName.includes('UNIT')) {
+ return <span key={i} />
+ }
+ else if (keyName === 'PREFIX') {
+ return (
+ <ListItem key={i}>
+ <TextField id={keyName} label='LABEL' value={val[keyName] || ''} size='small' variant="outlined" onChange={getInputValues} />
+ </ListItem>)
+ }
+ else if (keyName === 'NAME') {
+ return (
+ <ListItem key={i}>
+ <TextField disabled id={keyName} label='COMPONENT NAME' value={val[keyName] || ''} size='small' variant="outlined" onChange={getInputValues} />
+
+ </ListItem>)
+ }
+
+ return (
+ <ListItem key={i}>
+ <TextField id={keyName} label={keyName} value={val[keyName] || ''} size='small' variant="outlined" onChange={getInputValues} />
+ {val[`${keyName}_UNIT`] && <span style={{ marginLeft: '10px' }}>{val[`${keyName}_UNIT`] || ''}</span>}
+ </ListItem>)
+ })
+ }
+
+ <ListItem>
+ <Button size='small' variant="contained" color="primary" onClick={setProps}>SET PARAMETERS</Button>
+ </ListItem>
+
+ </div>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/ComponentSidebar.js b/blocks/eda-frontend/src/components/SchematicEditor/ComponentSidebar.js
new file mode 100644
index 00000000..9dc07c25
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/ComponentSidebar.js
@@ -0,0 +1,298 @@
+import React, { useEffect, useState } from 'react'
+import PropTypes from 'prop-types'
+import api from '../../utils/Api'
+import {
+ Hidden,
+ List,
+ ListItem,
+ Collapse,
+ ListItemIcon,
+ IconButton,
+ Tooltip,
+ TextField,
+ InputAdornment
+
+} from '@material-ui/core'
+import Loader from 'react-loader-spinner'
+import SearchIcon from '@material-ui/icons/Search'
+
+import { makeStyles } from '@material-ui/core/styles'
+import ExpandLess from '@material-ui/icons/ExpandLess'
+import ExpandMore from '@material-ui/icons/ExpandMore'
+import CloseIcon from '@material-ui/icons/Close'
+
+import './Helper/SchematicEditor.css'
+import { useDispatch, useSelector } from 'react-redux'
+import { fetchLibraries, toggleCollapse, fetchComponents, toggleSimulate } from '../../redux/actions/index'
+import SideComp from './SideComp.js'
+import SimulationProperties from './SimulationProperties'
+const COMPONENTS_PER_ROW = 3
+
+const useStyles = makeStyles((theme) => ({
+ toolbar: {
+ minHeight: '90px'
+ },
+ nested: {
+ paddingLeft: theme.spacing(2),
+ width: '100%'
+ },
+ head: {
+ marginRight: 'auto'
+ }
+}))
+
+const searchOptions = {
+ NAME: 'name__icontains',
+ KEYWORD: 'keyword__icontains',
+ DESCRIPTION: 'description__icontains',
+ COMPONENT_LIBRARY: 'component_library__library_name__icontains',
+ PREFIX: 'symbol_prefix'
+}
+
+// var tempSearchTxt = ''
+
+const searchOptionsList = ['NAME', 'KEYWORD', 'DESCRIPTION', 'COMPONENT_LIBRARY', 'PREFIX']
+
+export default function ComponentSidebar ({ compRef }) {
+ const classes = useStyles()
+ const libraries = useSelector(state => state.schematicEditorReducer.libraries)
+ const collapse = useSelector(state => state.schematicEditorReducer.collapse)
+ const components = useSelector(state => state.schematicEditorReducer.components)
+ const isSimulate = useSelector(state => state.schematicEditorReducer.isSimulate)
+
+ const dispatch = useDispatch()
+ const [isSearchedResultsEmpty, setIssearchedResultsEmpty] = useState(false)
+ const [searchText, setSearchText] = useState('')
+ const [loading, setLoading] = useState(false)
+
+ const [searchedComponentList, setSearchedComponents] = useState([])
+ const [searchOption, setSearchOption] = useState('NAME')
+ // const searchedComponentList = React.useRef([])
+
+ const timeoutId = React.useRef()
+
+ const handleSearchOptionType = (evt) => {
+ setSearchedComponents([])
+ setSearchOption(evt.target.value)
+ }
+
+ const handleSearchText = (evt) => {
+ // tempSearchTxt = evt.target.value
+ if (searchText.length === 0) {
+ setSearchedComponents([])
+ }
+ setSearchText(evt.target.value)
+ setSearchedComponents([])
+ // mimic the value so we can access the latest value in our API call.
+
+ // call api from here. and set the result to searchedComponentList.
+ }
+
+ React.useEffect(() => {
+ // if the user keeps typing, stop the API call!
+ clearTimeout(timeoutId.current)
+ // don't make an API call with no data
+ if (!searchText.trim()) return
+ // capture the timeoutId so we can
+ // stop the call if the user keeps typing
+ timeoutId.current = setTimeout(() => {
+ // call api here
+ setLoading(true)
+
+ api.get(`components/?${searchOptions[searchOption]}=${searchText}`)
+ .then(
+ (res) => {
+ if (res.data.length === 0) {
+ setIssearchedResultsEmpty(true)
+ } else {
+ setIssearchedResultsEmpty(false)
+ setSearchedComponents([...res.data])
+ }
+ }
+ )
+ .catch((err) => { console.error(err) })
+ setLoading(false)
+ }, 800)
+ }, [searchText, searchOption])
+
+ const handleCollapse = (id) => {
+ // Fetches Components for given library if not already fetched
+ if (collapse[id] === false && components[id].length === 0) {
+ dispatch(fetchComponents(id))
+ }
+
+ // Updates state of collapse to show/hide dropdown
+ dispatch(toggleCollapse(id))
+ }
+
+ // For Fetching Libraries
+ useEffect(() => {
+ dispatch(fetchLibraries())
+ }, [dispatch])
+
+ // Used to chunk array
+ const chunk = (array, size) => {
+ return array.reduce((chunks, item, i) => {
+ if (i % size === 0) {
+ chunks.push([item])
+ } else {
+ chunks[chunks.length - 1].push(item)
+ }
+ return chunks
+ }, [])
+ }
+
+ return (
+ <>
+ <Hidden smDown>
+ <div className={classes.toolbar} />
+ </Hidden>
+
+ <div style={isSimulate ? { display: 'none' } : {}}>
+ {/* Display List of categorized components */}
+ <List>
+ <ListItem button>
+ <h2 style={{ margin: '5px' }}>Components List</h2>
+ </ListItem>
+ <ListItem>
+
+ <TextField
+ id="standard-number"
+ placeholder="Search Component"
+ variant="outlined"
+ size="small"
+ value={searchText}
+ onChange={handleSearchText}
+ InputProps={{
+ startAdornment: (
+ <InputAdornment position="start">
+ <SearchIcon />
+ </InputAdornment>
+
+ )
+
+ }}
+ />
+
+ </ListItem>
+
+ <ListItem divider>
+ <TextField
+ style={{ width: '100%' }}
+ id="searchType"
+ size='small'
+ variant="outlined"
+ select
+ label="Search By"
+ value={searchOption}
+ onChange={handleSearchOptionType}
+ SelectProps={{
+ native: true
+ }}
+ >
+
+ {
+ searchOptionsList.map((value, i) => {
+ return (<option key={i} value={value}>
+ {value}
+ </option>)
+ })
+ }
+
+ </TextField>
+ </ListItem>
+ <div style={{ maxHeight: '70vh', overflowY: 'auto', overflowX: 'hidden' }} >
+ {searchText.length !== 0 && searchedComponentList.length !== 0 &&
+
+ searchedComponentList.map((component, i) => {
+ return (<ListItemIcon key={i}>
+ <SideComp component={component} />
+ </ListItemIcon>)
+ }
+ )
+
+ }
+
+ <ListItem>
+
+ <Loader
+ type="TailSpin"
+ color="#F44336"
+ height={100}
+ width={100}
+ visible={loading}
+ />
+ </ListItem>
+
+ {!loading && searchText.length !== 0 && isSearchedResultsEmpty &&
+
+ <span style={{ margin: '20px' }}>No Components Found</span>
+
+ }
+
+ {/* Collapsing List Mapped by Libraries fetched by the API */}
+ {searchText.length === 0 &&
+ libraries.sort(function (a, b) {
+ var textA = a.library_name.toUpperCase()
+ var textB = b.library_name.toUpperCase()
+ return (textA < textB) ? -1 : (textA > textB) ? 1 : 0
+ }).map(
+ (library) => {
+ return (
+ <div key={library.id}>
+ <ListItem onClick={(e, id = library.id) => handleCollapse(id)} button divider>
+ <span className={classes.head}>{library.library_name.slice(0, -4)}</span>
+ {collapse[library.id] ? <ExpandLess /> : <ExpandMore />}
+ </ListItem>
+ <Collapse in={collapse[library.id]} timeout={'auto'} unmountOnExit mountOnEnter exit={false}>
+ <List component="div" disablePadding dense >
+
+ {/* Chunked Components of Library */}
+ {
+ chunk(components[library.id], COMPONENTS_PER_ROW).map((componentChunk) => {
+ return (
+ <ListItem key={componentChunk[0].svg_path} divider>
+ {
+ componentChunk.map((component) => {
+ return (<ListItemIcon key={component.full_name}>
+ <SideComp component={component} />
+ </ListItemIcon>)
+ }
+ )
+ }
+ </ListItem>
+ )
+ })
+ }
+
+ </List>
+ </Collapse>
+ </div>
+ )
+ }
+ )
+ }
+ </div>
+ </List>
+ </div>
+ <div style={isSimulate ? {} : { display: 'none' }}>
+ {/* Display simulation modes parameters on left side pane */}
+ <List>
+ <ListItem button divider>
+ <h2 style={{ margin: '5px auto 5px 5px' }}>Simulation Modes</h2>
+ <Tooltip title="close">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={() => { dispatch(toggleSimulate()) }}>
+ <CloseIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ </ListItem>
+ <SimulationProperties />
+ </List>
+ </div>
+ </>
+ )
+}
+
+ComponentSidebar.propTypes = {
+ compRef: PropTypes.object.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Header.js b/blocks/eda-frontend/src/components/SchematicEditor/Header.js
new file mode 100644
index 00000000..97f882e0
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Header.js
@@ -0,0 +1,361 @@
+import React, { useEffect } from 'react'
+import PropTypes from 'prop-types'
+import { useHistory, Link as RouterLink } from 'react-router-dom'
+import {
+ Toolbar,
+ Typography,
+ IconButton,
+ Button,
+ Input,
+ Hidden,
+ Link,
+ Avatar,
+ Menu,
+ Fade,
+ MenuItem,
+ ListItemText,
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ DialogActions,
+ DialogContentText,
+ FormControlLabel,
+ Switch,
+ Snackbar
+} from '@material-ui/core'
+import { useSelector, useDispatch } from 'react-redux'
+import ShareIcon from '@material-ui/icons/Share'
+import CloseIcon from '@material-ui/icons/Close'
+import { makeStyles } from '@material-ui/core/styles'
+import { deepPurple } from '@material-ui/core/colors'
+
+import logo from '../../static/logo.png'
+import { setTitle, logout, setSchTitle, setSchShared } from '../../redux/actions/index'
+import store from '../../redux/store'
+
+const useStyles = makeStyles((theme) => ({
+ toolbarTitle: {
+ marginRight: theme.spacing(2)
+ },
+ input: {
+ marginLeft: theme.spacing(1),
+ width: '200px',
+ color: '#595959'
+ },
+ rightBlock: {
+ marginLeft: 'auto',
+ marginRight: theme.spacing(2)
+ },
+ button: {
+ marginRight: theme.spacing(0.7)
+ },
+ small: {
+ width: theme.spacing(3.7),
+ height: theme.spacing(3.7)
+ },
+ tools: {
+ padding: theme.spacing(1),
+ margin: theme.spacing(0, 0.8),
+ color: '#262626'
+ },
+ purple: {
+ width: theme.spacing(3.75),
+ height: theme.spacing(3.75),
+ color: theme.palette.getContrastText(deepPurple[500]),
+ backgroundColor: deepPurple[500],
+ fontSize: '17px'
+ }
+}))
+
+// Notification snackbar to give alert messages
+function SimpleSnackbar ({ open, close, message }) {
+ return (
+ <div>
+ <Snackbar
+ anchorOrigin={{
+ vertical: 'bottom',
+ horizontal: 'left'
+ }}
+ open={open}
+ autoHideDuration={6000}
+ onClose={close}
+ message={message}
+ action={
+ <React.Fragment>
+ <IconButton size="small" aria-label="close" color="inherit" onClick={close}>
+ <CloseIcon fontSize="small" />
+ </IconButton>
+ </React.Fragment>
+ }
+ />
+ </div>
+ )
+}
+
+SimpleSnackbar.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ message: PropTypes.string
+}
+
+function Header () {
+ const history = useHistory()
+ const classes = useStyles()
+ const auth = store.getState().authReducer
+ const schSave = useSelector(state => state.saveSchematicReducer)
+ const [anchorEl, setAnchorEl] = React.useState(null)
+
+ const dispatch = useDispatch()
+
+ const handleClick = (event) => {
+ setAnchorEl(event.currentTarget)
+ }
+
+ const handleClose = () => {
+ setAnchorEl(null)
+ }
+
+ const titleHandler = (e) => {
+ dispatch(setTitle(`* ${e.target.value}`))
+ dispatch(setSchTitle(`${e.target.value}`))
+ }
+
+ // handel notification snackbar open and close with message
+ const [snacOpen, setSnacOpen] = React.useState(false)
+ const [message, setMessage] = React.useState('')
+
+ const handleSnacClick = () => {
+ setSnacOpen(true)
+ }
+
+ const handleSnacClose = (event, reason) => {
+ if (reason === 'clickaway') {
+ return
+ }
+ setSnacOpen(false)
+ }
+
+ // handel schematic Share Dialog box
+ const [openShare, setShareOpen] = React.useState(false)
+
+ const handleShareOpen = () => {
+ setShareOpen(true)
+ }
+
+ const handleShareClose = () => {
+ setShareOpen(false)
+ }
+
+ // change saved schematic share status
+ const [shared, setShared] = React.useState(schSave.isShared)
+
+ useEffect(() => {
+ setShared(schSave.isShared)
+ }, [schSave.isShared])
+
+ const handleShareChange = (event) => {
+ setShared(event.target.checked)
+ dispatch(setSchShared(event.target.checked))
+ }
+
+ const handleShare = () => {
+ if (auth.isAuthenticated !== true) {
+ setMessage('You are not Logged In')
+ handleSnacClick()
+ } else if (schSave.isSaved !== true) {
+ setMessage('You have not saved the circuit')
+ handleSnacClick()
+ } else {
+ handleShareOpen()
+ }
+ }
+
+ // handel display format of last saved status
+ function getDate (jsonDate) {
+ var json = jsonDate
+ var date = new Date(json)
+ const dateTimeFormat = new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' })
+ const [{ value: month }, , { value: day }, , { value: hour }, , { value: minute }, , { value: second }] = dateTimeFormat.formatToParts(date)
+ return `${day} ${month} ${hour}:${minute}:${second}`
+ }
+
+ // handel Copy Share Url
+ const textAreaRef = React.useRef(null)
+
+ function copyToClipboard (e) {
+ textAreaRef.current.select()
+ document.execCommand('copy')
+ e.target.focus()
+ setMessage('Copied Successfully!')
+ handleSnacClick()
+ }
+
+ return (
+ <Toolbar variant="dense" color="default">
+ <SimpleSnackbar open={snacOpen} close={handleSnacClose} message={message} />
+
+ {/* Display logo */}
+ <IconButton edge="start" className={classes.button} color="primary">
+ <Avatar alt="Xcos logo" src={logo} className={classes.small} />
+ </IconButton>
+ <Typography
+ variant="h6"
+ color="inherit"
+ noWrap
+ className={classes.toolbarTitle}
+ >
+ <Link color="inherit" target='_blank' component={RouterLink} to="/">
+ Xcos
+ </Link>
+ </Typography>
+
+ {/* Input field for schematic title */}
+ <Hidden xsDown>
+ <Input
+ className={classes.input}
+ color="secondary"
+ value={schSave.title === 'Untitled_Schematic' ? 'Untitled_Schematic' : schSave.title}
+ onChange={titleHandler}
+ inputProps={{ 'aria-label': 'SchematicTitle' }}
+ />
+ </Hidden>
+
+ {/* Display last saved and shared option for saved schematics */}
+ {auth.isAuthenticated === true
+ ? <>
+ {(schSave.isSaved === true && schSave.details.save_time !== undefined)
+ ? <Typography
+ variant="body2"
+ style={{ margin: '0px 15px 0px auto', paddingTop: '5px', color: '#8c8c8c' }}
+ >
+ Last Saved : {getDate(schSave.details.save_time)} {/* Display last saved status for saved schematics */}
+ </Typography>
+ : <></>
+ }
+ <Button
+ size="small"
+ variant={shared !== true ? 'outlined' : 'contained'}
+ color="primary"
+ className={schSave.isSaved === true && schSave.details.save_time !== undefined ? classes.button : classes.rightBlock}
+ startIcon={<ShareIcon />}
+ onClick={handleShare}
+ >
+ <Hidden xsDown>Share</Hidden>
+ </Button>
+ </>
+ : <></>
+ }
+
+ {/* Share dialog box to get share url */}
+ <Dialog
+ open={openShare}
+ onClose={handleShareClose}
+ aria-labelledby="share-dialog-title"
+ aria-describedby="share-dialog-description"
+ >
+ <DialogTitle id="share-dialog-title">{'Share Your Schematic'}</DialogTitle>
+ <DialogContent>
+ <DialogContentText id="share-dialog-description">
+ <FormControlLabel
+ control={<Switch checked={shared} onChange={handleShareChange} name="shared" />}
+ label=": Sharing On"
+ />
+ </DialogContentText>
+ <DialogContentText id="share-dialog-description">
+ {shared === true
+ ? <input
+ ref={textAreaRef}
+ value={`${window.location.protocol}\\\\${window.location.host}/eda/#/editor?id=${schSave.details.save_id}`}
+ readOnly
+ />
+ : <> Turn On sharing </>
+ }
+ </DialogContentText>
+
+ </DialogContent>
+ <DialogActions>
+ {shared === true && document.queryCommandSupported('copy')
+ ? <Button onClick={copyToClipboard} color="primary" autoFocus>
+ Copy url
+ </Button>
+ : <></>
+ }
+ <Button onClick={handleShareClose} color="primary" autoFocus>
+ close
+ </Button>
+ </DialogActions>
+ </Dialog>
+
+ {/* Display login option or user menu as per authenticated status */}
+ {
+ (!auth.isAuthenticated ? (<Button
+ size="small"
+ component={RouterLink}
+ to="/login"
+ style={{ marginLeft: 'auto' }}
+ color="primary"
+ variant="outlined"
+ >
+ Login
+ </Button>)
+ : (<>
+
+ <IconButton
+ edge="start"
+ color="primary"
+ aria-controls="simple-menu"
+ aria-haspopup="true"
+ onClick={handleClick}
+ >
+ <Avatar className={classes.purple}>
+ {auth.user.username.charAt(0).toUpperCase()}
+ </Avatar>
+ </IconButton>
+ <Menu
+ id="simple-menu"
+ anchorEl={anchorEl}
+ keepMounted
+ open={Boolean(anchorEl)}
+ onClose={handleClose}
+ TransitionComponent={Fade}
+ style={{ marginTop: '25px' }}
+ >
+ <MenuItem
+ target='_blank'
+ component={RouterLink}
+ to="/dashboard"
+ onClick={handleClose}
+ >
+ <ListItemText primary={auth.user.username} secondary={auth.user.email} />
+ </MenuItem>
+ <MenuItem
+ target='_blank'
+ component={RouterLink}
+ to="/dashboard/profile"
+ onClick={handleClose}
+ >
+ My Profile
+ </MenuItem>
+ <MenuItem
+ target='_blank'
+ component={RouterLink}
+ to="/dashboard/schematics"
+ onClick={handleClose}
+ >
+ My Schematics
+ </MenuItem>
+ <MenuItem onClick={() => {
+ store.dispatch(logout(history))
+ }}>
+ Logout
+ </MenuItem>
+ </Menu>
+ </>
+ )
+ )
+ }
+ </Toolbar>
+ )
+}
+
+export default Header
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentDrag.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentDrag.js
new file mode 100644
index 00000000..c0d52b5e
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentDrag.js
@@ -0,0 +1,737 @@
+/* eslint-disable no-inner-declarations */
+/* eslint-disable no-new */
+/* eslint-disable new-cap */
+/* eslint-disable */
+import mxGraphFactory from 'mxgraph'
+import * as actions from '../../../redux/actions/actions'
+import store from '../../../redux/store'
+import dot from '../../../static/dot.gif'
+
+// import ClipBoardFunct from './ClipBoard.js'
+// import NetlistInfoFunct from './NetlistInfo.js'
+import ToolbarTools from './ToolbarTools.js'
+import KeyboardShorcuts from './KeyboardShorcuts.js'
+import { SideBar } from './SideBar.js'
+
+var graph
+
+const {
+ mxGraph,
+ mxRubberband,
+ mxClient,
+ mxUtils,
+ mxEvent,
+ mxOutline,
+ mxCell,
+ mxPoint,
+ mxGraphView,
+ mxCellEditor,
+ mxEdgeHandler,
+ mxConnectionConstraint,
+ mxEdgeSegmentHandler,
+ mxCellHighlight,
+ mxEdgeStyle,
+ mxStyleRegistry,
+ mxConnectionHandler,
+ mxConstants,
+ mxGraphHandler,
+ mxCylinder,
+ mxCellRenderer,
+ mxCodec,
+ mxEditor,
+ mxEditorUI,
+ mxConstraintHandler,
+ mxImage
+} = new mxGraphFactory()
+
+export default function LoadGrid (container, sidebar, outline) {
+ // Checks if the browser is supported
+ if (!mxClient.isBrowserSupported()) {
+ // Displays an error message if the browser is not supported.
+ mxUtils.error('Browser is not supported!', 200, false)
+ } else {
+ // Disables the built-in context men
+ mxEvent.disableContextMenu(container)
+ // Tells if the cell is a component or a pin or a wire
+ mxCell.prototype.CellType = 'This is where you say what the vertex is'
+ // Tells the magnitude of a resistor/capacitor
+ mxCell.prototype.Magnitude = null
+ // Tells whether the pin is input/output
+ mxCell.prototype.pinType = ' '
+ // Tells if the cell is component, Default is false
+ mxCell.prototype.Component = false
+ // Tells if the cell is pin, Default is false
+ mxCell.prototype.Pin = false
+ // Pin number of the component, default is 0
+ mxCell.prototype.PinNumber = 0
+ // Parent component of a pin, default is null
+ mxCell.prototype.ParentComponent = null
+ mxCell.prototype.symbol = null
+ mxCell.prototype.node = null
+ mxCell.prototype.PinName = ''
+ mxCell.prototype.CompObject = null
+ mxCell.prototype.properties = {}
+ mxCell.prototype.sourceVertex = false
+ mxCell.prototype.targetVertex = false
+ mxCell.prototype.tarx = 0
+ mxCell.prototype.tary = 0
+ mxCell.prototype.PointsArray = null
+ // mxCell.prototype.ConnectedNode = null
+
+ // Enables guides
+ mxGraphHandler.prototype.guidesEnabled = true
+ mxEdgeHandler.prototype.snapToTerminals = true
+
+ // Enable cell Rotation
+ // mxVertexHandler.prototype.rotationEnabled = true
+
+ // Creates the graph inside the given container
+ graph = new mxGraph(container)
+
+
+ mxConnectionHandler.prototype.movePreviewAway = false
+ mxConnectionHandler.prototype.waypointsEnabled = true
+ mxGraph.prototype.resetEdgesOnConnect = false
+ mxConstants.SHADOWCOLOR = '#C0C0C0'
+ var joinNodeSize = 7
+ var strokeWidth = 2
+
+ // Replaces the port image
+ mxConstraintHandler.prototype.pointImage = new mxImage(dot, 10, 10)
+
+ // Enables rubberband selection
+ new mxRubberband(graph)
+
+ // Creates the outline (navigator, overview) for moving
+ // around the graph in the top, right corner of the window.
+ var outln = new mxOutline(graph, outline)
+ // To show the images in the outline, uncomment the following code
+ outln.outline.labelsVisible = true
+ outln.outline.setHtmlLabels(true)
+
+ graph.addListener(mxEvent.DOUBLE_CLICK, function (sender, evt) {
+ var cell = evt.getProperty('cell')
+ // mxUtils.alert('Doubleclick: ' + ((cell != null) ? cell.symbol : 'Graph'))
+ if (cell !== undefined && cell.CellType === 'Component') {
+ store.dispatch({
+ type: actions.GET_COMP_PROPERTIES,
+ payload: {
+ id: cell.id,
+ compProperties: cell.properties
+ }
+ })
+ } else if (cell !== undefined && cell.CellType === 'This is where you say what the vertex is') {
+ store.dispatch({
+ type: actions.CLOSE_COMP_PROPERTIES
+ })
+ } else if (cell === undefined) {
+ store.dispatch({
+ type: actions.CLOSE_COMP_PROPERTIES
+ })
+ }
+ evt.consume()
+ })
+
+ graph.view.scale = 1
+ graph.setPanning(true)
+ graph.setConnectable(true)
+ graph.setConnectableEdges(true)
+ graph.setDisconnectOnMove(false)
+ graph.foldingEnabled = false
+
+ // Panning handler consumed right click so this must be
+ // disabled if right click should stop connection handler.
+ graph.panningHandler.isPopupTrigger = function () { return false }
+
+ // Enables return key to stop editing (use shift-enter for newlines)
+ graph.setEnterStopsCellEditing(true)
+
+ // Adds rubberband selection
+ new mxRubberband(graph)
+
+ // Alternative solution for implementing connection points without child cells.
+ // This can be extended as shown in portrefs.html example to allow for per-port
+ // incoming/outgoing direction.
+ graph.getAllConnectionConstraints = function (terminal) {
+ var geo = (terminal != null) ? this.getCellGeometry(terminal.cell) : null
+
+ if ((geo != null ? !geo.relative : false) && this.getModel().isVertex(terminal.cell) && this.getModel().getChildCount(terminal.cell) === 0) {
+ return [new mxConnectionConstraint(new mxPoint(0, 0.5), false), new mxConnectionConstraint(new mxPoint(1, 0.5), false)]
+ }
+
+ return null
+ }
+
+ // Makes sure non-relative cells can only be connected via constraints
+ graph.connectionHandler.isConnectableCell = function (cell) {
+ if (this.graph.getModel().isEdge(cell)) {
+ return true
+ } else {
+ var geo = (cell != null) ? this.graph.getCellGeometry(cell) : null
+
+ return (geo != null) ? geo.relative : false
+ }
+ }
+ mxEdgeHandler.prototype.isConnectableCell = function (cell) {
+ return graph.connectionHandler.isConnectableCell(cell)
+ }
+
+ // Adds a special tooltip for edges
+ graph.setTooltips(true)
+
+ var getTooltipForCell = graph.getTooltipForCell
+ graph.getTooltipForCell = function (cell) {
+ var tip = ''
+
+ if (cell != null) {
+ var src = this.getModel().getTerminal(cell, true)
+
+ if (src != null) {
+ tip += this.getTooltipForCell(src) + ' '
+ }
+
+ var parent = this.getModel().getParent(cell)
+
+ if (this.getModel().isVertex(parent)) {
+ tip += this.getTooltipForCell(parent) + '.'
+ }
+
+ tip += getTooltipForCell.apply(this, arguments)
+
+ var trg = this.getModel().getTerminal(cell, false)
+
+ if (trg != null) {
+ tip += ' ' + this.getTooltipForCell(trg)
+ }
+ }
+
+ return tip
+ }
+
+ // Switch for black background and bright styles
+ var invert = false
+
+ if (invert) {
+ container.style.backgroundColor = 'black'
+
+ // White in-place editor text color
+ var mxCellEditorStartEditing = mxCellEditor.prototype.startEditing
+ mxCellEditor.prototype.startEditing = function (cell, trigger) {
+ mxCellEditorStartEditing.apply(this, arguments)
+
+ if (this.textarea != null) {
+ this.textarea.style.color = '#FFFFFF'
+ }
+ }
+
+ mxGraphHandler.prototype.previewColor = 'white'
+ }
+
+ var labelBackground = (invert) ? '#000000' : '#FFFFFF'
+ var fontColor = (invert) ? '#FFFFFF' : '#000000'
+ var strokeColor = (invert) ? '#C0C0C0' : '#000000'
+ // var fillColor = (invert) ? 'none' : '#FFFFFF'
+
+ var style = graph.getStylesheet().getDefaultEdgeStyle()
+ delete style.endArrow
+ style.strokeColor = strokeColor
+ style.labelBackgroundColor = labelBackground
+ style.edgeStyle = 'wireEdgeStyle'
+ style.fontColor = fontColor
+ style.fontSize = '9'
+ style.movable = '0'
+ style.strokeWidth = strokeWidth
+ // style['rounded'] = '1';
+
+ // Sets join node size
+ style.startSize = joinNodeSize
+ style.endSize = joinNodeSize
+
+ style = graph.getStylesheet().getDefaultVertexStyle()
+ style.gradientDirection = 'south'
+ // style['gradientColor'] = '#909090';
+ style.strokeColor = strokeColor
+ // style['fillColor'] = '#e0e0e0';
+ style.fillColor = 'none'
+ style.fontColor = fontColor
+ style.fontStyle = '1'
+ style.fontSize = '12'
+ style.resizable = '0'
+ style.rounded = '1'
+ style.strokeWidth = strokeWidth
+
+ // var parent = graph.getDefaultParent()
+
+ SideBar(graph, sidebar)
+ KeyboardShorcuts(graph)
+ //NetlistInfoFunct(graph)
+ ToolbarTools(graph)
+
+ store.subscribe(() => {
+ var id = store.getState().componentPropertiesReducer.id
+ var props = store.getState().componentPropertiesReducer.compProperties
+ var cellList = graph.getModel().cells
+ var c = cellList[id]
+ if (c !== undefined) {
+ c.properties = props
+ }
+ })
+ var editor = new mxEditor()
+ /* var xml = '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><Object as="properties"/></mxCell><mxCell value="PRI_LO" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName=""><mxGeometry x="150" y="70" width="24" height="80" as="geometry"/><Object id="46" name="PRI_LO" svg_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;PRI_LO&quot;" data_link="" full_name="PWR-PRI_LO-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="PRI_LO" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=bottom;rotation=0" id="3" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName=""><mxGeometry x="12" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="PRI_LO" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" as="ParentComponent"><mxGeometry x="150" y="70" width="24" height="80" as="geometry"/><Object id="46" name="PRI_LO" svg_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;PRI_LO&quot;" data_link="" full_name="PWR-PRI_LO-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="PRI_LO" as="properties"/></mxCell><Object as="properties"/></mxCell></root></mxGraphModel>'
+ var doc = mxUtils.parseXml(xml);
+ var node = doc.documentElement;
+ editor.readGraphModel(node); */
+ graph.getModel().beginUpdate()
+ try {
+ /* var xml = '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><Object as="properties"/></mxCell><mxCell value="PRI_LO" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName=""><mxGeometry x="150" y="70" width="24" height="80" as="geometry"/><Object id="46" name="PRI_LO" svg_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;PRI_LO&quot;" data_link="" full_name="PWR-PRI_LO-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="PRI_LO" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=bottom;rotation=0" id="3" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName=""><mxGeometry x="12" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="PRI_LO" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" as="ParentComponent"><mxGeometry x="150" y="70" width="24" height="80" as="geometry"/><Object id="46" name="PRI_LO" svg_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-PRI_LO-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;PRI_LO&quot;" data_link="" full_name="PWR-PRI_LO-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="PRI_LO" as="properties"/></mxCell><Object as="properties"/></mxCell></root></mxGraphModel>'
+ var xmlDoc = mxUtils.parseXml(xml)
+ var node = xmlDoc.documentElement
+ var dec = new mxCodec(node)
+ dec.decode(node, graph.getModel())
+ console.log(dec)*/
+
+
+ } finally {
+ // Updates the display
+ graph.getModel().endUpdate()
+ }
+
+ // Shows XML for debugging the actual modelSS
+
+ // Wire-mode
+ var checkbox = {
+ checked: false
+ }
+
+ //document.body.appendChild(checkbox)
+ //mxUtils.write(document.body, 'Wire Mode')
+
+ // Starts connections on the background in wire-mode
+ var connectionHandlerIsStartEvent = graph.connectionHandler.isStartEvent
+ graph.connectionHandler.isStartEvent = function (me) {
+ return checkbox.checked || connectionHandlerIsStartEvent.apply(this, arguments)
+ }
+
+ // Avoids any connections for gestures within tolerance except when in wire-mode
+ // or when over a port
+ var connectionHandlerMouseUp = graph.connectionHandler.mouseUp
+ graph.connectionHandler.mouseUp = function (sender, me) {
+ if (this.first != null && this.previous != null) {
+ var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY())
+ var dx = Math.abs(point.x - this.first.x)
+ var dy = Math.abs(point.y - this.first.y)
+
+ if (dx < this.graph.tolerance && dy < this.graph.tolerance) {
+ // Selects edges in non-wire mode for single clicks, but starts
+ // connecting for non-edges regardless of wire-mode
+ if (!checkbox.checked && this.graph.getModel().isEdge(this.previous.cell)) {
+ this.reset()
+ }
+
+ return
+ }
+ }
+
+ connectionHandlerMouseUp.apply(this, arguments)
+ }
+
+ // Grid
+ /* var checkbox2 = document.createElement('input')
+ checkbox2.setAttribute('type', 'checkbox')
+ checkbox2.setAttribute('checked', 'true')
+
+ document.body.appendChild(checkbox2)
+ mxUtils.write(document.body, 'Grid')
+
+ mxEvent.addListener(checkbox2, 'click', function (evt) {
+ if (checkbox2.checked) {
+ container.style.background = 'url(\'images/wires-grid.gif\')'
+ } else {
+ container.style.background = ''
+ }
+
+ container.style.backgroundColor = (invert) ? 'black' : 'white'
+ }) */
+
+ mxEvent.disableContextMenu(container)
+ };
+
+ // Computes the position of edge to edge connection points.
+ mxGraphView.prototype.updateFixedTerminalPoint = function (edge, terminal, source, constraint) {
+ var pt = null
+
+ if (constraint != null) {
+ pt = this.graph.getConnectionPoint(terminal, constraint)
+ }
+
+ if (source) {
+ edge.sourceSegment = null
+ } else {
+ edge.targetSegment = null
+ }
+
+ if (pt == null) {
+ var s = this.scale
+ var tr = this.translate
+ var orig = edge.origin
+ var geo = this.graph.getCellGeometry(edge.cell)
+ pt = geo.getTerminalPoint(source)
+
+ // Computes edge-to-edge connection point
+ if (pt != null) {
+ pt = new mxPoint(s * (tr.x + pt.x + orig.x),
+ s * (tr.y + pt.y + orig.y))
+
+ // Finds nearest segment on edge and computes intersection
+ if (terminal != null && terminal.absolutePoints != null) {
+ var seg = mxUtils.findNearestSegment(terminal, pt.x, pt.y)
+
+ // Finds orientation of the segment
+ var p0 = terminal.absolutePoints[seg]
+ var pe = terminal.absolutePoints[seg + 1]
+ var horizontal = (p0.x - pe.x === 0)
+
+ // Stores the segment in the edge state
+ var key = (source) ? 'sourceConstraint' : 'targetConstraint'
+ var value = (horizontal) ? 'horizontal' : 'vertical'
+ edge.style[key] = value
+
+ // Keeps the coordinate within the segment bounds
+ if (horizontal) {
+ pt.x = p0.x
+ pt.y = Math.min(pt.y, Math.max(p0.y, pe.y))
+ pt.y = Math.max(pt.y, Math.min(p0.y, pe.y))
+ } else {
+ pt.y = p0.y
+ pt.x = Math.min(pt.x, Math.max(p0.x, pe.x))
+ pt.x = Math.max(pt.x, Math.min(p0.x, pe.x))
+ }
+ }
+ }
+ // Computes constraint connection points on vertices and ports
+ else if (terminal != null && terminal.cell.geometry.relative) {
+ pt = new mxPoint(this.getRoutingCenterX(terminal),
+ this.getRoutingCenterY(terminal))
+ }
+ }
+
+ edge.setAbsoluteTerminalPoint(pt, source)
+ }
+ // Sets source terminal point for edge-to-edge connections.
+ mxConnectionHandler.prototype.createEdgeState = function (me) {
+ var edge = this.graph.createEdge()
+
+ if (this.sourceConstraint != null && this.previous != null) {
+ edge.style = mxConstants.STYLE_EXIT_X + '=' + this.sourceConstraint.point.x + ';' +
+ mxConstants.STYLE_EXIT_Y + '=' + this.sourceConstraint.point.y + ';'
+ } else if (this.graph.model.isEdge(me.getCell())) {
+ var scale = this.graph.view.scale
+ var tr = this.graph.view.translate
+ var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
+ this.graph.snap(me.getGraphY() / scale) - tr.y)
+ edge.geometry.setTerminalPoint(pt, true)
+ }
+
+ return this.graph.view.createState(edge)
+ }
+
+ // Uses right mouse button to create edges on background (see also: lines 67 ff)
+ mxConnectionHandler.prototype.isStopEvent = function (me) {
+ return me.getState() != null || mxEvent.isRightMouseButton(me.getEvent())
+ }
+
+ // Updates target terminal point for edge-to-edge connections.
+ try {
+ var mxConnectionHandlerUpdateCurrentState = mxConnectionHandler.prototype.updateCurrentState
+ mxConnectionHandler.prototype.updateCurrentState = function (me) {
+ try {
+ mxConnectionHandlerUpdateCurrentState.apply(this, arguments)
+ }
+ catch(err) {
+
+ }
+ if (this.edgeState != null) {
+ this.edgeState.cell.geometry.setTerminalPoint(null, false)
+
+ if (this.shape != null && this.currentState != null &&
+ this.currentState.view.graph.model.isEdge(this.currentState.cell)) {
+ var scale = this.graph.view.scale
+ var tr = this.graph.view.translate
+ var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x,
+ this.graph.snap(me.getGraphY() / scale) - tr.y)
+ this.edgeState.cell.geometry.setTerminalPoint(pt, false)
+ }
+ }
+ } }
+ catch(e){
+ console
+ }
+
+ // Updates the terminal and control points in the cloned preview.
+ mxEdgeSegmentHandler.prototype.clonePreviewState = function (point, terminal) {
+ var clone = mxEdgeHandler.prototype.clonePreviewState.apply(this, arguments)
+ clone.cell = clone.cell.clone()
+
+ if (this.isSource || this.isTarget) {
+ clone.cell.geometry = clone.cell.geometry.clone()
+
+ // Sets the terminal point of an edge if we're moving one of the endpoints
+ if (this.graph.getModel().isEdge(clone.cell)) {
+ // TODO: Only set this if the target or source terminal is an edge
+ clone.cell.geometry.setTerminalPoint(point, this.isSource)
+ } else {
+ clone.cell.geometry.setTerminalPoint(null, this.isSource)
+ }
+ }
+
+ return clone
+ }
+
+ var mxEdgeHandlerConnect = mxEdgeHandler.prototype.connect
+ mxEdgeHandler.prototype.connect = function (edge, terminal, isSource, isClone, me) {
+ var result = null
+ var model = this.graph.getModel()
+ // var parent = model.getParent(edge)
+
+ model.beginUpdate()
+ try {
+ result = mxEdgeHandlerConnect.apply(this, arguments)
+ var geo = model.getGeometry(result)
+
+ if (geo != null) {
+ geo = geo.clone()
+ var pt = null
+
+ if (model.isEdge(terminal)) {
+ pt = this.abspoints[(this.isSource) ? 0 : this.abspoints.length - 1]
+ pt.x = pt.x / this.graph.view.scale - this.graph.view.translate.x
+ pt.y = pt.y / this.graph.view.scale - this.graph.view.translate.y
+
+ var pstate = this.graph.getView().getState(
+ this.graph.getModel().getParent(edge))
+
+ if (pstate != null) {
+ pt.x -= pstate.origin.x
+ pt.y -= pstate.origin.y
+ }
+
+ pt.x -= this.graph.panDx / this.graph.view.scale
+ pt.y -= this.graph.panDy / this.graph.view.scale
+ }
+
+ geo.setTerminalPoint(pt, isSource)
+ model.setGeometry(edge, geo)
+ }
+ } finally {
+ model.endUpdate()
+ }
+
+ return result
+ }
+
+ var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker
+ mxConnectionHandler.prototype.createMarker = function () {
+ var marker = mxConnectionHandlerCreateMarker.apply(this, arguments)
+
+ // Uses complete area of cell for new connections (no hotspot)
+ marker.intersects = function (state, evt) {
+ return true
+ }
+
+ // Adds in-place highlighting
+ // eslint-disable-next-line no-unused-vars
+ var mxCellHighlightHighlight = mxCellHighlight.prototype.highlight
+ marker.highlight.highlight = function (state) {
+ if (this.state !== state) {
+ if (this.state != null) {
+ this.state.style = this.lastStyle
+
+ // Workaround for shape using current stroke width if no strokewidth defined
+ this.state.style.strokeWidth = this.state.style.strokeWidth || '1'
+ this.state.style.strokeColor = this.state.style.strokeColor || 'none'
+
+ if (this.state.shape != null) {
+ this.state.view.graph.cellRenderer.configureShape(this.state)
+ this.state.shape.redraw()
+ }
+ }
+
+ if (state != null) {
+ this.lastStyle = state.style
+ state.style = mxUtils.clone(state.style)
+ state.style.strokeColor = '#00ff00'
+ state.style.strokeWidth = '3'
+
+ if (state.shape != null) {
+ state.view.graph.cellRenderer.configureShape(state)
+ state.shape.redraw()
+ }
+ }
+
+ this.state = state
+ }
+ }
+
+ return marker
+ }
+
+ var mxEdgeHandlerCreateMarker = mxEdgeHandler.prototype.createMarker
+ mxEdgeHandler.prototype.createMarker = function () {
+ var marker = mxEdgeHandlerCreateMarker.apply(this, arguments)
+
+ // Adds in-place highlighting when reconnecting existing edges
+ marker.highlight.highlight = this.graph.connectionHandler.marker.highlight.highlight
+
+ return marker
+ }
+
+ var mxGraphGetCellStyle = mxGraph.prototype.getCellStyle
+ mxGraph.prototype.getCellStyle = function (cell) {
+ var style = mxGraphGetCellStyle.apply(this, arguments)
+
+ if (style != null && this.model.isEdge(cell)) {
+ style = mxUtils.clone(style)
+
+ if (this.model.isEdge(this.model.getTerminal(cell, true))) {
+ style.startArrow = 'oval'
+ }
+
+ if (this.model.isEdge(this.model.getTerminal(cell, false))) {
+ style.endArrow = 'oval'
+ }
+ }
+
+ return style
+ }
+
+ function ResistorShape () { };
+ ResistorShape.prototype = new mxCylinder()
+ ResistorShape.prototype.constructor = ResistorShape
+
+ ResistorShape.prototype.redrawPath = function (path, x, y, w, h, isForeground) {
+ var dx = w / 16
+
+ if (isForeground) {
+ path.moveTo(0, h / 2)
+ path.lineTo(2 * dx, h / 2)
+ path.lineTo(3 * dx, 0)
+ path.lineTo(5 * dx, h)
+ path.lineTo(7 * dx, 0)
+ path.lineTo(9 * dx, h)
+ path.lineTo(11 * dx, 0)
+ path.lineTo(13 * dx, h)
+ path.lineTo(14 * dx, h / 2)
+ path.lineTo(16 * dx, h / 2)
+
+ path.end()
+ }
+ }
+
+ mxCellRenderer.registerShape('resistor', ResistorShape)
+
+ mxEdgeStyle.WireConnector = function (state, source, target, hints, result) {
+ // Creates array of all way- and terminalpoints
+ var pts = state.absolutePoints
+ var horizontal = true
+ var hint = null
+
+ // Gets the initial connection from the source terminal or edge
+ if (source != null && state.view.graph.model.isEdge(source.cell)) {
+ horizontal = state.style.sourceConstraint === 'horizontal'
+ } else if (source != null) {
+ horizontal = source.style.portConstraint !== 'vertical'
+
+ // Checks the direction of the shape and rotates
+ var direction = source.style[mxConstants.STYLE_DIRECTION]
+
+ if (direction === 'north' || direction === 'south') {
+ horizontal = !horizontal
+ }
+ }
+
+ // Adds the first point
+ // TODO: Should move along connected segment
+ var pt = pts[0]
+
+ if (pt == null && source != null) {
+ pt = new mxPoint(state.view.getRoutingCenterX(source), state.view.getRoutingCenterY(source))
+ } else if (pt != null) {
+ pt = pt.clone()
+ }
+
+ var first = pt
+
+ // Adds the waypoints
+ if (hints != null && hints.length > 0) {
+ // FIXME: First segment not movable
+ /* hint = state.view.transformControlPoint(state, hints[0]);
+ mxLog.show();
+ mxLog.debug(hints.length,'hints0.y='+hint.y, pt.y)
+
+ if (horizontal && Math.floor(hint.y) != Math.floor(pt.y))
+ {
+ mxLog.show();
+ mxLog.debug('add waypoint');
+
+ pt = new mxPoint(pt.x, hint.y);
+ result.push(pt);
+ pt = pt.clone();
+ //horizontal = !horizontal;
+ } */
+
+ for (var i = 0; i < hints.length; i++) {
+ horizontal = !horizontal
+ hint = state.view.transformControlPoint(state, hints[i])
+
+ if (horizontal) {
+ if (pt.y !== hint.y) {
+ pt.y = hint.y
+ result.push(pt.clone())
+ }
+ } else if (pt.x !== hint.x) {
+ pt.x = hint.x
+ result.push(pt.clone())
+ }
+ }
+ } else {
+ hint = pt
+ }
+
+ // Adds the last point
+ pt = pts[pts.length - 1]
+
+ // TODO: Should move along connected segment
+ if (pt == null && target != null) {
+ pt = new mxPoint(state.view.getRoutingCenterX(target), state.view.getRoutingCenterY(target))
+ }
+
+ if (horizontal) {
+ if (pt.y !== hint.y && first.x !== pt.x) {
+ result.push(new mxPoint(pt.x, hint.y))
+ }
+ } else if (pt.x !== hint.x && first.y !== pt.y) {
+ result.push(new mxPoint(hint.x, pt.y))
+ }
+ }
+
+ mxStyleRegistry.putValue('wireEdgeStyle', mxEdgeStyle.WireConnector)
+
+ // This connector needs an mxEdgeSegmentHandler
+ var mxGraphCreateHandler = mxGraph.prototype.createHandler
+ mxGraph.prototype.createHandler = function (state) {
+ // eslint-disable-next-line no-unused-vars
+ var result = null
+
+ if (state != null) {
+ if (this.model.isEdge(state.cell)) {
+ var style = this.view.getEdgeStyle(state)
+
+ if (style === mxEdgeStyle.WireConnector) {
+ return new mxEdgeSegmentHandler(state)
+ }
+ }
+ }
+
+ return mxGraphCreateHandler.apply(this, arguments)
+ }
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentParametersData.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentParametersData.js
new file mode 100644
index 00000000..b6f219d2
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ComponentParametersData.js
@@ -0,0 +1,378 @@
+const ComponentParameters = {
+ // capacitor
+ C: {
+ PREFIX: 'C',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+ VALUE_UNIT: 'F'
+ },
+
+ D: {
+ PREFIX: 'D',
+ NAME: '',
+ N1: '',
+ N2: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ I: {
+
+ ISOURCE: {
+ PREFIX: 'I',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '0',
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+ VALUE_UNIT: 'A'
+ },
+ SINE: {
+ PREFIX: 'I',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ OFFSET: '1.0',
+ AMPLITUDE: '1.0',
+ FREQUENCY: '1K',
+ DELAY: '0.0',
+ DAMPING_FACTOR: '0.0',
+ PHASE: '0.0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ OFFSET_UNIT: 'A',
+ AMPLITUDE_UNIT: 'A',
+ FREQUENCY_UNIT: 'Hz',
+ DELAY_UNIT: 'S',
+ DAMPING_FACTOR_UNIT: '1/S',
+ PHASE_UNIT: 'DEG'
+ },
+
+ PULSE: {
+ PREFIX: 'I',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ INITIAL_VALUE: '0',
+ PULSED_VALUE: '1',
+ DELAY_TIME: '1K',
+ RISE_TIME: '1u',
+ FALL_TIME: '1u',
+ PULSE_WIDTH: '1m',
+ PERIOD: '1m',
+ PHASE: '0.0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ INITIAL_VALUE_UNIT: 'A',
+ PULSED_VALUE_UNIT: 'A',
+ DELAY_TIME_UNIT: 'S',
+ RISE_TIME_UNIT: 'S',
+ FALL_TIME_UNIT: 'S',
+ PULSE_WIDTH_UNIT: 'S',
+ PERIOD_UNIT: 'S',
+ PHASE_UNIT: 'DEG'
+ },
+
+ DC: {
+ PREFIX: 'I',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ VALUE_UNIT: 'A'
+ },
+
+ EXP: {
+ PREFIX: 'I',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ INITIAL_VALUE: '0',
+ PULSED_VALUE: '1',
+
+ RISE_DELAY_TIME: '100u',
+ RISE_TIME_CONSTANT: '20u',
+ FALL_DELAY_TIME: '500u',
+ FALL_TIME_CONSTANT: '60u',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ INITIAL_VALUE_UNIT: 'A',
+ PULSED_VALUE_UNIT: 'A',
+ RISE_DELAY_TIME_UNIT: 'S',
+ RISE_TIME_CONSTANT_UNIT: 'S',
+ FALL_DELAY_TIME_UNIT: 'S',
+ FALL_TIME_CONSTANT_UNIT: 'S'
+ }
+
+ },
+
+ G: {
+ PREFIX: 'G',
+ NAME: '',
+ N1: '',
+ N2: '',
+ NC1: '',
+ NC2: '',
+ VALUE: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ F: {
+ PREFIX: 'F',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VNAM: '',
+ VALUE: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ H: {
+ PREFIX: 'H',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VNAM: '',
+ VALUE: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ J: {
+ PREFIX: 'J',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ O: {
+ PREFIX: 'O',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ N4: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ T: {
+ PREFIX: 'T',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ N4: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+ // Inductor
+ L: {
+ PREFIX: 'L',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+ VALUE_UNIT: 'H'
+ },
+
+ M: {
+ PREFIX: 'M',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ N4: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ Q: {
+ PREFIX: 'Q',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ V: {
+ VSOURCE: {
+ PREFIX: 'V',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '0',
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+ VALUE_UNIT: 'V'
+ },
+ SINE: {
+ PREFIX: 'V',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ OFFSET: '1.0',
+ AMPLITUDE: '1.0',
+ FREQUENCY: '1K',
+ DELAY: '0.0',
+ DAMPING_FACTOR: '0.0',
+ PHASE: '0.0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ OFFSET_UNIT: 'V',
+ AMPLITUDE_UNIT: 'V',
+ FREQUENCY_UNIT: 'Hz',
+ DELAY_UNIT: 'S',
+ DAMPING_FACTOR_UNIT: '1/S',
+ PHASE_UNIT: 'DEG'
+ },
+
+ PULSE: {
+ PREFIX: 'V',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ INITIAL_VALUE: '0',
+ PULSED_VALUE: '1',
+ DELAY_TIME: '1K',
+ RISE_TIME: '1u',
+ FALL_TIME: '1u',
+ PULSE_WIDTH: '1m',
+ PERIOD: '1m',
+ PHASE: '0.0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ INITIAL_VALUE_UNIT: 'V',
+ PULSED_VALUE_UNIT: 'V',
+ DELAY_TIME_UNIT: 'S',
+ RISE_TIME_UNIT: 'S',
+ FALL_TIME_UNIT: 'S',
+ PULSE_WIDTH_UNIT: 'S',
+ PERIOD_UNIT: 'S',
+ PHASE_UNIT: 'DEG'
+ },
+
+ DC: {
+ PREFIX: 'V',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '0',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ VALUE_UNIT: 'V'
+ },
+
+ EXP: {
+ PREFIX: 'V',
+ NAME: '',
+ N1: '',
+ N2: '',
+
+ INITIAL_VALUE: '0',
+ PULSED_VALUE: '1',
+
+ RISE_DELAY_TIME: '100u',
+ RISE_TIME_CONSTANT: '20u',
+ FALL_DELAY_TIME: '500u',
+ FALL_TIME_CONSTANT: '60u',
+
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+
+ INITIAL_VALUE_UNIT: 'v',
+ PULSED_VALUE_UNIT: 'v',
+ RISE_DELAY_TIME_UNIT: 'S',
+ RISE_TIME_CONSTANT_UNIT: 'S',
+ FALL_DELAY_TIME_UNIT: 'S',
+ FALL_TIME_CONSTANT_UNIT: 'S'
+ }
+
+ },
+ // resistor
+ R: {
+ PREFIX: 'R',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VALUE: '1',
+ EXTRA_EXPRESSION: '',
+ MODEL: '',
+ VALUE_UNIT: 'Ohm'
+ },
+
+ Z: {
+ PREFIX: 'Z',
+ NAME: '',
+ N1: '',
+ N2: '',
+ N3: '',
+ EXTRA_EXPRESSION: '',
+ MODEL: ''
+ },
+
+ S: {
+ PREFIX: 'S',
+ NAME: '',
+ N1: '',
+ N2: '',
+ NC1: '',
+ NC2: '',
+ MODEL: '',
+ EXTRA_EXPRESSION: ''
+
+ },
+ W: {
+ PREFIX: 'W',
+ NAME: '',
+ N1: '',
+ N2: '',
+ VNAM: '',
+ MODEL: '',
+ EXTRA_EXPRESSION: ''
+
+ }
+
+}
+
+export default ComponentParameters
+
+// K coupled inductor
+// SWITCHES
+
+// IF S,W show model
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/KeyboardShorcuts.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/KeyboardShorcuts.js
new file mode 100644
index 00000000..12b035d7
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/KeyboardShorcuts.js
@@ -0,0 +1,63 @@
+/* eslint-disable new-cap */
+import MxGraphFactory from 'mxgraph'
+import { Undo, Redo, ZoomIn, ZoomOut, ZoomAct } from './ToolbarTools'
+
+const {
+ mxKeyHandler,
+ mxEvent,
+ mxClient
+} = new MxGraphFactory()
+
+export default function KeyboardShortcuts (graph) {
+ var keyHandler = new mxKeyHandler(graph)
+
+ keyHandler.getFunction = function (evt) {
+ if (evt != null) {
+ return (mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey)) ? this.controlKeys[evt.keyCode] : this.normalKeys[evt.keyCode]
+ }
+
+ return null
+ }
+
+ // Delete - Del
+ // keyHandler.bindKey(46, function (evt) {
+ // if (graph.isEnabled()) {
+ // graph.removeCells()
+ // }
+ // })
+
+ // Undo - Ctrl + Z
+ keyHandler.bindControlKey(90, function (evt) {
+ if (graph.isEnabled()) {
+ Undo()
+ }
+ })
+
+ // Redo - Ctrl + A
+ keyHandler.bindControlKey(65, function (evt) {
+ if (graph.isEnabled()) {
+ Redo()
+ }
+ })
+
+ // Zoom In - Ctrl + I
+ keyHandler.bindControlKey(73, function (evt) {
+ if (graph.isEnabled()) {
+ ZoomIn()
+ }
+ })
+
+ // Zoom Out - Ctrl + O
+ keyHandler.bindControlKey(79, function (evt) {
+ if (graph.isEnabled()) {
+ ZoomOut()
+ }
+ })
+
+ // Zoom Out - Ctrl + Y
+ keyHandler.bindControlKey(89, function (evt) {
+ if (graph.isEnabled()) {
+ ZoomAct()
+ }
+ })
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/SchematicEditor.css b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SchematicEditor.css
new file mode 100644
index 00000000..b3924826
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SchematicEditor.css
@@ -0,0 +1,99 @@
+/* Sidebar Components */
+.compImage {
+ width: 72px;
+ height: 72px;
+ margin-left: auto;
+ padding: 2px;
+}
+
+.compImage:hover {
+ background-color: #f4f6f8;
+ border-radius: 5px;
+ transform: scale(1.5);
+ padding: 3px;
+ box-shadow: 0px 0px 41px 17px rgba(207,218,225,0.68);
+}
+
+/* Schematic Editer Grid */
+.grid-container {
+ position: relative;
+ overflow: hidden;
+ margin: 100px;
+ -webkit-box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1);
+ -moz-box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1);
+ box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1);
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4=");
+ cursor: default;
+ border: 2px solid #d0dae1;
+ border-radius: 5px;
+}
+
+.A1-L {
+ width: 84.1cm;
+ height: 59.4cm;
+}
+
+.A1-P {
+ width: 59.4cm;
+ height: 84.1cm;
+}
+
+.A2-L {
+ width: 59.4cm;
+ height: 42.0cm;
+}
+
+.A2-P {
+ width: 42.0cm;
+ height: 59.4cm;
+}
+
+.A3-L {
+ width: 42.0cm;
+ height: 29.7cm;
+}
+
+.A3-P {
+ width: 29.7cm;
+ height: 42.0cm;
+}
+
+.A4-L {
+ width: 29.7cm;
+ height: 21cm;
+}
+
+.A4-P {
+ width: 21cm;
+ height: 29.7cm;
+}
+
+.A5-L {
+ width: 21.0cm;
+ height: 14.8cm;
+}
+
+.A5-P {
+ width: 14.8cm;
+ height:21.0cm;
+}
+
+.outline-container {
+ width:250px;
+ height:120px;
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4=");
+ border: 1px solid #fff;
+}
+
+html {
+ overflow: scroll;
+ overflow-x: hidden;
+}
+::-webkit-scrollbar {
+ width: 0px; /* Remove scrollbar space */
+ background: transparent; /* Optional: just make scrollbar invisible */
+}
+/* Optional: show position indicator in red */
+::-webkit-scrollbar-thumb {
+ background: grey;
+} \ No newline at end of file
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/SideBar.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SideBar.js
new file mode 100644
index 00000000..383d8212
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SideBar.js
@@ -0,0 +1,97 @@
+/* eslint-disable new-cap */
+import MxGraphFactory from 'mxgraph'
+import { getSvgMetadata } from './SvgParser.js'
+// import NetlistInfoFunct from './NetlistInfo.js'
+const {
+ mxClient,
+ mxUtils,
+ mxEvent,
+ mxDragSource
+} = new MxGraphFactory()
+
+var graph
+
+export function SideBar (getGraph) {
+ graph = getGraph
+}
+
+export function AddComponent (component, imgref) {
+ var img = imgref
+
+ var graphF = function (evt) {
+ var x = mxEvent.getClientX(evt)
+ var y = mxEvent.getClientY(evt)
+ var elt = document.elementFromPoint(x, y)
+ if (mxUtils.isAncestorNode(graph.container, elt)) {
+ return graph
+ }
+ return null
+ }
+ var funct = function (graph, evt, target, x, y) {
+ var parent = graph.getDefaultParent()
+ var model = graph.getModel()
+
+ var v1 = null
+
+ model.beginUpdate()
+ try {
+ // NOTE: For non-HTML labels the image must be displayed via the style
+ // rather than the label markup, so use 'image=' + image for the style.
+ // as follows: v1 = graph.insertVertex(parent, null, label,
+ // pt.x, pt.y, 120, 120, 'image=' + image);
+
+ // ***IMP
+ // GET THE SIZE OF SVG FOROM METADATA AND THEN DIVIDE BOTH WIDTH AND HEIGHT BE SAME RATIO
+ // THEN USE THAT VALUE BELOW
+
+ getSvgMetadata(graph, parent, evt, target, x, y, component)
+
+ // **IMP VERTICS DRAWING IS MOVED TO xml_parser.js
+ // WILL BE REFACTORED IN SOME TIME.
+ } finally {
+ model.endUpdate()
+ }
+
+ graph.setSelectionCell(v1)
+ /* var preview = new mxPrintPreview(graph)
+ preview.open() */
+ }
+
+ // Creates a DOM node that acts as the drag source
+ // Disables built-in DnD in IE (this is needed for cross-frame DnD, see below)
+ if (mxClient.IS_IE) {
+ mxEvent.addListener(img, 'dragstart', function (evt) {
+ evt.returnValue = false
+ })
+ }
+
+ // Creates the element that is being for the actual preview.
+ var dragElt = document.createElement('div')
+ dragElt.style.border = 'dashed black 1px'
+ dragElt.style.width = '120px'
+ dragElt.style.height = '40px'
+
+ // Drag source is configured to use dragElt for preview and as drag icon
+ // if scalePreview (last) argument is true. Dx and dy are null to force
+ // the use of the defaults. Note that dx and dy are only used for the
+ // drag icon but not for the preview.
+
+ var ds = mxUtils.makeDraggable(
+ img,
+ graphF,
+ funct,
+ dragElt,
+ null,
+ null,
+ graph.autoscroll,
+ true
+ )
+
+ // Redirects feature to global switch. Note that this feature should only be used
+ // if the the x and y arguments are used in funct to insert the cell.
+ ds.isGuidesEnabled = function () {
+ return graph.graphHandler.guidesEnabled
+ }
+
+ ds.createDragElement = mxDragSource.prototype.createDragElement
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/SvgParser.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SvgParser.js
new file mode 100644
index 00000000..9f36f1cf
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/SvgParser.js
@@ -0,0 +1,186 @@
+/* eslint-disable new-cap */
+/* eslint-disable no-unused-vars */
+/* eslint-disable camelcase */
+import mxGraphFactory from 'mxgraph'
+import ComponentParameters from './ComponentParametersData'
+const {
+ mxConstants
+} = new mxGraphFactory()
+
+let pinData, metadata, pinList, pinName, pinOrientation, pinLength, pinShape
+let currentPin, x_pos, y_pos
+let width, height, symbolName
+
+// we need to divide the svg width and height by the same number in order to maintain the aspect ratio.
+const default_scale = 5
+
+function extractData (xml) {
+ // extracting metadata from the svg file.
+
+ pinData = []
+ metadata = xml.getElementsByTagName('metadata')
+ const width = metadata[0].attributes[0].nodeValue
+ const height = metadata[0].attributes[1].nodeValue
+ const symbolName = metadata[0].attributes[4].nodeValue
+ pinList = metadata[0].childNodes
+ // console.log(metadata)
+ // console.log(xmlDoc)
+ // console.log(width,height)
+ pinList.forEach(function (pin) {
+ const pinNumber = pin.tagName.split('-').pop()
+ const pinX = pin.getElementsByTagName('x')[0].innerHTML
+ const pinY = pin.getElementsByTagName('y')[0].innerHTML
+ const pinType = pin.getElementsByTagName('type')[0].innerHTML.trim()
+ const pinName = pin.getElementsByTagName('name')[0].innerHTML.trim()
+ const pinOrientation = pin.getElementsByTagName('orientation')[0].innerHTML.trim()
+ const pinLength = pin.getElementsByTagName('length')[0].innerHTML.trim()
+ const pinShape = pin.getElementsByTagName('pinShape')[0].innerHTML.trim()
+
+ pinData.push({
+ pinNumber: pinNumber,
+ pinX: pinX,
+ pinY: pinY,
+ type: pinType,
+ pinName: pinName,
+ pinOrientation: pinOrientation,
+ pinLength: pinLength,
+ pinShape: pinShape
+ })
+ // console.log(pinNumber, pinX, pinY, pinType)
+ })
+ return {
+ width: width,
+ height: height,
+ symbolName: symbolName,
+ pinData: pinData
+ }
+}
+
+export function getSvgMetadata (graph, parent, evt, target, x, y, component) {
+ // calls extractData and other MXGRAPH functions
+ // initialize information from the svg meta
+ // plots pinnumbers and component labels.
+
+ var path = '../' + component.svg_path
+
+ fetch(path)
+ .then(function (response) {
+ return response.text()
+ })
+ .then(function (data) {
+ const parser = new DOMParser()
+ const xml = parser.parseFromString(data, 'text/xml')
+ // console.log(xmlDoc);
+ data = extractData(xml)
+ // console.log(data)
+ return data
+ }).then(function (data) {
+ const pins = []
+ width = data.width
+ height = data.height
+ pinData = data.pinData
+
+ // console.log(pinData)
+
+ // Enables moving of vertex labels
+ graph.vertexLabelsMovable = true
+
+ // Creates a style with an indicator
+ var style = graph.getStylesheet().getDefaultVertexStyle()
+
+ style[mxConstants.STYLE_SHAPE] = 'label'
+ style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom'
+ // style[mxConstants.STYLE_INDICATOR_SHAPE] = 'ellipse'
+ // style[mxConstants.STYLE_INDICATOR_WIDTH] = 34
+ // style[mxConstants.STYLE_INDICATOR_HEIGHT] = 34
+ style[mxConstants.STYLE_IMAGE_VERTICAL_ALIGN] = 'bottom' // indicator v-alignment
+ style[mxConstants.STYLE_IMAGE_ALIGN] = 'bottom'
+ style[mxConstants.STYLE_INDICATOR_COLOR] = 'green'
+ style[mxConstants.STYLE_FONTCOLOR] = 'red'
+ style[mxConstants.STYLE_FONTSIZE] = '10'
+ delete style[mxConstants.STYLE_STROKECOLOR] // transparent
+ // delete style[mxConstants.STYLE_FILLCOLOR] // transparent
+
+ // make the component images larger by reducing the denominator and smaller by increasing the denominator
+ width = width / default_scale
+ height = height / default_scale
+
+ const v1 = graph.insertVertex(
+ parent,
+ null,
+ component.name,
+ x,
+ y,
+ width,
+ height,
+ 'shape=image;fontColor=blue;image=' + path + ';imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25'
+ )
+ v1.Component = true
+ /* var newsource = path
+ var prefix = newsource.split('/')
+ var symboltype = prefix[3].split('') */
+ v1.CellType = 'Component'
+ v1.symbol = component.symbol_prefix.toUpperCase()
+ v1.CompObject = component
+
+ component.name = component.name.toUpperCase()
+ var props = {}
+ if (v1.symbol === 'V') {
+ // console.log('voltage')
+
+ if (ComponentParameters[v1.symbol][component.name] === undefined) {
+ props = Object.assign({}, ComponentParameters[v1.symbol].VSOURCE)
+ } else {
+ props = Object.assign({}, ComponentParameters[v1.symbol][component.name])
+ }
+ } else if (v1.symbol === 'I') {
+ // console.log('CURRENT')
+ if (ComponentParameters[v1.symbol][component.name] === undefined) {
+ props = Object.assign({}, ComponentParameters[v1.symbol].ISOURCE)
+ } else {
+ props = Object.assign({}, ComponentParameters[v1.symbol][component.name])
+ }
+ } else {
+ // console.log('other')
+
+ props = Object.assign({}, ComponentParameters[v1.symbol])
+ }
+ props.NAME = component.name
+ v1.properties = props
+ // console.log('component', component)
+ // console.log('v1.properties', v1.properties)
+
+ v1.setConnectable(false)
+
+ for (let i = 0; i < pinData.length; i++) {
+ currentPin = pinData[i]
+ if (currentPin.pinName === 'NC') continue
+ // move this to another file
+ x_pos = (parseInt(width) / 2 + parseInt(currentPin.pinX) / default_scale)
+ y_pos = (parseInt(height) / 2 - parseInt(currentPin.pinY) / default_scale) - 1
+
+ // move this to another file
+ // eslint-disable-next-line
+
+ if (currentPin.pinOrientation === 'L') {
+ pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=bottom;rotation=0')
+ } else if (currentPin.pinOrientation === 'R') {
+ pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=left;verticalAlign=bottom;rotation=0')
+ } else if (currentPin.pinOrientation === 'U') {
+ pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=bottom;rotation=0')
+ } else {
+ pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=up;rotation=0')
+ }
+ pins[i].geometry.relative = false
+ pins[i].Pin = true
+ if (currentPin.type === 'I') {
+ pins[i].pinType = 'Input'
+ } else {
+ pins[i].pinType = 'Output'
+ }
+ // pins[i].pinType = currentPin['type']
+ pins[i].ParentComponent = v1
+ pins[i].PinNumber = currentPin.pinNumber
+ }
+ })
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/Helper/ToolbarTools.js b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ToolbarTools.js
new file mode 100644
index 00000000..f8190fc6
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/Helper/ToolbarTools.js
@@ -0,0 +1,885 @@
+/* eslint-disable no-unused-vars */
+/* eslint-disable camelcase */
+/* eslint-disable new-cap */
+/* eslint-disable */
+import mxGraphFactory from 'mxgraph'
+import store from '../../../redux/store'
+import * as actions from '../../../redux/actions/actions'
+import ComponentParameters from './ComponentParametersData'
+var graph
+var undoManager
+
+const {
+ mxPrintPreview,
+ mxConstants,
+ mxRectangle,
+ mxUtils,
+ mxUndoManager,
+ mxEvent,
+ mxCodec,
+ mxCell,
+ mxMorphing,
+ mxPoint
+} = new mxGraphFactory()
+
+export default function ToolbarTools (grid, unredo) {
+ graph = grid
+
+ undoManager = new mxUndoManager()
+ var listener = function (sender, evt) {
+ undoManager.undoableEditHappened(evt.getProperty('edit'))
+ }
+ graph.getModel().addListener(mxEvent.UNDO, listener)
+ graph.getView().addListener(mxEvent.UNDO, listener)
+}
+
+// SAVE
+export function Save () {
+ XMLWireConnections()
+ var enc = new mxCodec(mxUtils.createXmlDocument())
+ var node = enc.encode(graph.getModel())
+ var value = mxUtils.getXml(node)
+ return value
+}
+
+// UNDO
+export function Undo () {
+ undoManager.undo()
+}
+
+// REDO
+export function Redo () {
+ undoManager.redo()
+}
+
+// Zoom IN
+export function ZoomIn () {
+ graph.zoomIn()
+}
+
+// ZOOM OUT
+export function ZoomOut () {
+ graph.zoomOut()
+}
+
+// ZOOM ACTUAL
+export function ZoomAct () {
+ graph.zoomActual()
+}
+
+// DELETE COMPONENT
+export function DeleteComp () {
+ graph.removeCells()
+}
+
+// CLEAR WHOLE GRID
+export function ClearGrid () {
+ graph.removeCells(graph.getChildVertices(graph.getDefaultParent()))
+}
+
+// ROTATE COMPONENT
+export function Rotate () {
+ var view = graph.getView()
+ var cell = graph.getSelectionCell()
+ var state = view.getState(cell, true)
+ // console.log(state)
+ var vHandler = graph.createVertexHandler(state)
+ // console.log('Handler')
+ // console.log(vHandler)
+ if (cell != null) {
+ vHandler.rotateCell(cell, 90, cell.getParent())
+ }
+ vHandler.destroy()
+}
+
+// PRINT PREVIEW OF SCHEMATIC
+export function PrintPreview () {
+ // Matches actual printer paper size and avoids blank pages
+ var scale = 0.8
+ var headerSize = 50
+ var footerSize = 50
+
+ // Applies scale to page
+ var pageFormat = { x: 0, y: 0, width: 1169, height: 827 }
+ var pf = mxRectangle.fromRectangle(pageFormat || mxConstants.PAGE_FORMAT_A4_LANDSCAPE)
+ pf.width = Math.round(pf.width * scale * graph.pageScale)
+ pf.height = Math.round(pf.height * scale * graph.pageScale)
+
+ // Finds top left corner of top left page
+ var bounds = mxRectangle.fromRectangle(graph.getGraphBounds())
+ bounds.x -= graph.view.translate.x * graph.view.scale
+ bounds.y -= graph.view.translate.y * graph.view.scale
+
+ var x0 = Math.floor(bounds.x / pf.width) * pf.width
+ var y0 = Math.floor(bounds.y / pf.height) * pf.height
+
+ var preview = new mxPrintPreview(graph, scale, pf, 0, -x0, -y0)
+ preview.marginTop = headerSize * scale * graph.pageScale
+ preview.marginBottom = footerSize * scale * graph.pageScale
+ preview.autoOrigin = false
+
+ var oldRenderPage = preview.renderPage
+ preview.renderPage = function (w, h, x, y, content, pageNumber) {
+ var div = oldRenderPage.apply(this, arguments)
+
+ var header = document.createElement('div')
+ header.style.position = 'absolute'
+ header.style.boxSizing = 'border-box'
+ header.style.fontFamily = 'Arial,Helvetica'
+ header.style.height = (this.marginTop - 10) + 'px'
+ header.style.textAlign = 'center'
+ header.style.verticalAlign = 'middle'
+ header.style.marginTop = 'auto'
+ header.style.fontSize = '12px'
+ header.style.width = '100%'
+ header.style.fontWeight = '100'
+
+ // Vertical centering for text in header/footer
+ header.style.lineHeight = (this.marginTop - 10) + 'px'
+
+ var footer = header.cloneNode(true)
+ var title = store.getState().saveSchematicReducer.title
+ mxUtils.write(header, title + ' - Xcos on Cloud')
+ header.style.borderBottom = '1px solid blue'
+ header.style.top = '0px'
+
+ mxUtils.write(footer, 'Made with Schematic Editor - ' + pageNumber + ' - Xcos on Cloud')
+ footer.style.borderTop = '1px solid blue'
+ footer.style.bottom = '0px'
+
+ div.firstChild.appendChild(footer)
+ div.firstChild.appendChild(header)
+
+ return div
+ }
+
+ preview.open()
+}
+
+// ERC CHECK FOR SCHEMATIC
+export function ErcCheck () {
+ var list = graph.getModel().cells // mapping the grid
+ var vertexCount = 0
+ var errorCount = 0
+ var PinNC = 0
+ var stypes = 0
+ var ground = 0
+ var wirec = 0
+ for (var property in list) {
+ var cell = list[property]
+ if (cell.Component === true) {
+ console.log(cell)
+ // cell.value = 'Checked'
+ for (var child in cell.children) {
+ var childVertex = cell.children[child]
+ if (childVertex.Pin === true && childVertex.edges === null) { // Checking if connections exist from a given pin
+ ++PinNC
+ ++errorCount
+ } else {
+ for (var w in childVertex.edges) {
+ if (childVertex.edges[w].source === null || childVertex.edges[w].target === null) {
+ ++PinNC
+ } else {
+ if (childVertex.edges[w].source.edge === true || childVertex.edges[w].target.edge === true) {
+ ++wirec
+ }
+ }
+ }
+ // console.log(childVertex)
+ }
+ }
+ ++vertexCount
+ }
+ if (cell.symbol === 'PWR') { // Checking for ground
+ console.log('Ground is present')
+ console.log(cell)
+ ++ground
+ }
+ }
+
+ if (vertexCount === 0) {
+ alert('No Component added')
+ ++errorCount
+ } else if (PinNC !== 0) {
+ alert('Pins not connected')
+ } else if (ground === 0) {
+ alert('Ground not connected')
+ } else {
+ if (errorCount === 0) {
+ alert('ERC Check completed')
+ }
+ }
+}
+function ErcCheckNets () {
+ var list = graph.getModel().cells // mapping the grid
+ var vertexCount = 0
+ var errorCount = 0
+ var PinNC = 0
+ var stypes = 0
+ var ground = 0
+ for (var property in list) {
+ var cell = list[property]
+ if (cell.Component === true) {
+ console.log(cell)
+ // cell.value = 'Checked'
+ for (var child in cell.children) {
+ console.log(cell.children[child])
+ var childVertex = cell.children[child]
+ if (childVertex.Pin === true && childVertex.edges === null) {
+ graph.getSelectionCell(childVertex)
+ console.log('This pin is not connected')
+ console.log(childVertex)
+ ++PinNC
+ ++errorCount
+ }
+ }
+ ++vertexCount
+ }
+ if (cell.symbol === 'PWR') {
+ console.log('Ground is present')
+ console.log(cell)
+ ++ground
+ }
+ }
+ if (vertexCount === 0) {
+ alert('No Component added')
+ ++errorCount
+ return false
+ } else if (PinNC !== 0) {
+ alert('Pins not connected')
+ return false
+ } else if (ground === 0) {
+ alert('Ground not connected')
+ return false
+ } else {
+ if (errorCount === 0) {
+ return true
+ }
+ }
+}
+
+// GENERATE NETLIST
+export function GenerateNetList () {
+
+ var r = 1
+ var v = 1
+ var c = 1
+ // var list = graph.getModel().cells
+ var n = 1
+ var spiceModels = ''
+ var netlist = {
+ componentlist: [],
+ nodelist: []
+ }
+ var erc = ErcCheckNets()
+ var k = ''
+ if (erc === false) {
+ alert('ERC check failed')
+ } else {
+ var list = annotate(graph)
+ for (var property in list) {
+ if (list[property].Component === true && list[property].symbol !== 'PWR') {
+ // k = ''
+ // alert('Component is present')
+ var compobj = {
+ name: '',
+ node1: '',
+ node2: '',
+ magnitude: ''
+ }
+ mxCell.prototype.ConnectedNode = null
+ var component = list[property]
+ // console.log(component)
+ if (component.symbol === 'R') {
+ // component.symbol = component.symbol + r.toString()
+ k = k + component.symbol + r.toString()
+ component.value = component.symbol + r.toString()
+ // console.log(component)
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+
+ ++r
+ } else if (component.symbol === 'V') {
+ // component.symbol = component.symbol + v.toString()
+ console.log(component)
+ k = k + component.symbol + v.toString()
+ component.value = component.symbol + v.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++v
+ } else {
+ // component.symbol = component.symbol + c.toString()
+ k = k + component.symbol + c.toString()
+ component.value = component.symbol + c.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++c
+ }
+ // compobj.name = component.symbol
+
+ if (component.children !== null) {
+ for (var child in component.children) {
+ var pin = component.children[child]
+ if (pin.vertex === true) {
+ // alert(pin.id)
+ if (pin.edges !== null || pin.edges.length !== 0) {
+ for (var wire in pin.edges) {
+ if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) {
+ if (pin.edges[wire].source.edge === true) {
+ console.log('wire')
+ console.log(pin.edges[wire].source)
+ console.log(pin.edges[wire].source.node)
+ pin.edges[wire].node = pin.edges[wire].source.node
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ } else if (pin.edges[wire].target.edge === true) {
+ console.log('wire')
+ console.log(pin.edges[wire].target)
+ console.log(pin.edges[wire].target.node)
+ pin.edges[wire].node = pin.edges[wire].target.node
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x
+ pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y
+ } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') {
+ // console.log('Found ground')
+ // console.log('ground')
+ pin.edges[wire].node = 0
+ // pin.edges[wire].node = '0'
+ pin.edges[wire].value = 0
+ // k = k + ' ' + pin.edges[wire].node
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ } else {
+ // console.log(pin.edges[wire])
+ // if (pin.edges[wire].node === null) {
+ pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ console.log('comp')
+ // ++n
+ // }
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+
+ pin.edges[wire].value = pin.edges[wire].node
+ // k = k + ' ' + pin.edges[wire].node
+ }
+ pin.edges[wire].value = pin.edges[wire].node
+ }
+ console.log('Check the wires here ')
+ console.log(pin.edges[wire].sourceVertex)
+ console.log(pin.edges[wire].targetVertex)
+ }
+ // console.log()
+ // console.log(pin.value + 'is connected to this node' + pin.edges[0].node)
+ k = k + ' ' + pin.edges[0].node
+
+ // console.log(k)
+ }
+ }
+ }
+ compobj.name = component.symbol
+ compobj.node1 = component.children[0].edges[0].node
+ compobj.node2 = component.children[1].edges[0].node
+ compobj.magnitude = 10
+ netlist.componentlist.push(component.properties.PREFIX)
+ netlist.nodelist.push(compobj.node2, compobj.node1)
+
+ // console.log(compobj)
+ }
+ console.log('component properties', component.properties)
+
+ if (component.properties.PREFIX.charAt(0) === 'V' || component.properties.PREFIX.charAt(0) === 'v' || component.properties.PREFIX.charAt(0) === 'I' || component.properties.PREFIX.charAt(0) === 'i') {
+ const comp = component.properties
+ if (comp.NAME === 'SINE') {
+ k = k + ` SIN(${comp.OFFSET} ${comp.AMPLITUDE} ${comp.FREQUENCY} ${comp.DELAY} ${comp.DAMPING_FACTOR} ${comp.PHASE} )`
+ } else if (comp.NAME === 'EXP') {
+ k = k + ` EXP(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.FREQUENCY} ${comp.RISE_DELAY_TIME} ${comp.RISE_TIME_CONSTANT} ${comp.FALL_DELAY_TIME} ${comp.FALL_TIME_CONSTANT} )`
+ } else if (comp.NAME === 'DC') {
+ if (component.properties.VALUE !== undefined) {
+ k = k + ' DC ' + component.properties.VALUE
+ component.value = component.value + '\n' + component.properties.VALUE
+ }
+ } else if (comp.NAME === 'PULSE') {
+ k = k + ` PULSE(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.DELAY_TIME} ${comp.RISE_TIME} ${comp.FALL_TIME} ${comp.PULSE_WIDTH} ${comp.PERIOD} ${comp.PHASE} )`
+ } else {
+ if (component.properties.VALUE !== undefined) {
+ k = k + ' ' + component.properties.VALUE
+ component.value = component.value + '\n' + component.properties.VALUE
+ }
+ }
+ } else {
+ if (component.properties.VALUE !== undefined) {
+ k = k + ' ' + component.properties.VALUE
+ component.value = component.value + '\n' + component.properties.VALUE
+ }
+ }
+
+ if (component.properties.EXTRA_EXPRESSION.length > 0) {
+ k = k + ' ' + component.properties.EXTRA_EXPRESSION
+ component.value = component.value + ' ' + component.properties.EXTRA_EXPRESSION
+ }
+ if (component.properties.MODEL.length > 0) {
+ k = k + ' ' + component.properties.MODEL.split(' ')[1]
+ }
+ if (component.properties.MODEL.length > 0) {
+ spiceModels += component.properties.MODEL + '\n'
+ }
+
+ k = k + ' \n'
+ }
+ }
+ }
+ store.dispatch({
+ type: actions.SET_MODEL,
+ payload: {
+ model: spiceModels
+ }
+ })
+ store.dispatch({
+ type: actions.SET_NETLIST,
+ payload: {
+ netlist: k
+ }
+ })
+ graph.getModel().beginUpdate()
+ try {
+ graph.view.refresh()
+ } finally {
+ // Arguments are number of steps, ease and delay
+ var morph = new mxMorphing(graph, 20, 1.2, 20)
+ morph.addListener(mxEvent.DONE, function () {
+ graph.getModel().endUpdate()
+ })
+ morph.startAnimation()
+ }
+ var a = new Set(netlist.nodelist)
+ console.log(netlist.nodelist)
+ console.log(a)
+ var netobj = {
+ models: spiceModels,
+ main: k
+ }
+ return netobj
+}
+function annotate (graph) {
+
+ var r = 1
+ var v = 1
+ var c = 1
+ var l = 1
+ var d = 1
+ var q = 1
+ var w = 1
+ var list = graph.getModel().cells
+ var n = 1
+ var netlist = {
+ componentlist: [],
+ nodelist: []
+ }
+ // var erc = ErcCheckNets()
+ var erc = true
+ var k = ''
+ if (erc === false) {
+ alert('ERC check failed')
+ } else {
+ for (var property in list) {
+ if (list[property].Component === true && list[property].symbol !== 'PWR') {
+ var compobj = {
+ name: '',
+ node1: '',
+ node2: '',
+ magnitude: ''
+ }
+ mxCell.prototype.ConnectedNode = null
+ var component = list[property]
+ // console.log(component)
+ if (component.symbol === 'R') {
+ // component.symbol = component.symbol + r.toString()
+ k = k + component.symbol + r.toString()
+ component.value = component.symbol + r.toString()
+ // console.log(component)
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+
+ ++r
+ } else if (component.symbol === 'V') {
+ // component.symbol = component.symbol + v.toString()
+ k = k + component.symbol + v.toString()
+ component.value = component.symbol + v.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++v
+ } else if (component.symbol === 'C') {
+ // component.symbol = component.symbol + v.toString()
+ k = k + component.symbol + v.toString()
+ component.value = component.symbol + v.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++c
+ } else if (component.symbol === 'D') {
+ // component.symbol = component.symbol + v.toString()
+ k = k + component.symbol + v.toString()
+ component.value = component.symbol + v.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++d
+ } else if (component.symbol === 'Q') {
+ // component.symbol = component.symbol + v.toString()
+ k = k + component.symbol + v.toString()
+ component.value = component.symbol + v.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++q
+ } else {
+ // component.symbol = component.symbol + c.toString()
+ k = k + component.symbol + c.toString()
+ component.value = component.symbol + c.toString()
+ component.properties.PREFIX = component.value
+ // component.symbol = component.value
+ ++w
+ }
+ // compobj.name = component.symbol
+
+ if (component.children !== null) {
+ for (var child in component.children) {
+ var pin = component.children[child]
+ if (pin.vertex === true) {
+ // alert(pin.id)
+ if (pin.edges !== null || pin.edges.length !== 0) {
+ for (var wire in pin.edges) {
+ if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) {
+ if (pin.edges[wire].source.edge === true) {
+
+ } else if (pin.edges[wire].target.edge === true) {
+
+ } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') {
+ // console.log('Found ground')
+ // console.log('ground')
+ pin.edges[wire].node = 0
+ // pin.edges[wire].node = '0'
+ pin.edges[wire].value = 0
+ // k = k + ' ' + pin.edges[wire].node
+ } else {
+ // console.log(pin.edges[wire])
+ // if (pin.edges[wire].node === null) {
+ pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ console.log('comp')
+ // ++n
+ // }
+
+ pin.edges[wire].value = pin.edges[wire].node
+ // k = k + ' ' + pin.edges[wire].node
+ }
+ }
+
+ console.log(pin.edges[wire])
+ }
+ // console.log()
+ // console.log(pin.value + 'is connected to this node' + pin.edges[0].node)
+ k = k + ' ' + pin.edges[0].node
+
+ // console.log(k)
+ }
+ }
+ }
+ compobj.name = component.symbol
+ compobj.node1 = component.children[0].edges[0].node
+ compobj.node2 = component.children[1].edges[0].node
+ compobj.magnitude = 10
+ netlist.componentlist.push(component.properties.PREFIX)
+ netlist.nodelist.push(compobj.node2, compobj.node1)
+
+ // console.log(compobj)
+ }
+ // console.log(component)
+ if (component.properties.VALUE !== undefined) {
+ k = k + ' ' + component.properties.VALUE
+ }
+
+ if (component.properties.EXTRA_EXPRESSION.length > 0) {
+ k = k + ' ' + component.properties.EXTRA_EXPRESSION
+ }
+ if (component.properties.MODEL.length > 0) {
+ k = k + ' ' + component.properties.MODEL.split(' ')[1]
+ }
+ // k = k + ' 10'
+ k = k + ' \n'
+ // console.log(k)
+ }
+ }
+ }
+ return list
+}
+
+export function GenerateNodeList () {
+ var list = annotate(graph)
+ var a = []
+ // var netlist = []
+ var netlist = new Set()
+
+ // console.log('Untitled netlist'
+ var k = 'Unitled netlist \n'
+ for (var property in list) {
+ if (list[property].Component === true && list[property].symbol !== 'PWR') {
+ // k = ''
+ // alert('Component is present')Component Name: ZMYxx
+ var compobj = {
+ name: '',
+ node1: '',
+ node2: '',
+ magnitude: ''
+ }
+ var component = list[property]
+ if (component.children !== null) {
+ compobj.name = component.symbol
+ compobj.node1 = component.children[0].edges[0].node
+ compobj.node2 = component.children[1].edges[0].node
+ netlist.add(compobj.node1, compobj.node2)
+ }
+ }
+ }
+ return netlist
+}
+export function GenerateCompList () {
+ var list = annotate(graph)
+ var a = []
+ // var netlist = []
+ var netlist = []
+
+ // console.log('Untitled netlist'
+ var k = 'Unitled netlist \n'
+ for (var property in list) {
+ if (list[property].Component === true && list[property].symbol !== 'PWR') {
+ // k = ''
+ // alert('Component is present')
+ var compobj = {
+ name: '',
+ node1: '',
+ node2: '',
+ magnitude: ''
+ }
+ var component = list[property]
+ compobj.name = component.symbol
+ compobj.node1 = component.children[0].edges[0].node
+ compobj.node2 = component.children[1].edges[0].node
+ netlist.push(component.properties.PREFIX)
+ }
+ }
+
+ return netlist
+
+}
+
+export function renderXML () {
+ graph.view.refresh()
+ var xml = 'null'
+ var xmlDoc = mxUtils.parseXml(xml)
+ parseXmlToGraph(xmlDoc, graph)
+}
+function parseXmlToGraph (xmlDoc, graph) {
+ console.log(xmlDoc)
+ const cells = xmlDoc.documentElement.children[0].children
+ const parent = graph.getDefaultParent()
+ var v1
+ var yPos
+ var xPos
+ var props
+ var style = graph.getStylesheet().getDefaultVertexStyle()
+
+ style[mxConstants.STYLE_SHAPE] = 'label'
+ style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom'
+ // style[mxConstants.STYLE_INDICATOR_SHAPE] = 'ellipse'
+ // style[mxConstants.STYLE_INDICATOR_WIDTH] = 34
+ // style[mxConstants.STYLE_INDICATOR_HEIGHT] = 34
+ style[mxConstants.STYLE_IMAGE_VERTICAL_ALIGN] = 'bottom' // indicator v-alignment
+ style[mxConstants.STYLE_IMAGE_ALIGN] = 'bottom'
+ style[mxConstants.STYLE_INDICATOR_COLOR] = 'green'
+ style[mxConstants.STYLE_FONTCOLOR] = 'red'
+ style[mxConstants.STYLE_FONTSIZE] = '10'
+ delete style[mxConstants.STYLE_STROKECOLOR] // transparent
+ for (let i = 0; i < cells.length; i++) {
+ const cellAttrs = cells[i].attributes
+ if (cellAttrs.Component.value === '1') { // is component
+ const vertexName = cellAttrs.value.value
+ const style = cellAttrs.style.value
+ // console.log(cellAttrs.Component.value)
+ const vertexId = Number(cellAttrs.id.value)
+ const geom = cells[i].children[0].attributes
+ const xPos = Number(geom.x.value)
+ // var yPos
+ if (geom.y === undefined) {
+ yPos = 0
+ } else {
+ yPos = Number(geom.y.value)
+ }
+ const height = Number(geom.height.value)
+ const width = Number(geom.width.value)
+ v1 = graph.insertVertex(parent, vertexId, vertexName, xPos, yPos, width, height, style)
+ v1.symbol = cellAttrs.symbol.value
+ if (v1.symbol === 'V') {
+ try { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[2].attributes.NAME.value]) } catch (e) { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[1].attributes.NAME.value]) }
+ } else {
+ props = Object.assign({}, ComponentParameters[v1.symbol])
+ }
+
+ /* if (v1.symbol === 'V') {
+ console.log('find name here')
+ console.log(cells[i].children[2].attributes.NAME.value)
+ } */
+ try { props.NAME = cells[i].children[2].attributes.NAME.value } catch (e) { props.NAME = cells[i].children[1].attributes.NAME.value }
+ v1.properties = props
+ v1.Component = true
+ v1.CellType = 'Component'
+ console.log(props)
+ // console.log(v1.properties)
+ if (v1.properties.name === 'VSOURCE') {
+ console.log('here it is')
+ console.log(v1.properties)
+ }
+ for (var check in props) {
+ try { v1.properties[check] = cells[i].children[2].attributes[check].value } catch (e) { try { v1.properties[check] = cells[i].children[1].attributes[check].value } catch (e) { console.log('parameter errors') } }
+ }
+ console.log('component added')
+ } else if (cellAttrs.Pin.value === '1') {
+ const vertexName = cellAttrs.value.value
+ const style = cellAttrs.style.value
+ console.log('Pin name')
+ console.log(vertexName)
+ // console.log(cellAttrs.Component.value)
+ const vertexId = Number(cellAttrs.id.value)
+ const geom = cells[i].children[0].attributes
+ try { xPos = Number(geom.x.value) } catch (e) { xPos = 0 }
+ // var yPos
+ if (geom.y === undefined) {
+ yPos = 0
+ } else {
+ yPos = Number(geom.y.value)
+ }
+ const height = Number(geom.height.value)
+ const width = Number(geom.width.value)
+ var vp = graph.insertVertex(v1, vertexId, vertexName, xPos, yPos, 0.5, 0.5, style)
+ vp.ParentComponent = v1
+ vp.Pin = 1
+ } else if (cellAttrs.edge) { // is edge
+ // const edgeName = cellAttrs.value.value
+ const edgeId = Number(cellAttrs.id.value)
+ const source = Number(cellAttrs.sourceVertex.value)
+ const target = Number(cellAttrs.targetVertex.value)
+ console.log(edgeId)
+ var plist = cells[i].children[1].children
+ try {
+ var e = graph.insertEdge(parent, edgeId, null,
+ graph.getModel().getCell(source),
+ graph.getModel().getCell(target)
+ )
+ e.geometry.points = []
+ for (var a in cells[i].children[1].children) {
+ try {
+ console.log(plist[a].attributes.x.value)
+ console.log(plist[a].attributes.y.value)
+ e.geometry.points.push(new mxPoint(Number(plist[a].attributes.x.value), Number(plist[a].attributes.y.value)))
+ console.log(e.geometry.points)
+ } catch (e) { console.log('error') }
+ graph.getModel().beginUpdate()
+ try {
+ graph.view.refresh()
+ } finally {
+ // Arguments are number of steps, ease and delay
+ var morph = new mxMorphing(graph, 20, 1.2, 20)
+ morph.addListener(mxEvent.DONE, function () {
+ graph.getModel().endUpdate()
+ })
+ morph.startAnimation()
+ }
+ }
+ if (graph.getModel().getCell(target).edge === true) {
+ e.geometry.setTerminalPoint(new mxPoint(Number(cellAttrs.tarx.value), Number(cellAttrs.tary.value)), false)
+ graph.getModel().beginUpdate()
+ try {
+ graph.view.refresh()
+ } finally {
+ // Arguments are number of steps, ease and delay
+ morph = new mxMorphing(graph, 20, 1.2, 20)
+ morph.addListener(mxEvent.DONE, function () {
+ graph.getModel().endUpdate()
+ })
+ morph.startAnimation()
+ }
+ }
+ } catch (e) {
+ console.log(graph.getModel().getCell(source))
+ console.log(graph.getModel().getCell(target))
+ console.log('error')
+ }
+ }
+ }
+}
+
+export function renderGalleryXML (xml) {
+ graph.removeCells(graph.getChildVertices(graph.getDefaultParent()))
+ graph.view.refresh()
+ var xmlDoc = mxUtils.parseXml(xml)
+ parseXmlToGraph(xmlDoc, graph)
+}
+function XMLWireConnections () {
+
+ var erc = true
+ if (erc === false) {
+ alert('ERC check failed')
+ } else {
+ var list = graph.getModel().cells
+ for (var property in list) {
+ if (list[property].Component === true && list[property].symbol !== 'PWR') {
+ mxCell.prototype.ConnectedNode = null
+ var component = list[property]
+
+ if (component.children !== null) {
+ for (var child in component.children) {
+ var pin = component.children[child]
+ if (pin.vertex === true) {
+ // alert(pin.id)
+ try {
+ if (pin.edges !== null || pin.edges.length !== 0) {
+ for (var wire in pin.edges) {
+ if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) {
+ if (pin.edges[wire].source.edge === true) {
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ pin.edges[wire].PointsArray = pin.edges[wire].geometry.points
+ } else if (pin.edges[wire].target.edge === true) {
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x
+ pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y
+ pin.edges[wire].PointsArray = pin.edges[wire].geometry.points
+ } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') {
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ pin.edges[wire].PointsArray = pin.edges[wire].geometry.points
+ } else {
+ pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value
+ pin.edges[wire].sourceVertex = pin.edges[wire].source.id
+ pin.edges[wire].targetVertex = pin.edges[wire].target.id
+ pin.edges[wire].PointsArray = pin.edges[wire].geometry.points
+ }
+ }
+ console.log('Check the wires here ')
+ console.log(pin.edges[wire].sourceVertex)
+ console.log(pin.edges[wire].targetVertex)
+ }
+
+ }
+ } catch (e) { console.log('error') }
+ }
+ }
+
+ }
+
+ }
+ }
+ }
+
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/PropertiesSidebar.js b/blocks/eda-frontend/src/components/SchematicEditor/PropertiesSidebar.js
new file mode 100644
index 00000000..4b3800f2
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/PropertiesSidebar.js
@@ -0,0 +1,172 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Hidden, List, ListItem, ListItemText, TextField, MenuItem, TextareaAutosize } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import ComponentProperties from './ComponentProperties'
+import { useSelector, useDispatch } from 'react-redux'
+import { setSchDescription } from '../../redux/actions/index'
+
+import './Helper/SchematicEditor.css'
+
+const useStyles = makeStyles((theme) => ({
+ toolbar: {
+ minHeight: '90px'
+ },
+ pages: {
+ margin: theme.spacing(0, 0.7)
+ }
+}))
+
+const pageSize = [
+ {
+ value: 'A1',
+ label: 'A1'
+ },
+ {
+ value: 'A2',
+ label: 'A2'
+ },
+ {
+ value: 'A3',
+ label: 'A3'
+ },
+ {
+ value: 'A4',
+ label: 'A4'
+ },
+ {
+ value: 'A5',
+ label: 'A5'
+ }
+]
+
+const pageLayout = [
+ {
+ value: 'P',
+ label: 'Portrait'
+ },
+ {
+ value: 'L',
+ label: 'Landscape'
+ }
+]
+
+// Display grid size and orientation
+function GridProperties ({ gridRef }) {
+ const classes = useStyles()
+
+ const [gridSize, setGridSize] = React.useState('A4')
+ const [gridLayout, setGridLayout] = React.useState('L')
+
+ const handleSizeChange = (event) => {
+ setGridSize(event.target.value)
+ gridRef.current.className = 'grid-container ' + event.target.value + '-' + gridLayout
+ }
+
+ const handleLayoutChange = (event) => {
+ setGridLayout(event.target.value)
+ gridRef.current.className = 'grid-container ' + gridSize + '-' + event.target.value
+ }
+
+ return (
+ <>
+ <ListItem>
+ <ListItemText primary="Grid Properties" />
+ </ListItem>
+ <ListItem style={{ padding: '10px 5px 15px 5px' }} divider>
+ <TextField
+ id="filled-select-currency"
+ select
+ size='small'
+ className={classes.pages}
+ value={gridSize}
+ onChange={handleSizeChange}
+ helperText="Grid size"
+ variant="outlined"
+ >
+ {pageSize.map((option) => (
+ <MenuItem key={option.value} value={option.value}>
+ {option.label}
+ </MenuItem>
+ ))}
+ </TextField>
+ <TextField
+ id="grid-layout"
+ select
+ size='small'
+ className={classes.pages}
+ value={gridLayout}
+ onChange={handleLayoutChange}
+ helperText="Grid Layout"
+ variant="outlined"
+ >
+ {pageLayout.map((option) => (
+ <MenuItem key={option.value} value={option.value}>
+ {option.label}
+ </MenuItem>
+ ))}
+ </TextField>
+ </ListItem>
+
+ </>
+ )
+}
+GridProperties.propTypes = {
+ gridRef: PropTypes.object.isRequired
+}
+
+export default function PropertiesSidebar ({ gridRef, outlineRef }) {
+ const classes = useStyles()
+
+ const isOpen = useSelector(state => state.componentPropertiesReducer.isPropertiesWindowOpen)
+ const schSave = useSelector(state => state.saveSchematicReducer)
+
+ const [description, setDescription] = React.useState(schSave.description)
+
+ const dispatch = useDispatch()
+
+ const getInputValues = (evt) => {
+ setDescription(`${evt.target.value}`)
+ dispatch(setSchDescription(evt.target.value))
+ }
+
+ return (
+ <>
+ <Hidden mdDown>
+ <div className={classes.toolbar} />
+ </Hidden>
+
+ <List>
+ <ListItem button divider>
+ <h2 style={{ margin: '5px' }}>Properties</h2>
+ </ListItem>
+ <div style={isOpen ? { display: 'none' } : {} }>
+ <GridProperties gridRef={gridRef} />
+
+ {/* Display component position box */}
+ <ListItem>
+ <ListItemText primary="Components Position" />
+ </ListItem>
+ <ListItem style={{ padding: '0px' }} divider>
+ <div className="outline-container" ref={outlineRef} id="outlineContainer" />
+ </ListItem>
+
+ {/* Input form field for schematic description */}
+ <ListItem>
+ <ListItemText primary="Schematic Description" />
+ </ListItem>
+ <ListItem style={{ padding: '0px 7px 7px 7px' }} divider>
+ <TextareaAutosize id='Description' label='Description' value={ schSave.description === '' ? description || '' : schSave.description } onChange={getInputValues} rowsMin={6} aria-label='Description' placeholder={'Add Schematic Description'} style={{ width: '100%', minWidth: '234px', maxHeight: '250px' }} />
+ </ListItem>
+ </div>
+ </List>
+
+ <ComponentProperties />
+ </>
+ )
+}
+
+PropertiesSidebar.propTypes = {
+ gridRef: PropTypes.object.isRequired,
+ outlineRef: PropTypes.object.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/RightSidebar.js b/blocks/eda-frontend/src/components/SchematicEditor/RightSidebar.js
new file mode 100644
index 00000000..22474878
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/RightSidebar.js
@@ -0,0 +1,78 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Drawer, Hidden, IconButton } from '@material-ui/core'
+import HighlightOffIcon from '@material-ui/icons/HighlightOff'
+import { makeStyles } from '@material-ui/core/styles'
+
+const drawerWidth = 250
+
+const useStyles = makeStyles((theme) => ({
+ drawer: {
+ [theme.breakpoints.up('lg')]: {
+ width: drawerWidth,
+ flexShrink: 0
+ }
+ },
+ drawerPaper: {
+ width: drawerWidth
+ }
+}))
+
+// Editor right side pane to display grid and component properties.
+export default function RightSidebar ({ window, mobileOpen, mobileClose, children }) {
+ const classes = useStyles()
+
+ const container =
+ window !== undefined ? () => window().document.body : undefined
+
+ return (
+ <>
+ <nav className={classes.drawer} aria-label="mailbox folders">
+ <Hidden xlUp implementation="css">
+ <Drawer
+ container={container}
+ variant="temporary"
+ open={mobileOpen}
+ anchor="right"
+ onClose={mobileClose}
+ classes={{
+ paper: classes.drawerPaper
+ }}
+ ModalProps={{
+ keepMounted: true // Better open performance on mobile.
+ }}
+ >
+ <IconButton
+ onClick={mobileClose}
+ color="inherit"
+ style={{ marginRight: '190px' }}
+ >
+ <HighlightOffIcon />
+ </IconButton>
+ {children}
+ </Drawer>
+ </Hidden>
+
+ <Hidden mdDown implementation="css">
+ <Drawer
+ classes={{
+ paper: classes.drawerPaper
+ }}
+ anchor="right"
+ variant="permanent"
+ open
+ >
+ {children}
+ </Drawer>
+ </Hidden>
+ </nav>
+ </>
+ )
+}
+
+RightSidebar.propTypes = {
+ window: PropTypes.object,
+ mobileOpen: PropTypes.bool.isRequired,
+ mobileClose: PropTypes.func.isRequired,
+ children: PropTypes.element
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js b/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js
new file mode 100644
index 00000000..b0672116
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js
@@ -0,0 +1,468 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Canvg from 'canvg'
+import { IconButton, Tooltip, Snackbar } from '@material-ui/core'
+import AddBoxOutlinedIcon from '@material-ui/icons/AddBoxOutlined'
+import PlayCircleOutlineIcon from '@material-ui/icons/PlayCircleOutline'
+import HelpOutlineIcon from '@material-ui/icons/HelpOutline'
+import UndoIcon from '@material-ui/icons/Undo'
+import RedoIcon from '@material-ui/icons/Redo'
+import ZoomInIcon from '@material-ui/icons/ZoomIn'
+import ZoomOutIcon from '@material-ui/icons/ZoomOut'
+import DeleteIcon from '@material-ui/icons/Delete'
+import SettingsOverscanIcon from '@material-ui/icons/SettingsOverscan'
+import PrintOutlinedIcon from '@material-ui/icons/PrintOutlined'
+import BugReportOutlinedIcon from '@material-ui/icons/BugReportOutlined'
+import RotateRightIcon from '@material-ui/icons/RotateRight'
+import BorderClearIcon from '@material-ui/icons/BorderClear'
+import { makeStyles } from '@material-ui/core/styles'
+import CloseIcon from '@material-ui/icons/Close'
+import SaveOutlinedIcon from '@material-ui/icons/SaveOutlined'
+import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'
+import ClearAllIcon from '@material-ui/icons/ClearAll'
+import CreateNewFolderOutlinedIcon from '@material-ui/icons/CreateNewFolderOutlined'
+import ImageOutlinedIcon from '@material-ui/icons/ImageOutlined'
+import SystemUpdateAltOutlinedIcon from '@material-ui/icons/SystemUpdateAltOutlined'
+import { Link as RouterLink } from 'react-router-dom'
+
+import { NetlistModal, HelpScreen, ImageExportDialog, OpenSchDialog } from './ToolbarExtension'
+import { ZoomIn, ZoomOut, ZoomAct, DeleteComp, PrintPreview, ErcCheck, Rotate, GenerateNetList, Undo, Redo, Save, ClearGrid } from './Helper/ToolbarTools'
+import { useSelector, useDispatch } from 'react-redux'
+import { toggleSimulate, closeCompProperties, setSchXmlData, saveSchematic, openLocalSch } from '../../redux/actions/index'
+
+const useStyles = makeStyles((theme) => ({
+ menuButton: {
+ marginLeft: 'auto',
+ marginRight: theme.spacing(0),
+ padding: theme.spacing(1),
+ [theme.breakpoints.up('lg')]: {
+ display: 'none'
+ }
+ },
+ tools: {
+ padding: theme.spacing(1),
+ margin: theme.spacing(0, 0.5),
+ color: '#262626'
+ },
+ pipe: {
+ fontSize: '1.45rem',
+ color: '#d6c4c2',
+ margin: theme.spacing(0, 1.5)
+ }
+}))
+
+// Notification snackbar to give alert messages
+function SimpleSnackbar ({ open, close, message }) {
+ return (
+ <div>
+ <Snackbar
+ anchorOrigin={{
+ vertical: 'bottom',
+ horizontal: 'left'
+ }}
+ open={open}
+ autoHideDuration={5000}
+ onClose={close}
+ message={message}
+ action={
+ <React.Fragment>
+ <IconButton size="small" aria-label="close" color="inherit" onClick={close}>
+ <CloseIcon fontSize="small" />
+ </IconButton>
+ </React.Fragment>
+ }
+ />
+ </div>
+ )
+}
+
+SimpleSnackbar.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ message: PropTypes.string
+}
+
+export default function SchematicToolbar ({ mobileClose, gridRef }) {
+ const classes = useStyles()
+ const netfile = useSelector(state => state.netlistReducer)
+ const auth = useSelector(state => state.authReducer)
+ const schSave = useSelector(state => state.saveSchematicReducer)
+
+ const dispatch = useDispatch()
+
+ // Netlist Modal Control
+ const [open, setOpen] = React.useState(false)
+ const [netlist, genNetlist] = React.useState('')
+
+ const handleClickOpen = () => {
+ var compNetlist = GenerateNetList()
+ var netlist = netfile.title + '\n\n' +
+ compNetlist.models + '\n' +
+ compNetlist.main + '\n' +
+ netfile.controlLine + '\n' +
+ netfile.controlBlock + '\n'
+ genNetlist(netlist)
+ setOpen(true)
+ }
+
+ const handleClose = () => {
+ setOpen(false)
+ }
+
+ // Control Help dialog window
+ const [helpOpen, setHelpOpen] = React.useState(false)
+
+ const handleHelpOpen = () => {
+ setHelpOpen(true)
+ }
+
+ const handleHelpClose = () => {
+ setHelpOpen(false)
+ }
+
+ // Handel Delete component
+ const handleDeleteComp = () => {
+ DeleteComp()
+ dispatch(closeCompProperties())
+ }
+
+ // Handel Notification Snackbar
+ const [snacOpen, setSnacOpen] = React.useState(false)
+ const [message, setMessage] = React.useState('')
+
+ const handleSnacClick = () => {
+ setSnacOpen(true)
+ }
+
+ const handleSnacClose = (event, reason) => {
+ if (reason === 'clickaway') {
+ return
+ }
+ setSnacOpen(false)
+ }
+
+ // Image Export of Schematic Diagram
+ async function exportImage (type) {
+ const svg = document.querySelector('#divGrid > svg').cloneNode(true)
+ svg.removeAttribute('style')
+ svg.setAttribute('width', gridRef.current.scrollWidth)
+ svg.setAttribute('height', gridRef.current.scrollHeight)
+ const canvas = document.createElement('canvas')
+ canvas.width = gridRef.current.scrollWidth
+ canvas.height = gridRef.current.scrollHeight
+ canvas.style.width = canvas.width + 'px'
+ canvas.style.height = canvas.height + 'px'
+ var images = svg.getElementsByTagName('image')
+ for (var image of images) {
+ const data = await fetch(image.getAttribute('xlink:href')).then((v) => {
+ return v.text()
+ })
+ image.removeAttribute('xlink:href')
+ image.setAttribute(
+ 'href',
+ 'data:image/svg+xml;base64,' + window.btoa(data)
+ )
+ }
+ var ctx = canvas.getContext('2d')
+ ctx.mozImageSmoothingEnabled = true
+ ctx.webkitImageSmoothingEnabled = true
+ ctx.msImageSmoothingEnabled = true
+ ctx.imageSmoothingEnabled = true
+ const pixelRatio = window.devicePixelRatio || 1
+ ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0)
+ return new Promise(resolve => {
+ if (type === 'SVG') {
+ var svgdata = new XMLSerializer().serializeToString(svg)
+ resolve('<?xml version="1.0" encoding="UTF-8"?>' + svgdata)
+ return
+ }
+ var v = Canvg.fromString(ctx, svg.outerHTML)
+ v.render().then(() => {
+ var image = ''
+ if (type === 'JPG') {
+ const imgdata = ctx.getImageData(0, 0, canvas.width, canvas.height)
+ for (let i = 0; i < imgdata.data.length; i += 4) {
+ if (imgdata.data[i + 3] === 0) {
+ imgdata.data[i] = 255
+ imgdata.data[i + 1] = 255
+ imgdata.data[i + 2] = 255
+ imgdata.data[i + 3] = 255
+ }
+ }
+ ctx.putImageData(imgdata, 0, 0)
+ image = canvas.toDataURL('image/jpeg', 1.0)
+ } else {
+ if (type === 'PNG') {
+ image = canvas.toDataURL('image/png')
+ }
+ }
+ resolve(image)
+ })
+ })
+ }
+
+ // Download JPEG, PNG exported Image
+ function downloadImage (data, type) {
+ var evt = new MouseEvent('click', {
+ view: window,
+ bubbles: false,
+ cancelable: true
+ })
+ var a = document.createElement('a')
+ const ext = (type === 'PNG') ? '.png' : '.jpg'
+ a.setAttribute('download', schSave.title + '_Xcos_on_Cloud' + ext)
+ a.setAttribute('href', data)
+ a.setAttribute('target', '_blank')
+ a.dispatchEvent(evt)
+ }
+
+ // Download SVG image
+ function downloadText (data, options) {
+ const blob = new Blob(data, options)
+ const evt = new MouseEvent('click', {
+ view: window,
+ bubbles: false,
+ cancelable: true
+ })
+ const a = document.createElement('a')
+ a.setAttribute('download', schSave.title + '_Xcos_on_Cloud.svg')
+ a.href = URL.createObjectURL(blob)
+ a.target = '_blank'
+ a.setAttribute('target', '_blank')
+ a.dispatchEvent(evt)
+ }
+
+ const [imgopen, setImgOpen] = React.useState(false)
+
+ const handleImgClickOpen = () => {
+ setImgOpen(true)
+ }
+
+ const handleImgClose = (value) => {
+ setImgOpen(false)
+ if (value === 'SVG') {
+ exportImage('SVG')
+ .then(v => {
+ downloadText([v], {
+ type: 'data:image/svg+xml;charset=utf-8;'
+ })
+ })
+ } else if (value === 'PNG') {
+ exportImage('PNG')
+ .then(v => {
+ downloadImage(v, 'PNG')
+ })
+ } else if (value === 'JPG') {
+ exportImage('JPG')
+ .then(v => {
+ downloadImage(v, 'JPG')
+ })
+ }
+ }
+
+ // Handel Save Schematic onCloud
+ const handelSchSave = () => {
+ if (auth.isAuthenticated !== true) {
+ setMessage('You are not Logged In')
+ handleSnacClick()
+ } else {
+ var xml = Save()
+ dispatch(setSchXmlData(xml))
+ var title = schSave.title
+ var description = schSave.description
+ exportImage('PNG')
+ .then(res => {
+ dispatch(saveSchematic(title, description, xml, res))
+ })
+ setMessage('Saved Successfully')
+ handleSnacClick()
+ }
+ }
+
+ // Save Schematics Locally
+ const handelLocalSchSave = () => {
+ var saveLocalData = {}
+ saveLocalData.data_dump = Save()
+ saveLocalData.title = schSave.title
+ saveLocalData.description = schSave.description
+ var json = JSON.stringify(saveLocalData)
+ const blob = new Blob([json], { type: 'octet/stream' })
+ const evt = new MouseEvent('click', {
+ view: window,
+ bubbles: false,
+ cancelable: true
+ })
+ const a = document.createElement('a')
+ a.setAttribute('download', schSave.title + '_Xcos_on_Cloud.json')
+ a.href = URL.createObjectURL(blob)
+ a.target = '_blank'
+ a.setAttribute('target', '_blank')
+ a.dispatchEvent(evt)
+ }
+
+ // Open Locally Saved Schematic
+ const handelLocalSchOpen = () => {
+ var obj = {}
+ const fileSelector = document.createElement('input')
+ fileSelector.setAttribute('type', 'file')
+ fileSelector.setAttribute('accept', 'application/JSON')
+ fileSelector.click()
+ fileSelector.addEventListener('change', function (event) {
+ var reader = new FileReader()
+ var filename = event.target.files[0].name
+ if (filename.slice(filename.length - 4) === 'json') {
+ reader.onload = onReaderLoad
+ reader.readAsText(event.target.files[0])
+ } else {
+ setMessage('Unsupported file type error ! Select valid file.')
+ handleSnacClick()
+ }
+ })
+ const onReaderLoad = function (event) {
+ obj = JSON.parse(event.target.result)
+ if (obj.data_dump === undefined || obj.title === undefined || obj.description === undefined) {
+ setMessage('Unsupported file error !')
+ handleSnacClick()
+ } else {
+ dispatch(openLocalSch(obj))
+ }
+ }
+ }
+
+ // Control Help dialog window open and close
+ const [schOpen, setSchOpen] = React.useState(false)
+
+ const handleSchDialOpen = () => {
+ setSchOpen(true)
+ }
+
+ const handleSchDialClose = () => {
+ setSchOpen(false)
+ }
+
+ return (
+ <>
+ <Tooltip title="New">
+ <IconButton color="inherit" className={classes.tools} size="small" target="_blank" component={RouterLink} to="/editor" >
+ <CreateNewFolderOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Open">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handleSchDialOpen} >
+ <OpenInBrowserIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <OpenSchDialog open={schOpen} close={handleSchDialClose} openLocal={handelLocalSchOpen} />
+ <Tooltip title="Save">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handelSchSave} >
+ <SaveOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <SimpleSnackbar open={snacOpen} close={handleSnacClose} message={message} />
+ <span className={classes.pipe}>|</span>
+
+ <Tooltip title="Export">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handelLocalSchSave}>
+ <SystemUpdateAltOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Image Export">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handleImgClickOpen}>
+ <ImageOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <ImageExportDialog open={imgopen} onClose={handleImgClose} />
+ <Tooltip title="Print Preview">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={PrintPreview}>
+ <PrintOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <span className={classes.pipe}>|</span>
+
+ <Tooltip title="Simulate">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={() => { dispatch(toggleSimulate()) }}>
+ <PlayCircleOutlineIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Generate Netlist">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handleClickOpen} >
+ <BorderClearIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <NetlistModal open={open} close={handleClose} netlist={netlist} />
+ <Tooltip title="ERC Check">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={ErcCheck}>
+ <BugReportOutlinedIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <span className={classes.pipe}>|</span>
+
+ <Tooltip title="Undo">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={Undo}>
+ <UndoIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Redo">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={Redo}>
+ <RedoIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Rotate">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={Rotate}>
+ <RotateRightIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <span className={classes.pipe}>|</span>
+
+ <Tooltip title="Zoom In">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={ZoomIn}>
+ <ZoomInIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Zoom Out">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={ZoomOut}>
+ <ZoomOutIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Default Size">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={ZoomAct}>
+ <SettingsOverscanIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <span className={classes.pipe}>|</span>
+
+ <Tooltip title="Delete">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handleDeleteComp}>
+ <DeleteIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Clear All">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={ClearGrid}>
+ <ClearAllIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <Tooltip title="Help">
+ <IconButton color="inherit" className={classes.tools} size="small" onClick={handleHelpOpen}>
+ <HelpOutlineIcon fontSize="small" />
+ </IconButton>
+ </Tooltip>
+ <HelpScreen open={helpOpen} close={handleHelpClose} />
+
+ <IconButton
+ color='inherit'
+ aria-label='open drawer'
+ edge='end'
+ size="small"
+ onClick={mobileClose}
+ className={classes.menuButton}
+ >
+ <AddBoxOutlinedIcon fontSize="small" />
+ </IconButton>
+ </>
+ )
+}
+
+SchematicToolbar.propTypes = {
+ mobileClose: PropTypes.func,
+ gridRef: PropTypes.object.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/SideComp.js b/blocks/eda-frontend/src/components/SchematicEditor/SideComp.js
new file mode 100644
index 00000000..dd79bdac
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/SideComp.js
@@ -0,0 +1,97 @@
+import React, { useEffect } from 'react'
+import PropTypes from 'prop-types'
+import { List, ListItemText, Tooltip, Popover } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+
+import './Helper/SchematicEditor.css'
+import { AddComponent } from './Helper/SideBar.js'
+
+const useStyles = makeStyles((theme) => ({
+ popupInfo: {
+ margin: theme.spacing(1.5),
+ padding: theme.spacing(1.5),
+ border: '1px solid blue',
+ borderRadius: '5px'
+ }
+}))
+
+export default function SideComp ({ component }) {
+ const classes = useStyles()
+ const imageRef = React.createRef()
+
+ const [anchorEl, setAnchorEl] = React.useState(null)
+
+ const handleClick = (event) => {
+ setAnchorEl(event.currentTarget)
+ }
+ const handleClose = () => {
+ setAnchorEl(null)
+ }
+
+ const open = Boolean(anchorEl)
+ const id = open ? 'simple-popover' : undefined
+
+ useEffect(() => {
+ // Function call to make components draggable
+ AddComponent(component, imageRef.current)
+ }, [imageRef, component])
+
+ return (
+ <div>
+
+ <Tooltip title={component.full_name} arrow>
+ {/* Display Image thumbnail in left side pane */}
+ <img ref={imageRef} className='compImage' src={'../' + component.svg_path} alt="Logo" aria-describedby={id} onClick={handleClick} />
+ </Tooltip>
+
+ {/* Popover to display component information on single click */}
+ <Popover
+ id={id}
+ open={open}
+ className={classes.popup}
+ anchorEl={anchorEl}
+ onClose={handleClose}
+ anchorOrigin={{
+ vertical: 'bottom',
+ horizontal: 'center'
+ }}
+ transformOrigin={{
+ vertical: 'top',
+ horizontal: 'center'
+ }}
+ >
+ <List component="div" className={classes.popupInfo} disablePadding dense >
+ <ListItemText>
+ <b>Component Name:</b> {component.name}
+ </ListItemText>
+
+ { component.description !== '' &&
+ <ListItemText>
+ <b>Description:</b> {component.description}
+ </ListItemText>
+ }
+ {
+ component.keyword !== '' &&
+ <ListItemText>
+ <b>Keywords:</b> {component.keyword}
+ </ListItemText>
+
+ }
+
+ {
+ component.data_link !== '' &&
+ <ListItemText>
+ <b>Datasheet:</b> <a href={component.data_link} rel="noopener noreferrer" target='_blank' >{component.data_link}</a>
+ </ListItemText>
+ }
+
+ </List>
+ </Popover>
+
+ </div>
+ )
+}
+
+SideComp.propTypes = {
+ component: PropTypes.object.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/SimulationProperties.js b/blocks/eda-frontend/src/components/SchematicEditor/SimulationProperties.js
new file mode 100644
index 00000000..c0240e4c
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/SimulationProperties.js
@@ -0,0 +1,757 @@
+/* eslint-disable no-unused-vars */
+import React, { useState } from 'react'
+import {
+ List,
+ Checkbox,
+ ListItem,
+ Button,
+ TextField,
+ ExpansionPanel,
+ ExpansionPanelSummary,
+ ExpansionPanelDetails,
+ Typography,
+ Select,
+ Divider,
+ Popover,
+ Tooltip,
+ IconButton
+} from '@material-ui/core'
+import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined'
+import ExpandMoreIcon from '@material-ui/icons/ExpandMore'
+import { makeStyles } from '@material-ui/core/styles'
+import { useSelector, useDispatch } from 'react-redux'
+import { setControlLine, setControlBlock, setResultTitle, setResultGraph, setResultText } from '../../redux/actions/index'
+import { GenerateNetList, GenerateNodeList, GenerateCompList } from './Helper/ToolbarTools'
+import SimulationScreen from './SimulationScreen'
+
+import api from '../../utils/Api'
+
+const useStyles = makeStyles((theme) => ({
+ toolbar: {
+ minHeight: '90px'
+ },
+ pages: {
+ margin: theme.spacing(0, 1)
+ },
+ propertiesBox: {
+ width: '100%'
+ },
+ simulationOptions: {
+ margin: '0px',
+ padding: '0px',
+ width: '100%'
+ },
+ heading: {
+ fontSize: theme.typography.pxToRem(15),
+ fontWeight: theme.typography.fontWeightRegular
+ }
+}))
+
+export default function SimulationProperties () {
+ const netfile = useSelector(state => state.netlistReducer)
+ const isSimRes = useSelector(state => state.simulationReducer.isSimRes)
+ const dispatch = useDispatch()
+ const classes = useStyles()
+ const [nodeList, setNodeList] = useState([])
+ const [componentsList, setComponentsList] = useState([])
+ const [dcSweepcontrolLine, setDcSweepControlLine] = useState({
+ parameter: '',
+ sweepType: 'Linear',
+ start: '',
+ stop: '',
+ step: '',
+ parameter2: '',
+ start2: '',
+ stop2: '',
+ step2: ''
+ })
+ const [transientAnalysisControlLine, setTransientAnalysisControlLine] = useState({
+ start: '',
+ stop: '',
+ step: '',
+ skipInitial: 'No'
+ })
+
+ const [acAnalysisControlLine, setAcAnalysisControlLine] = useState({
+ input: 'dec',
+ start: '',
+ stop: '',
+ pointsBydecade: ''
+ })
+
+ const [controlBlockParam, setControlBlockParam] = useState('')
+
+ const handleControlBlockParam = (evt) => {
+ setControlBlockParam(evt.target.value)
+ }
+
+ const onDcSweepTabExpand = () => {
+ try {
+ setComponentsList(['', ...GenerateCompList()])
+ } catch (err) {
+ setComponentsList([])
+ alert('Circuit not complete. Please Check Connectons.')
+ }
+ }
+
+ const handleDcSweepControlLine = (evt) => {
+ const value = evt.target.value
+
+ setDcSweepControlLine({
+ ...dcSweepcontrolLine,
+ [evt.target.id]: value
+ })
+ }
+
+ const handleTransientAnalysisControlLine = (evt) => {
+ const value = evt.target.value
+
+ setTransientAnalysisControlLine({
+ ...transientAnalysisControlLine,
+ [evt.target.id]: value
+ })
+ }
+
+ const handleAcAnalysisControlLine = (evt) => {
+ const value = evt.target.value
+
+ setAcAnalysisControlLine({
+ ...acAnalysisControlLine,
+ [evt.target.id]: value
+ })
+ }
+
+ const [simulateOpen, setSimulateOpen] = React.useState(false)
+ const handlesimulateOpen = () => {
+ setSimulateOpen(true)
+ }
+
+ const handleSimulateClose = () => {
+ setSimulateOpen(false)
+ }
+ const [simResult, setSimResult] = React.useState({})
+
+ const handleSimulationResult = (simResults) => {
+ setSimResult(simResults)
+ }
+
+ const acTypeOptionList = {
+ Linear: 'lin',
+ Decade: 'dec',
+ Octave: 'oct'
+ }
+
+ // Prepare Netlist to file
+ const prepareNetlist = (netlist) => {
+ var titleA = netfile.title.split(' ')[1]
+ var myblob = new Blob([netlist], {
+ type: 'text/plain'
+ })
+ var file = new File([myblob], `${titleA}.cir`, { type: 'text/plain', lastModified: Date.now() })
+ // console.log(file)
+ sendNetlist(file)
+ }
+
+ function sendNetlist (file) {
+ netlistConfig(file)
+ .then((response) => {
+ const res = response.data
+ const getUrl = 'simulation/status/'.concat(res.details.task_id)
+
+ simulationResult(getUrl)
+ })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ // Upload the nelist
+ function netlistConfig (file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ const config = {
+ headers: {
+ 'content-type': 'multipart/form-data'
+ }
+ }
+ return api.post('simulation/upload', formData, config)
+ }
+
+ const [isResult, setIsResult] = useState(false)
+
+ // Get the simulation result with task_Id
+ function simulationResult (url) {
+ api
+ .get(url)
+ .then((res) => {
+ if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') {
+ setTimeout(simulationResult(url), 1000)
+ } else {
+ var result = res.data.details
+ if (result === null) {
+ setIsResult(false)
+ } else {
+ setIsResult(true)
+ var temp = res.data.details.data
+ var data = result.data
+ // console.log('DATA SIm', data)
+ if (res.data.details.graph === 'true') {
+ var simResultGraph = { labels: [], x_points: [], y_points: [] }
+ // populate the labels
+ for (var i = 0; i < data.length; i++) {
+ simResultGraph.labels[0] = data[i].labels[0]
+ var lab = data[i].labels
+ // lab is an array containeing labels names ['time','abc','def']
+ simResultGraph.x_points = data[0].x
+
+ // labels
+ for (var x = 1; x < lab.length; x++) {
+ if (lab[x].includes('#branch')) {
+ lab[x] = `I (${lab[x].replace('#branch', '')})`
+ }
+ // uncomment below if you want label like V(r1.1) but it will break the graph showing time as well
+ // else {
+ // lab[x] = `V (${lab[x]})`
+
+ // }
+ simResultGraph.labels.push(lab[x])
+ }
+ // populate y_points
+ for (var z = 0; z < data[i].y.length; z++) {
+ simResultGraph.y_points.push(data[i].y[z])
+ }
+ }
+
+ simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d))
+
+ for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) {
+ simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d))
+ }
+
+ dispatch(setResultGraph(simResultGraph))
+ } else {
+ var simResultText = []
+ for (let i = 0; i < temp.length; i++) {
+ let postfixUnit = ''
+ if (temp[i][0].includes('#branch')) {
+ temp[i][0] = `I(${temp[i][0].replace('#branch', '')})`
+ postfixUnit = 'A'
+ } else {
+ temp[i][0] = `V(${temp[i][0]})`
+ postfixUnit = 'V'
+ }
+
+ simResultText.push(temp[i][0] + ' ' + temp[i][1] + ' ' + parseFloat(temp[i][2]) + ' ' + postfixUnit + '\n')
+ }
+
+ handleSimulationResult(res.data.details)
+ dispatch(setResultText(simResultText))
+ }
+ }
+ }
+ })
+ .then((res) => { handlesimulateOpen() })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ const startSimulate = (type) => {
+ var compNetlist = GenerateNetList()
+ var controlLine = ''
+ var controlBlock = ''
+ switch (type) {
+ case 'DcSolver':
+ // console.log('To be implemented')
+ controlLine = '.op'
+
+ dispatch(setResultTitle('DC Solver Output'))
+ break
+ case 'DcSweep':
+ // console.log(dcSweepcontrolLine)
+ controlLine = `.dc ${dcSweepcontrolLine.parameter} ${dcSweepcontrolLine.start} ${dcSweepcontrolLine.stop} ${dcSweepcontrolLine.step} ${dcSweepcontrolLine.parameter2} ${dcSweepcontrolLine.start2} ${dcSweepcontrolLine.stop2} ${dcSweepcontrolLine.step2}`
+ dispatch(setResultTitle('DC Sweep Output'))
+ break
+ case 'Transient':
+ // console.log(transientAnalysisControlLine)
+ controlLine = `.tran ${transientAnalysisControlLine.step} ${transientAnalysisControlLine.stop} ${transientAnalysisControlLine.start}`
+
+ dispatch(setResultTitle('Transient Analysis Output'))
+ break
+ case 'Ac':
+ // console.log(acAnalysisControlLine)
+ controlLine = `.ac ${acAnalysisControlLine.input} ${acAnalysisControlLine.pointsBydecade} ${acAnalysisControlLine.start} ${acAnalysisControlLine.stop}`
+
+ dispatch(setResultTitle('AC Analysis Output'))
+ break
+ default:
+ break
+ }
+ let cblockline
+ if (controlBlockParam.length <= 0) { cblockline = 'all' } else { cblockline = controlBlockParam }
+ controlBlock = `\n.control \nrun \nprint ${cblockline} > data.txt \n.endc \n.end`
+ // console.log(controlLine)
+
+ dispatch(setControlLine(controlLine))
+ dispatch(setControlBlock(controlBlock))
+ // setTimeout(function () { }, 2000)
+
+ var netlist = netfile.title + '\n\n' +
+ compNetlist.models + '\n' +
+ compNetlist.main + '\n' +
+ controlLine + '\n' +
+ controlBlock + '\n'
+
+ prepareNetlist(netlist)
+
+ // handlesimulateOpen()
+ }
+
+ // simulation properties add expression input box
+ const [anchorEl, setAnchorEl] = React.useState(null)
+ const handleAddExpressionClick = (event) => {
+ setAnchorEl(event.currentTarget)
+ }
+
+ const handleAddExpressionClose = () => {
+ setAnchorEl(null)
+ }
+
+ const open = Boolean(anchorEl)
+ const id = open ? 'simple-popover' : undefined
+
+ return (
+ <>
+ <div className={classes.SimulationOptions}>
+ <SimulationScreen open={simulateOpen} isResult={isResult} close={handleSimulateClose} />
+
+ {/* Simulation modes list */}
+ <List>
+
+ {/* DC Solver */}
+ <ListItem className={classes.simulationOptions} divider>
+ <div className={classes.propertiesBox}>
+ <ExpansionPanel>
+ <ExpansionPanelSummary
+ expandIcon={<ExpandMoreIcon />}
+ aria-controls="panel1a-content"
+ id="panel1a-header"
+ >
+ <Typography className={classes.heading}>DC Solver</Typography>
+ </ExpansionPanelSummary>
+ <ExpansionPanelDetails>
+ <form>
+ <List>
+ <ListItem>
+
+ <Button aria-describedby={id} variant="outlined" color="primary" size="small" onClick={handleAddExpressionClick}>
+ Add Expression
+ </Button>
+ <Tooltip title={'Add expression seperated by spaces.\n Include #branch at end of expression to indicate current e.g v1#branch. To add multiple expression seperate them by spaces eg. v1 v2 v3#branch'}>
+ <IconButton aria-label="info">
+ <InfoOutlinedIcon style={{ fontSize: 'large' }} />
+ </IconButton>
+ </Tooltip>
+ <Popover
+ id={id}
+ open={open}
+ anchorEl={anchorEl}
+ onClose={handleAddExpressionClose}
+
+ anchorOrigin={{
+ vertical: 'center',
+ horizontal: 'left'
+ }}
+ transformOrigin={{
+ vertical: 'top',
+ horizontal: 'left'
+ }}
+ >
+
+ <TextField id="controlBlockParam" placeHolder="enter expression" size='large' variant="outlined"
+ value={controlBlockParam}
+ onChange={handleControlBlockParam}
+ />
+ </Popover>
+ </ListItem>
+ <ListItem>
+ <Button size='small' variant="contained" color="primary"
+ onClick={(e) => { startSimulate('DcSolver') }}>
+ Run dc solver
+ </Button>
+ </ListItem>
+ </List>
+ </form>
+ </ExpansionPanelDetails>
+ </ExpansionPanel>
+
+ </div>
+ </ListItem>
+
+ {/* DC Sweep */}
+ <ListItem className={classes.simulationOptions} divider>
+ <ExpansionPanel onClick={onDcSweepTabExpand}>
+ <ExpansionPanelSummary
+ expandIcon={<ExpandMoreIcon />}
+ aria-controls="panel1a-content"
+ id="panel1a-header"
+ >
+ <Typography className={classes.heading}>DC Sweep</Typography>
+ </ExpansionPanelSummary>
+ <ExpansionPanelDetails>
+ <form className={classes.propertiesBox} noValidate autoComplete="off">
+ <List>
+ <ListItem>
+ <TextField
+ style={{ width: '100%' }}
+ id="parameter"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Component"
+ value={dcSweepcontrolLine.parameter}
+ onChange={handleDcSweepControlLine}
+ SelectProps={{
+ native: true
+ }}
+ >
+
+ {
+ componentsList.map((value, i) => {
+ if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') {
+ return (<option key={i} value={value}>
+ {value}
+ </option>)
+ } else {
+ return null
+ }
+ })
+ }
+
+ </TextField>
+
+ </ListItem>
+
+ <ListItem>
+ <TextField id="start" label="Start Voltage" size='small' variant="outlined"
+ value={dcSweepcontrolLine.start}
+ onChange={handleDcSweepControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>V</span>
+ </ListItem>
+ <ListItem>
+ <TextField id="stop" label="Stop Voltage" size='small' variant="outlined"
+ value={dcSweepcontrolLine.stop}
+ onChange={handleDcSweepControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>V</span>
+ </ListItem>
+ <ListItem>
+ <TextField id="step" label="Step" size='small' variant="outlined"
+ value={dcSweepcontrolLine.step}
+ onChange={handleDcSweepControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>V</span>
+ </ListItem>
+
+ {/* SECONDARY PARAMETER FOR SWEEP */}
+ <Divider />
+ <ListItem>
+
+ <h4 style={{ marginLeft: '10px' }}>Secondary Parameters</h4>
+ </ListItem>
+
+ <ListItem>
+
+ <TextField
+ style={{ width: '100%' }}
+ id="parameter2"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Component"
+ value={dcSweepcontrolLine.parameter2}
+ onChange={handleDcSweepControlLine}
+ SelectProps={{
+ native: true
+ }}
+
+ >
+
+ {
+ componentsList.map((value, i) => {
+ return <option key={i} value={value}>
+ {value}
+ </option>
+ })
+ }
+
+ </TextField>
+
+ </ListItem>
+
+ <ListItem>
+ <TextField id="start2" label="Start Value" size='small' variant="outlined"
+ value={dcSweepcontrolLine.start2}
+ onChange={handleDcSweepControlLine}
+ />
+
+ </ListItem>
+ <ListItem>
+ <TextField id="stop2" label="Stop Value" size='small' variant="outlined"
+ value={dcSweepcontrolLine.stop2}
+ onChange={handleDcSweepControlLine}
+ />
+
+ </ListItem>
+ <ListItem>
+ <TextField id="step2" label="Step Value" size='small' variant="outlined"
+ value={dcSweepcontrolLine.step2}
+ onChange={handleDcSweepControlLine}
+ />
+
+ </ListItem>
+ <ListItem>
+
+ <Button aria-describedby={id} variant="outlined" color="primary" size="small" onClick={handleAddExpressionClick}>
+ Add Expression
+ </Button>
+ <Tooltip title={'Add expression seperated by spaces.\n Include #branch at end of expression to indicate current e.g v1#branch. To add multiple expression seperate them by spaces eg. v1 v2 v3#branch'}>
+ <IconButton aria-label="info">
+ <InfoOutlinedIcon style={{ fontSize: 'large' }} />
+ </IconButton>
+ </Tooltip>
+ <Popover
+ id={id}
+ open={open}
+ anchorEl={anchorEl}
+ onClose={handleAddExpressionClose}
+
+ anchorOrigin={{
+ vertical: 'center',
+ horizontal: 'left'
+ }}
+ transformOrigin={{
+ vertical: 'top',
+ horizontal: 'left'
+ }}
+ >
+
+ <TextField id="controlBlockParam" placeHolder="enter expression" size='large' variant="outlined"
+ value={controlBlockParam}
+ onChange={handleControlBlockParam}
+ />
+
+ </Popover>
+
+ </ListItem>
+
+ <ListItem>
+ <Button id="dcSweepSimulate" size='small' variant="contained" color="primary" onClick={(e) => { startSimulate('DcSweep') }}>
+ Simulate
+ </Button>
+ </ListItem>
+ </List>
+ </form>
+ </ExpansionPanelDetails>
+ </ExpansionPanel>
+ </ListItem>
+
+ {/* Transient Analysis */}
+ <ListItem className={classes.simulationOptions} divider>
+ <ExpansionPanel>
+ <ExpansionPanelSummary
+ expandIcon={<ExpandMoreIcon />}
+ aria-controls="panel1a-content"
+ id="panel1a-header"
+ >
+ <Typography className={classes.heading}>Transient Analysis</Typography>
+ </ExpansionPanelSummary>
+ <ExpansionPanelDetails>
+ <form className={classes.propertiesBox} noValidate autoComplete="off">
+ <List>
+ <ListItem>
+ <TextField id="start" label="Start Time" size='small' variant="outlined"
+ value={transientAnalysisControlLine.start}
+ onChange={handleTransientAnalysisControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>S</span>
+ </ListItem>
+ <ListItem>
+ <TextField id="stop" label="Stop Time" size='small' variant="outlined"
+ value={transientAnalysisControlLine.stop}
+ onChange={handleTransientAnalysisControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>S</span>
+ </ListItem>
+ <ListItem>
+ <TextField id="step" label="Time Step" size='small' variant="outlined"
+ value={transientAnalysisControlLine.step}
+ onChange={handleTransientAnalysisControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>S</span>
+ </ListItem>
+
+ <ListItem>
+
+ <Button aria-describedby={id} variant="outlined" color="primary" size="small" onClick={handleAddExpressionClick}>
+ Add Expression
+ </Button>
+ <Tooltip title={'Add expression seperated by spaces.\n Include #branch at end of expression to indicate current e.g v1#branch. To add multiple expression seperate them by spaces eg. v1 v2 v3#branch'}>
+ <IconButton aria-label="info">
+ <InfoOutlinedIcon style={{ fontSize: 'large' }} />
+ </IconButton>
+ </Tooltip>
+ <Popover
+ id={id}
+ open={open}
+ anchorEl={anchorEl}
+ onClose={handleAddExpressionClose}
+
+ anchorOrigin={{
+ vertical: 'center',
+ horizontal: 'left'
+ }}
+ transformOrigin={{
+ vertical: 'top',
+ horizontal: 'left'
+ }}
+ >
+
+ <TextField id="controlBlockParam" placeHolder="enter expression" size='large' variant="outlined"
+ value={controlBlockParam}
+ onChange={handleControlBlockParam}
+ />
+
+ </Popover>
+
+ </ListItem>
+ <ListItem>
+ <Button id="transientAnalysisSimulate" size='small' variant="contained" color="primary" onClick={(e) => { startSimulate('Transient') }}>
+ Simulate
+ </Button>
+ </ListItem>
+ </List>
+ </form>
+ </ExpansionPanelDetails>
+ </ExpansionPanel>
+ </ListItem>
+
+ {/* AC Analysis */}
+ <ListItem className={classes.simulationOptions} divider>
+ <ExpansionPanel>
+ <ExpansionPanelSummary
+ expandIcon={<ExpandMoreIcon />}
+ aria-controls="panel1a-content"
+ id="panel1a-header"
+ >
+ <Typography className={classes.heading}>AC Analysis</Typography>
+ </ExpansionPanelSummary>
+ <ExpansionPanelDetails>
+ <form className={classes.propertiesBox} noValidate autoComplete="off">
+ <List>
+
+ <ListItem>
+ <TextField
+ style={{ width: '100%' }}
+ id="input"
+ size='small'
+ variant="outlined"
+ select
+ label="Type"
+ value={acAnalysisControlLine.input}
+ onChange={handleAcAnalysisControlLine}
+ SelectProps={{
+ native: true
+ }}
+
+ >
+ <option key="linear" value="lin">
+ Linear
+ </option>
+ <option key="decade" value="dec">
+ Decade
+ </option>
+ <option key="octave" value="oct">
+ Octave
+ </option>
+ </TextField>
+ </ListItem>
+
+ <ListItem>
+ <TextField id="pointsBydecade" label="Points/ Decade" size='small' variant="outlined"
+ value={acAnalysisControlLine.pointsBydecade}
+ onChange={handleAcAnalysisControlLine}
+ />
+ </ListItem>
+ <ListItem>
+ <TextField id="start" label="Start Frequency" size='small' variant="outlined"
+ value={acAnalysisControlLine.start}
+ onChange={handleAcAnalysisControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>Hz</span>
+ </ListItem>
+ <ListItem>
+ <TextField id="stop" label="Stop Frequency" size='small' variant="outlined"
+ value={acAnalysisControlLine.stop}
+ onChange={handleAcAnalysisControlLine}
+ />
+ <span style={{ marginLeft: '10px' }}>Hz</span>
+ </ListItem>
+
+ <ListItem>
+
+ <Button aria-describedby={id} variant="outlined" color="primary" size="small" onClick={handleAddExpressionClick}>
+ Add Expression
+ </Button>
+ <Tooltip title={'Add expression seperated by spaces. Include #branch at end of expression to indicate current e.g v1#branch. To add multiple expression seperate them by spaces eg. v1 v2 v3#branch'}>
+ <IconButton aria-label="info">
+ <InfoOutlinedIcon style={{ fontSize: 'large' }} />
+ </IconButton>
+ </Tooltip>
+ <Popover
+ id={id}
+ open={open}
+ anchorEl={anchorEl}
+ onClose={handleAddExpressionClose}
+
+ anchorOrigin={{
+ vertical: 'center',
+ horizontal: 'left'
+ }}
+ transformOrigin={{
+ vertical: 'top',
+ horizontal: 'left'
+ }}
+ >
+
+ <TextField id="controlBlockParam" placeHolder="enter expression" size='large' variant="outlined"
+ value={controlBlockParam}
+ onChange={handleControlBlockParam}
+ />
+
+ </Popover>
+
+ </ListItem>
+
+ <ListItem>
+ <Button size='small' variant="contained" color="primary" onClick={(e) => { startSimulate('Ac') }}>
+ Simulate
+ </Button>
+ </ListItem>
+ </List>
+ </form>
+ </ExpansionPanelDetails>
+ </ExpansionPanel>
+ </ListItem>
+
+ <ListItem style={isSimRes ? {} : { display: 'none' }} onClick={handlesimulateOpen} >
+ <Button size='small' variant="contained" color="primary" style={{ margin: '10px auto' }} onClick={handlesimulateOpen}>
+ Simulation Result
+ </Button>
+ </ListItem>
+ </List>
+ </div>
+ </>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/SimulationScreen.js b/blocks/eda-frontend/src/components/SchematicEditor/SimulationScreen.js
new file mode 100644
index 00000000..3840594d
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/SimulationScreen.js
@@ -0,0 +1,375 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import {
+ Slide,
+ Button,
+ Dialog,
+ AppBar,
+ Toolbar,
+ IconButton,
+ Typography,
+ Grid,
+ TextField,
+ Paper,
+ Container,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TableRow
+
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import CloseIcon from '@material-ui/icons/Close'
+import { useSelector } from 'react-redux'
+
+import Graph from '../Shared/Graph'
+
+const Transition = React.forwardRef(function Transition (props, ref) {
+ return <Slide direction="up" ref={ref} {...props} />
+})
+
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ position: 'relative'
+ },
+ title: {
+ marginLeft: theme.spacing(2),
+ flex: 1
+ },
+ header: {
+ padding: theme.spacing(5, 0, 6),
+ color: '#fff'
+ },
+ paper: {
+ padding: theme.spacing(2),
+ textAlign: 'center',
+ backgroundColor: '#404040',
+ color: '#fff'
+ }
+}))
+
+// Screen to display simulation result in graph or text format
+export default function SimulationScreen ({ open, close, isResult }) {
+ const classes = useStyles()
+ const result = useSelector((state) => state.simulationReducer)
+ const stitle = useSelector((state) => state.netlistReducer.title)
+ const [xscale, setXScale] = React.useState('si')
+ const [yscale, setYScale] = React.useState('si')
+ const [precision, setPrecision] = React.useState(5)
+ const precisionArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ const scales = {
+ G: 1000000000,
+ M: 1000000,
+ K: 1000,
+ si: 1,
+ m: 0.001,
+ u: 0.000001,
+ n: 0.000000001,
+ p: 0.000000000001
+ }
+ const handleXScale = (evt) => {
+ setXScale(evt.target.value)
+ }
+
+ const handleYScale = (evt) => {
+ setYScale(evt.target.value)
+ }
+ const handlePrecision = (evt) => {
+ setPrecision(evt.target.value)
+ }
+
+ return (
+ <div>
+ <Dialog fullScreen open={open} onClose={close} TransitionComponent={Transition} PaperProps={{
+ style: {
+ backgroundColor: '#4d4d4d',
+ boxShadow: 'none'
+ }
+ }}>
+ <AppBar position="static" elevation={0} className={classes.appBar}>
+ <Toolbar variant="dense" style={{ backgroundColor: '#404040' }} >
+ <IconButton edge="start" color="inherit" onClick={close} aria-label="close">
+ <CloseIcon />
+ </IconButton>
+ <Typography variant="h6" className={classes.title}>
+ Simulation Result
+ </Typography>
+ <Button autoFocus color="inherit" onClick={close}>
+ close
+ </Button>
+ </Toolbar>
+ </AppBar>
+ <Container maxWidth="lg" className={classes.header}>
+ <Grid
+ container
+ spacing={3}
+ direction="row"
+ justify="center"
+ alignItems="center"
+ >
+ {/* Card to display simualtion result screen header */}
+ <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h2" align="center" gutterBottom>
+ {result.title}
+ </Typography>
+ <Typography variant="h5" align="center" component="p" gutterBottom>
+ Simulation Result for {stitle} *
+ </Typography>
+ </Paper>
+ </Grid>
+
+ {/* Display graph result */}
+ {isResult === true ? <>
+ {
+ (result.graph !== {} && result.isGraph === 'true')
+ ? <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h4" align="center" gutterBottom>
+ GRAPH OUTPUT
+ </Typography>
+ <div style={{ padding: '15px 10px 10px 10px', margin: '20px 0px', backgroundColor: 'white', borderRadius: '5px' }} >
+ <TextField
+ style={{ width: '20%' }}
+ id="xscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select X Axis Scale"
+ value={xscale}
+ onChange={handleXScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="yscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Y Axis Scale"
+ value={yscale}
+ onChange={handleYScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="precision"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Precision"
+ value={precision}
+ onChange={handlePrecision}
+ SelectProps={{
+ native: true
+ }}
+ >
+ {
+ precisionArr.map((d, i) => {
+ return (
+ <option key={i} value={d}>
+ {d}
+ </option>
+ )
+ })
+ }
+
+ </TextField>
+ </div>
+ <Graph
+ labels={result.graph.labels}
+ x={result.graph.x_points}
+ y={result.graph.y_points}
+ xscale={xscale}
+ yscale={yscale}
+ precision={precision}
+ />
+ </Paper>
+ </Grid>
+ : (result.isGraph === 'true') ? <span>SOMETHING WENT WRONG PLEASE CHECK THE SIMULATION PARAMETERS.</span> : <span></span>
+ }
+
+ {/* Display text result */}
+ {
+ (result.isGraph === 'false')
+ ? <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h4" align="center" gutterBottom>
+ OUTPUT
+ </Typography>
+ <div style={{ padding: '15px 10px 10px 10px', backgroundColor: 'white', margin: '20px 0px', borderRadius: '5px' }}>
+ <TextField
+ style={{ width: '20%' }}
+ id="xscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Scale"
+ value={xscale}
+ onChange={handleXScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="precision"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Precision"
+ value={precision}
+ onChange={handlePrecision}
+ SelectProps={{
+ native: true
+ }}
+ >
+ {
+ precisionArr.map((d, i) => {
+ return (
+ <option key={i} value={d}>
+ {d}
+ </option>
+ )
+ })
+ }
+
+ </TextField>
+ </div>
+
+ <TableContainer component={Paper}>
+ <Table className={classes.table} aria-label="simple table">
+ <TableHead>
+ <TableRow>
+ <TableCell align="center">Node/Branch</TableCell>
+ <TableCell align="center">Value</TableCell>
+ <TableCell align="center">Unit</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ {result.text.map((line, index) => (
+ <TableRow key={index}>
+ <TableCell align="center">{line.split('=')[0]}</TableCell>
+ <TableCell align="center">{(parseFloat(line.split(' ')[2]) / scales[xscale]).toFixed(precision)}</TableCell>
+ <TableCell align="center">{xscale === 'si' ? '' : xscale}{line.split(' ')[3]}</TableCell>
+ </TableRow>
+ ))
+ }
+
+ </TableBody>
+ </Table>
+ </TableContainer>
+
+ </Paper>
+ </Grid>
+ : <span></span>
+ } </>
+ : <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h6" align="center" gutterBottom>
+ SOMETHING WENT WRONG PLEASE CHECK THE SIMULATION PARAMETERS AND SCHEMATIC DIAGRAM. {/* Error handeling message in case of null result */}
+ </Typography>
+ </Paper>
+ </Grid>
+ }
+ </Grid>
+ </Container>
+ </Dialog>
+ </div>
+ )
+}
+
+SimulationScreen.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ isResult: PropTypes.bool
+}
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js b/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js
new file mode 100644
index 00000000..b99fd931
--- /dev/null
+++ b/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js
@@ -0,0 +1,541 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import {
+ Slide,
+ Button,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogContentText,
+ DialogTitle,
+ TextareaAutosize,
+ AppBar,
+ Toolbar,
+ IconButton,
+ Typography,
+ Container,
+ Grid,
+ Paper,
+ Divider,
+ TableContainer,
+ Table,
+ TableHead,
+ TableRow,
+ TableCell,
+ TableBody,
+ List,
+ ListItem,
+ ListItemText,
+ Avatar,
+ ListItemAvatar,
+ Tooltip
+} from '@material-ui/core'
+
+import { makeStyles } from '@material-ui/core/styles'
+import CloseIcon from '@material-ui/icons/Close'
+import { useSelector, useDispatch } from 'react-redux'
+import { fetchSchematics, fetchSchematic, loadGallery } from '../../redux/actions/index'
+import GallerySchSample from '../../utils/GallerySchSample'
+import { blue } from '@material-ui/core/colors'
+
+const Transition = React.forwardRef(function Transition (props, ref) {
+ return <Slide direction="up" ref={ref} {...props} />
+})
+
+var FileSaver = require('file-saver')
+
+// Dialog box to display generated netlist
+export function NetlistModal ({ open, close, netlist }) {
+ const netfile = useSelector(state => state.netlistReducer)
+ const createNetlistFile = () => {
+ var titleA = netfile.title.split(' ')[1]
+ var blob = new Blob([netlist], { type: 'text/plain;charset=utf-8' })
+ FileSaver.saveAs(blob, `${titleA}_Xcos_on_Cloud.cir`)
+ }
+ return (
+ <Dialog
+ open={open}
+ onClose={close}
+ TransitionComponent={Transition}
+ keepMounted
+ aria-labelledby="generate-netlist"
+ aria-describedby="generate-netlist-description"
+ >
+ <DialogTitle id="generate-netlist-title">{'Netlist Generator'}</DialogTitle>
+ <DialogContent dividers>
+ <DialogContentText id="generate-netlist-description">
+ Current Netlist for given schematic...<br /><br />
+ <TextareaAutosize aria-label="empty textarea" rowsMin={20} rowsMax={50} style={{ minWidth: '500px' }} value={netlist} />
+ </DialogContentText>
+ </DialogContent>
+ <DialogActions>
+ {/* Button to download the netlist */}
+ <Button color="primary" onClick={createNetlistFile}>
+ Download
+ </Button>
+ <Button onClick={close} color="primary" autoFocus>
+ Close
+ </Button>
+ </DialogActions>
+ </Dialog>
+ )
+}
+
+NetlistModal.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ netlist: PropTypes.string
+}
+
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ position: 'relative'
+ },
+ title: {
+ marginLeft: theme.spacing(2),
+ flex: 1
+ },
+ header: {
+ padding: theme.spacing(5, 0, 6),
+ color: '#fff'
+ },
+ paper: {
+ padding: theme.spacing(2),
+ textAlign: 'center',
+ backgroundColor: '#404040',
+ color: '#fff'
+ },
+ avatar: {
+ width: theme.spacing(4),
+ height: theme.spacing(4),
+ backgroundColor: blue[100],
+ color: blue[600]
+ }
+}))
+
+// Screen to display information about as keyboard shortcuts, units table and simulation modes
+export function HelpScreen ({ open, close }) {
+ const classes = useStyles()
+ return (
+ <div>
+ <Dialog fullScreen open={open} onClose={close} TransitionComponent={Transition} PaperProps={{
+ style: {
+ backgroundColor: '#4d4d4d',
+ boxShadow: 'none'
+ }
+ }} >
+ <AppBar position="static" elevation={0} className={classes.appBar}>
+ <Toolbar variant="dense" style={{ backgroundColor: '#404040' }} >
+ <IconButton edge="start" color="inherit" onClick={close} aria-label="close">
+ <CloseIcon />
+ </IconButton>
+ <Typography variant="h6" className={classes.title}>
+ Help
+ </Typography>
+ <Button autoFocus color="inherit" onClick={close}>
+ close
+ </Button>
+ </Toolbar>
+ </AppBar>
+ <Container maxWidth="lg" className={classes.header}>
+ <Grid
+ container
+ spacing={3}
+ direction="row"
+ justify="center"
+ alignItems="center"
+ >
+
+ <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <fieldset style={{ padding: '20px 40px' }}>
+ <legend>
+ <Typography variant="h5" align="center" component="p" gutterBottom>
+ Keyboard Shorcuts
+ </Typography>
+ </legend>
+ <Typography variant="h6" align='left' gutterBottom>
+ UNDO
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ Ctrl + Z
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ REDO
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ Ctrl + A
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ ZOOM IN
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ Ctrl + I
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ ZOOM OUT
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ Ctrl + O
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ DEFAULT SIZE
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ Ctrl + Y
+ </Typography>
+ </fieldset>
+ </Paper>
+ </Grid>
+
+ <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <fieldset style={{ padding: '20px 40px' }}>
+ <legend>
+ <Typography variant="h5" align="center" component="p" gutterBottom>
+ Units Table
+ </Typography>
+ </legend>
+ <Typography>
+
+ <TableContainer component={Paper}>
+ <Table className={classes.table} aria-label="simple table">
+ <caption>Ngspice scale factors naming conventions</caption>
+ <TableHead>
+ <TableRow>
+ <TableCell align="center">SUFFIX</TableCell>
+ <TableCell align="center">NAME</TableCell>
+ <TableCell align="center">FACTOR</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+
+ <TableRow>
+ <TableCell align="center">T</TableCell>
+ <TableCell align="center">Tera</TableCell>
+ <TableCell align="center">10<sup>12</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">G</TableCell>
+ <TableCell align="center">Giga</TableCell>
+ <TableCell align="center">10<sup>9</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">Meg</TableCell>
+ <TableCell align="center">Mega</TableCell>
+ <TableCell align="center">10<sup>6</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">K</TableCell>
+ <TableCell align="center">Kilo</TableCell>
+ <TableCell align="center">10<sup>3</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">mil</TableCell>
+ <TableCell align="center">Mil</TableCell>
+ <TableCell align="center">25.4 X 10<sup>-6</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">m</TableCell>
+ <TableCell align="center">milli</TableCell>
+ <TableCell align="center">10<sup>-3</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">u</TableCell>
+ <TableCell align="center">micro</TableCell>
+ <TableCell align="center">10<sup>-6</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">n</TableCell>
+ <TableCell align="center">nano</TableCell>
+ <TableCell align="center">10<sup>-9</sup></TableCell>
+ </TableRow>
+ <TableRow>
+ <TableCell align="center">p</TableCell>
+ <TableCell align="center">pico</TableCell>
+ <TableCell align="center">10<sup>-12</sup></TableCell>
+ </TableRow>
+
+ <TableRow>
+ <TableCell align="center">f</TableCell>
+ <TableCell align="center">femto</TableCell>
+ <TableCell align="center">10<sup>-15</sup></TableCell>
+ </TableRow>
+
+ </TableBody>
+ </Table>
+ </TableContainer>
+ </Typography>
+ </fieldset>
+ </Paper>
+ </Grid>
+ <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <fieldset style={{ padding: '20px 40px' }}>
+ <legend>
+ <Typography variant="h5" align="center" component="p" gutterBottom>
+ Simulation Modes
+ </Typography>
+ </legend>
+ <Typography variant="h6" align='left' gutterBottom>
+ DC Solver
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ A DC simulation attempts to find a stable DC solution of your circuit.
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ DC Sweep
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ A DC Sweep will plot the DC solution of your circuit across different values of a parameter of a circuit element.
+ You can sweep any numerical parameter of any circuit element in your circuit.
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ Transient Analysis
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ A Transient analysis does a Time-Domain Simulation of your circuit over a certain period of time.
+ </Typography>
+ <Divider />
+ <Typography variant="h6" align='left' gutterBottom>
+ AC Analysis
+ </Typography>
+ <Typography variant="subtitle1" align='left' style={{ color: '#b3b3b3' }} gutterBottom>
+ AC Analysis does a small signal analysis of your circuit. The input can be any voltage source or current source.
+ </Typography>
+ </fieldset>
+ </Paper>
+ </Grid>
+ </Grid>
+ </Container>
+ </Dialog>
+ </div >
+ )
+}
+
+HelpScreen.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func
+}
+
+// Image Export Dialog box
+const ImgTypes = ['PNG', 'JPG', 'SVG']
+export function ImageExportDialog (props) {
+ const classes = useStyles()
+ const { onClose, open } = props
+
+ const handleClose = () => {
+ onClose('')
+ }
+
+ const handleListItemClick = (value) => {
+ onClose(value)
+ }
+
+ return (
+ <Dialog onClose={handleClose} aria-labelledby="image-export-dialog-title" open={open}>
+ <DialogTitle id="image-export-dialog-title">Select Image type</DialogTitle>
+ <List>
+ {ImgTypes.map((img) => (
+ <ListItem button onClick={() => handleListItemClick(img)} key={img}>
+ <ListItemAvatar>
+ <Avatar className={classes.avatar}>
+ {img.charAt(0).toUpperCase()}
+ </Avatar>
+ </ListItemAvatar>
+ <ListItemText primary={img} />
+ </ListItem>
+ ))}
+ </List>
+ <DialogActions>
+ <Button onClick={handleClose} color="primary" autoFocus>
+ Close
+ </Button>
+ </DialogActions>
+ </Dialog>
+ )
+}
+
+ImageExportDialog.propTypes = {
+ onClose: PropTypes.func.isRequired,
+ open: PropTypes.bool.isRequired
+}
+
+// Dialog box to open saved Schematics
+export function OpenSchDialog (props) {
+ const { open, close, openLocal } = props
+ const [isLocal, setisLocal] = React.useState(true)
+ const [isGallery, setisGallery] = React.useState(false)
+ const schSave = useSelector(state => state.saveSchematicReducer)
+ const auth = useSelector(state => state.authReducer)
+ const schematics = useSelector(state => state.dashboardReducer.schematics)
+
+ function getDate (jsonDate) {
+ var json = jsonDate
+ var date = new Date(json)
+ const dateTimeFormat = new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' })
+ const [{ value: month }, , { value: day }, , { value: hour }, , { value: minute }, , { value: second }] = dateTimeFormat.formatToParts(date)
+ return `${day} ${month} ${hour}:${minute}:${second}`
+ }
+
+ const dispatch = useDispatch()
+
+ return (
+ <Dialog
+ open={open}
+ onClose={close}
+ maxWidth='md'
+ TransitionComponent={Transition}
+ keepMounted
+ aria-labelledby="open-dialog-title"
+ aria-describedby="open-dialog-description"
+ >
+ <DialogTitle id="open-dialog-title" onClose={close}>
+ <Typography variant="h6">{'Open Schematic'}</Typography>
+ </DialogTitle>
+ <DialogContent dividers>
+ <DialogContentText id="open-dialog-description" >
+ {isLocal
+ ? <center> <Button variant="outlined" fullWidth={true} size="large" onClick={() => { openLocal(); close() }} color="primary">
+ Upload File
+ </Button></center>
+ : isGallery
+ ? <Grid item xs={12} sm={12}>
+ {/* Listing Gallery Schematics */}
+ <TableContainer component={Paper} style={{ maxHeight: '45vh' }}>
+ <Table stickyHeader size="small" aria-label="simple table">
+ <TableHead>
+ <TableRow>
+ <TableCell align="center">Name</TableCell>
+ <TableCell align="center">Description</TableCell>
+ <TableCell align="center">Launch</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ <>
+ {GallerySchSample.map(
+ (sch) => {
+ return (
+ <TableRow key={sch.save_id}>
+ <TableCell align="center">{sch.name}</TableCell>
+ <TableCell align="center">
+ <Tooltip title={sch.description !== null ? sch.description : 'No description'} >
+ <span>
+ {sch.description !== null ? sch.description.slice(0, 30) + (sch.description.length < 30 ? '' : '...') : '-'}
+ </span>
+ </Tooltip>
+ </TableCell>
+ <TableCell align="center">
+ <Button
+ size="small"
+ color="primary"
+ onClick={() => { dispatch(loadGallery(sch.save_id.substr(7, sch.save_id.length))) }}
+ variant={schSave.details.save_id === undefined ? 'outlined' : schSave.details.save_id !== sch.save_id ? 'outlined' : 'contained'}
+ >
+ Launch
+ </Button>
+ </TableCell>
+ </TableRow>
+ )
+ }
+ )}
+ </>
+ </TableBody>
+ </Table>
+ </TableContainer>
+ </Grid>
+ : <Grid item xs={12} sm={12}>
+ {/* Listing Saved Schematics */}
+ {schematics.length === 0
+ ? <Typography variant="subtitle1" gutterBottom>
+ Hey {auth.user.username} , You dont have any saved schematics...
+ </Typography>
+ : <TableContainer component={Paper} style={{ maxHeight: '45vh' }}>
+ <Table stickyHeader size="small" aria-label="simple table">
+ <TableHead>
+ <TableRow>
+ <TableCell align="center">Name</TableCell>
+ <TableCell align="center">Description</TableCell>
+ <TableCell align="center">Created</TableCell>
+ <TableCell align="center">Updated</TableCell>
+ <TableCell align="center">Launch</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ <>
+ {schematics.map(
+ (sch) => {
+ return (
+ <TableRow key={sch.save_id}>
+ <TableCell align="center">{sch.name}</TableCell>
+ <TableCell align="center">
+ <Tooltip title={sch.description !== null ? sch.description : 'No description'} >
+ <span>
+ {sch.description !== null ? sch.description.slice(0, 30) + (sch.description.length < 30 ? '' : '...') : '-'}
+ </span>
+ </Tooltip>
+ </TableCell>
+ <TableCell align="center">{getDate(sch.create_time)}</TableCell>
+ <TableCell align="center">{getDate(sch.save_time)}</TableCell>
+ <TableCell align="center">
+ <Button
+ size="small"
+ color="primary"
+ onClick={() => { dispatch(fetchSchematic(sch.save_id)) }}
+ variant={schSave.details.save_id === undefined ? 'outlined' : schSave.details.save_id !== sch.save_id ? 'outlined' : 'contained'}
+ >
+ Launch
+ </Button>
+ </TableCell>
+ </TableRow>
+ )
+ }
+ )}
+ </>
+ </TableBody>
+ </Table>
+ </TableContainer>
+ }
+ </Grid>
+ }
+ </DialogContentText>
+ </DialogContent>
+ <DialogActions>
+ <Button variant={isLocal ? 'outlined' : 'text' } onClick={() => { setisLocal(true); setisGallery(false) }} color="secondary">
+ Local
+ </Button>
+ <Button variant={isGallery ? 'outlined' : 'text' } onClick={() => { setisLocal(false); setisGallery(true) }} color="secondary">
+ Gallery
+ </Button>
+ {auth.isAuthenticated !== true
+ ? <></>
+ : <Button variant={!isGallery & !isLocal ? 'outlined' : 'text' } onClick={() => { dispatch(fetchSchematics()); setisLocal(false); setisGallery(false) }} color="secondary" >
+ on Cloud
+ </Button>
+ }
+ <Button onClick={close} color="primary" autoFocus>
+ Close
+ </Button>
+ </DialogActions>
+ </Dialog>
+ )
+}
+
+OpenSchDialog.propTypes = {
+ close: PropTypes.func.isRequired,
+ open: PropTypes.bool.isRequired,
+ openLocal: PropTypes.func.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/Shared/Graph.js b/blocks/eda-frontend/src/components/Shared/Graph.js
new file mode 100644
index 00000000..be2b7bdd
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Shared/Graph.js
@@ -0,0 +1,160 @@
+/* eslint-disable react/prop-types */
+import React, { Component } from 'react'
+import Chart from 'chart.js'
+
+import 'chartjs-plugin-colorschemes'
+let lineGraph
+
+// Chart Style Options
+Chart.defaults.global.defaultFontColor = '#e6e6e6'
+
+class Graph extends Component {
+ chartRef = React.createRef();
+
+ componentDidMount () {
+ this.buildChart()
+ }
+
+ componentDidUpdate () {
+ this.buildChart()
+ }
+
+ buildChart = () => {
+ const myChartRef = this.chartRef.current.getContext('2d')
+ const { x, y, labels, xscale, yscale, precision } = this.props
+ // ticks are the number of points to show on x axis
+ const scales = {
+ G: { value: 1000000000, ticks: 3 },
+ M: { value: 1000000, ticks: 3 },
+ K: { value: 1000, ticks: 3 },
+ si: { value: 1, ticks: 3 },
+ m: { value: 0.001, ticks: 5 },
+ u: { value: 0.000001, ticks: 7 },
+ n: { value: 0.000000001, ticks: 9 },
+ p: { value: 0.000000000001, ticks: 11 }
+ }
+ if (typeof lineGraph !== 'undefined') lineGraph.destroy()
+
+ const dataset = () => {
+ var arr = []
+
+ for (var i = 0; i < y.length; i++) {
+ if (labels[0] === labels[i + 1]) continue
+ arr.push({
+ label: labels[i + 1],
+ data: y[i].map(e => (e / scales[yscale].value).toFixed(precision)),
+ fill: false
+ // borderColor: getRandomColor()
+ })
+ }
+ return arr
+ }
+ const selectLabel = () => {
+ if (labels[0] === 'time') {
+ if (xscale === 'si') {
+ return 'Time in S'
+ } else {
+ return `Time in ${xscale}S`
+ }
+ } else if (labels[0] === 'v-sweep') {
+ if (xscale === 'si') {
+ return 'Voltage in V'
+ } else {
+ return `Voltage in ${xscale}V`
+ }
+ } else if (labels[0] === 'frequency') {
+ if (xscale === 'si') {
+ return 'frequency in Hz'
+ } else {
+ return `frequency in ${xscale}Hz`
+ }
+ } else {
+ if (xscale === 'si') {
+ return `${labels[0]}`
+ } else {
+ return `${labels[0]} in ${xscale}`
+ }
+ }
+ }
+
+ lineGraph = new Chart(myChartRef, {
+ type: 'line',
+ data: {
+
+ // labels: x,
+ labels: x.map(e => (e / scales[xscale].value).toFixed(precision)),
+ datasets: dataset()
+ },
+
+ options: {
+ plugins: {
+
+ colorschemes: {
+
+ scheme: 'brewer.SetOne9'
+
+ }
+ },
+ responsive: true,
+ title: {
+ display: false,
+ text: ''
+ },
+ tooltips: {
+ mode: 'index',
+ intersect: false,
+ backgroundColor: '#39604d'
+ },
+ hover: {
+ mode: 'nearest',
+ intersect: true
+ },
+ scales: {
+ xAxes: [
+ {
+ display: true,
+ gridLines: {
+ color: '#67737e'
+ },
+ scaleLabel: {
+ display: true,
+ labelString: selectLabel()
+ },
+
+ ticks: {
+ maxTicksLimit: scales[xscale].ticks
+ }
+ }
+ ],
+ yAxes: [
+ {
+ display: true,
+ scaleLabel: {
+ display: false,
+ labelString: 'Volatge ( V )'
+ },
+ gridLines: {
+ color: '#67737e'
+ },
+ ticks: {
+ beginAtZero: true,
+ fontSize: 15,
+ padding: 25
+ }
+ }
+ ]
+ }
+ }
+ })
+ };
+
+ render () {
+ return (
+ <div>
+ <canvas id="myChart" ref={this.chartRef} />
+ </div>
+ )
+ }
+}
+
+export default Graph
diff --git a/blocks/eda-frontend/src/components/Shared/Layout.js b/blocks/eda-frontend/src/components/Shared/Layout.js
new file mode 100644
index 00000000..6430beed
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Shared/Layout.js
@@ -0,0 +1,73 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { AppBar, IconButton, Toolbar } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import MenuIcon from '@material-ui/icons/Menu'
+
+import LayoutSidebar from './LayoutSidebar'
+
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ borderBottom: `1px solid ${theme.palette.divider}`,
+ zIndex: theme.zIndex.drawer + 1
+ },
+ menuButton: {
+ marginRight: theme.spacing(1),
+ padding: theme.spacing(1),
+ [theme.breakpoints.up('md')]: {
+ display: 'none'
+ }
+ }
+}))
+
+// Common layout for Dashboard and Schematic Editor
+function Layout ({ header, resToolbar, sidebar }) {
+ const classes = useStyles()
+ const [mobileOpen, setMobileOpen] = React.useState(false)
+
+ const handleDrawerToggle = () => {
+ setMobileOpen(!mobileOpen)
+ }
+
+ return (
+ <>
+ {/* Header and Toolbar of layout */}
+ <AppBar
+ position="fixed"
+ color="default"
+ elevation={0}
+ className={classes.appBar}
+ >
+ {header}
+
+ <Toolbar variant="dense" color="default">
+ <IconButton
+ color="inherit"
+ aria-label="open drawer"
+ edge="start"
+ size="small"
+ onClick={handleDrawerToggle}
+ className={classes.menuButton}
+ >
+ <MenuIcon fontSize="small" />
+ </IconButton>
+
+ {resToolbar}
+ </Toolbar>
+ </AppBar>
+
+ {/* Left Sidebar for Layout */}
+ <LayoutSidebar mobileOpen={mobileOpen} mobileClose={handleDrawerToggle}>
+ {sidebar}
+ </LayoutSidebar>
+ </>
+ )
+}
+
+Layout.propTypes = {
+ header: PropTypes.element,
+ resToolbar: PropTypes.element,
+ sidebar: PropTypes.element
+}
+
+export default Layout
diff --git a/blocks/eda-frontend/src/components/Shared/LayoutMain.js b/blocks/eda-frontend/src/components/Shared/LayoutMain.js
new file mode 100644
index 00000000..59aee670
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Shared/LayoutMain.js
@@ -0,0 +1,30 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { makeStyles } from '@material-ui/core/styles'
+
+const useStyles = makeStyles((theme) => ({
+ content: {
+ flexGrow: 1,
+ padding: theme.spacing(5, 3),
+ backgroundColor: '#f4f6f8',
+ height: '100vh',
+ overflow: 'auto'
+ }
+}))
+
+// Display main content of layout
+export default function LayoutMain ({ children }) {
+ const classes = useStyles()
+
+ return (
+ <>
+ <main className={classes.content}>
+ {children}
+ </main>
+ </>
+ )
+}
+
+LayoutMain.propTypes = {
+ children: PropTypes.array.isRequired
+}
diff --git a/blocks/eda-frontend/src/components/Shared/LayoutSidebar.js b/blocks/eda-frontend/src/components/Shared/LayoutSidebar.js
new file mode 100644
index 00000000..7d238efd
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Shared/LayoutSidebar.js
@@ -0,0 +1,76 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { Drawer, Hidden, IconButton } from '@material-ui/core'
+import HighlightOffIcon from '@material-ui/icons/HighlightOff'
+import { makeStyles } from '@material-ui/core/styles'
+
+const drawerWidth = 250
+
+const useStyles = makeStyles((theme) => ({
+ drawer: {
+ [theme.breakpoints.up('md')]: {
+ width: drawerWidth,
+ flexShrink: 0
+ }
+ },
+ drawerPaper: {
+ width: drawerWidth
+ }
+}))
+
+// Common layout left side pane for Dashboard and Schematic Editor
+export default function LayoutSidebar ({ window, mobileOpen, mobileClose, children }) {
+ const classes = useStyles()
+
+ const container =
+ window !== undefined ? () => window().document.body : undefined
+
+ return (
+ <>
+ <nav className={classes.drawer} aria-label="mailbox folders">
+ <Hidden lgUp implementation="css">
+ <Drawer
+ container={container}
+ variant="temporary"
+ open={mobileOpen}
+ onClose={mobileClose}
+ classes={{
+ paper: classes.drawerPaper
+ }}
+ ModalProps={{
+ keepMounted: true // Better open performance on mobile.
+ }}
+ >
+ <IconButton
+ onClick={mobileClose}
+ color="inherit"
+ style={{ marginLeft: '190px' }}
+ >
+ <HighlightOffIcon />
+ </IconButton>
+ {children}
+ </Drawer>
+ </Hidden>
+
+ <Hidden smDown implementation="css">
+ <Drawer
+ classes={{
+ paper: classes.drawerPaper
+ }}
+ variant="permanent"
+ open
+ >
+ {children}
+ </Drawer>
+ </Hidden>
+ </nav>
+ </>
+ )
+}
+
+LayoutSidebar.propTypes = {
+ window: PropTypes.object,
+ mobileOpen: PropTypes.bool.isRequired,
+ mobileClose: PropTypes.func.isRequired,
+ children: PropTypes.element
+}
diff --git a/blocks/eda-frontend/src/components/Shared/Navbar.js b/blocks/eda-frontend/src/components/Shared/Navbar.js
new file mode 100644
index 00000000..96bbb60a
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Shared/Navbar.js
@@ -0,0 +1,252 @@
+import React from 'react'
+
+import {
+ AppBar, Button, Toolbar, Typography, Link, IconButton, Avatar, Menu, ListItemText,
+ Fade,
+ MenuItem
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import { deepPurple } from '@material-ui/core/colors'
+import { Link as RouterLink, useHistory } from 'react-router-dom'
+import logo from '../../static/logo.png'
+import store from '../../redux/store'
+import { logout } from '../../redux/actions/index'
+
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ borderBottom: `1px solid ${theme.palette.divider}`
+ },
+ toolbar: {
+ flexWrap: 'wrap'
+ },
+ toolbarTitle: {
+ flexGrow: 1
+ },
+ link: {
+ margin: theme.spacing(1, 1.5)
+ },
+ button: {
+ marginRight: theme.spacing(0.7)
+ },
+ small: {
+ width: theme.spacing(3.7),
+ height: theme.spacing(3.7)
+ },
+ purple: {
+ width: theme.spacing(3.75),
+ height: theme.spacing(3.75),
+ color: theme.palette.getContrastText(deepPurple[500]),
+ backgroundColor: deepPurple[500],
+ fontSize: '17px'
+ }
+}))
+
+// Common navbar for Dashboard, Home, Simulator, Gallery, etc.
+export function Header () {
+ const history = useHistory()
+ const classes = useStyles()
+ const [anchorEl, setAnchorEl] = React.useState(null)
+ const auth = store.getState().authReducer
+
+ const handleClick = (event) => {
+ setAnchorEl(event.currentTarget)
+ }
+
+ const handleClose = () => {
+ setAnchorEl(null)
+ }
+
+ return (
+ <>
+ {/* Display logo */}
+ <IconButton edge="start" className={classes.button} color="primary">
+ <Avatar alt="Xcos logo" src={logo} className={classes.small} />
+ </IconButton>
+ <Typography
+ variant="h6"
+ color="inherit"
+ noWrap
+ className={classes.toolbarTitle}
+ >
+ <Link color="inherit" to="/" component={RouterLink}>
+ Xcos
+ </Link>
+ </Typography>
+
+ {/* Display relative link to other pages */}
+ <nav>
+ {
+ (auth.isAuthenticated
+ ? (<>
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/"
+ component={RouterLink}
+ className={classes.link}
+ >
+ Home
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/editor"
+ component={RouterLink}
+ className={classes.link}
+ >
+ Editor
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/gallery"
+ component={RouterLink}
+ className={classes.link}
+ >
+ Gallery
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/simulator/ngspice"
+ component={RouterLink}
+ className={classes.link}
+ >
+ Simulator
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/dashboard"
+ component={RouterLink}
+ className={classes.link}
+ >
+ Dashboard
+ </Link>
+ </>)
+ : (<>
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/editor"
+ component={RouterLink}
+ style={{ marginRight: '20px' }}
+ >
+ Editor
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/gallery"
+ component={RouterLink}
+ style={{ marginRight: '20px' }}
+ >
+ Gallery
+ </Link>
+
+ <Link
+ variant="button"
+ color="textPrimary"
+ to="/simulator/ngspice"
+ component={RouterLink}
+ style={{ marginRight: '20px' }}
+ >
+ Simulator
+ </Link>
+ </>
+ )
+ )
+ }
+ </nav>
+
+ {/* Display login option or user menu as per authenticated status */}
+ {
+ (!auth.isAuthenticated ? (<Button
+ size="small"
+ component={RouterLink}
+ to="/login"
+ color="primary"
+ variant="outlined"
+ >
+ Login
+ </Button>)
+ : (<>
+
+ <IconButton
+ edge="start"
+ style={{ marginLeft: 'auto' }}
+ color="primary"
+ aria-controls="simple-menu"
+ aria-haspopup="true"
+ onClick={handleClick}
+ >
+ <Avatar className={classes.purple}>
+ {auth.user.username.charAt(0).toUpperCase()}
+ </Avatar>
+ </IconButton>
+ <Menu
+ id="simple-menu"
+ anchorEl={anchorEl}
+ keepMounted
+ open={Boolean(anchorEl)}
+ onClose={handleClose}
+ TransitionComponent={Fade}
+ style={{ marginTop: '25px' }}
+ >
+ <MenuItem
+ component={RouterLink}
+ to="/dashboard"
+ onClick={handleClose}
+ >
+ <ListItemText primary={auth.user.username} secondary={auth.user.email} />
+ </MenuItem>
+ <MenuItem
+ component={RouterLink}
+ to="/dashboard/profile"
+ onClick={handleClose}
+ >
+ My Profile
+ </MenuItem>
+ <MenuItem
+ component={RouterLink}
+ to="/dashboard/schematics"
+ onClick={handleClose}
+ >
+ My Schematics
+ </MenuItem>
+ <MenuItem onClick={() => {
+ store.dispatch(logout(history))
+ }}>
+ Logout
+ </MenuItem>
+ </Menu>
+ </>
+ )
+ )
+ }
+ </>
+ )
+}
+
+export default function Navbar () {
+ const classes = useStyles()
+
+ return (
+ <AppBar
+ position="static"
+ color="default"
+ elevation={0}
+ className={classes.appBar}
+ >
+ <Toolbar variant="dense" color="default" className={classes.toolbar}>
+
+ <Header />
+ </Toolbar>
+ </AppBar>
+ )
+}
diff --git a/blocks/eda-frontend/src/components/Simulator/Editor.js b/blocks/eda-frontend/src/components/Simulator/Editor.js
new file mode 100644
index 00000000..de35efac
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Simulator/Editor.js
@@ -0,0 +1,36 @@
+import React from 'react'
+import AceEditor from 'react-ace'
+import PropTypes from 'prop-types'
+import 'brace/theme/monokai'
+import 'brace/theme/github'
+
+export default function Editor (props) {
+ // code editor for online spice simulator
+ return (
+
+ <AceEditor
+ style={{ width: '100%', marginTop: '35px' }}
+ onChange={props.onCodeChange}
+ value={props.code}
+ theme={props.dark.checkedA ? 'github' : 'monokai'}
+ editorProps={{
+ $blockScrolling: true
+ }}
+
+ setOptions={{
+ enableBasicAutocompletion: true,
+ enableLiveAutocompletion: true,
+ enableSnippets: true,
+ fontSize: 18
+
+ }}
+ />
+
+ )
+}
+
+Editor.propTypes = {
+ code: PropTypes.string,
+ onCodeChange: PropTypes.func,
+ dark: PropTypes.bool
+}
diff --git a/blocks/eda-frontend/src/components/Simulator/NetlistUpload.js b/blocks/eda-frontend/src/components/Simulator/NetlistUpload.js
new file mode 100644
index 00000000..5d99eb73
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Simulator/NetlistUpload.js
@@ -0,0 +1,156 @@
+/* eslint-disable react/prop-types */
+import React, { Component } from 'react'
+import { Grid, Button, Paper } from '@material-ui/core'
+import { withStyles } from '@material-ui/core/styles'
+
+import api from '../../utils/Api'
+
+const styles = (theme) => ({
+ paper: {
+ padding: theme.spacing(2),
+ textAlign: 'center',
+ backgroundColor: '#404040',
+ color: '#fff'
+ },
+ finlabel: {
+ cursor: 'pointer',
+ color: '#9feaf9',
+ padding: theme.spacing(1),
+ border: '2px solid #9feaf9'
+ },
+ finput: {
+ opacity: 0,
+ position: 'absolute',
+ zIndex: -1
+ }
+})
+
+class NetlistUpload extends Component {
+ constructor (props) {
+ super(props)
+ this.state = {
+ file: null,
+ filename: 'Choose Netlist',
+ x_1: [],
+ y1_1: [],
+ y2_1: []
+ }
+ this.onFormSubmit = this.onFormSubmit.bind(this)
+ this.onChange = this.onChange.bind(this)
+ this.netlistUpload = this.netlistUpload.bind(this)
+ }
+
+ onChange (e) {
+ this.setState({
+ file: e.target.files[0],
+ filename: e.target.files[0].name
+ })
+ }
+
+ onFormSubmit (e) {
+ // Stop default form submit
+ e.preventDefault()
+ this.netlistUpload(this.state.file)
+ .then((response) => {
+ const res = response.data
+ const getUrl = 'simulation/status/'.concat(res.details.task_id)
+ this.simulationResult(getUrl)
+ })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ // Upload the nelist
+ netlistUpload (file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ const config = {
+ headers: {
+ 'content-type': 'multipart/form-data'
+ }
+ }
+ return api.post('simulation/upload', formData, config)
+ }
+
+ // Get the simulation result with task_Id
+ simulationResult (url) {
+ api
+ .get(url)
+ .then((res) => {
+ if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') {
+ setTimeout(this.simulationResult(url), 1000)
+ } else {
+ this.setState({
+ x_1: res.data.details.data[0].x,
+ y1_1: res.data.details.data[0].y[0],
+ y2_1: res.data.details.data[0].y[1]
+ })
+ }
+ })
+ .then((res) => { })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ fileData = () => {
+ if (this.state.file) {
+ return (
+ <div>
+ <h3>File Details:</h3>
+ <p>File Name: {this.state.file.name}</p>
+ <p>File Type: Ngspice Netlist</p>
+ </div>
+ )
+ } else {
+ return (
+ <div>
+ <h4>Choose Netlist before pressing UPLOAD button</h4>
+ </div>
+ )
+ }
+ };
+
+ render () {
+ const { classes } = this.props
+ return (
+ <>
+ <Grid item xs={12} sm={5}>
+ <Paper className={classes.paper}>
+ <h2>SUBMIT NETLIST</h2>
+ <form onSubmit={this.onFormSubmit} style={{ marginTop: '45px' }}>
+ <label htmlFor="netlist" className={classes.finlabel}>
+ {this.state.filename}
+ </label>
+ <input
+ type="file"
+ id="netlist"
+ onChange={this.onChange}
+ className={classes.finput}
+ />
+ <br />
+ <Button
+ type="submit"
+ variant="contained"
+ color="primary"
+ style={{ marginTop: '30px' }}
+ >
+ Upload
+ </Button>
+ </form>
+ <br />
+ {this.fileData()}
+ </Paper>
+ </Grid>
+ <Grid item xs={12} sm={7}>
+ <Paper className={classes.paper}>
+ <h2>GRAPH OUTPUT</h2>
+ </Paper>
+ </Grid>
+ </>
+ )
+ }
+}
+
+export default withStyles(styles, { withTheme: true })(NetlistUpload)
diff --git a/blocks/eda-frontend/src/components/Simulator/SimulationScreen.js b/blocks/eda-frontend/src/components/Simulator/SimulationScreen.js
new file mode 100644
index 00000000..b42abc03
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Simulator/SimulationScreen.js
@@ -0,0 +1,360 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import {
+ Slide,
+ Button,
+ Dialog,
+ AppBar,
+ Toolbar,
+ IconButton,
+ Typography,
+ Grid,
+ TextField,
+ Paper,
+ Container,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TableRow
+
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import CloseIcon from '@material-ui/icons/Close'
+import { useSelector } from 'react-redux'
+
+import Graph from '../Shared/Graph'
+
+const Transition = React.forwardRef(function Transition (props, ref) {
+ return <Slide direction="up" ref={ref} {...props} />
+})
+
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ position: 'relative'
+ },
+ title: {
+ marginLeft: theme.spacing(2),
+ flex: 1
+ },
+ header: {
+ padding: theme.spacing(5, 0, 6),
+ color: '#fff'
+ },
+ paper: {
+ padding: theme.spacing(2),
+ textAlign: 'center',
+ backgroundColor: '#404040',
+ color: '#fff'
+ }
+}))
+// {details:{},title:''} simResults
+export default function SimulationScreen ({ open, close, isResult }) {
+ const classes = useStyles()
+ const result = useSelector((state) => state.simulationReducer)
+ const [xscale, setXScale] = React.useState('si')
+ const [yscale, setYScale] = React.useState('si')
+ const [precision, setPrecision] = React.useState(5)
+ const precisionArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ const scales = {
+ G: 1000000000,
+ M: 1000000,
+ K: 1000,
+ si: 1,
+ m: 0.001,
+ u: 0.000001,
+ n: 0.000000001,
+ p: 0.000000000001
+ }
+ const handleXScale = (evt) => {
+ setXScale(evt.target.value)
+ }
+
+ const handleYScale = (evt) => {
+ setYScale(evt.target.value)
+ }
+ const handlePrecision = (evt) => {
+ setPrecision(evt.target.value)
+ }
+ return (
+ <div>
+ <Dialog fullScreen open={open} onClose={close} TransitionComponent={Transition} PaperProps={{
+ style: {
+ backgroundColor: '#4d4d4d',
+ boxShadow: 'none'
+ }
+ }}>
+ <AppBar position="static" elevation={0} className={classes.appBar}>
+ <Toolbar variant="dense" style={{ backgroundColor: '#404040' }} >
+ <IconButton edge="start" color="inherit" onClick={close} aria-label="close">
+ <CloseIcon />
+ </IconButton>
+ <Typography variant="h6" className={classes.title}>
+ Simulation Result
+ </Typography>
+ <Button autoFocus color="inherit" onClick={close}>
+ close
+ </Button>
+ </Toolbar>
+ </AppBar>
+ <Container maxWidth="lg" className={classes.header}>
+ <Grid
+ container
+ spacing={3}
+ direction="row"
+ justify="center"
+ alignItems="center"
+ >
+ {isResult === true ? <>
+ {
+
+ (result.graph !== {} && result.isGraph === 'true')
+ ? <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h4" align="center" gutterBottom>
+ GRAPH OUTPUT
+ </Typography>
+ <div style={{ padding: '15px 10px 10px 10px', margin: '20px 0px', backgroundColor: 'white', borderRadius: '5px' }}>
+ <TextField
+ style={{ width: '20%' }}
+ id="xscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select X Axis Scale"
+ value={xscale}
+ onChange={handleXScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="yscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Y Axis Scale"
+ value={yscale}
+ onChange={handleYScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="precision"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Precision"
+ value={precision}
+ onChange={handlePrecision}
+ SelectProps={{
+ native: true
+ }}
+ >
+ {
+ precisionArr.map((d, i) => {
+ return (
+ <option key={i} value={d}>
+ {d}
+ </option>
+ )
+ })
+ }
+
+ </TextField>
+ </div>
+ <Graph
+ labels={result.graph.labels}
+ x={result.graph.x_points}
+ y={result.graph.y_points}
+ xscale={xscale}
+ yscale={yscale}
+ precision={precision}
+ />
+ </Paper>
+ </Grid>
+ : (result.isGraph === 'true') ? <span>SOMETHING WENT WRONG PLEASE CHECK THE SIMULATION PARAMETERS.</span> : <span></span>
+ }
+
+ {
+ (result.isGraph === 'false')
+ ? <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h4" align="center" gutterBottom>
+ OUTPUT
+ </Typography>
+ <div style={{ padding: '15px 10px 10px 10px', backgroundColor: 'white', margin: '20px 0px', borderRadius: '5px' }}>
+ <TextField
+ style={{ width: '20%' }}
+ id="xscale"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Scale"
+ value={xscale}
+ onChange={handleXScale}
+ SelectProps={{
+ native: true
+ }}
+ >
+ <option value='G'>
+ Giga (G)
+ </option>
+ <option value='M'>
+ Mega (MEG)
+ </option>
+ <option value='K'>
+ Kilo (K)
+ </option>
+ <option value='si'>
+ SI UNIT
+ </option>
+
+ <option value='m'>
+ Milli (m)
+ </option>
+ <option value='u'>
+ Micro (u)
+ </option>
+ <option value='n'>
+ Nano (n)
+ </option>
+ <option value='p'>
+ Pico (p)
+ </option>
+
+ </TextField>
+
+ <TextField
+ style={{ width: '20%', marginLeft: '10px' }}
+ id="precision"
+ size='small'
+ variant="outlined"
+ select
+ label="Select Precision"
+ value={precision}
+ onChange={handlePrecision}
+ SelectProps={{
+ native: true
+ }}
+ >
+ {
+ precisionArr.map((d, i) => {
+ return (
+ <option key={i} value={d}>
+ {d}
+ </option>
+ )
+ })
+ }
+
+ </TextField>
+ </div>
+
+ <TableContainer component={Paper}>
+ <Table className={classes.table} aria-label="simple table">
+ <TableHead>
+ <TableRow>
+ <TableCell align="center">Node/Branch</TableCell>
+ <TableCell align="center">Value</TableCell>
+ <TableCell align="center">Unit</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ {result.text.map((line, index) => (
+ <TableRow key={index}>
+ <TableCell align="center">{line.split('=')[0]}</TableCell>
+ <TableCell align="center">{(parseFloat(line.split(' ')[2]) / scales[xscale]).toFixed(precision)}</TableCell>
+ <TableCell align="center">{xscale === 'si' ? '' : xscale}{line.split(' ')[3]}</TableCell>
+ </TableRow>
+ ))
+ }
+
+ </TableBody>
+ </Table>
+ </TableContainer>
+
+ </Paper>
+ </Grid>
+ : <span></span>
+ }</>
+ : <Grid item xs={12} sm={12}>
+ <Paper className={classes.paper}>
+ <Typography variant="h6" align="center" gutterBottom>
+ SOMETHING WENT WRONG PLEASE CHECK THE NETLIST.
+ </Typography>
+ </Paper>
+ </Grid>
+ }
+ </Grid>
+ </Container>
+ </Dialog>
+ </div>
+ )
+}
+
+SimulationScreen.propTypes = {
+ open: PropTypes.bool,
+ close: PropTypes.func,
+ isResult: PropTypes.bool
+ // simResults: PropTypes.object
+}
diff --git a/blocks/eda-frontend/src/components/Simulator/textToFile.js b/blocks/eda-frontend/src/components/Simulator/textToFile.js
new file mode 100644
index 00000000..ad992b4d
--- /dev/null
+++ b/blocks/eda-frontend/src/components/Simulator/textToFile.js
@@ -0,0 +1,10 @@
+
+export default function textToFile (data) {
+ // create a file from a blob
+
+ var myblob = new Blob([data], {
+ type: 'text/plain'
+ })
+ var file = new File([myblob], 'netlist.cir', { type: 'text/plain', lastModified: Date.now() })
+ return file
+}
diff --git a/blocks/eda-frontend/src/index.css b/blocks/eda-frontend/src/index.css
new file mode 100644
index 00000000..7a9cb4cb
--- /dev/null
+++ b/blocks/eda-frontend/src/index.css
@@ -0,0 +1,9 @@
+body {
+ margin: 0;
+ padding: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
diff --git a/blocks/eda-frontend/src/index.js b/blocks/eda-frontend/src/index.js
new file mode 100644
index 00000000..fa81cbe9
--- /dev/null
+++ b/blocks/eda-frontend/src/index.js
@@ -0,0 +1,26 @@
+// This is the JavaScript entry point of react application.
+import React from 'react'
+import ReactDOM from 'react-dom'
+import * as serviceWorker from './serviceWorker'
+import CssBaseline from '@material-ui/core/CssBaseline'
+import { ThemeProvider } from '@material-ui/core/styles'
+import theme from './theme'
+import './index.css'
+import App from './App'
+import { Provider } from 'react-redux'
+import store from './redux/store'
+ReactDOM.render(
+ <ThemeProvider theme={theme}>
+ {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}
+ <CssBaseline />
+ <Provider store={store}>
+ <App />
+ </Provider>
+ </ThemeProvider>,
+ document.getElementById('root')
+)
+
+// If you want your app to work offline and load faster, you can change
+// unregister() to register() below. Note this comes with some pitfalls.
+// Learn more about service workers: https://bit.ly/CRA-PWA
+serviceWorker.unregister()
diff --git a/blocks/eda-frontend/src/pages/Dashboard.js b/blocks/eda-frontend/src/pages/Dashboard.js
new file mode 100644
index 00000000..9db443d6
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/Dashboard.js
@@ -0,0 +1,54 @@
+// Main Layout for user dashboard.
+import React, { useEffect } from 'react'
+import { Switch, Route } from 'react-router-dom'
+import { CssBaseline } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+
+import { Header } from '../components/Shared/Navbar'
+import Layout from '../components/Shared/Layout'
+import LayoutMain from '../components/Shared/LayoutMain'
+import DashboardSidebar from '../components/Dashboard/DashboardSidebar'
+import DashboardHome from '../components/Dashboard/DashboardHome'
+import SchematicsList from '../components/Dashboard/SchematicsList'
+
+const useStyles = makeStyles((theme) => ({
+ root: {
+ display: 'flex',
+ minHeight: '100vh'
+ },
+ toolbar: {
+ minHeight: '40px'
+ }
+}))
+
+export default function Dashboard () {
+ const classes = useStyles()
+
+ useEffect(() => {
+ document.title = 'Dashboard - Xcos'
+ })
+
+ return (
+ <div className={classes.root}>
+ <CssBaseline />
+
+ {/* Schematic editor header and left side pane */}
+ <Layout resToolbar={<Header />} sidebar={<DashboardSidebar />} />
+
+ <LayoutMain>
+ <div className={classes.toolbar} />
+
+ {/* Subroutes under dashboard section */}
+ <Switch>
+ <Route exact path="/dashboard" component={DashboardHome} />
+ <Route exact path="/dashboard/profile" />
+ <Route
+ exact
+ path="/dashboard/schematics"
+ component={SchematicsList}
+ />
+ </Switch>
+ </LayoutMain>
+ </div>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/Gallery.js b/blocks/eda-frontend/src/pages/Gallery.js
new file mode 100644
index 00000000..c9efbe6c
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/Gallery.js
@@ -0,0 +1,147 @@
+// Main layout for gallery page.
+import React, { useEffect } from 'react'
+import PropTypes from 'prop-types'
+import {
+ Card,
+ Grid,
+ Button,
+ Typography,
+ CardActions,
+ CardContent,
+ Container,
+ CssBaseline,
+ CardActionArea,
+ CardMedia
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import { Link as RouterLink } from 'react-router-dom'
+import GallerySchSample from '../utils/GallerySchSample'
+
+const useStyles = makeStyles((theme) => ({
+ mainHead: {
+ width: '100%',
+ backgroundColor: '#404040',
+ color: '#fff'
+ },
+ title: {
+ fontSize: 18,
+ color: '#80ff80'
+ },
+ header: {
+ padding: theme.spacing(5, 0, 6, 0)
+ },
+ root: {
+ display: 'flex',
+ minHeight: '100vh',
+ backgroundColor: '#f4f6f8'
+ },
+ media: {
+ marginTop: theme.spacing(3),
+ height: 170
+ }
+}))
+
+var images = require.context('../static/gallery', true)
+
+// Card displaying overview of gallery sample schematics.
+function SchematicCard ({ sch }) {
+ const classes = useStyles()
+
+ useEffect(() => {
+ document.title = 'Gallery - Xcos'
+ })
+
+ const imageName = images('./' + sch.media)
+
+ return (
+ <>
+ <Card>
+ <CardActionArea>
+ <CardMedia
+ className={classes.media}
+ image={imageName}
+ title={sch.name}
+ />
+ <CardContent>
+ <Typography gutterBottom variant="h5" component="h2">
+ {sch.name}
+ </Typography>
+ <Typography variant="body2" component="p">
+ {sch.description}
+ </Typography>
+ </CardContent>
+ </CardActionArea>
+
+ <CardActions>
+ <Button
+ target="_blank"
+ component={RouterLink}
+ to={'/editor?id=' + sch.save_id}
+ size="small"
+ color="primary"
+ >
+ Launch in Editor
+ </Button>
+ </CardActions>
+ </Card>
+ </>
+ )
+}
+SchematicCard.propTypes = {
+ sch: PropTypes.object
+}
+
+// Card displaying Xcos gallery page header.
+function MainCard () {
+ const classes = useStyles()
+
+ return (
+ <Card className={classes.mainHead}>
+ <CardContent>
+ <Typography variant="h2" align="center" gutterBottom>
+ Xcos Gallery
+ </Typography>
+ <Typography className={classes.title} align="center" gutterBottom>
+ Sample schematics are listed below...
+ </Typography>
+ </CardContent>
+ </Card>
+ )
+}
+
+export default function Gallery () {
+ const classes = useStyles()
+
+ return (
+ <div className={classes.root}>
+ <CssBaseline />
+ <Container maxWidth="lg" className={classes.header}>
+ <Grid
+ container
+ direction="row"
+ justify="flex-start"
+ alignItems="flex-start"
+ alignContent="center"
+ spacing={3}
+ >
+ {/* Xcos Gallery Header */}
+ <Grid item xs={12}>
+ <MainCard />
+ </Grid>
+
+ {/* Listing Gallery Schematics */}
+ {GallerySchSample.map(
+ (sch) => {
+ return (
+ <Grid item xs={12} sm={6} lg={4} key={sch.save_id}>
+ <SchematicCard sch={sch} />
+ </Grid>
+ )
+ }
+ )}
+
+ </Grid>
+ </Container>
+ </div>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/Home.js b/blocks/eda-frontend/src/pages/Home.js
new file mode 100644
index 00000000..bf98dccb
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/Home.js
@@ -0,0 +1,59 @@
+// Main layout for home page.
+import React, { useEffect } from 'react'
+
+import Button from '@material-ui/core/Button'
+import Typography from '@material-ui/core/Typography'
+import { makeStyles } from '@material-ui/core/styles'
+import Container from '@material-ui/core/Container'
+import { Link as RouterLink } from 'react-router-dom'
+import logo from '../static/logo.png'
+
+const useStyles = makeStyles((theme) => ({
+ header: {
+ padding: theme.spacing(23, 0, 6)
+ }
+}))
+
+export default function Home () {
+ const classes = useStyles()
+
+ useEffect(() => {
+ document.title = 'Xcos'
+ })
+
+ return (
+ <Container maxWidth="sm" component="main" className={classes.header}>
+ <center>
+ <img src={logo} width='120' height='120' alt='Logo' />
+ </center>
+ <Typography
+ component="h1"
+ variant="h2"
+ align="center"
+ color="textPrimary"
+ gutterBottom
+ >
+ Xcos on Cloud
+ </Typography>
+ <Typography
+ variant="h5"
+ align="center"
+ color="textSecondary"
+ component="p"
+ >
+ Online Circuit Simulator
+ <br></br>
+ <br></br>
+ <Button
+ component={RouterLink}
+ to="/editor"
+ variant="contained"
+ size="large"
+ color="primary"
+ >
+ Schematic Editor
+ </Button>
+ </Typography>
+ </Container>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/Login.js b/blocks/eda-frontend/src/pages/Login.js
new file mode 100644
index 00000000..c8f9ba54
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/Login.js
@@ -0,0 +1,193 @@
+// User Login / Sign In page.
+/* eslint-disable react/prop-types */
+import React, { useState, useEffect } from 'react'
+
+import {
+ Container,
+ Grid,
+ Button,
+ Typography,
+ Link,
+ Checkbox,
+ FormControlLabel,
+ TextField,
+ Card,
+ Avatar,
+ InputAdornment,
+ IconButton
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import LockOutlinedIcon from '@material-ui/icons/LockOutlined'
+import Visibility from '@material-ui/icons/Visibility'
+import VisibilityOff from '@material-ui/icons/VisibilityOff'
+import { Link as RouterLink } from 'react-router-dom'
+import { useSelector, useDispatch } from 'react-redux'
+import { login, authDefault, googleLogin } from '../redux/actions/index'
+import google from '../static/google.png'
+
+const useStyles = makeStyles((theme) => ({
+ paper: {
+ marginTop: theme.spacing(24),
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ padding: theme.spacing(3, 5)
+ },
+ avatar: {
+ margin: theme.spacing(1),
+ backgroundColor: theme.palette.primary.main
+ },
+ form: {
+ width: '100%', // Fix IE 11 issue.
+ marginTop: theme.spacing(1)
+ },
+ submit: {
+ margin: theme.spacing(2, 0)
+ }
+}))
+
+var url = ''
+
+export default function SignIn (props) {
+ const classes = useStyles()
+ const auth = useSelector(state => state.authReducer)
+
+ const dispatch = useDispatch()
+ var homeURL = `${window.location.protocol}\\\\${window.location.host}/`
+
+ useEffect(() => {
+ dispatch(authDefault())
+ document.title = 'Login - Xcos'
+ if (props.location.search !== '') {
+ const query = new URLSearchParams(props.location.search)
+ url = query.get('url')
+ localStorage.setItem('ard_redurl', url)
+ } else {
+ url = ''
+ }
+ }, [dispatch, props.location.search])
+
+ const [username, setUsername] = useState('')
+ const [password, setPassword] = useState('')
+ const [showPassword, setShowPassword] = useState(false)
+ const handleClickShowPassword = () => setShowPassword(!showPassword)
+ const handleMouseDownPassword = () => setShowPassword(!showPassword)
+
+ // Function call for normal user login.
+ const handleLogin = () => {
+ dispatch(login(username, password, url))
+ }
+
+ // Function call for google oAuth login.
+ const handleGoogleLogin = () => {
+ var host = window.location.protocol + '//' + window.location.host
+ dispatch(googleLogin(host))
+ }
+
+ return (
+ <Container component="main" maxWidth="xs">
+ <Card className={classes.paper}>
+ <Avatar className={classes.avatar}>
+ <LockOutlinedIcon />
+ </Avatar>
+
+ <Typography component="h1" variant="h5">
+ Login | Sign In
+ </Typography>
+
+ {/* Display's error messages while logging in */}
+ <Typography variant="body1" align="center" style={{ marginTop: '10px' }} color="error" >
+ {auth.errors}
+ </Typography>
+
+ <form className={classes.form} noValidate>
+ <TextField
+ variant="outlined"
+ margin="normal"
+ required
+ fullWidth
+ id="email"
+ label="Username"
+ name="email"
+ autoComplete="email"
+ value={username}
+ onChange={e => setUsername(e.target.value)}
+ autoFocus
+ />
+ <TextField
+ variant="outlined"
+ margin="normal"
+ required
+ fullWidth
+ name="password"
+ label="Password"
+ InputProps={{
+ endAdornment: (
+ <InputAdornment position="end">
+ <IconButton
+ size="small"
+ aria-label="toggle password visibility"
+ onClick={handleClickShowPassword}
+ onMouseDown={handleMouseDownPassword}
+ >
+ {showPassword ? <Visibility fontSize="small" /> : <VisibilityOff fontSize="small" />} {/* Handel password visibility */}
+ </IconButton>
+ </InputAdornment>
+ )
+ }}
+ type={showPassword ? 'text' : 'password'}
+ id="password"
+ value={password}
+ onChange={e => setPassword(e.target.value)}
+ autoComplete="current-password"
+ />
+ <FormControlLabel
+ control={<Checkbox value="remember" color="primary" />}
+ label="Remember me"
+ />
+ <Button
+ fullWidth
+ variant="contained"
+ color="primary"
+ onClick={handleLogin}
+ className={classes.submit}
+ >
+ Login
+ </Button>
+ <Grid container>
+ <Grid item xs>
+ <Link component={RouterLink} to="#" variant="body2">
+ Forgot password?
+ </Link>
+ </Grid>
+ <Grid item>
+ <Link component={RouterLink} to="/signup" variant="body2">
+ {'New User? Sign Up'}
+ </Link>
+ </Grid>
+ </Grid>
+ </form>
+ <Typography variant="body1" color="secondary" align="center" >Or</Typography>
+
+ {/* Google oAuth Sign In option */}
+ <Button
+ fullWidth
+ variant="outlined"
+ color="primary"
+ onClick={handleGoogleLogin}
+ className={classes.submit}
+ >
+ <img alt="G" src={google} height="20" />&emsp; Login With Google
+ </Button>
+ </Card>
+ <Button
+ onClick={() => { window.open(homeURL, '_self') }}
+ fullWidth
+ color="default"
+ className={classes.submit}
+ >
+ Back to home
+ </Button>
+ </Container>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/NotFound.js b/blocks/eda-frontend/src/pages/NotFound.js
new file mode 100644
index 00000000..af600c44
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/NotFound.js
@@ -0,0 +1,35 @@
+// Page to display Page Not Found (i.e. 404) error.
+import React, { useEffect } from 'react'
+
+import { Container, Typography } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+
+const useStyles = makeStyles((theme) => ({
+ header: {
+ padding: theme.spacing(8, 0, 6)
+ }
+}))
+
+export default function NotFound () {
+ const classes = useStyles()
+
+ useEffect(() => {
+ document.title = 'Not Found - EDA '
+ })
+
+ return (
+ <Container maxWidth="lg" className={classes.header}>
+ <Typography variant="h1" align="center" gutterBottom>
+ 404 Not Found
+ </Typography>
+ <Typography
+ variant="h4"
+ align="center"
+ color="textSecondary"
+ gutterBottom
+ >
+ Sorry, Requested page not found
+ </Typography>
+ </Container>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/SchematiEditor.js b/blocks/eda-frontend/src/pages/SchematiEditor.js
new file mode 100644
index 00000000..ba0ddbf6
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/SchematiEditor.js
@@ -0,0 +1,85 @@
+// Main Layout for Schemaic Editor page.
+/* eslint-disable react/prop-types */
+import React, { useEffect } from 'react'
+import { CssBaseline } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+
+import Layout from '../components/Shared/Layout'
+import Header from '../components/SchematicEditor/Header'
+import ComponentSidebar from '../components/SchematicEditor/ComponentSidebar'
+import LayoutMain from '../components/Shared/LayoutMain'
+import SchematicToolbar from '../components/SchematicEditor/SchematicToolbar'
+import RightSidebar from '../components/SchematicEditor/RightSidebar'
+import PropertiesSidebar from '../components/SchematicEditor/PropertiesSidebar'
+import LoadGrid from '../components/SchematicEditor/Helper/ComponentDrag.js'
+import '../components/SchematicEditor/Helper/SchematicEditor.css'
+import { fetchSchematic, loadGallery } from '../redux/actions/index'
+import { useDispatch } from 'react-redux'
+
+const useStyles = makeStyles((theme) => ({
+ root: {
+ display: 'flex',
+ minHeight: '100vh'
+ },
+ toolbar: {
+ minHeight: '80px'
+ }
+}))
+
+export default function SchematiEditor (props) {
+ const classes = useStyles()
+ const compRef = React.createRef()
+ const gridRef = React.createRef()
+ const outlineRef = React.createRef()
+ const dispatch = useDispatch()
+ const [mobileOpen, setMobileOpen] = React.useState(false)
+
+ const handleDrawerToggle = () => {
+ setMobileOpen(!mobileOpen)
+ }
+
+ useEffect(() => {
+ document.title = 'Schematic Editor - Xcos'
+ var container = gridRef.current
+ var sidebar = compRef.current
+ var outline = outlineRef.current
+ LoadGrid(container, sidebar, outline)
+
+ if (props.location.search !== '') {
+ const query = new URLSearchParams(props.location.search)
+ var cktid = query.get('id')
+
+ if (cktid.substr(0, 7) === 'gallery') {
+ // Loading Gallery schemaic.
+ dispatch(loadGallery(cktid.substr(7, cktid.length)))
+ } else {
+ // Loading User on-cloud saved schemaic.
+ dispatch(fetchSchematic(cktid))
+ }
+ }
+ }, [compRef, gridRef, outlineRef, props.location, dispatch])
+
+ return (
+
+ <div className={classes.root}>
+
+ <CssBaseline />
+
+ {/* Schematic editor header, toolbar and left side pane */}
+ <Layout header={<Header />} resToolbar={<SchematicToolbar gridRef={gridRef} mobileClose={handleDrawerToggle} />} sidebar={<ComponentSidebar compRef={compRef} />} />
+
+ {/* Grid for drawing and designing circuits */}
+ <LayoutMain>
+ <div className={classes.toolbar} />
+ <center>
+ <div className="grid-container A4-L" ref={gridRef} id="divGrid" />
+ </center>
+ </LayoutMain>
+
+ {/* Schematic editor Right side pane */}
+ <RightSidebar mobileOpen={mobileOpen} mobileClose={handleDrawerToggle} >
+ <PropertiesSidebar gridRef={gridRef} outlineRef={outlineRef} />
+ </RightSidebar>
+ </div>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/Simulator.js b/blocks/eda-frontend/src/pages/Simulator.js
new file mode 100644
index 00000000..4f0feb77
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/Simulator.js
@@ -0,0 +1,218 @@
+import React, { useState, useEffect } from 'react'
+import { Container, Grid, Button, Paper, Typography, Switch, FormControlLabel } from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import Editor from '../components/Simulator/Editor'
+import textToFile from '../components/Simulator/textToFile'
+import SimulationScreen from '../components/Simulator/SimulationScreen'
+import { useDispatch } from 'react-redux'
+import { setResultGraph, setResultText } from '../redux/actions/index'
+
+import api from '../utils/Api'
+
+const useStyles = makeStyles((theme) => ({
+ header: {
+ padding: theme.spacing(5, 0, 6)
+ // color: '#fff'
+ },
+ paper: {
+ padding: theme.spacing(2),
+ textAlign: 'center',
+ backgroundColor: '#404040',
+ color: '#fff'
+
+ }
+}))
+
+export default function Simulator () {
+ const classes = useStyles()
+ const dispatch = useDispatch()
+ const [netlistCode, setNetlistCode] = useState('')
+ const [state, setState] = React.useState({
+ checkedA: false
+
+ })
+
+ useEffect(() => {
+ document.title = 'Simulator - Xcos'
+ })
+
+ const handleChange = (event) => {
+ setState({ ...state, [event.target.name]: event.target.checked })
+ }
+
+ const handleSimulationButtonClick = () => {
+ prepareNetlist()
+ }
+ const onCodeChange = (code) => {
+ setNetlistCode(code)
+ }
+
+ const [simulateOpen, setSimulateOpen] = React.useState(false)
+ const handlesimulateOpen = () => {
+ setSimulateOpen(true)
+ }
+
+ const handleSimulateClose = () => {
+ setSimulateOpen(false)
+ }
+
+ const netlistCodeSanitization = (code) => {
+ var cleanCode = code.replace('plot', 'print')
+
+ return cleanCode
+ }
+
+ function prepareNetlist () {
+ var sanatizedText = netlistCodeSanitization(netlistCode)
+ var file = textToFile(sanatizedText)
+ sendNetlist(file)
+ }
+
+ // Upload the nelist
+ function netlistConfig (file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ const config = {
+ headers: {
+ 'content-type': 'multipart/form-data'
+ }
+ }
+ return api.post('simulation/upload', formData, config)
+ }
+
+ function sendNetlist (file) {
+ netlistConfig(file)
+ .then((response) => {
+ const res = response.data
+ const getUrl = 'simulation/status/'.concat(res.details.task_id)
+ simulationResult(getUrl)
+ })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ const [isResult, setIsResult] = useState(false)
+
+ function simulationResult (url) {
+ api
+ .get(url)
+ .then((res) => {
+ if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') {
+ setTimeout(simulationResult(url), 1000)
+ } else {
+ var result = res.data.details
+ if (result === null) {
+ setIsResult(false)
+ } else {
+ setIsResult(true)
+ var temp = res.data.details.data
+
+ var data = result.data
+ if (res.data.details.graph === 'true') {
+ var simResultGraph = { labels: [], x_points: [], y_points: [] }
+ // populate the labels
+ for (var i = 0; i < data.length; i++) {
+ simResultGraph.labels[0] = data[i].labels[0]
+ var lab = data[i].labels
+ // lab is an array containeing labels names ['time','abc','def']
+ simResultGraph.x_points = data[0].x
+
+ // labels
+ for (var x = 1; x < lab.length; x++) {
+ if (lab[x].includes('#branch')) {
+ lab[x] = `I (${lab[x].replace('#branch', '')})`
+ }
+ // uncomment below if you want label like V(r1.1) but it will break the graph showing time as well
+ // else {
+ // lab[x] = `V (${lab[x]})`
+
+ // }
+ simResultGraph.labels.push(lab[x])
+ }
+ // populate y_points
+ for (var z = 0; z < data[i].y.length; z++) {
+ simResultGraph.y_points.push(data[i].y[z])
+ }
+ }
+
+ simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d))
+
+ for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) {
+ simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d))
+ }
+ dispatch(setResultGraph(simResultGraph))
+ } else {
+ var simResultText = []
+ for (let i = 0; i < temp.length; i++) {
+ let postfixUnit = ''
+ if (temp[i][0].includes('#branch')) {
+ temp[i][0] = `I(${temp[i][0].replace('#branch', '')})`
+ postfixUnit = 'A'
+ } else {
+ temp[i][0] = `V(${temp[i][0]})`
+ postfixUnit = 'V'
+ }
+
+ simResultText.push(temp[i][0] + ' ' + temp[i][1] + ' ' + parseFloat(temp[i][2]) + ' ' + postfixUnit + '\n')
+ }
+ // handleSimulationResult(res.data.details)
+ dispatch(setResultText(simResultText))
+ }
+ }
+ }
+ })
+ .then((res) => { handlesimulateOpen() })
+ .catch(function (error) {
+ console.log(error)
+ })
+ }
+
+ return (
+ <Container maxWidth="lg" className={classes.header}>
+ <SimulationScreen open={simulateOpen} isResult={isResult} close={handleSimulateClose} dark={state} />
+ <Grid
+ container
+ spacing={3}
+ direction="row"
+ justify="center"
+ alignItems="stretch"
+ >
+ <Grid item xs={12} >
+ <Paper className={classes.paper}>
+
+ <Typography variant="h4" gutterBottom>
+ SPICE SIMULATOR
+ </Typography>
+ <Typography variant="subtitle1" gutterBottom>
+ Xcos on Cloud - ngSpice Simulator
+ </Typography>
+ </Paper>
+ </Grid>
+
+ <Grid item xs={12} >
+ <Paper className={classes.paper}>
+
+ <Typography variant="h5" gutterBottom>
+ Enter Netlist
+
+ </Typography>
+
+ <FormControlLabel
+ style={{ marginLeft: '10px' }}
+ control={<Switch checked={state.checkedA} color="primary" onChange={handleChange} name="checkedA" />}
+ label="Light Mode"
+ />
+
+ <Editor code={netlistCode} onCodeChange={onCodeChange} dark={state} />
+ <br />
+
+ <Button variant="contained" color="primary" size="large" onClick={handleSimulationButtonClick}>
+ Simulate
+ </Button>
+ </Paper>
+ </Grid>
+ </Grid>
+ </Container>
+ )
+}
diff --git a/blocks/eda-frontend/src/pages/signUp.js b/blocks/eda-frontend/src/pages/signUp.js
new file mode 100644
index 00000000..5e09e552
--- /dev/null
+++ b/blocks/eda-frontend/src/pages/signUp.js
@@ -0,0 +1,193 @@
+// User Sign Up / Register page.
+import React, { useState, useEffect } from 'react'
+import {
+ Container,
+ Grid,
+ Button,
+ Typography,
+ Link,
+ Checkbox,
+ FormControlLabel,
+ TextField,
+ Card,
+ Avatar,
+ InputAdornment,
+ IconButton
+} from '@material-ui/core'
+import { makeStyles } from '@material-ui/core/styles'
+import LockOutlinedIcon from '@material-ui/icons/LockOutlined'
+import Visibility from '@material-ui/icons/Visibility'
+import VisibilityOff from '@material-ui/icons/VisibilityOff'
+import { Link as RouterLink, useHistory } from 'react-router-dom'
+import { useSelector, useDispatch } from 'react-redux'
+import { signUp, authDefault, googleLogin } from '../redux/actions/index'
+import google from '../static/google.png'
+
+const useStyles = makeStyles((theme) => ({
+ paper: {
+ marginTop: theme.spacing(20),
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ padding: theme.spacing(3, 5)
+ },
+ avatar: {
+ margin: theme.spacing(1),
+ backgroundColor: theme.palette.primary.main
+ },
+ form: {
+ width: '100%', // Fix IE 11 issue.
+ marginTop: theme.spacing(1)
+ },
+ submit: {
+ margin: theme.spacing(1.5, 0)
+ }
+}))
+
+export default function SignUp () {
+ const classes = useStyles()
+
+ const auth = useSelector(state => state.authReducer)
+
+ const dispatch = useDispatch()
+ var homeURL = `${window.location.protocol}\\\\${window.location.host}/`
+
+ useEffect(() => {
+ dispatch(authDefault())
+ document.title = 'Sign Up - Xcos'
+ }, [dispatch])
+
+ const history = useHistory()
+
+ const [username, setUsername] = useState('')
+ const [password, setPassword] = useState('')
+ const [email, setEmail] = useState('')
+ const [accept, setAccept] = useState(true)
+ const [showPassword, setShowPassword] = useState(false)
+ const handleClickShowPassword = () => setShowPassword(!showPassword)
+ const handleMouseDownPassword = () => setShowPassword(!showPassword)
+
+ // Function call for google oAuth sign up.
+ const handelGoogleSignup = () => {
+ var host = window.location.protocol + '//' + window.location.host
+ dispatch(googleLogin(host))
+ }
+
+ return (
+ <Container component="main" maxWidth="xs">
+ <Card className={classes.paper}>
+ <Avatar className={classes.avatar}>
+ <LockOutlinedIcon />
+ </Avatar>
+
+ <Typography component="h1" variant="h5">
+ Register | Sign Up
+ </Typography>
+
+ {/* Display's error messages while signing in */}
+ <Typography variant="body1" align="center" style={{ marginTop: '10px' }} color={auth.isRegistered ? 'secondary' : 'error'}>
+ {auth.regErrors}
+ </Typography>
+
+ <form className={classes.form} noValidate>
+ <TextField
+ variant="outlined"
+ margin="normal"
+ required
+ fullWidth
+ id="username"
+ label="Username"
+ name="username"
+ autoComplete="email"
+ value={username}
+ onChange={e => setUsername(e.target.value)}
+ autoFocus
+ />
+ <TextField
+ variant="outlined"
+ margin="normal"
+ required
+ fullWidth
+ id="email"
+ label="email"
+ name="email"
+ type="email"
+ autoComplete="email"
+ value={email}
+ onChange={e => setEmail(e.target.value)}
+ autoFocus
+ />
+ <TextField
+ variant="outlined"
+ margin="normal"
+ required
+ fullWidth
+ name="password"
+ label="Password"
+ InputProps={{
+ endAdornment: (
+ <InputAdornment position="end">
+ <IconButton
+ size="small"
+ aria-label="toggle password visibility"
+ onClick={handleClickShowPassword}
+ onMouseDown={handleMouseDownPassword}
+ >
+ {showPassword ? <Visibility fontSize="small" /> : <VisibilityOff fontSize="small" />} {/* Handel password visibility */}
+ </IconButton>
+ </InputAdornment>
+ )
+ }}
+ type={showPassword ? 'text' : 'password'}
+ id="password"
+ value={password}
+ onChange={e => setPassword(e.target.value)}
+ autoComplete="current-password"
+ />
+ <FormControlLabel
+ control={<Checkbox checked={accept} onChange={e => setAccept(e.target.checked)} color="primary" />}
+ label="I accept the Terms of Use & Privacy Policy"
+ />
+ <Button
+ fullWidth
+ variant="contained"
+ color="primary"
+ onClick={() => dispatch(signUp(email, username, password, history))}
+ className={classes.submit}
+ disabled={!accept}
+ >
+ Sign Up
+ </Button>
+ <Typography variant="body2" color="secondary" align="center" >Or</Typography>
+
+ {/* Google oAuth Sign Up option */}
+ <Button
+ fullWidth
+ variant="outlined"
+ color="primary"
+ onClick={handelGoogleSignup}
+ className={classes.submit}
+ >
+ <img alt="G" src={google} height="20" />&emsp; Sign Up With Google
+ </Button>
+ </form>
+
+ <Grid container>
+ <Grid item style={{ margin: 'auto' }} >
+ <Link component={RouterLink} to="/login" variant="body2">
+ {'Already have account? Login'}
+ </Link>
+ </Grid>
+ </Grid>
+ </Card>
+ <Button
+ fullWidth
+ onClick={() => { window.open(homeURL, '_self') }}
+ color="default"
+ className={classes.submit}
+ >
+ Back to home
+ </Button>
+ </Container>
+ )
+}
diff --git a/blocks/eda-frontend/src/redux/actions/actions.js b/blocks/eda-frontend/src/redux/actions/actions.js
new file mode 100644
index 00000000..d13db51a
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/actions.js
@@ -0,0 +1,47 @@
+// Actions for schematic editor
+export const FETCH_LIBRARIES = 'FETCH_LIBRARIES'
+export const TOGGLE_COLLAPSE = 'TOGGLE_COLLAPSE'
+export const FETCH_COMPONENTS = 'FETCH_COMPONENTS'
+export const TOGGLE_SIMULATE = 'TOGGLE_SIMULATE'
+
+// Actions for handeling component properties
+export const GET_COMP_PROPERTIES = 'GET_COMP_PROPERTIES'
+export const SET_COMP_PROPERTIES = 'SET_COMP_PROPERTIES'
+export const CLOSE_COMP_PROPERTIES = 'CLOSE_COMP_PROPERTIES'
+
+// Actions for handeling and generating netlist
+export const SET_NETLIST = 'SET_NETLIST'
+export const SET_TITLE = 'SET_TITLE'
+export const SET_MODEL = 'SET_MODEL'
+export const SET_CONTROL_LINE = 'SET_CONTROL_LINE'
+export const SET_CONTROL_BLOCK = 'SET_CONTROL_BLOCK'
+
+// Actions for handeling simualtion result display
+export const SET_RESULT_TITLE = 'SET_RESULT_TITLE'
+export const SET_RESULT_GRAPH = 'SET_RESULT_GRAPH'
+export const SET_RESULT_TEXT = 'SET_RESULT_TEXT'
+
+// Actions for handeling user authentication and registeration
+export const USER_LOADING = 'USER_LOADING'
+export const USER_LOADED = 'USER_LOADED'
+export const LOGIN_SUCCESSFUL = 'LOGIN_SUCCESSFUL'
+export const AUTHENTICATION_ERROR = 'AUTHENTICATION_ERROR'
+export const LOGIN_FAILED = 'LOGIN_FAILED'
+export const LOGOUT_SUCCESSFUL = 'LOGOUT_SUCCESSFUL'
+export const LOADING_FAILED = 'LOADING_FAILED'
+export const SIGNUP_SUCCESSFUL = 'SIGNUP_SUCCESSFUL'
+export const SIGNUP_FAILED = 'SIGNUP_FAILED'
+export const DEFAULT_STORE = 'DEFAULT_STORE'
+
+// Actions for saving scheamtics and loading saved, gallery and local schematics.
+export const SAVE_SCHEMATICS = 'SAVE_SCHEMATICS'
+export const SET_SCH_SAVED = 'SET_SCH_SAVED'
+export const SET_SCH_TITLE = 'SET_SCH_TITLE'
+export const SET_SCH_DESCRIPTION = 'SET_SCH_DESCRIPTION'
+export const SET_SCH_XML_DATA = 'SET_SCH_XML_DATA'
+export const SET_SCH_SHARED = 'SET_SCH_SHARED'
+export const CLEAR_DETAILS = 'CLEAR_DETAILS'
+export const LOAD_GALLERY = 'LOAD_GALLERY'
+
+// Action for fetching on-cloud saved schematics for authenticated user to display in dashboard
+export const FETCH_SCHEMATICS = 'FETCH_SCHEMATICS'
diff --git a/blocks/eda-frontend/src/redux/actions/authActions.js b/blocks/eda-frontend/src/redux/actions/authActions.js
new file mode 100644
index 00000000..962175c1
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/authActions.js
@@ -0,0 +1,234 @@
+import * as actions from './actions'
+import api from '../../utils/Api'
+
+// Api call for maintaining user login state throughout the application
+export const loadUser = () => (dispatch, getState) => {
+ // User Loading
+ dispatch({ type: actions.USER_LOADING })
+
+ // Get token from localstorage
+ const token = getState().authReducer.token
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ // If token available add to headers
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ } else {
+ dispatch({ type: actions.LOADING_FAILED })
+ return
+ }
+
+ api.get('auth/users/me/', config)
+ .then(
+ (res) => {
+ if (res.status === 200) {
+ dispatch({
+ type: actions.USER_LOADED,
+ payload: {
+ user: res.data
+ }
+ })
+ } else if (res.status >= 400 && res.status < 500) {
+ dispatch({
+ type: actions.LOGIN_FAILED,
+ payload: {
+ data: res.data
+ }
+ })
+ }
+ }
+ )
+ .catch((err) => {
+ console.error(err)
+ dispatch({
+ type: actions.LOGIN_FAILED,
+ payload: {
+ data: {}
+ }
+ })
+ })
+}
+
+// Handel api call for user login
+export const login = (username, password, toUrl) => {
+ const body = {
+ password: password,
+ username: username
+ }
+
+ return function (dispatch) {
+ api.post('auth/token/login/', body)
+ .then((res) => {
+ if (res.status === 200) {
+ dispatch({
+ type: actions.LOGIN_SUCCESSFUL,
+ payload: {
+ data: res.data
+ }
+ })
+ if (toUrl === '') {
+ dispatch(loadUser())
+ } else {
+ window.open(toUrl, '_self')
+ }
+ } else if (res.status === 400 || res.status === 403 || res.status === 401) {
+ dispatch({
+ type: actions.AUTHENTICATION_ERROR,
+ payload: {
+ data: 'Incorrect Username or Password.'
+ }
+ })
+ } else {
+ dispatch({
+ type: actions.LOGIN_FAILED,
+ payload: {
+ data: 'Something went wrong! Login Failed'
+ }
+ })
+ }
+ })
+ .catch((err) => {
+ var res = err.response
+ if (res.status === 400 || res.status === 403 || res.status === 401) {
+ dispatch(loginError('Incorrect Username or Password.'))
+ } else {
+ dispatch(loginError('Something went wrong! Login Failed'))
+ }
+ })
+ }
+}
+
+// Handel api call for user sign up
+export const signUp = (email, username, password, history) => (dispatch) => {
+ const body = {
+ email: email,
+ username: username,
+ password: password
+ }
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ api.post('auth/users/', body, config)
+ .then((res) => {
+ if (res.status === 200 || res.status === 201) {
+ dispatch({
+ type: actions.SIGNUP_SUCCESSFUL,
+ payload: {
+ data: 'Successfully Signed Up! A verification link has been sent to your email account.'
+ }
+ })
+ // history.push('/login')
+ }
+ })
+ .catch((err) => {
+ var res = err.response
+ if (res.status === 400 || res.status === 403 || res.status === 401) {
+ if (res.data.username !== undefined) {
+ if (res.data.username[0].search('already') !== -1 && res.data.username[0].search('exists') !== -1) { dispatch(signUpError('Username Already Taken.')) }
+ } else {
+ dispatch(signUpError('Enter Valid Credentials.'))
+ }
+ } else {
+ dispatch(signUpError('Something went wrong! Registeration Failed'))
+ }
+ })
+}
+
+// Handel api call for user logout
+export const logout = (history) => (dispatch, getState) => {
+ // Get token from localstorage
+ const token = getState().authReducer.token
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ // If token available add to headers
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ api.post('auth/token/logout/', {}, config)
+ .then(
+ (res) => {
+ if (res.status === 200 || res.status === 204) {
+ dispatch({
+ type: actions.LOGOUT_SUCCESSFUL,
+ payload: {
+ user: res.data
+ }
+ })
+ history.push('/login')
+ }
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+// Redux action for default auth store
+export const authDefault = () => (dispatch) => {
+ dispatch({ type: actions.DEFAULT_STORE })
+}
+
+// Redux action for display login error
+const loginError = (message) => (dispatch) => {
+ dispatch({
+ type: actions.AUTHENTICATION_ERROR,
+ payload: {
+ data: message
+ }
+ })
+}
+
+// Redux action for display sign up error
+const signUpError = (message) => (dispatch) => {
+ dispatch({
+ type: actions.SIGNUP_FAILED,
+ payload: {
+ data: message
+ }
+ })
+}
+
+// Api call for Google oAuth login or sign up
+export const googleLogin = (host, toUrl) => {
+ return function (dispatch) {
+ api.get('auth/o/google-oauth2/?redirect_uri=' + host + '/api/auth/google-callback')
+ .then((res) => {
+ if (res.status === 200) {
+ // Open google login page
+ window.open(res.data.authorization_url, '_self')
+ } else {
+ dispatch({
+ type: actions.LOGIN_FAILED,
+ payload: {
+ data: 'Something went wrong! Login Failed'
+ }
+ })
+ }
+ })
+ .then((res) => { console.log(res) })
+ .catch((err) => {
+ var res = err.response
+ if (res.status === 400 || res.status === 403 || res.status === 401) {
+ dispatch(loginError('Incorrect Username or Password.'))
+ } else {
+ dispatch(loginError('Something went wrong! Login Failed'))
+ }
+ })
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/actions/componentPropertiesActions.js b/blocks/eda-frontend/src/redux/actions/componentPropertiesActions.js
new file mode 100644
index 00000000..5b0e7840
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/componentPropertiesActions.js
@@ -0,0 +1,30 @@
+import * as actions from './actions'
+
+// Actions for listing stored component properites on double click on component
+export const getCompProperties = (id, compProperties) => (dispatch) => {
+ dispatch({
+ type: actions.GET_COMP_PROPERTIES,
+ payload: {
+ id: id,
+ compProperties: compProperties
+ }
+ })
+}
+
+// Actions for updating entered component properites on clicking set parameters
+export const setCompProperties = (id, compProperties) => (dispatch) => {
+ dispatch({
+ type: actions.SET_COMP_PROPERTIES,
+ payload: {
+ id: id,
+ compProperties: compProperties
+ }
+ })
+}
+
+// Handeling hiding of component properties sidebar
+export const closeCompProperties = () => (dispatch) => {
+ dispatch({
+ type: actions.CLOSE_COMP_PROPERTIES
+ })
+}
diff --git a/blocks/eda-frontend/src/redux/actions/dashboardActions.js b/blocks/eda-frontend/src/redux/actions/dashboardActions.js
new file mode 100644
index 00000000..02a45126
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/dashboardActions.js
@@ -0,0 +1,53 @@
+import api from '../../utils/Api'
+import * as actions from './actions'
+
+// Api call for listing saved schematic to display on dashboard
+export const fetchSchematics = () => (dispatch, getState) => {
+ const token = getState().authReducer.token
+
+ const config = {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ api.get('save/list', config)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.FETCH_SCHEMATICS,
+ payload: res.data
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+// Api call for deleting saved schematic
+export const deleteSchematic = (saveId) => (dispatch, getState) => {
+ const token = getState().authReducer.token
+
+ const config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ }
+ }
+
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ api.delete('save/' + saveId, config)
+ .then(
+ (res) => {
+ if (res.status === 200) {
+ dispatch(fetchSchematics())
+ }
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
diff --git a/blocks/eda-frontend/src/redux/actions/index.js b/blocks/eda-frontend/src/redux/actions/index.js
new file mode 100644
index 00000000..b13059d3
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/index.js
@@ -0,0 +1,8 @@
+// Actions dispatch to change state variables inside store
+export * from './schematicEditorActions'
+export * from './componentPropertiesActions'
+export * from './netlistActions'
+export * from './simulationActions'
+export * from './authActions'
+export * from './saveSchematicActions'
+export * from './dashboardActions'
diff --git a/blocks/eda-frontend/src/redux/actions/netlistActions.js b/blocks/eda-frontend/src/redux/actions/netlistActions.js
new file mode 100644
index 00000000..52e773b2
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/netlistActions.js
@@ -0,0 +1,51 @@
+import * as actions from './actions'
+
+// Action to update netlist with component nodes and parameters
+export const setNetlist = (netlist) => (dispatch) => {
+ dispatch({
+ type: actions.SET_NETLIST,
+ payload: {
+ netlist: netlist
+ }
+ })
+}
+
+// Action to update netlist title
+export const setTitle = (title) => (dispatch) => {
+ dispatch({
+ type: actions.SET_TITLE,
+ payload: {
+ title: title
+ }
+ })
+}
+
+// Action to update netlist model section
+export const setModel = (model) => (dispatch) => {
+ dispatch({
+ type: actions.SET_MODEL,
+ payload: {
+ model: model
+ }
+ })
+}
+
+// Action to update netlist contorl line section
+export const setControlLine = (controlLine) => (dispatch) => {
+ dispatch({
+ type: actions.SET_CONTROL_LINE,
+ payload: {
+ controlLine: controlLine
+ }
+ })
+}
+
+// Action to update netlist control block section
+export const setControlBlock = (controlBlock) => (dispatch) => {
+ dispatch({
+ type: actions.SET_CONTROL_BLOCK,
+ payload: {
+ controlBlock: controlBlock
+ }
+ })
+}
diff --git a/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js b/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js
new file mode 100644
index 00000000..13f01ea6
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js
@@ -0,0 +1,182 @@
+import * as actions from './actions'
+import queryString from 'query-string'
+import api from '../../utils/Api'
+import GallerySchSample from '../../utils/GallerySchSample'
+import { renderGalleryXML } from '../../components/SchematicEditor/Helper/ToolbarTools'
+import { setTitle } from './index'
+
+export const setSchTitle = (title) => (dispatch) => {
+ dispatch({
+ type: actions.SET_SCH_TITLE,
+ payload: {
+ title: title
+ }
+ })
+}
+
+export const setSchDescription = (description) => (dispatch) => {
+ dispatch({
+ type: actions.SET_SCH_DESCRIPTION,
+ payload: {
+ description: description
+ }
+ })
+}
+
+export const setSchXmlData = (xmlData) => (dispatch) => {
+ dispatch({
+ type: actions.SET_SCH_XML_DATA,
+ payload: {
+ xmlData: xmlData
+ }
+ })
+}
+
+// Api call to save new schematic or updating saved schematic.
+export const saveSchematic = (title, description, xml, base64) => (dispatch, getState) => {
+ const body = {
+ data_dump: xml,
+ base64_image: base64,
+ name: title,
+ description: description
+ }
+
+ // Get token from localstorage
+ const token = getState().authReducer.token
+ const schSave = getState().saveSchematicReducer
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ }
+ }
+
+ // If token available add to headers
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ if (schSave.isSaved) {
+ // Updating saved schemaic
+ api.post('save/' + schSave.details.save_id, queryString.stringify(body), config)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.SET_SCH_SAVED,
+ payload: res.data
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+ } else {
+ // saving new schematic
+ api.post('save', queryString.stringify(body), config)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.SET_SCH_SAVED,
+ payload: res.data
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+ }
+}
+
+// Action for Loading on-cloud saved schematics
+export const fetchSchematic = (saveId) => (dispatch, getState) => {
+ // Get token from localstorage
+ const token = getState().authReducer.token
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ }
+ }
+
+ // If token available add to headers
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ // console.log('Already Saved')
+ api.get('save/' + saveId, config)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.SET_SCH_SAVED,
+ payload: res.data
+ })
+ dispatch(setSchTitle(res.data.name))
+ dispatch(setSchDescription(res.data.description))
+ dispatch(setSchXmlData(res.data.data_dump))
+ renderGalleryXML(res.data.data_dump)
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+export const setSchShared = (share) => (dispatch, getState) => {
+ // Get token from localstorage
+ const token = getState().authReducer.token
+ const schSave = getState().saveSchematicReducer
+
+ // add headers
+ const config = {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ // If token available add to headers
+ if (token) {
+ config.headers.Authorization = `Token ${token}`
+ }
+
+ var isShared
+ if (share === true) {
+ isShared = 'on'
+ } else {
+ isShared = 'off'
+ }
+
+ api.post('save/' + schSave.details.save_id + '/sharing/' + isShared, {}, config)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.SET_SCH_SHARED,
+ payload: res.data
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+// Action for Loading Gallery schematics
+export const loadGallery = (Id) => (dispatch, getState) => {
+ var data = GallerySchSample[Id]
+
+ dispatch({
+ type: actions.LOAD_GALLERY,
+ payload: data
+ })
+ dispatch(setTitle('* ' + data.name))
+ dispatch(setSchTitle(data.name))
+ dispatch(setSchDescription(data.description))
+ dispatch(setSchXmlData(data.data_dump))
+ renderGalleryXML(data.data_dump)
+}
+
+// Action for Loading local exported schematics
+export const openLocalSch = (obj) => (dispatch, getState) => {
+ var data = obj
+
+ dispatch({ type: actions.CLEAR_DETAILS })
+ dispatch(setTitle('* ' + data.title))
+ dispatch(setSchTitle(data.title))
+ dispatch(setSchDescription(data.description))
+ dispatch(setSchXmlData(data.data_dump))
+ renderGalleryXML(data.data_dump)
+}
diff --git a/blocks/eda-frontend/src/redux/actions/schematicEditorActions.js b/blocks/eda-frontend/src/redux/actions/schematicEditorActions.js
new file mode 100644
index 00000000..35b99bf1
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/schematicEditorActions.js
@@ -0,0 +1,85 @@
+import api from '../../utils/Api'
+import * as actions from './actions'
+
+// Api call for fetching component library list
+export const fetchLibraries = () => (dispatch) => {
+// SAMPLE Response from API
+// [
+ // {
+ // "id": 1
+ // "library_name": "Analog.lib",
+ // "saved_on": "2020-05-19T14:06:02.351977Z"
+ // },
+// ] -- Multiple dicts in array
+ api.get('libraries/')
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.FETCH_LIBRARIES,
+ payload: res.data
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+// Api call for fetching components under specified library id
+export const fetchComponents = (libraryId) => (dispatch) => {
+// SAMPLE Response from API
+// [
+ // {
+ // "id": 14221,
+ // "name": "BAT54ADW",
+ // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-A.svg",
+ // "thumbnail_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-A_thumbnail.svg",
+ // "symbol_prefix": "D",
+ // "component_library": "http://localhost/api/libraries/193/",
+ // "description": "Schottky diode array 2 pair Com A",
+ // "data_link": "http://www.diodes.com/datasheets/ds30152.pdf",
+ // "full_name": "D-BAT54ADW-1-A",
+ // "keyword": "diode",
+ // "alternate_component": [
+ // {
+ // "dmg": 1,
+ // "part": "C",
+ // "full_name": "D-BAT54ADW-1-C",
+ // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-C.svg",
+ // "id": 2326
+ // },
+ // {
+ // "dmg": 1,
+ // "part": "B",
+ // "full_name": "D-BAT54ADW-1-B",
+ // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-B.svg",
+ // "id": 2327
+ // },
+ // ]
+ // },
+// ] -- Multiple dicts in array
+ const url = 'components/?component_library=' + parseInt(libraryId)
+ api.get(url)
+ .then(
+ (res) => {
+ dispatch({
+ type: actions.FETCH_COMPONENTS,
+ payload: { components: res.data, id: libraryId }
+ })
+ }
+ )
+ .catch((err) => { console.error(err) })
+}
+
+// Action to keep only one component list dropdown open at a time
+export const toggleCollapse = (id) => (dispatch) => {
+ dispatch({
+ type: actions.TOGGLE_COLLAPSE,
+ payload: { id: id }
+ })
+}
+
+// Action to hide components list to display simulation parameters
+export const toggleSimulate = () => (dispatch) => {
+ dispatch({
+ type: actions.TOGGLE_SIMULATE
+ })
+}
diff --git a/blocks/eda-frontend/src/redux/actions/simulationActions.js b/blocks/eda-frontend/src/redux/actions/simulationActions.js
new file mode 100644
index 00000000..b4eaba0b
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/actions/simulationActions.js
@@ -0,0 +1,31 @@
+import * as actions from './actions'
+
+// Actions to update title for simulation result screen
+export const setResultTitle = (title) => (dispatch) => {
+ dispatch({
+ type: actions.SET_RESULT_TITLE,
+ payload: {
+ title: title
+ }
+ })
+}
+
+// Action to update store with graphical result points
+export const setResultGraph = (graph) => (dispatch) => {
+ dispatch({
+ type: actions.SET_RESULT_GRAPH,
+ payload: {
+ graph: graph
+ }
+ })
+}
+
+// Action to update store with simulation result text
+export const setResultText = (text) => (dispatch) => {
+ dispatch({
+ type: actions.SET_RESULT_TEXT,
+ payload: {
+ text: text
+ }
+ })
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/authReducer.js b/blocks/eda-frontend/src/redux/reducers/authReducer.js
new file mode 100644
index 00000000..a486464b
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/authReducer.js
@@ -0,0 +1,91 @@
+import * as actions from '../actions/actions'
+
+const initialState = {
+ token: localStorage.getItem('Xcos_token'),
+ isAuthenticated: null,
+ isRegistered: null,
+ isLoading: false,
+ user: null,
+ errors: '',
+ regErrors: ''
+}
+
+export default function (state = initialState, action) {
+ switch (action.type) {
+ case actions.USER_LOADING: {
+ return {
+ ...state,
+ isLoading: true
+ }
+ }
+
+ case actions.DEFAULT_STORE: {
+ return {
+ ...state,
+ errors: '',
+ regErrors: ''
+ }
+ }
+
+ case actions.SIGNUP_SUCCESSFUL: {
+ return {
+ ...state,
+ isRegistered: true,
+ regErrors: action.payload.data
+ }
+ }
+
+ case actions.SIGNUP_FAILED: {
+ return {
+ ...state,
+ isRegistered: false,
+ regErrors: action.payload.data
+ }
+ }
+
+ case actions.USER_LOADED: {
+ return {
+ ...state,
+ isAuthenticated: true,
+ isLoading: false,
+ user: action.payload.user
+ }
+ }
+
+ case actions.LOGIN_SUCCESSFUL: {
+ localStorage.setItem('Xcos_token', action.payload.data.auth_token)
+ return {
+ ...state,
+ token: action.payload.data.auth_token,
+ // ...action.payload.data,
+ // isAuthenticated: true,
+ // isLoading: false,
+ errors: ''
+ }
+ }
+
+ case actions.LOADING_FAILED: {
+ return {
+ ...state,
+ isLoading: false
+ }
+ }
+
+ case actions.AUTHENTICATION_ERROR:
+ case actions.LOGIN_FAILED:
+ case actions.LOGOUT_SUCCESSFUL: {
+ localStorage.removeItem('Xcos_token')
+ return {
+ ...state,
+ errors: action.payload.data,
+ token: null,
+ user: null,
+ isAuthenticated: false,
+ isLoading: false
+ }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/componentPropertiesReducer.js b/blocks/eda-frontend/src/redux/reducers/componentPropertiesReducer.js
new file mode 100644
index 00000000..04c103e2
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/componentPropertiesReducer.js
@@ -0,0 +1,41 @@
+import * as actions from '../actions/actions'
+import { ZoomAct } from '../../components/SchematicEditor/Helper/ToolbarTools.js'
+
+const InitialState = {
+ id: '',
+ isPropertiesWindowOpen: false,
+ compProperties: {}
+}
+
+export default function (state = InitialState, action) {
+ switch (action.type) {
+ case actions.GET_COMP_PROPERTIES: {
+ return {
+ ...state,
+ id: action.payload.id,
+ isPropertiesWindowOpen: true,
+ compProperties: action.payload.compProperties
+ }
+ }
+
+ case actions.SET_COMP_PROPERTIES: {
+ return {
+ ...state,
+ id: action.payload.id,
+ isPropertiesWindowOpen: false,
+ compProperties: action.payload.compProperties
+ }
+ }
+
+ case actions.CLOSE_COMP_PROPERTIES: {
+ ZoomAct()
+ return {
+ ...state,
+ isPropertiesWindowOpen: false
+ }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/dashboardReducer.js b/blocks/eda-frontend/src/redux/reducers/dashboardReducer.js
new file mode 100644
index 00000000..0309e124
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/dashboardReducer.js
@@ -0,0 +1,19 @@
+import * as actions from '../actions/actions'
+
+const InitialState = {
+ schematics: []
+}
+
+export default function (state = InitialState, action) {
+ switch (action.type) {
+ case actions.FETCH_SCHEMATICS: {
+ return {
+ ...state,
+ schematics: action.payload
+ }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/index.js b/blocks/eda-frontend/src/redux/reducers/index.js
new file mode 100644
index 00000000..a694d2b2
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/index.js
@@ -0,0 +1,17 @@
+import { combineReducers } from 'redux'
+import schematicEditorReducer from './schematicEditorReducer'
+import componentPropertiesReducer from './componentPropertiesReducer'
+import netlistReducer from './netlistReducer'
+import simulationReducer from './simulationReducer'
+import authReducer from './authReducer'
+import saveSchematicReducer from './saveSchematicReducer'
+import dashboardReducer from './dashboardReducer'
+export default combineReducers({
+ schematicEditorReducer,
+ componentPropertiesReducer,
+ netlistReducer,
+ simulationReducer,
+ authReducer,
+ saveSchematicReducer,
+ dashboardReducer
+})
diff --git a/blocks/eda-frontend/src/redux/reducers/netlistReducer.js b/blocks/eda-frontend/src/redux/reducers/netlistReducer.js
new file mode 100644
index 00000000..d4ea0db5
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/netlistReducer.js
@@ -0,0 +1,47 @@
+import * as actions from '../actions/actions'
+
+const initialState = {
+ title: '* Untitled_Schematic',
+ model: '',
+ netlist: '',
+ controlLine: '',
+ controlBlock: ''
+}
+
+export default function (state = initialState, action) {
+ switch (action.type) {
+ case actions.SET_NETLIST: {
+ return {
+ ...state,
+ netlist: action.payload.netlist
+ }
+ }
+ case actions.SET_TITLE: {
+ return {
+ ...state,
+ title: action.payload.title
+ }
+ }
+
+ case actions.SET_MODEL: {
+ return {
+ ...state,
+ model: action.payload.model
+ }
+ }
+ case actions.SET_CONTROL_LINE: {
+ return {
+ ...state,
+ controlLine: action.payload.controlLine
+ }
+ }
+ case actions.SET_CONTROL_BLOCK: {
+ return {
+ ...state,
+ controlBlock: action.payload.controlBlock
+ }
+ }
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js b/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js
new file mode 100644
index 00000000..db695296
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js
@@ -0,0 +1,73 @@
+import * as actions from '../actions/actions'
+
+const initialState = {
+ title: 'Untitled_Schematic',
+ description: '',
+ xmlData: null,
+ details: {},
+ isSaved: null,
+ isShared: null
+}
+
+export default function (state = initialState, action) {
+ switch (action.type) {
+ case actions.SET_SCH_SAVED: {
+ return {
+ ...state,
+ isSaved: true,
+ isShared: action.payload.shared,
+ details: action.payload
+ }
+ }
+
+ case actions.SET_SCH_SHARED: {
+ return {
+ ...state,
+ isShared: true,
+ details: action.payload
+ }
+ }
+
+ case actions.CLEAR_DETAILS: {
+ return {
+ ...state,
+ isSaved: null,
+ isShared: null,
+ details: {}
+ }
+ }
+
+ case actions.LOAD_GALLERY: {
+ return {
+ ...state,
+ isSaved: null,
+ isShared: null,
+ details: action.payload
+ }
+ }
+
+ case actions.SET_SCH_TITLE: {
+ return {
+ ...state,
+ title: action.payload.title
+ }
+ }
+
+ case actions.SET_SCH_DESCRIPTION: {
+ return {
+ ...state,
+ description: action.payload.description
+ }
+ }
+
+ case actions.SET_SCH_XML_DATA: {
+ return {
+ ...state,
+ xmlData: action.payload.xmlData
+ }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/schematicEditorReducer.js b/blocks/eda-frontend/src/redux/reducers/schematicEditorReducer.js
new file mode 100644
index 00000000..38df2f32
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/schematicEditorReducer.js
@@ -0,0 +1,50 @@
+import * as actions from '../actions/actions'
+
+const InitialState = {
+ isSimulate: false,
+ libraries: [],
+ collapse: {},
+ components: {}
+}
+
+export default function (state = InitialState, action) {
+ switch (action.type) {
+ case actions.FETCH_LIBRARIES: {
+ // Add 'open' parameter to track open/close state of collapse
+ const collapse = {}
+ const components = {}
+ action.payload.forEach(element => {
+ collapse[element.id] = false
+ components[element.id] = []
+ })
+ return { ...state, libraries: action.payload, collapse: collapse, components: components }
+ }
+
+ case actions.TOGGLE_COLLAPSE: {
+ const existingState = state.collapse[action.payload.id]
+ const newCollapse = Object.keys(state.collapse).reduce(function (accObj, parseObj) {
+ accObj[parseObj] = false
+ return accObj
+ }, {})
+ newCollapse[action.payload.id] = !existingState
+ // console.log('Updating collapse', action.payload.id)
+ Object.assign(state.collapse, newCollapse)
+ return { ...state, collapse: { ...state.collapse, newCollapse } }
+ }
+
+ case actions.FETCH_COMPONENTS: {
+ const newComponents = state.components
+ newComponents[action.payload.id] = action.payload.components
+ // console.log('Fetched and added ', newComponents[action.payload.id].length, 'Components')
+ Object.assign(state.components, newComponents)
+ return { ...state, components: { ...state.components, newComponents } }
+ }
+
+ case actions.TOGGLE_SIMULATE: {
+ return { ...state, isSimulate: !state.isSimulate }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/simulationReducer.js b/blocks/eda-frontend/src/redux/reducers/simulationReducer.js
new file mode 100644
index 00000000..6f6faf41
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/reducers/simulationReducer.js
@@ -0,0 +1,40 @@
+import * as actions from '../actions/actions'
+
+const initialState = {
+ title: '',
+ isGraph: 'false',
+ text: [],
+ graph: {},
+ isSimRes: false
+}
+
+export default function (state = initialState, action) {
+ switch (action.type) {
+ case actions.SET_RESULT_TITLE: {
+ return {
+ ...state,
+ title: action.payload.title
+ }
+ }
+ case actions.SET_RESULT_GRAPH: {
+ return {
+ ...state,
+ isSimRes: true,
+ isGraph: 'true',
+ graph: action.payload.graph
+ }
+ }
+
+ case actions.SET_RESULT_TEXT: {
+ return {
+ ...state,
+ isSimRes: true,
+ isGraph: 'false',
+ text: action.payload.text
+ }
+ }
+
+ default:
+ return state
+ }
+}
diff --git a/blocks/eda-frontend/src/redux/store.js b/blocks/eda-frontend/src/redux/store.js
new file mode 100644
index 00000000..1ca6ceda
--- /dev/null
+++ b/blocks/eda-frontend/src/redux/store.js
@@ -0,0 +1,8 @@
+// Initialize Redux store which holds the whole state tree of application.
+import reducer from './reducers/index'
+import { createStore, applyMiddleware } from 'redux'
+import reduxThunk from 'redux-thunk'
+const createStoreWithMiddleware = applyMiddleware(reduxThunk)(createStore)
+const store = createStoreWithMiddleware(reducer)
+
+export default store
diff --git a/blocks/eda-frontend/src/serviceWorker.js b/blocks/eda-frontend/src/serviceWorker.js
new file mode 100644
index 00000000..b022002c
--- /dev/null
+++ b/blocks/eda-frontend/src/serviceWorker.js
@@ -0,0 +1,141 @@
+// This optional code is used to register a service worker.
+// register() is not called by default.
+
+// This lets the app load faster on subsequent visits in production, and gives
+// it offline capabilities. However, it also means that developers (and users)
+// will only see deployed updates on subsequent visits to a page, after all the
+// existing tabs open on the page have been closed, since previously cached
+// resources are updated in the background.
+
+// To learn more about the benefits of this model and instructions on how to
+// opt-in, read https://bit.ly/CRA-PWA
+
+const isLocalhost = Boolean(
+ window.location.hostname === 'localhost' ||
+ // [::1] is the IPv6 localhost address.
+ window.location.hostname === '[::1]' ||
+ // 127.0.0.0/8 are considered localhost for IPv4.
+ window.location.hostname.match(
+ /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
+ )
+)
+
+export function register (config) {
+ if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
+ // The URL constructor is available in all browsers that support SW.
+ const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)
+ if (publicUrl.origin !== window.location.origin) {
+ // Our service worker won't work if PUBLIC_URL is on a different origin
+ // from what our page is served on. This might happen if a CDN is used to
+ // serve assets; see https://github.com/facebook/create-react-app/issues/2374
+ return
+ }
+
+ window.addEventListener('load', () => {
+ const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`
+
+ if (isLocalhost) {
+ // This is running on localhost. Let's check if a service worker still exists or not.
+ checkValidServiceWorker(swUrl, config)
+
+ // Add some additional logging to localhost, pointing developers to the
+ // service worker/PWA documentation.
+ navigator.serviceWorker.ready.then(() => {
+ // console.log(
+ // 'This web app is being served cache-first by a service ' +
+ // 'worker. To learn more, visit https://bit.ly/CRA-PWA'
+ // )
+ })
+ } else {
+ // Is not localhost. Just register service worker
+ registerValidSW(swUrl, config)
+ }
+ })
+ }
+}
+
+function registerValidSW (swUrl, config) {
+ navigator.serviceWorker
+ .register(swUrl)
+ .then(registration => {
+ registration.onupdatefound = () => {
+ const installingWorker = registration.installing
+ if (installingWorker == null) {
+ return
+ }
+ installingWorker.onstatechange = () => {
+ if (installingWorker.state === 'installed') {
+ if (navigator.serviceWorker.controller) {
+ // At this point, the updated precached content has been fetched,
+ // but the previous service worker will still serve the older
+ // content until all client tabs are closed.
+ // console.log(
+ // 'New content is available and will be used when all ' +
+ // 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
+ // )
+
+ // Execute callback
+ if (config && config.onUpdate) {
+ config.onUpdate(registration)
+ }
+ } else {
+ // At this point, everything has been precached.
+ // It's the perfect time to display a
+ // "Content is cached for offline use." message.
+ // console.log('Content is cached for offline use.')
+
+ // Execute callback
+ if (config && config.onSuccess) {
+ config.onSuccess(registration)
+ }
+ }
+ }
+ }
+ }
+ })
+ .catch(error => {
+ console.error('Error during service worker registration:', error)
+ })
+}
+
+function checkValidServiceWorker (swUrl, config) {
+ // Check if the service worker can be found. If it can't reload the page.
+ fetch(swUrl, {
+ headers: { 'Service-Worker': 'script' }
+ })
+ .then(response => {
+ // Ensure service worker exists, and that we really are getting a JS file.
+ const contentType = response.headers.get('content-type')
+ if (
+ response.status === 404 ||
+ (contentType != null && contentType.indexOf('javascript') === -1)
+ ) {
+ // No service worker found. Probably a different app. Reload the page.
+ navigator.serviceWorker.ready.then(registration => {
+ registration.unregister().then(() => {
+ window.location.reload()
+ })
+ })
+ } else {
+ // Service worker found. Proceed as normal.
+ registerValidSW(swUrl, config)
+ }
+ })
+ .catch(() => {
+ console.log(
+ 'No internet connection found. App is running in offline mode.'
+ )
+ })
+}
+
+export function unregister () {
+ if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.ready
+ .then(registration => {
+ registration.unregister()
+ })
+ .catch(error => {
+ console.error(error.message)
+ })
+ }
+}
diff --git a/blocks/eda-frontend/src/setupTests.js b/blocks/eda-frontend/src/setupTests.js
new file mode 100644
index 00000000..2eb59b05
--- /dev/null
+++ b/blocks/eda-frontend/src/setupTests.js
@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom/extend-expect'
diff --git a/blocks/eda-frontend/src/static/dot.gif b/blocks/eda-frontend/src/static/dot.gif
new file mode 100644
index 00000000..08b99476
--- /dev/null
+++ b/blocks/eda-frontend/src/static/dot.gif
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery0.png b/blocks/eda-frontend/src/static/gallery/gallery0.png
new file mode 100644
index 00000000..36ceeb8a
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery0.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery1.png b/blocks/eda-frontend/src/static/gallery/gallery1.png
new file mode 100644
index 00000000..a415168d
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery1.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery2.png b/blocks/eda-frontend/src/static/gallery/gallery2.png
new file mode 100644
index 00000000..881bc8e9
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery2.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery3.png b/blocks/eda-frontend/src/static/gallery/gallery3.png
new file mode 100644
index 00000000..af4477a9
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery3.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery4.png b/blocks/eda-frontend/src/static/gallery/gallery4.png
new file mode 100644
index 00000000..9f4f9ec0
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery4.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/gallery/gallery5.png b/blocks/eda-frontend/src/static/gallery/gallery5.png
new file mode 100644
index 00000000..3314e126
--- /dev/null
+++ b/blocks/eda-frontend/src/static/gallery/gallery5.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/google.png b/blocks/eda-frontend/src/static/google.png
new file mode 100644
index 00000000..f796db58
--- /dev/null
+++ b/blocks/eda-frontend/src/static/google.png
Binary files differ
diff --git a/blocks/eda-frontend/src/static/grid.gif b/blocks/eda-frontend/src/static/grid.gif
new file mode 100644
index 00000000..a82a20d0
--- /dev/null
+++ b/blocks/eda-frontend/src/static/grid.gif
Binary files differ
diff --git a/blocks/eda-frontend/src/static/logo.png b/blocks/eda-frontend/src/static/logo.png
new file mode 100644
index 00000000..233f2354
--- /dev/null
+++ b/blocks/eda-frontend/src/static/logo.png
Binary files differ
diff --git a/blocks/eda-frontend/src/theme.js b/blocks/eda-frontend/src/theme.js
new file mode 100644
index 00000000..3db04607
--- /dev/null
+++ b/blocks/eda-frontend/src/theme.js
@@ -0,0 +1,22 @@
+import { red } from '@material-ui/core/colors'
+import { createMuiTheme } from '@material-ui/core/styles'
+
+// A custom Material UI theme for this application
+const theme = createMuiTheme({
+ palette: {
+ primary: {
+ main: '#556cd6'
+ },
+ secondary: {
+ main: '#19857b'
+ },
+ error: {
+ main: red.A400
+ },
+ background: {
+ default: '#fff'
+ }
+ }
+})
+
+export default theme
diff --git a/blocks/eda-frontend/src/utils/Api.js b/blocks/eda-frontend/src/utils/Api.js
new file mode 100644
index 00000000..4fd46daf
--- /dev/null
+++ b/blocks/eda-frontend/src/utils/Api.js
@@ -0,0 +1,7 @@
+// Creating a new instance of axios for custom API config.
+import axios from 'axios'
+
+export default axios.create({
+ baseURL: '/api/',
+ responseType: 'json'
+})
diff --git a/blocks/eda-frontend/src/utils/GallerySchSample.js b/blocks/eda-frontend/src/utils/GallerySchSample.js
new file mode 100644
index 00000000..768ddf47
--- /dev/null
+++ b/blocks/eda-frontend/src/utils/GallerySchSample.js
@@ -0,0 +1,54 @@
+// Sample schematics in gallery section are stored below as array of JS objects.
+
+const GallerySchSample = [
+ {
+ save_id: 'gallery0',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="250" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="700" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="700" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R2.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="700" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R2&#xA;2k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="700" y="430" width="16" height="100" as="geometry"><mxPoint x="-2" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="2k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="9" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R2.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;2k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="700" y="430" width="16" height="100" as="geometry"><mxPoint x="-2" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="2k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="10" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;2k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="700" y="430" width="16" height="100" as="geometry"><mxPoint x="-2" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="2k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="11" edge="1" node="V1.1" sourceVertex="3" targetVertex="6" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="310" y="200"/><mxPoint x="708" y="200"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="12" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="480" y="590" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="13" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="12" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="480" y="590" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="14" edge="1" node="0" sourceVertex="4" targetVertex="13" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="310" y="619"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="16" edge="1" node="0" sourceVertex="10" targetVertex="13" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="710" y="640"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R2.1" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="17" edge="1" node="R2.1" sourceVertex="9" targetVertex="7" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'Voltage Divider',
+ description: 'A voltage divider is a simple circuit which turns a large voltage into a smaller one. Using just two series resistors and an input voltage.',
+ media: 'gallery0.png',
+ shared: true
+ },
+ {
+ save_id: 'gallery1',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="260" y="260" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="260" y="260" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="260" y="260" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="710" y="270" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="710" y="270" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="710" y="270" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="688" y="420" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="9" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="688" y="420" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="10" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="688" y="420" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="11" edge="1" node="V1.1" sourceVertex="3" targetVertex="6" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="320" y="160"/><mxPoint x="320" y="160"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="12" edge="1" node="R1.2" sourceVertex="7" targetVertex="9" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="13" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="300" y="580" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="14" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="13" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="300" y="580" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="15" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="698" y="610" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="16" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="15" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="698" y="610" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="17" edge="1" node="0" sourceVertex="10" targetVertex="16" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="18" edge="1" node="0" sourceVertex="4" targetVertex="14" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'RC Circuit',
+ description: 'An RC circuit is a circuit with both a resistor (R) and a capacitor (C). RC circuits are freqent element in electronic devices.',
+ media: 'gallery1.png',
+ shared: true
+ },
+ {
+ save_id: 'gallery2',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;dc 0 PULSE (0 5 1u 1u 1u 1 1)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="250" y="240.00000000000003" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 PULSE (0 5 1u 1u 1u 1 1)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;dc 0 PULSE (0 5 1u 1u 1u 1 1)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="240.00000000000003" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 PULSE (0 5 1u 1u 1u 1 1)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;dc 0 PULSE (0 5 1u 1u 1u 1 1)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="240.00000000000003" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 PULSE (0 5 1u 1u 1u 1 1)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="514" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="514" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="514" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C1&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="492.00000000000006" y="360" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="9" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="492.00000000000006" y="360" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="10" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="492.00000000000006" y="360" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C2&#xA;100n" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="638" y="370" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="100n" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="12" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R2.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C2&#xA;100n" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="638" y="370" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="100n" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="13" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C2&#xA;100n" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="638" y="370" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="100n" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R2&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="660" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="15" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="660" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="16" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R2.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="660" y="200.50000000000003" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="17" edge="1" node="V1.1" sourceVertex="3" targetVertex="6" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="160" y="240"/><mxPoint x="160" y="166"/><mxPoint x="523" y="166"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="18" edge="1" node="R1.2" sourceVertex="7" targetVertex="9" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="20" edge="1" node="R1.2" sourceVertex="15" targetVertex="18" tarx="520" tary="330" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="520" y="330" as="targetPoint"/><Array as="points"><mxPoint x="670" y="201"/><mxPoint x="670" y="170"/><mxPoint x="600" y="170"/><mxPoint x="600" y="360"/><mxPoint x="570" y="360"/><mxPoint x="570" y="330"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R2.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="21" edge="1" node="R2.2" sourceVertex="16" targetVertex="12" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="22" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="290" y="419" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="23" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="22" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="290" y="419" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="24" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="502" y="480" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="25" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="24" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="502" y="480" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="26" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="648" y="510" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="27" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="26" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="648" y="510" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="28" edge="1" node="0" sourceVertex="4" targetVertex="23" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="29" edge="1" node="0" sourceVertex="10" targetVertex="25" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="30" edge="1" node="0" sourceVertex="13" targetVertex="27" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'Dual RC Ladder',
+ description: 'This is an dual RC ladder circuit with Passive components. The input is a voltage waveform (a pulse) versus time, and the output is a waveform as well. ',
+ media: 'gallery2.png',
+ shared: true
+ },
+ {
+ save_id: 'gallery3',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;dc 0 ac 1 sin(0 1m 500)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="70" y="440" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 ac 1 sin(0 1m 500)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;dc 0 ac 1 sin(0 1m 500)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="70" y="440" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 ac 1 sin(0 1m 500)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;dc 0 ac 1 sin(0 1m 500)" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="70" y="440" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="dc 0 ac 1 sin(0 1m 500)" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="250" y="340" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="C1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="340" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="250" y="340" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V1.1" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="8" edge="1" node="V1.1" sourceVertex="3" targetVertex="7" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="Q2" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="9" vertex="1" connectable="0" Component="1" CellType="Component" symbol="Q" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="620" y="300" width="80" height="80" as="geometry"/><Object id="610" name="BC307" svg_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A_thumbnail.svg" symbol_prefix="Q" component_library="http://localhost/api/libraries/12/" description="100mA Ic, 45V Vce, Epitaxial Silicon PNP Transistor, TO-92" data_link="http://www.onsemi.com/pub_link/Collateral/BC307-D.PDF" full_name="Q-BC307-1-A" keyword="Epitaxial Silicon PNP Transistor" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="Q2" NAME="BC307" N1="" N2="" N3="" EXTRA_EXPRESSION="" MODEL=".model BC546B npn ( IS=7.59E-15 VAF=73.4 BF=480 IKF=0.0962 NE=1.2665&#xA;+ ISE=3.278E-15 IKR=0.03 ISC=2.00E-13 NC=1.2 NR=1 BR=5 RC=0.25 CJC=6.33E-12&#xA;+ FC=0.5 MJC=0.33 VJC=0.65 CJE=1.25E-11 MJE=0.55 VJE=0.65 TF=4.26E-10&#xA;+ ITF=0.6 VTF=3 XTF=20 RB=100 IRB=0.0001 RBM=10 RE=0.5 TR=1.50E-07)" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="10" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R2.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="Q2" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="9" vertex="1" connectable="0" Component="1" CellType="Component" symbol="Q" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="620" y="300" width="80" height="80" as="geometry"/><Object id="610" name="BC307" svg_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A_thumbnail.svg" symbol_prefix="Q" component_library="http://localhost/api/libraries/12/" description="100mA Ic, 45V Vce, Epitaxial Silicon PNP Transistor, TO-92" data_link="http://www.onsemi.com/pub_link/Collateral/BC307-D.PDF" full_name="Q-BC307-1-A" keyword="Epitaxial Silicon PNP Transistor" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="Q2" NAME="BC307" N1="" N2="" N3="" EXTRA_EXPRESSION="" MODEL=".model BC546B npn ( IS=7.59E-15 VAF=73.4 BF=480 IKF=0.0962 NE=1.2665&#xA;+ ISE=3.278E-15 IKR=0.03 ISC=2.00E-13 NC=1.2 NR=1 BR=5 RC=0.25 CJC=6.33E-12&#xA;+ FC=0.5 MJC=0.33 VJC=0.65 CJE=1.25E-11 MJE=0.55 VJE=0.65 TF=4.26E-10&#xA;+ ITF=0.6 VTF=3 XTF=20 RB=100 IRB=0.0001 RBM=10 RE=0.5 TR=1.50E-07)" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=left;verticalAlign=bottom;rotation=0" id="11" vertex="1" Pin="1" pinType="Input" PinNumber="2" ConnectedNode="C1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="Q2" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="9" vertex="1" connectable="0" Component="1" CellType="Component" symbol="Q" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="620" y="300" width="80" height="80" as="geometry"/><Object id="610" name="BC307" svg_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A_thumbnail.svg" symbol_prefix="Q" component_library="http://localhost/api/libraries/12/" description="100mA Ic, 45V Vce, Epitaxial Silicon PNP Transistor, TO-92" data_link="http://www.onsemi.com/pub_link/Collateral/BC307-D.PDF" full_name="Q-BC307-1-A" keyword="Epitaxial Silicon PNP Transistor" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="Q2" NAME="BC307" N1="" N2="" N3="" EXTRA_EXPRESSION="" MODEL=".model BC546B npn ( IS=7.59E-15 VAF=73.4 BF=480 IKF=0.0962 NE=1.2665&#xA;+ ISE=3.278E-15 IKR=0.03 ISC=2.00E-13 NC=1.2 NR=1 BR=5 RC=0.25 CJC=6.33E-12&#xA;+ FC=0.5 MJC=0.33 VJC=0.65 CJE=1.25E-11 MJE=0.55 VJE=0.65 TF=4.26E-10&#xA;+ ITF=0.6 VTF=3 XTF=20 RB=100 IRB=0.0001 RBM=10 RE=0.5 TR=1.50E-07)" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="3" style="align=right;verticalAlign=bottom;rotation=0" id="12" vertex="1" Pin="1" pinType="Output" PinNumber="3" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="79" width="0.5" height="0.5" as="geometry"/><mxCell value="Q2" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="9" vertex="1" connectable="0" Component="1" CellType="Component" symbol="Q" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="620" y="300" width="80" height="80" as="geometry"/><Object id="610" name="BC307" svg_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/Transistor_BJT/Q-BC307-1-A_thumbnail.svg" symbol_prefix="Q" component_library="http://localhost/api/libraries/12/" description="100mA Ic, 45V Vce, Epitaxial Silicon PNP Transistor, TO-92" data_link="http://www.onsemi.com/pub_link/Collateral/BC307-D.PDF" full_name="Q-BC307-1-A" keyword="Epitaxial Silicon PNP Transistor" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="Q2" NAME="BC307" N1="" N2="" N3="" EXTRA_EXPRESSION="" MODEL=".model BC546B npn ( IS=7.59E-15 VAF=73.4 BF=480 IKF=0.0962 NE=1.2665&#xA;+ ISE=3.278E-15 IKR=0.03 ISC=2.00E-13 NC=1.2 NR=1 BR=5 RC=0.25 CJC=6.33E-12&#xA;+ FC=0.5 MJC=0.33 VJC=0.65 CJE=1.25E-11 MJE=0.55 VJE=0.65 TF=4.26E-10&#xA;+ ITF=0.6 VTF=3 XTF=20 RB=100 IRB=0.0001 RBM=10 RE=0.5 TR=1.50E-07)" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C1.1" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="13" edge="1" node="C1.1" sourceVertex="6" targetVertex="11" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="110" y="610" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="15" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="110" y="610" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="16" edge="1" node="0" sourceVertex="4" targetVertex="15" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="17" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="660" y="610" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="18" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="17" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="660" y="610" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="19" edge="1" node="0" sourceVertex="12" targetVertex="18" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="20" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="380" y="460" width="16" height="100" as="geometry"><mxPoint x="-2" y="-1" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="21" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="20" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="380" y="460" width="16" height="100" as="geometry"><mxPoint x="-2" y="-1" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="22" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="20" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="380" y="460" width="16" height="100" as="geometry"><mxPoint x="-2" y="-1" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="24" edge="1" node="0" sourceVertex="22" targetVertex="19" tarx="680" tary="620" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="680" y="620" as="targetPoint"/><Array as="points"><mxPoint x="388" y="620"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R2&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="25" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="672" y="110" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="26" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="25" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="672" y="110" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="27" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R2.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R2&#xA;10k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="25" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="672" y="110" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R2" NAME="R" N1="" N2="" VALUE="10k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R2.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="28" edge="1" node="R2.2" sourceVertex="27" targetVertex="10" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="R3&#xA;68k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="29" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="430" y="110" width="16" height="100" as="geometry"><mxPoint x="-11" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R3" NAME="R" N1="" N2="" VALUE="68k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="30" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="V2.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R3&#xA;68k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="29" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="430" y="110" width="16" height="100" as="geometry"><mxPoint x="-11" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R3" NAME="R" N1="" N2="" VALUE="68k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="31" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R3&#xA;68k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="29" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="430" y="110" width="16" height="100" as="geometry"><mxPoint x="-11" as="offset"/></mxGeometry><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R3" NAME="R" N1="" N2="" VALUE="68k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V2&#xA;5" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="33" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="70" y="90" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V2" NAME="VSOURCE" N1="" N2="" VALUE="5" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="34" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V2.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V2&#xA;5" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="33" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="70" y="90" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V2" NAME="VSOURCE" N1="" N2="" VALUE="5" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="35" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V2&#xA;5" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="33" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="70" y="90" width="120" height="120" as="geometry"/><Object id="317" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/8/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V2" NAME="VSOURCE" N1="" N2="" VALUE="5" EXTRA_EXPRESSION="" MODEL="" UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V2.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="36" edge="1" node="V2.1" sourceVertex="34" targetVertex="30" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="V2.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="37" edge="1" node="V2.1" sourceVertex="26" targetVertex="36" tarx="440" tary="90" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="440" y="90" as="targetPoint"/><Array as="points"><mxPoint x="680" y="90"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="38" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="110" y="230" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="39" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDS" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="38" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="110" y="230" width="40" height="80" as="geometry"/><Object id="51" name="GNDS" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDS-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/2/" description="Power symbol creates a global label with name &quot;GNDS&quot; , signal ground" data_link="" full_name="PWR-GNDS-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDS" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="40" edge="1" node="0" sourceVertex="35" targetVertex="39" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="C1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="41" edge="1" node="C1.1" sourceVertex="21" targetVertex="13" tarx="560" tary="350" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="560" y="350" as="targetPoint"/></mxGeometry><Object as="properties"/></mxCell><mxCell value="C1.1" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="42" edge="1" node="C1.1" sourceVertex="31" targetVertex="13" tarx="570" tary="340" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="570" y="340" as="targetPoint"/><Array as="points"><mxPoint x="570" y="270"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="C3&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="43" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="850" y="270" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C3" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="44" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C3&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="43" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="850" y="270" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C3" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="45" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="C3.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C3&#xA;10u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="43" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="850" y="270" width="60" height="100" as="geometry"/><Object id="319" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/8/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C3" NAME="CAP" N1="" N2="" VALUE="10u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R2.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="46" edge="1" node="R2.2" sourceVertex="44" targetVertex="28" tarx="680" tary="270" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="680" y="270" as="targetPoint"/></mxGeometry><Object as="properties"/></mxCell><mxCell value="R4&#xA;100k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="47" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="872" y="460" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R4" NAME="R" N1="" N2="" VALUE="100k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="48" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="C3.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R4&#xA;100k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="47" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="872" y="460" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R4" NAME="R" N1="" N2="" VALUE="100k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="49" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R4&#xA;100k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="47" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="872" y="460" width="16" height="100" as="geometry"/><Object id="321" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/8/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R4" NAME="R" N1="" N2="" VALUE="100k" EXTRA_EXPRESSION="" MODEL="" UNIT="K" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C3.2" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="50" edge="1" node="C3.2" sourceVertex="45" targetVertex="48" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="880" y="410"/><mxPoint x="889" y="410"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="51" edge="1" node="0" sourceVertex="49" targetVertex="19" tarx="680" tary="640" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="680" y="640" as="targetPoint"/><Array as="points"><mxPoint x="880" y="660"/></Array></mxGeometry><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'Bipolar Amplifier',
+ description: 'A basic BJT amplifier has a very high gain that may vary widely from one transistor to the next. A NPN bipolar transistor is the used as amplifying device.',
+ media: 'gallery3.png',
+ shared: true
+ },
+ {
+ save_id: 'gallery4',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="230" y="220" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="230" y="220" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="230" y="220" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="510" y="220" width="16" height="100" as="geometry"><mxPoint x="3" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="V1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="510" y="220" width="16" height="100" as="geometry"><mxPoint x="3" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="510" y="220" width="16" height="100" as="geometry"><mxPoint x="3" as="offset"/></mxGeometry><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="D1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="D" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="580" y="370" width="80.5" height="40" as="geometry"/><Object id="839" name="DIODE" svg_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A_thumbnail.svg" symbol_prefix="D" component_library="http://localhost/api/libraries/10/" description="Diode symbol for simulation only. Pin order incompatible with official kicad footprints" data_link="~" full_name="D-DIODE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="D1" NAME="DIODE" N1="" N2="" EXTRA_EXPRESSION="" MODEL=".model mydiode D" as="properties"/></mxCell><mxCell value="1" style="align=left;verticalAlign=bottom;rotation=0" id="9" vertex="1" Pin="1" pinType="Input" PinNumber="1" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry y="19" width="0.5" height="0.5" as="geometry"/><mxCell value="D1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="D" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="580" y="370" width="80.5" height="40" as="geometry"/><Object id="839" name="DIODE" svg_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A_thumbnail.svg" symbol_prefix="D" component_library="http://localhost/api/libraries/10/" description="Diode symbol for simulation only. Pin order incompatible with official kicad footprints" data_link="~" full_name="D-DIODE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="D1" NAME="DIODE" N1="" N2="" EXTRA_EXPRESSION="" MODEL=".model mydiode D" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="10" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="80" y="19" width="0.5" height="0.5" as="geometry"/><mxCell value="D1" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="D" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="580" y="370" width="80.5" height="40" as="geometry"/><Object id="839" name="DIODE" svg_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/D-DIODE-1-A_thumbnail.svg" symbol_prefix="D" component_library="http://localhost/api/libraries/10/" description="Diode symbol for simulation only. Pin order incompatible with official kicad footprints" data_link="~" full_name="D-DIODE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="D1" NAME="DIODE" N1="" N2="" EXTRA_EXPRESSION="" MODEL=".model mydiode D" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="270" y="470" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="12" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="270" y="470" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="13" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="730" y="470" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="14" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="13" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="730" y="470" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="V1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="15" edge="1" node="V1.1" sourceVertex="3" targetVertex="6" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="290" y="200"/><mxPoint x="520" y="200"/><mxPoint x="520" y="200"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="16" edge="1" node="0" sourceVertex="4" targetVertex="12" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="17" edge="1" node="R1.2" sourceVertex="7" targetVertex="9" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="520" y="319"/><mxPoint x="520" y="389"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="18" edge="1" node="0" sourceVertex="10" targetVertex="14" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'Shunt Clipper',
+ description: 'A Clipper circuit in which the diode is connected in shunt to the input signal and that attenuates the positive portions of the waveform, is termed as Positive Shunt Clipper.',
+ media: 'gallery4.png',
+ shared: true
+ },
+ {
+ save_id: 'gallery5',
+ data_dump: '<mxGraphModel><root><mxCell id="0" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell id="1" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><Object as="properties"/></mxCell><mxCell value="V1&#xA;DC 0 SIN 0 1 200" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="190" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="DC 0 SIN 0 1 200" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="3" vertex="1" Pin="1" pinType="Input" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;DC 0 SIN 0 1 200" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="190" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="DC 0 SIN 0 1 200" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="4" vertex="1" Pin="1" pinType="Input" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="60" y="119" width="0.5" height="0.5" as="geometry"/><mxCell value="V1&#xA;DC 0 SIN 0 1 200" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="2" vertex="1" connectable="0" Component="1" CellType="Component" symbol="V" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="190" y="270" width="120" height="120" as="geometry"/><Object id="835" name="VSOURCE" svg_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/V-VSOURCE-1-A_thumbnail.svg" symbol_prefix="V" component_library="http://localhost/api/libraries/10/" description="Voltage source symbol for simulation only" data_link="~" full_name="V-VSOURCE-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="V1" NAME="VSOURCE" N1="" N2="" VALUE="DC 0 SIN 0 1 200" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="V" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C1&#xA;2u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="520" y="290" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="2u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="6" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;2u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="520" y="290" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="2u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="7" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C1&#xA;2u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="5" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="520" y="290" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C1" NAME="CAP" N1="" N2="" VALUE="2u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="450" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="9" vertex="1" Pin="1" pinType="Output" PinNumber="1" ConnectedNode="R1.1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="450" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="10" vertex="1" Pin="1" pinType="Output" PinNumber="2" ConnectedNode="R1.2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="8" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="R1&#xA;1k" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="8" vertex="1" connectable="0" Component="1" CellType="Component" symbol="R" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="450" y="290" width="16" height="100" as="geometry"/><Object id="836" name="R" svg_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/R-R-1-A_thumbnail.svg" symbol_prefix="R" component_library="http://localhost/api/libraries/10/" description="Resistor symbol for simulation only" data_link="~" full_name="R-R-1-A" keyword="resistor simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="R1" NAME="R" N1="" N2="" VALUE="1k" EXTRA_EXPRESSION="" MODEL="" VALUE_UNIT="Ohm" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="C2&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="640" y="440" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="12" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" width="0.5" height="0.5" as="geometry"/><mxCell value="C2&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="640" y="440" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="2" style="align=right;verticalAlign=bottom;rotation=0" id="13" vertex="1" Pin="1" pinType="Output" PinNumber="2" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="30" y="99" width="0.5" height="0.5" as="geometry"/><mxCell value="C2&#xA;1u" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="11" vertex="1" connectable="0" Component="1" CellType="Component" symbol="C" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="640" y="440" width="60" height="100" as="geometry"/><Object id="834" name="CAP" svg_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/pspice/C-CAP-1-A_thumbnail.svg" symbol_prefix="C" component_library="http://localhost/api/libraries/10/" description="Capacitor symbol for simulation only" data_link="~" full_name="C-CAP-1-A" keyword="simulation" as="CompObject"><Array as="alternate_component"/></Object><Object PREFIX="C2" NAME="CAP" N1="" N2="" VALUE="1u" EXTRA_EXPRESSION="" MODEL="" UNIT="F" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="230" y="550" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="15" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="14" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="230" y="550" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="16" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="650" y="550" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><mxCell value="1" style="align=right;verticalAlign=up;rotation=0" id="17" vertex="1" Pin="1" pinType="Output" PinNumber="1" CellType="This is where you say what the vertex is" Component="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0"><mxGeometry x="20" y="39" width="0.5" height="0.5" as="geometry"/><mxCell value="GNDA" style="shape=image;fontColor=blue;image=../kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg;imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25" id="16" vertex="1" connectable="0" Component="1" CellType="Component" symbol="PWR" pinType=" " Pin="0" PinNumber="0" PinName="" sourceVertex="0" targetVertex="0" tarx="0" tary="0" as="ParentComponent"><mxGeometry x="650" y="550" width="40" height="80" as="geometry"/><Object id="997" name="GNDA" svg_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A.svg" thumbnail_path="kicad-symbols/symbol_svgs/power/PWR-GNDA-1-A_thumbnail.svg" symbol_prefix="PWR" component_library="http://localhost/api/libraries/14/" description="Power symbol creates a global label with name &quot;GNDA&quot; , analog ground" data_link="" full_name="PWR-GNDA-1-A" keyword="power-flag" as="CompObject"><Array as="alternate_component"/></Object><Object NAME="GNDA" as="properties"/></mxCell><Object as="properties"/></mxCell><mxCell value="0" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="18" edge="1" node="0" sourceVertex="4" targetVertex="15" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="19" edge="1" node="R1.2" sourceVertex="10" targetVertex="7" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="460" y="410"/><mxPoint x="540" y="410"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R1.1" style="exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="20" edge="1" node="R1.1" sourceVertex="9" targetVertex="6" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="460" y="300"/><mxPoint x="460" y="270"/><mxPoint x="551" y="270"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R1.1" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="21" edge="1" node="R1.1" sourceVertex="3" targetVertex="20" tarx="500" tary="270" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="500" y="270" as="targetPoint"/><Array as="points"><mxPoint x="250" y="220"/><mxPoint x="500" y="240"/></Array></mxGeometry><Object as="properties"/></mxCell><mxCell value="R1.2" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" id="22" edge="1" node="R1.2" sourceVertex="12" targetVertex="19" tarx="510" tary="410" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName=""><mxGeometry relative="1" as="geometry"><mxPoint x="510" y="410" as="targetPoint"/></mxGeometry><Object as="properties"/></mxCell><mxCell value="0" style="exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" id="23" edge="1" node="0" sourceVertex="13" targetVertex="17" CellType="This is where you say what the vertex is" pinType=" " Component="0" Pin="0" PinNumber="0" PinName="" tarx="0" tary="0"><mxGeometry relative="1" as="geometry"/><Object as="properties"/></mxCell></root></mxGraphModel>',
+ name: 'RC Circuit ( Parallel )',
+ description: 'An RC circuit is a circuit with both a resistor (R) and a capacitor (C). RC circuits are freqent element in electronic devices.',
+ media: 'gallery5.png',
+ shared: true
+ }
+]
+
+export default GallerySchSample