diff --git a/.gitignore b/.gitignore
index 657469e8..b05c94c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,6 @@
 pull_locales_login.rb
 .vscode
 node_modules/
-package-lock.json
 yarn.lock
 *.zip
 .eslintcache
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 004fee86..bacb8089 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -445,6 +445,10 @@
     "message": "Press a hotkey",
     "description": "Placeholder text of inputbox in keymap help popup on the edit style page. Must be very short"
   },
+  "hostDisabled": {
+    "message": "This host has been disabled due to a bug in the current version of the browser being used",
+    "description": "Tooltip for cloud host disabled"
+  },
   "importAppendLabel": {
     "message": "Append to style",
     "description": "Label for the button to import a style and append to the existing sections"
@@ -1540,6 +1544,9 @@
   "syncDropboxStyles": {
     "message": "Dropbox Export"
   },
+  "syncDropboxDeprecated": {
+    "message": "Dropbox import/export is replaced by a more advanced style sync in the options page."
+  },
   "retrieveDropboxSync": {
     "message": "Dropbox Import"
   },
diff --git a/manage.html b/manage.html
index 05903e91..76e0c7ce 100644
--- a/manage.html
+++ b/manage.html
@@ -170,12 +170,6 @@
   
   
   
-
-  
-  
-  
-  
-  
 
 
 
@@ -383,7 +377,7 @@
 
             
           
 
@@ -395,7 +389,7 @@
 
             
           
 
diff --git a/manage/manage.css b/manage/manage.css
index da65d2e0..74375b25 100644
--- a/manage/manage.css
+++ b/manage/manage.css
@@ -1302,3 +1302,14 @@ input[id^="manage.newUI"] {
     margin-left: -2px;
   }
 }
+
+/* Deprecated dropbox backup (dropbox-sync) */
+#sync-dropbox-export,
+#sync-dropbox-import {
+  opacity: 0.5;
+  cursor: not-allowed;
+}
+#backup-buttons .dropdown-content #sync-dropbox-export:hover,
+#backup-buttons .dropdown-content #sync-dropbox-import:hover {
+  background: transparent;
+}
diff --git a/options/options.js b/options/options.js
index f0f4525f..d5ab0ce3 100644
--- a/options/options.js
+++ b/options/options.js
@@ -9,6 +9,13 @@ setupRadioButtons();
 enforceInputRange($('#popupWidth'));
 setTimeout(splitLongTooltips);
 
+// TODO: add max version to re-enable once crbug.com/996859 is resolved
+if (!FIREFOX && CHROME >= 3809) {
+  const dropboxOption = $('option[value="dropbox"]');
+  dropboxOption.disabled = true;
+  dropboxOption.setAttribute('title', t('hostDisabled'));
+}
+
 if (CHROME_HAS_BORDER_BUG) {
   const borderOption = $('.chrome-no-popup-border');
   if (borderOption) {
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..1526fca3
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,9819 @@
+{
+  "name": "Stylus",
+  "version": "1.5.6",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/polyfill": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz",
+      "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.6.5",
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
+      "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
+      "dev": true,
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@babel/runtime-corejs2": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.5.5.tgz",
+      "integrity": "sha512-FYATQVR00NSNi7mUfpPDp7E8RYMXDuO8gaix7u/w3GekfUinKgX1AcTxs7SoiEmoEW9mbpjrwqWSW6zCmw5h8A==",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.6.5",
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@cliqz-oss/firefox-client": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz",
+      "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==",
+      "dev": true,
+      "requires": {
+        "colors": "0.5.x",
+        "js-select": "~0.6.0"
+      }
+    },
+    "@cliqz-oss/node-firefox-connect": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz",
+      "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==",
+      "dev": true,
+      "requires": {
+        "@cliqz-oss/firefox-client": "0.3.1",
+        "es6-promise": "^2.0.1"
+      },
+      "dependencies": {
+        "es6-promise": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
+          "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
+          "dev": true
+        }
+      }
+    },
+    "@eight04/read-write-lock": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/@eight04/read-write-lock/-/read-write-lock-0.1.0.tgz",
+      "integrity": "sha512-a/94gK+/GRZeTyFmJCIPlWGlgpOT3qmIRp5ByJkoxtkpspSsMbdYZKd/wNXdPYf4auRyepEM3+EkawQnscjJXQ==",
+      "dev": true
+    },
+    "@sindresorhus/is": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+      "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+      "dev": true
+    },
+    "@snyk/cli-interface": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.0.3.tgz",
+      "integrity": "sha512-tQxCCEdX8+r71fYoOZB4jaPYUxrhWsdPAuQkbbsge9Vd22Gzy6iCVpLX2Ai0JKkqZ0tLU3cgNB7gulzce6fdAg==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.3"
+      }
+    },
+    "@snyk/composer-lockfile-parser": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@snyk/composer-lockfile-parser/-/composer-lockfile-parser-1.0.3.tgz",
+      "integrity": "sha512-hb+6E7kMzWlcwfe//ILDoktBPKL2a3+RnJT/CXnzRXaiLQpsdkf5li4q2v0fmvd+4v7L3tTN8KM+//lJyviEkg==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.13"
+      }
+    },
+    "@snyk/dep-graph": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/@snyk/dep-graph/-/dep-graph-1.12.0.tgz",
+      "integrity": "sha512-n7+PlHn3SqznHgsCpeBRfEvU1oiQydoGkXQlnSB2+tfImiKXvY7YZbrg4wlbvYgylYiTbpCi5CpPNkJG14S+UQ==",
+      "dev": true,
+      "requires": {
+        "graphlib": "^2.1.5",
+        "lodash": "^4.7.14",
+        "object-hash": "^1.3.1",
+        "semver": "^6.0.0",
+        "source-map-support": "^0.5.11",
+        "tslib": "^1.9.3"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
+      }
+    },
+    "@snyk/gemfile": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@snyk/gemfile/-/gemfile-1.2.0.tgz",
+      "integrity": "sha512-nI7ELxukf7pT4/VraL4iabtNNMz8mUo7EXlqCFld8O5z6mIMLX9llps24iPpaIZOwArkY3FWA+4t+ixyvtTSIA==",
+      "dev": true
+    },
+    "@szmarczak/http-timer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+      "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+      "dev": true,
+      "requires": {
+        "defer-to-connect": "^1.0.1"
+      }
+    },
+    "@types/agent-base": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@types/agent-base/-/agent-base-4.2.0.tgz",
+      "integrity": "sha512-8mrhPstU+ZX0Ugya8tl5DsDZ1I5ZwQzbL/8PA0z8Gj0k9nql7nkaMzmPVLj+l/nixWaliXi+EBiLA8bptw3z7Q==",
+      "dev": true,
+      "requires": {
+        "@types/events": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/bunyan": {
+      "version": "1.8.6",
+      "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.6.tgz",
+      "integrity": "sha512-YiozPOOsS6bIuz31ilYqR5SlLif4TBWsousN2aCWLi5233nZSX19tFbcQUPdR7xJ8ypPyxkCGNxg0CIV5n9qxQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/debug": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz",
+      "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==",
+      "dev": true
+    },
+    "@types/events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+      "dev": true
+    },
+    "@types/minimatch": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "12.7.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz",
+      "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==",
+      "dev": true
+    },
+    "@types/restify": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/@types/restify/-/restify-4.3.6.tgz",
+      "integrity": "sha512-4l4f0EXnleXQttlhRCXtTuJ8UelsKiAKIK2AAEd2epBHu41aEbM0U2z6E5tUrNwlbxz7qaNBISduGMeg+G3PaA==",
+      "dev": true,
+      "requires": {
+        "@types/bunyan": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/semver": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+      "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
+      "dev": true
+    },
+    "@types/xml2js": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.3.tgz",
+      "integrity": "sha512-Pv2HGRE4gWLs31In7nsyXEH4uVVsd0HNV9i2dyASvtDIlOtSTr1eczPLDpdEuyv5LWH5LT20GIXwPjkshKWI1g==",
+      "dev": true,
+      "requires": {
+        "@types/events": "*",
+        "@types/node": "*"
+      }
+    },
+    "@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+      "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
+      "dev": true
+    },
+    "JSONSelect": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz",
+      "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=",
+      "dev": true
+    },
+    "JSV": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
+      "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=",
+      "dev": true
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "acorn": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
+      "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
+      "dev": true
+    },
+    "acorn-jsx": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
+      "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
+      "dev": true
+    },
+    "adbkit": {
+      "version": "2.11.1",
+      "resolved": "https://registry.npmjs.org/adbkit/-/adbkit-2.11.1.tgz",
+      "integrity": "sha512-hDTiRg9NX3HQt7WoDAPCplUpvzr4ZzQa2lq7BdTTJ/iOZ6O7YNAs6UYD8sFAiBEcYHDRIyq3cm9sZP6uZnhvXw==",
+      "dev": true,
+      "requires": {
+        "adbkit-logcat": "^1.1.0",
+        "adbkit-monkey": "~1.0.1",
+        "bluebird": "~2.9.24",
+        "commander": "^2.3.0",
+        "debug": "~2.6.3",
+        "node-forge": "^0.7.1",
+        "split": "~0.3.3"
+      },
+      "dependencies": {
+        "bluebird": {
+          "version": "2.9.34",
+          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz",
+          "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=",
+          "dev": true
+        },
+        "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"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "adbkit-logcat": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz",
+      "integrity": "sha1-Adf5sM75CTowvLOwB+//MBUIli8=",
+      "dev": true
+    },
+    "adbkit-monkey": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz",
+      "integrity": "sha1-8pG+cBou/FZ6Y/x6pq/N7TFDC+E=",
+      "dev": true,
+      "requires": {
+        "async": "~0.2.9"
+      },
+      "dependencies": {
+        "async": {
+          "version": "0.2.10",
+          "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+          "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+          "dev": true
+        }
+      }
+    },
+    "addons-linter": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-1.10.0.tgz",
+      "integrity": "sha512-2i2qSayVPx4h1Aa2ZTdQlpgmjcCNIHZ4AJQS8V/QsBXIdmXl+Djmeyr096bjaC3Usq0rZfYhGgFdwR1dgHVItw==",
+      "dev": true,
+      "requires": {
+        "ajv": "6.10.0",
+        "ajv-merge-patch": "4.1.0",
+        "chalk": "2.4.2",
+        "cheerio": "1.0.0-rc.3",
+        "columnify": "1.5.4",
+        "common-tags": "1.8.0",
+        "crx-parser": "0.1.2",
+        "deepmerge": "3.2.0",
+        "dispensary": "0.37.0",
+        "es6-promisify": "6.0.1",
+        "eslint": "5.16.0",
+        "eslint-plugin-no-unsafe-innerhtml": "1.0.16",
+        "eslint-visitor-keys": "1.0.0",
+        "espree": "5.0.1",
+        "esprima": "4.0.1",
+        "first-chunk-stream": "3.0.0",
+        "fluent-syntax": "0.13.0",
+        "fsevents": "2.0.7",
+        "glob": "7.1.4",
+        "is-mergeable-object": "1.1.0",
+        "jed": "1.1.1",
+        "mdn-browser-compat-data": "0.0.82",
+        "os-locale": "3.1.0",
+        "pino": "5.12.6",
+        "po2json": "0.4.5",
+        "postcss": "7.0.16",
+        "probe-image-size": "4.0.0",
+        "regenerator-runtime": "0.13.2",
+        "relaxed-json": "1.0.3",
+        "semver": "6.1.1",
+        "source-map-support": "0.5.12",
+        "strip-bom-stream": "4.0.0",
+        "tosource": "1.0.0",
+        "upath": "1.1.2",
+        "whatwg-url": "7.0.0",
+        "yargs": "13.2.4",
+        "yauzl": "2.10.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+          "dev": true
+        },
+        "ajv": {
+          "version": "6.10.0",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+          "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "es6-promisify": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz",
+          "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==",
+          "dev": true
+        },
+        "eslint": {
+          "version": "5.16.0",
+          "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+          "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+          "dev": true,
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "ajv": "^6.9.1",
+            "chalk": "^2.1.0",
+            "cross-spawn": "^6.0.5",
+            "debug": "^4.0.1",
+            "doctrine": "^3.0.0",
+            "eslint-scope": "^4.0.3",
+            "eslint-utils": "^1.3.1",
+            "eslint-visitor-keys": "^1.0.0",
+            "espree": "^5.0.1",
+            "esquery": "^1.0.1",
+            "esutils": "^2.0.2",
+            "file-entry-cache": "^5.0.1",
+            "functional-red-black-tree": "^1.0.1",
+            "glob": "^7.1.2",
+            "globals": "^11.7.0",
+            "ignore": "^4.0.6",
+            "import-fresh": "^3.0.0",
+            "imurmurhash": "^0.1.4",
+            "inquirer": "^6.2.2",
+            "js-yaml": "^3.13.0",
+            "json-stable-stringify-without-jsonify": "^1.0.1",
+            "levn": "^0.3.0",
+            "lodash": "^4.17.11",
+            "minimatch": "^3.0.4",
+            "mkdirp": "^0.5.1",
+            "natural-compare": "^1.4.0",
+            "optionator": "^0.8.2",
+            "path-is-inside": "^1.0.2",
+            "progress": "^2.0.0",
+            "regexpp": "^2.0.1",
+            "semver": "^5.5.1",
+            "strip-ansi": "^4.0.0",
+            "strip-json-comments": "^2.0.1",
+            "table": "^5.2.3",
+            "text-table": "^0.2.0"
+          },
+          "dependencies": {
+            "semver": {
+              "version": "5.7.1",
+              "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+              "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+              "dev": true
+            }
+          }
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "eslint-visitor-keys": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+          "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+          "dev": true
+        },
+        "espree": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+          "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+          "dev": true,
+          "requires": {
+            "acorn": "^6.0.7",
+            "acorn-jsx": "^5.0.0",
+            "eslint-visitor-keys": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.13.2",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
+          "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==",
+          "dev": true
+        },
+        "semver": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
+          "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+          "dev": true
+        }
+      }
+    },
+    "adm-zip": {
+      "version": "0.4.13",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
+      "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==",
+      "dev": true
+    },
+    "agent-base": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+      "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+      "dev": true,
+      "requires": {
+        "es6-promisify": "^5.0.0"
+      }
+    },
+    "agentkeepalive": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+      "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
+      "dev": true,
+      "requires": {
+        "humanize-ms": "^1.2.1"
+      }
+    },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-keywords": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
+      "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
+      "dev": true
+    },
+    "ajv-merge-patch": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz",
+      "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==",
+      "dev": true,
+      "requires": {
+        "fast-json-patch": "^2.0.6",
+        "json-merge-patch": "^0.2.3"
+      }
+    },
+    "ansi-align": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+      "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+      "dev": true,
+      "requires": {
+        "string-width": "^2.0.0"
+      }
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "ansicolors": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+      "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
+      "dev": true
+    },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "dev": true,
+      "requires": {
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "archiver": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz",
+      "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==",
+      "dev": true,
+      "requires": {
+        "archiver-utils": "^2.1.0",
+        "async": "^2.6.3",
+        "buffer-crc32": "^0.2.1",
+        "glob": "^7.1.4",
+        "readable-stream": "^3.4.0",
+        "tar-stream": "^2.1.0",
+        "zip-stream": "^2.1.2"
+      },
+      "dependencies": {
+        "bl": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
+          "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
+          "dev": true,
+          "requires": {
+            "readable-stream": "^3.0.1"
+          }
+        },
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "tar-stream": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
+          "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
+          "dev": true,
+          "requires": {
+            "bl": "^3.0.0",
+            "end-of-stream": "^1.4.1",
+            "fs-constants": "^1.0.0",
+            "inherits": "^2.0.3",
+            "readable-stream": "^3.1.1"
+          }
+        }
+      }
+    },
+    "archiver-utils": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+      "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.0",
+        "lazystream": "^1.0.0",
+        "lodash.defaults": "^4.2.0",
+        "lodash.difference": "^4.5.0",
+        "lodash.flatten": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.union": "^4.6.0",
+        "normalize-path": "^3.0.0",
+        "readable-stream": "^2.0.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "graceful-fs": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+          "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+          "dev": true
+        }
+      }
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+      "dev": true
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-differ": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+      "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+      "dev": true
+    },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+      "dev": true
+    },
+    "array-from": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+      "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
+      "dev": true
+    },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+      "dev": true
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "arrify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+      "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+      "dev": true
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "ast-types": {
+      "version": "0.13.2",
+      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz",
+      "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==",
+      "dev": true
+    },
+    "astral-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.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==",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "dev": true
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.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=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.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=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-polyfill": {
+      "version": "6.16.0",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.16.0.tgz",
+      "integrity": "sha1-LUUCHfh+JqN0ttTRqcZZZNF/JCI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.9.1",
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.9.5"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.9.6",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz",
+          "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=",
+          "dev": true
+        }
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.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==",
+          "dev": true
+        }
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+      "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+      "dev": true
+    },
+    "bl": {
+      "version": "1.2.2",
+      "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+      "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "bluebird": {
+      "version": "3.5.5",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
+      "dev": true
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "boxen": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+      "dev": true,
+      "requires": {
+        "ansi-align": "^2.0.0",
+        "camelcase": "^4.0.0",
+        "chalk": "^2.0.1",
+        "cli-boxes": "^1.0.0",
+        "string-width": "^2.0.0",
+        "term-size": "^1.2.0",
+        "widest-line": "^2.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        }
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+      "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4"
+      }
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+      "dev": true,
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+      "dev": true
+    },
+    "buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+      "dev": true
+    },
+    "buffer-equal-constant-time": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+      "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=",
+      "dev": true
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "dev": true
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
+    },
+    "bunyan": {
+      "version": "1.8.12",
+      "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz",
+      "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=",
+      "dev": true,
+      "requires": {
+        "dtrace-provider": "~0.8",
+        "moment": "^2.10.6",
+        "mv": "~2",
+        "safe-json-stringify": "~1"
+      }
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+      "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+      "dev": true
+    },
+    "cacache": {
+      "version": "12.0.3",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+      "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.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"
+      }
+    },
+    "cacheable-request": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+      "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+      "dev": true,
+      "requires": {
+        "clone-response": "^1.0.2",
+        "get-stream": "^5.1.0",
+        "http-cache-semantics": "^4.0.0",
+        "keyv": "^3.0.0",
+        "lowercase-keys": "^2.0.0",
+        "normalize-url": "^4.1.0",
+        "responselike": "^1.0.2"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "http-cache-semantics": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz",
+          "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==",
+          "dev": true
+        },
+        "lowercase-keys": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+          "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+          "dev": true
+        },
+        "normalize-url": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
+          "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
+          "dev": true
+        }
+      }
+    },
+    "caller-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "dev": true,
+      "requires": {
+        "callsites": "^0.2.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+          "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+          "dev": true
+        }
+      }
+    },
+    "callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true
+    },
+    "capture-stack-trace": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "cheerio": {
+      "version": "1.0.0-rc.3",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
+      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
+      "dev": true,
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.1",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash": "^4.15.0",
+        "parse5": "^3.0.1"
+      }
+    },
+    "chokidar": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+      "dev": true,
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.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"
+      },
+      "dependencies": {
+        "fsevents": {
+          "version": "1.2.9",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "nan": "^2.12.1",
+            "node-pre-gyp": "^0.12.0"
+          },
+          "dependencies": {
+            "abbrev": {
+              "version": "1.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "ansi-regex": {
+              "version": "2.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "aproba": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "are-we-there-yet": {
+              "version": "1.1.5",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "delegates": "^1.0.0",
+                "readable-stream": "^2.0.6"
+              }
+            },
+            "balanced-match": {
+              "version": "1.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "brace-expansion": {
+              "version": "1.1.11",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+              }
+            },
+            "chownr": {
+              "version": "1.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "code-point-at": {
+              "version": "1.1.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "concat-map": {
+              "version": "0.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "console-control-strings": {
+              "version": "1.1.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "core-util-is": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "debug": {
+              "version": "4.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "deep-extend": {
+              "version": "0.6.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "delegates": {
+              "version": "1.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "detect-libc": {
+              "version": "1.0.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "fs-minipass": {
+              "version": "1.2.5",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "fs.realpath": {
+              "version": "1.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "gauge": {
+              "version": "2.7.4",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "aproba": "^1.0.3",
+                "console-control-strings": "^1.0.0",
+                "has-unicode": "^2.0.0",
+                "object-assign": "^4.1.0",
+                "signal-exit": "^3.0.0",
+                "string-width": "^1.0.1",
+                "strip-ansi": "^3.0.1",
+                "wide-align": "^1.1.0"
+              }
+            },
+            "glob": {
+              "version": "7.1.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
+              }
+            },
+            "has-unicode": {
+              "version": "2.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "iconv-lite": {
+              "version": "0.4.24",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "safer-buffer": ">= 2.1.2 < 3"
+              }
+            },
+            "ignore-walk": {
+              "version": "3.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "minimatch": "^3.0.4"
+              }
+            },
+            "inflight": {
+              "version": "1.0.6",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "once": "^1.3.0",
+                "wrappy": "1"
+              }
+            },
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "ini": {
+              "version": "1.3.5",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "isarray": {
+              "version": "1.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "minimatch": {
+              "version": "3.0.4",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "brace-expansion": "^1.1.7"
+              }
+            },
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "minipass": {
+              "version": "2.3.5",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.0"
+              }
+            },
+            "minizlib": {
+              "version": "1.2.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "mkdirp": {
+              "version": "0.5.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "minimist": "0.0.8"
+              }
+            },
+            "ms": {
+              "version": "2.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "needle": {
+              "version": "2.3.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "debug": "^4.1.0",
+                "iconv-lite": "^0.4.4",
+                "sax": "^1.2.4"
+              }
+            },
+            "node-pre-gyp": {
+              "version": "0.12.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "detect-libc": "^1.0.2",
+                "mkdirp": "^0.5.1",
+                "needle": "^2.2.1",
+                "nopt": "^4.0.1",
+                "npm-packlist": "^1.1.6",
+                "npmlog": "^4.0.2",
+                "rc": "^1.2.7",
+                "rimraf": "^2.6.1",
+                "semver": "^5.3.0",
+                "tar": "^4"
+              }
+            },
+            "nopt": {
+              "version": "4.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "abbrev": "1",
+                "osenv": "^0.1.4"
+              }
+            },
+            "npm-bundled": {
+              "version": "1.0.6",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "npm-packlist": {
+              "version": "1.4.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "ignore-walk": "^3.0.1",
+                "npm-bundled": "^1.0.1"
+              }
+            },
+            "npmlog": {
+              "version": "4.1.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "are-we-there-yet": "~1.1.2",
+                "console-control-strings": "~1.1.0",
+                "gauge": "~2.7.3",
+                "set-blocking": "~2.0.0"
+              }
+            },
+            "number-is-nan": {
+              "version": "1.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "once": {
+              "version": "1.4.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "wrappy": "1"
+              }
+            },
+            "os-homedir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "os-tmpdir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "osenv": {
+              "version": "0.1.5",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "os-homedir": "^1.0.0",
+                "os-tmpdir": "^1.0.0"
+              }
+            },
+            "path-is-absolute": {
+              "version": "1.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "process-nextick-args": {
+              "version": "2.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "rc": {
+              "version": "1.2.8",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "deep-extend": "^0.6.0",
+                "ini": "~1.3.0",
+                "minimist": "^1.2.0",
+                "strip-json-comments": "~2.0.1"
+              },
+              "dependencies": {
+                "minimist": {
+                  "version": "1.2.0",
+                  "bundled": true,
+                  "dev": true,
+                  "optional": true
+                }
+              }
+            },
+            "readable-stream": {
+              "version": "2.3.6",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+              }
+            },
+            "rimraf": {
+              "version": "2.6.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            },
+            "safe-buffer": {
+              "version": "5.1.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "safer-buffer": {
+              "version": "2.1.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "sax": {
+              "version": "1.2.4",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "semver": {
+              "version": "5.7.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "set-blocking": {
+              "version": "2.0.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "signal-exit": {
+              "version": "3.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+              }
+            },
+            "string_decoder": {
+              "version": "1.1.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "~5.1.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            },
+            "strip-json-comments": {
+              "version": "2.0.1",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "tar": {
+              "version": "4.4.8",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "chownr": "^1.1.1",
+                "fs-minipass": "^1.2.5",
+                "minipass": "^2.3.4",
+                "minizlib": "^1.1.1",
+                "mkdirp": "^0.5.0",
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.2"
+              }
+            },
+            "util-deprecate": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "wide-align": {
+              "version": "1.1.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "string-width": "^1.0.2 || 2"
+              }
+            },
+            "wrappy": {
+              "version": "1.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            },
+            "yallist": {
+              "version": "3.0.3",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+      "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
+      "dev": true
+    },
+    "ci-info": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+      "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+      "dev": true
+    },
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+      "dev": true
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "cli-boxes": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+      "dev": true
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^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=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+          "dev": true,
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
+          }
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-deep": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz",
+      "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "is-plain-object": "^2.0.1",
+        "kind-of": "^3.2.2",
+        "shallow-clone": "^0.1.2"
+      }
+    },
+    "clone-response": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+      "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+      "dev": true,
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "codemirror": {
+      "version": "5.48.4",
+      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.48.4.tgz",
+      "integrity": "sha512-pUhZXDQ6qXSpWdwlgAwHEkd4imA0kf83hINmUEzJpmG80T/XLtDDEzZo8f6PQLuRCcUQhmzqqIo3ZPTRaWByRA==",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "colors": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
+      "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
+      "dev": true
+    },
+    "columnify": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+      "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+      "dev": true,
+      "requires": {
+        "strip-ansi": "^3.0.0",
+        "wcwidth": "^1.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=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+      "dev": true
+    },
+    "common-tags": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+      "dev": true
+    },
+    "compress-commons": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
+      "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
+      "dev": true,
+      "requires": {
+        "buffer-crc32": "^0.2.1",
+        "crc32-stream": "^2.0.0",
+        "normalize-path": "^2.0.0",
+        "readable-stream": "^2.0.0"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "configstore": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+      "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+      "dev": true,
+      "requires": {
+        "dot-prop": "^4.1.0",
+        "graceful-fs": "^4.1.2",
+        "make-dir": "^1.0.0",
+        "unique-string": "^1.0.0",
+        "write-file-atomic": "^2.0.0",
+        "xdg-basedir": "^3.0.0"
+      }
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-js": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+      "dev": true
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "crc": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
+      "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
+      "dev": true,
+      "requires": {
+        "buffer": "^5.1.0"
+      }
+    },
+    "crc32-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
+      "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
+      "dev": true,
+      "requires": {
+        "crc": "^3.4.4",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "create-error-class": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+      "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+      "dev": true,
+      "requires": {
+        "capture-stack-trace": "^1.0.0"
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "crx-parser": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/crx-parser/-/crx-parser-0.1.2.tgz",
+      "integrity": "sha1-fu7tnt3JXiLBiTguNGJARKiaWm0=",
+      "dev": true
+    },
+    "crypto-random-string": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+      "dev": true
+    },
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+      "dev": true
+    },
+    "d": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+      "dev": true,
+      "requires": {
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
+      }
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "data-uri-to-buffer": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz",
+      "integrity": "sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A==",
+      "dev": true,
+      "requires": {
+        "@types/node": "^8.0.7"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "8.10.53",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.53.tgz",
+          "integrity": "sha512-aOmXdv1a1/vYUn1OT1CED8ftbkmmYbKhKGSyMDeJiidLvKRKvZUQOdXwG/wcNY7T1Qb0XTlVdiYjIq00U7pLrQ==",
+          "dev": true
+        }
+      }
+    },
+    "db-to-cloud": {
+      "version": "0.4.5",
+      "resolved": "https://registry.npmjs.org/db-to-cloud/-/db-to-cloud-0.4.5.tgz",
+      "integrity": "sha512-3E5eYVIlZmX0ZRgSZ3WJF+lxs8eCFOJWruw8GLHbKDGK5tIZ13Bxsge+eFXbYBQUidzW7y3xuxD8MdpjDLY7eQ==",
+      "dev": true,
+      "requires": {
+        "@eight04/read-write-lock": "^0.1.0",
+        "universal-base64": "^2.1.0"
+      }
+    },
+    "debounce": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz",
+      "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "decamelize": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-3.2.0.tgz",
+      "integrity": "sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==",
+      "dev": true,
+      "requires": {
+        "xregexp": "^4.2.4"
+      },
+      "dependencies": {
+        "xregexp": {
+          "version": "4.2.4",
+          "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.2.4.tgz",
+          "integrity": "sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA==",
+          "dev": true,
+          "requires": {
+            "@babel/runtime-corejs2": "^7.2.0"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "decompress-response": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+      "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+      "dev": true,
+      "requires": {
+        "mimic-response": "^1.0.0"
+      }
+    },
+    "dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+      "dev": true
+    },
+    "deep-equal": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+      "dev": true
+    },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+      "dev": true
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
+    },
+    "deepcopy": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-0.6.3.tgz",
+      "integrity": "sha1-Y0eA8vhlardxr4+oQx7RzO5Vx7A=",
+      "dev": true
+    },
+    "deepmerge": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz",
+      "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==",
+      "dev": true
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "defer-to-connect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz",
+      "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+      "dev": true
+    },
+    "degenerator": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz",
+      "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=",
+      "dev": true,
+      "requires": {
+        "ast-types": "0.x.x",
+        "escodegen": "1.x.x",
+        "esprima": "3.x.x"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+          "dev": true
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "detect-indent": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
+      "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
+      "dev": true
+    },
+    "diff": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
+      "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
+      "dev": true
+    },
+    "dispensary": {
+      "version": "0.37.0",
+      "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.37.0.tgz",
+      "integrity": "sha512-Baqbt8MDkRYQZHB7XEd8iBUP8wRkRLjNWbm16nSDTOIoGvgF4Z8Q9wV1yD72TYjFC0kj1/o3nfPXPiAvWqjC8g==",
+      "dev": true,
+      "requires": {
+        "array-from": "~2.1.1",
+        "async": "~3.0.0",
+        "natural-compare-lite": "~1.4.0",
+        "pino": "~5.12.0",
+        "request": "~2.88.0",
+        "sha.js": "~2.4.4",
+        "snyk": "^1.165.1",
+        "source-map-support": "~0.5.4",
+        "yargs": "~13.2.0"
+      },
+      "dependencies": {
+        "async": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/async/-/async-3.0.1.tgz",
+          "integrity": "sha512-ZswD8vwPtmBZzbn9xyi8XBQWXH3AvOQ43Za1KWYq7JeycrZuUYzx01KvHcVbXltjqH4y0MWrQ33008uLTqXuDw==",
+          "dev": true
+        }
+      }
+    },
+    "dockerfile-ast": {
+      "version": "0.0.16",
+      "resolved": "https://registry.npmjs.org/dockerfile-ast/-/dockerfile-ast-0.0.16.tgz",
+      "integrity": "sha512-+HZToHjjiLPl46TqBrok5dMrg5oCkZFPSROMQjRmvin0zG4FxK0DJXTpV/CUPYY2zpmEvVza55XLwSHFx/xZMw==",
+      "dev": true,
+      "requires": {
+        "vscode-languageserver-types": "^3.5.0"
+      }
+    },
+    "doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "entities": "^1.1.1"
+      }
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "dev": true,
+      "requires": {
+        "is-obj": "^1.0.0"
+      }
+    },
+    "dotnet-deps-parser": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/dotnet-deps-parser/-/dotnet-deps-parser-4.5.0.tgz",
+      "integrity": "sha512-t6rBxcWVZSDNhhWdsbq9ozaCzfPXV79FiyES1JLNEoA7nYF+zDC2VZvFZSnH8ilU3bghJXxZPH+EcKYvfw8g/g==",
+      "dev": true,
+      "requires": {
+        "@types/xml2js": "0.4.3",
+        "lodash": "^4.17.11",
+        "source-map-support": "^0.5.7",
+        "tslib": "^1.9.3",
+        "xml2js": "0.4.19"
+      },
+      "dependencies": {
+        "xml2js": {
+          "version": "0.4.19",
+          "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+          "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+          "dev": true,
+          "requires": {
+            "sax": ">=0.6.0",
+            "xmlbuilder": "~9.0.1"
+          }
+        }
+      }
+    },
+    "dtrace-provider": {
+      "version": "0.8.8",
+      "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
+      "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.14.0"
+      }
+    },
+    "duplexer3": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+      "dev": true
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "ecdsa-sig-formatter": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "email-validator": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz",
+      "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==",
+      "dev": true
+    },
+    "emoji-regex": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+      "dev": true
+    },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "~0.4.13"
+      }
+    },
+    "end-of-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "endent": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz",
+      "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==",
+      "dev": true,
+      "requires": {
+        "dedent": "^0.7.0",
+        "fast-json-parse": "^1.0.3",
+        "objectorarray": "^1.0.3"
+      }
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+      "dev": true
+    },
+    "err-code": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
+      "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=",
+      "dev": true
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "^1.2.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "is-callable": "^1.1.4",
+        "is-regex": "^1.0.4",
+        "object-keys": "^1.0.12"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "es5-ext": {
+      "version": "0.10.51",
+      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz",
+      "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==",
+      "dev": true,
+      "requires": {
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.1",
+        "next-tick": "^1.0.0"
+      }
+    },
+    "es6-error": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+      "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+      "dev": true
+    },
+    "es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "es6-map": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+      "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
+        "es6-set": "~0.1.5",
+        "es6-symbol": "~3.1.1",
+        "event-emitter": "~0.3.5"
+      }
+    },
+    "es6-promise": {
+      "version": "4.2.8",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
+      "dev": true
+    },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
+    "es6-set": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+      "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
+        "es6-symbol": "3.1.1",
+        "event-emitter": "~0.3.5"
+      },
+      "dependencies": {
+        "es6-symbol": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+          "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+          "dev": true,
+          "requires": {
+            "d": "1",
+            "es5-ext": "~0.10.14"
+          }
+        }
+      }
+    },
+    "es6-symbol": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz",
+      "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==",
+      "dev": true,
+      "requires": {
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.51"
+      }
+    },
+    "es6-weak-map": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+      "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.46",
+        "es6-iterator": "^2.0.3",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "escodegen": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
+      "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+      "dev": true,
+      "requires": {
+        "esprima": "^3.1.3",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+          "dev": true
+        }
+      }
+    },
+    "escope": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+      "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+      "dev": true,
+      "requires": {
+        "es6-map": "^0.1.3",
+        "es6-weak-map": "^2.0.1",
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.4.0.tgz",
+      "integrity": "sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA==",
+      "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.2",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.1.1",
+        "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": "^11.7.0",
+        "ignore": "^4.0.6",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^6.4.1",
+        "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.2",
+        "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": {
+        "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-no-unsafe-innerhtml": {
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsafe-innerhtml/-/eslint-plugin-no-unsafe-innerhtml-1.0.16.tgz",
+      "integrity": "sha1-fQKHjI6b95FriINtWsEitC8VGTI=",
+      "dev": true,
+      "requires": {
+        "eslint": "^3.7.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "dev": true
+        },
+        "acorn-jsx": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+          "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+          "dev": true,
+          "requires": {
+            "acorn": "^3.0.4"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "3.3.0",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+              "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+              "dev": true
+            }
+          }
+        },
+        "ajv": {
+          "version": "4.11.8",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+          "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+          "dev": true,
+          "requires": {
+            "co": "^4.6.0",
+            "json-stable-stringify": "^1.0.1"
+          }
+        },
+        "ansi-escapes": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+          "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+          "dev": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "cli-cursor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+          "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^1.0.1"
+          }
+        },
+        "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": "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": {
+          "version": "3.19.0",
+          "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
+          "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+          "dev": true,
+          "requires": {
+            "babel-code-frame": "^6.16.0",
+            "chalk": "^1.1.3",
+            "concat-stream": "^1.5.2",
+            "debug": "^2.1.1",
+            "doctrine": "^2.0.0",
+            "escope": "^3.6.0",
+            "espree": "^3.4.0",
+            "esquery": "^1.0.0",
+            "estraverse": "^4.2.0",
+            "esutils": "^2.0.2",
+            "file-entry-cache": "^2.0.0",
+            "glob": "^7.0.3",
+            "globals": "^9.14.0",
+            "ignore": "^3.2.0",
+            "imurmurhash": "^0.1.4",
+            "inquirer": "^0.12.0",
+            "is-my-json-valid": "^2.10.0",
+            "is-resolvable": "^1.0.0",
+            "js-yaml": "^3.5.1",
+            "json-stable-stringify": "^1.0.0",
+            "levn": "^0.3.0",
+            "lodash": "^4.0.0",
+            "mkdirp": "^0.5.0",
+            "natural-compare": "^1.4.0",
+            "optionator": "^0.8.2",
+            "path-is-inside": "^1.0.1",
+            "pluralize": "^1.2.1",
+            "progress": "^1.1.8",
+            "require-uncached": "^1.0.2",
+            "shelljs": "^0.7.5",
+            "strip-bom": "^3.0.0",
+            "strip-json-comments": "~2.0.1",
+            "table": "^3.7.8",
+            "text-table": "~0.2.0",
+            "user-home": "^2.0.0"
+          }
+        },
+        "espree": {
+          "version": "3.5.4",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+          "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+          "dev": true,
+          "requires": {
+            "acorn": "^5.5.0",
+            "acorn-jsx": "^3.0.0"
+          }
+        },
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        },
+        "file-entry-cache": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+          "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+          "dev": true,
+          "requires": {
+            "flat-cache": "^1.2.1",
+            "object-assign": "^4.0.1"
+          }
+        },
+        "flat-cache": {
+          "version": "1.3.4",
+          "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+          "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+          "dev": true,
+          "requires": {
+            "circular-json": "^0.3.1",
+            "graceful-fs": "^4.1.2",
+            "rimraf": "~2.6.2",
+            "write": "^0.2.1"
+          }
+        },
+        "globals": {
+          "version": "9.18.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+          "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+          "dev": true
+        },
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+          "dev": true
+        },
+        "inquirer": {
+          "version": "0.12.0",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+          "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+          "dev": true,
+          "requires": {
+            "ansi-escapes": "^1.1.0",
+            "ansi-regex": "^2.0.0",
+            "chalk": "^1.0.0",
+            "cli-cursor": "^1.0.1",
+            "cli-width": "^2.0.0",
+            "figures": "^1.3.5",
+            "lodash": "^4.3.0",
+            "readline2": "^1.0.1",
+            "run-async": "^0.1.0",
+            "rx-lite": "^3.1.2",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.0",
+            "through": "^2.3.6"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "onetime": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+          "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+          "dev": true
+        },
+        "progress": {
+          "version": "1.1.8",
+          "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+          "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+          "dev": true
+        },
+        "require-uncached": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+          "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+          "dev": true,
+          "requires": {
+            "caller-path": "^0.1.0",
+            "resolve-from": "^1.0.0"
+          }
+        },
+        "resolve-from": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+          "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+          "dev": true
+        },
+        "restore-cursor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+          "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+          "dev": true,
+          "requires": {
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.0.0"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "run-async": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+          "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+          "dev": true,
+          "requires": {
+            "once": "^1.3.0"
+          }
+        },
+        "slice-ansi": {
+          "version": "0.0.4",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+          "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        },
+        "table": {
+          "version": "3.8.3",
+          "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+          "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+          "dev": true,
+          "requires": {
+            "ajv": "^4.7.0",
+            "ajv-keywords": "^1.0.0",
+            "chalk": "^1.1.1",
+            "lodash": "^4.0.0",
+            "slice-ansi": "0.0.4",
+            "string-width": "^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=",
+              "dev": true
+            },
+            "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=",
+              "dev": true
+            },
+            "string-width": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+              "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+              "dev": true,
+              "requires": {
+                "is-fullwidth-code-point": "^2.0.0",
+                "strip-ansi": "^4.0.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "write": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+          "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+          "dev": true,
+          "requires": {
+            "mkdirp": "^0.5.1"
+          }
+        }
+      }
+    },
+    "eslint-scope": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+      "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-utils": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+      "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+      "dev": true,
+      "requires": {
+        "eslint-visitor-keys": "^1.0.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==",
+      "dev": true
+    },
+    "espree": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz",
+      "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.0.0",
+        "acorn-jsx": "^5.0.2",
+        "eslint-visitor-keys": "^1.1.0"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
+    },
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.0.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "event-emitter": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+      "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "event-to-promise": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz",
+      "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=",
+      "dev": true
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+      "dev": true,
+      "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-hook": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+      "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+      "dev": true
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
+    },
+    "fast-json-parse": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
+      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==",
+      "dev": true
+    },
+    "fast-json-patch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz",
+      "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^2.0.1"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
+    "fast-redact": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-1.5.0.tgz",
+      "integrity": "sha512-Afo61CgUjkzdvOKDHn08qnZ0kwck38AOGcMlvSGzvJbIab6soAP5rdoQayecGCDsD69AiF9vJBXyq31eoEO2tQ==",
+      "dev": true
+    },
+    "fast-safe-stringify": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz",
+      "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==",
+      "dev": true
+    },
+    "fd-slicer": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "dev": true,
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+      "dev": true
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "flat-cache": "^2.0.1"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.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==",
+      "dev": true,
+      "requires": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
+    "firefox-profile": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-1.2.0.tgz",
+      "integrity": "sha512-TTEFfPOkyaz4EWx/5ZDQC1mJAe3a+JgVcchpIfD4Tvx1UspwlTJRJxOYA35x/z2iJcxaF6aW2rdh6oj6qwgd2g==",
+      "dev": true,
+      "requires": {
+        "adm-zip": "~0.4.x",
+        "archiver": "~2.1.0",
+        "async": "~2.5.0",
+        "fs-extra": "~4.0.2",
+        "ini": "~1.3.3",
+        "jetpack-id": "1.0.0",
+        "lazystream": "~1.0.0",
+        "lodash": "~4.17.2",
+        "minimist": "^1.1.1",
+        "uuid": "^3.0.0",
+        "xml2js": "~0.4.4"
+      },
+      "dependencies": {
+        "archiver": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz",
+          "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=",
+          "dev": true,
+          "requires": {
+            "archiver-utils": "^1.3.0",
+            "async": "^2.0.0",
+            "buffer-crc32": "^0.2.1",
+            "glob": "^7.0.0",
+            "lodash": "^4.8.0",
+            "readable-stream": "^2.0.0",
+            "tar-stream": "^1.5.0",
+            "zip-stream": "^1.2.0"
+          }
+        },
+        "archiver-utils": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
+          "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
+          "dev": true,
+          "requires": {
+            "glob": "^7.0.0",
+            "graceful-fs": "^4.1.0",
+            "lazystream": "^1.0.0",
+            "lodash": "^4.8.0",
+            "normalize-path": "^2.0.0",
+            "readable-stream": "^2.0.0"
+          }
+        },
+        "async": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
+          "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
+          "dev": true,
+          "requires": {
+            "lodash": "^4.14.0"
+          }
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        },
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        },
+        "zip-stream": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
+          "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
+          "dev": true,
+          "requires": {
+            "archiver-utils": "^1.3.0",
+            "compress-commons": "^1.2.0",
+            "lodash": "^4.8.0",
+            "readable-stream": "^2.0.0"
+          }
+        }
+      }
+    },
+    "first-chunk-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz",
+      "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==",
+      "dev": true
+    },
+    "flat-cache": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
+    "flatstr": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
+      "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==",
+      "dev": true
+    },
+    "flatted": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+      "dev": true
+    },
+    "fluent-syntax": {
+      "version": "0.13.0",
+      "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz",
+      "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "for-each": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.3"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+          "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz",
+      "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
+      "dev": true,
+      "optional": true
+    },
+    "ftp": {
+      "version": "0.3.10",
+      "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
+      "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "1.1.x",
+        "xregexp": "2.0.0"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "fx-runner": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.11.tgz",
+      "integrity": "sha512-igHogHf5wTqqaPPTOav18MMTVq/eoeTJiw/PvPUuwnzU8vbyZInFPgR66G9ZBwvwxC7e611nbtB4xSMcYVhlvg==",
+      "dev": true,
+      "requires": {
+        "commander": "2.9.0",
+        "shell-quote": "1.6.1",
+        "spawn-sync": "1.0.15",
+        "when": "3.7.7",
+        "which": "1.2.4",
+        "winreg": "0.0.12"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+          "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+          "dev": true,
+          "requires": {
+            "graceful-readlink": ">= 1.0.0"
+          }
+        },
+        "isexe": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz",
+          "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.2.4",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz",
+          "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=",
+          "dev": true,
+          "requires": {
+            "is-absolute": "^0.1.7",
+            "isexe": "^1.1.1"
+          }
+        }
+      }
+    },
+    "generate-function": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+      "dev": true,
+      "requires": {
+        "is-property": "^1.0.2"
+      }
+    },
+    "generate-object-property": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+      "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+      "dev": true,
+      "requires": {
+        "is-property": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-uri": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.3.tgz",
+      "integrity": "sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==",
+      "dev": true,
+      "requires": {
+        "data-uri-to-buffer": "2",
+        "debug": "4",
+        "extend": "~3.0.2",
+        "file-uri-to-path": "1",
+        "ftp": "~0.3.10",
+        "readable-stream": "3"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "gettext-parser": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.0.tgz",
+      "integrity": "sha1-LFpmONiTk0ubVQN9CtgstwBLJnk=",
+      "dev": true,
+      "requires": {
+        "encoding": "^0.1.11"
+      }
+    },
+    "git-rev-sync": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-1.12.0.tgz",
+      "integrity": "sha1-RGhAbH5sO6TPRYeZnhrbKNnRr1U=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "1.0.5",
+        "graceful-fs": "4.1.11",
+        "shelljs": "0.7.7"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true
+        },
+        "shelljs": {
+          "version": "0.7.7",
+          "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz",
+          "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=",
+          "dev": true,
+          "requires": {
+            "glob": "^7.0.0",
+            "interpret": "^1.0.0",
+            "rechoir": "^0.6.2"
+          }
+        }
+      }
+    },
+    "git-up": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz",
+      "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==",
+      "dev": true,
+      "requires": {
+        "is-ssh": "^1.3.0",
+        "parse-url": "^5.0.0"
+      }
+    },
+    "git-url-parse": {
+      "version": "11.1.2",
+      "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz",
+      "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==",
+      "dev": true,
+      "requires": {
+        "git-up": "^4.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+      "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
+      "dev": true,
+      "requires": {
+        "is-glob": "^4.0.1"
+      }
+    },
+    "global-dirs": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+      "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+      "dev": true,
+      "requires": {
+        "ini": "^1.3.4"
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true
+    },
+    "got": {
+      "version": "6.7.1",
+      "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+      "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+      "dev": true,
+      "requires": {
+        "create-error-class": "^3.0.0",
+        "duplexer3": "^0.1.4",
+        "get-stream": "^3.0.0",
+        "is-redirect": "^1.0.0",
+        "is-retry-allowed": "^1.0.0",
+        "is-stream": "^1.0.0",
+        "lowercase-keys": "^1.0.0",
+        "safe-buffer": "^5.0.1",
+        "timed-out": "^4.0.0",
+        "unzip-response": "^2.0.1",
+        "url-parse-lax": "^1.0.0"
+      },
+      "dependencies": {
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+      "dev": true
+    },
+    "graceful-readlink": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+      "dev": true
+    },
+    "graphlib": {
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.7.tgz",
+      "integrity": "sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.5"
+      }
+    },
+    "growly": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "has-color": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+      "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "has-yarn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
+      "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.0.tgz",
+      "integrity": "sha512-zYSx1cP4MLsvKtTg8DF/PI6e6FHZ3wcawcTGsrLU2TM+UfD4jmSrn2wdQT16TFbH3lO4PIdjLG0E+cuYDgFD9g==",
+      "dev": true,
+      "requires": {
+        "lru-cache": "^5.1.1"
+      }
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "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.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-cache-semantics": {
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+      "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+      "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+      "dev": true,
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+          "dev": true
+        }
+      }
+    },
+    "http-proxy-agent": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+      "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
+      "dev": true,
+      "requires": {
+        "agent-base": "4",
+        "debug": "3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-proxy-agent": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+      "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.3.0",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+      "dev": true,
+      "requires": {
+        "ms": "^2.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+      "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+      "dev": true
+    },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+      "dev": true
+    },
+    "import-fresh": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+      "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+      "dev": true,
+      "requires": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      }
+    },
+    "import-lazy": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+      "dev": true
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+      "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^3.2.0",
+        "chalk": "^2.4.2",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^2.0.0",
+        "lodash": "^4.17.12",
+        "mute-stream": "0.0.7",
+        "run-async": "^2.2.0",
+        "rxjs": "^6.4.0",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^5.1.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+          "dev": true
+        }
+      }
+    },
+    "interpret": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+      "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+      "dev": true
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "is-absolute": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
+      "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
+      "dev": true,
+      "requires": {
+        "is-relative": "^0.1.0"
+      }
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+      "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+      "dev": true,
+      "requires": {
+        "ci-info": "^1.5.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=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-installed-globally": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+      "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+      "dev": true,
+      "requires": {
+        "global-dirs": "^0.1.0",
+        "is-path-inside": "^1.0.0"
+      }
+    },
+    "is-mergeable-object": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.0.tgz",
+      "integrity": "sha512-JfyDDwUdtS4yHCgUpxOyKB9dnfZ0gecufxB0eytX6BmSXSE+8dbxDGt+V7CNRIRJ9sYFV/WQt2KJG6hNob2sBw==",
+      "dev": true
+    },
+    "is-my-ip-valid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
+      "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
+      "dev": true
+    },
+    "is-my-json-valid": {
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz",
+      "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==",
+      "dev": true,
+      "requires": {
+        "generate-function": "^2.0.0",
+        "generate-object-property": "^1.1.0",
+        "is-my-ip-valid": "^1.0.0",
+        "jsonpointer": "^4.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "is-npm": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+      "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-path-inside": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.1"
+      }
+    },
+    "is-plain-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==",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-property": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+      "dev": true
+    },
+    "is-redirect": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+      "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+      "dev": true
+    },
+    "is-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-relative": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
+      "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
+      "dev": true
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+      "dev": true
+    },
+    "is-retry-allowed": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+      "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+      "dev": true
+    },
+    "is-ssh": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz",
+      "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==",
+      "dev": true,
+      "requires": {
+        "protocols": "^1.1.0"
+      }
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-symbol": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.0"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "is-yarn-global": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
+      "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "jed": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
+      "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=",
+      "dev": true
+    },
+    "jetpack-id": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz",
+      "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=",
+      "dev": true
+    },
+    "js-select": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz",
+      "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=",
+      "dev": true,
+      "requires": {
+        "JSONSelect": "0.2.1",
+        "traverse": "0.4.x"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "json-buffer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+      "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+      "dev": true
+    },
+    "json-merge-patch": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz",
+      "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=",
+      "dev": true,
+      "requires": {
+        "deep-equal": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "jsonlint": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz",
+      "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==",
+      "dev": true,
+      "requires": {
+        "JSV": "^4.0.x",
+        "nomnom": "^1.5.x"
+      }
+    },
+    "jsonpointer": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+      "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+      "dev": true
+    },
+    "jsonwebtoken": {
+      "version": "8.2.1",
+      "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz",
+      "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==",
+      "dev": true,
+      "requires": {
+        "jws": "^3.1.4",
+        "lodash.includes": "^4.3.0",
+        "lodash.isboolean": "^3.0.3",
+        "lodash.isinteger": "^4.0.4",
+        "lodash.isnumber": "^3.0.3",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.isstring": "^4.0.1",
+        "lodash.once": "^4.0.0",
+        "ms": "^2.1.1",
+        "xtend": "^4.0.1"
+      }
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jszip": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz",
+      "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
+      "dev": true,
+      "requires": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "set-immediate-shim": "~1.0.1"
+      }
+    },
+    "jwa": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+      "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+      "dev": true,
+      "requires": {
+        "buffer-equal-constant-time": "1.0.1",
+        "ecdsa-sig-formatter": "1.0.11",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "jws": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+      "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+      "dev": true,
+      "requires": {
+        "jwa": "^1.4.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "keyv": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+      "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+      "dev": true,
+      "requires": {
+        "json-buffer": "3.0.0"
+      }
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "latest-version": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+      "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+      "dev": true,
+      "requires": {
+        "package-json": "^4.0.0"
+      }
+    },
+    "lazy-cache": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+      "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
+      "dev": true
+    },
+    "lazystream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+      "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.0.5"
+      }
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "less-bundle": {
+      "version": "github:openstyles/less-bundle#ef6ad8536047fc391f3fb5ffe5d22fbeccf81a96",
+      "from": "github:openstyles/less-bundle#v0.1.0",
+      "dev": true
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "lie": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+      "dev": true,
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "requires": {
+        "p-locate": "^4.1.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+      "dev": true
+    },
+    "lodash.assign": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+      "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+      "dev": true
+    },
+    "lodash.assignin": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+      "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+      "dev": true
+    },
+    "lodash.clone": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+      "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
+      "dev": true
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+      "dev": true
+    },
+    "lodash.defaults": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+      "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+      "dev": true
+    },
+    "lodash.difference": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+      "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
+      "dev": true
+    },
+    "lodash.flatten": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+      "dev": true
+    },
+    "lodash.get": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+      "dev": true
+    },
+    "lodash.includes": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+      "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=",
+      "dev": true
+    },
+    "lodash.isboolean": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+      "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=",
+      "dev": true
+    },
+    "lodash.isinteger": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+      "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=",
+      "dev": true
+    },
+    "lodash.isnumber": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+      "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=",
+      "dev": true
+    },
+    "lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+      "dev": true
+    },
+    "lodash.isstring": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+      "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
+      "dev": true
+    },
+    "lodash.once": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+      "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
+      "dev": true
+    },
+    "lodash.set": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+      "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
+      "dev": true
+    },
+    "lodash.sortby": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+      "dev": true
+    },
+    "lodash.union": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+      "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
+      "dev": true
+    },
+    "lowercase-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+      "dev": true
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "lz-string-unsafe": {
+      "version": "1.4.4-fork-1",
+      "resolved": "https://registry.npmjs.org/lz-string-unsafe/-/lz-string-unsafe-1.4.4-fork-1.tgz",
+      "integrity": "sha512-b6Ixv8tfyiZ8b0wb6VdJSLDHs3E+UbeNo81n1tTOjzXWy8ys2fleV9T3buVBIeKiMnBMo8c87FvAsRilS+BQhw==",
+      "dev": true
+    },
+    "macos-release": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz",
+      "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==",
+      "dev": true
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "make-fetch-happen": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz",
+      "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==",
+      "dev": true,
+      "requires": {
+        "agentkeepalive": "^3.4.1",
+        "cacache": "^12.0.0",
+        "http-cache-semantics": "^3.8.1",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "lru-cache": "^5.1.1",
+        "mississippi": "^3.0.0",
+        "node-fetch-npm": "^2.0.2",
+        "promise-retry": "^1.1.1",
+        "socks-proxy-agent": "^4.0.0",
+        "ssri": "^6.0.0"
+      }
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "dev": true,
+      "requires": {
+        "p-defer": "^1.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "mdn-browser-compat-data": {
+      "version": "0.0.82",
+      "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.82.tgz",
+      "integrity": "sha512-RmC87C45AgXLuNlkrGLCK2wh0zRwpFnnro5jsNxmS90xLCxfKmTLPtqM9cocKFD7Ro9pWmtvkIkRiesGakd1Ig==",
+      "dev": true,
+      "requires": {
+        "extend": "3.0.2"
+      }
+    },
+    "mem": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "mime-db": {
+      "version": "1.40.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+      "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.24",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+      "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.40.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
+    },
+    "mimic-response": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+      "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "moment": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
+      "dev": true,
+      "optional": true
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "2.7.1",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
+    "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
+    },
+    "multimatch": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
+      "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+      "dev": true,
+      "requires": {
+        "@types/minimatch": "^3.0.3",
+        "array-differ": "^3.0.0",
+        "array-union": "^2.1.0",
+        "arrify": "^2.0.1",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "dev": true
+    },
+    "mv": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+      "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "mkdirp": "~0.5.1",
+        "ncp": "~2.0.0",
+        "rimraf": "~2.4.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "6.0.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+          "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "rimraf": {
+          "version": "2.4.5",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+          "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^6.0.1"
+          }
+        }
+      }
+    },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "nan": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+      "dev": true,
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "dev": true,
+      "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"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
+    },
+    "natural-compare-lite": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+      "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=",
+      "dev": true
+    },
+    "nconf": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz",
+      "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==",
+      "dev": true,
+      "requires": {
+        "async": "^1.4.0",
+        "ini": "^1.3.0",
+        "secure-keys": "^1.0.0",
+        "yargs": "^3.19.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "async": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "dev": true
+        },
+        "decamelize": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+          "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "os-locale": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+          "dev": true,
+          "requires": {
+            "lcid": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "3.32.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+          "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^2.0.1",
+            "cliui": "^3.0.3",
+            "decamelize": "^1.1.1",
+            "os-locale": "^1.4.0",
+            "string-width": "^1.0.1",
+            "window-size": "^0.1.4",
+            "y18n": "^3.2.0"
+          }
+        }
+      }
+    },
+    "ncp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "dev": true,
+      "optional": true
+    },
+    "needle": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
+      "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "neo-async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+      "dev": true
+    },
+    "neodoc": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/neodoc/-/neodoc-2.0.2.tgz",
+      "integrity": "sha512-NAppJ0YecKWdhSXFYCHbo6RutiX8vOt/Jo3l46mUg6pQlpJNaqc5cGxdrW2jITQm5JIYySbFVPDl3RrREXNyPw==",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "netmask": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
+      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
+      "dev": true
+    },
+    "next-tick": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+      "dev": true
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+      "dev": true
+    },
+    "node-fetch-npm": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
+      "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==",
+      "dev": true,
+      "requires": {
+        "encoding": "^0.1.11",
+        "json-parse-better-errors": "^1.0.0",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.7.6",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
+      "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
+      "dev": true
+    },
+    "node-notifier": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
+      "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
+      "dev": true,
+      "requires": {
+        "growly": "^1.3.0",
+        "is-wsl": "^1.1.0",
+        "semver": "^5.5.0",
+        "shellwords": "^0.1.1",
+        "which": "^1.3.0"
+      }
+    },
+    "nomnom": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+      "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+      "dev": true,
+      "requires": {
+        "chalk": "~0.4.0",
+        "underscore": "~1.6.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+          "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.4.0",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+          "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "~1.0.0",
+            "has-color": "~0.1.0",
+            "strip-ansi": "~0.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "0.1.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+          "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
+          "dev": true
+        }
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "dev": true
+    },
+    "object-inspect": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+      "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+      "dev": true
+    },
+    "object-keys": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+      "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "objectorarray": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz",
+      "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==",
+      "dev": true,
+      "requires": {
+        "tape": "^4.8.0"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "opn": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "dev": true,
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
+      }
+    },
+    "ordered-json": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ordered-json/-/ordered-json-0.1.1.tgz",
+      "integrity": "sha512-qw4OYAxofa+WAZAP90eoXftAErUCjs8OII5ddDzKAZBsPMpQvWEIvuKCmUgGV22Cyd3/bT6i12KeuBBZixThDg==",
+      "dev": true,
+      "requires": {
+        "ordered-object": "^0.2.0"
+      }
+    },
+    "ordered-object": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/ordered-object/-/ordered-object-0.2.3.tgz",
+      "integrity": "sha512-UKBtJiO7PsKqAAenewZ/moHQIRbcjZ4HE0J/+RyzgnpCTIn5ZLe3N2izno1kViTCXtHB4xuewjPgYLEiuS6t5A==",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
+      },
+      "dependencies": {
+        "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==",
+          "dev": true
+        },
+        "lcid": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+          "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+          "dev": true,
+          "requires": {
+            "invert-kv": "^2.0.0"
+          }
+        }
+      }
+    },
+    "os-name": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz",
+      "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==",
+      "dev": true,
+      "requires": {
+        "macos-release": "^2.2.0",
+        "windows-release": "^3.1.0"
+      }
+    },
+    "os-shim": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+      "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+      "dev": true
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "p-cancelable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+      "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+      "dev": true
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+      "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "pac-proxy-agent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz",
+      "integrity": "sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q==",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.2.0",
+        "debug": "^3.1.0",
+        "get-uri": "^2.0.0",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "pac-resolver": "^3.0.0",
+        "raw-body": "^2.2.0",
+        "socks-proxy-agent": "^4.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "pac-resolver": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz",
+      "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==",
+      "dev": true,
+      "requires": {
+        "co": "^4.6.0",
+        "degenerator": "^1.0.4",
+        "ip": "^1.1.5",
+        "netmask": "^1.0.6",
+        "thunkify": "^2.1.2"
+      }
+    },
+    "package-json": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+      "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+      "dev": true,
+      "requires": {
+        "got": "^6.7.1",
+        "registry-auth-token": "^3.0.1",
+        "registry-url": "^3.0.3",
+        "semver": "^5.1.0"
+      },
+      "dependencies": {
+        "registry-auth-token": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
+          "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
+          "dev": true,
+          "requires": {
+            "rc": "^1.1.6",
+            "safe-buffer": "^5.0.1"
+          }
+        }
+      }
+    },
+    "pako": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+      "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+      "dev": true,
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "callsites": "^3.0.0"
+      }
+    },
+    "parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      }
+    },
+    "parse-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz",
+      "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==",
+      "dev": true,
+      "requires": {
+        "is-ssh": "^1.3.0",
+        "protocols": "^1.4.0"
+      }
+    },
+    "parse-url": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz",
+      "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==",
+      "dev": true,
+      "requires": {
+        "is-ssh": "^1.3.0",
+        "normalize-url": "^3.3.0",
+        "parse-path": "^4.0.0",
+        "protocols": "^1.4.0"
+      }
+    },
+    "parse5": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+      "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "dev": true
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "dev": true
+    },
+    "pino": {
+      "version": "5.12.6",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-5.12.6.tgz",
+      "integrity": "sha512-LM5ug2b27uymIIkaBw54ncF+9DSf8S4z1uzw+Y5I94dRu3Z+lFuB13j0kg1InAeyxy+CsLGnWHKy9+zgTreFOg==",
+      "dev": true,
+      "requires": {
+        "fast-redact": "^1.4.4",
+        "fast-safe-stringify": "^2.0.6",
+        "flatstr": "^1.0.9",
+        "pino-std-serializers": "^2.3.0",
+        "quick-format-unescaped": "^3.0.2",
+        "sonic-boom": "^0.7.3"
+      }
+    },
+    "pino-std-serializers": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz",
+      "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ==",
+      "dev": true
+    },
+    "pluralize": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+      "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+      "dev": true
+    },
+    "po2json": {
+      "version": "0.4.5",
+      "resolved": "https://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz",
+      "integrity": "sha1-R7spUtoy1Yob4vJWpZjuvAt0URg=",
+      "dev": true,
+      "requires": {
+        "gettext-parser": "1.1.0",
+        "nomnom": "1.8.1"
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.16",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz",
+      "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "dev": true
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "dev": true
+    },
+    "probe-image-size": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-4.0.0.tgz",
+      "integrity": "sha512-nm7RvWUxps+2+jZKNLkd04mNapXNariS6G5WIEVzvAqjx7EUuKcY1Dp3e6oUK7GLwzJ+3gbSbPLFAASHFQrPcQ==",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.3.0",
+        "deepmerge": "^2.0.1",
+        "inherits": "^2.0.3",
+        "next-tick": "^1.0.0",
+        "request": "^2.83.0",
+        "stream-parser": "~0.3.1"
+      },
+      "dependencies": {
+        "deepmerge": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
+          "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
+          "dev": true
+        }
+      }
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "dev": true
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true
+    },
+    "promise": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+      "dev": true,
+      "requires": {
+        "asap": "~2.0.3"
+      }
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "promise-retry": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
+      "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=",
+      "dev": true,
+      "requires": {
+        "err-code": "^1.0.0",
+        "retry": "^0.10.0"
+      }
+    },
+    "protocols": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz",
+      "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==",
+      "dev": true
+    },
+    "proxy-agent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.0.tgz",
+      "integrity": "sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA==",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.2.0",
+        "debug": "^3.1.0",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "lru-cache": "^4.1.2",
+        "pac-proxy-agent": "^3.0.0",
+        "proxy-from-env": "^1.0.0",
+        "socks-proxy-agent": "^4.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "proxy-from-env": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+      "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "psl": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz",
+      "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==",
+      "dev": true
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "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==",
+          "dev": true,
+          "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==",
+      "dev": true
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "dev": true
+    },
+    "quick-format-unescaped": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.2.tgz",
+      "integrity": "sha512-FXTaCkwvpIlkdKeGDNgcq07SXWS383noQUuZjvdE1QcTt+eLuqof6/BDiEPqB59FWLie/l91+HtlJSw7iCViSA==",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
+      "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.3",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dev": true,
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      },
+      "dependencies": {
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+          "dev": true
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "readline2": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+      "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+      "dev": true,
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "mute-stream": "0.0.5"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "mute-stream": {
+          "version": "0.0.5",
+          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
+          "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
+          "dev": true
+        }
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.13.3",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+      "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+      "dev": true
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "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
+    },
+    "registry-auth-token": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz",
+      "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==",
+      "dev": true,
+      "requires": {
+        "rc": "^1.2.8",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "registry-url": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+      "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.0.1"
+      }
+    },
+    "relaxed-json": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz",
+      "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "commander": "^2.6.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "request": {
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+      "dev": true,
+      "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.0",
+        "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.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+      "dev": true
+    },
+    "require-uncached": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-2.0.0.tgz",
+      "integrity": "sha512-rPv1//BQwg4gzIbpJcKXWIfjDJEtgS8jzbsNoLcdVSE5FpBzKEKKuoG6MfCbLC28ZTv+qlQWC9/K7J5GBGPSMg==",
+      "dev": true,
+      "requires": {
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+          "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+          "dev": true
+        }
+      }
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-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
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "responselike": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+      "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+      "dev": true,
+      "requires": {
+        "lowercase-keys": "^1.0.0"
+      }
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "resumer": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
+      "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
+      "dev": true,
+      "requires": {
+        "through": "~2.3.4"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "retry": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
+      "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
+      "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "rx-lite": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
+      "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
+      "dev": true
+    },
+    "rxjs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+      "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "safe-json-stringify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
+      "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+      "dev": true,
+      "optional": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true
+    },
+    "secure-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
+      "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=",
+      "dev": true
+    },
+    "semver": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+      "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+      "dev": true
+    },
+    "semver-bundle": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/semver-bundle/-/semver-bundle-0.1.1.tgz",
+      "integrity": "sha512-AXZEjNFlP6BzqRlWQNF3NBGsDw/clPcuUAk1mUl+ypnSplG20CDLQj5ofmaj40vlUHt40duxH3d/x/RXItLAHA==",
+      "dev": true,
+      "requires": {
+        "semver": "^5.5.0"
+      }
+    },
+    "semver-diff": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+      "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+      "dev": true,
+      "requires": {
+        "semver": "^5.0.3"
+      }
+    },
+    "semver-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+      "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+      "dev": true
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
+    },
+    "set-immediate-shim": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.0.2"
+          }
+        }
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "shell-quote": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+      "dev": true,
+      "requires": {
+        "array-filter": "~0.0.0",
+        "array-map": "~0.0.0",
+        "array-reduce": "~0.0.0",
+        "jsonify": "~0.0.0"
+      }
+    },
+    "shelljs": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+      "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "interpret": "^1.0.0",
+        "rechoir": "^0.6.2"
+      }
+    },
+    "shellwords": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+      "dev": true
+    },
+    "sign-addon": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-0.3.1.tgz",
+      "integrity": "sha512-feaoG7+8IXr9SymOEd8VTZCSlVZArWcBDZ33IIdfXlU5NWWzXdCxCjPDqAkLQplFa7RRZr1S4lSmgMPn80Ze1A==",
+      "dev": true,
+      "requires": {
+        "babel-polyfill": "6.16.0",
+        "deepcopy": "0.6.3",
+        "es6-error": "4.0.0",
+        "es6-promisify": "5.0.0",
+        "jsonwebtoken": "8.2.1",
+        "mz": "2.5.0",
+        "request": "2.87.0",
+        "source-map-support": "0.4.6",
+        "stream-to-promise": "2.2.0",
+        "when": "3.7.7"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "requires": {
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
+          }
+        },
+        "es6-error": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.0.0.tgz",
+          "integrity": "sha1-8JTHBB9mJZm7EnINoFnWucf/D0A=",
+          "dev": true
+        },
+        "fast-deep-equal": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+          "dev": true
+        },
+        "har-validator": {
+          "version": "5.0.3",
+          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+          "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.1.0",
+            "har-schema": "^2.0.0"
+          }
+        },
+        "json-schema-traverse": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+          "dev": true
+        },
+        "mz": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/mz/-/mz-2.5.0.tgz",
+          "integrity": "sha1-KFkCXfA9RrV7sxcXSxlkd85kzsE=",
+          "dev": true,
+          "requires": {
+            "any-promise": "^1.0.0",
+            "object-assign": "^4.0.1",
+            "thenify-all": "^1.0.0"
+          }
+        },
+        "oauth-sign": {
+          "version": "0.8.2",
+          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+          "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+          "dev": true
+        },
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        },
+        "request": {
+          "version": "2.87.0",
+          "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+          "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+          "dev": true,
+          "requires": {
+            "aws-sign2": "~0.7.0",
+            "aws4": "^1.6.0",
+            "caseless": "~0.12.0",
+            "combined-stream": "~1.0.5",
+            "extend": "~3.0.1",
+            "forever-agent": "~0.6.1",
+            "form-data": "~2.3.1",
+            "har-validator": "~5.0.3",
+            "http-signature": "~1.2.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.17",
+            "oauth-sign": "~0.8.2",
+            "performance-now": "^2.1.0",
+            "qs": "~6.5.1",
+            "safe-buffer": "^5.1.1",
+            "tough-cookie": "~2.3.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        },
+        "source-map-support": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.6.tgz",
+          "integrity": "sha1-MlUqpktFg5KoXqs7C17mFScWeus=",
+          "dev": true,
+          "requires": {
+            "source-map": "^0.5.3"
+          }
+        },
+        "tough-cookie": {
+          "version": "2.3.4",
+          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+          "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+          "dev": true,
+          "requires": {
+            "punycode": "^1.4.1"
+          }
+        }
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "slice-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
+      }
+    },
+    "smart-buffer": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz",
+      "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "snyk": {
+      "version": "1.224.0",
+      "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.224.0.tgz",
+      "integrity": "sha512-M3aNiCXP0A8UB4OCMDnlfRwo90W4dzZp8RNfMv+P0DX8AKSSZjiQN/QYpZs4/vPTnJFsl25ey/p3MV/djmS2Ig==",
+      "dev": true,
+      "requires": {
+        "@snyk/dep-graph": "1.12.0",
+        "@snyk/gemfile": "1.2.0",
+        "@types/agent-base": "^4.2.0",
+        "@types/restify": "^4.3.6",
+        "abbrev": "^1.1.1",
+        "ansi-escapes": "3.2.0",
+        "chalk": "^2.4.2",
+        "configstore": "^3.1.2",
+        "debug": "^3.1.0",
+        "diff": "^4.0.1",
+        "git-url-parse": "11.1.2",
+        "glob": "^7.1.3",
+        "inquirer": "^6.2.2",
+        "lodash": "^4.17.14",
+        "needle": "^2.2.4",
+        "opn": "^5.5.0",
+        "os-name": "^3.0.0",
+        "proxy-agent": "^3.1.0",
+        "proxy-from-env": "^1.0.0",
+        "semver": "^6.0.0",
+        "snyk-config": "^2.2.1",
+        "snyk-docker-plugin": "1.29.1",
+        "snyk-go-plugin": "1.11.0",
+        "snyk-gradle-plugin": "^3.0.2",
+        "snyk-module": "1.9.1",
+        "snyk-mvn-plugin": "2.4.0",
+        "snyk-nodejs-lockfile-parser": "1.16.0",
+        "snyk-nuget-plugin": "1.12.1",
+        "snyk-php-plugin": "1.6.4",
+        "snyk-policy": "1.13.5",
+        "snyk-python-plugin": "^1.13.2",
+        "snyk-resolve": "1.0.1",
+        "snyk-resolve-deps": "4.4.0",
+        "snyk-sbt-plugin": "2.8.0",
+        "snyk-tree": "^1.0.0",
+        "snyk-try-require": "1.3.1",
+        "source-map-support": "^0.5.11",
+        "strip-ansi": "^5.2.0",
+        "tempfile": "^2.0.0",
+        "then-fs": "^2.0.0",
+        "update-notifier": "^2.5.0",
+        "uuid": "^3.3.2",
+        "wrap-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        },
+        "update-notifier": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+          "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+          "dev": true,
+          "requires": {
+            "boxen": "^1.2.1",
+            "chalk": "^2.0.1",
+            "configstore": "^3.0.0",
+            "import-lazy": "^2.1.0",
+            "is-ci": "^1.0.10",
+            "is-installed-globally": "^0.1.0",
+            "is-npm": "^1.0.0",
+            "latest-version": "^3.0.0",
+            "semver-diff": "^2.0.0",
+            "xdg-basedir": "^3.0.0"
+          }
+        }
+      }
+    },
+    "snyk-config": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/snyk-config/-/snyk-config-2.2.3.tgz",
+      "integrity": "sha512-9NjxHVMd1U1LFw66Lya4LXgrsFUiuRiL4opxfTFo0LmMNzUoU5Bk/p0zDdg3FE5Wg61r4fP2D8w+QTl6M8CGiw==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "lodash": "^4.17.15",
+        "nconf": "^0.10.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "snyk-docker-plugin": {
+      "version": "1.29.1",
+      "resolved": "https://registry.npmjs.org/snyk-docker-plugin/-/snyk-docker-plugin-1.29.1.tgz",
+      "integrity": "sha512-Mucc1rZ7l0U8Dykr5m6HPjau8b2H8JVtVaXGbKSZD6e/47JDJhudkgrWjsS5Yt/Zdp1weE3+4SguftFiVR971A==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "dockerfile-ast": "0.0.16",
+        "semver": "^6.1.0",
+        "tslib": "^1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
+      }
+    },
+    "snyk-go-parser": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/snyk-go-parser/-/snyk-go-parser-1.3.1.tgz",
+      "integrity": "sha512-jrFRfIk6yGHFeipGD66WV9ei/A/w/lIiGqI80w1ndMbg6D6M5pVNbK7ngDTmo4GdHrZDYqx/VBGBsUm2bol3Rg==",
+      "dev": true,
+      "requires": {
+        "toml": "^3.0.0",
+        "tslib": "^1.9.3"
+      }
+    },
+    "snyk-go-plugin": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/snyk-go-plugin/-/snyk-go-plugin-1.11.0.tgz",
+      "integrity": "sha512-9hsGgloioGuey5hbZfv+MkFEslxXHyzUlaAazcR0NsY7VLyG/b2g3f88f/ZwCwlWaKL9LMv/ERIiey3oWAB/qg==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "graphlib": "^2.1.1",
+        "snyk-go-parser": "1.3.1",
+        "tmp": "0.0.33",
+        "tslib": "^1.10.0"
+      }
+    },
+    "snyk-gradle-plugin": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/snyk-gradle-plugin/-/snyk-gradle-plugin-3.0.2.tgz",
+      "integrity": "sha512-9nyR03kHmePqBGaQiUeo3RD1YJ4qE5/V4tOmDQ8LNjHTQ54Xr8OXFC5xlJMV8FCtXrRXY0/WX8RMUPEUAm4c9g==",
+      "dev": true,
+      "requires": {
+        "@types/debug": "^4.1.4",
+        "chalk": "^2.4.2",
+        "clone-deep": "^0.3.0",
+        "debug": "^4.1.1",
+        "tmp": "0.0.33",
+        "tslib": "^1.9.3"
+      }
+    },
+    "snyk-module": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/snyk-module/-/snyk-module-1.9.1.tgz",
+      "integrity": "sha512-A+CCyBSa4IKok5uEhqT+hV/35RO6APFNLqk9DRRHg7xW2/j//nPX8wTSZUPF8QeRNEk/sX+6df7M1y6PBHGSHA==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "hosted-git-info": "^2.7.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "hosted-git-info": {
+          "version": "2.8.4",
+          "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
+          "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
+          "dev": true
+        }
+      }
+    },
+    "snyk-mvn-plugin": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/snyk-mvn-plugin/-/snyk-mvn-plugin-2.4.0.tgz",
+      "integrity": "sha512-Fmt6Mjx6zZz+4q6PnBkhuNGhEX++q/pKMI26ls4p3JPkx4KxBz89oncpkmf7P8YCkoaka8oHhtDEv/R4Z9LleQ==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15",
+        "tslib": "1.9.3"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.3",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+          "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+          "dev": true
+        }
+      }
+    },
+    "snyk-nodejs-lockfile-parser": {
+      "version": "1.16.0",
+      "resolved": "https://registry.npmjs.org/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.16.0.tgz",
+      "integrity": "sha512-cf3uozRXEG88nsjOQlo+SfOJPpcLs45qpnuk2vhBBZ577IMnV+fTOJQsP2YRiikLUbdgkVlduviwUO6OVn1PhA==",
+      "dev": true,
+      "requires": {
+        "@yarnpkg/lockfile": "^1.0.2",
+        "graphlib": "^2.1.5",
+        "lodash": "^4.17.14",
+        "source-map-support": "^0.5.7",
+        "tslib": "^1.9.3",
+        "uuid": "^3.3.2"
+      }
+    },
+    "snyk-nuget-plugin": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/snyk-nuget-plugin/-/snyk-nuget-plugin-1.12.1.tgz",
+      "integrity": "sha512-QuANQxBjTGj3hEf2YpEQ0WuI4Yq/93boqWUs4eoSTfDyBRFgIkUP6fLkzNldrkL8fQbcagqQ2Xz8M9IEKRQtMg==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "dotnet-deps-parser": "4.5.0",
+        "jszip": "^3.1.5",
+        "lodash": "^4.17.14",
+        "snyk-paket-parser": "1.5.0",
+        "tslib": "^1.9.3",
+        "xml2js": "^0.4.17"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "snyk-paket-parser": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/snyk-paket-parser/-/snyk-paket-parser-1.5.0.tgz",
+      "integrity": "sha512-1CYMPChJ9D9LBy3NLqHyv8TY7pR/LMISSr08LhfFw/FpfRZ+gTH8W6bbxCmybAYrOFNCqZkRprqOYDqZQFHipA==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.3"
+      }
+    },
+    "snyk-php-plugin": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/snyk-php-plugin/-/snyk-php-plugin-1.6.4.tgz",
+      "integrity": "sha512-FFQeimtbwq17nDUS0o0zuKgyjXSX7SpoC9iYTeKvxTXrmKf2QlxTtPvmMM4/hQxehEu1i40ow1Ozw0Ahxm8Dpw==",
+      "dev": true,
+      "requires": {
+        "@snyk/composer-lockfile-parser": "1.0.3",
+        "tslib": "1.9.3"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.9.3",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+          "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+          "dev": true
+        }
+      }
+    },
+    "snyk-policy": {
+      "version": "1.13.5",
+      "resolved": "https://registry.npmjs.org/snyk-policy/-/snyk-policy-1.13.5.tgz",
+      "integrity": "sha512-KI6GHt+Oj4fYKiCp7duhseUj5YhyL/zJOrrJg0u6r59Ux9w8gmkUYT92FHW27ihwuT6IPzdGNEuy06Yv2C9WaQ==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "email-validator": "^2.0.4",
+        "js-yaml": "^3.13.1",
+        "lodash.clonedeep": "^4.5.0",
+        "semver": "^6.0.0",
+        "snyk-module": "^1.9.1",
+        "snyk-resolve": "^1.0.1",
+        "snyk-try-require": "^1.3.1",
+        "then-fs": "^2.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
+      }
+    },
+    "snyk-python-plugin": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/snyk-python-plugin/-/snyk-python-plugin-1.13.2.tgz",
+      "integrity": "sha512-G9R1cYHw0E/VSx9tFa5nZp+653FIMXheteidrF3hjUe71jRdJELEUV/z5jxqYEWEFemcwGhMfW87De91GChVIQ==",
+      "dev": true,
+      "requires": {
+        "@snyk/cli-interface": "^2.0.2",
+        "tmp": "0.0.33"
+      }
+    },
+    "snyk-resolve": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/snyk-resolve/-/snyk-resolve-1.0.1.tgz",
+      "integrity": "sha512-7+i+LLhtBo1Pkth01xv+RYJU8a67zmJ8WFFPvSxyCjdlKIcsps4hPQFebhz+0gC5rMemlaeIV6cqwqUf9PEDpw==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "then-fs": "^2.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "snyk-resolve-deps": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/snyk-resolve-deps/-/snyk-resolve-deps-4.4.0.tgz",
+      "integrity": "sha512-aFPtN8WLqIk4E1ulMyzvV5reY1Iksz+3oPnUVib1jKdyTHymmOIYF7z8QZ4UUr52UsgmrD9EA/dq7jpytwFoOQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "^6.14.4",
+        "@types/semver": "^5.5.0",
+        "ansicolors": "^0.3.2",
+        "debug": "^3.2.5",
+        "lodash.assign": "^4.2.0",
+        "lodash.assignin": "^4.2.0",
+        "lodash.clone": "^4.5.0",
+        "lodash.flatten": "^4.4.0",
+        "lodash.get": "^4.4.2",
+        "lodash.set": "^4.3.2",
+        "lru-cache": "^4.0.0",
+        "semver": "^5.5.1",
+        "snyk-module": "^1.6.0",
+        "snyk-resolve": "^1.0.0",
+        "snyk-tree": "^1.0.0",
+        "snyk-try-require": "^1.1.1",
+        "then-fs": "^2.0.0"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "6.14.7",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.7.tgz",
+          "integrity": "sha512-YbPXbaynBTe0pVExPhL76TsWnxSPeFAvImIsmylpBWn/yfw+lHy+Q68aawvZHsgskT44ZAoeE67GM5f+Brekew==",
+          "dev": true
+        },
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "snyk-sbt-plugin": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/snyk-sbt-plugin/-/snyk-sbt-plugin-2.8.0.tgz",
+      "integrity": "sha512-ZzyBdND5CsaO0xkv05geZXu8Dd6Llvr/5oTj811U7h7UmrvljrAiABW4RGjRJPrPVuuJaDej2p633sgGtK9UsA==",
+      "dev": true,
+      "requires": {
+        "semver": "^6.1.2",
+        "tmp": "^0.1.0",
+        "tree-kill": "^1.2.1",
+        "tslib": "^1.10.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        },
+        "tmp": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
+          "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
+          "dev": true,
+          "requires": {
+            "rimraf": "^2.6.3"
+          },
+          "dependencies": {
+            "rimraf": {
+              "version": "2.7.1",
+              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+              "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+              "dev": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            }
+          }
+        }
+      }
+    },
+    "snyk-tree": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/snyk-tree/-/snyk-tree-1.0.0.tgz",
+      "integrity": "sha1-D7cxdtvzLngvGRAClBYESPkRHMg=",
+      "dev": true,
+      "requires": {
+        "archy": "^1.0.0"
+      }
+    },
+    "snyk-try-require": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/snyk-try-require/-/snyk-try-require-1.3.1.tgz",
+      "integrity": "sha1-bgJvkuZK9/zM6h7lPVJIQeQYohI=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "lodash.clonedeep": "^4.3.0",
+        "lru-cache": "^4.0.0",
+        "then-fs": "^2.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "socks": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz",
+      "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.5",
+        "smart-buffer": "4.0.2"
+      }
+    },
+    "socks-proxy-agent": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz",
+      "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==",
+      "dev": true,
+      "requires": {
+        "agent-base": "~4.2.1",
+        "socks": "~2.3.2"
+      },
+      "dependencies": {
+        "agent-base": {
+          "version": "4.2.1",
+          "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+          "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
+          "dev": true,
+          "requires": {
+            "es6-promisify": "^5.0.0"
+          }
+        }
+      }
+    },
+    "sonic-boom": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.5.tgz",
+      "integrity": "sha512-1pKrnAV6RfvntPnarY71tpthFTM3pWZWWQdghZY8ARjtDPGzG/inxqSuRwQY/7V1woUjfyxPb437zn4p5phgnQ==",
+      "dev": true,
+      "requires": {
+        "flatstr": "^1.0.12"
+      }
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.1",
+        "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.12",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
+      "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "spawn-sync": {
+      "version": "1.0.15",
+      "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
+      "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.4.7",
+        "os-shim": "^0.1.2"
+      }
+    },
+    "split": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+      "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+      "dev": true,
+      "requires": {
+        "through": "2"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "dev": true,
+      "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": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "^3.5.1"
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-parser": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
+      "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
+      "dev": true,
+      "requires": {
+        "debug": "2"
+      },
+      "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"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
+    },
+    "stream-to-array": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+      "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.1.0"
+      }
+    },
+    "stream-to-promise": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-2.2.0.tgz",
+      "integrity": "sha1-se2y4cjLESidG1A8CNPyrvUeZQ8=",
+      "dev": true,
+      "requires": {
+        "any-promise": "~1.3.0",
+        "end-of-stream": "~1.1.0",
+        "stream-to-array": "~2.3.0"
+      },
+      "dependencies": {
+        "end-of-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz",
+          "integrity": "sha1-6TUyWLqpEIll78QcsO+K3i88+wc=",
+          "dev": true,
+          "requires": {
+            "once": "~1.3.0"
+          }
+        },
+        "once": {
+          "version": "1.3.3",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+          "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        }
+      }
+    },
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "string.prototype.trim": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
+      "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.0",
+        "function-bind": "^1.0.2"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "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"
+      },
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+      "dev": true
+    },
+    "strip-bom-buf": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz",
+      "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==",
+      "dev": true,
+      "requires": {
+        "is-utf8": "^0.2.1"
+      }
+    },
+    "strip-bom-stream": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz",
+      "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==",
+      "dev": true,
+      "requires": {
+        "first-chunk-stream": "^3.0.0",
+        "strip-bom-buf": "^2.0.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-json-comments": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
+      "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
+      "dev": true
+    },
+    "stylelint-bundle": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-bundle/-/stylelint-bundle-8.0.0.tgz",
+      "integrity": "sha512-kASuh8U4SbfDh12plCbwmIvttR8P/+Y33OwJ2t5GZuradF2Hk9dP27U5cPyqK8HAPw7wbr/LHYwkjQiSL7gh3A==",
+      "dev": true
+    },
+    "stylus-lang-bundle": {
+      "version": "0.54.5",
+      "resolved": "https://registry.npmjs.org/stylus-lang-bundle/-/stylus-lang-bundle-0.54.5.tgz",
+      "integrity": "sha512-UGd0rNe1aiXAMzOUNiIoH7Y4qVN6poYHZTt/tM6vJ4UWS8negVxds4H25Rm+TDJH8clkd+R8n+3VIaa3C7LbVw==",
+      "dev": true
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "table": {
+      "version": "5.4.6",
+      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "tape": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz",
+      "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==",
+      "dev": true,
+      "requires": {
+        "deep-equal": "~1.0.1",
+        "defined": "~1.0.0",
+        "for-each": "~0.3.3",
+        "function-bind": "~1.1.1",
+        "glob": "~7.1.4",
+        "has": "~1.0.3",
+        "inherits": "~2.0.4",
+        "minimist": "~1.2.0",
+        "object-inspect": "~1.6.0",
+        "resolve": "~1.11.1",
+        "resumer": "~0.0.0",
+        "string.prototype.trim": "~1.1.2",
+        "through": "~2.3.8"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "inherits": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+          "dev": true
+        },
+        "resolve": {
+          "version": "1.11.1",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+          "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+          "dev": true,
+          "requires": {
+            "path-parse": "^1.0.6"
+          }
+        }
+      }
+    },
+    "tar-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+      "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+      "dev": true,
+      "requires": {
+        "bl": "^1.0.0",
+        "buffer-alloc": "^1.2.0",
+        "end-of-stream": "^1.0.0",
+        "fs-constants": "^1.0.0",
+        "readable-stream": "^2.3.0",
+        "to-buffer": "^1.1.1",
+        "xtend": "^4.0.0"
+      }
+    },
+    "temp-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+      "dev": true
+    },
+    "tempfile": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+      "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+      "dev": true,
+      "requires": {
+        "temp-dir": "^1.0.0",
+        "uuid": "^3.0.1"
+      }
+    },
+    "term-size": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+      "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.7.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
+    },
+    "then-fs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/then-fs/-/then-fs-2.0.0.tgz",
+      "integrity": "sha1-cveS3Z0xcFqRrhnr/Piz+WjIHaI=",
+      "dev": true,
+      "requires": {
+        "promise": ">=3.2 <8"
+      }
+    },
+    "thenify": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+      "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "dev": true,
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "thunkify": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz",
+      "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=",
+      "dev": true
+    },
+    "timed-out": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+      "dev": true
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "to-buffer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+      "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-readable-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+      "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+      "dev": true
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "toml": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
+      "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==",
+      "dev": true
+    },
+    "tosource": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz",
+      "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+      "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+      "dev": true,
+      "requires": {
+        "psl": "^1.1.24",
+        "punycode": "^1.4.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "tr46": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "traverse": {
+      "version": "0.4.6",
+      "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz",
+      "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=",
+      "dev": true
+    },
+    "tree-kill": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+      "dev": true
+    },
+    "tslib": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "type": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz",
+      "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==",
+      "dev": true
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-fest": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
+      "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
+      "dev": true
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "underscore": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+      "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      }
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "unique-string": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+      "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+      "dev": true,
+      "requires": {
+        "crypto-random-string": "^1.0.0"
+      }
+    },
+    "universal-base64": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/universal-base64/-/universal-base64-2.1.0.tgz",
+      "integrity": "sha512-WeOkACVnIXJZr/qlv7++Rl1zuZOHN96v2yS5oleUuv8eJOs5j9M5U3xQEIoWqn1OzIuIcgw0fswxWnUVGDfW6g==",
+      "dev": true
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "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=",
+          "dev": true,
+          "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=",
+              "dev": true,
+              "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=",
+          "dev": true
+        }
+      }
+    },
+    "unzip-response": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+      "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+      "dev": true
+    },
+    "upath": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+      "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
+      "dev": true
+    },
+    "update-notifier": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz",
+      "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==",
+      "dev": true,
+      "requires": {
+        "boxen": "^3.0.0",
+        "chalk": "^2.0.1",
+        "configstore": "^4.0.0",
+        "has-yarn": "^2.1.0",
+        "import-lazy": "^2.1.0",
+        "is-ci": "^2.0.0",
+        "is-installed-globally": "^0.1.0",
+        "is-npm": "^3.0.0",
+        "is-yarn-global": "^0.3.0",
+        "latest-version": "^5.0.0",
+        "semver-diff": "^2.0.0",
+        "xdg-basedir": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-align": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
+          "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.0.0"
+          }
+        },
+        "boxen": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
+          "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
+          "dev": true,
+          "requires": {
+            "ansi-align": "^3.0.0",
+            "camelcase": "^5.3.1",
+            "chalk": "^2.4.2",
+            "cli-boxes": "^2.2.0",
+            "string-width": "^3.0.0",
+            "term-size": "^1.2.0",
+            "type-fest": "^0.3.0",
+            "widest-line": "^2.0.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==",
+          "dev": true
+        },
+        "cli-boxes": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
+          "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==",
+          "dev": true
+        },
+        "configstore": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
+          "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^4.1.0",
+            "graceful-fs": "^4.1.2",
+            "make-dir": "^1.0.0",
+            "unique-string": "^1.0.0",
+            "write-file-atomic": "^2.0.0",
+            "xdg-basedir": "^3.0.0"
+          }
+        },
+        "got": {
+          "version": "9.6.0",
+          "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+          "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+          "dev": true,
+          "requires": {
+            "@sindresorhus/is": "^0.14.0",
+            "@szmarczak/http-timer": "^1.1.2",
+            "cacheable-request": "^6.0.0",
+            "decompress-response": "^3.3.0",
+            "duplexer3": "^0.1.4",
+            "get-stream": "^4.1.0",
+            "lowercase-keys": "^1.0.1",
+            "mimic-response": "^1.0.1",
+            "p-cancelable": "^1.0.0",
+            "to-readable-stream": "^1.0.0",
+            "url-parse-lax": "^3.0.0"
+          }
+        },
+        "is-ci": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+          "dev": true,
+          "requires": {
+            "ci-info": "^2.0.0"
+          }
+        },
+        "is-npm": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
+          "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
+          "dev": true
+        },
+        "latest-version": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
+          "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
+          "dev": true,
+          "requires": {
+            "package-json": "^6.3.0"
+          }
+        },
+        "package-json": {
+          "version": "6.5.0",
+          "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
+          "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
+          "dev": true,
+          "requires": {
+            "got": "^9.6.0",
+            "registry-auth-token": "^4.0.0",
+            "registry-url": "^5.0.0",
+            "semver": "^6.2.0"
+          }
+        },
+        "prepend-http": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+          "dev": true
+        },
+        "registry-url": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
+          "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
+          "dev": true,
+          "requires": {
+            "rc": "^1.2.8"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "url-parse-lax": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+          "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+          "dev": true,
+          "requires": {
+            "prepend-http": "^2.0.0"
+          }
+        }
+      }
+    },
+    "updates": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/updates/-/updates-9.0.0.tgz",
+      "integrity": "sha512-eGfRleQPY8wzyfJYReOkmilfUlPGSTYzhoFgJtU9Oe25jI3wGtYowlxkFhKoaIbHJ8NNt1Uedy2iHvJ/fRFs+w==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "find-up": "4.1.0",
+        "hosted-git-info": "3.0.0",
+        "make-fetch-happen": "5.0.0",
+        "minimist": "1.2.0",
+        "rc": "1.2.8",
+        "registry-auth-token": "4.0.0",
+        "semver": "6.3.0",
+        "string-width": "4.1.0",
+        "text-table": "0.2.0"
+      },
+      "dependencies": {
+        "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==",
+          "dev": true
+        },
+        "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==",
+          "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
+        },
+        "string-width": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
+          "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^5.2.0"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "url-parse-lax": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+      "dev": true,
+      "requires": {
+        "prepend-http": "^1.0.1"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+      "dev": true
+    },
+    "user-home": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+      "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "usercss-meta": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/usercss-meta/-/usercss-meta-0.9.0.tgz",
+      "integrity": "sha512-S6AuhI11jc2xh6DIx3xR+4EU5/YiV0lLIvDhJgE5BTJTkcBEXrScJUIKVvzApGRou3lSLV0Qi4fVbSsN9BR6Ig==",
+      "dev": true,
+      "requires": {
+        "semver-regex": "^2.0.0"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
+      }
+    },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vscode-languageserver-types": {
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz",
+      "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==",
+      "dev": true
+    },
+    "watchpack": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "dev": true,
+      "requires": {
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "web-ext": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-3.1.1.tgz",
+      "integrity": "sha512-snTfhuxoplm8QAlv+CwOaF0XSaycDUmxsrLfi4NtZRvZ6J79+ijOu9HyTXP0rd1zT3uagWYOBc3ol/ZOsf1LQQ==",
+      "dev": true,
+      "requires": {
+        "@babel/polyfill": "7.4.4",
+        "@babel/runtime": "7.4.5",
+        "@cliqz-oss/firefox-client": "0.3.1",
+        "@cliqz-oss/node-firefox-connect": "1.2.1",
+        "adbkit": "2.11.1",
+        "addons-linter": "1.10.0",
+        "bunyan": "1.8.12",
+        "camelcase": "5.3.1",
+        "debounce": "1.2.0",
+        "decamelize": "3.2.0",
+        "es6-error": "4.1.1",
+        "event-to-promise": "0.8.0",
+        "firefox-profile": "1.2.0",
+        "fx-runner": "1.0.11",
+        "git-rev-sync": "1.12.0",
+        "mkdirp": "0.5.1",
+        "multimatch": "4.0.0",
+        "mz": "2.7.0",
+        "node-notifier": "5.4.0",
+        "opn": "5.5.0",
+        "parse-json": "4.0.0",
+        "require-uncached": "2.0.0",
+        "sign-addon": "0.3.1",
+        "source-map-support": "0.5.12",
+        "stream-to-promise": "2.2.0",
+        "strip-json-comments": "3.0.1",
+        "tmp": "0.1.0",
+        "update-notifier": "3.0.1",
+        "watchpack": "1.6.0",
+        "yargs": "13.2.4",
+        "zip-dir": "1.0.2"
+      },
+      "dependencies": {
+        "tmp": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
+          "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
+          "dev": true,
+          "requires": {
+            "rimraf": "^2.6.3"
+          },
+          "dependencies": {
+            "rimraf": {
+              "version": "2.7.1",
+              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+              "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+              "dev": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            }
+          }
+        }
+      }
+    },
+    "webext-tx-fix": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/webext-tx-fix/-/webext-tx-fix-0.3.2.tgz",
+      "integrity": "sha512-rVJOW12+DQGzpe3BnxurKh5GUK2RN6jWrvpgQpRE736Azw5IqkbuAEfObcg0g4p+wcED8j1b9ctZwJGbe9M5PQ==",
+      "dev": true,
+      "requires": {
+        "detect-indent": "^6.0.0",
+        "neodoc": "^2.0.2",
+        "ordered-json": "^0.1.1"
+      }
+    },
+    "webidl-conversions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+      "dev": true
+    },
+    "whatwg-url": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+      "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+      "dev": true,
+      "requires": {
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "when": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz",
+      "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=",
+      "dev": true
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "widest-line": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+      "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+      "dev": true,
+      "requires": {
+        "string-width": "^2.1.1"
+      }
+    },
+    "window-size": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+      "dev": true
+    },
+    "windows-release": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz",
+      "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==",
+      "dev": true,
+      "requires": {
+        "execa": "^1.0.0"
+      }
+    },
+    "winreg": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
+      "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=",
+      "dev": true
+    },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "string-width": "^3.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "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==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "write": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "write-file-atomic": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+      "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "xdg-basedir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+      "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+      "dev": true
+    },
+    "xml2js": {
+      "version": "0.4.22",
+      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz",
+      "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==",
+      "dev": true,
+      "requires": {
+        "sax": ">=0.6.0",
+        "util.promisify": "~1.0.0",
+        "xmlbuilder": "~11.0.0"
+      },
+      "dependencies": {
+        "xmlbuilder": {
+          "version": "11.0.1",
+          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+          "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+          "dev": true
+        }
+      }
+    },
+    "xmlbuilder": {
+      "version": "9.0.7",
+      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+      "dev": true
+    },
+    "xregexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
+      "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+      "dev": true
+    },
+    "yargs": {
+      "version": "13.2.4",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+      "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+      "dev": true,
+      "requires": {
+        "cliui": "^5.0.0",
+        "find-up": "^3.0.0",
+        "get-caller-file": "^2.0.1",
+        "os-locale": "^3.1.0",
+        "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.0"
+      },
+      "dependencies": {
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.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==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "13.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+      "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "dependencies": {
+        "decamelize": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+          "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+          "dev": true
+        }
+      }
+    },
+    "yauzl": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "dev": true,
+      "requires": {
+        "buffer-crc32": "~0.2.3",
+        "fd-slicer": "~1.1.0"
+      }
+    },
+    "zip-dir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz",
+      "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=",
+      "dev": true,
+      "requires": {
+        "async": "^1.5.2",
+        "jszip": "^2.4.0"
+      },
+      "dependencies": {
+        "async": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+          "dev": true
+        },
+        "jszip": {
+          "version": "2.6.1",
+          "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz",
+          "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=",
+          "dev": true,
+          "requires": {
+            "pako": "~1.0.2"
+          }
+        }
+      }
+    },
+    "zip-stream": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.2.tgz",
+      "integrity": "sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==",
+      "dev": true,
+      "requires": {
+        "archiver-utils": "^2.1.0",
+        "compress-commons": "^2.1.1",
+        "readable-stream": "^3.4.0"
+      },
+      "dependencies": {
+        "compress-commons": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz",
+          "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==",
+          "dev": true,
+          "requires": {
+            "buffer-crc32": "^0.2.13",
+            "crc32-stream": "^3.0.1",
+            "normalize-path": "^3.0.0",
+            "readable-stream": "^2.3.6"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "2.3.6",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+              "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+              "dev": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+              }
+            }
+          }
+        },
+        "crc32-stream": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
+          "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
+          "dev": true,
+          "requires": {
+            "crc": "^3.4.4",
+            "readable-stream": "^3.4.0"
+          }
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
index d074a5e6..c587ed18 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,6 @@
     "archiver": "^3.1.1",
     "codemirror": "^5.48.4",
     "db-to-cloud": "^0.4.5",
-    "dropbox": "^4.0.30",
     "endent": "^1.3.0",
     "eslint": "^6.3.0",
     "fs-extra": "^8.1.0",
@@ -23,8 +22,7 @@
     "updates": "^9.0.0",
     "usercss-meta": "^0.9.0",
     "web-ext": "^3.1.1",
-    "webext-tx-fix": "^0.3.2",
-    "zipjs-browserify": "^1.0.1"
+    "webext-tx-fix": "^0.3.2"
   },
   "scripts": {
     "lint": "eslint **/*.js --cache || exit 0",
diff --git a/sync/compress-text.js b/sync/compress-text.js
deleted file mode 100644
index b4829b22..00000000
--- a/sync/compress-text.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* global zip onDOMready */
-/* exported createZipFileFromText readZipFileFromBlob */
-'use strict';
-
-onDOMready().then(() => {
-  zip.workerScriptsPath = '../vendor/zipjs-browserify/';
-});
-
-/**
- * @param {String} filename
- * @param {String} text content of the file as text
- * @returns {Promise} resolves to a blob object representing the zip file
- */
-function createZipFileFromText(filename, text) {
-  return new Promise((resolve, reject) => {
-    zip.createWriter(new zip.BlobWriter('application/zip'), writer => {
-      writer.add(filename, new zip.TextReader(text), function () {
-        writer.close(blob => {
-          resolve(blob);
-        });
-      });
-    }, reject);
-  });
-}
-
-/**
- * @param {Object} blob object of zip file
- * @returns {Promise} resolves to a string the content of the first file of the zip
- */
-function readZipFileFromBlob(blob) {
-  return new Promise((resolve, reject) => {
-    zip.createReader(new zip.BlobReader(blob), zipReader => {
-      zipReader.getEntries(entries => {
-        entries[0].getData(new zip.BlobWriter('text/plain'), data => {
-          zipReader.close();
-          resolve(data);
-        });
-      });
-    }, reject);
-  });
-}
diff --git a/sync/cross-browser-functions.js b/sync/cross-browser-functions.js
deleted file mode 100644
index 9dd877e1..00000000
--- a/sync/cross-browser-functions.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/* exported getRedirectUrlAuthFlow launchWebAuthFlow */
-'use strict';
-
-/**
- * @returns {String} returns a redirect URL to be used in |launchWebAuthFlow|
- */
-function getRedirectUrlAuthFlow() {
-  const browserApi = typeof browser === 'undefined' ? chrome : browser;
-  return browserApi.identity.getRedirectURL();
-}
-
-/**
- * @param {Object} details based on chrome api
- * @param {string} details.url url that initiates the auth flow
- * @param {boolean} details.interactive if it is true a window will be displayed
- * @return {Promise} returns the url containing the token for extraction
- */
-function launchWebAuthFlow(details) {
-  if (typeof browser === 'undefined') {
-    return new Promise(resolve => {
-      chrome.identity.launchWebAuthFlow(details, resolve);
-    });
-  }
-  return browser.identity.launchWebAuthFlow(details);
-}
diff --git a/sync/import-export-dropbox.js b/sync/import-export-dropbox.js
deleted file mode 100644
index f72c711a..00000000
--- a/sync/import-export-dropbox.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/* global messageBox Dropbox createZipFileFromText readZipFileFromBlob
-  launchWebAuthFlow getRedirectUrlAuthFlow importFromString resolve
-  $ $create t chromeLocal API getOwnTab */
-'use strict';
-
-const DROPBOX_API_KEY = 'zg52vphuapvpng9';
-const FILENAME_ZIP_FILE = 'stylus.json';
-const DROPBOX_FILE = 'stylus.zip';
-const API_ERROR_STATUS_FILE_NOT_FOUND = 409;
-const HTTP_STATUS_CANCEL = 499;
-
-function messageProgressBar(data) {
-  return messageBox({
-    title: `${data.title}`,
-    className: 'config-dialog',
-    contents: [
-      $create('p', data.text)
-    ],
-    buttons: [{
-      textContent: t('confirmClose'),
-      dataset: {cmd: 'close'},
-    }],
-  }).then(() => {
-    document.body.style.minWidth = '';
-    document.body.style.minHeight = '';
-  });
-}
-
-function hasDropboxAccessToken() {
-  return chromeLocal.getValue('dropbox_access_token');
-}
-
-function requestDropboxAccessToken() {
-  const client = new Dropbox.Dropbox({
-    clientId: DROPBOX_API_KEY,
-    fetch
-  });
-  const authUrl = client.getAuthenticationUrl(getRedirectUrlAuthFlow());
-  return launchWebAuthFlow({url: authUrl, interactive: true})
-  .then(urlReturned => {
-    const params = new URLSearchParams(new URL(urlReturned).hash.replace('#', ''));
-    chromeLocal.setValue('dropbox_access_token', params.get('access_token'));
-    return params.get('access_token');
-  });
-}
-
-function uploadFileDropbox(client, stylesText) {
-  return client.filesUpload({path: '/' + DROPBOX_FILE, contents: stylesText});
-}
-
-$('#sync-dropbox-export').onclick = event => {
-  event.preventDefault();
-  const mode = localStorage.installType;
-  const title = t('syncDropboxStyles');
-  const text = mode === 'normal' ? t('connectingDropbox') : t('connectingDropboxNotAllowed');
-  messageProgressBar({title, text});
-  if (mode !== 'normal') return;
-
-  hasDropboxAccessToken()
-  .then(token => token || requestDropboxAccessToken())
-  .then(token => {
-    const client = new Dropbox.Dropbox({
-      clientId: DROPBOX_API_KEY,
-      accessToken: token,
-      fetch
-    });
-    return client.filesDownload({path: '/' + DROPBOX_FILE})
-    .then(() => messageBox.confirm(t('overwriteFileExport')))
-    .then(ok => {
-      // deletes file if user want to
-      if (!ok) {
-        return Promise.reject({status: HTTP_STATUS_CANCEL});
-      }
-      return client.filesDelete({path: '/' + DROPBOX_FILE});
-    })
-    // file deleted with success, get styles and create a file
-    .then(() => {
-      messageProgressBar({title: title, text: t('gettingStyles')});
-      return API.getAllStyles().then(styles => JSON.stringify(styles, null, '\t'));
-    })
-    // create zip file
-    .then(stylesText => {
-      messageProgressBar({title: title, text: t('zipStyles')});
-      return createZipFileFromText(FILENAME_ZIP_FILE, stylesText);
-    })
-    // create file dropbox
-    .then(zipedText => {
-      messageProgressBar({title: title, text: t('uploadingFile')});
-      return uploadFileDropbox(client, zipedText);
-    })
-    // gives feedback to user
-    .then(() => messageProgressBar({title: title, text: t('exportSavedSuccess')}))
-    // handle not found cases and cancel action
-    .catch(error => {
-      console.log(error);
-      // saving file first time
-      if (error.status === API_ERROR_STATUS_FILE_NOT_FOUND) {
-        API.getAllStyles()
-        .then(styles => {
-          messageProgressBar({title: title, text: t('gettingStyles')});
-          return JSON.stringify(styles, null, '\t');
-        })
-        .then(stylesText => {
-          messageProgressBar({title: title, text: t('zipStyles')});
-          return createZipFileFromText(FILENAME_ZIP_FILE, stylesText);
-        })
-        .then(zipedText => {
-          messageProgressBar({title: title, text: t('uploadingFile')});
-          return uploadFileDropbox(client, zipedText);
-        })
-        .then(() => messageProgressBar({title: title, text: t('exportSavedSuccess')}))
-        .catch(err => messageBox.alert(err));
-        return;
-      }
-
-      // user cancelled the flow
-      if (error.status === HTTP_STATUS_CANCEL) {
-        return;
-      }
-
-      console.error(error);
-    });
-  });
-};
-
-$('#sync-dropbox-import').onclick = event => {
-  event.preventDefault();
-  const mode = localStorage.installType;
-  const title = t('retrieveDropboxSync');
-  const text = mode === 'normal' ? t('connectingDropbox') : t('connectingDropboxNotAllowed');
-  messageProgressBar({title, text});
-  if (mode !== 'normal') return;
-
-  hasDropboxAccessToken()
-  .then(token => token || requestDropboxAccessToken())
-  .then(token => {
-    const client = new Dropbox.Dropbox({
-      clientId: DROPBOX_API_KEY,
-      accessToken: token,
-      fetch
-    });
-    return client.filesDownload({path: '/' + DROPBOX_FILE})
-    .then(response => {
-      messageProgressBar({title: title, text: t('unzipStyles')});
-      return readZipFileFromBlob(response.fileBlob);
-    })
-    .then(zipedFileBlob => {
-      messageProgressBar({title: title, text: t('readingStyles')});
-      document.body.style.cursor = 'wait';
-      const fReader = new FileReader();
-      fReader.onloadend = event => {
-        const text = event.target.result;
-        const maybeUsercss = !/^[\s\r\n]*\[/.test(text) &&
-          (text.includes('==UserStyle==') || /==UserStyle==/i.test(text));
-        (!maybeUsercss ?
-          importFromString(text) :
-          getOwnTab().then(tab => {
-            tab.url = URL.createObjectURL(new Blob([text], {type: 'text/css'}));
-            return API.openUsercssInstallPage({direct: true, tab})
-              .then(() => URL.revokeObjectURL(tab.url));
-          })
-        ).then(numStyles => {
-          document.body.style.cursor = '';
-          resolve(numStyles);
-        });
-      };
-      fReader.readAsText(zipedFileBlob, 'utf-8');
-    })
-    .catch(error => {
-      // no file
-      if (error.status === API_ERROR_STATUS_FILE_NOT_FOUND) {
-        messageBox.alert(t('noFileToImport'));
-        return;
-      }
-      messageBox.alert(error);
-    });
-  });
-};
diff --git a/tools/update-libraries.js b/tools/update-libraries.js
index 7abc6e87..434eae5d 100644
--- a/tools/update-libraries.js
+++ b/tools/update-libraries.js
@@ -11,9 +11,6 @@ const files = {
     '*', // only update existing vendor files
     'theme' // update all theme files
   ],
-  'dropbox': [
-    'dist/Dropbox-sdk.js → dropbox-sdk.js'
-  ],
   'jsonlint': [
     'lib/jsonlint.js → jsonlint.js'
   ],
@@ -35,12 +32,6 @@ const files = {
   'usercss-meta': [
     'dist/usercss-meta.min.js → usercss-meta.min.js'
   ],
-  'zipjs-browserify': [
-    'vendor/deflate.js → deflate.js',
-    'vendor/inflate.js → inflate.js',
-    'vendor/z-worker.js → z-worker.js',
-    'vendor/zip.js → zip.js'
-  ],
   'db-to-cloud': [
     'dist/db-to-cloud.min.js → db-to-cloud.min.js'
   ]
diff --git a/vendor/dropbox/LICENSE b/vendor/dropbox/LICENSE
deleted file mode 100644
index c06e3c4a..00000000
--- a/vendor/dropbox/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2016 Dropbox Inc., http://www.dropbox.com/
-
-    Permission is hereby granted, free of charge, to any person obtaining
-    a copy of this software and associated documentation files (the
-    "Software"), to deal in the Software without restriction, including
-    without limitation the rights to use, copy, modify, merge, publish,
-    distribute, sublicense, and/or sell copies of the Software, and to
-    permit persons to whom the Software is furnished to do so, subject to
-    the following conditions:
-
-    The above copyright notice and this permission notice shall be
-    included in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/dropbox/README.md b/vendor/dropbox/README.md
deleted file mode 100644
index 92c52236..00000000
--- a/vendor/dropbox/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## Dropbox SDK v4.0.30
-
-Dropbox SDK JS installed via npm - source repo:
-
-https://github.com/dropbox/dropbox-sdk-js/tree/v4.0.30
-
-The source repo **does not** include the `dist` folder with the generated `dropbox-sdk.js`
-distribution file. It can only be obtained from the npm `node_modules` folder after installing
-the module.
-
-- https://www.npmjs.com/package/dropbox
-- https://github.com/dropbox/dropbox-sdk-js/releases
diff --git a/vendor/dropbox/dropbox-sdk.js b/vendor/dropbox/dropbox-sdk.js
deleted file mode 100644
index c73dde8a..00000000
--- a/vendor/dropbox/dropbox-sdk.js
+++ /dev/null
@@ -1,5434 +0,0 @@
-(function (global, factory) {
-	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
-	typeof define === 'function' && define.amd ? define(factory) :
-	(global.Dropbox = factory());
-}(this, (function () { 'use strict';
-
-// Auto-generated by Stone, do not modify.
-var routes = {};
-
-/**
- * Creates an OAuth 2.0 access token from the supplied OAuth 1.0 access token.
- * @function Dropbox#authTokenFromOauth1
- * @arg {AuthTokenFromOAuth1Arg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.authTokenFromOauth1 = function (arg) {
-  return this.request('auth/token/from_oauth1', arg, 'app', 'api', 'rpc');
-};
-
-/**
- * Disables the access token used to authenticate the call.
- * @function Dropbox#authTokenRevoke
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.authTokenRevoke = function (arg) {
-  return this.request('auth/token/revoke', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Removes all manually added contacts. You'll still keep contacts who are on
- * your team or who you imported. New contacts will be added when you share.
- * @function Dropbox#contactsDeleteManualContacts
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.contactsDeleteManualContacts = function (arg) {
-  return this.request('contacts/delete_manual_contacts', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Removes manually added contacts from the given list.
- * @function Dropbox#contactsDeleteManualContactsBatch
- * @arg {ContactsDeleteManualContactsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.contactsDeleteManualContactsBatch = function (arg) {
-  return this.request('contacts/delete_manual_contacts_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Add property groups to a Dropbox file. See templates/add_for_user or
- * templates/add_for_team to create new templates.
- * @function Dropbox#filePropertiesPropertiesAdd
- * @arg {FilePropertiesAddPropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesAdd = function (arg) {
-  return this.request('file_properties/properties/add', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Overwrite property groups associated with a file. This endpoint should be
- * used instead of properties/update when property groups are being updated via
- * a "snapshot" instead of via a "delta". In other words, this endpoint will
- * delete all omitted fields from a property group, whereas properties/update
- * will only delete fields that are explicitly marked for deletion.
- * @function Dropbox#filePropertiesPropertiesOverwrite
- * @arg {FilePropertiesOverwritePropertyGroupArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesOverwrite = function (arg) {
-  return this.request('file_properties/properties/overwrite', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Permanently removes the specified property group from the file. To remove
- * specific property field key value pairs, see properties/update. To update a
- * template, see templates/update_for_user or templates/update_for_team. To
- * remove a template, see templates/remove_for_user or
- * templates/remove_for_team.
- * @function Dropbox#filePropertiesPropertiesRemove
- * @arg {FilePropertiesRemovePropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesRemove = function (arg) {
-  return this.request('file_properties/properties/remove', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Search across property templates for particular property field values.
- * @function Dropbox#filePropertiesPropertiesSearch
- * @arg {FilePropertiesPropertiesSearchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesSearch = function (arg) {
-  return this.request('file_properties/properties/search', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from properties/search, use this to paginate
- * through all search results.
- * @function Dropbox#filePropertiesPropertiesSearchContinue
- * @arg {FilePropertiesPropertiesSearchContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesSearchContinue = function (arg) {
-  return this.request('file_properties/properties/search/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Add, update or remove properties associated with the supplied file and
- * templates. This endpoint should be used instead of properties/overwrite when
- * property groups are being updated via a "delta" instead of via a "snapshot" .
- * In other words, this endpoint will not delete any omitted fields from a
- * property group, whereas properties/overwrite will delete any fields that are
- * omitted from a property group.
- * @function Dropbox#filePropertiesPropertiesUpdate
- * @arg {FilePropertiesUpdatePropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesPropertiesUpdate = function (arg) {
-  return this.request('file_properties/properties/update', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Add a template associated with a team. See properties/add to add properties
- * to a file or folder. Note: this endpoint will create team-owned templates.
- * @function Dropbox#filePropertiesTemplatesAddForTeam
- * @arg {FilePropertiesAddTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesAddForTeam = function (arg) {
-  return this.request('file_properties/templates/add_for_team', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Add a template associated with a user. See properties/add to add properties
- * to a file. This endpoint can't be called on a team member or admin's behalf.
- * @function Dropbox#filePropertiesTemplatesAddForUser
- * @arg {FilePropertiesAddTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesAddForUser = function (arg) {
-  return this.request('file_properties/templates/add_for_user', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get the schema for a specified template.
- * @function Dropbox#filePropertiesTemplatesGetForTeam
- * @arg {FilePropertiesGetTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesGetForTeam = function (arg) {
-  return this.request('file_properties/templates/get_for_team', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Get the schema for a specified template. This endpoint can't be called on a
- * team member or admin's behalf.
- * @function Dropbox#filePropertiesTemplatesGetForUser
- * @arg {FilePropertiesGetTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesGetForUser = function (arg) {
-  return this.request('file_properties/templates/get_for_user', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get the template identifiers for a team. To get the schema of each template
- * use templates/get_for_team.
- * @function Dropbox#filePropertiesTemplatesListForTeam
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesListForTeam = function (arg) {
-  return this.request('file_properties/templates/list_for_team', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Get the template identifiers for a team. To get the schema of each template
- * use templates/get_for_user. This endpoint can't be called on a team member or
- * admin's behalf.
- * @function Dropbox#filePropertiesTemplatesListForUser
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesListForUser = function (arg) {
-  return this.request('file_properties/templates/list_for_user', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Permanently removes the specified template created from
- * templates/add_for_user. All properties associated with the template will also
- * be removed. This action cannot be undone.
- * @function Dropbox#filePropertiesTemplatesRemoveForTeam
- * @arg {FilePropertiesRemoveTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesRemoveForTeam = function (arg) {
-  return this.request('file_properties/templates/remove_for_team', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permanently removes the specified template created from
- * templates/add_for_user. All properties associated with the template will also
- * be removed. This action cannot be undone.
- * @function Dropbox#filePropertiesTemplatesRemoveForUser
- * @arg {FilePropertiesRemoveTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesRemoveForUser = function (arg) {
-  return this.request('file_properties/templates/remove_for_user', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Update a template associated with a team. This route can update the template
- * name, the template description and add optional properties to templates.
- * @function Dropbox#filePropertiesTemplatesUpdateForTeam
- * @arg {FilePropertiesUpdateTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesUpdateForTeam = function (arg) {
-  return this.request('file_properties/templates/update_for_team', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Update a template associated with a user. This route can update the template
- * name, the template description and add optional properties to templates. This
- * endpoint can't be called on a team member or admin's behalf.
- * @function Dropbox#filePropertiesTemplatesUpdateForUser
- * @arg {FilePropertiesUpdateTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filePropertiesTemplatesUpdateForUser = function (arg) {
-  return this.request('file_properties/templates/update_for_user', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the total number of file requests owned by this user. Includes both
- * open and closed file requests.
- * @function Dropbox#fileRequestsCount
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsCount = function (arg) {
-  return this.request('file_requests/count', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Creates a file request for this user.
- * @function Dropbox#fileRequestsCreate
- * @arg {FileRequestsCreateFileRequestArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsCreate = function (arg) {
-  return this.request('file_requests/create', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Delete a batch of closed file requests.
- * @function Dropbox#fileRequestsDelete
- * @arg {FileRequestsDeleteFileRequestArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsDelete = function (arg) {
-  return this.request('file_requests/delete', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Delete all closed file requests owned by this user.
- * @function Dropbox#fileRequestsDeleteAllClosed
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsDeleteAllClosed = function (arg) {
-  return this.request('file_requests/delete_all_closed', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the specified file request.
- * @function Dropbox#fileRequestsGet
- * @arg {FileRequestsGetFileRequestArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsGet = function (arg) {
-  return this.request('file_requests/get', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns a list of file requests owned by this user. For apps with the app
- * folder permission, this will only return file requests with destinations in
- * the app folder.
- * @function Dropbox#fileRequestsListV2
- * @arg {FileRequestsListFileRequestsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsListV2 = function (arg) {
-  return this.request('file_requests/list_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns a list of file requests owned by this user. For apps with the app
- * folder permission, this will only return file requests with destinations in
- * the app folder.
- * @function Dropbox#fileRequestsList
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsList = function (arg) {
-  return this.request('file_requests/list', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_v2, use this to paginate through
- * all file requests. The cursor must come from a previous call to list_v2 or
- * list/continue.
- * @function Dropbox#fileRequestsListContinue
- * @arg {FileRequestsListFileRequestsContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsListContinue = function (arg) {
-  return this.request('file_requests/list/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Update a file request.
- * @function Dropbox#fileRequestsUpdate
- * @arg {FileRequestsUpdateFileRequestArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.fileRequestsUpdate = function (arg) {
-  return this.request('file_requests/update', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the metadata for a file or folder. This is an alpha endpoint
- * compatible with the properties API. Note: Metadata for the root folder is
- * unsupported.
- * @function Dropbox#filesAlphaGetMetadata
- * @deprecated
- * @arg {FilesAlphaGetMetadataArg} arg - The request parameters.
- * @returns {Promise.<(FilesFileMetadata|FilesFolderMetadata|FilesDeletedMetadata), Error.>}
- */
-routes.filesAlphaGetMetadata = function (arg) {
-  return this.request('files/alpha/get_metadata', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a new file with the contents provided in the request. Note that this
- * endpoint is part of the properties API alpha and is slightly different from
- * upload. Do not use this to upload a file larger than 150 MB. Instead, create
- * an upload session with upload_session/start.
- * @function Dropbox#filesAlphaUpload
- * @deprecated
- * @arg {FilesCommitInfoWithProperties} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesAlphaUpload = function (arg) {
-  return this.request('files/alpha/upload', arg, 'user', 'content', 'upload');
-};
-
-/**
- * Copy a file or folder to a different location in the user's Dropbox. If the
- * source path is a folder all its contents will be copied.
- * @function Dropbox#filesCopyV2
- * @arg {FilesRelocationArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyV2 = function (arg) {
-  return this.request('files/copy_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Copy a file or folder to a different location in the user's Dropbox. If the
- * source path is a folder all its contents will be copied.
- * @function Dropbox#filesCopy
- * @deprecated
- * @arg {FilesRelocationArg} arg - The request parameters.
- * @returns {Promise.<(FilesFileMetadata|FilesFolderMetadata|FilesDeletedMetadata), Error.>}
- */
-routes.filesCopy = function (arg) {
-  return this.request('files/copy', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Copy multiple files or folders to different locations at once in the user's
- * Dropbox. This route will replace copy_batch. The main difference is this
- * route will return status for each entry, while copy_batch raises failure if
- * any entry fails. This route will either finish synchronously, or return a job
- * ID and do the async copy job in background. Please use copy_batch/check_v2 to
- * check the job status.
- * @function Dropbox#filesCopyBatchV2
- * @arg {Object} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyBatchV2 = function (arg) {
-  return this.request('files/copy_batch_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Copy multiple files or folders to different locations at once in the user's
- * Dropbox. If RelocationBatchArg.allow_shared_folder is false, this route is
- * atomic. If one entry fails, the whole transaction will abort. If
- * RelocationBatchArg.allow_shared_folder is true, atomicity is not guaranteed,
- * but it allows you to copy the contents of shared folders to new locations.
- * This route will return job ID immediately and do the async copy job in
- * background. Please use copy_batch/check to check the job status.
- * @function Dropbox#filesCopyBatch
- * @deprecated
- * @arg {FilesRelocationBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyBatch = function (arg) {
-  return this.request('files/copy_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for copy_batch_v2. It returns list
- * of results for each entry.
- * @function Dropbox#filesCopyBatchCheckV2
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyBatchCheckV2 = function (arg) {
-  return this.request('files/copy_batch/check_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for copy_batch. If success, it
- * returns list of results for each entry.
- * @function Dropbox#filesCopyBatchCheck
- * @deprecated
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyBatchCheck = function (arg) {
-  return this.request('files/copy_batch/check', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get a copy reference to a file or folder. This reference string can be used
- * to save that file or folder to another user's Dropbox by passing it to
- * copy_reference/save.
- * @function Dropbox#filesCopyReferenceGet
- * @arg {FilesGetCopyReferenceArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyReferenceGet = function (arg) {
-  return this.request('files/copy_reference/get', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Save a copy reference returned by copy_reference/get to the user's Dropbox.
- * @function Dropbox#filesCopyReferenceSave
- * @arg {FilesSaveCopyReferenceArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCopyReferenceSave = function (arg) {
-  return this.request('files/copy_reference/save', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a folder at a given path.
- * @function Dropbox#filesCreateFolderV2
- * @arg {FilesCreateFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCreateFolderV2 = function (arg) {
-  return this.request('files/create_folder_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a folder at a given path.
- * @function Dropbox#filesCreateFolder
- * @deprecated
- * @arg {FilesCreateFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCreateFolder = function (arg) {
-  return this.request('files/create_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create multiple folders at once. This route is asynchronous for large
- * batches, which returns a job ID immediately and runs the create folder batch
- * asynchronously. Otherwise, creates the folders and returns the result
- * synchronously for smaller inputs. You can force asynchronous behaviour by
- * using the CreateFolderBatchArg.force_async flag.  Use
- * create_folder_batch/check to check the job status.
- * @function Dropbox#filesCreateFolderBatch
- * @arg {FilesCreateFolderBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCreateFolderBatch = function (arg) {
-  return this.request('files/create_folder_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for create_folder_batch. If
- * success, it returns list of result for each entry.
- * @function Dropbox#filesCreateFolderBatchCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesCreateFolderBatchCheck = function (arg) {
-  return this.request('files/create_folder_batch/check', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Delete the file or folder at a given path. If the path is a folder, all its
- * contents will be deleted too. A successful response indicates that the file
- * or folder was deleted. The returned metadata will be the corresponding
- * FileMetadata or FolderMetadata for the item at time of deletion, and not a
- * DeletedMetadata object.
- * @function Dropbox#filesDeleteV2
- * @arg {FilesDeleteArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesDeleteV2 = function (arg) {
-  return this.request('files/delete_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Delete the file or folder at a given path. If the path is a folder, all its
- * contents will be deleted too. A successful response indicates that the file
- * or folder was deleted. The returned metadata will be the corresponding
- * FileMetadata or FolderMetadata for the item at time of deletion, and not a
- * DeletedMetadata object.
- * @function Dropbox#filesDelete
- * @deprecated
- * @arg {FilesDeleteArg} arg - The request parameters.
- * @returns {Promise.<(FilesFileMetadata|FilesFolderMetadata|FilesDeletedMetadata), Error.>}
- */
-routes.filesDelete = function (arg) {
-  return this.request('files/delete', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Delete multiple files/folders at once. This route is asynchronous, which
- * returns a job ID immediately and runs the delete batch asynchronously. Use
- * delete_batch/check to check the job status.
- * @function Dropbox#filesDeleteBatch
- * @arg {FilesDeleteBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesDeleteBatch = function (arg) {
-  return this.request('files/delete_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for delete_batch. If success, it
- * returns list of result for each entry.
- * @function Dropbox#filesDeleteBatchCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesDeleteBatchCheck = function (arg) {
-  return this.request('files/delete_batch/check', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Download a file from a user's Dropbox.
- * @function Dropbox#filesDownload
- * @arg {FilesDownloadArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesDownload = function (arg) {
-  return this.request('files/download', arg, 'user', 'content', 'download');
-};
-
-/**
- * Download a folder from the user's Dropbox, as a zip file. The folder must be
- * less than 20 GB in size and have fewer than 10,000 total files. The input
- * cannot be a single file. Any single file must be less than 4GB in size.
- * @function Dropbox#filesDownloadZip
- * @arg {FilesDownloadZipArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesDownloadZip = function (arg) {
-  return this.request('files/download_zip', arg, 'user', 'content', 'download');
-};
-
-/**
- * Export a file from a user's Dropbox. This route only supports exporting files
- * that cannot be downloaded directly  and whose ExportResult.file_metadata has
- * ExportInfo.export_as populated.
- * @function Dropbox#filesExport
- * @arg {FilesExportArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesExport = function (arg) {
-  return this.request('files/export', arg, 'user', 'content', 'download');
-};
-
-/**
- * Returns the metadata for a file or folder. Note: Metadata for the root folder
- * is unsupported.
- * @function Dropbox#filesGetMetadata
- * @arg {FilesGetMetadataArg} arg - The request parameters.
- * @returns {Promise.<(FilesFileMetadata|FilesFolderMetadata|FilesDeletedMetadata), Error.>}
- */
-routes.filesGetMetadata = function (arg) {
-  return this.request('files/get_metadata', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get a preview for a file. Currently, PDF previews are generated for files
- * with the following extensions: .ai, .doc, .docm, .docx, .eps, .gdoc,
- * .gslides, .odp, .odt, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx, .rtf. HTML
- * previews are generated for files with the following extensions: .csv, .ods,
- * .xls, .xlsm, .gsheet, .xlsx. Other formats will return an unsupported
- * extension error.
- * @function Dropbox#filesGetPreview
- * @arg {FilesPreviewArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesGetPreview = function (arg) {
-  return this.request('files/get_preview', arg, 'user', 'content', 'download');
-};
-
-/**
- * Get a temporary link to stream content of a file. This link will expire in
- * four hours and afterwards you will get 410 Gone. This URL should not be used
- * to display content directly in the browser. The Content-Type of the link is
- * determined automatically by the file's mime type.
- * @function Dropbox#filesGetTemporaryLink
- * @arg {FilesGetTemporaryLinkArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesGetTemporaryLink = function (arg) {
-  return this.request('files/get_temporary_link', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get a one-time use temporary upload link to upload a file to a Dropbox
- * location.  This endpoint acts as a delayed upload. The returned temporary
- * upload link may be used to make a POST request with the data to be uploaded.
- * The upload will then be perfomed with the CommitInfo previously provided to
- * get_temporary_upload_link but evaluated only upon consumption. Hence, errors
- * stemming from invalid CommitInfo with respect to the state of the user's
- * Dropbox will only be communicated at consumption time. Additionally, these
- * errors are surfaced as generic HTTP 409 Conflict responses, potentially
- * hiding issue details. The maximum temporary upload link duration is 4 hours.
- * Upon consumption or expiration, a new link will have to be generated.
- * Multiple links may exist for a specific upload path at any given time.  The
- * POST request on the temporary upload link must have its Content-Type set to
- * "application/octet-stream".  Example temporary upload link consumption
- * request:  curl -X POST
- * https://dl.dropboxusercontent.com/apitul/1/bNi2uIYF51cVBND --header
- * "Content-Type: application/octet-stream" --data-binary @local_file.txt  A
- * successful temporary upload link consumption request returns the content hash
- * of the uploaded data in JSON format.  Example succesful temporary upload link
- * consumption response: {"content-hash":
- * "599d71033d700ac892a0e48fa61b125d2f5994"}  An unsuccessful temporary upload
- * link consumption request returns any of the following status codes:  HTTP 400
- * Bad Request: Content-Type is not one of application/octet-stream and
- * text/plain or request is invalid. HTTP 409 Conflict: The temporary upload
- * link does not exist or is currently unavailable, the upload failed, or
- * another error happened. HTTP 410 Gone: The temporary upload link is expired
- * or consumed.  Example unsuccessful temporary upload link consumption
- * response: Temporary upload link has been recently consumed.
- * @function Dropbox#filesGetTemporaryUploadLink
- * @arg {FilesGetTemporaryUploadLinkArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesGetTemporaryUploadLink = function (arg) {
-  return this.request('files/get_temporary_upload_link', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get a thumbnail for an image. This method currently supports files with the
- * following file extensions: jpg, jpeg, png, tiff, tif, gif and bmp. Photos
- * that are larger than 20MB in size won't be converted to a thumbnail.
- * @function Dropbox#filesGetThumbnail
- * @arg {FilesThumbnailArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesGetThumbnail = function (arg) {
-  return this.request('files/get_thumbnail', arg, 'user', 'content', 'download');
-};
-
-/**
- * Get thumbnails for a list of images. We allow up to 25 thumbnails in a single
- * batch. This method currently supports files with the following file
- * extensions: jpg, jpeg, png, tiff, tif, gif and bmp. Photos that are larger
- * than 20MB in size won't be converted to a thumbnail.
- * @function Dropbox#filesGetThumbnailBatch
- * @arg {FilesGetThumbnailBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesGetThumbnailBatch = function (arg) {
-  return this.request('files/get_thumbnail_batch', arg, 'user', 'content', 'rpc');
-};
-
-/**
- * Starts returning the contents of a folder. If the result's
- * ListFolderResult.has_more field is true, call list_folder/continue with the
- * returned ListFolderResult.cursor to retrieve more entries. If you're using
- * ListFolderArg.recursive set to true to keep a local cache of the contents of
- * a Dropbox account, iterate through each entry in order and process them as
- * follows to keep your local state in sync: For each FileMetadata, store the
- * new entry at the given path in your local state. If the required parent
- * folders don't exist yet, create them. If there's already something else at
- * the given path, replace it and remove all its children. For each
- * FolderMetadata, store the new entry at the given path in your local state. If
- * the required parent folders don't exist yet, create them. If there's already
- * something else at the given path, replace it but leave the children as they
- * are. Check the new entry's FolderSharingInfo.read_only and set all its
- * children's read-only statuses to match. For each DeletedMetadata, if your
- * local state has something at the given path, remove it and all its children.
- * If there's nothing at the given path, ignore this entry. Note:
- * auth.RateLimitError may be returned if multiple list_folder or
- * list_folder/continue calls with same parameters are made simultaneously by
- * same API app for same user. If your app implements retry logic, please hold
- * off the retry until the previous request finishes.
- * @function Dropbox#filesListFolder
- * @arg {FilesListFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesListFolder = function (arg) {
-  return this.request('files/list_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_folder, use this to paginate
- * through all files and retrieve updates to the folder, following the same
- * rules as documented for list_folder.
- * @function Dropbox#filesListFolderContinue
- * @arg {FilesListFolderContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesListFolderContinue = function (arg) {
-  return this.request('files/list_folder/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * A way to quickly get a cursor for the folder's state. Unlike list_folder,
- * list_folder/get_latest_cursor doesn't return any entries. This endpoint is
- * for app which only needs to know about new files and modifications and
- * doesn't need to know about files that already exist in Dropbox.
- * @function Dropbox#filesListFolderGetLatestCursor
- * @arg {FilesListFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesListFolderGetLatestCursor = function (arg) {
-  return this.request('files/list_folder/get_latest_cursor', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * A longpoll endpoint to wait for changes on an account. In conjunction with
- * list_folder/continue, this call gives you a low-latency way to monitor an
- * account for file changes. The connection will block until there are changes
- * available or a timeout occurs. This endpoint is useful mostly for client-side
- * apps. If you're looking for server-side notifications, check out our webhooks
- * documentation https://www.dropbox.com/developers/reference/webhooks.
- * @function Dropbox#filesListFolderLongpoll
- * @arg {FilesListFolderLongpollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesListFolderLongpoll = function (arg) {
-  return this.request('files/list_folder/longpoll', arg, 'noauth', 'notify', 'rpc');
-};
-
-/**
- * Returns revisions for files based on a file path or a file id. The file path
- * or file id is identified from the latest file entry at the given file path or
- * id. This end point allows your app to query either by file path or file id by
- * setting the mode parameter appropriately. In the ListRevisionsMode.path
- * (default) mode, all revisions at the same file path as the latest file entry
- * are returned. If revisions with the same file id are desired, then mode must
- * be set to ListRevisionsMode.id. The ListRevisionsMode.id mode is useful to
- * retrieve revisions for a given file across moves or renames.
- * @function Dropbox#filesListRevisions
- * @arg {FilesListRevisionsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesListRevisions = function (arg) {
-  return this.request('files/list_revisions', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Move a file or folder to a different location in the user's Dropbox. If the
- * source path is a folder all its contents will be moved.
- * @function Dropbox#filesMoveV2
- * @arg {FilesRelocationArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesMoveV2 = function (arg) {
-  return this.request('files/move_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Move a file or folder to a different location in the user's Dropbox. If the
- * source path is a folder all its contents will be moved.
- * @function Dropbox#filesMove
- * @deprecated
- * @arg {FilesRelocationArg} arg - The request parameters.
- * @returns {Promise.<(FilesFileMetadata|FilesFolderMetadata|FilesDeletedMetadata), Error.>}
- */
-routes.filesMove = function (arg) {
-  return this.request('files/move', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Move multiple files or folders to different locations at once in the user's
- * Dropbox. This route will replace move_batch. The main difference is this
- * route will return status for each entry, while move_batch raises failure if
- * any entry fails. This route will either finish synchronously, or return a job
- * ID and do the async move job in background. Please use move_batch/check_v2 to
- * check the job status.
- * @function Dropbox#filesMoveBatchV2
- * @arg {FilesMoveBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesMoveBatchV2 = function (arg) {
-  return this.request('files/move_batch_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Move multiple files or folders to different locations at once in the user's
- * Dropbox. This route is 'all or nothing', which means if one entry fails, the
- * whole transaction will abort. This route will return job ID immediately and
- * do the async moving job in background. Please use move_batch/check to check
- * the job status.
- * @function Dropbox#filesMoveBatch
- * @arg {FilesRelocationBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesMoveBatch = function (arg) {
-  return this.request('files/move_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for move_batch_v2. It returns list
- * of results for each entry.
- * @function Dropbox#filesMoveBatchCheckV2
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesMoveBatchCheckV2 = function (arg) {
-  return this.request('files/move_batch/check_v2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for move_batch. If success, it
- * returns list of results for each entry.
- * @function Dropbox#filesMoveBatchCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesMoveBatchCheck = function (arg) {
-  return this.request('files/move_batch/check', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Permanently delete the file or folder at a given path (see
- * https://www.dropbox.com/en/help/40). Note: This endpoint is only available
- * for Dropbox Business apps.
- * @function Dropbox#filesPermanentlyDelete
- * @arg {FilesDeleteArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPermanentlyDelete = function (arg) {
-  return this.request('files/permanently_delete', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesAdd
- * @deprecated
- * @arg {FilePropertiesAddPropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesAdd = function (arg) {
-  return this.request('files/properties/add', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesOverwrite
- * @deprecated
- * @arg {FilePropertiesOverwritePropertyGroupArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesOverwrite = function (arg) {
-  return this.request('files/properties/overwrite', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesRemove
- * @deprecated
- * @arg {FilePropertiesRemovePropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesRemove = function (arg) {
-  return this.request('files/properties/remove', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesTemplateGet
- * @deprecated
- * @arg {FilePropertiesGetTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesTemplateGet = function (arg) {
-  return this.request('files/properties/template/get', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesTemplateList
- * @deprecated
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesTemplateList = function (arg) {
-  return this.request('files/properties/template/list', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * @function Dropbox#filesPropertiesUpdate
- * @deprecated
- * @arg {FilePropertiesUpdatePropertiesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesPropertiesUpdate = function (arg) {
-  return this.request('files/properties/update', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Restore a specific revision of a file to the given path.
- * @function Dropbox#filesRestore
- * @arg {FilesRestoreArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesRestore = function (arg) {
-  return this.request('files/restore', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Save the data from a specified URL into a file in user's Dropbox. Note that
- * the transfer from the URL must complete within 5 minutes, or the operation
- * will time out and the job will fail. If the given path already exists, the
- * file will be renamed to avoid the conflict (e.g. myfile (1).txt).
- * @function Dropbox#filesSaveUrl
- * @arg {FilesSaveUrlArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesSaveUrl = function (arg) {
-  return this.request('files/save_url', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Check the status of a save_url job.
- * @function Dropbox#filesSaveUrlCheckJobStatus
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesSaveUrlCheckJobStatus = function (arg) {
-  return this.request('files/save_url/check_job_status', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Searches for files and folders. Note: Recent changes may not immediately be
- * reflected in search results due to a short delay in indexing.
- * @function Dropbox#filesSearch
- * @arg {FilesSearchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesSearch = function (arg) {
-  return this.request('files/search', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a new file with the contents provided in the request. Do not use this
- * to upload a file larger than 150 MB. Instead, create an upload session with
- * upload_session/start. Calls to this endpoint will count as data transport
- * calls for any Dropbox Business teams with a limit on the number of data
- * transport calls allowed per month. For more information, see the Data
- * transport limit page
- * https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUpload
- * @arg {FilesCommitInfo} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUpload = function (arg) {
-  return this.request('files/upload', arg, 'user', 'content', 'upload');
-};
-
-/**
- * Append more data to an upload session. When the parameter close is set, this
- * call will close the session. A single request should not upload more than 150
- * MB. The maximum size of a file one can upload to an upload session is 350 GB.
- * Calls to this endpoint will count as data transport calls for any Dropbox
- * Business teams with a limit on the number of data transport calls allowed per
- * month. For more information, see the Data transport limit page
- * https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUploadSessionAppendV2
- * @arg {FilesUploadSessionAppendArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionAppendV2 = function (arg) {
-  return this.request('files/upload_session/append_v2', arg, 'user', 'content', 'upload');
-};
-
-/**
- * Append more data to an upload session. A single request should not upload
- * more than 150 MB. The maximum size of a file one can upload to an upload
- * session is 350 GB. Calls to this endpoint will count as data transport calls
- * for any Dropbox Business teams with a limit on the number of data transport
- * calls allowed per month. For more information, see the Data transport limit
- * page https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUploadSessionAppend
- * @deprecated
- * @arg {FilesUploadSessionCursor} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionAppend = function (arg) {
-  return this.request('files/upload_session/append', arg, 'user', 'content', 'upload');
-};
-
-/**
- * Finish an upload session and save the uploaded data to the given file path. A
- * single request should not upload more than 150 MB. The maximum size of a file
- * one can upload to an upload session is 350 GB. Calls to this endpoint will
- * count as data transport calls for any Dropbox Business teams with a limit on
- * the number of data transport calls allowed per month. For more information,
- * see the Data transport limit page
- * https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUploadSessionFinish
- * @arg {FilesUploadSessionFinishArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionFinish = function (arg) {
-  return this.request('files/upload_session/finish', arg, 'user', 'content', 'upload');
-};
-
-/**
- * This route helps you commit many files at once into a user's Dropbox. Use
- * upload_session/start and upload_session/append_v2 to upload file contents. We
- * recommend uploading many files in parallel to increase throughput. Once the
- * file contents have been uploaded, rather than calling upload_session/finish,
- * use this route to finish all your upload sessions in a single request.
- * UploadSessionStartArg.close or UploadSessionAppendArg.close needs to be true
- * for the last upload_session/start or upload_session/append_v2 call. The
- * maximum size of a file one can upload to an upload session is 350 GB. This
- * route will return a job_id immediately and do the async commit job in
- * background. Use upload_session/finish_batch/check to check the job status.
- * For the same account, this route should be executed serially. That means you
- * should not start the next job before current job finishes. We allow up to
- * 1000 entries in a single request. Calls to this endpoint will count as data
- * transport calls for any Dropbox Business teams with a limit on the number of
- * data transport calls allowed per month. For more information, see the Data
- * transport limit page
- * https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUploadSessionFinishBatch
- * @arg {FilesUploadSessionFinishBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionFinishBatch = function (arg) {
-  return this.request('files/upload_session/finish_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for upload_session/finish_batch. If
- * success, it returns list of result for each entry.
- * @function Dropbox#filesUploadSessionFinishBatchCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionFinishBatchCheck = function (arg) {
-  return this.request('files/upload_session/finish_batch/check', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Upload sessions allow you to upload a single file in one or more requests,
- * for example where the size of the file is greater than 150 MB.  This call
- * starts a new upload session with the given data. You can then use
- * upload_session/append_v2 to add more data and upload_session/finish to save
- * all the data to a file in Dropbox. A single request should not upload more
- * than 150 MB. The maximum size of a file one can upload to an upload session
- * is 350 GB. An upload session can be used for a maximum of 48 hours.
- * Attempting to use an UploadSessionStartResult.session_id with
- * upload_session/append_v2 or upload_session/finish more than 48 hours after
- * its creation will return a UploadSessionLookupError.not_found. Calls to this
- * endpoint will count as data transport calls for any Dropbox Business teams
- * with a limit on the number of data transport calls allowed per month. For
- * more information, see the Data transport limit page
- * https://www.dropbox.com/developers/reference/data-transport-limit.
- * @function Dropbox#filesUploadSessionStart
- * @arg {FilesUploadSessionStartArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.filesUploadSessionStart = function (arg) {
-  return this.request('files/upload_session/start', arg, 'user', 'content', 'upload');
-};
-
-/**
- * Marks the given Paper doc as archived. Note: This action can be performed or
- * undone by anyone with edit permissions to the doc.
- * @function Dropbox#paperDocsArchive
- * @arg {PaperRefPaperDoc} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsArchive = function (arg) {
-  return this.request('paper/docs/archive', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Creates a new Paper doc with the provided content.
- * @function Dropbox#paperDocsCreate
- * @arg {PaperPaperDocCreateArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsCreate = function (arg) {
-  return this.request('paper/docs/create', arg, 'user', 'api', 'upload');
-};
-
-/**
- * Exports and downloads Paper doc either as HTML or markdown.
- * @function Dropbox#paperDocsDownload
- * @arg {PaperPaperDocExport} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsDownload = function (arg) {
-  return this.request('paper/docs/download', arg, 'user', 'api', 'download');
-};
-
-/**
- * Lists the users who are explicitly invited to the Paper folder in which the
- * Paper doc is contained. For private folders all users (including owner)
- * shared on the folder are listed and for team folders all non-team users
- * shared on the folder are returned.
- * @function Dropbox#paperDocsFolderUsersList
- * @arg {PaperListUsersOnFolderArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsFolderUsersList = function (arg) {
-  return this.request('paper/docs/folder_users/list', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from docs/folder_users/list, use this to
- * paginate through all users on the Paper folder.
- * @function Dropbox#paperDocsFolderUsersListContinue
- * @arg {PaperListUsersOnFolderContinueArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsFolderUsersListContinue = function (arg) {
-  return this.request('paper/docs/folder_users/list/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Retrieves folder information for the given Paper doc. This includes:   -
- * folder sharing policy; permissions for subfolders are set by the top-level
- * folder.   - full 'filepath', i.e. the list of folders (both folderId and
- * folderName) from     the root folder to the folder directly containing the
- * Paper doc.  Note: If the Paper doc is not in any folder (aka unfiled) the
- * response will be empty.
- * @function Dropbox#paperDocsGetFolderInfo
- * @arg {PaperRefPaperDoc} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsGetFolderInfo = function (arg) {
-  return this.request('paper/docs/get_folder_info', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Return the list of all Paper docs according to the argument specifications.
- * To iterate over through the full pagination, pass the cursor to
- * docs/list/continue.
- * @function Dropbox#paperDocsList
- * @arg {PaperListPaperDocsArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsList = function (arg) {
-  return this.request('paper/docs/list', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from docs/list, use this to paginate through
- * all Paper doc.
- * @function Dropbox#paperDocsListContinue
- * @arg {PaperListPaperDocsContinueArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsListContinue = function (arg) {
-  return this.request('paper/docs/list/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Permanently deletes the given Paper doc. This operation is final as the doc
- * cannot be recovered.  Note: This action can be performed only by the doc
- * owner.
- * @function Dropbox#paperDocsPermanentlyDelete
- * @arg {PaperRefPaperDoc} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsPermanentlyDelete = function (arg) {
-  return this.request('paper/docs/permanently_delete', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Gets the default sharing policy for the given Paper doc.
- * @function Dropbox#paperDocsSharingPolicyGet
- * @arg {PaperRefPaperDoc} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsSharingPolicyGet = function (arg) {
-  return this.request('paper/docs/sharing_policy/get', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Sets the default sharing policy for the given Paper doc. The default
- * 'team_sharing_policy' can be changed only by teams, omit this field for
- * personal accounts.  Note: 'public_sharing_policy' cannot be set to the value
- * 'disabled' because this setting can be changed only via the team admin
- * console.
- * @function Dropbox#paperDocsSharingPolicySet
- * @arg {PaperPaperDocSharingPolicy} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsSharingPolicySet = function (arg) {
-  return this.request('paper/docs/sharing_policy/set', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Updates an existing Paper doc with the provided content.
- * @function Dropbox#paperDocsUpdate
- * @arg {PaperPaperDocUpdateArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsUpdate = function (arg) {
-  return this.request('paper/docs/update', arg, 'user', 'api', 'upload');
-};
-
-/**
- * Allows an owner or editor to add users to a Paper doc or change their
- * permissions using their email address or Dropbox account ID.  Note: The Doc
- * owner's permissions cannot be changed.
- * @function Dropbox#paperDocsUsersAdd
- * @arg {PaperAddPaperDocUser} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes.paperDocsUsersAdd = function (arg) {
-  return this.request('paper/docs/users/add', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Lists all users who visited the Paper doc or users with explicit access. This
- * call excludes users who have been removed. The list is sorted by the date of
- * the visit or the share date. The list will include both users, the explicitly
- * shared ones as well as those who came in using the Paper url link.
- * @function Dropbox#paperDocsUsersList
- * @arg {PaperListUsersOnPaperDocArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsUsersList = function (arg) {
-  return this.request('paper/docs/users/list', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from docs/users/list, use this to paginate
- * through all users on the Paper doc.
- * @function Dropbox#paperDocsUsersListContinue
- * @arg {PaperListUsersOnPaperDocContinueArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsUsersListContinue = function (arg) {
-  return this.request('paper/docs/users/list/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Allows an owner or editor to remove users from a Paper doc using their email
- * address or Dropbox account ID.  Note: Doc owner cannot be removed.
- * @function Dropbox#paperDocsUsersRemove
- * @arg {PaperRemovePaperDocUser} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.paperDocsUsersRemove = function (arg) {
-  return this.request('paper/docs/users/remove', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Adds specified members to a file.
- * @function Dropbox#sharingAddFileMember
- * @arg {SharingAddFileMemberArgs} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes.sharingAddFileMember = function (arg) {
-  return this.request('sharing/add_file_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Allows an owner or editor (if the ACL update policy allows) of a shared
- * folder to add another member. For the new member to get access to all the
- * functionality for this folder, you will need to call mount_folder on their
- * behalf.
- * @function Dropbox#sharingAddFolderMember
- * @arg {SharingAddFolderMemberArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingAddFolderMember = function (arg) {
-  return this.request('sharing/add_folder_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Identical to update_file_member but with less information returned.
- * @function Dropbox#sharingChangeFileMemberAccess
- * @deprecated
- * @arg {SharingChangeFileMemberAccessArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingChangeFileMemberAccess = function (arg) {
-  return this.request('sharing/change_file_member_access', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job.
- * @function Dropbox#sharingCheckJobStatus
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingCheckJobStatus = function (arg) {
-  return this.request('sharing/check_job_status', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for sharing a folder.
- * @function Dropbox#sharingCheckRemoveMemberJobStatus
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingCheckRemoveMemberJobStatus = function (arg) {
-  return this.request('sharing/check_remove_member_job_status', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for sharing a folder.
- * @function Dropbox#sharingCheckShareJobStatus
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingCheckShareJobStatus = function (arg) {
-  return this.request('sharing/check_share_job_status', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a shared link. If a shared link already exists for the given path,
- * that link is returned. Note that in the returned PathLinkMetadata, the
- * PathLinkMetadata.url field is the shortened URL if
- * CreateSharedLinkArg.short_url argument is set to true. Previously, it was
- * technically possible to break a shared link by moving or renaming the
- * corresponding file or folder. In the future, this will no longer be the case,
- * so your app shouldn't rely on this behavior. Instead, if your app needs to
- * revoke a shared link, use revoke_shared_link.
- * @function Dropbox#sharingCreateSharedLink
- * @deprecated
- * @arg {SharingCreateSharedLinkArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingCreateSharedLink = function (arg) {
-  return this.request('sharing/create_shared_link', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Create a shared link with custom settings. If no settings are given then the
- * default visibility is RequestedVisibility.public (The resolved visibility,
- * though, may depend on other aspects such as team and shared folder settings).
- * @function Dropbox#sharingCreateSharedLinkWithSettings
- * @arg {SharingCreateSharedLinkWithSettingsArg} arg - The request parameters.
- * @returns {Promise.<(SharingFileLinkMetadata|SharingFolderLinkMetadata|SharingSharedLinkMetadata), Error.>}
- */
-routes.sharingCreateSharedLinkWithSettings = function (arg) {
-  return this.request('sharing/create_shared_link_with_settings', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns shared file metadata.
- * @function Dropbox#sharingGetFileMetadata
- * @arg {SharingGetFileMetadataArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingGetFileMetadata = function (arg) {
-  return this.request('sharing/get_file_metadata', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns shared file metadata.
- * @function Dropbox#sharingGetFileMetadataBatch
- * @arg {SharingGetFileMetadataBatchArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes.sharingGetFileMetadataBatch = function (arg) {
-  return this.request('sharing/get_file_metadata/batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns shared folder metadata by its folder ID.
- * @function Dropbox#sharingGetFolderMetadata
- * @arg {SharingGetMetadataArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingGetFolderMetadata = function (arg) {
-  return this.request('sharing/get_folder_metadata', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Download the shared link's file from a user's Dropbox.
- * @function Dropbox#sharingGetSharedLinkFile
- * @arg {Object} arg - The request parameters.
- * @returns {Promise.<(SharingFileLinkMetadata|SharingFolderLinkMetadata|SharingSharedLinkMetadata), Error.>}
- */
-routes.sharingGetSharedLinkFile = function (arg) {
-  return this.request('sharing/get_shared_link_file', arg, 'user', 'content', 'download');
-};
-
-/**
- * Get the shared link's metadata.
- * @function Dropbox#sharingGetSharedLinkMetadata
- * @arg {SharingGetSharedLinkMetadataArg} arg - The request parameters.
- * @returns {Promise.<(SharingFileLinkMetadata|SharingFolderLinkMetadata|SharingSharedLinkMetadata), Error.>}
- */
-routes.sharingGetSharedLinkMetadata = function (arg) {
-  return this.request('sharing/get_shared_link_metadata', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns a list of LinkMetadata objects for this user, including collection
- * links. If no path is given, returns a list of all shared links for the
- * current user, including collection links, up to a maximum of 1000 links. If a
- * non-empty path is given, returns a list of all shared links that allow access
- * to the given path.  Collection links are never returned in this case. Note
- * that the url field in the response is never the shortened URL.
- * @function Dropbox#sharingGetSharedLinks
- * @deprecated
- * @arg {SharingGetSharedLinksArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingGetSharedLinks = function (arg) {
-  return this.request('sharing/get_shared_links', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Use to obtain the members who have been invited to a file, both inherited and
- * uninherited members.
- * @function Dropbox#sharingListFileMembers
- * @arg {SharingListFileMembersArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFileMembers = function (arg) {
-  return this.request('sharing/list_file_members', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get members of multiple files at once. The arguments to this route are more
- * limited, and the limit on query result size per file is more strict. To
- * customize the results more, use the individual file endpoint. Inherited users
- * and groups are not included in the result, and permissions are not returned
- * for this endpoint.
- * @function Dropbox#sharingListFileMembersBatch
- * @arg {SharingListFileMembersBatchArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes.sharingListFileMembersBatch = function (arg) {
-  return this.request('sharing/list_file_members/batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_file_members or
- * list_file_members/batch, use this to paginate through all shared file
- * members.
- * @function Dropbox#sharingListFileMembersContinue
- * @arg {SharingListFileMembersContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFileMembersContinue = function (arg) {
-  return this.request('sharing/list_file_members/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns shared folder membership by its folder ID.
- * @function Dropbox#sharingListFolderMembers
- * @arg {SharingListFolderMembersArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFolderMembers = function (arg) {
-  return this.request('sharing/list_folder_members', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_folder_members, use this to
- * paginate through all shared folder members.
- * @function Dropbox#sharingListFolderMembersContinue
- * @arg {SharingListFolderMembersContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFolderMembersContinue = function (arg) {
-  return this.request('sharing/list_folder_members/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Return the list of all shared folders the current user has access to.
- * @function Dropbox#sharingListFolders
- * @arg {SharingListFoldersArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFolders = function (arg) {
-  return this.request('sharing/list_folders', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_folders, use this to paginate
- * through all shared folders. The cursor must come from a previous call to
- * list_folders or list_folders/continue.
- * @function Dropbox#sharingListFoldersContinue
- * @arg {SharingListFoldersContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListFoldersContinue = function (arg) {
-  return this.request('sharing/list_folders/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Return the list of all shared folders the current user can mount or unmount.
- * @function Dropbox#sharingListMountableFolders
- * @arg {SharingListFoldersArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListMountableFolders = function (arg) {
-  return this.request('sharing/list_mountable_folders', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from list_mountable_folders, use this to
- * paginate through all mountable shared folders. The cursor must come from a
- * previous call to list_mountable_folders or list_mountable_folders/continue.
- * @function Dropbox#sharingListMountableFoldersContinue
- * @arg {SharingListFoldersContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListMountableFoldersContinue = function (arg) {
-  return this.request('sharing/list_mountable_folders/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Returns a list of all files shared with current user.  Does not include files
- * the user has received via shared folders, and does  not include unclaimed
- * invitations.
- * @function Dropbox#sharingListReceivedFiles
- * @arg {SharingListFilesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListReceivedFiles = function (arg) {
-  return this.request('sharing/list_received_files', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get more results with a cursor from list_received_files.
- * @function Dropbox#sharingListReceivedFilesContinue
- * @arg {SharingListFilesContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListReceivedFilesContinue = function (arg) {
-  return this.request('sharing/list_received_files/continue', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * List shared links of this user. If no path is given, returns a list of all
- * shared links for the current user. If a non-empty path is given, returns a
- * list of all shared links that allow access to the given path - direct links
- * to the given path and links to parent folders of the given path. Links to
- * parent folders can be suppressed by setting direct_only to true.
- * @function Dropbox#sharingListSharedLinks
- * @arg {SharingListSharedLinksArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingListSharedLinks = function (arg) {
-  return this.request('sharing/list_shared_links', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Modify the shared link's settings. If the requested visibility conflict with
- * the shared links policy of the team or the shared folder (in case the linked
- * file is part of a shared folder) then the LinkPermissions.resolved_visibility
- * of the returned SharedLinkMetadata will reflect the actual visibility of the
- * shared link and the LinkPermissions.requested_visibility will reflect the
- * requested visibility.
- * @function Dropbox#sharingModifySharedLinkSettings
- * @arg {SharingModifySharedLinkSettingsArgs} arg - The request parameters.
- * @returns {Promise.<(SharingFileLinkMetadata|SharingFolderLinkMetadata|SharingSharedLinkMetadata), Error.>}
- */
-routes.sharingModifySharedLinkSettings = function (arg) {
-  return this.request('sharing/modify_shared_link_settings', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * The current user mounts the designated folder. Mount a shared folder for a
- * user after they have been added as a member. Once mounted, the shared folder
- * will appear in their Dropbox.
- * @function Dropbox#sharingMountFolder
- * @arg {SharingMountFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingMountFolder = function (arg) {
-  return this.request('sharing/mount_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * The current user relinquishes their membership in the designated file. Note
- * that the current user may still have inherited access to this file through
- * the parent folder.
- * @function Dropbox#sharingRelinquishFileMembership
- * @arg {SharingRelinquishFileMembershipArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRelinquishFileMembership = function (arg) {
-  return this.request('sharing/relinquish_file_membership', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * The current user relinquishes their membership in the designated shared
- * folder and will no longer have access to the folder.  A folder owner cannot
- * relinquish membership in their own folder. This will run synchronously if
- * leave_a_copy is false, and asynchronously if leave_a_copy is true.
- * @function Dropbox#sharingRelinquishFolderMembership
- * @arg {SharingRelinquishFolderMembershipArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRelinquishFolderMembership = function (arg) {
-  return this.request('sharing/relinquish_folder_membership', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Identical to remove_file_member_2 but with less information returned.
- * @function Dropbox#sharingRemoveFileMember
- * @deprecated
- * @arg {SharingRemoveFileMemberArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRemoveFileMember = function (arg) {
-  return this.request('sharing/remove_file_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Removes a specified member from the file.
- * @function Dropbox#sharingRemoveFileMember2
- * @arg {SharingRemoveFileMemberArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRemoveFileMember2 = function (arg) {
-  return this.request('sharing/remove_file_member_2', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Allows an owner or editor (if the ACL update policy allows) of a shared
- * folder to remove another member.
- * @function Dropbox#sharingRemoveFolderMember
- * @arg {SharingRemoveFolderMemberArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRemoveFolderMember = function (arg) {
-  return this.request('sharing/remove_folder_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Revoke a shared link. Note that even after revoking a shared link to a file,
- * the file may be accessible if there are shared links leading to any of the
- * file parent folders. To list all shared links that enable access to a
- * specific file, you can use the list_shared_links with the file as the
- * ListSharedLinksArg.path argument.
- * @function Dropbox#sharingRevokeSharedLink
- * @arg {SharingRevokeSharedLinkArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingRevokeSharedLink = function (arg) {
-  return this.request('sharing/revoke_shared_link', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Change the inheritance policy of an existing Shared Folder. Only permitted
- * for shared folders in a shared team root. If a ShareFolderLaunch.async_job_id
- * is returned, you'll need to call check_share_job_status until the action
- * completes to get the metadata for the folder.
- * @function Dropbox#sharingSetAccessInheritance
- * @arg {SharingSetAccessInheritanceArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingSetAccessInheritance = function (arg) {
-  return this.request('sharing/set_access_inheritance', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Share a folder with collaborators. Most sharing will be completed
- * synchronously. Large folders will be completed asynchronously. To make
- * testing the async case repeatable, set `ShareFolderArg.force_async`. If a
- * ShareFolderLaunch.async_job_id is returned, you'll need to call
- * check_share_job_status until the action completes to get the metadata for the
- * folder.
- * @function Dropbox#sharingShareFolder
- * @arg {SharingShareFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingShareFolder = function (arg) {
-  return this.request('sharing/share_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Transfer ownership of a shared folder to a member of the shared folder. User
- * must have AccessLevel.owner access to the shared folder to perform a
- * transfer.
- * @function Dropbox#sharingTransferFolder
- * @arg {SharingTransferFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingTransferFolder = function (arg) {
-  return this.request('sharing/transfer_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * The current user unmounts the designated folder. They can re-mount the folder
- * at a later time using mount_folder.
- * @function Dropbox#sharingUnmountFolder
- * @arg {SharingUnmountFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUnmountFolder = function (arg) {
-  return this.request('sharing/unmount_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Remove all members from this file. Does not remove inherited members.
- * @function Dropbox#sharingUnshareFile
- * @arg {SharingUnshareFileArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUnshareFile = function (arg) {
-  return this.request('sharing/unshare_file', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Allows a shared folder owner to unshare the folder. You'll need to call
- * check_job_status to determine if the action has completed successfully.
- * @function Dropbox#sharingUnshareFolder
- * @arg {SharingUnshareFolderArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUnshareFolder = function (arg) {
-  return this.request('sharing/unshare_folder', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Changes a member's access on a shared file.
- * @function Dropbox#sharingUpdateFileMember
- * @arg {SharingUpdateFileMemberArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUpdateFileMember = function (arg) {
-  return this.request('sharing/update_file_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Allows an owner or editor of a shared folder to update another member's
- * permissions.
- * @function Dropbox#sharingUpdateFolderMember
- * @arg {SharingUpdateFolderMemberArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUpdateFolderMember = function (arg) {
-  return this.request('sharing/update_folder_member', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Update the sharing policies for a shared folder. User must have
- * AccessLevel.owner access to the shared folder to update its policies.
- * @function Dropbox#sharingUpdateFolderPolicy
- * @arg {SharingUpdateFolderPolicyArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.sharingUpdateFolderPolicy = function (arg) {
-  return this.request('sharing/update_folder_policy', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Retrieves team events. Events have a lifespan of two years. Events older than
- * two years will not be returned. Many attributes note 'may be missing due to
- * historical data gap'. Note that the file_operations category and & analogous
- * paper events are not available on all Dropbox Business plans
- * /business/plans-comparison. Use features/get_values
- * /developers/documentation/http/teams#team-features-get_values to check for
- * this feature. Permission : Team Auditing.
- * @function Dropbox#teamLogGetEvents
- * @arg {TeamLogGetTeamEventsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.teamLogGetEvents = function (arg) {
-  return this.request('team_log/get_events', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from get_events, use this to paginate
- * through all events. Permission : Team Auditing.
- * @function Dropbox#teamLogGetEventsContinue
- * @arg {TeamLogGetTeamEventsContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.teamLogGetEventsContinue = function (arg) {
-  return this.request('team_log/get_events/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Get information about a user's account.
- * @function Dropbox#usersGetAccount
- * @arg {UsersGetAccountArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.usersGetAccount = function (arg) {
-  return this.request('users/get_account', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get information about multiple user accounts.  At most 300 accounts may be
- * queried per request.
- * @function Dropbox#usersGetAccountBatch
- * @arg {UsersGetAccountBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.usersGetAccountBatch = function (arg) {
-  return this.request('users/get_account_batch', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get information about the current user's account.
- * @function Dropbox#usersGetCurrentAccount
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.usersGetCurrentAccount = function (arg) {
-  return this.request('users/get_current_account', arg, 'user', 'api', 'rpc');
-};
-
-/**
- * Get the space usage information for the current user's account.
- * @function Dropbox#usersGetSpaceUsage
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes.usersGetSpaceUsage = function (arg) {
-  return this.request('users/get_space_usage', arg, 'user', 'api', 'rpc');
-};
-
-var RPC = 'rpc';
-var UPLOAD = 'upload';
-var DOWNLOAD = 'download';
-
-function getSafeUnicode(c) {
-  var unicode = ('000' + c.charCodeAt(0).toString(16)).slice(-4);
-  return '\\u' + unicode;
-}
-
-/* global WorkerGlobalScope */
-function isWindowOrWorker() {
-  return typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope || typeof module === 'undefined' || typeof window !== 'undefined';
-}
-
-function getBaseURL(host) {
-  return 'https://' + host + '.dropboxapi.com/2/';
-}
-
-// source https://www.dropboxforum.com/t5/API-support/HTTP-header-quot-Dropbox-API-Arg-quot-could-not-decode-input-as/m-p/173823/highlight/true#M6786
-function httpHeaderSafeJson(args) {
-  return JSON.stringify(args).replace(/[\u007f-\uffff]/g, getSafeUnicode);
-}
-
-var classCallCheck = function (instance, Constructor) {
-  if (!(instance instanceof Constructor)) {
-    throw new TypeError("Cannot call a class as a function");
-  }
-};
-
-var createClass = function () {
-  function defineProperties(target, props) {
-    for (var i = 0; i < props.length; i++) {
-      var descriptor = props[i];
-      descriptor.enumerable = descriptor.enumerable || false;
-      descriptor.configurable = true;
-      if ("value" in descriptor) descriptor.writable = true;
-      Object.defineProperty(target, descriptor.key, descriptor);
-    }
-  }
-
-  return function (Constructor, protoProps, staticProps) {
-    if (protoProps) defineProperties(Constructor.prototype, protoProps);
-    if (staticProps) defineProperties(Constructor, staticProps);
-    return Constructor;
-  };
-}();
-
-
-
-
-
-
-
-
-
-var inherits = function (subClass, superClass) {
-  if (typeof superClass !== "function" && superClass !== null) {
-    throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
-  }
-
-  subClass.prototype = Object.create(superClass && superClass.prototype, {
-    constructor: {
-      value: subClass,
-      enumerable: false,
-      writable: true,
-      configurable: true
-    }
-  });
-  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
-};
-
-
-
-
-
-
-
-
-
-
-
-var possibleConstructorReturn = function (self, call) {
-  if (!self) {
-    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
-  }
-
-  return call && (typeof call === "object" || typeof call === "function") ? call : self;
-};
-
-
-
-
-
-var slicedToArray = function () {
-  function sliceIterator(arr, i) {
-    var _arr = [];
-    var _n = true;
-    var _d = false;
-    var _e = undefined;
-
-    try {
-      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
-        _arr.push(_s.value);
-
-        if (i && _arr.length === i) break;
-      }
-    } catch (err) {
-      _d = true;
-      _e = err;
-    } finally {
-      try {
-        if (!_n && _i["return"]) _i["return"]();
-      } finally {
-        if (_d) throw _e;
-      }
-    }
-
-    return _arr;
-  }
-
-  return function (arr, i) {
-    if (Array.isArray(arr)) {
-      return arr;
-    } else if (Symbol.iterator in Object(arr)) {
-      return sliceIterator(arr, i);
-    } else {
-      throw new TypeError("Invalid attempt to destructure non-iterable instance");
-    }
-  };
-}();
-
-function getDataFromConsumer(res) {
-  if (!res.ok) {
-    return res.text();
-  }
-
-  return isWindowOrWorker() ? res.blob() : res.buffer();
-}
-
-function responseHandler(res, data) {
-  if (!res.ok) {
-    // eslint-disable-next-line no-throw-literal
-    throw {
-      error: data,
-      response: res,
-      status: res.status
-    };
-  }
-
-  var result = JSON.parse(res.headers.get('dropbox-api-result'));
-
-  if (isWindowOrWorker()) {
-    result.fileBlob = data;
-  } else {
-    result.fileBinary = data;
-  }
-
-  return result;
-}
-
-function downloadRequest(fetch) {
-  return function downloadRequestWithFetch(path, args, auth, host, accessToken, options) {
-    if (auth !== 'user') {
-      throw new Error('Unexpected auth type: ' + auth);
-    }
-
-    var fetchOptions = {
-      method: 'POST',
-      headers: {
-        Authorization: 'Bearer ' + accessToken,
-        'Dropbox-API-Arg': httpHeaderSafeJson(args)
-      }
-    };
-
-    if (options) {
-      if (options.selectUser) {
-        fetchOptions.headers['Dropbox-API-Select-User'] = options.selectUser;
-      }
-      if (options.selectAdmin) {
-        fetchOptions.headers['Dropbox-API-Select-Admin'] = options.selectAdmin;
-      }
-      if (options.pathRoot) {
-        fetchOptions.headers['Dropbox-API-Path-Root'] = options.pathRoot;
-      }
-    }
-
-    return fetch(getBaseURL(host) + path, fetchOptions).then(function (res) {
-      return getDataFromConsumer(res).then(function (data) {
-        return [res, data];
-      });
-    }).then(function (_ref) {
-      var _ref2 = slicedToArray(_ref, 2),
-          res = _ref2[0],
-          data = _ref2[1];
-
-      return responseHandler(res, data);
-    });
-  };
-}
-
-function parseBodyToType$1(res) {
-  var clone = res.clone();
-  return new Promise(function (resolve) {
-    res.json().then(function (data) {
-      return resolve(data);
-    }).catch(function () {
-      return clone.text().then(function (data) {
-        return resolve(data);
-      });
-    });
-  }).then(function (data) {
-    return [res, data];
-  });
-}
-
-function uploadRequest(fetch) {
-  return function uploadRequestWithFetch(path, args, auth, host, accessToken, options) {
-    if (auth !== 'user') {
-      throw new Error('Unexpected auth type: ' + auth);
-    }
-
-    var contents = args.contents;
-
-    delete args.contents;
-
-    var fetchOptions = {
-      body: contents,
-      method: 'POST',
-      headers: {
-        Authorization: 'Bearer ' + accessToken,
-        'Content-Type': 'application/octet-stream',
-        'Dropbox-API-Arg': httpHeaderSafeJson(args)
-      }
-    };
-
-    if (options) {
-      if (options.selectUser) {
-        fetchOptions.headers['Dropbox-API-Select-User'] = options.selectUser;
-      }
-      if (options.selectAdmin) {
-        fetchOptions.headers['Dropbox-API-Select-Admin'] = options.selectAdmin;
-      }
-      if (options.pathRoot) {
-        fetchOptions.headers['Dropbox-API-Path-Root'] = options.pathRoot;
-      }
-    }
-
-    return fetch(getBaseURL(host) + path, fetchOptions).then(function (res) {
-      return parseBodyToType$1(res);
-    }).then(function (_ref) {
-      var _ref2 = slicedToArray(_ref, 2),
-          res = _ref2[0],
-          data = _ref2[1];
-
-      // maintaining existing API for error codes not equal to 200 range
-      if (!res.ok) {
-        // eslint-disable-next-line no-throw-literal
-        throw {
-          error: data,
-          response: res,
-          status: res.status
-        };
-      }
-
-      return data;
-    });
-  };
-}
-
-function createCommonjsModule(fn, module) {
-	return module = { exports: {} }, fn(module, module.exports), module.exports;
-}
-
-var byteLength_1 = byteLength;
-var toByteArray_1 = toByteArray;
-var fromByteArray_1 = fromByteArray;
-
-var lookup = [];
-var revLookup = [];
-var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
-
-var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-for (var i = 0, len = code.length; i < len; ++i) {
-  lookup[i] = code[i];
-  revLookup[code.charCodeAt(i)] = i;
-}
-
-revLookup['-'.charCodeAt(0)] = 62;
-revLookup['_'.charCodeAt(0)] = 63;
-
-function placeHoldersCount (b64) {
-  var len = b64.length;
-  if (len % 4 > 0) {
-    throw new Error('Invalid string. Length must be a multiple of 4')
-  }
-
-  // the number of equal signs (place holders)
-  // if there are two placeholders, than the two characters before it
-  // represent one byte
-  // if there is only one, then the three characters before it represent 2 bytes
-  // this is just a cheap hack to not do indexOf twice
-  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
-}
-
-function byteLength (b64) {
-  // base64 is 4/3 + up to two characters of the original data
-  return (b64.length * 3 / 4) - placeHoldersCount(b64)
-}
-
-function toByteArray (b64) {
-  var i, l, tmp, placeHolders, arr;
-  var len = b64.length;
-  placeHolders = placeHoldersCount(b64);
-
-  arr = new Arr((len * 3 / 4) - placeHolders);
-
-  // if there are placeholders, only get up to the last complete 4 chars
-  l = placeHolders > 0 ? len - 4 : len;
-
-  var L = 0;
-
-  for (i = 0; i < l; i += 4) {
-    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];
-    arr[L++] = (tmp >> 16) & 0xFF;
-    arr[L++] = (tmp >> 8) & 0xFF;
-    arr[L++] = tmp & 0xFF;
-  }
-
-  if (placeHolders === 2) {
-    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);
-    arr[L++] = tmp & 0xFF;
-  } else if (placeHolders === 1) {
-    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);
-    arr[L++] = (tmp >> 8) & 0xFF;
-    arr[L++] = tmp & 0xFF;
-  }
-
-  return arr
-}
-
-function tripletToBase64 (num) {
-  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
-}
-
-function encodeChunk (uint8, start, end) {
-  var tmp;
-  var output = [];
-  for (var i = start; i < end; i += 3) {
-    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
-    output.push(tripletToBase64(tmp));
-  }
-  return output.join('')
-}
-
-function fromByteArray (uint8) {
-  var tmp;
-  var len = uint8.length;
-  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
-  var output = '';
-  var parts = [];
-  var maxChunkLength = 16383; // must be multiple of 3
-
-  // go through the array every three bytes, we'll deal with trailing stuff later
-  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
-    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
-  }
-
-  // pad the end with zeros, but make sure to not forget the extra bytes
-  if (extraBytes === 1) {
-    tmp = uint8[len - 1];
-    output += lookup[tmp >> 2];
-    output += lookup[(tmp << 4) & 0x3F];
-    output += '==';
-  } else if (extraBytes === 2) {
-    tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);
-    output += lookup[tmp >> 10];
-    output += lookup[(tmp >> 4) & 0x3F];
-    output += lookup[(tmp << 2) & 0x3F];
-    output += '=';
-  }
-
-  parts.push(output);
-
-  return parts.join('')
-}
-
-var base64Js = {
-	byteLength: byteLength_1,
-	toByteArray: toByteArray_1,
-	fromByteArray: fromByteArray_1
-};
-
-var read = function (buffer, offset, isLE, mLen, nBytes) {
-  var e, m;
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var nBits = -7;
-  var i = isLE ? (nBytes - 1) : 0;
-  var d = isLE ? -1 : 1;
-  var s = buffer[offset + i];
-
-  i += d;
-
-  e = s & ((1 << (-nBits)) - 1);
-  s >>= (-nBits);
-  nBits += eLen;
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  m = e & ((1 << (-nBits)) - 1);
-  e >>= (-nBits);
-  nBits += mLen;
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  if (e === 0) {
-    e = 1 - eBias;
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity)
-  } else {
-    m = m + Math.pow(2, mLen);
-    e = e - eBias;
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-};
-
-var write = function (buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c;
-  var eLen = nBytes * 8 - mLen - 1;
-  var eMax = (1 << eLen) - 1;
-  var eBias = eMax >> 1;
-  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
-  var i = isLE ? 0 : (nBytes - 1);
-  var d = isLE ? 1 : -1;
-  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
-
-  value = Math.abs(value);
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0;
-    e = eMax;
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2);
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--;
-      c *= 2;
-    }
-    if (e + eBias >= 1) {
-      value += rt / c;
-    } else {
-      value += rt * Math.pow(2, 1 - eBias);
-    }
-    if (value * c >= 2) {
-      e++;
-      c /= 2;
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0;
-      e = eMax;
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen);
-      e = e + eBias;
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
-      e = 0;
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
-  e = (e << mLen) | m;
-  eLen += mLen;
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
-  buffer[offset + i - d] |= s * 128;
-};
-
-var ieee754 = {
-	read: read,
-	write: write
-};
-
-var buffer = createCommonjsModule(function (module, exports) {
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh 
- * @license  MIT
- */
-/* eslint-disable no-proto */
-
-'use strict';
-
-
-
-
-exports.Buffer = Buffer;
-exports.SlowBuffer = SlowBuffer;
-exports.INSPECT_MAX_BYTES = 50;
-
-var K_MAX_LENGTH = 0x7fffffff;
-exports.kMaxLength = K_MAX_LENGTH;
-
-/**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- *   === true    Use Uint8Array implementation (fastest)
- *   === false   Print warning and recommend using `buffer` v4.x which has an Object
- *               implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * We report that the browser does not support typed arrays if the are not subclassable
- * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
- * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
- * for __proto__ and has a buggy typed array implementation.
- */
-Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();
-
-if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
-    typeof console.error === 'function') {
-  console.error(
-    'This browser lacks typed array (Uint8Array) support which is required by ' +
-    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
-  );
-}
-
-function typedArraySupport () {
-  // Can typed array instances can be augmented?
-  try {
-    var arr = new Uint8Array(1);
-    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }};
-    return arr.foo() === 42
-  } catch (e) {
-    return false
-  }
-}
-
-function createBuffer (length) {
-  if (length > K_MAX_LENGTH) {
-    throw new RangeError('Invalid typed array length')
-  }
-  // Return an augmented `Uint8Array` instance
-  var buf = new Uint8Array(length);
-  buf.__proto__ = Buffer.prototype;
-  return buf
-}
-
-/**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
- *
- * The `Uint8Array` prototype remains unmodified.
- */
-
-function Buffer (arg, encodingOrOffset, length) {
-  // Common case.
-  if (typeof arg === 'number') {
-    if (typeof encodingOrOffset === 'string') {
-      throw new Error(
-        'If encoding is specified then the first argument must be a string'
-      )
-    }
-    return allocUnsafe(arg)
-  }
-  return from(arg, encodingOrOffset, length)
-}
-
-// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
-if (typeof Symbol !== 'undefined' && Symbol.species &&
-    Buffer[Symbol.species] === Buffer) {
-  Object.defineProperty(Buffer, Symbol.species, {
-    value: null,
-    configurable: true,
-    enumerable: false,
-    writable: false
-  });
-}
-
-Buffer.poolSize = 8192; // not used by this implementation
-
-function from (value, encodingOrOffset, length) {
-  if (typeof value === 'number') {
-    throw new TypeError('"value" argument must not be a number')
-  }
-
-  if (isArrayBuffer(value)) {
-    return fromArrayBuffer(value, encodingOrOffset, length)
-  }
-
-  if (typeof value === 'string') {
-    return fromString(value, encodingOrOffset)
-  }
-
-  return fromObject(value)
-}
-
-/**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
-Buffer.from = function (value, encodingOrOffset, length) {
-  return from(value, encodingOrOffset, length)
-};
-
-// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
-// https://github.com/feross/buffer/pull/148
-Buffer.prototype.__proto__ = Uint8Array.prototype;
-Buffer.__proto__ = Uint8Array;
-
-function assertSize (size) {
-  if (typeof size !== 'number') {
-    throw new TypeError('"size" argument must be a number')
-  } else if (size < 0) {
-    throw new RangeError('"size" argument must not be negative')
-  }
-}
-
-function alloc (size, fill, encoding) {
-  assertSize(size);
-  if (size <= 0) {
-    return createBuffer(size)
-  }
-  if (fill !== undefined) {
-    // Only pay attention to encoding if it's a string. This
-    // prevents accidentally sending in a number that would
-    // be interpretted as a start offset.
-    return typeof encoding === 'string'
-      ? createBuffer(size).fill(fill, encoding)
-      : createBuffer(size).fill(fill)
-  }
-  return createBuffer(size)
-}
-
-/**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
-Buffer.alloc = function (size, fill, encoding) {
-  return alloc(size, fill, encoding)
-};
-
-function allocUnsafe (size) {
-  assertSize(size);
-  return createBuffer(size < 0 ? 0 : checked(size) | 0)
-}
-
-/**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
-Buffer.allocUnsafe = function (size) {
-  return allocUnsafe(size)
-};
-/**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
- */
-Buffer.allocUnsafeSlow = function (size) {
-  return allocUnsafe(size)
-};
-
-function fromString (string, encoding) {
-  if (typeof encoding !== 'string' || encoding === '') {
-    encoding = 'utf8';
-  }
-
-  if (!Buffer.isEncoding(encoding)) {
-    throw new TypeError('"encoding" must be a valid string encoding')
-  }
-
-  var length = byteLength(string, encoding) | 0;
-  var buf = createBuffer(length);
-
-  var actual = buf.write(string, encoding);
-
-  if (actual !== length) {
-    // Writing a hex string, for example, that contains invalid characters will
-    // cause everything after the first invalid character to be ignored. (e.g.
-    // 'abxxcd' will be treated as 'ab')
-    buf = buf.slice(0, actual);
-  }
-
-  return buf
-}
-
-function fromArrayLike (array) {
-  var length = array.length < 0 ? 0 : checked(array.length) | 0;
-  var buf = createBuffer(length);
-  for (var i = 0; i < length; i += 1) {
-    buf[i] = array[i] & 255;
-  }
-  return buf
-}
-
-function fromArrayBuffer (array, byteOffset, length) {
-  if (byteOffset < 0 || array.byteLength < byteOffset) {
-    throw new RangeError('\'offset\' is out of bounds')
-  }
-
-  if (array.byteLength < byteOffset + (length || 0)) {
-    throw new RangeError('\'length\' is out of bounds')
-  }
-
-  var buf;
-  if (byteOffset === undefined && length === undefined) {
-    buf = new Uint8Array(array);
-  } else if (length === undefined) {
-    buf = new Uint8Array(array, byteOffset);
-  } else {
-    buf = new Uint8Array(array, byteOffset, length);
-  }
-
-  // Return an augmented `Uint8Array` instance
-  buf.__proto__ = Buffer.prototype;
-  return buf
-}
-
-function fromObject (obj) {
-  if (Buffer.isBuffer(obj)) {
-    var len = checked(obj.length) | 0;
-    var buf = createBuffer(len);
-
-    if (buf.length === 0) {
-      return buf
-    }
-
-    obj.copy(buf, 0, 0, len);
-    return buf
-  }
-
-  if (obj) {
-    if (isArrayBufferView(obj) || 'length' in obj) {
-      if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
-        return createBuffer(0)
-      }
-      return fromArrayLike(obj)
-    }
-
-    if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
-      return fromArrayLike(obj.data)
-    }
-  }
-
-  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
-}
-
-function checked (length) {
-  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
-  // length is NaN (which is otherwise coerced to zero.)
-  if (length >= K_MAX_LENGTH) {
-    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
-                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
-  }
-  return length | 0
-}
-
-function SlowBuffer (length) {
-  if (+length != length) { // eslint-disable-line eqeqeq
-    length = 0;
-  }
-  return Buffer.alloc(+length)
-}
-
-Buffer.isBuffer = function isBuffer (b) {
-  return b != null && b._isBuffer === true
-};
-
-Buffer.compare = function compare (a, b) {
-  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
-    throw new TypeError('Arguments must be Buffers')
-  }
-
-  if (a === b) return 0
-
-  var x = a.length;
-  var y = b.length;
-
-  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
-    if (a[i] !== b[i]) {
-      x = a[i];
-      y = b[i];
-      break
-    }
-  }
-
-  if (x < y) return -1
-  if (y < x) return 1
-  return 0
-};
-
-Buffer.isEncoding = function isEncoding (encoding) {
-  switch (String(encoding).toLowerCase()) {
-    case 'hex':
-    case 'utf8':
-    case 'utf-8':
-    case 'ascii':
-    case 'latin1':
-    case 'binary':
-    case 'base64':
-    case 'ucs2':
-    case 'ucs-2':
-    case 'utf16le':
-    case 'utf-16le':
-      return true
-    default:
-      return false
-  }
-};
-
-Buffer.concat = function concat (list, length) {
-  if (!Array.isArray(list)) {
-    throw new TypeError('"list" argument must be an Array of Buffers')
-  }
-
-  if (list.length === 0) {
-    return Buffer.alloc(0)
-  }
-
-  var i;
-  if (length === undefined) {
-    length = 0;
-    for (i = 0; i < list.length; ++i) {
-      length += list[i].length;
-    }
-  }
-
-  var buffer = Buffer.allocUnsafe(length);
-  var pos = 0;
-  for (i = 0; i < list.length; ++i) {
-    var buf = list[i];
-    if (!Buffer.isBuffer(buf)) {
-      throw new TypeError('"list" argument must be an Array of Buffers')
-    }
-    buf.copy(buffer, pos);
-    pos += buf.length;
-  }
-  return buffer
-};
-
-function byteLength (string, encoding) {
-  if (Buffer.isBuffer(string)) {
-    return string.length
-  }
-  if (isArrayBufferView(string) || isArrayBuffer(string)) {
-    return string.byteLength
-  }
-  if (typeof string !== 'string') {
-    string = '' + string;
-  }
-
-  var len = string.length;
-  if (len === 0) return 0
-
-  // Use a for loop to avoid recursion
-  var loweredCase = false;
-  for (;;) {
-    switch (encoding) {
-      case 'ascii':
-      case 'latin1':
-      case 'binary':
-        return len
-      case 'utf8':
-      case 'utf-8':
-      case undefined:
-        return utf8ToBytes(string).length
-      case 'ucs2':
-      case 'ucs-2':
-      case 'utf16le':
-      case 'utf-16le':
-        return len * 2
-      case 'hex':
-        return len >>> 1
-      case 'base64':
-        return base64ToBytes(string).length
-      default:
-        if (loweredCase) return utf8ToBytes(string).length // assume utf8
-        encoding = ('' + encoding).toLowerCase();
-        loweredCase = true;
-    }
-  }
-}
-Buffer.byteLength = byteLength;
-
-function slowToString (encoding, start, end) {
-  var loweredCase = false;
-
-  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
-  // property of a typed array.
-
-  // This behaves neither like String nor Uint8Array in that we set start/end
-  // to their upper/lower bounds if the value passed is out of range.
-  // undefined is handled specially as per ECMA-262 6th Edition,
-  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
-  if (start === undefined || start < 0) {
-    start = 0;
-  }
-  // Return early if start > this.length. Done here to prevent potential uint32
-  // coercion fail below.
-  if (start > this.length) {
-    return ''
-  }
-
-  if (end === undefined || end > this.length) {
-    end = this.length;
-  }
-
-  if (end <= 0) {
-    return ''
-  }
-
-  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
-  end >>>= 0;
-  start >>>= 0;
-
-  if (end <= start) {
-    return ''
-  }
-
-  if (!encoding) encoding = 'utf8';
-
-  while (true) {
-    switch (encoding) {
-      case 'hex':
-        return hexSlice(this, start, end)
-
-      case 'utf8':
-      case 'utf-8':
-        return utf8Slice(this, start, end)
-
-      case 'ascii':
-        return asciiSlice(this, start, end)
-
-      case 'latin1':
-      case 'binary':
-        return latin1Slice(this, start, end)
-
-      case 'base64':
-        return base64Slice(this, start, end)
-
-      case 'ucs2':
-      case 'ucs-2':
-      case 'utf16le':
-      case 'utf-16le':
-        return utf16leSlice(this, start, end)
-
-      default:
-        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
-        encoding = (encoding + '').toLowerCase();
-        loweredCase = true;
-    }
-  }
-}
-
-// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
-// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
-// reliably in a browserify context because there could be multiple different
-// copies of the 'buffer' package in use. This method works even for Buffer
-// instances that were created from another copy of the `buffer` package.
-// See: https://github.com/feross/buffer/issues/154
-Buffer.prototype._isBuffer = true;
-
-function swap (b, n, m) {
-  var i = b[n];
-  b[n] = b[m];
-  b[m] = i;
-}
-
-Buffer.prototype.swap16 = function swap16 () {
-  var len = this.length;
-  if (len % 2 !== 0) {
-    throw new RangeError('Buffer size must be a multiple of 16-bits')
-  }
-  for (var i = 0; i < len; i += 2) {
-    swap(this, i, i + 1);
-  }
-  return this
-};
-
-Buffer.prototype.swap32 = function swap32 () {
-  var len = this.length;
-  if (len % 4 !== 0) {
-    throw new RangeError('Buffer size must be a multiple of 32-bits')
-  }
-  for (var i = 0; i < len; i += 4) {
-    swap(this, i, i + 3);
-    swap(this, i + 1, i + 2);
-  }
-  return this
-};
-
-Buffer.prototype.swap64 = function swap64 () {
-  var len = this.length;
-  if (len % 8 !== 0) {
-    throw new RangeError('Buffer size must be a multiple of 64-bits')
-  }
-  for (var i = 0; i < len; i += 8) {
-    swap(this, i, i + 7);
-    swap(this, i + 1, i + 6);
-    swap(this, i + 2, i + 5);
-    swap(this, i + 3, i + 4);
-  }
-  return this
-};
-
-Buffer.prototype.toString = function toString () {
-  var length = this.length;
-  if (length === 0) return ''
-  if (arguments.length === 0) return utf8Slice(this, 0, length)
-  return slowToString.apply(this, arguments)
-};
-
-Buffer.prototype.equals = function equals (b) {
-  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
-  if (this === b) return true
-  return Buffer.compare(this, b) === 0
-};
-
-Buffer.prototype.inspect = function inspect () {
-  var str = '';
-  var max = exports.INSPECT_MAX_BYTES;
-  if (this.length > 0) {
-    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
-    if (this.length > max) str += ' ... ';
-  }
-  return ''
-};
-
-Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
-  if (!Buffer.isBuffer(target)) {
-    throw new TypeError('Argument must be a Buffer')
-  }
-
-  if (start === undefined) {
-    start = 0;
-  }
-  if (end === undefined) {
-    end = target ? target.length : 0;
-  }
-  if (thisStart === undefined) {
-    thisStart = 0;
-  }
-  if (thisEnd === undefined) {
-    thisEnd = this.length;
-  }
-
-  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
-    throw new RangeError('out of range index')
-  }
-
-  if (thisStart >= thisEnd && start >= end) {
-    return 0
-  }
-  if (thisStart >= thisEnd) {
-    return -1
-  }
-  if (start >= end) {
-    return 1
-  }
-
-  start >>>= 0;
-  end >>>= 0;
-  thisStart >>>= 0;
-  thisEnd >>>= 0;
-
-  if (this === target) return 0
-
-  var x = thisEnd - thisStart;
-  var y = end - start;
-  var len = Math.min(x, y);
-
-  var thisCopy = this.slice(thisStart, thisEnd);
-  var targetCopy = target.slice(start, end);
-
-  for (var i = 0; i < len; ++i) {
-    if (thisCopy[i] !== targetCopy[i]) {
-      x = thisCopy[i];
-      y = targetCopy[i];
-      break
-    }
-  }
-
-  if (x < y) return -1
-  if (y < x) return 1
-  return 0
-};
-
-// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
-// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
-//
-// Arguments:
-// - buffer - a Buffer to search
-// - val - a string, Buffer, or number
-// - byteOffset - an index into `buffer`; will be clamped to an int32
-// - encoding - an optional encoding, relevant is val is a string
-// - dir - true for indexOf, false for lastIndexOf
-function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
-  // Empty buffer means no match
-  if (buffer.length === 0) return -1
-
-  // Normalize byteOffset
-  if (typeof byteOffset === 'string') {
-    encoding = byteOffset;
-    byteOffset = 0;
-  } else if (byteOffset > 0x7fffffff) {
-    byteOffset = 0x7fffffff;
-  } else if (byteOffset < -0x80000000) {
-    byteOffset = -0x80000000;
-  }
-  byteOffset = +byteOffset;  // Coerce to Number.
-  if (numberIsNaN(byteOffset)) {
-    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
-    byteOffset = dir ? 0 : (buffer.length - 1);
-  }
-
-  // Normalize byteOffset: negative offsets start from the end of the buffer
-  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
-  if (byteOffset >= buffer.length) {
-    if (dir) return -1
-    else byteOffset = buffer.length - 1;
-  } else if (byteOffset < 0) {
-    if (dir) byteOffset = 0;
-    else return -1
-  }
-
-  // Normalize val
-  if (typeof val === 'string') {
-    val = Buffer.from(val, encoding);
-  }
-
-  // Finally, search either indexOf (if dir is true) or lastIndexOf
-  if (Buffer.isBuffer(val)) {
-    // Special case: looking for empty string/buffer always fails
-    if (val.length === 0) {
-      return -1
-    }
-    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
-  } else if (typeof val === 'number') {
-    val = val & 0xFF; // Search for a byte value [0-255]
-    if (typeof Uint8Array.prototype.indexOf === 'function') {
-      if (dir) {
-        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
-      } else {
-        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
-      }
-    }
-    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
-  }
-
-  throw new TypeError('val must be string, number or Buffer')
-}
-
-function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
-  var indexSize = 1;
-  var arrLength = arr.length;
-  var valLength = val.length;
-
-  if (encoding !== undefined) {
-    encoding = String(encoding).toLowerCase();
-    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
-        encoding === 'utf16le' || encoding === 'utf-16le') {
-      if (arr.length < 2 || val.length < 2) {
-        return -1
-      }
-      indexSize = 2;
-      arrLength /= 2;
-      valLength /= 2;
-      byteOffset /= 2;
-    }
-  }
-
-  function read (buf, i) {
-    if (indexSize === 1) {
-      return buf[i]
-    } else {
-      return buf.readUInt16BE(i * indexSize)
-    }
-  }
-
-  var i;
-  if (dir) {
-    var foundIndex = -1;
-    for (i = byteOffset; i < arrLength; i++) {
-      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
-        if (foundIndex === -1) foundIndex = i;
-        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
-      } else {
-        if (foundIndex !== -1) i -= i - foundIndex;
-        foundIndex = -1;
-      }
-    }
-  } else {
-    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
-    for (i = byteOffset; i >= 0; i--) {
-      var found = true;
-      for (var j = 0; j < valLength; j++) {
-        if (read(arr, i + j) !== read(val, j)) {
-          found = false;
-          break
-        }
-      }
-      if (found) return i
-    }
-  }
-
-  return -1
-}
-
-Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
-  return this.indexOf(val, byteOffset, encoding) !== -1
-};
-
-Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
-  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
-};
-
-Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
-  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
-};
-
-function hexWrite (buf, string, offset, length) {
-  offset = Number(offset) || 0;
-  var remaining = buf.length - offset;
-  if (!length) {
-    length = remaining;
-  } else {
-    length = Number(length);
-    if (length > remaining) {
-      length = remaining;
-    }
-  }
-
-  // must be an even number of digits
-  var strLen = string.length;
-  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
-
-  if (length > strLen / 2) {
-    length = strLen / 2;
-  }
-  for (var i = 0; i < length; ++i) {
-    var parsed = parseInt(string.substr(i * 2, 2), 16);
-    if (numberIsNaN(parsed)) return i
-    buf[offset + i] = parsed;
-  }
-  return i
-}
-
-function utf8Write (buf, string, offset, length) {
-  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
-}
-
-function asciiWrite (buf, string, offset, length) {
-  return blitBuffer(asciiToBytes(string), buf, offset, length)
-}
-
-function latin1Write (buf, string, offset, length) {
-  return asciiWrite(buf, string, offset, length)
-}
-
-function base64Write (buf, string, offset, length) {
-  return blitBuffer(base64ToBytes(string), buf, offset, length)
-}
-
-function ucs2Write (buf, string, offset, length) {
-  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
-}
-
-Buffer.prototype.write = function write (string, offset, length, encoding) {
-  // Buffer#write(string)
-  if (offset === undefined) {
-    encoding = 'utf8';
-    length = this.length;
-    offset = 0;
-  // Buffer#write(string, encoding)
-  } else if (length === undefined && typeof offset === 'string') {
-    encoding = offset;
-    length = this.length;
-    offset = 0;
-  // Buffer#write(string, offset[, length][, encoding])
-  } else if (isFinite(offset)) {
-    offset = offset >>> 0;
-    if (isFinite(length)) {
-      length = length >>> 0;
-      if (encoding === undefined) encoding = 'utf8';
-    } else {
-      encoding = length;
-      length = undefined;
-    }
-  } else {
-    throw new Error(
-      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
-    )
-  }
-
-  var remaining = this.length - offset;
-  if (length === undefined || length > remaining) length = remaining;
-
-  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
-    throw new RangeError('Attempt to write outside buffer bounds')
-  }
-
-  if (!encoding) encoding = 'utf8';
-
-  var loweredCase = false;
-  for (;;) {
-    switch (encoding) {
-      case 'hex':
-        return hexWrite(this, string, offset, length)
-
-      case 'utf8':
-      case 'utf-8':
-        return utf8Write(this, string, offset, length)
-
-      case 'ascii':
-        return asciiWrite(this, string, offset, length)
-
-      case 'latin1':
-      case 'binary':
-        return latin1Write(this, string, offset, length)
-
-      case 'base64':
-        // Warning: maxLength not taken into account in base64Write
-        return base64Write(this, string, offset, length)
-
-      case 'ucs2':
-      case 'ucs-2':
-      case 'utf16le':
-      case 'utf-16le':
-        return ucs2Write(this, string, offset, length)
-
-      default:
-        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
-        encoding = ('' + encoding).toLowerCase();
-        loweredCase = true;
-    }
-  }
-};
-
-Buffer.prototype.toJSON = function toJSON () {
-  return {
-    type: 'Buffer',
-    data: Array.prototype.slice.call(this._arr || this, 0)
-  }
-};
-
-function base64Slice (buf, start, end) {
-  if (start === 0 && end === buf.length) {
-    return base64Js.fromByteArray(buf)
-  } else {
-    return base64Js.fromByteArray(buf.slice(start, end))
-  }
-}
-
-function utf8Slice (buf, start, end) {
-  end = Math.min(buf.length, end);
-  var res = [];
-
-  var i = start;
-  while (i < end) {
-    var firstByte = buf[i];
-    var codePoint = null;
-    var bytesPerSequence = (firstByte > 0xEF) ? 4
-      : (firstByte > 0xDF) ? 3
-      : (firstByte > 0xBF) ? 2
-      : 1;
-
-    if (i + bytesPerSequence <= end) {
-      var secondByte, thirdByte, fourthByte, tempCodePoint;
-
-      switch (bytesPerSequence) {
-        case 1:
-          if (firstByte < 0x80) {
-            codePoint = firstByte;
-          }
-          break
-        case 2:
-          secondByte = buf[i + 1];
-          if ((secondByte & 0xC0) === 0x80) {
-            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);
-            if (tempCodePoint > 0x7F) {
-              codePoint = tempCodePoint;
-            }
-          }
-          break
-        case 3:
-          secondByte = buf[i + 1];
-          thirdByte = buf[i + 2];
-          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
-            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);
-            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
-              codePoint = tempCodePoint;
-            }
-          }
-          break
-        case 4:
-          secondByte = buf[i + 1];
-          thirdByte = buf[i + 2];
-          fourthByte = buf[i + 3];
-          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
-            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);
-            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
-              codePoint = tempCodePoint;
-            }
-          }
-      }
-    }
-
-    if (codePoint === null) {
-      // we did not generate a valid codePoint so insert a
-      // replacement char (U+FFFD) and advance only 1 byte
-      codePoint = 0xFFFD;
-      bytesPerSequence = 1;
-    } else if (codePoint > 0xFFFF) {
-      // encode to utf16 (surrogate pair dance)
-      codePoint -= 0x10000;
-      res.push(codePoint >>> 10 & 0x3FF | 0xD800);
-      codePoint = 0xDC00 | codePoint & 0x3FF;
-    }
-
-    res.push(codePoint);
-    i += bytesPerSequence;
-  }
-
-  return decodeCodePointsArray(res)
-}
-
-// Based on http://stackoverflow.com/a/22747272/680742, the browser with
-// the lowest limit is Chrome, with 0x10000 args.
-// We go 1 magnitude less, for safety
-var MAX_ARGUMENTS_LENGTH = 0x1000;
-
-function decodeCodePointsArray (codePoints) {
-  var len = codePoints.length;
-  if (len <= MAX_ARGUMENTS_LENGTH) {
-    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
-  }
-
-  // Decode in chunks to avoid "call stack size exceeded".
-  var res = '';
-  var i = 0;
-  while (i < len) {
-    res += String.fromCharCode.apply(
-      String,
-      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
-    );
-  }
-  return res
-}
-
-function asciiSlice (buf, start, end) {
-  var ret = '';
-  end = Math.min(buf.length, end);
-
-  for (var i = start; i < end; ++i) {
-    ret += String.fromCharCode(buf[i] & 0x7F);
-  }
-  return ret
-}
-
-function latin1Slice (buf, start, end) {
-  var ret = '';
-  end = Math.min(buf.length, end);
-
-  for (var i = start; i < end; ++i) {
-    ret += String.fromCharCode(buf[i]);
-  }
-  return ret
-}
-
-function hexSlice (buf, start, end) {
-  var len = buf.length;
-
-  if (!start || start < 0) start = 0;
-  if (!end || end < 0 || end > len) end = len;
-
-  var out = '';
-  for (var i = start; i < end; ++i) {
-    out += toHex(buf[i]);
-  }
-  return out
-}
-
-function utf16leSlice (buf, start, end) {
-  var bytes = buf.slice(start, end);
-  var res = '';
-  for (var i = 0; i < bytes.length; i += 2) {
-    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256));
-  }
-  return res
-}
-
-Buffer.prototype.slice = function slice (start, end) {
-  var len = this.length;
-  start = ~~start;
-  end = end === undefined ? len : ~~end;
-
-  if (start < 0) {
-    start += len;
-    if (start < 0) start = 0;
-  } else if (start > len) {
-    start = len;
-  }
-
-  if (end < 0) {
-    end += len;
-    if (end < 0) end = 0;
-  } else if (end > len) {
-    end = len;
-  }
-
-  if (end < start) end = start;
-
-  var newBuf = this.subarray(start, end);
-  // Return an augmented `Uint8Array` instance
-  newBuf.__proto__ = Buffer.prototype;
-  return newBuf
-};
-
-/*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
-function checkOffset (offset, ext, length) {
-  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
-  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
-}
-
-Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) checkOffset(offset, byteLength, this.length);
-
-  var val = this[offset];
-  var mul = 1;
-  var i = 0;
-  while (++i < byteLength && (mul *= 0x100)) {
-    val += this[offset + i] * mul;
-  }
-
-  return val
-};
-
-Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) {
-    checkOffset(offset, byteLength, this.length);
-  }
-
-  var val = this[offset + --byteLength];
-  var mul = 1;
-  while (byteLength > 0 && (mul *= 0x100)) {
-    val += this[offset + --byteLength] * mul;
-  }
-
-  return val
-};
-
-Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 1, this.length);
-  return this[offset]
-};
-
-Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 2, this.length);
-  return this[offset] | (this[offset + 1] << 8)
-};
-
-Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 2, this.length);
-  return (this[offset] << 8) | this[offset + 1]
-};
-
-Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-
-  return ((this[offset]) |
-      (this[offset + 1] << 8) |
-      (this[offset + 2] << 16)) +
-      (this[offset + 3] * 0x1000000)
-};
-
-Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-
-  return (this[offset] * 0x1000000) +
-    ((this[offset + 1] << 16) |
-    (this[offset + 2] << 8) |
-    this[offset + 3])
-};
-
-Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) checkOffset(offset, byteLength, this.length);
-
-  var val = this[offset];
-  var mul = 1;
-  var i = 0;
-  while (++i < byteLength && (mul *= 0x100)) {
-    val += this[offset + i] * mul;
-  }
-  mul *= 0x80;
-
-  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
-
-  return val
-};
-
-Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) checkOffset(offset, byteLength, this.length);
-
-  var i = byteLength;
-  var mul = 1;
-  var val = this[offset + --i];
-  while (i > 0 && (mul *= 0x100)) {
-    val += this[offset + --i] * mul;
-  }
-  mul *= 0x80;
-
-  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
-
-  return val
-};
-
-Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 1, this.length);
-  if (!(this[offset] & 0x80)) return (this[offset])
-  return ((0xff - this[offset] + 1) * -1)
-};
-
-Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 2, this.length);
-  var val = this[offset] | (this[offset + 1] << 8);
-  return (val & 0x8000) ? val | 0xFFFF0000 : val
-};
-
-Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 2, this.length);
-  var val = this[offset + 1] | (this[offset] << 8);
-  return (val & 0x8000) ? val | 0xFFFF0000 : val
-};
-
-Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-
-  return (this[offset]) |
-    (this[offset + 1] << 8) |
-    (this[offset + 2] << 16) |
-    (this[offset + 3] << 24)
-};
-
-Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-
-  return (this[offset] << 24) |
-    (this[offset + 1] << 16) |
-    (this[offset + 2] << 8) |
-    (this[offset + 3])
-};
-
-Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-  return ieee754.read(this, offset, true, 23, 4)
-};
-
-Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 4, this.length);
-  return ieee754.read(this, offset, false, 23, 4)
-};
-
-Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 8, this.length);
-  return ieee754.read(this, offset, true, 52, 8)
-};
-
-Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
-  offset = offset >>> 0;
-  if (!noAssert) checkOffset(offset, 8, this.length);
-  return ieee754.read(this, offset, false, 52, 8)
-};
-
-function checkInt (buf, value, offset, ext, max, min) {
-  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
-  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
-  if (offset + ext > buf.length) throw new RangeError('Index out of range')
-}
-
-Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) {
-    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
-    checkInt(this, value, offset, byteLength, maxBytes, 0);
-  }
-
-  var mul = 1;
-  var i = 0;
-  this[offset] = value & 0xFF;
-  while (++i < byteLength && (mul *= 0x100)) {
-    this[offset + i] = (value / mul) & 0xFF;
-  }
-
-  return offset + byteLength
-};
-
-Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  byteLength = byteLength >>> 0;
-  if (!noAssert) {
-    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
-    checkInt(this, value, offset, byteLength, maxBytes, 0);
-  }
-
-  var i = byteLength - 1;
-  var mul = 1;
-  this[offset + i] = value & 0xFF;
-  while (--i >= 0 && (mul *= 0x100)) {
-    this[offset + i] = (value / mul) & 0xFF;
-  }
-
-  return offset + byteLength
-};
-
-Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
-  this[offset] = (value & 0xff);
-  return offset + 1
-};
-
-Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
-  this[offset] = (value & 0xff);
-  this[offset + 1] = (value >>> 8);
-  return offset + 2
-};
-
-Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
-  this[offset] = (value >>> 8);
-  this[offset + 1] = (value & 0xff);
-  return offset + 2
-};
-
-Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
-  this[offset + 3] = (value >>> 24);
-  this[offset + 2] = (value >>> 16);
-  this[offset + 1] = (value >>> 8);
-  this[offset] = (value & 0xff);
-  return offset + 4
-};
-
-Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
-  this[offset] = (value >>> 24);
-  this[offset + 1] = (value >>> 16);
-  this[offset + 2] = (value >>> 8);
-  this[offset + 3] = (value & 0xff);
-  return offset + 4
-};
-
-Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) {
-    var limit = Math.pow(2, (8 * byteLength) - 1);
-
-    checkInt(this, value, offset, byteLength, limit - 1, -limit);
-  }
-
-  var i = 0;
-  var mul = 1;
-  var sub = 0;
-  this[offset] = value & 0xFF;
-  while (++i < byteLength && (mul *= 0x100)) {
-    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
-      sub = 1;
-    }
-    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;
-  }
-
-  return offset + byteLength
-};
-
-Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) {
-    var limit = Math.pow(2, (8 * byteLength) - 1);
-
-    checkInt(this, value, offset, byteLength, limit - 1, -limit);
-  }
-
-  var i = byteLength - 1;
-  var mul = 1;
-  var sub = 0;
-  this[offset + i] = value & 0xFF;
-  while (--i >= 0 && (mul *= 0x100)) {
-    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
-      sub = 1;
-    }
-    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;
-  }
-
-  return offset + byteLength
-};
-
-Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
-  if (value < 0) value = 0xff + value + 1;
-  this[offset] = (value & 0xff);
-  return offset + 1
-};
-
-Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
-  this[offset] = (value & 0xff);
-  this[offset + 1] = (value >>> 8);
-  return offset + 2
-};
-
-Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
-  this[offset] = (value >>> 8);
-  this[offset + 1] = (value & 0xff);
-  return offset + 2
-};
-
-Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
-  this[offset] = (value & 0xff);
-  this[offset + 1] = (value >>> 8);
-  this[offset + 2] = (value >>> 16);
-  this[offset + 3] = (value >>> 24);
-  return offset + 4
-};
-
-Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
-  if (value < 0) value = 0xffffffff + value + 1;
-  this[offset] = (value >>> 24);
-  this[offset + 1] = (value >>> 16);
-  this[offset + 2] = (value >>> 8);
-  this[offset + 3] = (value & 0xff);
-  return offset + 4
-};
-
-function checkIEEE754 (buf, value, offset, ext, max, min) {
-  if (offset + ext > buf.length) throw new RangeError('Index out of range')
-  if (offset < 0) throw new RangeError('Index out of range')
-}
-
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) {
-    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
-  }
-  ieee754.write(buf, value, offset, littleEndian, 23, 4);
-  return offset + 4
-}
-
-Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
-  return writeFloat(this, value, offset, true, noAssert)
-};
-
-Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
-  return writeFloat(this, value, offset, false, noAssert)
-};
-
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
-  value = +value;
-  offset = offset >>> 0;
-  if (!noAssert) {
-    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
-  }
-  ieee754.write(buf, value, offset, littleEndian, 52, 8);
-  return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
-  return writeDouble(this, value, offset, true, noAssert)
-};
-
-Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
-  return writeDouble(this, value, offset, false, noAssert)
-};
-
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function copy (target, targetStart, start, end) {
-  if (!start) start = 0;
-  if (!end && end !== 0) end = this.length;
-  if (targetStart >= target.length) targetStart = target.length;
-  if (!targetStart) targetStart = 0;
-  if (end > 0 && end < start) end = start;
-
-  // Copy 0 bytes; we're done
-  if (end === start) return 0
-  if (target.length === 0 || this.length === 0) return 0
-
-  // Fatal error conditions
-  if (targetStart < 0) {
-    throw new RangeError('targetStart out of bounds')
-  }
-  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
-  if (end < 0) throw new RangeError('sourceEnd out of bounds')
-
-  // Are we oob?
-  if (end > this.length) end = this.length;
-  if (target.length - targetStart < end - start) {
-    end = target.length - targetStart + start;
-  }
-
-  var len = end - start;
-  var i;
-
-  if (this === target && start < targetStart && targetStart < end) {
-    // descending copy from end
-    for (i = len - 1; i >= 0; --i) {
-      target[i + targetStart] = this[i + start];
-    }
-  } else if (len < 1000) {
-    // ascending copy from start
-    for (i = 0; i < len; ++i) {
-      target[i + targetStart] = this[i + start];
-    }
-  } else {
-    Uint8Array.prototype.set.call(
-      target,
-      this.subarray(start, start + len),
-      targetStart
-    );
-  }
-
-  return len
-};
-
-// Usage:
-//    buffer.fill(number[, offset[, end]])
-//    buffer.fill(buffer[, offset[, end]])
-//    buffer.fill(string[, offset[, end]][, encoding])
-Buffer.prototype.fill = function fill (val, start, end, encoding) {
-  // Handle string cases:
-  if (typeof val === 'string') {
-    if (typeof start === 'string') {
-      encoding = start;
-      start = 0;
-      end = this.length;
-    } else if (typeof end === 'string') {
-      encoding = end;
-      end = this.length;
-    }
-    if (val.length === 1) {
-      var code = val.charCodeAt(0);
-      if (code < 256) {
-        val = code;
-      }
-    }
-    if (encoding !== undefined && typeof encoding !== 'string') {
-      throw new TypeError('encoding must be a string')
-    }
-    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
-      throw new TypeError('Unknown encoding: ' + encoding)
-    }
-  } else if (typeof val === 'number') {
-    val = val & 255;
-  }
-
-  // Invalid ranges are not set to a default, so can range check early.
-  if (start < 0 || this.length < start || this.length < end) {
-    throw new RangeError('Out of range index')
-  }
-
-  if (end <= start) {
-    return this
-  }
-
-  start = start >>> 0;
-  end = end === undefined ? this.length : end >>> 0;
-
-  if (!val) val = 0;
-
-  var i;
-  if (typeof val === 'number') {
-    for (i = start; i < end; ++i) {
-      this[i] = val;
-    }
-  } else {
-    var bytes = Buffer.isBuffer(val)
-      ? val
-      : new Buffer(val, encoding);
-    var len = bytes.length;
-    for (i = 0; i < end - start; ++i) {
-      this[i + start] = bytes[i % len];
-    }
-  }
-
-  return this
-};
-
-// HELPER FUNCTIONS
-// ================
-
-var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
-
-function base64clean (str) {
-  // Node strips out invalid characters like \n and \t from the string, base64-js does not
-  str = str.trim().replace(INVALID_BASE64_RE, '');
-  // Node converts strings with length < 2 to ''
-  if (str.length < 2) return ''
-  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
-  while (str.length % 4 !== 0) {
-    str = str + '=';
-  }
-  return str
-}
-
-function toHex (n) {
-  if (n < 16) return '0' + n.toString(16)
-  return n.toString(16)
-}
-
-function utf8ToBytes (string, units) {
-  units = units || Infinity;
-  var codePoint;
-  var length = string.length;
-  var leadSurrogate = null;
-  var bytes = [];
-
-  for (var i = 0; i < length; ++i) {
-    codePoint = string.charCodeAt(i);
-
-    // is surrogate component
-    if (codePoint > 0xD7FF && codePoint < 0xE000) {
-      // last char was a lead
-      if (!leadSurrogate) {
-        // no lead yet
-        if (codePoint > 0xDBFF) {
-          // unexpected trail
-          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
-          continue
-        } else if (i + 1 === length) {
-          // unpaired lead
-          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
-          continue
-        }
-
-        // valid lead
-        leadSurrogate = codePoint;
-
-        continue
-      }
-
-      // 2 leads in a row
-      if (codePoint < 0xDC00) {
-        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
-        leadSurrogate = codePoint;
-        continue
-      }
-
-      // valid surrogate pair
-      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
-    } else if (leadSurrogate) {
-      // valid bmp char, but last char was a lead
-      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
-    }
-
-    leadSurrogate = null;
-
-    // encode utf8
-    if (codePoint < 0x80) {
-      if ((units -= 1) < 0) break
-      bytes.push(codePoint);
-    } else if (codePoint < 0x800) {
-      if ((units -= 2) < 0) break
-      bytes.push(
-        codePoint >> 0x6 | 0xC0,
-        codePoint & 0x3F | 0x80
-      );
-    } else if (codePoint < 0x10000) {
-      if ((units -= 3) < 0) break
-      bytes.push(
-        codePoint >> 0xC | 0xE0,
-        codePoint >> 0x6 & 0x3F | 0x80,
-        codePoint & 0x3F | 0x80
-      );
-    } else if (codePoint < 0x110000) {
-      if ((units -= 4) < 0) break
-      bytes.push(
-        codePoint >> 0x12 | 0xF0,
-        codePoint >> 0xC & 0x3F | 0x80,
-        codePoint >> 0x6 & 0x3F | 0x80,
-        codePoint & 0x3F | 0x80
-      );
-    } else {
-      throw new Error('Invalid code point')
-    }
-  }
-
-  return bytes
-}
-
-function asciiToBytes (str) {
-  var byteArray = [];
-  for (var i = 0; i < str.length; ++i) {
-    // Node's code seems to be doing this and not & 0x7F..
-    byteArray.push(str.charCodeAt(i) & 0xFF);
-  }
-  return byteArray
-}
-
-function utf16leToBytes (str, units) {
-  var c, hi, lo;
-  var byteArray = [];
-  for (var i = 0; i < str.length; ++i) {
-    if ((units -= 2) < 0) break
-
-    c = str.charCodeAt(i);
-    hi = c >> 8;
-    lo = c % 256;
-    byteArray.push(lo);
-    byteArray.push(hi);
-  }
-
-  return byteArray
-}
-
-function base64ToBytes (str) {
-  return base64Js.toByteArray(base64clean(str))
-}
-
-function blitBuffer (src, dst, offset, length) {
-  for (var i = 0; i < length; ++i) {
-    if ((i + offset >= dst.length) || (i >= src.length)) break
-    dst[i + offset] = src[i];
-  }
-  return i
-}
-
-// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check
-// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166
-function isArrayBuffer (obj) {
-  return obj instanceof ArrayBuffer ||
-    (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&
-      typeof obj.byteLength === 'number')
-}
-
-// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
-function isArrayBufferView (obj) {
-  return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
-}
-
-function numberIsNaN (obj) {
-  return obj !== obj // eslint-disable-line no-self-compare
-}
-});
-
-var buffer_1 = buffer.Buffer;
-
-function parseBodyToType$2(res) {
-  if (res.headers.get('Content-Type') === 'application/json') {
-    return res.json().then(function (data) {
-      return [res, data];
-    });
-  }
-  return res.text().then(function (data) {
-    return [res, data];
-  });
-}
-
-function rpcRequest(fetch) {
-  return function rpcRequestWithFetch(path, body, auth, host, accessToken, options) {
-    var fetchOptions = {
-      method: 'POST',
-      body: body ? JSON.stringify(body) : null
-    };
-    var headers = {};
-    if (body) {
-      headers['Content-Type'] = 'application/json';
-    }
-    var authHeader = '';
-
-    switch (auth) {
-      case 'app':
-        if (!options.clientId || !options.clientSecret) {
-          throw new Error('A client id and secret is required for this function');
-        }
-        authHeader = new buffer_1(options.clientId + ':' + options.clientSecret).toString('base64');
-        headers.Authorization = 'Basic ' + authHeader;
-        break;
-      case 'team':
-      case 'user':
-        headers.Authorization = 'Bearer ' + accessToken;
-        break;
-      case 'noauth':
-        break;
-      default:
-        throw new Error('Unhandled auth type: ' + auth);
-    }
-
-    if (options) {
-      if (options.selectUser) {
-        headers['Dropbox-API-Select-User'] = options.selectUser;
-      }
-      if (options.selectAdmin) {
-        headers['Dropbox-API-Select-Admin'] = options.selectAdmin;
-      }
-      if (options.pathRoot) {
-        headers['Dropbox-API-Path-Root'] = options.pathRoot;
-      }
-    }
-
-    fetchOptions.headers = headers;
-    return fetch(getBaseURL(host) + path, fetchOptions).then(function (res) {
-      return parseBodyToType$2(res);
-    }).then(function (_ref) {
-      var _ref2 = slicedToArray(_ref, 2),
-          res = _ref2[0],
-          data = _ref2[1];
-
-      // maintaining existing API for error codes not equal to 200 range
-      if (!res.ok) {
-        // eslint-disable-next-line no-throw-literal
-        throw {
-          error: data,
-          response: res,
-          status: res.status
-        };
-      }
-
-      return data;
-    });
-  };
-}
-
-/* eslint-disable */
-// Polyfill object.assign for legacy browsers
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
-if (typeof Object.assign !== 'function') {
-  (function () {
-    Object.assign = function (target) {
-      'use strict';
-
-      var output;
-      var index;
-      var source;
-      var nextKey;
-      if (target === undefined || target === null) {
-        throw new TypeError('Cannot convert undefined or null to object');
-      }
-
-      output = Object(target);
-      for (index = 1; index < arguments.length; index++) {
-        source = arguments[index];
-        if (source !== undefined && source !== null) {
-          for (nextKey in source) {
-            if (source.hasOwnProperty(nextKey)) {
-              output[nextKey] = source[nextKey];
-            }
-          }
-        }
-      }
-      return output;
-    };
-  })();
-}
-
-// Polyfill Array.includes for legacy browsers
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
-// https://tc39.github.io/ecma262/#sec-array.prototype.includes
-if (!Array.prototype.includes) {
-  Object.defineProperty(Array.prototype, 'includes', {
-    value: function value(searchElement, fromIndex) {
-
-      if (this == null) {
-        throw new TypeError('"this" is null or not defined');
-      }
-
-      // 1. Let O be ? ToObject(this value).
-      var o = Object(this);
-
-      // 2. Let len be ? ToLength(? Get(O, "length")).
-      var len = o.length >>> 0;
-
-      // 3. If len is 0, return false.
-      if (len === 0) {
-        return false;
-      }
-
-      // 4. Let n be ? ToInteger(fromIndex).
-      //    (If fromIndex is undefined, this step produces the value 0.)
-      var n = fromIndex | 0;
-
-      // 5. If n ≥ 0, then
-      //  a. Let k be n.
-      // 6. Else n < 0,
-      //  a. Let k be len + n.
-      //  b. If k < 0, let k be 0.
-      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
-
-      function sameValueZero(x, y) {
-        return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);
-      }
-
-      // 7. Repeat, while k < len
-      while (k < len) {
-        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
-        // b. If SameValueZero(searchElement, elementK) is true, return true.
-        if (sameValueZero(o[k], searchElement)) {
-          return true;
-        }
-        // c. Increase k by 1.
-        k++;
-      }
-
-      // 8. Return false
-      return false;
-    }
-  });
-}
-/* eslint-enable */
-
-/**
- * @private
- * @class DropboxBase
- * @classdesc The main Dropbox SDK class. This contains the methods that are
- * shared between Dropbox and DropboxTeam classes. It is marked as private so
- * that it doesn't show up in the docs because it is never used directly.
- * @arg {Object} options
- * @arg {Function} [options.fetch] - fetch library for making requests.
- * @arg {String} [options.accessToken] - An access token for making authenticated
- * requests.
- * @arg {String} [options.clientId] - The client id for your app. Used to create
- * authentication URL.
- * @arg {String} [options.clientSecret] - The client secret for your app.
- * @arg {Number} [options.selectUser] - User that the team access token would like
- * to act as.
- * @arg {String} [options.selectAdmin] - Team admin that the team access token would like
- * to act as.
- * @arg {String} [options.pathRoot] - root pass to access other namespaces
- * Use to access team folders for example
- */
-
-function parseBodyToType(res) {
-  var clone = res.clone();
-  return new Promise(function (resolve) {
-    res.json().then(function (data) {
-      return resolve(data);
-    }).catch(function () {
-      return clone.text().then(function (data) {
-        return resolve(data);
-      });
-    });
-  }).then(function (data) {
-    return [res, data];
-  });
-}
-
-var DropboxBase = function () {
-  function DropboxBase(options) {
-    classCallCheck(this, DropboxBase);
-
-    options = options || {};
-    this.accessToken = options.accessToken;
-    this.clientId = options.clientId;
-    this.clientSecret = options.clientSecret;
-    this.selectUser = options.selectUser;
-    this.selectAdmin = options.selectAdmin;
-    this.fetch = options.fetch || fetch;
-    this.pathRoot = options.pathRoot;
-    if (!options.fetch) {
-      console.warn('Global fetch is deprecated and will be unsupported in a future version. Please pass fetch function as option when instantiating dropbox instance: new Dropbox({fetch})');
-    } // eslint-disable-line no-console
-  }
-
-  /**
-   * Set the access token used to authenticate requests to the API.
-   * @arg {String} accessToken - An access token
-   * @returns {undefined}
-   */
-
-
-  createClass(DropboxBase, [{
-    key: 'setAccessToken',
-    value: function setAccessToken(accessToken) {
-      this.accessToken = accessToken;
-    }
-
-    /**
-     * Get the access token
-     * @returns {String} Access token
-     */
-
-  }, {
-    key: 'getAccessToken',
-    value: function getAccessToken() {
-      return this.accessToken;
-    }
-
-    /**
-     * Set the client id, which is used to help gain an access token.
-     * @arg {String} clientId - Your apps client id
-     * @returns {undefined}
-     */
-
-  }, {
-    key: 'setClientId',
-    value: function setClientId(clientId) {
-      this.clientId = clientId;
-    }
-
-    /**
-     * Get the client id
-     * @returns {String} Client id
-     */
-
-  }, {
-    key: 'getClientId',
-    value: function getClientId() {
-      return this.clientId;
-    }
-
-    /**
-     * Set the client secret
-     * @arg {String} clientSecret - Your app's client secret
-     * @returns {undefined}
-     */
-
-  }, {
-    key: 'setClientSecret',
-    value: function setClientSecret(clientSecret) {
-      this.clientSecret = clientSecret;
-    }
-
-    /**
-     * Get the client secret
-     * @returns {String} Client secret
-     */
-
-  }, {
-    key: 'getClientSecret',
-    value: function getClientSecret() {
-      return this.clientSecret;
-    }
-
-    /**
-     * Get a URL that can be used to authenticate users for the Dropbox API.
-     * @arg {String} redirectUri - A URL to redirect the user to after
-     * authenticating. This must be added to your app through the admin interface.
-     * @arg {String} [state] - State that will be returned in the redirect URL to help
-     * prevent cross site scripting attacks.
-     * @arg {String} [authType] - auth type, defaults to 'token', other option is 'code'
-     * @returns {String} Url to send user to for Dropbox API authentication
-     */
-
-  }, {
-    key: 'getAuthenticationUrl',
-    value: function getAuthenticationUrl(redirectUri, state) {
-      var authType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'token';
-
-      var clientId = this.getClientId();
-      var baseUrl = 'https://www.dropbox.com/oauth2/authorize';
-
-      if (!clientId) {
-        throw new Error('A client id is required. You can set the client id using .setClientId().');
-      }
-      if (authType !== 'code' && !redirectUri) {
-        throw new Error('A redirect uri is required.');
-      }
-      if (!['code', 'token'].includes(authType)) {
-        throw new Error('Authorization type must be code or token');
-      }
-
-      var authUrl = void 0;
-      if (authType === 'code') {
-        authUrl = baseUrl + '?response_type=code&client_id=' + clientId;
-      } else {
-        authUrl = baseUrl + '?response_type=token&client_id=' + clientId;
-      }
-
-      if (redirectUri) {
-        authUrl += '&redirect_uri=' + redirectUri;
-      }
-      if (state) {
-        authUrl += '&state=' + state;
-      }
-      return authUrl;
-    }
-
-    /**
-     * Get an OAuth2 access token from an OAuth2 Code.
-     * @arg {String} redirectUri - A URL to redirect the user to after
-     * authenticating. This must be added to your app through the admin interface.
-     * @arg {String} code - An OAuth2 code.
-    */
-
-  }, {
-    key: 'getAccessTokenFromCode',
-    value: function getAccessTokenFromCode(redirectUri, code) {
-      var clientId = this.getClientId();
-      var clientSecret = this.getClientSecret();
-
-      if (!clientId) {
-        throw new Error('A client id is required. You can set the client id using .setClientId().');
-      }
-      if (!clientSecret) {
-        throw new Error('A client secret is required. You can set the client id using .setClientSecret().');
-      }
-      var path = 'https://api.dropboxapi.com/oauth2/token?code=' + code + '&grant_type=authorization_code&redirect_uri=' + redirectUri + '&client_id=' + clientId + '&client_secret=' + clientSecret;
-
-      var fetchOptions = {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/x-www-form-urlencoded'
-        }
-      };
-
-      return this.fetch(path, fetchOptions).then(function (res) {
-        return parseBodyToType(res);
-      }).then(function (_ref) {
-        var _ref2 = slicedToArray(_ref, 2),
-            res = _ref2[0],
-            data = _ref2[1];
-
-        // maintaining existing API for error codes not equal to 200 range
-        if (!res.ok) {
-          // eslint-disable-next-line no-throw-literal
-          throw {
-            error: data,
-            response: res,
-            status: res.status
-          };
-        }
-        return data.access_token;
-      });
-    }
-
-    /**
-     * Called when the authentication succeed
-     * @callback successCallback
-     * @param {string} access_token The application's access token
-     */
-
-    /**
-     * Called when the authentication failed.
-     * @callback errorCallback
-     */
-
-    /**
-     * An authentication process that works with cordova applications.
-     * @param {successCallback} successCallback
-     * @param {errorCallback} errorCallback
-     */
-
-  }, {
-    key: 'authenticateWithCordova',
-    value: function authenticateWithCordova(successCallback, errorCallback) {
-      var redirectUrl = 'https://www.dropbox.com/1/oauth2/redirect_receiver';
-      var url = this.getAuthenticationUrl(redirectUrl);
-
-      var removed = false;
-      var browser = window.open(url, '_blank');
-
-      function onLoadError(event) {
-        if (event.code !== -999) {
-          // Workaround to fix wrong behavior on cordova-plugin-inappbrowser
-          // Try to avoid a browser crash on browser.close().
-          window.setTimeout(function () {
-            browser.close();
-          }, 10);
-          errorCallback();
-        }
-      }
-
-      function onLoadStop(event) {
-        var errorLabel = '&error=';
-        var errorIndex = event.url.indexOf(errorLabel);
-
-        if (errorIndex > -1) {
-          // Try to avoid a browser crash on browser.close().
-          window.setTimeout(function () {
-            browser.close();
-          }, 10);
-          errorCallback();
-        } else {
-          var tokenLabel = '#access_token=';
-          var tokenIndex = event.url.indexOf(tokenLabel);
-          var tokenTypeIndex = event.url.indexOf('&token_type=');
-          if (tokenIndex > -1) {
-            tokenIndex += tokenLabel.length;
-            // Try to avoid a browser crash on browser.close().
-            window.setTimeout(function () {
-              browser.close();
-            }, 10);
-
-            var accessToken = event.url.substring(tokenIndex, tokenTypeIndex);
-            successCallback(accessToken);
-          }
-        }
-      }
-
-      function onExit() {
-        if (removed) {
-          return;
-        }
-        browser.removeEventListener('loaderror', onLoadError);
-        browser.removeEventListener('loadstop', onLoadStop);
-        browser.removeEventListener('exit', onExit);
-        removed = true;
-      }
-
-      browser.addEventListener('loaderror', onLoadError);
-      browser.addEventListener('loadstop', onLoadStop);
-      browser.addEventListener('exit', onExit);
-    }
-  }, {
-    key: 'request',
-    value: function request(path, args, auth, host, style) {
-      var request = null;
-      switch (style) {
-        case RPC:
-          request = this.getRpcRequest();
-          break;
-        case DOWNLOAD:
-          request = this.getDownloadRequest();
-          break;
-        case UPLOAD:
-          request = this.getUploadRequest();
-          break;
-        default:
-          throw new Error('Invalid request style: ' + style);
-      }
-      var options = {
-        selectUser: this.selectUser,
-        selectAdmin: this.selectAdmin,
-        clientId: this.getClientId(),
-        clientSecret: this.getClientSecret(),
-        pathRoot: this.pathRoot
-      };
-      return request(path, args, auth, host, this.getAccessToken(), options);
-    }
-  }, {
-    key: 'setRpcRequest',
-    value: function setRpcRequest(newRpcRequest) {
-      this.rpcRequest = newRpcRequest;
-    }
-  }, {
-    key: 'getRpcRequest',
-    value: function getRpcRequest() {
-      if (this.rpcRequest === undefined) {
-        this.rpcRequest = rpcRequest(this.fetch);
-      }
-      return this.rpcRequest;
-    }
-  }, {
-    key: 'setDownloadRequest',
-    value: function setDownloadRequest(newDownloadRequest) {
-      this.downloadRequest = newDownloadRequest;
-    }
-  }, {
-    key: 'getDownloadRequest',
-    value: function getDownloadRequest() {
-      if (this.downloadRequest === undefined) {
-        this.downloadRequest = downloadRequest(this.fetch);
-      }
-      return this.downloadRequest;
-    }
-  }, {
-    key: 'setUploadRequest',
-    value: function setUploadRequest(newUploadRequest) {
-      this.uploadRequest = newUploadRequest;
-    }
-  }, {
-    key: 'getUploadRequest',
-    value: function getUploadRequest() {
-      if (this.uploadRequest === undefined) {
-        this.uploadRequest = uploadRequest(this.fetch);
-      }
-      return this.uploadRequest;
-    }
-  }]);
-  return DropboxBase;
-}();
-
-/**
- * @class Dropbox
- * @extends DropboxBase
- * @classdesc The Dropbox SDK class that provides methods to read, write and
- * create files or folders in a user's Dropbox.
- * @arg {Object} options
- * @arg {Function} [options.fetch] - fetch library for making requests.
- * @arg {String} [options.accessToken] - An access token for making authenticated
- * requests.
- * @arg {String} [options.clientId] - The client id for your app. Used to create
- * authentication URL.
- * @arg {String} [options.selectUser] - Select user is only used by DropboxTeam.
- * It specifies which user the team access token should be acting as.
- * @arg {String} [options.pathRoot] - root pass to access other namespaces
- * Use to access team folders for example
- */
-var Dropbox = function (_DropboxBase) {
-  inherits(Dropbox, _DropboxBase);
-
-  function Dropbox(options) {
-    classCallCheck(this, Dropbox);
-
-    var _this = possibleConstructorReturn(this, (Dropbox.__proto__ || Object.getPrototypeOf(Dropbox)).call(this, options));
-
-    Object.assign(_this, routes);
-    return _this;
-  }
-
-  createClass(Dropbox, [{
-    key: 'filesGetSharedLinkFile',
-    value: function filesGetSharedLinkFile(arg) {
-      return this.request('sharing/get_shared_link_file', arg, 'api', 'download');
-    }
-  }]);
-  return Dropbox;
-}(DropboxBase);
-
-
-
-var dropbox = Object.freeze({
-	Dropbox: Dropbox
-});
-
-// Auto-generated by Stone, do not modify.
-var routes$1 = {};
-
-/**
- * List all device sessions of a team's member.
- * @function DropboxTeam#teamDevicesListMemberDevices
- * @arg {TeamListMemberDevicesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamDevicesListMemberDevices = function (arg) {
-  return this.request('team/devices/list_member_devices', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List all device sessions of a team. Permission : Team member file access.
- * @function DropboxTeam#teamDevicesListMembersDevices
- * @arg {TeamListMembersDevicesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamDevicesListMembersDevices = function (arg) {
-  return this.request('team/devices/list_members_devices', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List all device sessions of a team. Permission : Team member file access.
- * @function DropboxTeam#teamDevicesListTeamDevices
- * @deprecated
- * @arg {TeamListTeamDevicesArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamDevicesListTeamDevices = function (arg) {
-  return this.request('team/devices/list_team_devices', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Revoke a device session of a team's member.
- * @function DropboxTeam#teamDevicesRevokeDeviceSession
- * @arg {TeamRevokeDeviceSessionArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamDevicesRevokeDeviceSession = function (arg) {
-  return this.request('team/devices/revoke_device_session', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Revoke a list of device sessions of team members.
- * @function DropboxTeam#teamDevicesRevokeDeviceSessionBatch
- * @arg {TeamRevokeDeviceSessionBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamDevicesRevokeDeviceSessionBatch = function (arg) {
-  return this.request('team/devices/revoke_device_session_batch', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Get the values for one or more featues. This route allows you to check your
- * account's capability for what feature you can access or what value you have
- * for certain features. Permission : Team information.
- * @function DropboxTeam#teamFeaturesGetValues
- * @arg {TeamFeaturesGetValuesBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamFeaturesGetValues = function (arg) {
-  return this.request('team/features/get_values', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves information about a team.
- * @function DropboxTeam#teamGetInfo
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGetInfo = function (arg) {
-  return this.request('team/get_info', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Creates a new, empty group, with a requested name. Permission : Team member
- * management.
- * @function DropboxTeam#teamGroupsCreate
- * @arg {TeamGroupCreateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsCreate = function (arg) {
-  return this.request('team/groups/create', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Deletes a group. The group is deleted immediately. However the revoking of
- * group-owned resources may take additional time. Use the groups/job_status/get
- * to determine whether this process has completed. Permission : Team member
- * management.
- * @function DropboxTeam#teamGroupsDelete
- * @arg {TeamGroupSelector} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsDelete = function (arg) {
-  return this.request('team/groups/delete', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves information about one or more groups. Note that the optional field
- * GroupFullInfo.members is not returned for system-managed groups. Permission :
- * Team Information.
- * @function DropboxTeam#teamGroupsGetInfo
- * @arg {TeamGroupsSelector} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsGetInfo = function (arg) {
-  return this.request('team/groups/get_info', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once an async_job_id is returned from groups/delete, groups/members/add , or
- * groups/members/remove use this method to poll the status of granting/revoking
- * group members' access to group-owned resources. Permission : Team member
- * management.
- * @function DropboxTeam#teamGroupsJobStatusGet
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsJobStatusGet = function (arg) {
-  return this.request('team/groups/job_status/get', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Lists groups on a team. Permission : Team Information.
- * @function DropboxTeam#teamGroupsList
- * @arg {TeamGroupsListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsList = function (arg) {
-  return this.request('team/groups/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from groups/list, use this to paginate
- * through all groups. Permission : Team Information.
- * @function DropboxTeam#teamGroupsListContinue
- * @arg {TeamGroupsListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsListContinue = function (arg) {
-  return this.request('team/groups/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Adds members to a group. The members are added immediately. However the
- * granting of group-owned resources may take additional time. Use the
- * groups/job_status/get to determine whether this process has completed.
- * Permission : Team member management.
- * @function DropboxTeam#teamGroupsMembersAdd
- * @arg {TeamGroupMembersAddArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsMembersAdd = function (arg) {
-  return this.request('team/groups/members/add', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Lists members of a group. Permission : Team Information.
- * @function DropboxTeam#teamGroupsMembersList
- * @arg {TeamGroupsMembersListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsMembersList = function (arg) {
-  return this.request('team/groups/members/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from groups/members/list, use this to
- * paginate through all members of the group. Permission : Team information.
- * @function DropboxTeam#teamGroupsMembersListContinue
- * @arg {TeamGroupsMembersListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsMembersListContinue = function (arg) {
-  return this.request('team/groups/members/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Removes members from a group. The members are removed immediately. However
- * the revoking of group-owned resources may take additional time. Use the
- * groups/job_status/get to determine whether this process has completed. This
- * method permits removing the only owner of a group, even in cases where this
- * is not possible via the web client. Permission : Team member management.
- * @function DropboxTeam#teamGroupsMembersRemove
- * @arg {TeamGroupMembersRemoveArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsMembersRemove = function (arg) {
-  return this.request('team/groups/members/remove', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Sets a member's access type in a group. Permission : Team member management.
- * @function DropboxTeam#teamGroupsMembersSetAccessType
- * @arg {TeamGroupMembersSetAccessTypeArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsMembersSetAccessType = function (arg) {
-  return this.request('team/groups/members/set_access_type', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Updates a group's name and/or external ID. Permission : Team member
- * management.
- * @function DropboxTeam#teamGroupsUpdate
- * @arg {TeamGroupUpdateArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamGroupsUpdate = function (arg) {
-  return this.request('team/groups/update', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List all linked applications of the team member. Note, this endpoint does not
- * list any team-linked applications.
- * @function DropboxTeam#teamLinkedAppsListMemberLinkedApps
- * @arg {TeamListMemberAppsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamLinkedAppsListMemberLinkedApps = function (arg) {
-  return this.request('team/linked_apps/list_member_linked_apps', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List all applications linked to the team members' accounts. Note, this
- * endpoint does not list any team-linked applications.
- * @function DropboxTeam#teamLinkedAppsListMembersLinkedApps
- * @arg {TeamListMembersAppsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamLinkedAppsListMembersLinkedApps = function (arg) {
-  return this.request('team/linked_apps/list_members_linked_apps', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List all applications linked to the team members' accounts. Note, this
- * endpoint doesn't list any team-linked applications.
- * @function DropboxTeam#teamLinkedAppsListTeamLinkedApps
- * @deprecated
- * @arg {TeamListTeamAppsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamLinkedAppsListTeamLinkedApps = function (arg) {
-  return this.request('team/linked_apps/list_team_linked_apps', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Revoke a linked application of the team member.
- * @function DropboxTeam#teamLinkedAppsRevokeLinkedApp
- * @arg {TeamRevokeLinkedApiAppArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamLinkedAppsRevokeLinkedApp = function (arg) {
-  return this.request('team/linked_apps/revoke_linked_app', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Revoke a list of linked applications of the team members.
- * @function DropboxTeam#teamLinkedAppsRevokeLinkedAppBatch
- * @arg {TeamRevokeLinkedApiAppBatchArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamLinkedAppsRevokeLinkedAppBatch = function (arg) {
-  return this.request('team/linked_apps/revoke_linked_app_batch', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Add users to member space limits excluded users list.
- * @function DropboxTeam#teamMemberSpaceLimitsExcludedUsersAdd
- * @arg {TeamExcludedUsersUpdateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMemberSpaceLimitsExcludedUsersAdd = function (arg) {
-  return this.request('team/member_space_limits/excluded_users/add', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * List member space limits excluded users.
- * @function DropboxTeam#teamMemberSpaceLimitsExcludedUsersList
- * @arg {TeamExcludedUsersListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMemberSpaceLimitsExcludedUsersList = function (arg) {
-  return this.request('team/member_space_limits/excluded_users/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Continue listing member space limits excluded users.
- * @function DropboxTeam#teamMemberSpaceLimitsExcludedUsersListContinue
- * @arg {TeamExcludedUsersListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMemberSpaceLimitsExcludedUsersListContinue = function (arg) {
-  return this.request('team/member_space_limits/excluded_users/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Remove users from member space limits excluded users list.
- * @function DropboxTeam#teamMemberSpaceLimitsExcludedUsersRemove
- * @arg {TeamExcludedUsersUpdateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMemberSpaceLimitsExcludedUsersRemove = function (arg) {
-  return this.request('team/member_space_limits/excluded_users/remove', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Get users custom quota. Returns none as the custom quota if none was set. A
- * maximum of 1000 members can be specified in a single call.
- * @function DropboxTeam#teamMemberSpaceLimitsGetCustomQuota
- * @arg {TeamCustomQuotaUsersArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes$1.teamMemberSpaceLimitsGetCustomQuota = function (arg) {
-  return this.request('team/member_space_limits/get_custom_quota', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Remove users custom quota. A maximum of 1000 members can be specified in a
- * single call.
- * @function DropboxTeam#teamMemberSpaceLimitsRemoveCustomQuota
- * @arg {TeamCustomQuotaUsersArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes$1.teamMemberSpaceLimitsRemoveCustomQuota = function (arg) {
-  return this.request('team/member_space_limits/remove_custom_quota', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Set users custom quota. Custom quota has to be at least 15GB. A maximum of
- * 1000 members can be specified in a single call.
- * @function DropboxTeam#teamMemberSpaceLimitsSetCustomQuota
- * @arg {TeamSetCustomQuotaArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes$1.teamMemberSpaceLimitsSetCustomQuota = function (arg) {
-  return this.request('team/member_space_limits/set_custom_quota', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Adds members to a team. Permission : Team member management A maximum of 20
- * members can be specified in a single call. If no Dropbox account exists with
- * the email address specified, a new Dropbox account will be created with the
- * given email address, and that account will be invited to the team. If a
- * personal Dropbox account exists with the email address specified in the call,
- * this call will create a placeholder Dropbox account for the user on the team
- * and send an email inviting the user to migrate their existing personal
- * account onto the team. Team member management apps are required to set an
- * initial given_name and surname for a user to use in the team invitation and
- * for 'Perform as team member' actions taken on the user before they become
- * 'active'.
- * @function DropboxTeam#teamMembersAdd
- * @arg {TeamMembersAddArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersAdd = function (arg) {
-  return this.request('team/members/add', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once an async_job_id is returned from members/add , use this to poll the
- * status of the asynchronous request. Permission : Team member management.
- * @function DropboxTeam#teamMembersAddJobStatusGet
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersAddJobStatusGet = function (arg) {
-  return this.request('team/members/add/job_status/get', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Returns information about multiple team members. Permission : Team
- * information This endpoint will return MembersGetInfoItem.id_not_found, for
- * IDs (or emails) that cannot be matched to a valid team member.
- * @function DropboxTeam#teamMembersGetInfo
- * @arg {TeamMembersGetInfoArgs} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersGetInfo = function (arg) {
-  return this.request('team/members/get_info', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Lists members of a team. Permission : Team information.
- * @function DropboxTeam#teamMembersList
- * @arg {TeamMembersListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersList = function (arg) {
-  return this.request('team/members/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from members/list, use this to paginate
- * through all team members. Permission : Team information.
- * @function DropboxTeam#teamMembersListContinue
- * @arg {TeamMembersListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersListContinue = function (arg) {
-  return this.request('team/members/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Moves removed member's files to a different member. This endpoint initiates
- * an asynchronous job. To obtain the final result of the job, the client should
- * periodically poll members/move_former_member_files/job_status/check.
- * Permission : Team member management.
- * @function DropboxTeam#teamMembersMoveFormerMemberFiles
- * @arg {TeamMembersDataTransferArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersMoveFormerMemberFiles = function (arg) {
-  return this.request('team/members/move_former_member_files', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once an async_job_id is returned from members/move_former_member_files , use
- * this to poll the status of the asynchronous request. Permission : Team member
- * management.
- * @function DropboxTeam#teamMembersMoveFormerMemberFilesJobStatusCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersMoveFormerMemberFilesJobStatusCheck = function (arg) {
-  return this.request('team/members/move_former_member_files/job_status/check', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Recover a deleted member. Permission : Team member management Exactly one of
- * team_member_id, email, or external_id must be provided to identify the user
- * account.
- * @function DropboxTeam#teamMembersRecover
- * @arg {TeamMembersRecoverArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersRecover = function (arg) {
-  return this.request('team/members/recover', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Removes a member from a team. Permission : Team member management Exactly one
- * of team_member_id, email, or external_id must be provided to identify the
- * user account. Accounts can be recovered via members/recover for a 7 day
- * period or until the account has been permanently deleted or transferred to
- * another account (whichever comes first). Calling members/add while a user is
- * still recoverable on your team will return with
- * MemberAddResult.user_already_on_team. Accounts can have their files
- * transferred via the admin console for a limited time, based on the version
- * history length associated with the team (120 days for most teams). This
- * endpoint may initiate an asynchronous job. To obtain the final result of the
- * job, the client should periodically poll members/remove/job_status/get.
- * @function DropboxTeam#teamMembersRemove
- * @arg {TeamMembersRemoveArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersRemove = function (arg) {
-  return this.request('team/members/remove', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once an async_job_id is returned from members/remove , use this to poll the
- * status of the asynchronous request. Permission : Team member management.
- * @function DropboxTeam#teamMembersRemoveJobStatusGet
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersRemoveJobStatusGet = function (arg) {
-  return this.request('team/members/remove/job_status/get', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Sends welcome email to pending team member. Permission : Team member
- * management Exactly one of team_member_id, email, or external_id must be
- * provided to identify the user account. No-op if team member is not pending.
- * @function DropboxTeam#teamMembersSendWelcomeEmail
- * @arg {TeamUserSelectorArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersSendWelcomeEmail = function (arg) {
-  return this.request('team/members/send_welcome_email', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Updates a team member's permissions. Permission : Team member management.
- * @function DropboxTeam#teamMembersSetAdminPermissions
- * @arg {TeamMembersSetPermissionsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersSetAdminPermissions = function (arg) {
-  return this.request('team/members/set_admin_permissions', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Updates a team member's profile. Permission : Team member management.
- * @function DropboxTeam#teamMembersSetProfile
- * @arg {TeamMembersSetProfileArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersSetProfile = function (arg) {
-  return this.request('team/members/set_profile', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Suspend a member from a team. Permission : Team member management Exactly one
- * of team_member_id, email, or external_id must be provided to identify the
- * user account.
- * @function DropboxTeam#teamMembersSuspend
- * @arg {TeamMembersDeactivateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersSuspend = function (arg) {
-  return this.request('team/members/suspend', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Unsuspend a member from a team. Permission : Team member management Exactly
- * one of team_member_id, email, or external_id must be provided to identify the
- * user account.
- * @function DropboxTeam#teamMembersUnsuspend
- * @arg {TeamMembersUnsuspendArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamMembersUnsuspend = function (arg) {
-  return this.request('team/members/unsuspend', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Returns a list of all team-accessible namespaces. This list includes team
- * folders, shared folders containing team members, team members' home
- * namespaces, and team members' app folders. Home namespaces and app folders
- * are always owned by this team or members of the team, but shared folders may
- * be owned by other users or other teams. Duplicates may occur in the list.
- * @function DropboxTeam#teamNamespacesList
- * @arg {TeamTeamNamespacesListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamNamespacesList = function (arg) {
-  return this.request('team/namespaces/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from namespaces/list, use this to paginate
- * through all team-accessible namespaces. Duplicates may occur in the list.
- * @function DropboxTeam#teamNamespacesListContinue
- * @arg {TeamTeamNamespacesListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamNamespacesListContinue = function (arg) {
-  return this.request('team/namespaces/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permission : Team member file access.
- * @function DropboxTeam#teamPropertiesTemplateAdd
- * @deprecated
- * @arg {FilePropertiesAddTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamPropertiesTemplateAdd = function (arg) {
-  return this.request('team/properties/template/add', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permission : Team member file access.
- * @function DropboxTeam#teamPropertiesTemplateGet
- * @deprecated
- * @arg {FilePropertiesGetTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamPropertiesTemplateGet = function (arg) {
-  return this.request('team/properties/template/get', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permission : Team member file access.
- * @function DropboxTeam#teamPropertiesTemplateList
- * @deprecated
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamPropertiesTemplateList = function (arg) {
-  return this.request('team/properties/template/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permission : Team member file access.
- * @function DropboxTeam#teamPropertiesTemplateUpdate
- * @deprecated
- * @arg {FilePropertiesUpdateTemplateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamPropertiesTemplateUpdate = function (arg) {
-  return this.request('team/properties/template/update', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves reporting data about a team's user activity.
- * @function DropboxTeam#teamReportsGetActivity
- * @arg {TeamDateRange} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamReportsGetActivity = function (arg) {
-  return this.request('team/reports/get_activity', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves reporting data about a team's linked devices.
- * @function DropboxTeam#teamReportsGetDevices
- * @arg {TeamDateRange} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamReportsGetDevices = function (arg) {
-  return this.request('team/reports/get_devices', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves reporting data about a team's membership.
- * @function DropboxTeam#teamReportsGetMembership
- * @arg {TeamDateRange} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamReportsGetMembership = function (arg) {
-  return this.request('team/reports/get_membership', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves reporting data about a team's storage usage.
- * @function DropboxTeam#teamReportsGetStorage
- * @arg {TeamDateRange} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamReportsGetStorage = function (arg) {
-  return this.request('team/reports/get_storage', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Sets an archived team folder's status to active. Permission : Team member
- * file access.
- * @function DropboxTeam#teamTeamFolderActivate
- * @arg {TeamTeamFolderIdArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderActivate = function (arg) {
-  return this.request('team/team_folder/activate', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Sets an active team folder's status to archived and removes all folder and
- * file members. Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderArchive
- * @arg {TeamTeamFolderArchiveArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderArchive = function (arg) {
-  return this.request('team/team_folder/archive', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Returns the status of an asynchronous job for archiving a team folder.
- * Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderArchiveCheck
- * @arg {AsyncPollArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderArchiveCheck = function (arg) {
-  return this.request('team/team_folder/archive/check', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Creates a new, active, team folder with no members. Permission : Team member
- * file access.
- * @function DropboxTeam#teamTeamFolderCreate
- * @arg {TeamTeamFolderCreateArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderCreate = function (arg) {
-  return this.request('team/team_folder/create', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Retrieves metadata for team folders. Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderGetInfo
- * @arg {TeamTeamFolderIdListArg} arg - The request parameters.
- * @returns {Promise., Error.>}
- */
-routes$1.teamTeamFolderGetInfo = function (arg) {
-  return this.request('team/team_folder/get_info', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Lists all team folders. Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderList
- * @arg {TeamTeamFolderListArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderList = function (arg) {
-  return this.request('team/team_folder/list', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Once a cursor has been retrieved from team_folder/list, use this to paginate
- * through all team folders. Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderListContinue
- * @arg {TeamTeamFolderListContinueArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderListContinue = function (arg) {
-  return this.request('team/team_folder/list/continue', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Permanently deletes an archived team folder. Permission : Team member file
- * access.
- * @function DropboxTeam#teamTeamFolderPermanentlyDelete
- * @arg {TeamTeamFolderIdArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderPermanentlyDelete = function (arg) {
-  return this.request('team/team_folder/permanently_delete', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Changes an active team folder's name. Permission : Team member file access.
- * @function DropboxTeam#teamTeamFolderRename
- * @arg {TeamTeamFolderRenameArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderRename = function (arg) {
-  return this.request('team/team_folder/rename', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Updates the sync settings on a team folder or its contents.  Use of this
- * endpoint requires that the team has team selective sync enabled.
- * @function DropboxTeam#teamTeamFolderUpdateSyncSettings
- * @arg {TeamTeamFolderUpdateSyncSettingsArg} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTeamFolderUpdateSyncSettings = function (arg) {
-  return this.request('team/team_folder/update_sync_settings', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * Returns the member profile of the admin who generated the team access token
- * used to make the call.
- * @function DropboxTeam#teamTokenGetAuthenticatedAdmin
- * @arg {void} arg - The request parameters.
- * @returns {Promise.>}
- */
-routes$1.teamTokenGetAuthenticatedAdmin = function (arg) {
-  return this.request('team/token/get_authenticated_admin', arg, 'team', 'api', 'rpc');
-};
-
-/**
- * @class DropboxTeam
- * @extends DropboxBase
- * @classdesc The Dropbox SDK class that provides access to team endpoints.
- * @arg {Object} options
- * @arg {String} [options.accessToken] - An access token for making authenticated
- * requests.
- * @arg {String} [options.clientId] - The client id for your app. Used to create
- * authentication URL.
- */
-var DropboxTeam = function (_DropboxBase) {
-  inherits(DropboxTeam, _DropboxBase);
-
-  function DropboxTeam(options) {
-    classCallCheck(this, DropboxTeam);
-
-    var _this = possibleConstructorReturn(this, (DropboxTeam.__proto__ || Object.getPrototypeOf(DropboxTeam)).call(this, options));
-
-    Object.assign(_this, routes$1);
-    return _this;
-  }
-
-  /**
-   * Returns an instance of Dropbox that can make calls to user api endpoints on
-   * behalf of the passed user id, using the team access token.
-   * @arg {String} userId - The user id to use the Dropbox class as
-   * @returns {Dropbox} An instance of Dropbox used to make calls to user api
-   * endpoints
-   */
-
-
-  createClass(DropboxTeam, [{
-    key: 'actAsUser',
-    value: function actAsUser(userId) {
-      return new Dropbox({
-        accessToken: this.accessToken,
-        clientId: this.clientId,
-        selectUser: userId
-      });
-    }
-  }]);
-  return DropboxTeam;
-}(DropboxBase);
-
-
-
-var dropboxTeam = Object.freeze({
-	DropboxTeam: DropboxTeam
-});
-
-var src = {
-  Dropbox: dropbox.Dropbox,
-  DropboxTeam: dropboxTeam.DropboxTeam
-};
-
-return src;
-
-})));
-//# sourceMappingURL=Dropbox-sdk.js.map
diff --git a/vendor/zipjs-browserify/LICENSE b/vendor/zipjs-browserify/LICENSE
deleted file mode 100644
index 2c3ff4a1..00000000
--- a/vendor/zipjs-browserify/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- Copyright (c) 2013 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
diff --git a/vendor/zipjs-browserify/README.md b/vendor/zipjs-browserify/README.md
deleted file mode 100644
index d3b78f24..00000000
--- a/vendor/zipjs-browserify/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## zipjs-browserify v1.0.1
-
-zipjs installed via npm - source repo:
-
-- https://github.com/juliangruber/zipjs-browserify/tree/v1.0.1/vendor/deflate.js
-- https://github.com/juliangruber/zipjs-browserify/tree/v1.0.1/vendor/inflate.js
-- https://github.com/juliangruber/zipjs-browserify/tree/v1.0.1/vendor/z-worker.js
-- https://github.com/juliangruber/zipjs-browserify/tree/v1.0.1/vendor/zip.js
diff --git a/vendor/zipjs-browserify/deflate.js b/vendor/zipjs-browserify/deflate.js
deleted file mode 100644
index 8ac3c0af..00000000
--- a/vendor/zipjs-browserify/deflate.js
+++ /dev/null
@@ -1,2060 +0,0 @@
-/*
- Copyright (c) 2013 Gildas Lormeau. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright 
- notice, this list of conditions and the following disclaimer in 
- the documentation and/or other materials provided with the distribution.
-
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
- * JZlib is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-(function(global) {
-	"use strict";
-
-	// Global
-
-	var MAX_BITS = 15;
-	var D_CODES = 30;
-	var BL_CODES = 19;
-
-	var LENGTH_CODES = 29;
-	var LITERALS = 256;
-	var L_CODES = (LITERALS + 1 + LENGTH_CODES);
-	var HEAP_SIZE = (2 * L_CODES + 1);
-
-	var END_BLOCK = 256;
-
-	// Bit length codes must not exceed MAX_BL_BITS bits
-	var MAX_BL_BITS = 7;
-
-	// repeat previous bit length 3-6 times (2 bits of repeat count)
-	var REP_3_6 = 16;
-
-	// repeat a zero length 3-10 times (3 bits of repeat count)
-	var REPZ_3_10 = 17;
-
-	// repeat a zero length 11-138 times (7 bits of repeat count)
-	var REPZ_11_138 = 18;
-
-	// The lengths of the bit length codes are sent in order of decreasing
-	// probability, to avoid transmitting the lengths for unused bit
-	// length codes.
-
-	var Buf_size = 8 * 2;
-
-	// JZlib version : "1.0.2"
-	var Z_DEFAULT_COMPRESSION = -1;
-
-	// compression strategy
-	var Z_FILTERED = 1;
-	var Z_HUFFMAN_ONLY = 2;
-	var Z_DEFAULT_STRATEGY = 0;
-
-	var Z_NO_FLUSH = 0;
-	var Z_PARTIAL_FLUSH = 1;
-	var Z_FULL_FLUSH = 3;
-	var Z_FINISH = 4;
-
-	var Z_OK = 0;
-	var Z_STREAM_END = 1;
-	var Z_NEED_DICT = 2;
-	var Z_STREAM_ERROR = -2;
-	var Z_DATA_ERROR = -3;
-	var Z_BUF_ERROR = -5;
-
-	// Tree
-
-	// see definition of array dist_code below
-	var _dist_code = [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-			10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-			12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-			13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-			14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-			14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-			15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19,
-			20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-			24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-			26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-			27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-			28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29,
-			29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-			29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 ];
-
-	function Tree() {
-		var that = this;
-
-		// dyn_tree; // the dynamic tree
-		// max_code; // largest code with non zero frequency
-		// stat_desc; // the corresponding static tree
-
-		// Compute the optimal bit lengths for a tree and update the total bit
-		// length
-		// for the current block.
-		// IN assertion: the fields freq and dad are set, heap[heap_max] and
-		// above are the tree nodes sorted by increasing frequency.
-		// OUT assertions: the field len is set to the optimal bit length, the
-		// array bl_count contains the frequencies for each bit length.
-		// The length opt_len is updated; static_len is also updated if stree is
-		// not null.
-		function gen_bitlen(s) {
-			var tree = that.dyn_tree;
-			var stree = that.stat_desc.static_tree;
-			var extra = that.stat_desc.extra_bits;
-			var base = that.stat_desc.extra_base;
-			var max_length = that.stat_desc.max_length;
-			var h; // heap index
-			var n, m; // iterate over the tree elements
-			var bits; // bit length
-			var xbits; // extra bits
-			var f; // frequency
-			var overflow = 0; // number of elements with bit length too large
-
-			for (bits = 0; bits <= MAX_BITS; bits++)
-				s.bl_count[bits] = 0;
-
-			// In a first pass, compute the optimal bit lengths (which may
-			// overflow in the case of the bit length tree).
-			tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap
-
-			for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
-				n = s.heap[h];
-				bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;
-				if (bits > max_length) {
-					bits = max_length;
-					overflow++;
-				}
-				tree[n * 2 + 1] = bits;
-				// We overwrite tree[n*2+1] which is no longer needed
-
-				if (n > that.max_code)
-					continue; // not a leaf node
-
-				s.bl_count[bits]++;
-				xbits = 0;
-				if (n >= base)
-					xbits = extra[n - base];
-				f = tree[n * 2];
-				s.opt_len += f * (bits + xbits);
-				if (stree)
-					s.static_len += f * (stree[n * 2 + 1] + xbits);
-			}
-			if (overflow === 0)
-				return;
-
-			// This happens for example on obj2 and pic of the Calgary corpus
-			// Find the first bit length which could increase:
-			do {
-				bits = max_length - 1;
-				while (s.bl_count[bits] === 0)
-					bits--;
-				s.bl_count[bits]--; // move one leaf down the tree
-				s.bl_count[bits + 1] += 2; // move one overflow item as its brother
-				s.bl_count[max_length]--;
-				// The brother of the overflow item also moves one step up,
-				// but this does not affect bl_count[max_length]
-				overflow -= 2;
-			} while (overflow > 0);
-
-			for (bits = max_length; bits !== 0; bits--) {
-				n = s.bl_count[bits];
-				while (n !== 0) {
-					m = s.heap[--h];
-					if (m > that.max_code)
-						continue;
-					if (tree[m * 2 + 1] != bits) {
-						s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];
-						tree[m * 2 + 1] = bits;
-					}
-					n--;
-				}
-			}
-		}
-
-		// Reverse the first len bits of a code, using straightforward code (a
-		// faster
-		// method would use a table)
-		// IN assertion: 1 <= len <= 15
-		function bi_reverse(code, // the value to invert
-		len // its bit length
-		) {
-			var res = 0;
-			do {
-				res |= code & 1;
-				code >>>= 1;
-				res <<= 1;
-			} while (--len > 0);
-			return res >>> 1;
-		}
-
-		// Generate the codes for a given tree and bit counts (which need not be
-		// optimal).
-		// IN assertion: the array bl_count contains the bit length statistics for
-		// the given tree and the field len is set for all tree elements.
-		// OUT assertion: the field code is set for all tree elements of non
-		// zero code length.
-		function gen_codes(tree, // the tree to decorate
-		max_code, // largest code with non zero frequency
-		bl_count // number of codes at each bit length
-		) {
-			var next_code = []; // next code value for each
-			// bit length
-			var code = 0; // running code value
-			var bits; // bit index
-			var n; // code index
-			var len;
-
-			// The distribution counts are first used to generate the code values
-			// without bit reversal.
-			for (bits = 1; bits <= MAX_BITS; bits++) {
-				next_code[bits] = code = ((code + bl_count[bits - 1]) << 1);
-			}
-
-			// Check that the bit counts in bl_count are consistent. The last code
-			// must be all ones.
-			// Assert (code + bl_count[MAX_BITS]-1 == (1<= 1; n--)
-				s.pqdownheap(tree, n);
-
-			// Construct the Huffman tree by repeatedly combining the least two
-			// frequent nodes.
-
-			node = elems; // next internal node of the tree
-			do {
-				// n = node of least frequency
-				n = s.heap[1];
-				s.heap[1] = s.heap[s.heap_len--];
-				s.pqdownheap(tree, 1);
-				m = s.heap[1]; // m = node of next least frequency
-
-				s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency
-				s.heap[--s.heap_max] = m;
-
-				// Create a new node father of n and m
-				tree[node * 2] = (tree[n * 2] + tree[m * 2]);
-				s.depth[node] = Math.max(s.depth[n], s.depth[m]) + 1;
-				tree[n * 2 + 1] = tree[m * 2 + 1] = node;
-
-				// and insert the new node in the heap
-				s.heap[1] = node++;
-				s.pqdownheap(tree, 1);
-			} while (s.heap_len >= 2);
-
-			s.heap[--s.heap_max] = s.heap[1];
-
-			// At this point, the fields freq and dad are set. We can now
-			// generate the bit lengths.
-
-			gen_bitlen(s);
-
-			// The field len is now set, we can generate the bit codes
-			gen_codes(tree, that.max_code, s.bl_count);
-		};
-
-	}
-
-	Tree._length_code = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16,
-			16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-			20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
-			22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-			24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-			25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-			26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 ];
-
-	Tree.base_length = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 ];
-
-	Tree.base_dist = [ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384,
-			24576 ];
-
-	// Mapping from a distance to a distance code. dist is the distance - 1 and
-	// must not have side effects. _dist_code[256] and _dist_code[257] are never
-	// used.
-	Tree.d_code = function(dist) {
-		return ((dist) < 256 ? _dist_code[dist] : _dist_code[256 + ((dist) >>> 7)]);
-	};
-
-	// extra bits for each length code
-	Tree.extra_lbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ];
-
-	// extra bits for each distance code
-	Tree.extra_dbits = [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ];
-
-	// extra bits for each bit length code
-	Tree.extra_blbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 ];
-
-	Tree.bl_order = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
-
-	// StaticTree
-
-	function StaticTree(static_tree, extra_bits, extra_base, elems, max_length) {
-		var that = this;
-		that.static_tree = static_tree;
-		that.extra_bits = extra_bits;
-		that.extra_base = extra_base;
-		that.elems = elems;
-		that.max_length = max_length;
-	}
-
-	StaticTree.static_ltree = [ 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, 2, 8,
-			130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, 10, 8, 138, 8, 74, 8, 202, 8, 42,
-			8, 170, 8, 106, 8, 234, 8, 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8,
-			22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, 30, 8, 158, 8, 94, 8,
-			222, 8, 62, 8, 190, 8, 126, 8, 254, 8, 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113,
-			8, 241, 8, 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, 5, 8, 133, 8,
-			69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, 13, 8, 141, 8, 77, 8, 205, 8, 45, 8,
-			173, 8, 109, 8, 237, 8, 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9,
-			51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, 43, 9, 299, 9, 171, 9,
-			427, 9, 107, 9, 363, 9, 235, 9, 491, 9, 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379,
-			9, 251, 9, 507, 9, 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, 23,
-			9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, 15, 9, 271, 9, 143, 9,
-			399, 9, 79, 9, 335, 9, 207, 9, 463, 9, 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9,
-			223, 9, 479, 9, 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, 8, 7, 72, 7,
-			40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8,
-			99, 8, 227, 8 ];
-
-	StaticTree.static_dtree = [ 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, 1, 5, 17, 5, 9, 5,
-			25, 5, 5, 5, 21, 5, 13, 5, 29, 5, 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 ];
-
-	StaticTree.static_l_desc = new StaticTree(StaticTree.static_ltree, Tree.extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
-
-	StaticTree.static_d_desc = new StaticTree(StaticTree.static_dtree, Tree.extra_dbits, 0, D_CODES, MAX_BITS);
-
-	StaticTree.static_bl_desc = new StaticTree(null, Tree.extra_blbits, 0, BL_CODES, MAX_BL_BITS);
-
-	// Deflate
-
-	var MAX_MEM_LEVEL = 9;
-	var DEF_MEM_LEVEL = 8;
-
-	function Config(good_length, max_lazy, nice_length, max_chain, func) {
-		var that = this;
-		that.good_length = good_length;
-		that.max_lazy = max_lazy;
-		that.nice_length = nice_length;
-		that.max_chain = max_chain;
-		that.func = func;
-	}
-
-	var STORED = 0;
-	var FAST = 1;
-	var SLOW = 2;
-	var config_table = [ new Config(0, 0, 0, 0, STORED), new Config(4, 4, 8, 4, FAST), new Config(4, 5, 16, 8, FAST), new Config(4, 6, 32, 32, FAST),
-			new Config(4, 4, 16, 16, SLOW), new Config(8, 16, 32, 32, SLOW), new Config(8, 16, 128, 128, SLOW), new Config(8, 32, 128, 256, SLOW),
-			new Config(32, 128, 258, 1024, SLOW), new Config(32, 258, 258, 4096, SLOW) ];
-
-	var z_errmsg = [ "need dictionary", // Z_NEED_DICT
-	// 2
-	"stream end", // Z_STREAM_END 1
-	"", // Z_OK 0
-	"", // Z_ERRNO (-1)
-	"stream error", // Z_STREAM_ERROR (-2)
-	"data error", // Z_DATA_ERROR (-3)
-	"", // Z_MEM_ERROR (-4)
-	"buffer error", // Z_BUF_ERROR (-5)
-	"",// Z_VERSION_ERROR (-6)
-	"" ];
-
-	// block not completed, need more input or more output
-	var NeedMore = 0;
-
-	// block flush performed
-	var BlockDone = 1;
-
-	// finish started, need only more output at next deflate
-	var FinishStarted = 2;
-
-	// finish done, accept no more input or output
-	var FinishDone = 3;
-
-	// preset dictionary flag in zlib header
-	var PRESET_DICT = 0x20;
-
-	var INIT_STATE = 42;
-	var BUSY_STATE = 113;
-	var FINISH_STATE = 666;
-
-	// The deflate compression method
-	var Z_DEFLATED = 8;
-
-	var STORED_BLOCK = 0;
-	var STATIC_TREES = 1;
-	var DYN_TREES = 2;
-
-	var MIN_MATCH = 3;
-	var MAX_MATCH = 258;
-	var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
-
-	function smaller(tree, n, m, depth) {
-		var tn2 = tree[n * 2];
-		var tm2 = tree[m * 2];
-		return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m]));
-	}
-
-	function Deflate() {
-
-		var that = this;
-		var strm; // pointer back to this zlib stream
-		var status; // as the name implies
-		// pending_buf; // output still pending
-		var pending_buf_size; // size of pending_buf
-		// pending_out; // next pending byte to output to the stream
-		// pending; // nb of bytes in the pending buffer
-		var method; // STORED (for zip only) or DEFLATED
-		var last_flush; // value of flush param for previous deflate call
-
-		var w_size; // LZ77 window size (32K by default)
-		var w_bits; // log2(w_size) (8..16)
-		var w_mask; // w_size - 1
-
-		var window;
-		// Sliding window. Input bytes are read into the second half of the window,
-		// and move to the first half later to keep a dictionary of at least wSize
-		// bytes. With this organization, matches are limited to a distance of
-		// wSize-MAX_MATCH bytes, but this ensures that IO is always
-		// performed with a length multiple of the block size. Also, it limits
-		// the window size to 64K, which is quite useful on MSDOS.
-		// To do: use the user input buffer as sliding window.
-
-		var window_size;
-		// Actual size of window: 2*wSize, except when the user input buffer
-		// is directly used as sliding window.
-
-		var prev;
-		// Link to older string with same hash index. To limit the size of this
-		// array to 64K, this link is maintained only for the last 32K strings.
-		// An index in this array is thus a window index modulo 32K.
-
-		var head; // Heads of the hash chains or NIL.
-
-		var ins_h; // hash index of string to be inserted
-		var hash_size; // number of elements in hash table
-		var hash_bits; // log2(hash_size)
-		var hash_mask; // hash_size-1
-
-		// Number of bits by which ins_h must be shifted at each input
-		// step. It must be such that after MIN_MATCH steps, the oldest
-		// byte no longer takes part in the hash key, that is:
-		// hash_shift * MIN_MATCH >= hash_bits
-		var hash_shift;
-
-		// Window position at the beginning of the current output block. Gets
-		// negative when the window is moved backwards.
-
-		var block_start;
-
-		var match_length; // length of best match
-		var prev_match; // previous match
-		var match_available; // set if previous match exists
-		var strstart; // start of string to insert
-		var match_start; // start of matching string
-		var lookahead; // number of valid bytes ahead in window
-
-		// Length of the best match at previous step. Matches not greater than this
-		// are discarded. This is used in the lazy match evaluation.
-		var prev_length;
-
-		// To speed up deflation, hash chains are never searched beyond this
-		// length. A higher limit improves compression ratio but degrades the speed.
-		var max_chain_length;
-
-		// Attempt to find a better match only when the current match is strictly
-		// smaller than this value. This mechanism is used only for compression
-		// levels >= 4.
-		var max_lazy_match;
-
-		// Insert new strings in the hash table only if the match length is not
-		// greater than this length. This saves time but degrades compression.
-		// max_insert_length is used only for compression levels <= 3.
-
-		var level; // compression level (1..9)
-		var strategy; // favor or force Huffman coding
-
-		// Use a faster search when the previous match is longer than this
-		var good_match;
-
-		// Stop searching when current match exceeds this
-		var nice_match;
-
-		var dyn_ltree; // literal and length tree
-		var dyn_dtree; // distance tree
-		var bl_tree; // Huffman tree for bit lengths
-
-		var l_desc = new Tree(); // desc for literal tree
-		var d_desc = new Tree(); // desc for distance tree
-		var bl_desc = new Tree(); // desc for bit length tree
-
-		// that.heap_len; // number of elements in the heap
-		// that.heap_max; // element of largest frequency
-		// The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
-		// The same heap array is used to build all trees.
-
-		// Depth of each subtree used as tie breaker for trees of equal frequency
-		that.depth = [];
-
-		var l_buf; // index for literals or lengths */
-
-		// Size of match buffer for literals/lengths. There are 4 reasons for
-		// limiting lit_bufsize to 64K:
-		// - frequencies can be kept in 16 bit counters
-		// - if compression is not successful for the first block, all input
-		// data is still in the window so we can still emit a stored block even
-		// when input comes from standard input. (This can also be done for
-		// all blocks if lit_bufsize is not greater than 32K.)
-		// - if compression is not successful for a file smaller than 64K, we can
-		// even emit a stored file instead of a stored block (saving 5 bytes).
-		// This is applicable only for zip (not gzip or zlib).
-		// - creating new Huffman trees less frequently may not provide fast
-		// adaptation to changes in the input data statistics. (Take for
-		// example a binary file with poorly compressible code followed by
-		// a highly compressible string table.) Smaller buffer sizes give
-		// fast adaptation but have of course the overhead of transmitting
-		// trees more frequently.
-		// - I can't count above 4
-		var lit_bufsize;
-
-		var last_lit; // running index in l_buf
-
-		// Buffer for distances. To simplify the code, d_buf and l_buf have
-		// the same number of elements. To use different lengths, an extra flag
-		// array would be necessary.
-
-		var d_buf; // index of pendig_buf
-
-		// that.opt_len; // bit length of current block with optimal trees
-		// that.static_len; // bit length of current block with static trees
-		var matches; // number of string matches in current block
-		var last_eob_len; // bit length of EOB code for last block
-
-		// Output buffer. bits are inserted starting at the bottom (least
-		// significant bits).
-		var bi_buf;
-
-		// Number of valid bits in bi_buf. All bits above the last valid bit
-		// are always zero.
-		var bi_valid;
-
-		// number of codes at each bit length for an optimal tree
-		that.bl_count = [];
-
-		// heap used to build the Huffman trees
-		that.heap = [];
-
-		dyn_ltree = [];
-		dyn_dtree = [];
-		bl_tree = [];
-
-		function lm_init() {
-			var i;
-			window_size = 2 * w_size;
-
-			head[hash_size - 1] = 0;
-			for (i = 0; i < hash_size - 1; i++) {
-				head[i] = 0;
-			}
-
-			// Set the default configuration parameters:
-			max_lazy_match = config_table[level].max_lazy;
-			good_match = config_table[level].good_length;
-			nice_match = config_table[level].nice_length;
-			max_chain_length = config_table[level].max_chain;
-
-			strstart = 0;
-			block_start = 0;
-			lookahead = 0;
-			match_length = prev_length = MIN_MATCH - 1;
-			match_available = 0;
-			ins_h = 0;
-		}
-
-		function init_block() {
-			var i;
-			// Initialize the trees.
-			for (i = 0; i < L_CODES; i++)
-				dyn_ltree[i * 2] = 0;
-			for (i = 0; i < D_CODES; i++)
-				dyn_dtree[i * 2] = 0;
-			for (i = 0; i < BL_CODES; i++)
-				bl_tree[i * 2] = 0;
-
-			dyn_ltree[END_BLOCK * 2] = 1;
-			that.opt_len = that.static_len = 0;
-			last_lit = matches = 0;
-		}
-
-		// Initialize the tree data structures for a new zlib stream.
-		function tr_init() {
-
-			l_desc.dyn_tree = dyn_ltree;
-			l_desc.stat_desc = StaticTree.static_l_desc;
-
-			d_desc.dyn_tree = dyn_dtree;
-			d_desc.stat_desc = StaticTree.static_d_desc;
-
-			bl_desc.dyn_tree = bl_tree;
-			bl_desc.stat_desc = StaticTree.static_bl_desc;
-
-			bi_buf = 0;
-			bi_valid = 0;
-			last_eob_len = 8; // enough lookahead for inflate
-
-			// Initialize the first block of the first file:
-			init_block();
-		}
-
-		// Restore the heap property by moving down the tree starting at node k,
-		// exchanging a node with the smallest of its two sons if necessary,
-		// stopping
-		// when the heap property is re-established (each father smaller than its
-		// two sons).
-		that.pqdownheap = function(tree, // the tree to restore
-		k // node to move down
-		) {
-			var heap = that.heap;
-			var v = heap[k];
-			var j = k << 1; // left son of k
-			while (j <= that.heap_len) {
-				// Set j to the smallest of the two sons:
-				if (j < that.heap_len && smaller(tree, heap[j + 1], heap[j], that.depth)) {
-					j++;
-				}
-				// Exit if v is smaller than both sons
-				if (smaller(tree, v, heap[j], that.depth))
-					break;
-
-				// Exchange v with the smallest son
-				heap[k] = heap[j];
-				k = j;
-				// And continue down the tree, setting j to the left son of k
-				j <<= 1;
-			}
-			heap[k] = v;
-		};
-
-		// Scan a literal or distance tree to determine the frequencies of the codes
-		// in the bit length tree.
-		function scan_tree(tree,// the tree to be scanned
-		max_code // and its largest code of non zero frequency
-		) {
-			var n; // iterates over all tree elements
-			var prevlen = -1; // last emitted length
-			var curlen; // length of current code
-			var nextlen = tree[0 * 2 + 1]; // length of next code
-			var count = 0; // repeat count of the current code
-			var max_count = 7; // max repeat count
-			var min_count = 4; // min repeat count
-
-			if (nextlen === 0) {
-				max_count = 138;
-				min_count = 3;
-			}
-			tree[(max_code + 1) * 2 + 1] = 0xffff; // guard
-
-			for (n = 0; n <= max_code; n++) {
-				curlen = nextlen;
-				nextlen = tree[(n + 1) * 2 + 1];
-				if (++count < max_count && curlen == nextlen) {
-					continue;
-				} else if (count < min_count) {
-					bl_tree[curlen * 2] += count;
-				} else if (curlen !== 0) {
-					if (curlen != prevlen)
-						bl_tree[curlen * 2]++;
-					bl_tree[REP_3_6 * 2]++;
-				} else if (count <= 10) {
-					bl_tree[REPZ_3_10 * 2]++;
-				} else {
-					bl_tree[REPZ_11_138 * 2]++;
-				}
-				count = 0;
-				prevlen = curlen;
-				if (nextlen === 0) {
-					max_count = 138;
-					min_count = 3;
-				} else if (curlen == nextlen) {
-					max_count = 6;
-					min_count = 3;
-				} else {
-					max_count = 7;
-					min_count = 4;
-				}
-			}
-		}
-
-		// Construct the Huffman tree for the bit lengths and return the index in
-		// bl_order of the last bit length code to send.
-		function build_bl_tree() {
-			var max_blindex; // index of last bit length code of non zero freq
-
-			// Determine the bit length frequencies for literal and distance trees
-			scan_tree(dyn_ltree, l_desc.max_code);
-			scan_tree(dyn_dtree, d_desc.max_code);
-
-			// Build the bit length tree:
-			bl_desc.build_tree(that);
-			// opt_len now includes the length of the tree representations, except
-			// the lengths of the bit lengths codes and the 5+5+4 bits for the
-			// counts.
-
-			// Determine the number of bit length codes to send. The pkzip format
-			// requires that at least 4 bit length codes be sent. (appnote.txt says
-			// 3 but the actual value used is 4.)
-			for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
-				if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] !== 0)
-					break;
-			}
-			// Update opt_len to include the bit length tree and counts
-			that.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
-
-			return max_blindex;
-		}
-
-		// Output a byte on the stream.
-		// IN assertion: there is enough room in pending_buf.
-		function put_byte(p) {
-			that.pending_buf[that.pending++] = p;
-		}
-
-		function put_short(w) {
-			put_byte(w & 0xff);
-			put_byte((w >>> 8) & 0xff);
-		}
-
-		function putShortMSB(b) {
-			put_byte((b >> 8) & 0xff);
-			put_byte((b & 0xff) & 0xff);
-		}
-
-		function send_bits(value, length) {
-			var val, len = length;
-			if (bi_valid > Buf_size - len) {
-				val = value;
-				// bi_buf |= (val << bi_valid);
-				bi_buf |= ((val << bi_valid) & 0xffff);
-				put_short(bi_buf);
-				bi_buf = val >>> (Buf_size - bi_valid);
-				bi_valid += len - Buf_size;
-			} else {
-				// bi_buf |= (value) << bi_valid;
-				bi_buf |= (((value) << bi_valid) & 0xffff);
-				bi_valid += len;
-			}
-		}
-
-		function send_code(c, tree) {
-			var c2 = c * 2;
-			send_bits(tree[c2] & 0xffff, tree[c2 + 1] & 0xffff);
-		}
-
-		// Send a literal or distance tree in compressed form, using the codes in
-		// bl_tree.
-		function send_tree(tree,// the tree to be sent
-		max_code // and its largest code of non zero frequency
-		) {
-			var n; // iterates over all tree elements
-			var prevlen = -1; // last emitted length
-			var curlen; // length of current code
-			var nextlen = tree[0 * 2 + 1]; // length of next code
-			var count = 0; // repeat count of the current code
-			var max_count = 7; // max repeat count
-			var min_count = 4; // min repeat count
-
-			if (nextlen === 0) {
-				max_count = 138;
-				min_count = 3;
-			}
-
-			for (n = 0; n <= max_code; n++) {
-				curlen = nextlen;
-				nextlen = tree[(n + 1) * 2 + 1];
-				if (++count < max_count && curlen == nextlen) {
-					continue;
-				} else if (count < min_count) {
-					do {
-						send_code(curlen, bl_tree);
-					} while (--count !== 0);
-				} else if (curlen !== 0) {
-					if (curlen != prevlen) {
-						send_code(curlen, bl_tree);
-						count--;
-					}
-					send_code(REP_3_6, bl_tree);
-					send_bits(count - 3, 2);
-				} else if (count <= 10) {
-					send_code(REPZ_3_10, bl_tree);
-					send_bits(count - 3, 3);
-				} else {
-					send_code(REPZ_11_138, bl_tree);
-					send_bits(count - 11, 7);
-				}
-				count = 0;
-				prevlen = curlen;
-				if (nextlen === 0) {
-					max_count = 138;
-					min_count = 3;
-				} else if (curlen == nextlen) {
-					max_count = 6;
-					min_count = 3;
-				} else {
-					max_count = 7;
-					min_count = 4;
-				}
-			}
-		}
-
-		// Send the header for a block using dynamic Huffman trees: the counts, the
-		// lengths of the bit length codes, the literal tree and the distance tree.
-		// IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
-		function send_all_trees(lcodes, dcodes, blcodes) {
-			var rank; // index in bl_order
-
-			send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt
-			send_bits(dcodes - 1, 5);
-			send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt
-			for (rank = 0; rank < blcodes; rank++) {
-				send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3);
-			}
-			send_tree(dyn_ltree, lcodes - 1); // literal tree
-			send_tree(dyn_dtree, dcodes - 1); // distance tree
-		}
-
-		// Flush the bit buffer, keeping at most 7 bits in it.
-		function bi_flush() {
-			if (bi_valid == 16) {
-				put_short(bi_buf);
-				bi_buf = 0;
-				bi_valid = 0;
-			} else if (bi_valid >= 8) {
-				put_byte(bi_buf & 0xff);
-				bi_buf >>>= 8;
-				bi_valid -= 8;
-			}
-		}
-
-		// Send one empty static block to give enough lookahead for inflate.
-		// This takes 10 bits, of which 7 may remain in the bit buffer.
-		// The current inflate code requires 9 bits of lookahead. If the
-		// last two codes for the previous block (real code plus EOB) were coded
-		// on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
-		// the last real code. In this case we send two empty static blocks instead
-		// of one. (There are no problems if the previous block is stored or fixed.)
-		// To simplify the code, we assume the worst case of last real code encoded
-		// on one bit only.
-		function _tr_align() {
-			send_bits(STATIC_TREES << 1, 3);
-			send_code(END_BLOCK, StaticTree.static_ltree);
-
-			bi_flush();
-
-			// Of the 10 bits for the empty block, we have already sent
-			// (10 - bi_valid) bits. The lookahead for the last real code (before
-			// the EOB of the previous block) was thus at least one plus the length
-			// of the EOB plus what we have just sent of the empty static block.
-			if (1 + last_eob_len + 10 - bi_valid < 9) {
-				send_bits(STATIC_TREES << 1, 3);
-				send_code(END_BLOCK, StaticTree.static_ltree);
-				bi_flush();
-			}
-			last_eob_len = 7;
-		}
-
-		// Save the match info and tally the frequency counts. Return true if
-		// the current block must be flushed.
-		function _tr_tally(dist, // distance of matched string
-		lc // match length-MIN_MATCH or unmatched char (if dist==0)
-		) {
-			var out_length, in_length, dcode;
-			that.pending_buf[d_buf + last_lit * 2] = (dist >>> 8) & 0xff;
-			that.pending_buf[d_buf + last_lit * 2 + 1] = dist & 0xff;
-
-			that.pending_buf[l_buf + last_lit] = lc & 0xff;
-			last_lit++;
-
-			if (dist === 0) {
-				// lc is the unmatched char
-				dyn_ltree[lc * 2]++;
-			} else {
-				matches++;
-				// Here, lc is the match length - MIN_MATCH
-				dist--; // dist = match distance - 1
-				dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++;
-				dyn_dtree[Tree.d_code(dist) * 2]++;
-			}
-
-			if ((last_lit & 0x1fff) === 0 && level > 2) {
-				// Compute an upper bound for the compressed length
-				out_length = last_lit * 8;
-				in_length = strstart - block_start;
-				for (dcode = 0; dcode < D_CODES; dcode++) {
-					out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]);
-				}
-				out_length >>>= 3;
-				if ((matches < Math.floor(last_lit / 2)) && out_length < Math.floor(in_length / 2))
-					return true;
-			}
-
-			return (last_lit == lit_bufsize - 1);
-			// We avoid equality with lit_bufsize because of wraparound at 64K
-			// on 16 bit machines and because stored blocks are restricted to
-			// 64K-1 bytes.
-		}
-
-		// Send the block data compressed using the given Huffman trees
-		function compress_block(ltree, dtree) {
-			var dist; // distance of matched string
-			var lc; // match length or unmatched char (if dist === 0)
-			var lx = 0; // running index in l_buf
-			var code; // the code to send
-			var extra; // number of extra bits to send
-
-			if (last_lit !== 0) {
-				do {
-					dist = ((that.pending_buf[d_buf + lx * 2] << 8) & 0xff00) | (that.pending_buf[d_buf + lx * 2 + 1] & 0xff);
-					lc = (that.pending_buf[l_buf + lx]) & 0xff;
-					lx++;
-
-					if (dist === 0) {
-						send_code(lc, ltree); // send a literal byte
-					} else {
-						// Here, lc is the match length - MIN_MATCH
-						code = Tree._length_code[lc];
-
-						send_code(code + LITERALS + 1, ltree); // send the length
-						// code
-						extra = Tree.extra_lbits[code];
-						if (extra !== 0) {
-							lc -= Tree.base_length[code];
-							send_bits(lc, extra); // send the extra length bits
-						}
-						dist--; // dist is now the match distance - 1
-						code = Tree.d_code(dist);
-
-						send_code(code, dtree); // send the distance code
-						extra = Tree.extra_dbits[code];
-						if (extra !== 0) {
-							dist -= Tree.base_dist[code];
-							send_bits(dist, extra); // send the extra distance bits
-						}
-					} // literal or match pair ?
-
-					// Check that the overlay between pending_buf and d_buf+l_buf is
-					// ok:
-				} while (lx < last_lit);
-			}
-
-			send_code(END_BLOCK, ltree);
-			last_eob_len = ltree[END_BLOCK * 2 + 1];
-		}
-
-		// Flush the bit buffer and align the output on a byte boundary
-		function bi_windup() {
-			if (bi_valid > 8) {
-				put_short(bi_buf);
-			} else if (bi_valid > 0) {
-				put_byte(bi_buf & 0xff);
-			}
-			bi_buf = 0;
-			bi_valid = 0;
-		}
-
-		// Copy a stored block, storing first the length and its
-		// one's complement if requested.
-		function copy_block(buf, // the input data
-		len, // its length
-		header // true if block header must be written
-		) {
-			bi_windup(); // align on byte boundary
-			last_eob_len = 8; // enough lookahead for inflate
-
-			if (header) {
-				put_short(len);
-				put_short(~len);
-			}
-
-			that.pending_buf.set(window.subarray(buf, buf + len), that.pending);
-			that.pending += len;
-		}
-
-		// Send a stored block
-		function _tr_stored_block(buf, // input block
-		stored_len, // length of input block
-		eof // true if this is the last block for a file
-		) {
-			send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type
-			copy_block(buf, stored_len, true); // with header
-		}
-
-		// Determine the best encoding for the current block: dynamic trees, static
-		// trees or store, and output the encoded block to the zip file.
-		function _tr_flush_block(buf, // input block, or NULL if too old
-		stored_len, // length of input block
-		eof // true if this is the last block for a file
-		) {
-			var opt_lenb, static_lenb;// opt_len and static_len in bytes
-			var max_blindex = 0; // index of last bit length code of non zero freq
-
-			// Build the Huffman trees unless a stored block is forced
-			if (level > 0) {
-				// Construct the literal and distance trees
-				l_desc.build_tree(that);
-
-				d_desc.build_tree(that);
-
-				// At this point, opt_len and static_len are the total bit lengths
-				// of
-				// the compressed block data, excluding the tree representations.
-
-				// Build the bit length tree for the above two trees, and get the
-				// index
-				// in bl_order of the last bit length code to send.
-				max_blindex = build_bl_tree();
-
-				// Determine the best encoding. Compute first the block length in
-				// bytes
-				opt_lenb = (that.opt_len + 3 + 7) >>> 3;
-				static_lenb = (that.static_len + 3 + 7) >>> 3;
-
-				if (static_lenb <= opt_lenb)
-					opt_lenb = static_lenb;
-			} else {
-				opt_lenb = static_lenb = stored_len + 5; // force a stored block
-			}
-
-			if ((stored_len + 4 <= opt_lenb) && buf != -1) {
-				// 4: two words for the lengths
-				// The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
-				// Otherwise we can't have processed more than WSIZE input bytes
-				// since
-				// the last block flush, because compression would have been
-				// successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
-				// transform a block into a stored block.
-				_tr_stored_block(buf, stored_len, eof);
-			} else if (static_lenb == opt_lenb) {
-				send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3);
-				compress_block(StaticTree.static_ltree, StaticTree.static_dtree);
-			} else {
-				send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3);
-				send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1);
-				compress_block(dyn_ltree, dyn_dtree);
-			}
-
-			// The above check is made mod 2^32, for files larger than 512 MB
-			// and uLong implemented on 32 bits.
-
-			init_block();
-
-			if (eof) {
-				bi_windup();
-			}
-		}
-
-		function flush_block_only(eof) {
-			_tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof);
-			block_start = strstart;
-			strm.flush_pending();
-		}
-
-		// Fill the window when the lookahead becomes insufficient.
-		// Updates strstart and lookahead.
-		//
-		// IN assertion: lookahead < MIN_LOOKAHEAD
-		// OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
-		// At least one byte has been read, or avail_in === 0; reads are
-		// performed for at least two bytes (required for the zip translate_eol
-		// option -- not supported here).
-		function fill_window() {
-			var n, m;
-			var p;
-			var more; // Amount of free space at the end of the window.
-
-			do {
-				more = (window_size - lookahead - strstart);
-
-				// Deal with !@#$% 64K limit:
-				if (more === 0 && strstart === 0 && lookahead === 0) {
-					more = w_size;
-				} else if (more == -1) {
-					// Very unlikely, but possible on 16 bit machine if strstart ==
-					// 0
-					// and lookahead == 1 (input done one byte at time)
-					more--;
-
-					// If the window is almost full and there is insufficient
-					// lookahead,
-					// move the upper half to the lower one to make room in the
-					// upper half.
-				} else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) {
-					window.set(window.subarray(w_size, w_size + w_size), 0);
-
-					match_start -= w_size;
-					strstart -= w_size; // we now have strstart >= MAX_DIST
-					block_start -= w_size;
-
-					// Slide the hash table (could be avoided with 32 bit values
-					// at the expense of memory usage). We slide even when level ==
-					// 0
-					// to keep the hash table consistent if we switch back to level
-					// > 0
-					// later. (Using level 0 permanently is not an optimal usage of
-					// zlib, so we don't care about this pathological case.)
-
-					n = hash_size;
-					p = n;
-					do {
-						m = (head[--p] & 0xffff);
-						head[p] = (m >= w_size ? m - w_size : 0);
-					} while (--n !== 0);
-
-					n = w_size;
-					p = n;
-					do {
-						m = (prev[--p] & 0xffff);
-						prev[p] = (m >= w_size ? m - w_size : 0);
-						// If n is not on any hash chain, prev[n] is garbage but
-						// its value will never be used.
-					} while (--n !== 0);
-					more += w_size;
-				}
-
-				if (strm.avail_in === 0)
-					return;
-
-				// If there was no sliding:
-				// strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
-				// more == window_size - lookahead - strstart
-				// => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
-				// => more >= window_size - 2*WSIZE + 2
-				// In the BIG_MEM or MMAP case (not yet supported),
-				// window_size == input_size + MIN_LOOKAHEAD &&
-				// strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
-				// Otherwise, window_size == 2*WSIZE so more >= 2.
-				// If there was sliding, more >= WSIZE. So in all cases, more >= 2.
-
-				n = strm.read_buf(window, strstart + lookahead, more);
-				lookahead += n;
-
-				// Initialize the hash value now that we have some input:
-				if (lookahead >= MIN_MATCH) {
-					ins_h = window[strstart] & 0xff;
-					ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;
-				}
-				// If the whole input has less than MIN_MATCH bytes, ins_h is
-				// garbage,
-				// but this is not important since only literal bytes will be
-				// emitted.
-			} while (lookahead < MIN_LOOKAHEAD && strm.avail_in !== 0);
-		}
-
-		// Copy without compression as much as possible from the input stream,
-		// return
-		// the current block state.
-		// This function does not insert new strings in the dictionary since
-		// uncompressible data is probably not useful. This function is used
-		// only for the level=0 compression option.
-		// NOTE: this function should be optimized to avoid extra copying from
-		// window to pending_buf.
-		function deflate_stored(flush) {
-			// Stored blocks are limited to 0xffff bytes, pending_buf is limited
-			// to pending_buf_size, and each stored block has a 5 byte header:
-
-			var max_block_size = 0xffff;
-			var max_start;
-
-			if (max_block_size > pending_buf_size - 5) {
-				max_block_size = pending_buf_size - 5;
-			}
-
-			// Copy as much as possible from input to output:
-			while (true) {
-				// Fill the window as much as possible:
-				if (lookahead <= 1) {
-					fill_window();
-					if (lookahead === 0 && flush == Z_NO_FLUSH)
-						return NeedMore;
-					if (lookahead === 0)
-						break; // flush the current block
-				}
-
-				strstart += lookahead;
-				lookahead = 0;
-
-				// Emit a stored block if pending_buf will be full:
-				max_start = block_start + max_block_size;
-				if (strstart === 0 || strstart >= max_start) {
-					// strstart === 0 is possible when wraparound on 16-bit machine
-					lookahead = (strstart - max_start);
-					strstart = max_start;
-
-					flush_block_only(false);
-					if (strm.avail_out === 0)
-						return NeedMore;
-
-				}
-
-				// Flush if we may have to slide, otherwise block_start may become
-				// negative and the data will be gone:
-				if (strstart - block_start >= w_size - MIN_LOOKAHEAD) {
-					flush_block_only(false);
-					if (strm.avail_out === 0)
-						return NeedMore;
-				}
-			}
-
-			flush_block_only(flush == Z_FINISH);
-			if (strm.avail_out === 0)
-				return (flush == Z_FINISH) ? FinishStarted : NeedMore;
-
-			return flush == Z_FINISH ? FinishDone : BlockDone;
-		}
-
-		function longest_match(cur_match) {
-			var chain_length = max_chain_length; // max hash chain length
-			var scan = strstart; // current string
-			var match; // matched string
-			var len; // length of current match
-			var best_len = prev_length; // best match length so far
-			var limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0;
-			var _nice_match = nice_match;
-
-			// Stop when cur_match becomes <= limit. To simplify the code,
-			// we prevent matches with the string of window index 0.
-
-			var wmask = w_mask;
-
-			var strend = strstart + MAX_MATCH;
-			var scan_end1 = window[scan + best_len - 1];
-			var scan_end = window[scan + best_len];
-
-			// The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of
-			// 16.
-			// It is easy to get rid of this optimization if necessary.
-
-			// Do not waste too much time if we already have a good match:
-			if (prev_length >= good_match) {
-				chain_length >>= 2;
-			}
-
-			// Do not look for matches beyond the end of the input. This is
-			// necessary
-			// to make deflate deterministic.
-			if (_nice_match > lookahead)
-				_nice_match = lookahead;
-
-			do {
-				match = cur_match;
-
-				// Skip to next match if the match length cannot increase
-				// or if the match length is less than 2:
-				if (window[match + best_len] != scan_end || window[match + best_len - 1] != scan_end1 || window[match] != window[scan]
-						|| window[++match] != window[scan + 1])
-					continue;
-
-				// The check at best_len-1 can be removed because it will be made
-				// again later. (This heuristic is not always a win.)
-				// It is not necessary to compare scan[2] and match[2] since they
-				// are always equal when the other bytes match, given that
-				// the hash keys are equal and that HASH_BITS >= 8.
-				scan += 2;
-				match++;
-
-				// We check for insufficient lookahead only every 8th comparison;
-				// the 256th check will be made at strstart+258.
-				do {
-				} while (window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match]
-						&& window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match]
-						&& window[++scan] == window[++match] && window[++scan] == window[++match] && scan < strend);
-
-				len = MAX_MATCH - (strend - scan);
-				scan = strend - MAX_MATCH;
-
-				if (len > best_len) {
-					match_start = cur_match;
-					best_len = len;
-					if (len >= _nice_match)
-						break;
-					scan_end1 = window[scan + best_len - 1];
-					scan_end = window[scan + best_len];
-				}
-
-			} while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length !== 0);
-
-			if (best_len <= lookahead)
-				return best_len;
-			return lookahead;
-		}
-
-		// Compress as much as possible from the input stream, return the current
-		// block state.
-		// This function does not perform lazy evaluation of matches and inserts
-		// new strings in the dictionary only for unmatched strings or for short
-		// matches. It is used only for the fast compression options.
-		function deflate_fast(flush) {
-			// short hash_head = 0; // head of the hash chain
-			var hash_head = 0; // head of the hash chain
-			var bflush; // set if current block must be flushed
-
-			while (true) {
-				// Make sure that we always have enough lookahead, except
-				// at the end of the input file. We need MAX_MATCH bytes
-				// for the next match, plus MIN_MATCH bytes to insert the
-				// string following the next match.
-				if (lookahead < MIN_LOOKAHEAD) {
-					fill_window();
-					if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-						return NeedMore;
-					}
-					if (lookahead === 0)
-						break; // flush the current block
-				}
-
-				// Insert the string window[strstart .. strstart+2] in the
-				// dictionary, and set hash_head to the head of the hash chain:
-				if (lookahead >= MIN_MATCH) {
-					ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;
-
-					// prev[strstart&w_mask]=hash_head=head[ins_h];
-					hash_head = (head[ins_h] & 0xffff);
-					prev[strstart & w_mask] = head[ins_h];
-					head[ins_h] = strstart;
-				}
-
-				// Find the longest match, discarding those <= prev_length.
-				// At this point we have always match_length < MIN_MATCH
-
-				if (hash_head !== 0 && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) {
-					// To simplify the code, we prevent matches with the string
-					// of window index 0 (in particular we have to avoid a match
-					// of the string with itself at the start of the input file).
-					if (strategy != Z_HUFFMAN_ONLY) {
-						match_length = longest_match(hash_head);
-					}
-					// longest_match() sets match_start
-				}
-				if (match_length >= MIN_MATCH) {
-					// check_match(strstart, match_start, match_length);
-
-					bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH);
-
-					lookahead -= match_length;
-
-					// Insert new strings in the hash table only if the match length
-					// is not too large. This saves time but degrades compression.
-					if (match_length <= max_lazy_match && lookahead >= MIN_MATCH) {
-						match_length--; // string at strstart already in hash table
-						do {
-							strstart++;
-
-							ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;
-							// prev[strstart&w_mask]=hash_head=head[ins_h];
-							hash_head = (head[ins_h] & 0xffff);
-							prev[strstart & w_mask] = head[ins_h];
-							head[ins_h] = strstart;
-
-							// strstart never exceeds WSIZE-MAX_MATCH, so there are
-							// always MIN_MATCH bytes ahead.
-						} while (--match_length !== 0);
-						strstart++;
-					} else {
-						strstart += match_length;
-						match_length = 0;
-						ins_h = window[strstart] & 0xff;
-
-						ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;
-						// If lookahead < MIN_MATCH, ins_h is garbage, but it does
-						// not
-						// matter since it will be recomputed at next deflate call.
-					}
-				} else {
-					// No match, output a literal byte
-
-					bflush = _tr_tally(0, window[strstart] & 0xff);
-					lookahead--;
-					strstart++;
-				}
-				if (bflush) {
-
-					flush_block_only(false);
-					if (strm.avail_out === 0)
-						return NeedMore;
-				}
-			}
-
-			flush_block_only(flush == Z_FINISH);
-			if (strm.avail_out === 0) {
-				if (flush == Z_FINISH)
-					return FinishStarted;
-				else
-					return NeedMore;
-			}
-			return flush == Z_FINISH ? FinishDone : BlockDone;
-		}
-
-		// Same as above, but achieves better compression. We use a lazy
-		// evaluation for matches: a match is finally adopted only if there is
-		// no better match at the next window position.
-		function deflate_slow(flush) {
-			// short hash_head = 0; // head of hash chain
-			var hash_head = 0; // head of hash chain
-			var bflush; // set if current block must be flushed
-			var max_insert;
-
-			// Process the input block.
-			while (true) {
-				// Make sure that we always have enough lookahead, except
-				// at the end of the input file. We need MAX_MATCH bytes
-				// for the next match, plus MIN_MATCH bytes to insert the
-				// string following the next match.
-
-				if (lookahead < MIN_LOOKAHEAD) {
-					fill_window();
-					if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-						return NeedMore;
-					}
-					if (lookahead === 0)
-						break; // flush the current block
-				}
-
-				// Insert the string window[strstart .. strstart+2] in the
-				// dictionary, and set hash_head to the head of the hash chain:
-
-				if (lookahead >= MIN_MATCH) {
-					ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;
-					// prev[strstart&w_mask]=hash_head=head[ins_h];
-					hash_head = (head[ins_h] & 0xffff);
-					prev[strstart & w_mask] = head[ins_h];
-					head[ins_h] = strstart;
-				}
-
-				// Find the longest match, discarding those <= prev_length.
-				prev_length = match_length;
-				prev_match = match_start;
-				match_length = MIN_MATCH - 1;
-
-				if (hash_head !== 0 && prev_length < max_lazy_match && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) {
-					// To simplify the code, we prevent matches with the string
-					// of window index 0 (in particular we have to avoid a match
-					// of the string with itself at the start of the input file).
-
-					if (strategy != Z_HUFFMAN_ONLY) {
-						match_length = longest_match(hash_head);
-					}
-					// longest_match() sets match_start
-
-					if (match_length <= 5 && (strategy == Z_FILTERED || (match_length == MIN_MATCH && strstart - match_start > 4096))) {
-
-						// If prev_match is also MIN_MATCH, match_start is garbage
-						// but we will ignore the current match anyway.
-						match_length = MIN_MATCH - 1;
-					}
-				}
-
-				// If there was a match at the previous step and the current
-				// match is not better, output the previous match:
-				if (prev_length >= MIN_MATCH && match_length <= prev_length) {
-					max_insert = strstart + lookahead - MIN_MATCH;
-					// Do not insert strings in hash table beyond this.
-
-					// check_match(strstart-1, prev_match, prev_length);
-
-					bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH);
-
-					// Insert in hash table all strings up to the end of the match.
-					// strstart-1 and strstart are already inserted. If there is not
-					// enough lookahead, the last two strings are not inserted in
-					// the hash table.
-					lookahead -= prev_length - 1;
-					prev_length -= 2;
-					do {
-						if (++strstart <= max_insert) {
-							ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;
-							// prev[strstart&w_mask]=hash_head=head[ins_h];
-							hash_head = (head[ins_h] & 0xffff);
-							prev[strstart & w_mask] = head[ins_h];
-							head[ins_h] = strstart;
-						}
-					} while (--prev_length !== 0);
-					match_available = 0;
-					match_length = MIN_MATCH - 1;
-					strstart++;
-
-					if (bflush) {
-						flush_block_only(false);
-						if (strm.avail_out === 0)
-							return NeedMore;
-					}
-				} else if (match_available !== 0) {
-
-					// If there was no match at the previous position, output a
-					// single literal. If there was a match but the current match
-					// is longer, truncate the previous match to a single literal.
-
-					bflush = _tr_tally(0, window[strstart - 1] & 0xff);
-
-					if (bflush) {
-						flush_block_only(false);
-					}
-					strstart++;
-					lookahead--;
-					if (strm.avail_out === 0)
-						return NeedMore;
-				} else {
-					// There is no previous match to compare with, wait for
-					// the next step to decide.
-
-					match_available = 1;
-					strstart++;
-					lookahead--;
-				}
-			}
-
-			if (match_available !== 0) {
-				bflush = _tr_tally(0, window[strstart - 1] & 0xff);
-				match_available = 0;
-			}
-			flush_block_only(flush == Z_FINISH);
-
-			if (strm.avail_out === 0) {
-				if (flush == Z_FINISH)
-					return FinishStarted;
-				else
-					return NeedMore;
-			}
-
-			return flush == Z_FINISH ? FinishDone : BlockDone;
-		}
-
-		function deflateReset(strm) {
-			strm.total_in = strm.total_out = 0;
-			strm.msg = null; //
-			
-			that.pending = 0;
-			that.pending_out = 0;
-
-			status = BUSY_STATE;
-
-			last_flush = Z_NO_FLUSH;
-
-			tr_init();
-			lm_init();
-			return Z_OK;
-		}
-
-		that.deflateInit = function(strm, _level, bits, _method, memLevel, _strategy) {
-			if (!_method)
-				_method = Z_DEFLATED;
-			if (!memLevel)
-				memLevel = DEF_MEM_LEVEL;
-			if (!_strategy)
-				_strategy = Z_DEFAULT_STRATEGY;
-
-			// byte[] my_version=ZLIB_VERSION;
-
-			//
-			// if (!version || version[0] != my_version[0]
-			// || stream_size != sizeof(z_stream)) {
-			// return Z_VERSION_ERROR;
-			// }
-
-			strm.msg = null;
-
-			if (_level == Z_DEFAULT_COMPRESSION)
-				_level = 6;
-
-			if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || _method != Z_DEFLATED || bits < 9 || bits > 15 || _level < 0 || _level > 9 || _strategy < 0
-					|| _strategy > Z_HUFFMAN_ONLY) {
-				return Z_STREAM_ERROR;
-			}
-
-			strm.dstate = that;
-
-			w_bits = bits;
-			w_size = 1 << w_bits;
-			w_mask = w_size - 1;
-
-			hash_bits = memLevel + 7;
-			hash_size = 1 << hash_bits;
-			hash_mask = hash_size - 1;
-			hash_shift = Math.floor((hash_bits + MIN_MATCH - 1) / MIN_MATCH);
-
-			window = new Uint8Array(w_size * 2);
-			prev = [];
-			head = [];
-
-			lit_bufsize = 1 << (memLevel + 6); // 16K elements by default
-
-			// We overlay pending_buf and d_buf+l_buf. This works since the average
-			// output size for (length,distance) codes is <= 24 bits.
-			that.pending_buf = new Uint8Array(lit_bufsize * 4);
-			pending_buf_size = lit_bufsize * 4;
-
-			d_buf = Math.floor(lit_bufsize / 2);
-			l_buf = (1 + 2) * lit_bufsize;
-
-			level = _level;
-
-			strategy = _strategy;
-			method = _method & 0xff;
-
-			return deflateReset(strm);
-		};
-
-		that.deflateEnd = function() {
-			if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) {
-				return Z_STREAM_ERROR;
-			}
-			// Deallocate in reverse order of allocations:
-			that.pending_buf = null;
-			head = null;
-			prev = null;
-			window = null;
-			// free
-			that.dstate = null;
-			return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
-		};
-
-		that.deflateParams = function(strm, _level, _strategy) {
-			var err = Z_OK;
-
-			if (_level == Z_DEFAULT_COMPRESSION) {
-				_level = 6;
-			}
-			if (_level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
-				return Z_STREAM_ERROR;
-			}
-
-			if (config_table[level].func != config_table[_level].func && strm.total_in !== 0) {
-				// Flush the last buffer:
-				err = strm.deflate(Z_PARTIAL_FLUSH);
-			}
-
-			if (level != _level) {
-				level = _level;
-				max_lazy_match = config_table[level].max_lazy;
-				good_match = config_table[level].good_length;
-				nice_match = config_table[level].nice_length;
-				max_chain_length = config_table[level].max_chain;
-			}
-			strategy = _strategy;
-			return err;
-		};
-
-		that.deflateSetDictionary = function(strm, dictionary, dictLength) {
-			var length = dictLength;
-			var n, index = 0;
-
-			if (!dictionary || status != INIT_STATE)
-				return Z_STREAM_ERROR;
-
-			if (length < MIN_MATCH)
-				return Z_OK;
-			if (length > w_size - MIN_LOOKAHEAD) {
-				length = w_size - MIN_LOOKAHEAD;
-				index = dictLength - length; // use the tail of the dictionary
-			}
-			window.set(dictionary.subarray(index, index + length), 0);
-
-			strstart = length;
-			block_start = length;
-
-			// Insert all strings in the hash table (except for the last two bytes).
-			// s->lookahead stays null, so s->ins_h will be recomputed at the next
-			// call of fill_window.
-
-			ins_h = window[0] & 0xff;
-			ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask;
-
-			for (n = 0; n <= length - MIN_MATCH; n++) {
-				ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;
-				prev[n & w_mask] = head[ins_h];
-				head[ins_h] = n;
-			}
-			return Z_OK;
-		};
-
-		that.deflate = function(_strm, flush) {
-			var i, header, level_flags, old_flush, bstate;
-
-			if (flush > Z_FINISH || flush < 0) {
-				return Z_STREAM_ERROR;
-			}
-
-			if (!_strm.next_out || (!_strm.next_in && _strm.avail_in !== 0) || (status == FINISH_STATE && flush != Z_FINISH)) {
-				_strm.msg = z_errmsg[Z_NEED_DICT - (Z_STREAM_ERROR)];
-				return Z_STREAM_ERROR;
-			}
-			if (_strm.avail_out === 0) {
-				_strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)];
-				return Z_BUF_ERROR;
-			}
-
-			strm = _strm; // just in case
-			old_flush = last_flush;
-			last_flush = flush;
-
-			// Write the zlib header
-			if (status == INIT_STATE) {
-				header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8;
-				level_flags = ((level - 1) & 0xff) >> 1;
-
-				if (level_flags > 3)
-					level_flags = 3;
-				header |= (level_flags << 6);
-				if (strstart !== 0)
-					header |= PRESET_DICT;
-				header += 31 - (header % 31);
-
-				status = BUSY_STATE;
-				putShortMSB(header);
-			}
-
-			// Flush as much pending output as possible
-			if (that.pending !== 0) {
-				strm.flush_pending();
-				if (strm.avail_out === 0) {
-					// console.log(" avail_out==0");
-					// Since avail_out is 0, deflate will be called again with
-					// more output space, but possibly with both pending and
-					// avail_in equal to zero. There won't be anything to do,
-					// but this is not an error situation so make sure we
-					// return OK instead of BUF_ERROR at next call of deflate:
-					last_flush = -1;
-					return Z_OK;
-				}
-
-				// Make sure there is something to do and avoid duplicate
-				// consecutive
-				// flushes. For repeated and useless calls with Z_FINISH, we keep
-				// returning Z_STREAM_END instead of Z_BUFF_ERROR.
-			} else if (strm.avail_in === 0 && flush <= old_flush && flush != Z_FINISH) {
-				strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)];
-				return Z_BUF_ERROR;
-			}
-
-			// User must not provide more input after the first FINISH:
-			if (status == FINISH_STATE && strm.avail_in !== 0) {
-				_strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)];
-				return Z_BUF_ERROR;
-			}
-
-			// Start a new block or continue the current one.
-			if (strm.avail_in !== 0 || lookahead !== 0 || (flush != Z_NO_FLUSH && status != FINISH_STATE)) {
-				bstate = -1;
-				switch (config_table[level].func) {
-				case STORED:
-					bstate = deflate_stored(flush);
-					break;
-				case FAST:
-					bstate = deflate_fast(flush);
-					break;
-				case SLOW:
-					bstate = deflate_slow(flush);
-					break;
-				default:
-				}
-
-				if (bstate == FinishStarted || bstate == FinishDone) {
-					status = FINISH_STATE;
-				}
-				if (bstate == NeedMore || bstate == FinishStarted) {
-					if (strm.avail_out === 0) {
-						last_flush = -1; // avoid BUF_ERROR next call, see above
-					}
-					return Z_OK;
-					// If flush != Z_NO_FLUSH && avail_out === 0, the next call
-					// of deflate should use the same flush parameter to make sure
-					// that the flush is complete. So we don't have to output an
-					// empty block here, this will be done at next call. This also
-					// ensures that for a very small output buffer, we emit at most
-					// one empty block.
-				}
-
-				if (bstate == BlockDone) {
-					if (flush == Z_PARTIAL_FLUSH) {
-						_tr_align();
-					} else { // FULL_FLUSH or SYNC_FLUSH
-						_tr_stored_block(0, 0, false);
-						// For a full flush, this empty block will be recognized
-						// as a special marker by inflate_sync().
-						if (flush == Z_FULL_FLUSH) {
-							// state.head[s.hash_size-1]=0;
-							for (i = 0; i < hash_size/*-1*/; i++)
-								// forget history
-								head[i] = 0;
-						}
-					}
-					strm.flush_pending();
-					if (strm.avail_out === 0) {
-						last_flush = -1; // avoid BUF_ERROR at next call, see above
-						return Z_OK;
-					}
-				}
-			}
-
-			if (flush != Z_FINISH)
-				return Z_OK;
-			return Z_STREAM_END;
-		};
-	}
-
-	// ZStream
-
-	function ZStream() {
-		var that = this;
-		that.next_in_index = 0;
-		that.next_out_index = 0;
-		// that.next_in; // next input byte
-		that.avail_in = 0; // number of bytes available at next_in
-		that.total_in = 0; // total nb of input bytes read so far
-		// that.next_out; // next output byte should be put there
-		that.avail_out = 0; // remaining free space at next_out
-		that.total_out = 0; // total nb of bytes output so far
-		// that.msg;
-		// that.dstate;
-	}
-
-	ZStream.prototype = {
-		deflateInit : function(level, bits) {
-			var that = this;
-			that.dstate = new Deflate();
-			if (!bits)
-				bits = MAX_BITS;
-			return that.dstate.deflateInit(that, level, bits);
-		},
-
-		deflate : function(flush) {
-			var that = this;
-			if (!that.dstate) {
-				return Z_STREAM_ERROR;
-			}
-			return that.dstate.deflate(that, flush);
-		},
-
-		deflateEnd : function() {
-			var that = this;
-			if (!that.dstate)
-				return Z_STREAM_ERROR;
-			var ret = that.dstate.deflateEnd();
-			that.dstate = null;
-			return ret;
-		},
-
-		deflateParams : function(level, strategy) {
-			var that = this;
-			if (!that.dstate)
-				return Z_STREAM_ERROR;
-			return that.dstate.deflateParams(that, level, strategy);
-		},
-
-		deflateSetDictionary : function(dictionary, dictLength) {
-			var that = this;
-			if (!that.dstate)
-				return Z_STREAM_ERROR;
-			return that.dstate.deflateSetDictionary(that, dictionary, dictLength);
-		},
-
-		// Read a new buffer from the current input stream, update the
-		// total number of bytes read. All deflate() input goes through
-		// this function so some applications may wish to modify it to avoid
-		// allocating a large strm->next_in buffer and copying from it.
-		// (See also flush_pending()).
-		read_buf : function(buf, start, size) {
-			var that = this;
-			var len = that.avail_in;
-			if (len > size)
-				len = size;
-			if (len === 0)
-				return 0;
-			that.avail_in -= len;
-			buf.set(that.next_in.subarray(that.next_in_index, that.next_in_index + len), start);
-			that.next_in_index += len;
-			that.total_in += len;
-			return len;
-		},
-
-		// Flush as much pending output as possible. All deflate() output goes
-		// through this function so some applications may wish to modify it
-		// to avoid allocating a large strm->next_out buffer and copying into it.
-		// (See also read_buf()).
-		flush_pending : function() {
-			var that = this;
-			var len = that.dstate.pending;
-
-			if (len > that.avail_out)
-				len = that.avail_out;
-			if (len === 0)
-				return;
-
-			// if (that.dstate.pending_buf.length <= that.dstate.pending_out || that.next_out.length <= that.next_out_index
-			// || that.dstate.pending_buf.length < (that.dstate.pending_out + len) || that.next_out.length < (that.next_out_index +
-			// len)) {
-			// console.log(that.dstate.pending_buf.length + ", " + that.dstate.pending_out + ", " + that.next_out.length + ", " +
-			// that.next_out_index + ", " + len);
-			// console.log("avail_out=" + that.avail_out);
-			// }
-
-			that.next_out.set(that.dstate.pending_buf.subarray(that.dstate.pending_out, that.dstate.pending_out + len), that.next_out_index);
-
-			that.next_out_index += len;
-			that.dstate.pending_out += len;
-			that.total_out += len;
-			that.avail_out -= len;
-			that.dstate.pending -= len;
-			if (that.dstate.pending === 0) {
-				that.dstate.pending_out = 0;
-			}
-		}
-	};
-
-	// Deflater
-
-	function Deflater(options) {
-		var that = this;
-		var z = new ZStream();
-		var bufsize = 512;
-		var flush = Z_NO_FLUSH;
-		var buf = new Uint8Array(bufsize);
-		var level = options ? options.level : Z_DEFAULT_COMPRESSION;
-		if (typeof level == "undefined")
-			level = Z_DEFAULT_COMPRESSION;
-		z.deflateInit(level);
-		z.next_out = buf;
-
-		that.append = function(data, onprogress) {
-			var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array;
-			if (!data.length)
-				return;
-			z.next_in_index = 0;
-			z.next_in = data;
-			z.avail_in = data.length;
-			do {
-				z.next_out_index = 0;
-				z.avail_out = bufsize;
-				err = z.deflate(flush);
-				if (err != Z_OK)
-					throw new Error("deflating: " + z.msg);
-				if (z.next_out_index)
-					if (z.next_out_index == bufsize)
-						buffers.push(new Uint8Array(buf));
-					else
-						buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index)));
-				bufferSize += z.next_out_index;
-				if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) {
-					onprogress(z.next_in_index);
-					lastIndex = z.next_in_index;
-				}
-			} while (z.avail_in > 0 || z.avail_out === 0);
-			array = new Uint8Array(bufferSize);
-			buffers.forEach(function(chunk) {
-				array.set(chunk, bufferIndex);
-				bufferIndex += chunk.length;
-			});
-			return array;
-		};
-		that.flush = function() {
-			var err, buffers = [], bufferIndex = 0, bufferSize = 0, array;
-			do {
-				z.next_out_index = 0;
-				z.avail_out = bufsize;
-				err = z.deflate(Z_FINISH);
-				if (err != Z_STREAM_END && err != Z_OK)
-					throw new Error("deflating: " + z.msg);
-				if (bufsize - z.avail_out > 0)
-					buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index)));
-				bufferSize += z.next_out_index;
-			} while (z.avail_in > 0 || z.avail_out === 0);
-			z.deflateEnd();
-			array = new Uint8Array(bufferSize);
-			buffers.forEach(function(chunk) {
-				array.set(chunk, bufferIndex);
-				bufferIndex += chunk.length;
-			});
-			return array;
-		};
-	}
-
-	// 'zip' may not be defined in z-worker and some tests
-	var env = global.zip || global;
-	env.Deflater = env._jzlib_Deflater = Deflater;
-})(this);
diff --git a/vendor/zipjs-browserify/inflate.js b/vendor/zipjs-browserify/inflate.js
deleted file mode 100644
index 7174050c..00000000
--- a/vendor/zipjs-browserify/inflate.js
+++ /dev/null
@@ -1,2155 +0,0 @@
-/*
- Copyright (c) 2013 Gildas Lormeau. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright 
- notice, this list of conditions and the following disclaimer in 
- the documentation and/or other materials provided with the distribution.
-
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
- * JZlib is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-(function(global) {
-	"use strict";
-
-	// Global
-	var MAX_BITS = 15;
-
-	var Z_OK = 0;
-	var Z_STREAM_END = 1;
-	var Z_NEED_DICT = 2;
-	var Z_STREAM_ERROR = -2;
-	var Z_DATA_ERROR = -3;
-	var Z_MEM_ERROR = -4;
-	var Z_BUF_ERROR = -5;
-
-	var inflate_mask = [ 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff,
-			0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff ];
-
-	var MANY = 1440;
-
-	// JZlib version : "1.0.2"
-	var Z_NO_FLUSH = 0;
-	var Z_FINISH = 4;
-
-	// InfTree
-	var fixed_bl = 9;
-	var fixed_bd = 5;
-
-	var fixed_tl = [ 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0,
-			0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40,
-			0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13,
-			0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60,
-			0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7,
-			35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8,
-			26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80,
-			7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0,
-			8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0,
-			8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97,
-			0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210,
-			81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117,
-			0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154,
-			84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83,
-			0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230,
-			80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139,
-			0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174,
-			0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111,
-			0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9,
-			193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8,
-			120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8,
-			227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8,
-			92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9,
-			249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8,
-			130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9,
-			181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8,
-			102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9,
-			221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0,
-			8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9,
-			147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8,
-			85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9,
-			235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8,
-			141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9,
-			167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8,
-			107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9,
-			207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8,
-			127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255 ];
-	var fixed_td = [ 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5,
-			8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5,
-			24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 ];
-
-	// Tables for deflate from PKZIP's appnote.txt.
-	var cplens = [ // Copy lengths for literal codes 257..285
-	3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 ];
-
-	// see note #13 above about 258
-	var cplext = [ // Extra bits for literal codes 257..285
-	0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid
-	];
-
-	var cpdist = [ // Copy offsets for distance codes 0..29
-	1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];
-
-	var cpdext = [ // Extra bits for distance codes
-	0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ];
-
-	// If BMAX needs to be larger than 16, then h and x[] should be uLong.
-	var BMAX = 15; // maximum bit length of any code
-
-	function InfTree() {
-		var that = this;
-
-		var hn; // hufts used in space
-		var v; // work area for huft_build
-		var c; // bit length count table
-		var r; // table entry for structure assignment
-		var u; // table stack
-		var x; // bit offsets, then code stack
-
-		function huft_build(b, // code lengths in bits (all assumed <=
-		// BMAX)
-		bindex, n, // number of codes (assumed <= 288)
-		s, // number of simple-valued codes (0..s-1)
-		d, // list of base values for non-simple codes
-		e, // list of extra bits for non-simple codes
-		t, // result: starting table
-		m, // maximum lookup bits, returns actual
-		hp,// space for trees
-		hn,// hufts used in space
-		v // working area: values in order of bit length
-		) {
-			// Given a list of code lengths and a maximum table size, make a set of
-			// tables to decode that set of codes. Return Z_OK on success,
-			// Z_BUF_ERROR
-			// if the given code set is incomplete (the tables are still built in
-			// this
-			// case), Z_DATA_ERROR if the input is invalid (an over-subscribed set
-			// of
-			// lengths), or Z_MEM_ERROR if not enough memory.
-
-			var a; // counter for codes of length k
-			var f; // i repeats in table every f entries
-			var g; // maximum code length
-			var h; // table level
-			var i; // counter, current code
-			var j; // counter
-			var k; // number of bits in current code
-			var l; // bits per table (returned in m)
-			var mask; // (1 << w) - 1, to avoid cc -O bug on HP
-			var p; // pointer into c[], b[], or v[]
-			var q; // points to current table
-			var w; // bits before this table == (l * h)
-			var xp; // pointer into x
-			var y; // number of dummy codes added
-			var z; // number of entries in current table
-
-			// Generate counts for each bit length
-
-			p = 0;
-			i = n;
-			do {
-				c[b[bindex + p]]++;
-				p++;
-				i--; // assume all entries <= BMAX
-			} while (i !== 0);
-
-			if (c[0] == n) { // null input--all zero length codes
-				t[0] = -1;
-				m[0] = 0;
-				return Z_OK;
-			}
-
-			// Find minimum and maximum length, bound *m by those
-			l = m[0];
-			for (j = 1; j <= BMAX; j++)
-				if (c[j] !== 0)
-					break;
-			k = j; // minimum code length
-			if (l < j) {
-				l = j;
-			}
-			for (i = BMAX; i !== 0; i--) {
-				if (c[i] !== 0)
-					break;
-			}
-			g = i; // maximum code length
-			if (l > i) {
-				l = i;
-			}
-			m[0] = l;
-
-			// Adjust last length count to fill out codes, if needed
-			for (y = 1 << j; j < i; j++, y <<= 1) {
-				if ((y -= c[j]) < 0) {
-					return Z_DATA_ERROR;
-				}
-			}
-			if ((y -= c[i]) < 0) {
-				return Z_DATA_ERROR;
-			}
-			c[i] += y;
-
-			// Generate starting offsets into the value table for each length
-			x[1] = j = 0;
-			p = 1;
-			xp = 2;
-			while (--i !== 0) { // note that i == g from above
-				x[xp] = (j += c[p]);
-				xp++;
-				p++;
-			}
-
-			// Make a table of values in order of bit lengths
-			i = 0;
-			p = 0;
-			do {
-				if ((j = b[bindex + p]) !== 0) {
-					v[x[j]++] = i;
-				}
-				p++;
-			} while (++i < n);
-			n = x[g]; // set n to length of v
-
-			// Generate the Huffman codes and for each, make the table entries
-			x[0] = i = 0; // first Huffman code is zero
-			p = 0; // grab values in bit order
-			h = -1; // no tables yet--level -1
-			w = -l; // bits decoded == (l * h)
-			u[0] = 0; // just to keep compilers happy
-			q = 0; // ditto
-			z = 0; // ditto
-
-			// go through the bit lengths (k already is bits in shortest code)
-			for (; k <= g; k++) {
-				a = c[k];
-				while (a-- !== 0) {
-					// here i is the Huffman code of length k bits for value *p
-					// make tables up to required level
-					while (k > w + l) {
-						h++;
-						w += l; // previous table always l bits
-						// compute minimum size table less than or equal to l bits
-						z = g - w;
-						z = (z > l) ? l : z; // table size upper limit
-						if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table
-							// too few codes for
-							// k-w bit table
-							f -= a + 1; // deduct codes from patterns left
-							xp = k;
-							if (j < z) {
-								while (++j < z) { // try smaller tables up to z bits
-									if ((f <<= 1) <= c[++xp])
-										break; // enough codes to use up j bits
-									f -= c[xp]; // else deduct codes from patterns
-								}
-							}
-						}
-						z = 1 << j; // table entries for j-bit table
-
-						// allocate new table
-						if (hn[0] + z > MANY) { // (note: doesn't matter for fixed)
-							return Z_DATA_ERROR; // overflow of MANY
-						}
-						u[h] = q = /* hp+ */hn[0]; // DEBUG
-						hn[0] += z;
-
-						// connect to last table, if there is one
-						if (h !== 0) {
-							x[h] = i; // save pattern for backing up
-							r[0] = /* (byte) */j; // bits in this table
-							r[1] = /* (byte) */l; // bits to dump before this table
-							j = i >>> (w - l);
-							r[2] = /* (int) */(q - u[h - 1] - j); // offset to this table
-							hp.set(r, (u[h - 1] + j) * 3);
-							// to
-							// last
-							// table
-						} else {
-							t[0] = q; // first table is returned result
-						}
-					}
-
-					// set up table entry in r
-					r[1] = /* (byte) */(k - w);
-					if (p >= n) {
-						r[0] = 128 + 64; // out of values--invalid code
-					} else if (v[p] < s) {
-						r[0] = /* (byte) */(v[p] < 256 ? 0 : 32 + 64); // 256 is
-						// end-of-block
-						r[2] = v[p++]; // simple code is just the value
-					} else {
-						r[0] = /* (byte) */(e[v[p] - s] + 16 + 64); // non-simple--look
-						// up in lists
-						r[2] = d[v[p++] - s];
-					}
-
-					// fill code-like entries with r
-					f = 1 << (k - w);
-					for (j = i >>> w; j < z; j += f) {
-						hp.set(r, (q + j) * 3);
-					}
-
-					// backwards increment the k-bit code i
-					for (j = 1 << (k - 1); (i & j) !== 0; j >>>= 1) {
-						i ^= j;
-					}
-					i ^= j;
-
-					// backup over finished tables
-					mask = (1 << w) - 1; // needed on HP, cc -O bug
-					while ((i & mask) != x[h]) {
-						h--; // don't need to update q
-						w -= l;
-						mask = (1 << w) - 1;
-					}
-				}
-			}
-			// Return Z_BUF_ERROR if we were given an incomplete table
-			return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-		}
-
-		function initWorkArea(vsize) {
-			var i;
-			if (!hn) {
-				hn = []; // []; //new Array(1);
-				v = []; // new Array(vsize);
-				c = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
-				r = []; // new Array(3);
-				u = new Int32Array(BMAX); // new Array(BMAX);
-				x = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
-			}
-			if (v.length < vsize) {
-				v = []; // new Array(vsize);
-			}
-			for (i = 0; i < vsize; i++) {
-				v[i] = 0;
-			}
-			for (i = 0; i < BMAX + 1; i++) {
-				c[i] = 0;
-			}
-			for (i = 0; i < 3; i++) {
-				r[i] = 0;
-			}
-			// for(int i=0; i 257)) {
-				if (result == Z_DATA_ERROR) {
-					z.msg = "oversubscribed distance tree";
-				} else if (result == Z_BUF_ERROR) {
-					z.msg = "incomplete distance tree";
-					result = Z_DATA_ERROR;
-				} else if (result != Z_MEM_ERROR) {
-					z.msg = "empty distance tree with lengths";
-					result = Z_DATA_ERROR;
-				}
-				return result;
-			}
-
-			return Z_OK;
-		};
-
-	}
-
-	InfTree.inflate_trees_fixed = function(bl, // literal desired/actual bit depth
-	bd, // distance desired/actual bit depth
-	tl,// literal/length tree result
-	td// distance tree result
-	) {
-		bl[0] = fixed_bl;
-		bd[0] = fixed_bd;
-		tl[0] = fixed_tl;
-		td[0] = fixed_td;
-		return Z_OK;
-	};
-
-	// InfCodes
-
-	// waiting for "i:"=input,
-	// "o:"=output,
-	// "x:"=nothing
-	var START = 0; // x: set up for LEN
-	var LEN = 1; // i: get length/literal/eob next
-	var LENEXT = 2; // i: getting length extra (have base)
-	var DIST = 3; // i: get distance next
-	var DISTEXT = 4;// i: getting distance extra
-	var COPY = 5; // o: copying bytes in window, waiting
-	// for space
-	var LIT = 6; // o: got literal, waiting for output
-	// space
-	var WASH = 7; // o: got eob, possibly still output
-	// waiting
-	var END = 8; // x: got eob and all data flushed
-	var BADCODE = 9;// x: got error
-
-	function InfCodes() {
-		var that = this;
-
-		var mode; // current inflate_codes mode
-
-		// mode dependent information
-		var len = 0;
-
-		var tree; // pointer into tree
-		var tree_index = 0;
-		var need = 0; // bits needed
-
-		var lit = 0;
-
-		// if EXT or COPY, where and how much
-		var get = 0; // bits to get for extra
-		var dist = 0; // distance back to copy from
-
-		var lbits = 0; // ltree bits decoded per branch
-		var dbits = 0; // dtree bits decoder per branch
-		var ltree; // literal/length/eob tree
-		var ltree_index = 0; // literal/length/eob tree
-		var dtree; // distance tree
-		var dtree_index = 0; // distance tree
-
-		// Called with number of bytes left to write in window at least 258
-		// (the maximum string length) and number of input bytes available
-		// at least ten. The ten bytes are six bytes for the longest length/
-		// distance pair plus four bytes for overloading the bit buffer.
-
-		function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) {
-			var t; // temporary pointer
-			var tp; // temporary pointer
-			var tp_index; // temporary pointer
-			var e; // extra bits or operation
-			var b; // bit buffer
-			var k; // bits in bit buffer
-			var p; // input data pointer
-			var n; // bytes available there
-			var q; // output window write pointer
-			var m; // bytes to end of window or read pointer
-			var ml; // mask for literal/length tree
-			var md; // mask for distance tree
-			var c; // bytes to copy
-			var d; // distance back to copy from
-			var r; // copy source pointer
-
-			var tp_index_t_3; // (tp_index+t)*3
-
-			// load input, output, bit values
-			p = z.next_in_index;
-			n = z.avail_in;
-			b = s.bitb;
-			k = s.bitk;
-			q = s.write;
-			m = q < s.read ? s.read - q - 1 : s.end - q;
-
-			// initialize masks
-			ml = inflate_mask[bl];
-			md = inflate_mask[bd];
-
-			// do until not enough input or output space for fast loop
-			do { // assume called with m >= 258 && n >= 10
-				// get literal/length code
-				while (k < (20)) { // max bits for literal/length code
-					n--;
-					b |= (z.read_byte(p++) & 0xff) << k;
-					k += 8;
-				}
-
-				t = b & ml;
-				tp = tl;
-				tp_index = tl_index;
-				tp_index_t_3 = (tp_index + t) * 3;
-				if ((e = tp[tp_index_t_3]) === 0) {
-					b >>= (tp[tp_index_t_3 + 1]);
-					k -= (tp[tp_index_t_3 + 1]);
-
-					s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2];
-					m--;
-					continue;
-				}
-				do {
-
-					b >>= (tp[tp_index_t_3 + 1]);
-					k -= (tp[tp_index_t_3 + 1]);
-
-					if ((e & 16) !== 0) {
-						e &= 15;
-						c = tp[tp_index_t_3 + 2] + (/* (int) */b & inflate_mask[e]);
-
-						b >>= e;
-						k -= e;
-
-						// decode distance base of block to copy
-						while (k < (15)) { // max bits for distance code
-							n--;
-							b |= (z.read_byte(p++) & 0xff) << k;
-							k += 8;
-						}
-
-						t = b & md;
-						tp = td;
-						tp_index = td_index;
-						tp_index_t_3 = (tp_index + t) * 3;
-						e = tp[tp_index_t_3];
-
-						do {
-
-							b >>= (tp[tp_index_t_3 + 1]);
-							k -= (tp[tp_index_t_3 + 1]);
-
-							if ((e & 16) !== 0) {
-								// get extra bits to add to distance base
-								e &= 15;
-								while (k < (e)) { // get extra bits (up to 13)
-									n--;
-									b |= (z.read_byte(p++) & 0xff) << k;
-									k += 8;
-								}
-
-								d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]);
-
-								b >>= (e);
-								k -= (e);
-
-								// do the copy
-								m -= c;
-								if (q >= d) { // offset before dest
-									// just copy
-									r = q - d;
-									if (q - r > 0 && 2 > (q - r)) {
-										s.window[q++] = s.window[r++]; // minimum
-										// count is
-										// three,
-										s.window[q++] = s.window[r++]; // so unroll
-										// loop a
-										// little
-										c -= 2;
-									} else {
-										s.window.set(s.window.subarray(r, r + 2), q);
-										q += 2;
-										r += 2;
-										c -= 2;
-									}
-								} else { // else offset after destination
-									r = q - d;
-									do {
-										r += s.end; // force pointer in window
-									} while (r < 0); // covers invalid distances
-									e = s.end - r;
-									if (c > e) { // if source crosses,
-										c -= e; // wrapped copy
-										if (q - r > 0 && e > (q - r)) {
-											do {
-												s.window[q++] = s.window[r++];
-											} while (--e !== 0);
-										} else {
-											s.window.set(s.window.subarray(r, r + e), q);
-											q += e;
-											r += e;
-											e = 0;
-										}
-										r = 0; // copy rest from start of window
-									}
-
-								}
-
-								// copy all or what's left
-								if (q - r > 0 && c > (q - r)) {
-									do {
-										s.window[q++] = s.window[r++];
-									} while (--c !== 0);
-								} else {
-									s.window.set(s.window.subarray(r, r + c), q);
-									q += c;
-									r += c;
-									c = 0;
-								}
-								break;
-							} else if ((e & 64) === 0) {
-								t += tp[tp_index_t_3 + 2];
-								t += (b & inflate_mask[e]);
-								tp_index_t_3 = (tp_index + t) * 3;
-								e = tp[tp_index_t_3];
-							} else {
-								z.msg = "invalid distance code";
-
-								c = z.avail_in - n;
-								c = (k >> 3) < c ? k >> 3 : c;
-								n += c;
-								p -= c;
-								k -= c << 3;
-
-								s.bitb = b;
-								s.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								s.write = q;
-
-								return Z_DATA_ERROR;
-							}
-						} while (true);
-						break;
-					}
-
-					if ((e & 64) === 0) {
-						t += tp[tp_index_t_3 + 2];
-						t += (b & inflate_mask[e]);
-						tp_index_t_3 = (tp_index + t) * 3;
-						if ((e = tp[tp_index_t_3]) === 0) {
-
-							b >>= (tp[tp_index_t_3 + 1]);
-							k -= (tp[tp_index_t_3 + 1]);
-
-							s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2];
-							m--;
-							break;
-						}
-					} else if ((e & 32) !== 0) {
-
-						c = z.avail_in - n;
-						c = (k >> 3) < c ? k >> 3 : c;
-						n += c;
-						p -= c;
-						k -= c << 3;
-
-						s.bitb = b;
-						s.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						s.write = q;
-
-						return Z_STREAM_END;
-					} else {
-						z.msg = "invalid literal/length code";
-
-						c = z.avail_in - n;
-						c = (k >> 3) < c ? k >> 3 : c;
-						n += c;
-						p -= c;
-						k -= c << 3;
-
-						s.bitb = b;
-						s.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						s.write = q;
-
-						return Z_DATA_ERROR;
-					}
-				} while (true);
-			} while (m >= 258 && n >= 10);
-
-			// not enough input or output--restore pointers and return
-			c = z.avail_in - n;
-			c = (k >> 3) < c ? k >> 3 : c;
-			n += c;
-			p -= c;
-			k -= c << 3;
-
-			s.bitb = b;
-			s.bitk = k;
-			z.avail_in = n;
-			z.total_in += p - z.next_in_index;
-			z.next_in_index = p;
-			s.write = q;
-
-			return Z_OK;
-		}
-
-		that.init = function(bl, bd, tl, tl_index, td, td_index) {
-			mode = START;
-			lbits = /* (byte) */bl;
-			dbits = /* (byte) */bd;
-			ltree = tl;
-			ltree_index = tl_index;
-			dtree = td;
-			dtree_index = td_index;
-			tree = null;
-		};
-
-		that.proc = function(s, z, r) {
-			var j; // temporary storage
-			var tindex; // temporary pointer
-			var e; // extra bits or operation
-			var b = 0; // bit buffer
-			var k = 0; // bits in bit buffer
-			var p = 0; // input data pointer
-			var n; // bytes available there
-			var q; // output window write pointer
-			var m; // bytes to end of window or read pointer
-			var f; // pointer to copy strings from
-
-			// copy input/output information to locals (UPDATE macro restores)
-			p = z.next_in_index;
-			n = z.avail_in;
-			b = s.bitb;
-			k = s.bitk;
-			q = s.write;
-			m = q < s.read ? s.read - q - 1 : s.end - q;
-
-			// process input and output based on current state
-			while (true) {
-				switch (mode) {
-				// waiting for "i:"=input, "o:"=output, "x:"=nothing
-				case START: // x: set up for LEN
-					if (m >= 258 && n >= 10) {
-
-						s.bitb = b;
-						s.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						s.write = q;
-						r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z);
-
-						p = z.next_in_index;
-						n = z.avail_in;
-						b = s.bitb;
-						k = s.bitk;
-						q = s.write;
-						m = q < s.read ? s.read - q - 1 : s.end - q;
-
-						if (r != Z_OK) {
-							mode = r == Z_STREAM_END ? WASH : BADCODE;
-							break;
-						}
-					}
-					need = lbits;
-					tree = ltree;
-					tree_index = ltree_index;
-
-					mode = LEN;
-					/* falls through */
-				case LEN: // i: get length/literal/eob next
-					j = need;
-
-					while (k < (j)) {
-						if (n !== 0)
-							r = Z_OK;
-						else {
-
-							s.bitb = b;
-							s.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							s.write = q;
-							return s.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					tindex = (tree_index + (b & inflate_mask[j])) * 3;
-
-					b >>>= (tree[tindex + 1]);
-					k -= (tree[tindex + 1]);
-
-					e = tree[tindex];
-
-					if (e === 0) { // literal
-						lit = tree[tindex + 2];
-						mode = LIT;
-						break;
-					}
-					if ((e & 16) !== 0) { // length
-						get = e & 15;
-						len = tree[tindex + 2];
-						mode = LENEXT;
-						break;
-					}
-					if ((e & 64) === 0) { // next table
-						need = e;
-						tree_index = tindex / 3 + tree[tindex + 2];
-						break;
-					}
-					if ((e & 32) !== 0) { // end of block
-						mode = WASH;
-						break;
-					}
-					mode = BADCODE; // invalid code
-					z.msg = "invalid literal/length code";
-					r = Z_DATA_ERROR;
-
-					s.bitb = b;
-					s.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					s.write = q;
-					return s.inflate_flush(z, r);
-
-				case LENEXT: // i: getting length extra (have base)
-					j = get;
-
-					while (k < (j)) {
-						if (n !== 0)
-							r = Z_OK;
-						else {
-
-							s.bitb = b;
-							s.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							s.write = q;
-							return s.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					len += (b & inflate_mask[j]);
-
-					b >>= j;
-					k -= j;
-
-					need = dbits;
-					tree = dtree;
-					tree_index = dtree_index;
-					mode = DIST;
-					/* falls through */
-				case DIST: // i: get distance next
-					j = need;
-
-					while (k < (j)) {
-						if (n !== 0)
-							r = Z_OK;
-						else {
-
-							s.bitb = b;
-							s.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							s.write = q;
-							return s.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					tindex = (tree_index + (b & inflate_mask[j])) * 3;
-
-					b >>= tree[tindex + 1];
-					k -= tree[tindex + 1];
-
-					e = (tree[tindex]);
-					if ((e & 16) !== 0) { // distance
-						get = e & 15;
-						dist = tree[tindex + 2];
-						mode = DISTEXT;
-						break;
-					}
-					if ((e & 64) === 0) { // next table
-						need = e;
-						tree_index = tindex / 3 + tree[tindex + 2];
-						break;
-					}
-					mode = BADCODE; // invalid code
-					z.msg = "invalid distance code";
-					r = Z_DATA_ERROR;
-
-					s.bitb = b;
-					s.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					s.write = q;
-					return s.inflate_flush(z, r);
-
-				case DISTEXT: // i: getting distance extra
-					j = get;
-
-					while (k < (j)) {
-						if (n !== 0)
-							r = Z_OK;
-						else {
-
-							s.bitb = b;
-							s.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							s.write = q;
-							return s.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					dist += (b & inflate_mask[j]);
-
-					b >>= j;
-					k -= j;
-
-					mode = COPY;
-					/* falls through */
-				case COPY: // o: copying bytes in window, waiting for space
-					f = q - dist;
-					while (f < 0) { // modulo window size-"while" instead
-						f += s.end; // of "if" handles invalid distances
-					}
-					while (len !== 0) {
-
-						if (m === 0) {
-							if (q == s.end && s.read !== 0) {
-								q = 0;
-								m = q < s.read ? s.read - q - 1 : s.end - q;
-							}
-							if (m === 0) {
-								s.write = q;
-								r = s.inflate_flush(z, r);
-								q = s.write;
-								m = q < s.read ? s.read - q - 1 : s.end - q;
-
-								if (q == s.end && s.read !== 0) {
-									q = 0;
-									m = q < s.read ? s.read - q - 1 : s.end - q;
-								}
-
-								if (m === 0) {
-									s.bitb = b;
-									s.bitk = k;
-									z.avail_in = n;
-									z.total_in += p - z.next_in_index;
-									z.next_in_index = p;
-									s.write = q;
-									return s.inflate_flush(z, r);
-								}
-							}
-						}
-
-						s.window[q++] = s.window[f++];
-						m--;
-
-						if (f == s.end)
-							f = 0;
-						len--;
-					}
-					mode = START;
-					break;
-				case LIT: // o: got literal, waiting for output space
-					if (m === 0) {
-						if (q == s.end && s.read !== 0) {
-							q = 0;
-							m = q < s.read ? s.read - q - 1 : s.end - q;
-						}
-						if (m === 0) {
-							s.write = q;
-							r = s.inflate_flush(z, r);
-							q = s.write;
-							m = q < s.read ? s.read - q - 1 : s.end - q;
-
-							if (q == s.end && s.read !== 0) {
-								q = 0;
-								m = q < s.read ? s.read - q - 1 : s.end - q;
-							}
-							if (m === 0) {
-								s.bitb = b;
-								s.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								s.write = q;
-								return s.inflate_flush(z, r);
-							}
-						}
-					}
-					r = Z_OK;
-
-					s.window[q++] = /* (byte) */lit;
-					m--;
-
-					mode = START;
-					break;
-				case WASH: // o: got eob, possibly more output
-					if (k > 7) { // return unused byte, if any
-						k -= 8;
-						n++;
-						p--; // can always return one
-					}
-
-					s.write = q;
-					r = s.inflate_flush(z, r);
-					q = s.write;
-					m = q < s.read ? s.read - q - 1 : s.end - q;
-
-					if (s.read != s.write) {
-						s.bitb = b;
-						s.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						s.write = q;
-						return s.inflate_flush(z, r);
-					}
-					mode = END;
-					/* falls through */
-				case END:
-					r = Z_STREAM_END;
-					s.bitb = b;
-					s.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					s.write = q;
-					return s.inflate_flush(z, r);
-
-				case BADCODE: // x: got error
-
-					r = Z_DATA_ERROR;
-
-					s.bitb = b;
-					s.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					s.write = q;
-					return s.inflate_flush(z, r);
-
-				default:
-					r = Z_STREAM_ERROR;
-
-					s.bitb = b;
-					s.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					s.write = q;
-					return s.inflate_flush(z, r);
-				}
-			}
-		};
-
-		that.free = function() {
-			// ZFREE(z, c);
-		};
-
-	}
-
-	// InfBlocks
-
-	// Table for deflate from PKZIP's appnote.txt.
-	var border = [ // Order of the bit length code lengths
-	16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
-
-	var TYPE = 0; // get type bits (3, including end bit)
-	var LENS = 1; // get lengths for stored
-	var STORED = 2;// processing stored block
-	var TABLE = 3; // get table lengths
-	var BTREE = 4; // get bit lengths tree for a dynamic
-	// block
-	var DTREE = 5; // get length, distance trees for a
-	// dynamic block
-	var CODES = 6; // processing fixed or dynamic block
-	var DRY = 7; // output remaining window bytes
-	var DONELOCKS = 8; // finished last block, done
-	var BADBLOCKS = 9; // ot a data error--stuck here
-
-	function InfBlocks(z, w) {
-		var that = this;
-
-		var mode = TYPE; // current inflate_block mode
-
-		var left = 0; // if STORED, bytes left to copy
-
-		var table = 0; // table lengths (14 bits)
-		var index = 0; // index into blens (or border)
-		var blens; // bit lengths of codes
-		var bb = [ 0 ]; // bit length tree depth
-		var tb = [ 0 ]; // bit length decoding tree
-
-		var codes = new InfCodes(); // if CODES, current state
-
-		var last = 0; // true if this block is the last block
-
-		var hufts = new Int32Array(MANY * 3); // single malloc for tree space
-		var check = 0; // check on output
-		var inftree = new InfTree();
-
-		that.bitk = 0; // bits in bit buffer
-		that.bitb = 0; // bit buffer
-		that.window = new Uint8Array(w); // sliding window
-		that.end = w; // one byte after sliding window
-		that.read = 0; // window read pointer
-		that.write = 0; // window write pointer
-
-		that.reset = function(z, c) {
-			if (c)
-				c[0] = check;
-			// if (mode == BTREE || mode == DTREE) {
-			// }
-			if (mode == CODES) {
-				codes.free(z);
-			}
-			mode = TYPE;
-			that.bitk = 0;
-			that.bitb = 0;
-			that.read = that.write = 0;
-		};
-
-		that.reset(z, null);
-
-		// copy as much as possible from the sliding window to the output area
-		that.inflate_flush = function(z, r) {
-			var n;
-			var p;
-			var q;
-
-			// local copies of source and destination pointers
-			p = z.next_out_index;
-			q = that.read;
-
-			// compute number of bytes to copy as far as end of window
-			n = /* (int) */((q <= that.write ? that.write : that.end) - q);
-			if (n > z.avail_out)
-				n = z.avail_out;
-			if (n !== 0 && r == Z_BUF_ERROR)
-				r = Z_OK;
-
-			// update counters
-			z.avail_out -= n;
-			z.total_out += n;
-
-			// copy as far as end of window
-			z.next_out.set(that.window.subarray(q, q + n), p);
-			p += n;
-			q += n;
-
-			// see if more to copy at beginning of window
-			if (q == that.end) {
-				// wrap pointers
-				q = 0;
-				if (that.write == that.end)
-					that.write = 0;
-
-				// compute bytes to copy
-				n = that.write - q;
-				if (n > z.avail_out)
-					n = z.avail_out;
-				if (n !== 0 && r == Z_BUF_ERROR)
-					r = Z_OK;
-
-				// update counters
-				z.avail_out -= n;
-				z.total_out += n;
-
-				// copy
-				z.next_out.set(that.window.subarray(q, q + n), p);
-				p += n;
-				q += n;
-			}
-
-			// update pointers
-			z.next_out_index = p;
-			that.read = q;
-
-			// done
-			return r;
-		};
-
-		that.proc = function(z, r) {
-			var t; // temporary storage
-			var b; // bit buffer
-			var k; // bits in bit buffer
-			var p; // input data pointer
-			var n; // bytes available there
-			var q; // output window write pointer
-			var m; // bytes to end of window or read pointer
-
-			var i;
-
-			// copy input/output information to locals (UPDATE macro restores)
-			// {
-			p = z.next_in_index;
-			n = z.avail_in;
-			b = that.bitb;
-			k = that.bitk;
-			// }
-			// {
-			q = that.write;
-			m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-			// }
-
-			// process input based on current state
-			// DEBUG dtree
-			while (true) {
-				switch (mode) {
-				case TYPE:
-
-					while (k < (3)) {
-						if (n !== 0) {
-							r = Z_OK;
-						} else {
-							that.bitb = b;
-							that.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							that.write = q;
-							return that.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-					t = /* (int) */(b & 7);
-					last = t & 1;
-
-					switch (t >>> 1) {
-					case 0: // stored
-						// {
-						b >>>= (3);
-						k -= (3);
-						// }
-						t = k & 7; // go to byte boundary
-
-						// {
-						b >>>= (t);
-						k -= (t);
-						// }
-						mode = LENS; // get length of stored block
-						break;
-					case 1: // fixed
-						// {
-						var bl = []; // new Array(1);
-						var bd = []; // new Array(1);
-						var tl = [ [] ]; // new Array(1);
-						var td = [ [] ]; // new Array(1);
-
-						InfTree.inflate_trees_fixed(bl, bd, tl, td);
-						codes.init(bl[0], bd[0], tl[0], 0, td[0], 0);
-						// }
-
-						// {
-						b >>>= (3);
-						k -= (3);
-						// }
-
-						mode = CODES;
-						break;
-					case 2: // dynamic
-
-						// {
-						b >>>= (3);
-						k -= (3);
-						// }
-
-						mode = TABLE;
-						break;
-					case 3: // illegal
-
-						// {
-						b >>>= (3);
-						k -= (3);
-						// }
-						mode = BADBLOCKS;
-						z.msg = "invalid block type";
-						r = Z_DATA_ERROR;
-
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-					break;
-				case LENS:
-
-					while (k < (32)) {
-						if (n !== 0) {
-							r = Z_OK;
-						} else {
-							that.bitb = b;
-							that.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							that.write = q;
-							return that.inflate_flush(z, r);
-						}
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					if ((((~b) >>> 16) & 0xffff) != (b & 0xffff)) {
-						mode = BADBLOCKS;
-						z.msg = "invalid stored block lengths";
-						r = Z_DATA_ERROR;
-
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-					left = (b & 0xffff);
-					b = k = 0; // dump bits
-					mode = left !== 0 ? STORED : (last !== 0 ? DRY : TYPE);
-					break;
-				case STORED:
-					if (n === 0) {
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-
-					if (m === 0) {
-						if (q == that.end && that.read !== 0) {
-							q = 0;
-							m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-						}
-						if (m === 0) {
-							that.write = q;
-							r = that.inflate_flush(z, r);
-							q = that.write;
-							m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-							if (q == that.end && that.read !== 0) {
-								q = 0;
-								m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-							}
-							if (m === 0) {
-								that.bitb = b;
-								that.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								that.write = q;
-								return that.inflate_flush(z, r);
-							}
-						}
-					}
-					r = Z_OK;
-
-					t = left;
-					if (t > n)
-						t = n;
-					if (t > m)
-						t = m;
-					that.window.set(z.read_buf(p, t), q);
-					p += t;
-					n -= t;
-					q += t;
-					m -= t;
-					if ((left -= t) !== 0)
-						break;
-					mode = last !== 0 ? DRY : TYPE;
-					break;
-				case TABLE:
-
-					while (k < (14)) {
-						if (n !== 0) {
-							r = Z_OK;
-						} else {
-							that.bitb = b;
-							that.bitk = k;
-							z.avail_in = n;
-							z.total_in += p - z.next_in_index;
-							z.next_in_index = p;
-							that.write = q;
-							return that.inflate_flush(z, r);
-						}
-
-						n--;
-						b |= (z.read_byte(p++) & 0xff) << k;
-						k += 8;
-					}
-
-					table = t = (b & 0x3fff);
-					if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) {
-						mode = BADBLOCKS;
-						z.msg = "too many length or distance symbols";
-						r = Z_DATA_ERROR;
-
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-					t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
-					if (!blens || blens.length < t) {
-						blens = []; // new Array(t);
-					} else {
-						for (i = 0; i < t; i++) {
-							blens[i] = 0;
-						}
-					}
-
-					// {
-					b >>>= (14);
-					k -= (14);
-					// }
-
-					index = 0;
-					mode = BTREE;
-					/* falls through */
-				case BTREE:
-					while (index < 4 + (table >>> 10)) {
-						while (k < (3)) {
-							if (n !== 0) {
-								r = Z_OK;
-							} else {
-								that.bitb = b;
-								that.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								that.write = q;
-								return that.inflate_flush(z, r);
-							}
-							n--;
-							b |= (z.read_byte(p++) & 0xff) << k;
-							k += 8;
-						}
-
-						blens[border[index++]] = b & 7;
-
-						// {
-						b >>>= (3);
-						k -= (3);
-						// }
-					}
-
-					while (index < 19) {
-						blens[border[index++]] = 0;
-					}
-
-					bb[0] = 7;
-					t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z);
-					if (t != Z_OK) {
-						r = t;
-						if (r == Z_DATA_ERROR) {
-							blens = null;
-							mode = BADBLOCKS;
-						}
-
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-
-					index = 0;
-					mode = DTREE;
-					/* falls through */
-				case DTREE:
-					while (true) {
-						t = table;
-						if (index >= 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) {
-							break;
-						}
-
-						var j, c;
-
-						t = bb[0];
-
-						while (k < (t)) {
-							if (n !== 0) {
-								r = Z_OK;
-							} else {
-								that.bitb = b;
-								that.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								that.write = q;
-								return that.inflate_flush(z, r);
-							}
-							n--;
-							b |= (z.read_byte(p++) & 0xff) << k;
-							k += 8;
-						}
-
-						// if (tb[0] == -1) {
-						// System.err.println("null...");
-						// }
-
-						t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1];
-						c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2];
-
-						if (c < 16) {
-							b >>>= (t);
-							k -= (t);
-							blens[index++] = c;
-						} else { // c == 16..18
-							i = c == 18 ? 7 : c - 14;
-							j = c == 18 ? 11 : 3;
-
-							while (k < (t + i)) {
-								if (n !== 0) {
-									r = Z_OK;
-								} else {
-									that.bitb = b;
-									that.bitk = k;
-									z.avail_in = n;
-									z.total_in += p - z.next_in_index;
-									z.next_in_index = p;
-									that.write = q;
-									return that.inflate_flush(z, r);
-								}
-								n--;
-								b |= (z.read_byte(p++) & 0xff) << k;
-								k += 8;
-							}
-
-							b >>>= (t);
-							k -= (t);
-
-							j += (b & inflate_mask[i]);
-
-							b >>>= (i);
-							k -= (i);
-
-							i = index;
-							t = table;
-							if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) {
-								blens = null;
-								mode = BADBLOCKS;
-								z.msg = "invalid bit length repeat";
-								r = Z_DATA_ERROR;
-
-								that.bitb = b;
-								that.bitk = k;
-								z.avail_in = n;
-								z.total_in += p - z.next_in_index;
-								z.next_in_index = p;
-								that.write = q;
-								return that.inflate_flush(z, r);
-							}
-
-							c = c == 16 ? blens[i - 1] : 0;
-							do {
-								blens[i++] = c;
-							} while (--j !== 0);
-							index = i;
-						}
-					}
-
-					tb[0] = -1;
-					// {
-					var bl_ = []; // new Array(1);
-					var bd_ = []; // new Array(1);
-					var tl_ = []; // new Array(1);
-					var td_ = []; // new Array(1);
-					bl_[0] = 9; // must be <= 9 for lookahead assumptions
-					bd_[0] = 6; // must be <= 9 for lookahead assumptions
-
-					t = table;
-					t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z);
-
-					if (t != Z_OK) {
-						if (t == Z_DATA_ERROR) {
-							blens = null;
-							mode = BADBLOCKS;
-						}
-						r = t;
-
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-					codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]);
-					// }
-					mode = CODES;
-					/* falls through */
-				case CODES:
-					that.bitb = b;
-					that.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					that.write = q;
-
-					if ((r = codes.proc(that, z, r)) != Z_STREAM_END) {
-						return that.inflate_flush(z, r);
-					}
-					r = Z_OK;
-					codes.free(z);
-
-					p = z.next_in_index;
-					n = z.avail_in;
-					b = that.bitb;
-					k = that.bitk;
-					q = that.write;
-					m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-
-					if (last === 0) {
-						mode = TYPE;
-						break;
-					}
-					mode = DRY;
-					/* falls through */
-				case DRY:
-					that.write = q;
-					r = that.inflate_flush(z, r);
-					q = that.write;
-					m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
-					if (that.read != that.write) {
-						that.bitb = b;
-						that.bitk = k;
-						z.avail_in = n;
-						z.total_in += p - z.next_in_index;
-						z.next_in_index = p;
-						that.write = q;
-						return that.inflate_flush(z, r);
-					}
-					mode = DONELOCKS;
-					/* falls through */
-				case DONELOCKS:
-					r = Z_STREAM_END;
-
-					that.bitb = b;
-					that.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					that.write = q;
-					return that.inflate_flush(z, r);
-				case BADBLOCKS:
-					r = Z_DATA_ERROR;
-
-					that.bitb = b;
-					that.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					that.write = q;
-					return that.inflate_flush(z, r);
-
-				default:
-					r = Z_STREAM_ERROR;
-
-					that.bitb = b;
-					that.bitk = k;
-					z.avail_in = n;
-					z.total_in += p - z.next_in_index;
-					z.next_in_index = p;
-					that.write = q;
-					return that.inflate_flush(z, r);
-				}
-			}
-		};
-
-		that.free = function(z) {
-			that.reset(z, null);
-			that.window = null;
-			hufts = null;
-			// ZFREE(z, s);
-		};
-
-		that.set_dictionary = function(d, start, n) {
-			that.window.set(d.subarray(start, start + n), 0);
-			that.read = that.write = n;
-		};
-
-		// Returns true if inflate is currently at the end of a block generated
-		// by Z_SYNC_FLUSH or Z_FULL_FLUSH.
-		that.sync_point = function() {
-			return mode == LENS ? 1 : 0;
-		};
-
-	}
-
-	// Inflate
-
-	// preset dictionary flag in zlib header
-	var PRESET_DICT = 0x20;
-
-	var Z_DEFLATED = 8;
-
-	var METHOD = 0; // waiting for method byte
-	var FLAG = 1; // waiting for flag byte
-	var DICT4 = 2; // four dictionary check bytes to go
-	var DICT3 = 3; // three dictionary check bytes to go
-	var DICT2 = 4; // two dictionary check bytes to go
-	var DICT1 = 5; // one dictionary check byte to go
-	var DICT0 = 6; // waiting for inflateSetDictionary
-	var BLOCKS = 7; // decompressing blocks
-	var DONE = 12; // finished check, done
-	var BAD = 13; // got an error--stay here
-
-	var mark = [ 0, 0, 0xff, 0xff ];
-
-	function Inflate() {
-		var that = this;
-
-		that.mode = 0; // current inflate mode
-
-		// mode dependent information
-		that.method = 0; // if FLAGS, method byte
-
-		// if CHECK, check values to compare
-		that.was = [ 0 ]; // new Array(1); // computed check value
-		that.need = 0; // stream check value
-
-		// if BAD, inflateSync's marker bytes count
-		that.marker = 0;
-
-		// mode independent information
-		that.wbits = 0; // log2(window size) (8..15, defaults to 15)
-
-		// this.blocks; // current inflate_blocks state
-
-		function inflateReset(z) {
-			if (!z || !z.istate)
-				return Z_STREAM_ERROR;
-
-			z.total_in = z.total_out = 0;
-			z.msg = null;
-			z.istate.mode = BLOCKS;
-			z.istate.blocks.reset(z, null);
-			return Z_OK;
-		}
-
-		that.inflateEnd = function(z) {
-			if (that.blocks)
-				that.blocks.free(z);
-			that.blocks = null;
-			// ZFREE(z, z->state);
-			return Z_OK;
-		};
-
-		that.inflateInit = function(z, w) {
-			z.msg = null;
-			that.blocks = null;
-
-			// set window size
-			if (w < 8 || w > 15) {
-				that.inflateEnd(z);
-				return Z_STREAM_ERROR;
-			}
-			that.wbits = w;
-
-			z.istate.blocks = new InfBlocks(z, 1 << w);
-
-			// reset state
-			inflateReset(z);
-			return Z_OK;
-		};
-
-		that.inflate = function(z, f) {
-			var r;
-			var b;
-
-			if (!z || !z.istate || !z.next_in)
-				return Z_STREAM_ERROR;
-			f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
-			r = Z_BUF_ERROR;
-			while (true) {
-				// System.out.println("mode: "+z.istate.mode);
-				switch (z.istate.mode) {
-				case METHOD:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					if (((z.istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) {
-						z.istate.mode = BAD;
-						z.msg = "unknown compression method";
-						z.istate.marker = 5; // can't try inflateSync
-						break;
-					}
-					if ((z.istate.method >> 4) + 8 > z.istate.wbits) {
-						z.istate.mode = BAD;
-						z.msg = "invalid window size";
-						z.istate.marker = 5; // can't try inflateSync
-						break;
-					}
-					z.istate.mode = FLAG;
-					/* falls through */
-				case FLAG:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					b = (z.read_byte(z.next_in_index++)) & 0xff;
-
-					if ((((z.istate.method << 8) + b) % 31) !== 0) {
-						z.istate.mode = BAD;
-						z.msg = "incorrect header check";
-						z.istate.marker = 5; // can't try inflateSync
-						break;
-					}
-
-					if ((b & PRESET_DICT) === 0) {
-						z.istate.mode = BLOCKS;
-						break;
-					}
-					z.istate.mode = DICT4;
-					/* falls through */
-				case DICT4:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					z.istate.need = ((z.read_byte(z.next_in_index++) & 0xff) << 24) & 0xff000000;
-					z.istate.mode = DICT3;
-					/* falls through */
-				case DICT3:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 16) & 0xff0000;
-					z.istate.mode = DICT2;
-					/* falls through */
-				case DICT2:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 8) & 0xff00;
-					z.istate.mode = DICT1;
-					/* falls through */
-				case DICT1:
-
-					if (z.avail_in === 0)
-						return r;
-					r = f;
-
-					z.avail_in--;
-					z.total_in++;
-					z.istate.need += (z.read_byte(z.next_in_index++) & 0xff);
-					z.istate.mode = DICT0;
-					return Z_NEED_DICT;
-				case DICT0:
-					z.istate.mode = BAD;
-					z.msg = "need dictionary";
-					z.istate.marker = 0; // can try inflateSync
-					return Z_STREAM_ERROR;
-				case BLOCKS:
-
-					r = z.istate.blocks.proc(z, r);
-					if (r == Z_DATA_ERROR) {
-						z.istate.mode = BAD;
-						z.istate.marker = 0; // can try inflateSync
-						break;
-					}
-					if (r == Z_OK) {
-						r = f;
-					}
-					if (r != Z_STREAM_END) {
-						return r;
-					}
-					r = f;
-					z.istate.blocks.reset(z, z.istate.was);
-					z.istate.mode = DONE;
-					/* falls through */
-				case DONE:
-					return Z_STREAM_END;
-				case BAD:
-					return Z_DATA_ERROR;
-				default:
-					return Z_STREAM_ERROR;
-				}
-			}
-		};
-
-		that.inflateSetDictionary = function(z, dictionary, dictLength) {
-			var index = 0;
-			var length = dictLength;
-			if (!z || !z.istate || z.istate.mode != DICT0)
-				return Z_STREAM_ERROR;
-
-			if (length >= (1 << z.istate.wbits)) {
-				length = (1 << z.istate.wbits) - 1;
-				index = dictLength - length;
-			}
-			z.istate.blocks.set_dictionary(dictionary, index, length);
-			z.istate.mode = BLOCKS;
-			return Z_OK;
-		};
-
-		that.inflateSync = function(z) {
-			var n; // number of bytes to look at
-			var p; // pointer to bytes
-			var m; // number of marker bytes found in a row
-			var r, w; // temporaries to save total_in and total_out
-
-			// set up
-			if (!z || !z.istate)
-				return Z_STREAM_ERROR;
-			if (z.istate.mode != BAD) {
-				z.istate.mode = BAD;
-				z.istate.marker = 0;
-			}
-			if ((n = z.avail_in) === 0)
-				return Z_BUF_ERROR;
-			p = z.next_in_index;
-			m = z.istate.marker;
-
-			// search
-			while (n !== 0 && m < 4) {
-				if (z.read_byte(p) == mark[m]) {
-					m++;
-				} else if (z.read_byte(p) !== 0) {
-					m = 0;
-				} else {
-					m = 4 - m;
-				}
-				p++;
-				n--;
-			}
-
-			// restore
-			z.total_in += p - z.next_in_index;
-			z.next_in_index = p;
-			z.avail_in = n;
-			z.istate.marker = m;
-
-			// return no joy or set up to restart on a new block
-			if (m != 4) {
-				return Z_DATA_ERROR;
-			}
-			r = z.total_in;
-			w = z.total_out;
-			inflateReset(z);
-			z.total_in = r;
-			z.total_out = w;
-			z.istate.mode = BLOCKS;
-			return Z_OK;
-		};
-
-		// Returns true if inflate is currently at the end of a block generated
-		// by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
-		// implementation to provide an additional safety check. PPP uses
-		// Z_SYNC_FLUSH
-		// but removes the length bytes of the resulting empty stored block. When
-		// decompressing, PPP checks that at the end of input packet, inflate is
-		// waiting for these length bytes.
-		that.inflateSyncPoint = function(z) {
-			if (!z || !z.istate || !z.istate.blocks)
-				return Z_STREAM_ERROR;
-			return z.istate.blocks.sync_point();
-		};
-	}
-
-	// ZStream
-
-	function ZStream() {
-	}
-
-	ZStream.prototype = {
-		inflateInit : function(bits) {
-			var that = this;
-			that.istate = new Inflate();
-			if (!bits)
-				bits = MAX_BITS;
-			return that.istate.inflateInit(that, bits);
-		},
-
-		inflate : function(f) {
-			var that = this;
-			if (!that.istate)
-				return Z_STREAM_ERROR;
-			return that.istate.inflate(that, f);
-		},
-
-		inflateEnd : function() {
-			var that = this;
-			if (!that.istate)
-				return Z_STREAM_ERROR;
-			var ret = that.istate.inflateEnd(that);
-			that.istate = null;
-			return ret;
-		},
-
-		inflateSync : function() {
-			var that = this;
-			if (!that.istate)
-				return Z_STREAM_ERROR;
-			return that.istate.inflateSync(that);
-		},
-		inflateSetDictionary : function(dictionary, dictLength) {
-			var that = this;
-			if (!that.istate)
-				return Z_STREAM_ERROR;
-			return that.istate.inflateSetDictionary(that, dictionary, dictLength);
-		},
-		read_byte : function(start) {
-			var that = this;
-			return that.next_in.subarray(start, start + 1)[0];
-		},
-		read_buf : function(start, size) {
-			var that = this;
-			return that.next_in.subarray(start, start + size);
-		}
-	};
-
-	// Inflater
-
-	function Inflater() {
-		var that = this;
-		var z = new ZStream();
-		var bufsize = 512;
-		var flush = Z_NO_FLUSH;
-		var buf = new Uint8Array(bufsize);
-		var nomoreinput = false;
-
-		z.inflateInit();
-		z.next_out = buf;
-
-		that.append = function(data, onprogress) {
-			var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array;
-			if (data.length === 0)
-				return;
-			z.next_in_index = 0;
-			z.next_in = data;
-			z.avail_in = data.length;
-			do {
-				z.next_out_index = 0;
-				z.avail_out = bufsize;
-				if ((z.avail_in === 0) && (!nomoreinput)) { // if buffer is empty and more input is available, refill it
-					z.next_in_index = 0;
-					nomoreinput = true;
-				}
-				err = z.inflate(flush);
-				if (nomoreinput && (err === Z_BUF_ERROR)) {
-					if (z.avail_in !== 0)
-						throw new Error("inflating: bad input");
-				} else if (err !== Z_OK && err !== Z_STREAM_END)
-					throw new Error("inflating: " + z.msg);
-				if ((nomoreinput || err === Z_STREAM_END) && (z.avail_in === data.length))
-					throw new Error("inflating: bad input");
-				if (z.next_out_index)
-					if (z.next_out_index === bufsize)
-						buffers.push(new Uint8Array(buf));
-					else
-						buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index)));
-				bufferSize += z.next_out_index;
-				if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) {
-					onprogress(z.next_in_index);
-					lastIndex = z.next_in_index;
-				}
-			} while (z.avail_in > 0 || z.avail_out === 0);
-			array = new Uint8Array(bufferSize);
-			buffers.forEach(function(chunk) {
-				array.set(chunk, bufferIndex);
-				bufferIndex += chunk.length;
-			});
-			return array;
-		};
-		that.flush = function() {
-			z.inflateEnd();
-		};
-	}
-
-	// 'zip' may not be defined in z-worker and some tests
-	var env = global.zip || global;
-	env.Inflater = env._jzlib_Inflater = Inflater;
-})(this);
diff --git a/vendor/zipjs-browserify/z-worker.js b/vendor/zipjs-browserify/z-worker.js
deleted file mode 100644
index 3e4019e8..00000000
--- a/vendor/zipjs-browserify/z-worker.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/* jshint worker:true */
-(function main(global) {
-	"use strict";
-
-	if (global.zWorkerInitialized)
-		throw new Error('z-worker.js should be run only once');
-	global.zWorkerInitialized = true;
-
-	addEventListener("message", function(event) {
-		var message = event.data, type = message.type, sn = message.sn;
-		var handler = handlers[type];
-		if (handler) {
-			try {
-				handler(message);
-			} catch (e) {
-				onError(type, sn, e);
-			}
-		}
-		//for debug
-		//postMessage({type: 'echo', originalType: type, sn: sn});
-	});
-
-	var handlers = {
-		importScripts: doImportScripts,
-		newTask: newTask,
-		append: processData,
-		flush: processData,
-	};
-
-	// deflater/inflater tasks indexed by serial numbers
-	var tasks = {};
-
-	function doImportScripts(msg) {
-		if (msg.scripts && msg.scripts.length > 0)
-			importScripts.apply(undefined, msg.scripts);
-		postMessage({type: 'importScripts'});
-	}
-
-	function newTask(msg) {
-		var CodecClass = global[msg.codecClass];
-		var sn = msg.sn;
-		if (tasks[sn])
-			throw Error('duplicated sn');
-		tasks[sn] =  {
-			codec: new CodecClass(msg.options),
-			crcInput: msg.crcType === 'input',
-			crcOutput: msg.crcType === 'output',
-			crc: new Crc32(),
-		};
-		postMessage({type: 'newTask', sn: sn});
-	}
-
-	// performance may not be supported
-	var now = global.performance ? global.performance.now.bind(global.performance) : Date.now;
-
-	function processData(msg) {
-		var sn = msg.sn, type = msg.type, input = msg.data;
-		var task = tasks[sn];
-		// allow creating codec on first append
-		if (!task && msg.codecClass) {
-			newTask(msg);
-			task = tasks[sn];
-		}
-		var isAppend = type === 'append';
-		var start = now();
-		var output;
-		if (isAppend) {
-			try {
-				output = task.codec.append(input, function onprogress(loaded) {
-					postMessage({type: 'progress', sn: sn, loaded: loaded});
-				});
-			} catch (e) {
-				delete tasks[sn];
-				throw e;
-			}
-		} else {
-			delete tasks[sn];
-			output = task.codec.flush();
-		}
-		var codecTime = now() - start;
-
-		start = now();
-		if (input && task.crcInput)
-			task.crc.append(input);
-		if (output && task.crcOutput)
-			task.crc.append(output);
-		var crcTime = now() - start;
-
-		var rmsg = {type: type, sn: sn, codecTime: codecTime, crcTime: crcTime};
-		var transferables = [];
-		if (output) {
-			rmsg.data = output;
-			transferables.push(output.buffer);
-		}
-		if (!isAppend && (task.crcInput || task.crcOutput))
-			rmsg.crc = task.crc.get();
-		
-		// posting a message with transferables will fail on IE10
-		try {
-			postMessage(rmsg, transferables);
-		} catch(ex) {
-			postMessage(rmsg); // retry without transferables
-		}
-	}
-
-	function onError(type, sn, e) {
-		var msg = {
-			type: type,
-			sn: sn,
-			error: formatError(e)
-		};
-		postMessage(msg);
-	}
-
-	function formatError(e) {
-		return { message: e.message, stack: e.stack };
-	}
-
-	// Crc32 code copied from file zip.js
-	function Crc32() {
-		this.crc = -1;
-	}
-	Crc32.prototype.append = function append(data) {
-		var crc = this.crc | 0, table = this.table;
-		for (var offset = 0, len = data.length | 0; offset < len; offset++)
-			crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];
-		this.crc = crc;
-	};
-	Crc32.prototype.get = function get() {
-		return ~this.crc;
-	};
-	Crc32.prototype.table = (function() {
-		var i, j, t, table = []; // Uint32Array is actually slower than []
-		for (i = 0; i < 256; i++) {
-			t = i;
-			for (j = 0; j < 8; j++)
-				if (t & 1)
-					t = (t >>> 1) ^ 0xEDB88320;
-				else
-					t = t >>> 1;
-			table[i] = t;
-		}
-		return table;
-	})();
-
-	// "no-op" codec
-	function NOOP() {}
-	global.NOOP = NOOP;
-	NOOP.prototype.append = function append(bytes, onprogress) {
-		return bytes;
-	};
-	NOOP.prototype.flush = function flush() {};
-})(this);
diff --git a/vendor/zipjs-browserify/zip.js b/vendor/zipjs-browserify/zip.js
deleted file mode 100644
index 4f6f67e8..00000000
--- a/vendor/zipjs-browserify/zip.js
+++ /dev/null
@@ -1,966 +0,0 @@
-/*
- Copyright (c) 2013 Gildas Lormeau. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
-
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-(function(obj) {
-	"use strict";
-
-	var ERR_BAD_FORMAT = "File format is not recognized.";
-	var ERR_CRC = "CRC failed.";
-	var ERR_ENCRYPTED = "File contains encrypted entry.";
-	var ERR_ZIP64 = "File is using Zip64 (4gb+ file size).";
-	var ERR_READ = "Error while reading zip file.";
-	var ERR_WRITE = "Error while writing zip file.";
-	var ERR_WRITE_DATA = "Error while writing file data.";
-	var ERR_READ_DATA = "Error while reading file data.";
-	var ERR_DUPLICATED_NAME = "File already exists.";
-	var CHUNK_SIZE = 512 * 1024;
-	
-	var TEXT_PLAIN = "text/plain";
-
-	var appendABViewSupported;
-	try {
-		appendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0;
-	} catch (e) {
-	}
-
-	function Crc32() {
-		this.crc = -1;
-	}
-	Crc32.prototype.append = function append(data) {
-		var crc = this.crc | 0, table = this.table;
-		for (var offset = 0, len = data.length | 0; offset < len; offset++)
-			crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];
-		this.crc = crc;
-	};
-	Crc32.prototype.get = function get() {
-		return ~this.crc;
-	};
-	Crc32.prototype.table = (function() {
-		var i, j, t, table = []; // Uint32Array is actually slower than []
-		for (i = 0; i < 256; i++) {
-			t = i;
-			for (j = 0; j < 8; j++)
-				if (t & 1)
-					t = (t >>> 1) ^ 0xEDB88320;
-				else
-					t = t >>> 1;
-			table[i] = t;
-		}
-		return table;
-	})();
-	
-	// "no-op" codec
-	function NOOP() {}
-	NOOP.prototype.append = function append(bytes, onprogress) {
-		return bytes;
-	};
-	NOOP.prototype.flush = function flush() {};
-
-	function blobSlice(blob, index, length) {
-		if (index < 0 || length < 0 || index + length > blob.size)
-			throw new RangeError('offset:' + index + ', length:' + length + ', size:' + blob.size);
-		if (blob.slice)
-			return blob.slice(index, index + length);
-		else if (blob.webkitSlice)
-			return blob.webkitSlice(index, index + length);
-		else if (blob.mozSlice)
-			return blob.mozSlice(index, index + length);
-		else if (blob.msSlice)
-			return blob.msSlice(index, index + length);
-	}
-
-	function getDataHelper(byteLength, bytes) {
-		var dataBuffer, dataArray;
-		dataBuffer = new ArrayBuffer(byteLength);
-		dataArray = new Uint8Array(dataBuffer);
-		if (bytes)
-			dataArray.set(bytes, 0);
-		return {
-			buffer : dataBuffer,
-			array : dataArray,
-			view : new DataView(dataBuffer)
-		};
-	}
-
-	// Readers
-	function Reader() {
-	}
-
-	function TextReader(text) {
-		var that = this, blobReader;
-
-		function init(callback, onerror) {
-			var blob = new Blob([ text ], {
-				type : TEXT_PLAIN
-			});
-			blobReader = new BlobReader(blob);
-			blobReader.init(function() {
-				that.size = blobReader.size;
-				callback();
-			}, onerror);
-		}
-
-		function readUint8Array(index, length, callback, onerror) {
-			blobReader.readUint8Array(index, length, callback, onerror);
-		}
-
-		that.size = 0;
-		that.init = init;
-		that.readUint8Array = readUint8Array;
-	}
-	TextReader.prototype = new Reader();
-	TextReader.prototype.constructor = TextReader;
-
-	function Data64URIReader(dataURI) {
-		var that = this, dataStart;
-
-		function init(callback) {
-			var dataEnd = dataURI.length;
-			while (dataURI.charAt(dataEnd - 1) == "=")
-				dataEnd--;
-			dataStart = dataURI.indexOf(",") + 1;
-			that.size = Math.floor((dataEnd - dataStart) * 0.75);
-			callback();
-		}
-
-		function readUint8Array(index, length, callback) {
-			var i, data = getDataHelper(length);
-			var start = Math.floor(index / 3) * 4;
-			var end = Math.ceil((index + length) / 3) * 4;
-			var bytes = obj.atob(dataURI.substring(start + dataStart, end + dataStart));
-			var delta = index - Math.floor(start / 4) * 3;
-			for (i = delta; i < delta + length; i++)
-				data.array[i - delta] = bytes.charCodeAt(i);
-			callback(data.array);
-		}
-
-		that.size = 0;
-		that.init = init;
-		that.readUint8Array = readUint8Array;
-	}
-	Data64URIReader.prototype = new Reader();
-	Data64URIReader.prototype.constructor = Data64URIReader;
-
-	function BlobReader(blob) {
-		var that = this;
-
-		function init(callback) {
-			that.size = blob.size;
-			callback();
-		}
-
-		function readUint8Array(index, length, callback, onerror) {
-			var reader = new FileReader();
-			reader.onload = function(e) {
-				callback(new Uint8Array(e.target.result));
-			};
-			reader.onerror = onerror;
-			try {
-				reader.readAsArrayBuffer(blobSlice(blob, index, length));
-			} catch (e) {
-				onerror(e);
-			}
-		}
-
-		that.size = 0;
-		that.init = init;
-		that.readUint8Array = readUint8Array;
-	}
-	BlobReader.prototype = new Reader();
-	BlobReader.prototype.constructor = BlobReader;
-
-	// Writers
-
-	function Writer() {
-	}
-	Writer.prototype.getData = function(callback) {
-		callback(this.data);
-	};
-
-	function TextWriter(encoding) {
-		var that = this, blob;
-
-		function init(callback) {
-			blob = new Blob([], {
-				type : TEXT_PLAIN
-			});
-			callback();
-		}
-
-		function writeUint8Array(array, callback) {
-			blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], {
-				type : TEXT_PLAIN
-			});
-			callback();
-		}
-
-		function getData(callback, onerror) {
-			var reader = new FileReader();
-			reader.onload = function(e) {
-				callback(e.target.result);
-			};
-			reader.onerror = onerror;
-			reader.readAsText(blob, encoding);
-		}
-
-		that.init = init;
-		that.writeUint8Array = writeUint8Array;
-		that.getData = getData;
-	}
-	TextWriter.prototype = new Writer();
-	TextWriter.prototype.constructor = TextWriter;
-
-	function Data64URIWriter(contentType) {
-		var that = this, data = "", pending = "";
-
-		function init(callback) {
-			data += "data:" + (contentType || "") + ";base64,";
-			callback();
-		}
-
-		function writeUint8Array(array, callback) {
-			var i, delta = pending.length, dataString = pending;
-			pending = "";
-			for (i = 0; i < (Math.floor((delta + array.length) / 3) * 3) - delta; i++)
-				dataString += String.fromCharCode(array[i]);
-			for (; i < array.length; i++)
-				pending += String.fromCharCode(array[i]);
-			if (dataString.length > 2)
-				data += obj.btoa(dataString);
-			else
-				pending = dataString;
-			callback();
-		}
-
-		function getData(callback) {
-			callback(data + obj.btoa(pending));
-		}
-
-		that.init = init;
-		that.writeUint8Array = writeUint8Array;
-		that.getData = getData;
-	}
-	Data64URIWriter.prototype = new Writer();
-	Data64URIWriter.prototype.constructor = Data64URIWriter;
-
-	function BlobWriter(contentType) {
-		var blob, that = this;
-
-		function init(callback) {
-			blob = new Blob([], {
-				type : contentType
-			});
-			callback();
-		}
-
-		function writeUint8Array(array, callback) {
-			blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], {
-				type : contentType
-			});
-			callback();
-		}
-
-		function getData(callback) {
-			callback(blob);
-		}
-
-		that.init = init;
-		that.writeUint8Array = writeUint8Array;
-		that.getData = getData;
-	}
-	BlobWriter.prototype = new Writer();
-	BlobWriter.prototype.constructor = BlobWriter;
-
-	/** 
-	 * inflate/deflate core functions
-	 * @param worker {Worker} web worker for the task.
-	 * @param initialMessage {Object} initial message to be sent to the worker. should contain
-	 *   sn(serial number for distinguishing multiple tasks sent to the worker), and codecClass.
-	 *   This function may add more properties before sending.
-	 */
-	function launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror) {
-		var chunkIndex = 0, index, outputSize, sn = initialMessage.sn, crc;
-
-		function onflush() {
-			worker.removeEventListener('message', onmessage, false);
-			onend(outputSize, crc);
-		}
-
-		function onmessage(event) {
-			var message = event.data, data = message.data, err = message.error;
-			if (err) {
-				err.toString = function () { return 'Error: ' + this.message; };
-				onreaderror(err);
-				return;
-			}
-			if (message.sn !== sn)
-				return;
-			if (typeof message.codecTime === 'number')
-				worker.codecTime += message.codecTime; // should be before onflush()
-			if (typeof message.crcTime === 'number')
-				worker.crcTime += message.crcTime;
-
-			switch (message.type) {
-				case 'append':
-					if (data) {
-						outputSize += data.length;
-						writer.writeUint8Array(data, function() {
-							step();
-						}, onwriteerror);
-					} else
-						step();
-					break;
-				case 'flush':
-					crc = message.crc;
-					if (data) {
-						outputSize += data.length;
-						writer.writeUint8Array(data, function() {
-							onflush();
-						}, onwriteerror);
-					} else
-						onflush();
-					break;
-				case 'progress':
-					if (onprogress)
-						onprogress(index + message.loaded, size);
-					break;
-				case 'importScripts': //no need to handle here
-				case 'newTask':
-				case 'echo':
-					break;
-				default:
-					console.warn('zip.js:launchWorkerProcess: unknown message: ', message);
-			}
-		}
-
-		function step() {
-			index = chunkIndex * CHUNK_SIZE;
-			// use `<=` instead of `<`, because `size` may be 0.
-			if (index <= size) {
-				reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) {
-					if (onprogress)
-						onprogress(index, size);
-					var msg = index === 0 ? initialMessage : {sn : sn};
-					msg.type = 'append';
-					msg.data = array;
-					
-					// posting a message with transferables will fail on IE10
-					try {
-						worker.postMessage(msg, [array.buffer]);
-					} catch(ex) {
-						worker.postMessage(msg); // retry without transferables
-					}
-					chunkIndex++;
-				}, onreaderror);
-			} else {
-				worker.postMessage({
-					sn: sn,
-					type: 'flush'
-				});
-			}
-		}
-
-		outputSize = 0;
-		worker.addEventListener('message', onmessage, false);
-		step();
-	}
-
-	function launchProcess(process, reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror) {
-		var chunkIndex = 0, index, outputSize = 0,
-			crcInput = crcType === 'input',
-			crcOutput = crcType === 'output',
-			crc = new Crc32();
-		function step() {
-			var outputData;
-			index = chunkIndex * CHUNK_SIZE;
-			if (index < size)
-				reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(inputData) {
-					var outputData;
-					try {
-						outputData = process.append(inputData, function(loaded) {
-							if (onprogress)
-								onprogress(index + loaded, size);
-						});
-					} catch (e) {
-						onreaderror(e);
-						return;
-					}
-					if (outputData) {
-						outputSize += outputData.length;
-						writer.writeUint8Array(outputData, function() {
-							chunkIndex++;
-							setTimeout(step, 1);
-						}, onwriteerror);
-						if (crcOutput)
-							crc.append(outputData);
-					} else {
-						chunkIndex++;
-						setTimeout(step, 1);
-					}
-					if (crcInput)
-						crc.append(inputData);
-					if (onprogress)
-						onprogress(index, size);
-				}, onreaderror);
-			else {
-				try {
-					outputData = process.flush();
-				} catch (e) {
-					onreaderror(e);
-					return;
-				}
-				if (outputData) {
-					if (crcOutput)
-						crc.append(outputData);
-					outputSize += outputData.length;
-					writer.writeUint8Array(outputData, function() {
-						onend(outputSize, crc.get());
-					}, onwriteerror);
-				} else
-					onend(outputSize, crc.get());
-			}
-		}
-
-		step();
-	}
-
-	function inflate(worker, sn, reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) {
-		var crcType = computeCrc32 ? 'output' : 'none';
-		if (obj.zip.useWebWorkers) {
-			var initialMessage = {
-				sn: sn,
-				codecClass: 'Inflater',
-				crcType: crcType,
-			};
-			launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror);
-		} else
-			launchProcess(new obj.zip.Inflater(), reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror);
-	}
-
-	function deflate(worker, sn, reader, writer, level, onend, onprogress, onreaderror, onwriteerror) {
-		var crcType = 'input';
-		if (obj.zip.useWebWorkers) {
-			var initialMessage = {
-				sn: sn,
-				options: {level: level},
-				codecClass: 'Deflater',
-				crcType: crcType,
-			};
-			launchWorkerProcess(worker, initialMessage, reader, writer, 0, reader.size, onprogress, onend, onreaderror, onwriteerror);
-		} else
-			launchProcess(new obj.zip.Deflater(), reader, writer, 0, reader.size, crcType, onprogress, onend, onreaderror, onwriteerror);
-	}
-
-	function copy(worker, sn, reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) {
-		var crcType = 'input';
-		if (obj.zip.useWebWorkers && computeCrc32) {
-			var initialMessage = {
-				sn: sn,
-				codecClass: 'NOOP',
-				crcType: crcType,
-			};
-			launchWorkerProcess(worker, initialMessage, reader, writer, offset, size, onprogress, onend, onreaderror, onwriteerror);
-		} else
-			launchProcess(new NOOP(), reader, writer, offset, size, crcType, onprogress, onend, onreaderror, onwriteerror);
-	}
-
-	// ZipReader
-
-	function decodeASCII(str) {
-		var i, out = "", charCode, extendedASCII = [ '\u00C7', '\u00FC', '\u00E9', '\u00E2', '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
-				'\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5', '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2', '\u00FB', '\u00F9',
-				'\u00FF', '\u00D6', '\u00DC', '\u00F8', '\u00A3', '\u00D8', '\u00D7', '\u0192', '\u00E1', '\u00ED', '\u00F3', '\u00FA', '\u00F1', '\u00D1',
-				'\u00AA', '\u00BA', '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1', '\u00AB', '\u00BB', '_', '_', '_', '\u00A6', '\u00A6',
-				'\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u00A6', '\u00A6', '+', '+', '\u00A2', '\u00A5', '+', '+', '-', '-', '+', '-', '+', '\u00E3',
-				'\u00C3', '+', '+', '-', '-', '\u00A6', '-', '+', '\u00A4', '\u00F0', '\u00D0', '\u00CA', '\u00CB', '\u00C8', 'i', '\u00CD', '\u00CE',
-				'\u00CF', '+', '+', '_', '_', '\u00A6', '\u00CC', '_', '\u00D3', '\u00DF', '\u00D4', '\u00D2', '\u00F5', '\u00D5', '\u00B5', '\u00FE',
-				'\u00DE', '\u00DA', '\u00DB', '\u00D9', '\u00FD', '\u00DD', '\u00AF', '\u00B4', '\u00AD', '\u00B1', '_', '\u00BE', '\u00B6', '\u00A7',
-				'\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9', '\u00B3', '\u00B2', '_', ' ' ];
-		for (i = 0; i < str.length; i++) {
-			charCode = str.charCodeAt(i) & 0xFF;
-			if (charCode > 127)
-				out += extendedASCII[charCode - 128];
-			else
-				out += String.fromCharCode(charCode);
-		}
-		return out;
-	}
-
-	function decodeUTF8(string) {
-		return decodeURIComponent(escape(string));
-	}
-
-	function getString(bytes) {
-		var i, str = "";
-		for (i = 0; i < bytes.length; i++)
-			str += String.fromCharCode(bytes[i]);
-		return str;
-	}
-
-	function getDate(timeRaw) {
-		var date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & 0x0000ffff;
-		try {
-			return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5,
-					(time & 0x001F) * 2, 0);
-		} catch (e) {
-		}
-	}
-
-	function readCommonHeader(entry, data, index, centralDirectory, onerror) {
-		entry.version = data.view.getUint16(index, true);
-		entry.bitFlag = data.view.getUint16(index + 2, true);
-		entry.compressionMethod = data.view.getUint16(index + 4, true);
-		entry.lastModDateRaw = data.view.getUint32(index + 6, true);
-		entry.lastModDate = getDate(entry.lastModDateRaw);
-		if ((entry.bitFlag & 0x01) === 0x01) {
-			onerror(ERR_ENCRYPTED);
-			return;
-		}
-		if (centralDirectory || (entry.bitFlag & 0x0008) != 0x0008) {
-			entry.crc32 = data.view.getUint32(index + 10, true);
-			entry.compressedSize = data.view.getUint32(index + 14, true);
-			entry.uncompressedSize = data.view.getUint32(index + 18, true);
-		}
-		if (entry.compressedSize === 0xFFFFFFFF || entry.uncompressedSize === 0xFFFFFFFF) {
-			onerror(ERR_ZIP64);
-			return;
-		}
-		entry.filenameLength = data.view.getUint16(index + 22, true);
-		entry.extraFieldLength = data.view.getUint16(index + 24, true);
-	}
-
-	function createZipReader(reader, callback, onerror) {
-		var inflateSN = 0;
-
-		function Entry() {
-		}
-
-		Entry.prototype.getData = function(writer, onend, onprogress, checkCrc32) {
-			var that = this;
-
-			function testCrc32(crc32) {
-				var dataCrc32 = getDataHelper(4);
-				dataCrc32.view.setUint32(0, crc32);
-				return that.crc32 == dataCrc32.view.getUint32(0);
-			}
-
-			function getWriterData(uncompressedSize, crc32) {
-				if (checkCrc32 && !testCrc32(crc32))
-					onerror(ERR_CRC);
-				else
-					writer.getData(function(data) {
-						onend(data);
-					});
-			}
-
-			function onreaderror(err) {
-				onerror(err || ERR_READ_DATA);
-			}
-
-			function onwriteerror(err) {
-				onerror(err || ERR_WRITE_DATA);
-			}
-
-			reader.readUint8Array(that.offset, 30, function(bytes) {
-				var data = getDataHelper(bytes.length, bytes), dataOffset;
-				if (data.view.getUint32(0) != 0x504b0304) {
-					onerror(ERR_BAD_FORMAT);
-					return;
-				}
-				readCommonHeader(that, data, 4, false, onerror);
-				dataOffset = that.offset + 30 + that.filenameLength + that.extraFieldLength;
-				writer.init(function() {
-					if (that.compressionMethod === 0)
-						copy(that._worker, inflateSN++, reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror);
-					else
-						inflate(that._worker, inflateSN++, reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror);
-				}, onwriteerror);
-			}, onreaderror);
-		};
-
-		function seekEOCDR(eocdrCallback) {
-			// "End of central directory record" is the last part of a zip archive, and is at least 22 bytes long.
-			// Zip file comment is the last part of EOCDR and has max length of 64KB,
-			// so we only have to search the last 64K + 22 bytes of a archive for EOCDR signature (0x06054b50).
-			var EOCDR_MIN = 22;
-			if (reader.size < EOCDR_MIN) {
-				onerror(ERR_BAD_FORMAT);
-				return;
-			}
-			var ZIP_COMMENT_MAX = 256 * 256, EOCDR_MAX = EOCDR_MIN + ZIP_COMMENT_MAX;
-
-			// In most cases, the EOCDR is EOCDR_MIN bytes long
-			doSeek(EOCDR_MIN, function() {
-				// If not found, try within EOCDR_MAX bytes
-				doSeek(Math.min(EOCDR_MAX, reader.size), function() {
-					onerror(ERR_BAD_FORMAT);
-				});
-			});
-
-			// seek last length bytes of file for EOCDR
-			function doSeek(length, eocdrNotFoundCallback) {
-				reader.readUint8Array(reader.size - length, length, function(bytes) {
-					for (var i = bytes.length - EOCDR_MIN; i >= 0; i--) {
-						if (bytes[i] === 0x50 && bytes[i + 1] === 0x4b && bytes[i + 2] === 0x05 && bytes[i + 3] === 0x06) {
-							eocdrCallback(new DataView(bytes.buffer, i, EOCDR_MIN));
-							return;
-						}
-					}
-					eocdrNotFoundCallback();
-				}, function() {
-					onerror(ERR_READ);
-				});
-			}
-		}
-
-		var zipReader = {
-			getEntries : function(callback) {
-				var worker = this._worker;
-				// look for End of central directory record
-				seekEOCDR(function(dataView) {
-					var datalength, fileslength;
-					datalength = dataView.getUint32(16, true);
-					fileslength = dataView.getUint16(8, true);
-					if (datalength < 0 || datalength >= reader.size) {
-						onerror(ERR_BAD_FORMAT);
-						return;
-					}
-					reader.readUint8Array(datalength, reader.size - datalength, function(bytes) {
-						var i, index = 0, entries = [], entry, filename, comment, data = getDataHelper(bytes.length, bytes);
-						for (i = 0; i < fileslength; i++) {
-							entry = new Entry();
-							entry._worker = worker;
-							if (data.view.getUint32(index) != 0x504b0102) {
-								onerror(ERR_BAD_FORMAT);
-								return;
-							}
-							readCommonHeader(entry, data, index + 6, true, onerror);
-							entry.commentLength = data.view.getUint16(index + 32, true);
-							entry.directory = ((data.view.getUint8(index + 38) & 0x10) == 0x10);
-							entry.offset = data.view.getUint32(index + 42, true);
-							filename = getString(data.array.subarray(index + 46, index + 46 + entry.filenameLength));
-							entry.filename = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(filename) : decodeASCII(filename);
-							if (!entry.directory && entry.filename.charAt(entry.filename.length - 1) == "/")
-								entry.directory = true;
-							comment = getString(data.array.subarray(index + 46 + entry.filenameLength + entry.extraFieldLength, index + 46
-									+ entry.filenameLength + entry.extraFieldLength + entry.commentLength));
-							entry.comment = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(comment) : decodeASCII(comment);
-							entries.push(entry);
-							index += 46 + entry.filenameLength + entry.extraFieldLength + entry.commentLength;
-						}
-						callback(entries);
-					}, function() {
-						onerror(ERR_READ);
-					});
-				});
-			},
-			close : function(callback) {
-				if (this._worker) {
-					this._worker.terminate();
-					this._worker = null;
-				}
-				if (callback)
-					callback();
-			},
-			_worker: null
-		};
-
-		if (!obj.zip.useWebWorkers)
-			callback(zipReader);
-		else {
-			createWorker('inflater',
-				function(worker) {
-					zipReader._worker = worker;
-					callback(zipReader);
-				},
-				function(err) {
-					onerror(err);
-				}
-			);
-		}
-	}
-
-	// ZipWriter
-
-	function encodeUTF8(string) {
-		return unescape(encodeURIComponent(string));
-	}
-
-	function getBytes(str) {
-		var i, array = [];
-		for (i = 0; i < str.length; i++)
-			array.push(str.charCodeAt(i));
-		return array;
-	}
-
-	function createZipWriter(writer, callback, onerror, dontDeflate) {
-		var files = {}, filenames = [], datalength = 0;
-		var deflateSN = 0;
-
-		function onwriteerror(err) {
-			onerror(err || ERR_WRITE);
-		}
-
-		function onreaderror(err) {
-			onerror(err || ERR_READ_DATA);
-		}
-
-		var zipWriter = {
-			add : function(name, reader, onend, onprogress, options) {
-				var header, filename, date;
-				var worker = this._worker;
-
-				function writeHeader(callback) {
-					var data;
-					date = options.lastModDate || new Date();
-					header = getDataHelper(26);
-					files[name] = {
-						headerArray : header.array,
-						directory : options.directory,
-						filename : filename,
-						offset : datalength,
-						comment : getBytes(encodeUTF8(options.comment || ""))
-					};
-					header.view.setUint32(0, 0x14000808);
-					if (options.version)
-						header.view.setUint8(0, options.version);
-					if (!dontDeflate && options.level !== 0 && !options.directory)
-						header.view.setUint16(4, 0x0800);
-					header.view.setUint16(6, (((date.getHours() << 6) | date.getMinutes()) << 5) | date.getSeconds() / 2, true);
-					header.view.setUint16(8, ((((date.getFullYear() - 1980) << 4) | (date.getMonth() + 1)) << 5) | date.getDate(), true);
-					header.view.setUint16(22, filename.length, true);
-					data = getDataHelper(30 + filename.length);
-					data.view.setUint32(0, 0x504b0304);
-					data.array.set(header.array, 4);
-					data.array.set(filename, 30);
-					datalength += data.array.length;
-					writer.writeUint8Array(data.array, callback, onwriteerror);
-				}
-
-				function writeFooter(compressedLength, crc32) {
-					var footer = getDataHelper(16);
-					datalength += compressedLength || 0;
-					footer.view.setUint32(0, 0x504b0708);
-					if (typeof crc32 != "undefined") {
-						header.view.setUint32(10, crc32, true);
-						footer.view.setUint32(4, crc32, true);
-					}
-					if (reader) {
-						footer.view.setUint32(8, compressedLength, true);
-						header.view.setUint32(14, compressedLength, true);
-						footer.view.setUint32(12, reader.size, true);
-						header.view.setUint32(18, reader.size, true);
-					}
-					writer.writeUint8Array(footer.array, function() {
-						datalength += 16;
-						onend();
-					}, onwriteerror);
-				}
-
-				function writeFile() {
-					options = options || {};
-					name = name.trim();
-					if (options.directory && name.charAt(name.length - 1) != "/")
-						name += "/";
-					if (files.hasOwnProperty(name)) {
-						onerror(ERR_DUPLICATED_NAME);
-						return;
-					}
-					filename = getBytes(encodeUTF8(name));
-					filenames.push(name);
-					writeHeader(function() {
-						if (reader)
-							if (dontDeflate || options.level === 0)
-								copy(worker, deflateSN++, reader, writer, 0, reader.size, true, writeFooter, onprogress, onreaderror, onwriteerror);
-							else
-								deflate(worker, deflateSN++, reader, writer, options.level, writeFooter, onprogress, onreaderror, onwriteerror);
-						else
-							writeFooter();
-					}, onwriteerror);
-				}
-
-				if (reader)
-					reader.init(writeFile, onreaderror);
-				else
-					writeFile();
-			},
-			close : function(callback) {
-				if (this._worker) {
-					this._worker.terminate();
-					this._worker = null;
-				}
-
-				var data, length = 0, index = 0, indexFilename, file;
-				for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {
-					file = files[filenames[indexFilename]];
-					length += 46 + file.filename.length + file.comment.length;
-				}
-				data = getDataHelper(length + 22);
-				for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {
-					file = files[filenames[indexFilename]];
-					data.view.setUint32(index, 0x504b0102);
-					data.view.setUint16(index + 4, 0x1400);
-					data.array.set(file.headerArray, index + 6);
-					data.view.setUint16(index + 32, file.comment.length, true);
-					if (file.directory)
-						data.view.setUint8(index + 38, 0x10);
-					data.view.setUint32(index + 42, file.offset, true);
-					data.array.set(file.filename, index + 46);
-					data.array.set(file.comment, index + 46 + file.filename.length);
-					index += 46 + file.filename.length + file.comment.length;
-				}
-				data.view.setUint32(index, 0x504b0506);
-				data.view.setUint16(index + 8, filenames.length, true);
-				data.view.setUint16(index + 10, filenames.length, true);
-				data.view.setUint32(index + 12, length, true);
-				data.view.setUint32(index + 16, datalength, true);
-				writer.writeUint8Array(data.array, function() {
-					writer.getData(callback);
-				}, onwriteerror);
-			},
-			_worker: null
-		};
-
-		if (!obj.zip.useWebWorkers)
-			callback(zipWriter);
-		else {
-			createWorker('deflater',
-				function(worker) {
-					zipWriter._worker = worker;
-					callback(zipWriter);
-				},
-				function(err) {
-					onerror(err);
-				}
-			);
-		}
-	}
-
-	function resolveURLs(urls) {
-		var a = document.createElement('a');
-		return urls.map(function(url) {
-			a.href = url;
-			return a.href;
-		});
-	}
-
-	var DEFAULT_WORKER_SCRIPTS = {
-		deflater: ['z-worker.js', 'deflate.js'],
-		inflater: ['z-worker.js', 'inflate.js']
-	};
-	function createWorker(type, callback, onerror) {
-		if (obj.zip.workerScripts !== null && obj.zip.workerScriptsPath !== null) {
-			onerror(new Error('Either zip.workerScripts or zip.workerScriptsPath may be set, not both.'));
-			return;
-		}
-		var scripts;
-		if (obj.zip.workerScripts) {
-			scripts = obj.zip.workerScripts[type];
-			if (!Array.isArray(scripts)) {
-				onerror(new Error('zip.workerScripts.' + type + ' is not an array!'));
-				return;
-			}
-			scripts = resolveURLs(scripts);
-		} else {
-			scripts = DEFAULT_WORKER_SCRIPTS[type].slice(0);
-			scripts[0] = (obj.zip.workerScriptsPath || '') + scripts[0];
-		}
-		var worker = new Worker(scripts[0]);
-		// record total consumed time by inflater/deflater/crc32 in this worker
-		worker.codecTime = worker.crcTime = 0;
-		worker.postMessage({ type: 'importScripts', scripts: scripts.slice(1) });
-		worker.addEventListener('message', onmessage);
-		function onmessage(ev) {
-			var msg = ev.data;
-			if (msg.error) {
-				worker.terminate(); // should before onerror(), because onerror() may throw.
-				onerror(msg.error);
-				return;
-			}
-			if (msg.type === 'importScripts') {
-				worker.removeEventListener('message', onmessage);
-				worker.removeEventListener('error', errorHandler);
-				callback(worker);
-			}
-		}
-		// catch entry script loading error and other unhandled errors
-		worker.addEventListener('error', errorHandler);
-		function errorHandler(err) {
-			worker.terminate();
-			onerror(err);
-		}
-	}
-
-	function onerror_default(error) {
-		console.error(error);
-	}
-	obj.zip = {
-		Reader : Reader,
-		Writer : Writer,
-		BlobReader : BlobReader,
-		Data64URIReader : Data64URIReader,
-		TextReader : TextReader,
-		BlobWriter : BlobWriter,
-		Data64URIWriter : Data64URIWriter,
-		TextWriter : TextWriter,
-		createReader : function(reader, callback, onerror) {
-			onerror = onerror || onerror_default;
-
-			reader.init(function() {
-				createZipReader(reader, callback, onerror);
-			}, onerror);
-		},
-		createWriter : function(writer, callback, onerror, dontDeflate) {
-			onerror = onerror || onerror_default;
-			dontDeflate = !!dontDeflate;
-
-			writer.init(function() {
-				createZipWriter(writer, callback, onerror, dontDeflate);
-			}, onerror);
-		},
-		useWebWorkers : true,
-		/**
-		 * Directory containing the default worker scripts (z-worker.js, deflate.js, and inflate.js), relative to current base url.
-		 * E.g.: zip.workerScripts = './';
-		 */
-		workerScriptsPath : null,
-		/**
-		 * Advanced option to control which scripts are loaded in the Web worker. If this option is specified, then workerScriptsPath must not be set.
-		 * workerScripts.deflater/workerScripts.inflater should be arrays of urls to scripts for deflater/inflater, respectively.
-		 * Scripts in the array are executed in order, and the first one should be z-worker.js, which is used to start the worker.
-		 * All urls are relative to current base url.
-		 * E.g.:
-		 * zip.workerScripts = {
-		 *   deflater: ['z-worker.js', 'deflate.js'],
-		 *   inflater: ['z-worker.js', 'inflate.js']
-		 * };
-		 */
-		workerScripts : null,
-	};
-
-})(this);