diff options
| -rw-r--r-- | CHANGELOG | 12 | ||||
| -rw-r--r-- | netflix-immersive.user.js | 124 | ||||
| -rw-r--r-- | package-lock.json | 2657 | ||||
| -rw-r--r-- | package.json | 6 | ||||
| -rw-r--r-- | src/controls.ts | 5 | ||||
| -rw-r--r-- | src/fullscreen_credits.ts | 51 | ||||
| -rw-r--r-- | src/index.ts | 7 | ||||
| -rw-r--r-- | src/seamless.ts | 73 | ||||
| -rw-r--r-- | src/styles.ts | 14 | ||||
| -rw-r--r-- | src/userscript-header.txt | 4 | ||||
| -rw-r--r-- | src/watch_credits.ts | 3 | 
11 files changed, 2713 insertions, 243 deletions
| diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..a362b3f --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,12 @@ +CHANGELOG +========= + +v0.1.0 (2021-08-??): +	Changes: + +	* Update to support Netflix's new player, released in mid-August 2021. + +v0.0.1 (2020-05-24): +	First public release. + + vim:tw=80:comments=:fo+=n:formatlistpat=^\\s*\\*\\s* diff --git a/netflix-immersive.user.js b/netflix-immersive.user.js index e956541..d302682 100644 --- a/netflix-immersive.user.js +++ b/netflix-immersive.user.js @@ -1,13 +1,13 @@  // ==UserScript==  // @name Netflix Immersive  // @description Netflix user script providing a more immersive experience -// @version 0.0.1 +// @version 0.1.0  // @namespace com.teddywing  // @run-at document-idle  // @match https://www.netflix.com/*  // ==/UserScript== -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This program is free software: you can redistribute it and/or modify  // it under the terms of the GNU General Public License as published by @@ -26,13 +26,14 @@  "use strict";  Object.defineProperty(exports, "__esModule", { value: true });  var logger_1 = require("./logger"); +// 2021.08.14: This may be obsolete, replaced by `seamless.ts`.  var controls = {      // Hide playback controls.      hide: function () {          logger_1.default.debug('hide():', 'Hiding controls');          // When the player is activated, the mouse cursor is shown.          hide_cursor(); -        var controls_el = document.querySelector('.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active'); +        var controls_el = document.querySelector('.watch-video--bottom-controls-container');          logger_1.default.debug('hide():', 'Controls:', controls_el);          controls_el              .classList @@ -75,26 +76,47 @@ function hide_cursor() {  },{"./logger":4}],2:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { value: true }); -var controls_1 = require("./controls"); +var logger_1 = require("./logger");  var wait_element_1 = require("./wait_element");  // Prevent credits from being minimised.  function init_mutation_observer(player) {      var observer = new MutationObserver(function (mutation_list) { -        for (var i = 0; i < mutation_list.length; i++) { +        var _loop_1 = function () {              var mutation = mutation_list[i];              var player_1 = mutation.target; +            var video = player_1.querySelector('video');              // The `postplay` class minimises the movie. Remove it if it gets              // added to remain in full frame. -            if (player_1.classList.contains('postplay')) { -                player_1.classList.remove('postplay'); -                // Playback controls are removed when postplay is activated. -                // Re-enable them. -                player_1.click(); +            if (player_1.classList.contains('watch-video--player-view-minimized')) { +                logger_1.default.debug('fullscreen_credits', 'init_mutation_observer()', 'Maximising'); +                player_1.classList.remove('watch-video--player-view-minimized'); +                // Resize the video to full frame. Otherwise it will shrink for +                // a second until the click event kicks in. +                video.style.height = null; +                video.style.width = 'inherit';                  // Activating playback controls makes them visible. Keep them                  // hidden. -                controls_1.default.hide(); -                return; +                var style_el_1 = document.createElement('style'); +                document.head.appendChild(style_el_1); +                var stylesheet = style_el_1.sheet; +                stylesheet.insertRule("\n\t\t\t\t\t.watch-video--back-container {\n\t\t\t\t\t\tvisibility: hidden !important;\n\t\t\t\t\t}\n\n\t\t\t\t\t.watch-video--bottom-controls-container {\n\t\t\t\t\t\tdisplay: none !important;\n\t\t\t\t\t}", stylesheet.cssRules.length); +                // Playback controls are removed when postplay is activated. +                // Re-enable them. +                var click_area = player_1.children[0]; +                click_area.click(); +                // Once the player controls auto-hide themselves, remove our +                // forced hiding so that the controls become user-accessible +                // again. +                setTimeout(function () { +                    document.head.removeChild(style_el_1); +                }, 4000); +                return { value: void 0 };              } +        }; +        for (var i = 0; i < mutation_list.length; i++) { +            var state_1 = _loop_1(); +            if (typeof state_1 === "object") +                return state_1.value;          }      });      observer.observe(player, { @@ -103,36 +125,38 @@ function init_mutation_observer(player) {  }  // Initialise the mutation observer when the video player becomes available.  function init() { -    wait_element_1.default('.NFPlayer.nf-player-container') +    wait_element_1.default('.watch-video--player-view')          .then(function (player) {          init_mutation_observer(player);      });  }  exports.default = init; -},{"./controls":1,"./wait_element":6}],3:[function(require,module,exports){ +},{"./logger":4,"./wait_element":7}],3:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { value: true });  var fullscreen_credits_1 = require("./fullscreen_credits"); +var logger_1 = require("./logger"); +var seamless_1 = require("./seamless");  var styles_1 = require("./styles");  var watch_credits_1 = require("./watch_credits");  function main() { +    logger_1.default.debug('Initialising');      styles_1.default();      fullscreen_credits_1.default();      watch_credits_1.default(); +    seamless_1.default();  }  main();  // Reinitialise when the page changes.  window.onpopstate = main; -},{"./fullscreen_credits":2,"./styles":5,"./watch_credits":7}],4:[function(require,module,exports){ +},{"./fullscreen_credits":2,"./logger":4,"./seamless":5,"./styles":6,"./watch_credits":8}],4:[function(require,module,exports){  "use strict"; -var __spreadArrays = (this && this.__spreadArrays) || function () { -    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; -    for (var r = Array(s), k = 0, i = 0; i < il; i++) -        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) -            r[k] = a[j]; -    return r; +var __spreadArray = (this && this.__spreadArray) || function (to, from) { +    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) +        to[j] = from[i]; +    return to;  };  Object.defineProperty(exports, "__esModule", { value: true });  exports.default = { @@ -141,24 +165,71 @@ exports.default = {          for (var _i = 0; _i < arguments.length; _i++) {              args[_i] = arguments[_i];          } -        console.debug.apply(console, __spreadArrays(['Immersive:'], args)); +        console.debug.apply(console, __spreadArray(['Immersive:'], args));      }  };  },{}],5:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { value: true }); +var logger_1 = require("./logger"); +var wait_element_1 = require("./wait_element"); +// Hide the cursor when seamless credits are played. +function init_mutation_observer(player) { +    var observer = new MutationObserver(function (mutation_list) { +        var _loop_1 = function () { +            var mutation = mutation_list[i]; +            var player_1 = mutation.target; +            var seamless_controls = document.querySelector('.SeamlessControls--container'); +            if (seamless_controls) { +                logger_1.default.debug('seamless', 'init_mutation_observer()', 'Handling seamless'); +                var style_el_1 = document.createElement('style'); +                // Hide the cursor. +                document.head.appendChild(style_el_1); +                var stylesheet = style_el_1.sheet; +                stylesheet.insertRule("\n\t\t\t\t\tbody {\n\t\t\t\t\t\tcursor: none !important;\n\t\t\t\t\t}", stylesheet.cssRules.length); +                document.body.onmousemove = function () { +                    document.head.removeChild(style_el_1); +                }; +                return { value: void 0 }; +            } +        }; +        for (var i = 0; i < mutation_list.length; i++) { +            var state_1 = _loop_1(); +            if (typeof state_1 === "object") +                return state_1.value; +        } +    }); +    observer.observe(player, { +        childList: true, +        subtree: true +    }); +} +// Initialise the mutation observer when the video player becomes available. +function init() { +    wait_element_1.default('.watch-video--player-view') +        .then(function (player) { +        init_mutation_observer(player); +    }); +} +exports.default = init; + +},{"./logger":4,"./wait_element":7}],6:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true });  // Adds CSS to the page to hide superfluous user interface elements.  function styles() {      var style = document.createElement('style');      document.head.appendChild(style);      var stylesheet = style.sheet; -    stylesheet.insertRule("\n\t\t/* \"Back to Browse\" button that appears when credits are minimised. */\n\t\t.OriginalsPostPlay-BackgroundTrailer .BackToBrowse,\n\n\t\t/* Age rating. */\n\t\t.player-view-childrens,\n\n\t\t/* \"Watch Credits\" button. */\n\t\t[data-uia=\"watch-credits-seamless-button\"],\n\n\t\t/* Skip buttons. */\n\t\ta[aria-label=\"Skip Intro\"],\n\t\ta[aria-label=\"Skip Recap\"],\n\t\ta[aria-label=\"Next Episode\"],\n\t\t[data-uia=\"next-episode-seamless-button\"] {\n\t\t\tvisibility: hidden !important;\n\t\t}", stylesheet.cssRules.length); +    // 2021.08.13: May want to remove `.player-view-childrens`, which is now +    // replaced by `.advisory-container`. +    stylesheet.insertRule("\n\t\t/* \"Back to Browse\" button that appears when credits are minimised. */\n\t\t.OriginalsPostPlay-BackgroundTrailer .BackToBrowse,\n\t\t.watch-video--seamless-back,\n\n\t\t/* Promo that appears during credis */\n\t\t.OriginalsPostPlay-BackgroundTrailer,\n\t\t.SeamlessControls--background-artwork-visible,\n\t\t.ptrack-container.fill-container,\n\n\t\t/* Age rating. */\n\t\t.player-view-childrens,\n\t\t.advisory-container,\n\n\t\t/* \"Watch Credits\" button. */\n\t\t[data-uia=\"watch-credits-seamless-button\"],\n\n\t\t/* Skip buttons. */\n\t\ta[aria-label=\"Skip Intro\"],\n\t\ta[aria-label=\"Skip Recap\"],\n\t\ta[aria-label=\"Next Episode\"],\n\t\t[data-uia=\"next-episode-seamless-button\"],\n\t\t.watch-video--skip-content {\n\t\t\tvisibility: hidden !important;\n\t\t}", stylesheet.cssRules.length);      stylesheet.insertRule("\n\t\t/* Remove white border around credits. */\n\t\t.NFPlayer.can-resume:hover {\n\t\t\tborder: none !important;\n\t\t}", stylesheet.cssRules.length);  }  exports.default = styles; -},{}],6:[function(require,module,exports){ +},{}],7:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { value: true });  var logger_1 = require("./logger"); @@ -178,12 +249,13 @@ function wait_element(selector) {  }  exports.default = wait_element; -},{"./logger":4}],7:[function(require,module,exports){ +},{"./logger":4}],8:[function(require,module,exports){  "use strict";  Object.defineProperty(exports, "__esModule", { value: true });  var controls_1 = require("./controls");  var logger_1 = require("./logger");  var wait_element_1 = require("./wait_element"); +// 2021.08.14: This may be obsolete, replaced by `seamless.ts`.  // Remove the "Watch Credits" button.  function init_mutation_observer(controls_el) {      var observer = new MutationObserver(function (mutation_list) { @@ -217,4 +289,4 @@ function init() {  }  exports.default = init; -},{"./controls":1,"./logger":4,"./wait_element":6}]},{},[3]); +},{"./controls":1,"./logger":4,"./wait_element":7}]},{},[3]); diff --git a/package-lock.json b/package-lock.json index fad8668..a32fbcf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,1977 @@  {    "name": "netflix-immersive", -  "version": "0.0.1", -  "lockfileVersion": 1, +  "version": "0.1.0", +  "lockfileVersion": 2,    "requires": true, -  "dependencies": { -    "JSONStream": { +  "packages": { +    "": { +      "name": "netflix-immersive", +      "version": "0.1.0", +      "devDependencies": { +        "browserify": "^17.0.0", +        "typescript": "^4.6.3" +      } +    }, +    "node_modules/acorn": { +      "version": "7.4.1", +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", +      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", +      "dev": true, +      "bin": { +        "acorn": "bin/acorn" +      }, +      "engines": { +        "node": ">=0.4.0" +      } +    }, +    "node_modules/acorn-node": { +      "version": "1.8.2", +      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", +      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", +      "dev": true, +      "dependencies": { +        "acorn": "^7.0.0", +        "acorn-walk": "^7.0.0", +        "xtend": "^4.0.2" +      } +    }, +    "node_modules/acorn-walk": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", +      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", +      "dev": true, +      "engines": { +        "node": ">=0.4.0" +      } +    }, +    "node_modules/asn1.js": { +      "version": "5.4.1", +      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", +      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.0.0", +        "inherits": "^2.0.1", +        "minimalistic-assert": "^1.0.0", +        "safer-buffer": "^2.1.0" +      } +    }, +    "node_modules/asn1.js/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/assert": { +      "version": "1.5.0", +      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", +      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", +      "dev": true, +      "dependencies": { +        "object-assign": "^4.1.1", +        "util": "0.10.3" +      } +    }, +    "node_modules/assert/node_modules/inherits": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", +      "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", +      "dev": true +    }, +    "node_modules/assert/node_modules/util": { +      "version": "0.10.3", +      "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", +      "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", +      "dev": true, +      "dependencies": { +        "inherits": "2.0.1" +      } +    }, +    "node_modules/available-typed-arrays": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", +      "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", +      "dev": true, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/balanced-match": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", +      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", +      "dev": true +    }, +    "node_modules/base64-js": { +      "version": "1.5.1", +      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", +      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", +      "dev": true, +      "funding": [ +        { +          "type": "github", +          "url": "https://github.com/sponsors/feross" +        }, +        { +          "type": "patreon", +          "url": "https://www.patreon.com/feross" +        }, +        { +          "type": "consulting", +          "url": "https://feross.org/support" +        } +      ] +    }, +    "node_modules/bn.js": { +      "version": "5.2.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", +      "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", +      "dev": true +    }, +    "node_modules/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, +      "dependencies": { +        "balanced-match": "^1.0.0", +        "concat-map": "0.0.1" +      } +    }, +    "node_modules/brorand": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", +      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", +      "dev": true +    }, +    "node_modules/browser-pack": { +      "version": "6.1.0", +      "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", +      "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", +      "dev": true, +      "dependencies": { +        "combine-source-map": "~0.8.0", +        "defined": "^1.0.0", +        "JSONStream": "^1.0.3", +        "safe-buffer": "^5.1.1", +        "through2": "^2.0.0", +        "umd": "^3.0.0" +      }, +      "bin": { +        "browser-pack": "bin/cmd.js" +      } +    }, +    "node_modules/browser-resolve": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", +      "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", +      "dev": true, +      "dependencies": { +        "resolve": "^1.17.0" +      } +    }, +    "node_modules/browserify": { +      "version": "17.0.0", +      "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", +      "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", +      "dev": true, +      "dependencies": { +        "assert": "^1.4.0", +        "browser-pack": "^6.0.1", +        "browser-resolve": "^2.0.0", +        "browserify-zlib": "~0.2.0", +        "buffer": "~5.2.1", +        "cached-path-relative": "^1.0.0", +        "concat-stream": "^1.6.0", +        "console-browserify": "^1.1.0", +        "constants-browserify": "~1.0.0", +        "crypto-browserify": "^3.0.0", +        "defined": "^1.0.0", +        "deps-sort": "^2.0.1", +        "domain-browser": "^1.2.0", +        "duplexer2": "~0.1.2", +        "events": "^3.0.0", +        "glob": "^7.1.0", +        "has": "^1.0.0", +        "htmlescape": "^1.1.0", +        "https-browserify": "^1.0.0", +        "inherits": "~2.0.1", +        "insert-module-globals": "^7.2.1", +        "JSONStream": "^1.0.3", +        "labeled-stream-splicer": "^2.0.0", +        "mkdirp-classic": "^0.5.2", +        "module-deps": "^6.2.3", +        "os-browserify": "~0.3.0", +        "parents": "^1.0.1", +        "path-browserify": "^1.0.0", +        "process": "~0.11.0", +        "punycode": "^1.3.2", +        "querystring-es3": "~0.2.0", +        "read-only-stream": "^2.0.0", +        "readable-stream": "^2.0.2", +        "resolve": "^1.1.4", +        "shasum-object": "^1.0.0", +        "shell-quote": "^1.6.1", +        "stream-browserify": "^3.0.0", +        "stream-http": "^3.0.0", +        "string_decoder": "^1.1.1", +        "subarg": "^1.0.0", +        "syntax-error": "^1.1.1", +        "through2": "^2.0.0", +        "timers-browserify": "^1.0.1", +        "tty-browserify": "0.0.1", +        "url": "~0.11.0", +        "util": "~0.12.0", +        "vm-browserify": "^1.0.0", +        "xtend": "^4.0.0" +      }, +      "bin": { +        "browserify": "bin/cmd.js" +      }, +      "engines": { +        "node": ">= 0.8" +      } +    }, +    "node_modules/browserify-aes": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", +      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", +      "dev": true, +      "dependencies": { +        "buffer-xor": "^1.0.3", +        "cipher-base": "^1.0.0", +        "create-hash": "^1.1.0", +        "evp_bytestokey": "^1.0.3", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "node_modules/browserify-cipher": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", +      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", +      "dev": true, +      "dependencies": { +        "browserify-aes": "^1.0.4", +        "browserify-des": "^1.0.0", +        "evp_bytestokey": "^1.0.0" +      } +    }, +    "node_modules/browserify-des": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", +      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", +      "dev": true, +      "dependencies": { +        "cipher-base": "^1.0.1", +        "des.js": "^1.0.0", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "node_modules/browserify-rsa": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", +      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", +      "dev": true, +      "dependencies": { +        "bn.js": "^5.0.0", +        "randombytes": "^2.0.1" +      } +    }, +    "node_modules/browserify-sign": { +      "version": "4.2.1", +      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", +      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", +      "dev": true, +      "dependencies": { +        "bn.js": "^5.1.1", +        "browserify-rsa": "^4.0.1", +        "create-hash": "^1.2.0", +        "create-hmac": "^1.1.7", +        "elliptic": "^6.5.3", +        "inherits": "^2.0.4", +        "parse-asn1": "^5.1.5", +        "readable-stream": "^3.6.0", +        "safe-buffer": "^5.2.0" +      } +    }, +    "node_modules/browserify-sign/node_modules/readable-stream": { +      "version": "3.6.0", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", +      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "string_decoder": "^1.1.1", +        "util-deprecate": "^1.0.1" +      }, +      "engines": { +        "node": ">= 6" +      } +    }, +    "node_modules/browserify-zlib": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", +      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", +      "dev": true, +      "dependencies": { +        "pako": "~1.0.5" +      } +    }, +    "node_modules/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, +      "dependencies": { +        "base64-js": "^1.0.2", +        "ieee754": "^1.1.4" +      } +    }, +    "node_modules/buffer-from": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", +      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", +      "dev": true +    }, +    "node_modules/buffer-xor": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", +      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", +      "dev": true +    }, +    "node_modules/builtin-status-codes": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", +      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", +      "dev": true +    }, +    "node_modules/cached-path-relative": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", +      "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", +      "dev": true +    }, +    "node_modules/call-bind": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", +      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", +      "dev": true, +      "dependencies": { +        "function-bind": "^1.1.1", +        "get-intrinsic": "^1.0.2" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/cipher-base": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", +      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "node_modules/combine-source-map": { +      "version": "0.8.0", +      "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", +      "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", +      "dev": true, +      "dependencies": { +        "convert-source-map": "~1.1.0", +        "inline-source-map": "~0.6.0", +        "lodash.memoize": "~3.0.3", +        "source-map": "~0.5.3" +      } +    }, +    "node_modules/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 +    }, +    "node_modules/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, +      "engines": [ +        "node >= 0.8" +      ], +      "dependencies": { +        "buffer-from": "^1.0.0", +        "inherits": "^2.0.3", +        "readable-stream": "^2.2.2", +        "typedarray": "^0.0.6" +      } +    }, +    "node_modules/console-browserify": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", +      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", +      "dev": true +    }, +    "node_modules/constants-browserify": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", +      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", +      "dev": true +    }, +    "node_modules/convert-source-map": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", +      "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", +      "dev": true +    }, +    "node_modules/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 +    }, +    "node_modules/create-ecdh": { +      "version": "4.0.4", +      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", +      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.1.0", +        "elliptic": "^6.5.3" +      } +    }, +    "node_modules/create-ecdh/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/create-hash": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", +      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", +      "dev": true, +      "dependencies": { +        "cipher-base": "^1.0.1", +        "inherits": "^2.0.1", +        "md5.js": "^1.3.4", +        "ripemd160": "^2.0.1", +        "sha.js": "^2.4.0" +      } +    }, +    "node_modules/create-hmac": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", +      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", +      "dev": true, +      "dependencies": { +        "cipher-base": "^1.0.3", +        "create-hash": "^1.1.0", +        "inherits": "^2.0.1", +        "ripemd160": "^2.0.0", +        "safe-buffer": "^5.0.1", +        "sha.js": "^2.4.8" +      } +    }, +    "node_modules/crypto-browserify": { +      "version": "3.12.0", +      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", +      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", +      "dev": true, +      "dependencies": { +        "browserify-cipher": "^1.0.0", +        "browserify-sign": "^4.0.0", +        "create-ecdh": "^4.0.0", +        "create-hash": "^1.1.0", +        "create-hmac": "^1.1.0", +        "diffie-hellman": "^5.0.0", +        "inherits": "^2.0.1", +        "pbkdf2": "^3.0.3", +        "public-encrypt": "^4.0.0", +        "randombytes": "^2.0.0", +        "randomfill": "^1.0.3" +      }, +      "engines": { +        "node": "*" +      } +    }, +    "node_modules/dash-ast": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", +      "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", +      "dev": true +    }, +    "node_modules/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, +      "dependencies": { +        "object-keys": "^1.0.12" +      }, +      "engines": { +        "node": ">= 0.4" +      } +    }, +    "node_modules/defined": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", +      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", +      "dev": true +    }, +    "node_modules/deps-sort": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", +      "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", +      "dev": true, +      "dependencies": { +        "JSONStream": "^1.0.3", +        "shasum-object": "^1.0.0", +        "subarg": "^1.0.0", +        "through2": "^2.0.0" +      }, +      "bin": { +        "deps-sort": "bin/cmd.js" +      } +    }, +    "node_modules/des.js": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", +      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.1", +        "minimalistic-assert": "^1.0.0" +      } +    }, +    "node_modules/detective": { +      "version": "5.2.0", +      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", +      "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", +      "dev": true, +      "dependencies": { +        "acorn-node": "^1.6.1", +        "defined": "^1.0.0", +        "minimist": "^1.1.1" +      }, +      "bin": { +        "detective": "bin/detective.js" +      }, +      "engines": { +        "node": ">=0.8.0" +      } +    }, +    "node_modules/diffie-hellman": { +      "version": "5.0.3", +      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", +      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.1.0", +        "miller-rabin": "^4.0.0", +        "randombytes": "^2.0.0" +      } +    }, +    "node_modules/diffie-hellman/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/domain-browser": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", +      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", +      "dev": true, +      "engines": { +        "node": ">=0.4", +        "npm": ">=1.2" +      } +    }, +    "node_modules/duplexer2": { +      "version": "0.1.4", +      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", +      "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", +      "dev": true, +      "dependencies": { +        "readable-stream": "^2.0.2" +      } +    }, +    "node_modules/elliptic": { +      "version": "6.5.4", +      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", +      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.11.9", +        "brorand": "^1.1.0", +        "hash.js": "^1.0.0", +        "hmac-drbg": "^1.0.1", +        "inherits": "^2.0.4", +        "minimalistic-assert": "^1.0.1", +        "minimalistic-crypto-utils": "^1.0.1" +      } +    }, +    "node_modules/elliptic/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/es-abstract": { +      "version": "1.18.5", +      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", +      "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "es-to-primitive": "^1.2.1", +        "function-bind": "^1.1.1", +        "get-intrinsic": "^1.1.1", +        "has": "^1.0.3", +        "has-symbols": "^1.0.2", +        "internal-slot": "^1.0.3", +        "is-callable": "^1.2.3", +        "is-negative-zero": "^2.0.1", +        "is-regex": "^1.1.3", +        "is-string": "^1.0.6", +        "object-inspect": "^1.11.0", +        "object-keys": "^1.1.1", +        "object.assign": "^4.1.2", +        "string.prototype.trimend": "^1.0.4", +        "string.prototype.trimstart": "^1.0.4", +        "unbox-primitive": "^1.0.1" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/es-to-primitive": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", +      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", +      "dev": true, +      "dependencies": { +        "is-callable": "^1.1.4", +        "is-date-object": "^1.0.1", +        "is-symbol": "^1.0.2" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/events": { +      "version": "3.3.0", +      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", +      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", +      "dev": true, +      "engines": { +        "node": ">=0.8.x" +      } +    }, +    "node_modules/evp_bytestokey": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", +      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", +      "dev": true, +      "dependencies": { +        "md5.js": "^1.3.4", +        "safe-buffer": "^5.1.1" +      } +    }, +    "node_modules/fast-safe-stringify": { +      "version": "2.0.8", +      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", +      "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", +      "dev": true +    }, +    "node_modules/foreach": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", +      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", +      "dev": true +    }, +    "node_modules/fs.realpath": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", +      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", +      "dev": true +    }, +    "node_modules/function-bind": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", +      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", +      "dev": true +    }, +    "node_modules/get-assigned-identifiers": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", +      "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", +      "dev": true +    }, +    "node_modules/get-intrinsic": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", +      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", +      "dev": true, +      "dependencies": { +        "function-bind": "^1.1.1", +        "has": "^1.0.3", +        "has-symbols": "^1.0.1" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/glob": { +      "version": "7.1.7", +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", +      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", +      "dev": true, +      "dependencies": { +        "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" +      }, +      "engines": { +        "node": "*" +      }, +      "funding": { +        "url": "https://github.com/sponsors/isaacs" +      } +    }, +    "node_modules/has": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", +      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", +      "dev": true, +      "dependencies": { +        "function-bind": "^1.1.1" +      }, +      "engines": { +        "node": ">= 0.4.0" +      } +    }, +    "node_modules/has-bigints": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", +      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", +      "dev": true, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/has-symbols": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", +      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", +      "dev": true, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/has-tostringtag": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", +      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", +      "dev": true, +      "dependencies": { +        "has-symbols": "^1.0.2" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/hash-base": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", +      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.4", +        "readable-stream": "^3.6.0", +        "safe-buffer": "^5.2.0" +      }, +      "engines": { +        "node": ">=4" +      } +    }, +    "node_modules/hash-base/node_modules/readable-stream": { +      "version": "3.6.0", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", +      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "string_decoder": "^1.1.1", +        "util-deprecate": "^1.0.1" +      }, +      "engines": { +        "node": ">= 6" +      } +    }, +    "node_modules/hash.js": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", +      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "minimalistic-assert": "^1.0.1" +      } +    }, +    "node_modules/hmac-drbg": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", +      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", +      "dev": true, +      "dependencies": { +        "hash.js": "^1.0.3", +        "minimalistic-assert": "^1.0.0", +        "minimalistic-crypto-utils": "^1.0.1" +      } +    }, +    "node_modules/htmlescape": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", +      "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", +      "dev": true, +      "engines": { +        "node": ">=0.10" +      } +    }, +    "node_modules/https-browserify": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", +      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", +      "dev": true +    }, +    "node_modules/ieee754": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", +      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", +      "dev": true, +      "funding": [ +        { +          "type": "github", +          "url": "https://github.com/sponsors/feross" +        }, +        { +          "type": "patreon", +          "url": "https://www.patreon.com/feross" +        }, +        { +          "type": "consulting", +          "url": "https://feross.org/support" +        } +      ] +    }, +    "node_modules/inflight": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", +      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", +      "dev": true, +      "dependencies": { +        "once": "^1.3.0", +        "wrappy": "1" +      } +    }, +    "node_modules/inherits": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", +      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", +      "dev": true +    }, +    "node_modules/inline-source-map": { +      "version": "0.6.2", +      "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", +      "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", +      "dev": true, +      "dependencies": { +        "source-map": "~0.5.3" +      } +    }, +    "node_modules/insert-module-globals": { +      "version": "7.2.1", +      "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", +      "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", +      "dev": true, +      "dependencies": { +        "acorn-node": "^1.5.2", +        "combine-source-map": "^0.8.0", +        "concat-stream": "^1.6.1", +        "is-buffer": "^1.1.0", +        "JSONStream": "^1.0.3", +        "path-is-absolute": "^1.0.1", +        "process": "~0.11.0", +        "through2": "^2.0.0", +        "undeclared-identifiers": "^1.1.2", +        "xtend": "^4.0.0" +      }, +      "bin": { +        "insert-module-globals": "bin/cmd.js" +      } +    }, +    "node_modules/internal-slot": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", +      "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", +      "dev": true, +      "dependencies": { +        "get-intrinsic": "^1.1.0", +        "has": "^1.0.3", +        "side-channel": "^1.0.4" +      }, +      "engines": { +        "node": ">= 0.4" +      } +    }, +    "node_modules/is-arguments": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", +      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-bigint": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", +      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", +      "dev": true, +      "dependencies": { +        "has-bigints": "^1.0.1" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-boolean-object": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", +      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/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 +    }, +    "node_modules/is-callable": { +      "version": "1.2.4", +      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", +      "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", +      "dev": true, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-core-module": { +      "version": "2.5.0", +      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", +      "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", +      "dev": true, +      "dependencies": { +        "has": "^1.0.3" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-date-object": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", +      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", +      "dev": true, +      "dependencies": { +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-generator-function": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", +      "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", +      "dev": true, +      "dependencies": { +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-negative-zero": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", +      "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", +      "dev": true, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-number-object": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", +      "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", +      "dev": true, +      "dependencies": { +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-regex": { +      "version": "1.1.4", +      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", +      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-string": { +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", +      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", +      "dev": true, +      "dependencies": { +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-symbol": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", +      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", +      "dev": true, +      "dependencies": { +        "has-symbols": "^1.0.2" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/is-typed-array": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz", +      "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", +      "dev": true, +      "dependencies": { +        "available-typed-arrays": "^1.0.4", +        "call-bind": "^1.0.2", +        "es-abstract": "^1.18.5", +        "foreach": "^2.0.5", +        "has-tostringtag": "^1.0.0" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/isarray": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", +      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", +      "dev": true +    }, +    "node_modules/jsonparse": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", +      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", +      "dev": true, +      "engines": [ +        "node >= 0.2.0" +      ] +    }, +    "node_modules/JSONStream": {        "version": "1.3.5",        "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",        "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",        "dev": true, -      "requires": { +      "dependencies": {          "jsonparse": "^1.2.0",          "through": ">=2.2.7 <3" +      }, +      "bin": { +        "JSONStream": "bin.js" +      }, +      "engines": { +        "node": "*" +      } +    }, +    "node_modules/labeled-stream-splicer": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", +      "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.1", +        "stream-splicer": "^2.0.0"        }      }, +    "node_modules/lodash.memoize": { +      "version": "3.0.4", +      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", +      "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", +      "dev": true +    }, +    "node_modules/md5.js": { +      "version": "1.3.5", +      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", +      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", +      "dev": true, +      "dependencies": { +        "hash-base": "^3.0.0", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "node_modules/miller-rabin": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", +      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.0.0", +        "brorand": "^1.0.1" +      }, +      "bin": { +        "miller-rabin": "bin/miller-rabin" +      } +    }, +    "node_modules/miller-rabin/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/minimalistic-assert": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", +      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", +      "dev": true +    }, +    "node_modules/minimalistic-crypto-utils": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", +      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", +      "dev": true +    }, +    "node_modules/minimatch": { +      "version": "3.0.4", +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", +      "dev": true, +      "dependencies": { +        "brace-expansion": "^1.1.7" +      }, +      "engines": { +        "node": "*" +      } +    }, +    "node_modules/minimist": { +      "version": "1.2.6", +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", +      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", +      "dev": true +    }, +    "node_modules/mkdirp-classic": { +      "version": "0.5.3", +      "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", +      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", +      "dev": true +    }, +    "node_modules/module-deps": { +      "version": "6.2.3", +      "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", +      "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", +      "dev": true, +      "dependencies": { +        "browser-resolve": "^2.0.0", +        "cached-path-relative": "^1.0.2", +        "concat-stream": "~1.6.0", +        "defined": "^1.0.0", +        "detective": "^5.2.0", +        "duplexer2": "^0.1.2", +        "inherits": "^2.0.1", +        "JSONStream": "^1.0.3", +        "parents": "^1.0.0", +        "readable-stream": "^2.0.2", +        "resolve": "^1.4.0", +        "stream-combiner2": "^1.1.1", +        "subarg": "^1.0.0", +        "through2": "^2.0.0", +        "xtend": "^4.0.0" +      }, +      "bin": { +        "module-deps": "bin/cmd.js" +      }, +      "engines": { +        "node": ">= 0.8.0" +      } +    }, +    "node_modules/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, +      "engines": { +        "node": ">=0.10.0" +      } +    }, +    "node_modules/object-inspect": { +      "version": "1.11.0", +      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", +      "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", +      "dev": true, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/object-keys": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", +      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", +      "dev": true, +      "engines": { +        "node": ">= 0.4" +      } +    }, +    "node_modules/object.assign": { +      "version": "4.1.2", +      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", +      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.0", +        "define-properties": "^1.1.3", +        "has-symbols": "^1.0.1", +        "object-keys": "^1.1.1" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/once": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", +      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", +      "dev": true, +      "dependencies": { +        "wrappy": "1" +      } +    }, +    "node_modules/os-browserify": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", +      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", +      "dev": true +    }, +    "node_modules/pako": { +      "version": "1.0.11", +      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", +      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", +      "dev": true +    }, +    "node_modules/parents": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", +      "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", +      "dev": true, +      "dependencies": { +        "path-platform": "~0.11.15" +      } +    }, +    "node_modules/parse-asn1": { +      "version": "5.1.6", +      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", +      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", +      "dev": true, +      "dependencies": { +        "asn1.js": "^5.2.0", +        "browserify-aes": "^1.0.0", +        "evp_bytestokey": "^1.0.0", +        "pbkdf2": "^3.0.3", +        "safe-buffer": "^5.1.1" +      } +    }, +    "node_modules/path-browserify": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", +      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", +      "dev": true +    }, +    "node_modules/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, +      "engines": { +        "node": ">=0.10.0" +      } +    }, +    "node_modules/path-parse": { +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", +      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", +      "dev": true +    }, +    "node_modules/path-platform": { +      "version": "0.11.15", +      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", +      "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", +      "dev": true, +      "engines": { +        "node": ">= 0.8.0" +      } +    }, +    "node_modules/pbkdf2": { +      "version": "3.1.2", +      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", +      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", +      "dev": true, +      "dependencies": { +        "create-hash": "^1.1.2", +        "create-hmac": "^1.1.4", +        "ripemd160": "^2.0.1", +        "safe-buffer": "^5.0.1", +        "sha.js": "^2.4.8" +      }, +      "engines": { +        "node": ">=0.12" +      } +    }, +    "node_modules/process": { +      "version": "0.11.10", +      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", +      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", +      "dev": true, +      "engines": { +        "node": ">= 0.6.0" +      } +    }, +    "node_modules/process-nextick-args": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", +      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", +      "dev": true +    }, +    "node_modules/public-encrypt": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", +      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", +      "dev": true, +      "dependencies": { +        "bn.js": "^4.1.0", +        "browserify-rsa": "^4.0.0", +        "create-hash": "^1.1.0", +        "parse-asn1": "^5.0.0", +        "randombytes": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "node_modules/public-encrypt/node_modules/bn.js": { +      "version": "4.12.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", +      "dev": true +    }, +    "node_modules/punycode": { +      "version": "1.4.1", +      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", +      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", +      "dev": true +    }, +    "node_modules/querystring": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", +      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", +      "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", +      "dev": true, +      "engines": { +        "node": ">=0.4.x" +      } +    }, +    "node_modules/querystring-es3": { +      "version": "0.2.1", +      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", +      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", +      "dev": true, +      "engines": { +        "node": ">=0.4.x" +      } +    }, +    "node_modules/randombytes": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", +      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", +      "dev": true, +      "dependencies": { +        "safe-buffer": "^5.1.0" +      } +    }, +    "node_modules/randomfill": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", +      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", +      "dev": true, +      "dependencies": { +        "randombytes": "^2.0.5", +        "safe-buffer": "^5.1.0" +      } +    }, +    "node_modules/read-only-stream": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", +      "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", +      "dev": true, +      "dependencies": { +        "readable-stream": "^2.0.2" +      } +    }, +    "node_modules/readable-stream": { +      "version": "2.3.7", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", +      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", +      "dev": true, +      "dependencies": { +        "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" +      } +    }, +    "node_modules/readable-stream/node_modules/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 +    }, +    "node_modules/readable-stream/node_modules/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, +      "dependencies": { +        "safe-buffer": "~5.1.0" +      } +    }, +    "node_modules/resolve": { +      "version": "1.20.0", +      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", +      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", +      "dev": true, +      "dependencies": { +        "is-core-module": "^2.2.0", +        "path-parse": "^1.0.6" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/ripemd160": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", +      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", +      "dev": true, +      "dependencies": { +        "hash-base": "^3.0.0", +        "inherits": "^2.0.1" +      } +    }, +    "node_modules/safe-buffer": { +      "version": "5.2.1", +      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", +      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", +      "dev": true, +      "funding": [ +        { +          "type": "github", +          "url": "https://github.com/sponsors/feross" +        }, +        { +          "type": "patreon", +          "url": "https://www.patreon.com/feross" +        }, +        { +          "type": "consulting", +          "url": "https://feross.org/support" +        } +      ] +    }, +    "node_modules/safer-buffer": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", +      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", +      "dev": true +    }, +    "node_modules/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, +      "dependencies": { +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      }, +      "bin": { +        "sha.js": "bin.js" +      } +    }, +    "node_modules/shasum-object": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", +      "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", +      "dev": true, +      "dependencies": { +        "fast-safe-stringify": "^2.0.7" +      } +    }, +    "node_modules/shell-quote": { +      "version": "1.7.2", +      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", +      "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", +      "dev": true +    }, +    "node_modules/side-channel": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", +      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.0", +        "get-intrinsic": "^1.0.2", +        "object-inspect": "^1.9.0" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/simple-concat": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", +      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", +      "dev": true, +      "funding": [ +        { +          "type": "github", +          "url": "https://github.com/sponsors/feross" +        }, +        { +          "type": "patreon", +          "url": "https://www.patreon.com/feross" +        }, +        { +          "type": "consulting", +          "url": "https://feross.org/support" +        } +      ] +    }, +    "node_modules/source-map": { +      "version": "0.5.7", +      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", +      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", +      "dev": true, +      "engines": { +        "node": ">=0.10.0" +      } +    }, +    "node_modules/stream-browserify": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", +      "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", +      "dev": true, +      "dependencies": { +        "inherits": "~2.0.4", +        "readable-stream": "^3.5.0" +      } +    }, +    "node_modules/stream-browserify/node_modules/readable-stream": { +      "version": "3.6.0", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", +      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "string_decoder": "^1.1.1", +        "util-deprecate": "^1.0.1" +      }, +      "engines": { +        "node": ">= 6" +      } +    }, +    "node_modules/stream-combiner2": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", +      "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", +      "dev": true, +      "dependencies": { +        "duplexer2": "~0.1.0", +        "readable-stream": "^2.0.2" +      } +    }, +    "node_modules/stream-http": { +      "version": "3.2.0", +      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", +      "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", +      "dev": true, +      "dependencies": { +        "builtin-status-codes": "^3.0.0", +        "inherits": "^2.0.4", +        "readable-stream": "^3.6.0", +        "xtend": "^4.0.2" +      } +    }, +    "node_modules/stream-http/node_modules/readable-stream": { +      "version": "3.6.0", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", +      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "string_decoder": "^1.1.1", +        "util-deprecate": "^1.0.1" +      }, +      "engines": { +        "node": ">= 6" +      } +    }, +    "node_modules/stream-splicer": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", +      "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.1", +        "readable-stream": "^2.0.2" +      } +    }, +    "node_modules/string_decoder": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", +      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", +      "dev": true, +      "dependencies": { +        "safe-buffer": "~5.2.0" +      } +    }, +    "node_modules/string.prototype.trimend": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", +      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "define-properties": "^1.1.3" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/string.prototype.trimstart": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", +      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", +      "dev": true, +      "dependencies": { +        "call-bind": "^1.0.2", +        "define-properties": "^1.1.3" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/subarg": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", +      "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", +      "dev": true, +      "dependencies": { +        "minimist": "^1.1.0" +      } +    }, +    "node_modules/syntax-error": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", +      "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", +      "dev": true, +      "dependencies": { +        "acorn-node": "^1.2.0" +      } +    }, +    "node_modules/through": { +      "version": "2.3.8", +      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", +      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", +      "dev": true +    }, +    "node_modules/through2": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", +      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", +      "dev": true, +      "dependencies": { +        "readable-stream": "~2.3.6", +        "xtend": "~4.0.1" +      } +    }, +    "node_modules/timers-browserify": { +      "version": "1.4.2", +      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", +      "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", +      "dev": true, +      "dependencies": { +        "process": "~0.11.0" +      }, +      "engines": { +        "node": ">=0.6.0" +      } +    }, +    "node_modules/tty-browserify": { +      "version": "0.0.1", +      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", +      "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", +      "dev": true +    }, +    "node_modules/typedarray": { +      "version": "0.0.6", +      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", +      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", +      "dev": true +    }, +    "node_modules/typescript": { +      "version": "4.6.3", +      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", +      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", +      "dev": true, +      "bin": { +        "tsc": "bin/tsc", +        "tsserver": "bin/tsserver" +      }, +      "engines": { +        "node": ">=4.2.0" +      } +    }, +    "node_modules/umd": { +      "version": "3.0.3", +      "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", +      "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", +      "dev": true, +      "bin": { +        "umd": "bin/cli.js" +      } +    }, +    "node_modules/unbox-primitive": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", +      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", +      "dev": true, +      "dependencies": { +        "function-bind": "^1.1.1", +        "has-bigints": "^1.0.1", +        "has-symbols": "^1.0.2", +        "which-boxed-primitive": "^1.0.2" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/undeclared-identifiers": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", +      "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", +      "dev": true, +      "dependencies": { +        "acorn-node": "^1.3.0", +        "dash-ast": "^1.0.0", +        "get-assigned-identifiers": "^1.2.0", +        "simple-concat": "^1.0.0", +        "xtend": "^4.0.1" +      }, +      "bin": { +        "undeclared-identifiers": "bin.js" +      } +    }, +    "node_modules/url": { +      "version": "0.11.0", +      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", +      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", +      "dev": true, +      "dependencies": { +        "punycode": "1.3.2", +        "querystring": "0.2.0" +      } +    }, +    "node_modules/url/node_modules/punycode": { +      "version": "1.3.2", +      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", +      "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", +      "dev": true +    }, +    "node_modules/util": { +      "version": "0.12.4", +      "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", +      "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", +      "dev": true, +      "dependencies": { +        "inherits": "^2.0.3", +        "is-arguments": "^1.0.4", +        "is-generator-function": "^1.0.7", +        "is-typed-array": "^1.1.3", +        "safe-buffer": "^5.1.2", +        "which-typed-array": "^1.1.2" +      } +    }, +    "node_modules/util-deprecate": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", +      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", +      "dev": true +    }, +    "node_modules/vm-browserify": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", +      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", +      "dev": true +    }, +    "node_modules/which-boxed-primitive": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", +      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", +      "dev": true, +      "dependencies": { +        "is-bigint": "^1.0.1", +        "is-boolean-object": "^1.1.0", +        "is-number-object": "^1.0.4", +        "is-string": "^1.0.5", +        "is-symbol": "^1.0.3" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/which-typed-array": { +      "version": "1.1.6", +      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz", +      "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", +      "dev": true, +      "dependencies": { +        "available-typed-arrays": "^1.0.4", +        "call-bind": "^1.0.2", +        "es-abstract": "^1.18.5", +        "foreach": "^2.0.5", +        "has-tostringtag": "^1.0.0", +        "is-typed-array": "^1.1.6" +      }, +      "engines": { +        "node": ">= 0.4" +      }, +      "funding": { +        "url": "https://github.com/sponsors/ljharb" +      } +    }, +    "node_modules/wrappy": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", +      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", +      "dev": true +    }, +    "node_modules/xtend": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", +      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", +      "dev": true, +      "engines": { +        "node": ">=0.4" +      } +    } +  }, +  "dependencies": {      "acorn": { -      "version": "7.1.1", -      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", -      "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", +      "version": "7.4.1", +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", +      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",        "dev": true      },      "acorn-node": { @@ -32,26 +1986,27 @@        }      },      "acorn-walk": { -      "version": "7.1.1", -      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", -      "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", +      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",        "dev": true      },      "asn1.js": { -      "version": "4.10.1", -      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", -      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", +      "version": "5.4.1", +      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", +      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",        "dev": true,        "requires": {          "bn.js": "^4.0.0",          "inherits": "^2.0.1", -        "minimalistic-assert": "^1.0.0" +        "minimalistic-assert": "^1.0.0", +        "safer-buffer": "^2.1.0"        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        } @@ -83,22 +2038,28 @@          }        }      }, +    "available-typed-arrays": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", +      "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", +      "dev": true +    },      "balanced-match": { -      "version": "1.0.0", -      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", -      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", +      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",        "dev": true      },      "base64-js": { -      "version": "1.3.1", -      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", -      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", +      "version": "1.5.1", +      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", +      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",        "dev": true      },      "bn.js": { -      "version": "5.1.1", -      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", -      "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==", +      "version": "5.2.0", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", +      "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",        "dev": true      },      "brace-expansion": { @@ -123,41 +2084,32 @@        "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",        "dev": true,        "requires": { -        "JSONStream": "^1.0.3",          "combine-source-map": "~0.8.0",          "defined": "^1.0.0", +        "JSONStream": "^1.0.3",          "safe-buffer": "^5.1.1",          "through2": "^2.0.0",          "umd": "^3.0.0"        }      },      "browser-resolve": { -      "version": "1.11.3", -      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", -      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", +      "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",        "dev": true,        "requires": { -        "resolve": "1.1.7" -      }, -      "dependencies": { -        "resolve": { -          "version": "1.1.7", -          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", -          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", -          "dev": true -        } +        "resolve": "^1.17.0"        }      },      "browserify": { -      "version": "16.5.1", -      "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.1.tgz", -      "integrity": "sha512-EQX0h59Pp+0GtSRb5rL6OTfrttlzv+uyaUVlK6GX3w11SQ0jKPKyjC/54RhPR2ib2KmfcELM06e8FxcI5XNU2A==", +      "version": "17.0.0", +      "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", +      "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==",        "dev": true,        "requires": { -        "JSONStream": "^1.0.3",          "assert": "^1.4.0",          "browser-pack": "^6.0.1", -        "browser-resolve": "^1.11.0", +        "browser-resolve": "^2.0.0",          "browserify-zlib": "~0.2.0",          "buffer": "~5.2.1",          "cached-path-relative": "^1.0.0", @@ -166,31 +2118,32 @@          "constants-browserify": "~1.0.0",          "crypto-browserify": "^3.0.0",          "defined": "^1.0.0", -        "deps-sort": "^2.0.0", +        "deps-sort": "^2.0.1",          "domain-browser": "^1.2.0",          "duplexer2": "~0.1.2", -        "events": "^2.0.0", +        "events": "^3.0.0",          "glob": "^7.1.0",          "has": "^1.0.0",          "htmlescape": "^1.1.0",          "https-browserify": "^1.0.0",          "inherits": "~2.0.1", -        "insert-module-globals": "^7.0.0", +        "insert-module-globals": "^7.2.1", +        "JSONStream": "^1.0.3",          "labeled-stream-splicer": "^2.0.0",          "mkdirp-classic": "^0.5.2", -        "module-deps": "^6.0.0", +        "module-deps": "^6.2.3",          "os-browserify": "~0.3.0",          "parents": "^1.0.1", -        "path-browserify": "~0.0.0", +        "path-browserify": "^1.0.0",          "process": "~0.11.0",          "punycode": "^1.3.2",          "querystring-es3": "~0.2.0",          "read-only-stream": "^2.0.0",          "readable-stream": "^2.0.2",          "resolve": "^1.1.4", -        "shasum": "^1.0.0", +        "shasum-object": "^1.0.0",          "shell-quote": "^1.6.1", -        "stream-browserify": "^2.0.0", +        "stream-browserify": "^3.0.0",          "stream-http": "^3.0.0",          "string_decoder": "^1.1.1",          "subarg": "^1.0.0", @@ -199,7 +2152,7 @@          "timers-browserify": "^1.0.1",          "tty-browserify": "0.0.1",          "url": "~0.11.0", -        "util": "~0.10.1", +        "util": "~0.12.0",          "vm-browserify": "^1.0.0",          "xtend": "^4.0.0"        } @@ -242,37 +2195,30 @@        }      },      "browserify-rsa": { -      "version": "4.0.1", -      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", -      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", +      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",        "dev": true,        "requires": { -        "bn.js": "^4.1.0", +        "bn.js": "^5.0.0",          "randombytes": "^2.0.1" -      }, -      "dependencies": { -        "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", -          "dev": true -        }        }      },      "browserify-sign": { -      "version": "4.1.0", -      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz", -      "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==", +      "version": "4.2.1", +      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", +      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",        "dev": true,        "requires": {          "bn.js": "^5.1.1",          "browserify-rsa": "^4.0.1",          "create-hash": "^1.2.0",          "create-hmac": "^1.1.7", -        "elliptic": "^6.5.2", +        "elliptic": "^6.5.3",          "inherits": "^2.0.4",          "parse-asn1": "^5.1.5", -        "readable-stream": "^3.6.0" +        "readable-stream": "^3.6.0", +        "safe-buffer": "^5.2.0"        },        "dependencies": {          "readable-stream": { @@ -308,9 +2254,9 @@        }      },      "buffer-from": { -      "version": "1.1.1", -      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", -      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", +      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",        "dev": true      },      "buffer-xor": { @@ -326,11 +2272,21 @@        "dev": true      },      "cached-path-relative": { -      "version": "1.0.2", -      "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", -      "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", +      "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==",        "dev": true      }, +    "call-bind": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", +      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", +      "dev": true, +      "requires": { +        "function-bind": "^1.1.1", +        "get-intrinsic": "^1.0.2" +      } +    },      "cipher-base": {        "version": "1.0.4",        "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -396,19 +2352,19 @@        "dev": true      },      "create-ecdh": { -      "version": "4.0.3", -      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", -      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", +      "version": "4.0.4", +      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", +      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",        "dev": true,        "requires": {          "bn.js": "^4.1.0", -        "elliptic": "^6.0.0" +        "elliptic": "^6.5.3"        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        } @@ -465,6 +2421,15 @@        "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",        "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" +      } +    },      "defined": {        "version": "1.0.0",        "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -516,9 +2481,9 @@        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        } @@ -539,32 +2504,68 @@        }      },      "elliptic": { -      "version": "6.5.2", -      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", -      "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", +      "version": "6.5.4", +      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", +      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",        "dev": true,        "requires": { -        "bn.js": "^4.4.0", -        "brorand": "^1.0.1", +        "bn.js": "^4.11.9", +        "brorand": "^1.1.0",          "hash.js": "^1.0.0", -        "hmac-drbg": "^1.0.0", -        "inherits": "^2.0.1", -        "minimalistic-assert": "^1.0.0", -        "minimalistic-crypto-utils": "^1.0.0" +        "hmac-drbg": "^1.0.1", +        "inherits": "^2.0.4", +        "minimalistic-assert": "^1.0.1", +        "minimalistic-crypto-utils": "^1.0.1"        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        }      }, +    "es-abstract": { +      "version": "1.18.5", +      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", +      "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "es-to-primitive": "^1.2.1", +        "function-bind": "^1.1.1", +        "get-intrinsic": "^1.1.1", +        "has": "^1.0.3", +        "has-symbols": "^1.0.2", +        "internal-slot": "^1.0.3", +        "is-callable": "^1.2.3", +        "is-negative-zero": "^2.0.1", +        "is-regex": "^1.1.3", +        "is-string": "^1.0.6", +        "object-inspect": "^1.11.0", +        "object-keys": "^1.1.1", +        "object.assign": "^4.1.2", +        "string.prototype.trimend": "^1.0.4", +        "string.prototype.trimstart": "^1.0.4", +        "unbox-primitive": "^1.0.1" +      } +    }, +    "es-to-primitive": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", +      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", +      "dev": true, +      "requires": { +        "is-callable": "^1.1.4", +        "is-date-object": "^1.0.1", +        "is-symbol": "^1.0.2" +      } +    },      "events": { -      "version": "2.1.0", -      "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", -      "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", +      "version": "3.3.0", +      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", +      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",        "dev": true      },      "evp_bytestokey": { @@ -578,9 +2579,15 @@        }      },      "fast-safe-stringify": { -      "version": "2.0.7", -      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", -      "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", +      "version": "2.0.8", +      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", +      "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", +      "dev": true +    }, +    "foreach": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", +      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",        "dev": true      },      "fs.realpath": { @@ -601,10 +2608,21 @@        "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",        "dev": true      }, +    "get-intrinsic": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", +      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", +      "dev": true, +      "requires": { +        "function-bind": "^1.1.1", +        "has": "^1.0.3", +        "has-symbols": "^1.0.1" +      } +    },      "glob": { -      "version": "7.1.6", -      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", -      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", +      "version": "7.1.7", +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", +      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",        "dev": true,        "requires": {          "fs.realpath": "^1.0.0", @@ -624,6 +2642,27 @@          "function-bind": "^1.1.1"        }      }, +    "has-bigints": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", +      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", +      "dev": true +    }, +    "has-symbols": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", +      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", +      "dev": true +    }, +    "has-tostringtag": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", +      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", +      "dev": true, +      "requires": { +        "has-symbols": "^1.0.2" +      } +    },      "hash-base": {        "version": "3.1.0",        "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -682,9 +2721,9 @@        "dev": true      },      "ieee754": { -      "version": "1.1.13", -      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", -      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", +      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",        "dev": true      },      "inflight": { @@ -713,16 +2752,16 @@        }      },      "insert-module-globals": { -      "version": "7.2.0", -      "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", -      "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", +      "version": "7.2.1", +      "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", +      "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",        "dev": true,        "requires": { -        "JSONStream": "^1.0.3",          "acorn-node": "^1.5.2",          "combine-source-map": "^0.8.0",          "concat-stream": "^1.6.1",          "is-buffer": "^1.1.0", +        "JSONStream": "^1.0.3",          "path-is-absolute": "^1.0.1",          "process": "~0.11.0",          "through2": "^2.0.0", @@ -730,31 +2769,145 @@          "xtend": "^4.0.0"        }      }, +    "internal-slot": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", +      "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", +      "dev": true, +      "requires": { +        "get-intrinsic": "^1.1.0", +        "has": "^1.0.3", +        "side-channel": "^1.0.4" +      } +    }, +    "is-arguments": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", +      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^1.0.0" +      } +    }, +    "is-bigint": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", +      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", +      "dev": true, +      "requires": { +        "has-bigints": "^1.0.1" +      } +    }, +    "is-boolean-object": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", +      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^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      }, -    "isarray": { -      "version": "1.0.0", -      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", -      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", +    "is-callable": { +      "version": "1.2.4", +      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", +      "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",        "dev": true      }, -    "json-stable-stringify": { -      "version": "0.0.1", -      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", -      "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", +    "is-core-module": { +      "version": "2.5.0", +      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", +      "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", +      "dev": true, +      "requires": { +        "has": "^1.0.3" +      } +    }, +    "is-date-object": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", +      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",        "dev": true,        "requires": { -        "jsonify": "~0.0.0" +        "has-tostringtag": "^1.0.0"        }      }, -    "jsonify": { -      "version": "0.0.0", -      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", -      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", +    "is-generator-function": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", +      "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", +      "dev": true, +      "requires": { +        "has-tostringtag": "^1.0.0" +      } +    }, +    "is-negative-zero": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", +      "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", +      "dev": true +    }, +    "is-number-object": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", +      "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", +      "dev": true, +      "requires": { +        "has-tostringtag": "^1.0.0" +      } +    }, +    "is-regex": { +      "version": "1.1.4", +      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", +      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "has-tostringtag": "^1.0.0" +      } +    }, +    "is-string": { +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", +      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", +      "dev": true, +      "requires": { +        "has-tostringtag": "^1.0.0" +      } +    }, +    "is-symbol": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", +      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", +      "dev": true, +      "requires": { +        "has-symbols": "^1.0.2" +      } +    }, +    "is-typed-array": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz", +      "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", +      "dev": true, +      "requires": { +        "available-typed-arrays": "^1.0.4", +        "call-bind": "^1.0.2", +        "es-abstract": "^1.18.5", +        "foreach": "^2.0.5", +        "has-tostringtag": "^1.0.0" +      } +    }, +    "isarray": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", +      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",        "dev": true      },      "jsonparse": { @@ -763,6 +2916,16 @@        "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",        "dev": true      }, +    "JSONStream": { +      "version": "1.3.5", +      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", +      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", +      "dev": true, +      "requires": { +        "jsonparse": "^1.2.0", +        "through": ">=2.2.7 <3" +      } +    },      "labeled-stream-splicer": {        "version": "2.0.2",        "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -801,9 +2964,9 @@        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        } @@ -830,9 +2993,9 @@        }      },      "minimist": { -      "version": "1.2.5", -      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", -      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", +      "version": "1.2.6", +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", +      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",        "dev": true      },      "mkdirp-classic": { @@ -842,19 +3005,19 @@        "dev": true      },      "module-deps": { -      "version": "6.2.2", -      "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", -      "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", +      "version": "6.2.3", +      "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", +      "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",        "dev": true,        "requires": { -        "JSONStream": "^1.0.3", -        "browser-resolve": "^1.7.0", +        "browser-resolve": "^2.0.0",          "cached-path-relative": "^1.0.2",          "concat-stream": "~1.6.0",          "defined": "^1.0.0",          "detective": "^5.2.0",          "duplexer2": "^0.1.2",          "inherits": "^2.0.1", +        "JSONStream": "^1.0.3",          "parents": "^1.0.0",          "readable-stream": "^2.0.2",          "resolve": "^1.4.0", @@ -870,6 +3033,30 @@        "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",        "dev": true      }, +    "object-inspect": { +      "version": "1.11.0", +      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", +      "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", +      "dev": true +    }, +    "object-keys": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", +      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", +      "dev": true +    }, +    "object.assign": { +      "version": "4.1.2", +      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", +      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.0", +        "define-properties": "^1.1.3", +        "has-symbols": "^1.0.1", +        "object-keys": "^1.1.1" +      } +    },      "once": {        "version": "1.4.0",        "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -901,23 +3088,22 @@        }      },      "parse-asn1": { -      "version": "5.1.5", -      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", -      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", +      "version": "5.1.6", +      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", +      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",        "dev": true,        "requires": { -        "asn1.js": "^4.0.0", +        "asn1.js": "^5.2.0",          "browserify-aes": "^1.0.0", -        "create-hash": "^1.1.0",          "evp_bytestokey": "^1.0.0",          "pbkdf2": "^3.0.3",          "safe-buffer": "^5.1.1"        }      },      "path-browserify": { -      "version": "0.0.1", -      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", -      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", +      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",        "dev": true      },      "path-is-absolute": { @@ -927,9 +3113,9 @@        "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==", +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", +      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",        "dev": true      },      "path-platform": { @@ -939,9 +3125,9 @@        "dev": true      },      "pbkdf2": { -      "version": "3.0.17", -      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", -      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", +      "version": "3.1.2", +      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", +      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",        "dev": true,        "requires": {          "create-hash": "^1.1.2", @@ -978,9 +3164,9 @@        },        "dependencies": {          "bn.js": { -          "version": "4.11.8", -          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", +          "version": "4.12.0", +          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", +          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",            "dev": true          }        } @@ -1064,11 +3250,12 @@        }      },      "resolve": { -      "version": "1.17.0", -      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", -      "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", +      "version": "1.20.0", +      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", +      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",        "dev": true,        "requires": { +        "is-core-module": "^2.2.0",          "path-parse": "^1.0.6"        }      }, @@ -1083,9 +3270,15 @@        }      },      "safe-buffer": { -      "version": "5.2.0", -      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", -      "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", +      "version": "5.2.1", +      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", +      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", +      "dev": true +    }, +    "safer-buffer": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", +      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",        "dev": true      },      "sha.js": { @@ -1098,16 +3291,6 @@          "safe-buffer": "^5.0.1"        }      }, -    "shasum": { -      "version": "1.0.2", -      "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", -      "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", -      "dev": true, -      "requires": { -        "json-stable-stringify": "~0.0.0", -        "sha.js": "~2.4.4" -      } -    },      "shasum-object": {        "version": "1.0.0",        "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", @@ -1123,10 +3306,21 @@        "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",        "dev": true      }, +    "side-channel": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", +      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.0", +        "get-intrinsic": "^1.0.2", +        "object-inspect": "^1.9.0" +      } +    },      "simple-concat": { -      "version": "1.0.0", -      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", -      "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", +      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",        "dev": true      },      "source-map": { @@ -1136,13 +3330,26 @@        "dev": true      },      "stream-browserify": { -      "version": "2.0.2", -      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", -      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", +      "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",        "dev": true,        "requires": { -        "inherits": "~2.0.1", -        "readable-stream": "^2.0.2" +        "inherits": "~2.0.4", +        "readable-stream": "^3.5.0" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "3.6.0", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", +          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +          "dev": true, +          "requires": { +            "inherits": "^2.0.3", +            "string_decoder": "^1.1.1", +            "util-deprecate": "^1.0.1" +          } +        }        }      },      "stream-combiner2": { @@ -1156,9 +3363,9 @@        }      },      "stream-http": { -      "version": "3.1.1", -      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", -      "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", +      "version": "3.2.0", +      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", +      "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",        "dev": true,        "requires": {          "builtin-status-codes": "^3.0.0", @@ -1199,6 +3406,26 @@          "safe-buffer": "~5.2.0"        }      }, +    "string.prototype.trimend": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", +      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "define-properties": "^1.1.3" +      } +    }, +    "string.prototype.trimstart": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", +      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", +      "dev": true, +      "requires": { +        "call-bind": "^1.0.2", +        "define-properties": "^1.1.3" +      } +    },      "subarg": {        "version": "1.0.0",        "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", @@ -1255,9 +3482,9 @@        "dev": true      },      "typescript": { -      "version": "3.8.3", -      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", -      "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", +      "version": "4.6.3", +      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", +      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",        "dev": true      },      "umd": { @@ -1266,6 +3493,18 @@        "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",        "dev": true      }, +    "unbox-primitive": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", +      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", +      "dev": true, +      "requires": { +        "function-bind": "^1.1.1", +        "has-bigints": "^1.0.1", +        "has-symbols": "^1.0.2", +        "which-boxed-primitive": "^1.0.2" +      } +    },      "undeclared-identifiers": {        "version": "1.1.3",        "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", @@ -1298,20 +3537,17 @@        }      },      "util": { -      "version": "0.10.4", -      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", -      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", +      "version": "0.12.4", +      "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", +      "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==",        "dev": true,        "requires": { -        "inherits": "2.0.3" -      }, -      "dependencies": { -        "inherits": { -          "version": "2.0.3", -          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", -          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", -          "dev": true -        } +        "inherits": "^2.0.3", +        "is-arguments": "^1.0.4", +        "is-generator-function": "^1.0.7", +        "is-typed-array": "^1.1.3", +        "safe-buffer": "^5.1.2", +        "which-typed-array": "^1.1.2"        }      },      "util-deprecate": { @@ -1326,6 +3562,33 @@        "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",        "dev": true      }, +    "which-boxed-primitive": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", +      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", +      "dev": true, +      "requires": { +        "is-bigint": "^1.0.1", +        "is-boolean-object": "^1.1.0", +        "is-number-object": "^1.0.4", +        "is-string": "^1.0.5", +        "is-symbol": "^1.0.3" +      } +    }, +    "which-typed-array": { +      "version": "1.1.6", +      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz", +      "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", +      "dev": true, +      "requires": { +        "available-typed-arrays": "^1.0.4", +        "call-bind": "^1.0.2", +        "es-abstract": "^1.18.5", +        "foreach": "^2.0.5", +        "has-tostringtag": "^1.0.0", +        "is-typed-array": "^1.1.6" +      } +    },      "wrappy": {        "version": "1.0.2",        "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 8f089d6..f86d16e 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@  {    "name": "netflix-immersive",    "description": "Don't skip intros, recaps, or credits", -  "version": "0.0.1", +  "version": "0.1.0",    "devDependencies": { -    "browserify": "^16.5.1", -    "typescript": "^3.8.3" +    "browserify": "^17.0.0", +    "typescript": "^4.6.3"    },    "private": true  } diff --git a/src/controls.ts b/src/controls.ts index 4be1752..cc695fd 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -17,6 +17,7 @@  import logger from './logger'; +// 2021.08.14: This may be obsolete, replaced by `seamless.ts`.  const controls = {  	// Hide playback controls. @@ -27,7 +28,7 @@ const controls = {  		hide_cursor();  		const controls_el = document.querySelector( -			'.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active' +			'.watch-video--bottom-controls-container'  		);  		logger.debug('hide():', 'Controls:', controls_el); diff --git a/src/fullscreen_credits.ts b/src/fullscreen_credits.ts index f558221..e436ed5 100644 --- a/src/fullscreen_credits.ts +++ b/src/fullscreen_credits.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -15,7 +15,7 @@  // You should have received a copy of the GNU General Public License  // along with Immersive. If not, see <https://www.gnu.org/licenses/>. -import controls from './controls'; +import logger from './logger';  import wait_element from './wait_element'; @@ -25,19 +25,52 @@ function init_mutation_observer (player) {  		for (var i = 0; i < mutation_list.length; i++) {  			const mutation = mutation_list[i];  			const player = mutation.target as HTMLElement; +			const video = player.querySelector('video') as HTMLElement;  			// The `postplay` class minimises the movie. Remove it if it gets  			// added to remain in full frame. -			if (player.classList.contains('postplay')) { -				player.classList.remove('postplay'); +			if (player.classList.contains('watch-video--player-view-minimized')) { +				logger.debug('fullscreen_credits', 'init_mutation_observer()', 'Maximising'); -				// Playback controls are removed when postplay is activated. -				// Re-enable them. -				player.click(); +				player.classList.remove('watch-video--player-view-minimized'); + +				// Resize the video to full frame. Otherwise it will shrink for +				// a second until the click event kicks in. +				video.style.height = null; +				video.style.width = 'inherit';  				// Activating playback controls makes them visible. Keep them  				// hidden. -				controls.hide(); +				const style_el = document.createElement('style'); +				document.head.appendChild(style_el); + +				const stylesheet = style_el.sheet as CSSStyleSheet; + +				stylesheet.insertRule(` +					.watch-video--back-container { +						visibility: hidden !important; +					} + +					.watch-video--bottom-controls-container { +						display: none !important; +					}`, +					stylesheet.cssRules.length +				); + +				// Playback controls are removed when postplay is activated. +				// Re-enable them. +				const click_area = player.children[0] as HTMLElement; +				click_area.click(); + +				// Once the player controls auto-hide themselves, remove our +				// forced hiding so that the controls become user-accessible +				// again. +				setTimeout( +					function() { +						document.head.removeChild(style_el); +					}, +					4000 +				);  				return;  			} @@ -54,7 +87,7 @@ function init_mutation_observer (player) {  // Initialise the mutation observer when the video player becomes available.  export default function init () { -	wait_element('.NFPlayer.nf-player-container') +	wait_element('.watch-video--player-view')  		.then(function(player) {  			init_mutation_observer(player);  		}); diff --git a/src/index.ts b/src/index.ts index 58d4367..237d232 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -16,14 +16,19 @@  // along with Immersive. If not, see <https://www.gnu.org/licenses/>.  import fullscreen_credits from './fullscreen_credits'; +import logger from './logger'; +import seamless from './seamless';  import styles from './styles';  import watch_credits from './watch_credits';  function main () { +	logger.debug('Initialising'); +  	styles();  	fullscreen_credits();  	watch_credits(); +	seamless();  } diff --git a/src/seamless.ts b/src/seamless.ts new file mode 100644 index 0000000..50595d9 --- /dev/null +++ b/src/seamless.ts @@ -0,0 +1,73 @@ +// Copyright (c) 2021  Teddy Wing +// +// This file is part of Immersive. +// +// Immersive is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Immersive is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Immersive. If not, see <https://www.gnu.org/licenses/>. + +import logger from './logger'; +import wait_element from './wait_element'; + + +// Hide the cursor when seamless credits are played. +function init_mutation_observer (player) { +	const observer = new MutationObserver(function(mutation_list) { +		for (var i = 0; i < mutation_list.length; i++) { +			const mutation = mutation_list[i]; +			const player = mutation.target as HTMLElement; + +			const seamless_controls = document.querySelector( +				'.SeamlessControls--container' +			); + +			if (seamless_controls) { +				logger.debug('seamless', 'init_mutation_observer()', 'Handling seamless'); +				const style_el = document.createElement('style'); + +				// Hide the cursor. +				document.head.appendChild(style_el); + +				const stylesheet = style_el.sheet as CSSStyleSheet; + +				stylesheet.insertRule(` +					body { +						cursor: none !important; +					}`, +					stylesheet.cssRules.length +				); + +				document.body.onmousemove = function() { +					document.head.removeChild(style_el); +				} + +				return; +			} +		} +	}); + +	observer.observe( +		player, +		{ +			childList: true, +			subtree: true +		} +	); +} + +// Initialise the mutation observer when the video player becomes available. +export default function init () { +	wait_element('.watch-video--player-view') +		.then(function(player) { +			init_mutation_observer(player); +		}); +} diff --git a/src/styles.ts b/src/styles.ts index 73ae7c9..c809a43 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -23,12 +23,21 @@ export default function styles () {  	const stylesheet = style.sheet as CSSStyleSheet; +	// 2021.08.13: May want to remove `.player-view-childrens`, which is now +	// replaced by `.advisory-container`.  	stylesheet.insertRule(`  		/* "Back to Browse" button that appears when credits are minimised. */  		.OriginalsPostPlay-BackgroundTrailer .BackToBrowse, +		.watch-video--seamless-back, + +		/* Promo that appears during credis */ +		.OriginalsPostPlay-BackgroundTrailer, +		.SeamlessControls--background-artwork-visible, +		.ptrack-container.fill-container,  		/* Age rating. */  		.player-view-childrens, +		.advisory-container,  		/* "Watch Credits" button. */  		[data-uia="watch-credits-seamless-button"], @@ -37,7 +46,8 @@ export default function styles () {  		a[aria-label="Skip Intro"],  		a[aria-label="Skip Recap"],  		a[aria-label="Next Episode"], -		[data-uia="next-episode-seamless-button"] { +		[data-uia="next-episode-seamless-button"], +		.watch-video--skip-content {  			visibility: hidden !important;  		}`,  		stylesheet.cssRules.length diff --git a/src/userscript-header.txt b/src/userscript-header.txt index fafc46c..a23894d 100644 --- a/src/userscript-header.txt +++ b/src/userscript-header.txt @@ -1,13 +1,13 @@  // ==UserScript==  // @name Netflix Immersive  // @description Netflix user script providing a more immersive experience -// @version 0.0.1 +// @version 0.1.0  // @namespace com.teddywing  // @run-at document-idle  // @match https://www.netflix.com/*  // ==/UserScript== -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This program is free software: you can redistribute it and/or modify  // it under the terms of the GNU General Public License as published by diff --git a/src/watch_credits.ts b/src/watch_credits.ts index f41844a..061cda1 100644 --- a/src/watch_credits.ts +++ b/src/watch_credits.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -19,6 +19,7 @@ import controls from './controls';  import logger from './logger';  import wait_element from './wait_element'; +// 2021.08.14: This may be obsolete, replaced by `seamless.ts`.  // Remove the "Watch Credits" button.  function init_mutation_observer (controls_el) { | 
