Socket
Socket
Sign inDemoInstall

@atlas.js/atlas

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlas.js/atlas - npm Package Compare versions

Comparing version 1.0.0 to 1.0.1

test/init/demoapp/will-throw.js

11

CHANGELOG.md

@@ -6,2 +6,13 @@ # Change Log

<a name="1.0.1"></a>
## [1.0.1](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@1.0.0...@atlas.js/atlas@1.0.1) (2017-10-30)
### Bug Fixes
* **atlas:** Do not mask errors thrown in component modules ([73127aa](https://github.com/strvcom/atlas.js/commit/73127aa))
<a name="1.0.0"></a>

@@ -8,0 +19,0 @@ # 1.0.0 (2017-10-24)

2

package.json
{
"name": "@atlas.js/atlas",
"description": "The main package containing the core functionality of @atlas.js",
"version": "1.0.0",
"version": "1.0.1",
"author": "Robert Rossmann <robert.rossmann@strv.com>",

@@ -6,0 +6,0 @@ "bugs": "https://github.com/strvcom/atlas.js/issues",

@@ -36,26 +36,14 @@ "use strict";

});
const paths = {
hooks: _path.default.resolve(options.root, options.hooks),
services: _path.default.resolve(options.root, options.services),
actions: _path.default.resolve(options.root, options.actions),
aliases: _path.default.resolve(options.root, options.aliases)
};
const modules = {
hooks: atlas.require(options.hooks, {
const types = ['hooks', 'services', 'actions', 'aliases'];
const paths = {};
const modules = {};
for (const type of types) {
paths[type] = _path.default.resolve(options.root, options[type]);
modules[type] = atlas.require(options[type], {
optional: true
}),
services: atlas.require(options.services, {
optional: true
}),
actions: atlas.require(options.actions, {
optional: true
}),
aliases: atlas.require(options.aliases, {
optional: true
})
};
});
}
(0, _lodash.defaultsDeep)(modules, {
hooks: {},
services: {},
actions: {},
aliases: {

@@ -326,2 +314,2 @@ actions: {},

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwicGF0aHMiLCJyZXNvbHZlIiwibW9kdWxlcyIsInJlcXVpcmUiLCJvcHRpb25hbCIsImxvZyIsImRlYnVnIiwiY29tcG9uZW50cyIsIk9iamVjdCIsImtleXMiLCJhbGlhcyIsIkhvb2siLCJlbnRyaWVzIiwiaG9vayIsIlNlcnZpY2UiLCJzZXJ2aWNlIiwiQWN0aW9uIiwiYWN0aW9uIiwicHJlcGFyZWQiLCJzdGFydGVkIiwiY29uc3RydWN0b3IiLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJjYXRhbG9nIiwiTWFwIiwiZGVmYXVsdHMiLCJsb2NhdGlvbiIsImxvYWRlciIsIkNvbXBvbmVudCIsIm9wdHMiLCJ0eXBlIiwicHJlcGFyZSIsImNvbXBvbmVudCIsIlByb21pc2UiLCJhbGwiLCJBcnJheSIsImZyb20iLCJtYXAiLCJsaWZlY3ljbGUiLCJzdGFydCIsImluZm8iLCJzdG9wIiwicmV2ZXJzZSIsIm5hbWUiLCJiYXNlbmFtZSIsImN3ZCIsImxldmVsIiwic2VyaWFsaXplcnMiLCJzdGRTZXJpYWxpemVycyIsImluc3RhbmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7Ozs7QUFhQSxNQUFNQSxLQUFOLENBQVk7QUF1QlYsU0FBT0MsSUFBUCxDQUFZQyxVQUFVLEVBQXRCLEVBQTBCO0FBQ3hCLDhCQUFTQSxPQUFULEVBQWtCO0FBQ2hCQyxjQUFRLFFBRFE7QUFFaEJDLGFBQU8sT0FGUztBQUdoQkMsZ0JBQVUsVUFITTtBQUloQkMsZUFBUyxTQUpPO0FBS2hCQyxlQUFTO0FBTE8sS0FBbEI7QUFRQSxVQUFNQyxRQUFRLElBQUksSUFBSixDQUFTO0FBQ3JCQyxXQUFLUCxRQUFRTyxHQURRO0FB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LENBQWU7QUFBRVMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxvQkFBbkM7QUFDRDs7QUExQ007QUFETyxDQUFsQjtlQStDZXJCLEsiLCJmaWxlIjoiYXRsYXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSB1c2UgZm9yLWF3YWl0IHBhdHRlcm4gcXVpdGUgZXh0ZW5zaXZlbHkgaGVyZSBmb3IgbGVnaXRpbWF0ZSBwdXJwb3Nlc1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IGhpZGRlbiBmcm9tICdsb2NhbC1zY29wZS9jcmVhdGUnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBleHBvc2UsXG4gIGRpc3BhdGNoLFxuICBjb21wb25lbnQsXG4gIG1rY29uZmlnLFxuICBvcHRyZXF1aXJlLFxufSBmcm9tICcuL3ByaXZhdGUnXG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHlvdXIgYXBwbGljYXRpb24gYW5kIGFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudHMgdG9nZXRoZXJcbiAqXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHByb2dyYW0uXG4gKi9cbmNsYXNzIEF0bGFzIHtcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIGxvZzoge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBzZXJpYWxpemVyczogcGluby5zdGRTZXJpYWxpemVycyxcbiAgICB9LFxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgYSBicmFuZC1uZXcgYXRsYXMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHBhdGhzID0ge1xuICAgICAgaG9va3M6IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIG9wdGlvbnMuaG9va3MpLFxuICAgICAgc2VydmljZXM6IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIG9wdGlvbnMuc2VydmljZXMpLFxuICAgICAgYWN0aW9uczogcGF0aC5yZXNvbHZlKG9wdGlvbnMucm9vdCwgb3B0aW9ucy5hY3Rpb25zKSxcbiAgICAgIGFsaWFzZXM6IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIG9wdGlvbnMuYWxpYXNlcyksXG4gICAgfVxuICAgIGNvbnN0IG1vZHVsZXMgPSB7XG4gICAgICBob29rczogYXRsYXMucmVxdWlyZShvcHRpb25zLmhvb2tzLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuICAgICAgc2VydmljZXM6IGF0bGFzLnJlcXVpcmUob3B0aW9ucy5zZXJ2aWNlcywgeyBvcHRpb25hbDogdHJ1ZSB9KSxcbiAgICAgIGFjdGlvbnM6IGF0bGFzLnJlcXVpcmUob3B0aW9ucy5hY3Rpb25zLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuICAgICAgYWxpYXNlczogYXRsYXMucmVxdWlyZShvcHRpb25zLmFsaWFzZXMsIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gICAgfVxuXG4gICAgZGVmYXVsdHMobW9kdWxlcywge1xuICAgICAgaG9va3M6IHt9LFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgYWN0aW9uczoge30sXG4gICAgICBhbGlhc2VzOiB7XG4gICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICBob29rczoge30sXG4gICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGF0bGFzLmxvZy5kZWJ1Zyh7XG4gICAgICBlbnY6IGF0bGFzLmVudixcbiAgICAgIHJvb3Q6IGF0bGFzLnJvb3QsXG4gICAgICBwYXRocyxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgYWN0aW9uczogT2JqZWN0LmtleXMobW9kdWxlcy5hY3Rpb25zKSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5rZXlzKG1vZHVsZXMuaG9va3MpLFxuICAgICAgICBzZXJ2aWNlczogT2JqZWN0LmtleXMobW9kdWxlcy5zZXJ2aWNlcyksXG4gICAgICB9LFxuICAgIH0sICdhdGxhczppbml0JylcblxuICAgIC8vIEhvb2tzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEhvb2tdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuaG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmhvb2tzW2FsaWFzXVxuICAgICAgYXRsYXMuaG9vayhhbGlhcywgSG9vaywgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU2VydmljZXNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgU2VydmljZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5zZXJ2aWNlcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuc2VydmljZXNbYWxpYXNdXG4gICAgICBhdGxhcy5zZXJ2aWNlKGFsaWFzLCBTZXJ2aWNlLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBBY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEFjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5hY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5hY3Rpb25zW2FsaWFzXVxuICAgICAgYXRsYXMuYWN0aW9uKGFsaWFzLCBBY3Rpb24sIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIHJldHVybiBhdGxhc1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlc1xuICAgKlxuICAgKiBEZWZhdWx0cyB0byBOT0RFX0VOViBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCBlbnYoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLmVudlxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGZvbGRlciB3aGVyZSBhbGwgb3RoZXIgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvXG4gICAqXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNldCB0aGlzIHRvIHRoZSBwcm9qZWN0J3Mgcm9vdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucm9vdFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBwcmVwYXJlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgcHJlcGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkXG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHN0YXJ0ZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBdGxhcyBjb25maWd1cmF0aW9uLCBhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBjb25maWcgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgc2VydmljZXMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgc2VydmljZXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0aW9ucyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBhY3Rpb25zID0ge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucyAgICAgICAgICAgICBPcHRpb25zIGZvciB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zLmNvbmZpZyAgICAgIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgaW5zdGFuY2UgYW5kIGZvciBhbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIG9yIG90aGVyIGNvbXBvbmVudHMgd2hpY2ggd2lsbCBiZSBhZGRlZCB0b1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5yb290ICAgICAgICBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5lbnYgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudHMgbWF5IHVzZSB0aGlzIHZhbHVlIGZvciB2YXJpb3VzIHB1cnBvc2VzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gTk9ERV9FTlYuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAvLyBJbml0aWFsaXNlIHByaXZhdGUgc3R1ZmZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICB0aGlzOjpoaWRkZW4oKS5lbnYgPSBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOVlxuICAgIHRoaXM6OmhpZGRlbigpLnJvb3QgPSBvcHRpb25zLnJvb3RcbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkuc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkuY2F0YWxvZyA9IHtcbiAgICAgIHNlcnZpY2VzOiBuZXcgTWFwKCksXG4gICAgICBob29rczogbmV3IE1hcCgpLFxuICAgICAgYWN0aW9uczogbmV3IE1hcCgpLFxuICAgIH1cblxuICAgIC8vIFNhZmV0eSBjaGVja3NcbiAgICBpZiAoIXRoaXMuZW52KSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoJ2VudiBub3Qgc3BlY2lmaWVkIGFuZCBOT0RFX0VOViB3YXMgbm90IHNldCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJvb3QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYHJvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCwgZ290ICR7b3B0aW9ucy5yb290fWApXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzOjpta2NvbmZpZyhvcHRpb25zLmNvbmZpZywge1xuICAgICAgYXRsYXM6IHt9LFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgYWN0aW9uczoge30sXG4gICAgfSlcbiAgICB0aGlzLmNvbmZpZy5hdGxhcyA9IGRlZmF1bHRzKHRoaXMuY29uZmlnLmF0bGFzLCBBdGxhcy5kZWZhdWx0cylcbiAgICAvLyBMb2dnZXIg8J+MslxuICAgIHRoaXMubG9nID0gcGlubyh0aGlzLmNvbmZpZy5hdGxhcy5sb2cpXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZSBhIG1vZHVsZSBieSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290XG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgbG9jYXRpb24gICAgICAgICAgVGhlIG1vZHVsZSdzIGxvY2F0aW9uLCByZWxhdGl2ZSB0byByb290XG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucz17fSAgICAgICAgT3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMub3B0aW9uYWwgIElmIHRydWUsIHdpbGwgbm90IHRocm93IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3RcbiAgICogQHJldHVybiAgICB7bWl4ZWR9ICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlJ3MgY29udGVudHNcbiAgICovXG4gIHJlcXVpcmUobG9jYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHRoaXMucm9vdCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBsb2FkZXIgPSBvcHRpb25zLm9wdGlvbmFsXG4gICAgICA/IG9wdHJlcXVpcmVcbiAgICAgIDogcmVxdWlyZVxuXG4gICAgcmV0dXJuIGxvYWRlcihsb2NhdGlvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2UgaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIHNlcnZpY2UgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJ2aWNlJ3MgQVBJIG9uIHRoZSBhdGxhcy5zZXJ2aWNlcyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgc2VydmljZSBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgc2VydmljZShhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuc2VydmljZXMpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBob29rIGludG8gdGhpcyBhdGxhcyB1c2luZyBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBob29rIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBwYXNzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgaG9vayBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBob29rXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgaG9vayhhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdob29rJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuaG9va3MpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gYWN0aW9uIGludG8gdGhpcyBhdGxhcyBhdCBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBhY3Rpb24gLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhY3Rpb24ncyBBUEkgb24gdGhlIGF0bGFzLmFjdGlvbnMgb2JqZWN0IGFuZCBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIGFjdGlvbiBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBhY3Rpb24oYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnYWN0aW9uJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuYWN0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFsbCBzZXJ2aWNlcyBhbmQgaG9va3MgZm9yIHVzZVxuICAgKlxuICAgKiBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2UgYGF0bGFzLnN0YXJ0KClgIGluc3RlYWQgdG8gZ2V0IHlvdXIgaW5zdGFuY2UgdXAgYW5kIHJ1bm5pbmcuIEhvd2V2ZXIsXG4gICAqIHNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IGFsbCB0aGUgc2VydmljZXMgaW50byBhIFwiZ2V0LXJlYWR5XCIgc3RhdGUgYmVmb3JlIHRoZXkgc3RhcnRcbiAgICogY29ubmVjdGluZyB0byByZW1vdGUgcmVzb3VyY2VzIG9yIGRvaW5nIGFueSBpbnRlbnNpdmUgSS9PIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIGlmICh0aGlzLnByZXBhcmVkKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nXG5cbiAgICAvLyBQcmVwYXJlIGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgYWN0aW9uXSBvZiBhY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnNbYWxpYXNdID0gYWN0aW9uLmNvbXBvbmVudFxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYWxsIHNlcnZpY2VzLCBpbiBwYXJhbGxlbCDwn5KqXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShzZXJ2aWNlcykubWFwKChbYWxpYXMsIHNlcnZpY2VdKSA9PlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB0aGlzOjpsaWZlY3ljbGUuc2VydmljZS5wcmVwYXJlKGFsaWFzLCBzZXJ2aWNlLmNvbXBvbmVudCkpKVxuXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMsIGhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgaG9va3MgPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzXG5cbiAgICBhd2FpdCB0aGlzLnByZXBhcmUoKVxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdiZWZvcmVTdGFydCcsIHRoaXMsIGhvb2tzKVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuXG4gICAgLy8gU3RhcnQgYWxsIHNlcnZpY2VzLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUhIFNvbWUgc2VydmljZXMgc2hvdWxkIGJlIHN0YXJ0ZWQgYXMgdGhlIGxhc3Qgb25lcyBiZWNhdXNlIHRoZXlcbiAgICAvLyBleHBvc2Ugc29tZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSBvdXRzaWRlIHdvcmxkIGFuZCBzdGFydGluZyB0aG9zZSBiZWZvcmUgaWUuIGEgZGF0YWJhc2VcbiAgICAvLyBzZXJ2aWNlIGlzIHN0YXJ0ZWQgbWlnaHQgYnJlYWsgc3R1ZmYhXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIHNlcnZpY2VdIG9mIHNlcnZpY2VzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIGF3YWl0IHRoaXM6OmxpZmVjeWNsZS5zZXJ2aWNlLnN0YXJ0KGFsaWFzLCBzZXJ2aWNlLmNvbXBvbmVudClcbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gdHJ1ZVxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdhZnRlclN0YXJ0JywgdGhpcywgaG9va3MpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6cmVhZHknKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGFsbCBzZXJ2aWNlcywgdW5yZWdpc3RlciBhbGwgYWN0aW9ucyBhbmQgaG9va3MgYW5kIHVucHVibGlzaCBhbnkgQVBJcyBleHBvc2VkIGJ5IHRoZW1cbiAgICpcbiAgICogVGhpcyBwdXRzIHRoZSB3aG9sZSBhcHBsaWNhdGlvbiBpbnRvIGEgc3RhdGUgYXMgaXQgd2FzIGJlZm9yZSBgYXRsYXMucHJlcGFyZSgpYCBhbmQvb3JcbiAgICogYGF0bGFzLnN0YXJ0KClgIHdhcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nXG5cbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYmVmb3JlU3RvcCcsIHRoaXMsIGhvb2tzKVxuXG4gICAgLy8gU3RvcCBhbGwgc2VydmljZXMsIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIG1vc3QgaW1wb3J0YW50IHNlcnZpY2VzIGFyZSBzdG9wcGVkIGZpcnN0LlxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBzZXJ2aWNlXSBvZiBBcnJheS5mcm9tKHNlcnZpY2VzKS5yZXZlcnNlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgYXdhaXQgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2Uuc3RvcChhbGlhcywgc2VydmljZS5jb21wb25lbnQpXG4gICAgfVxuXG4gICAgLy8gVW5yZWdpc3RlciBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXNdIG9mIGFjdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbYWxpYXNdXG4gICAgfVxuXG4gICAgdGhpczo6aGlkZGVuKCkuc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSBmYWxzZVxuXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyU3RvcCcsIG51bGwsIGhvb2tzKVxuICAgIHRoaXMubG9nLmluZm8oJ2F0bGFzOnN0b3BwZWQnKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jb25zdCBsaWZlY3ljbGUgPSB7XG4gIHNlcnZpY2U6IHtcbiAgICAvKipcbiAgICAgKiBQcmVwYXJlIGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBwcmVwYXJlKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmljZS5wcmVwYXJlKClcbiAgICAgIHRoaXM6OmV4cG9zZSgnc2VydmljZXMnLCBhbGlhcywgaW5zdGFuY2UpXG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YWZ0ZXInKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBzZXJ2aWNlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgVGhlIFNlcnZpY2UncyBhbGlhc1xuICAgICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgc2VydmljZSAgICAgVGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0YXJ0OmJlZm9yZScpXG4gICAgICBhd2FpdCBzZXJ2aWNlLnN0YXJ0KHRoaXMuc2VydmljZXNbYWxpYXNdKVxuICAgICAgdGhpcy5sb2cuZGVidWcoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdGFydDphZnRlcicpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTdG9wIGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBzdG9wKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXdhaXQgc2VydmljZS5zdG9wKGluc3RhbmNlKVxuICAgICAgdGhpcy5sb2cuZGVidWcoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdG9wOmFmdGVyJylcbiAgICB9LFxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBBdGxhc1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJvcHRpb25hbCIsImxvZyIsImRlYnVnIiwiY29tcG9uZW50cyIsIk9iamVjdCIsImtleXMiLCJhbGlhcyIsIkhvb2siLCJlbnRyaWVzIiwiaG9vayIsIlNlcnZpY2UiLCJzZXJ2aWNlIiwiQWN0aW9uIiwiYWN0aW9uIiwicHJlcGFyZWQiLCJzdGFydGVkIiwiY29uc3RydWN0b3IiLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJjYXRhbG9nIiwiTWFwIiwiZGVmYXVsdHMiLCJsb2NhdGlvbiIsImxvYWRlciIsIkNvbXBvbmVudCIsIm9wdHMiLCJwcmVwYXJlIiwiY29tcG9uZW50IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImxpZmVjeWNsZSIsInN0YXJ0IiwiaW5mbyIsInN0b3AiLCJyZXZlcnNlIiwibmFtZSIsImJhc2VuYW1lIiwiY3dkIiwibGV2ZWwiLCJzZXJpYWxpemVycyIsInN0ZFNlcmlhbGl6ZXJzIiwiaW5zdGFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7OztBQWFBLE1BQU1BLEtBQU4sQ0FBWTtBQXVCVixTQUFPQyxJQUFQLENBQVlDLFVBQVUsRUFBdEIsRUFBMEI7QUFDeEIsOEJBQVNBLE9BQVQsRUFBa0I7QUFDaEJDLGNBQVEsUUFEUTtBQUVoQkMsYUFBTyxPQUZTO0FBR2hCQyxnQkFBVSxVQUhNO0FBSWhCQyxlQUFTLFNBSk87QUFLaEJDLGVBQVM7QUFMTyxLQUFsQjtBQVFBLFVBQU1DLFFBQVEsSUFBSSxJQUFKLENBQVM7QUFDckJDLFdBQUtQLFFBQVFP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QVQsQ0FBZTtBQUFFUyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHVCQUFuQztBQUNELEtBZE07O0FBdUJQLFVBQU00QixLQUFOLENBQVk1QixLQUFaLEVBQW1CSyxPQUFuQixFQUE0QjtBQUMxQixXQUFLVixHQUFMLENBQVNDLEtBQVQsQ0FBZTtBQUFFUyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHNCQUFuQztBQUNBLFlBQU1LLFFBQVF1QixLQUFSLENBQWMsS0FBSzlDLFFBQUwsQ0FBY2tCLEtBQWQsQ0FBZCxDQUFOO0FBQ0EsV0FBS0wsR0FBTCxDQUFTQyxLQUFULENBQWU7QUFBRVMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxxQkFBbkM7QUFDRCxLQTNCTTs7QUFvQ1AsVUFBTThCLElBQU4sQ0FBVzlCLEtBQVgsRUFBa0JLLE9BQWxCLEVBQTJCO0FBQ3pCLFdBQUtWLEdBQUwsQ0FBU0MsS0FBVCxDQUFlO0FBQUVTLGlCQUFTTDtBQUFYLE9BQWYsRUFBbUMscUJBQW5DO0FBQ0EsWUFBTXNDLFdBQVcsS0FBS3hELFFBQUwsQ0FBY2tCLEtBQWQsQ0FBakI7QUFDQSxhQUFPLEtBQUtsQixRQUFMLENBQWNrQixLQUFkLENBQVA7QUFDQSxZQUFNSyxRQUFReUIsSUFBUixDQUFhUSxRQUFiLENBQU47QUFDQSxXQUFLM0MsR0FBTCxDQUFTQyxLQUFULENBQWU7QUFBRVMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxvQkFBbkM7QUFDRDs7QUExQ007QUFETyxDQUFsQjtlQStDZXZCLEsiLCJmaWxlIjoiYXRsYXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSB1c2UgZm9yLWF3YWl0IHBhdHRlcm4gcXVpdGUgZXh0ZW5zaXZlbHkgaGVyZSBmb3IgbGVnaXRpbWF0ZSBwdXJwb3Nlc1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IGhpZGRlbiBmcm9tICdsb2NhbC1zY29wZS9jcmVhdGUnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBleHBvc2UsXG4gIGRpc3BhdGNoLFxuICBjb21wb25lbnQsXG4gIG1rY29uZmlnLFxuICBvcHRyZXF1aXJlLFxufSBmcm9tICcuL3ByaXZhdGUnXG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHlvdXIgYXBwbGljYXRpb24gYW5kIGFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudHMgdG9nZXRoZXJcbiAqXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHByb2dyYW0uXG4gKi9cbmNsYXNzIEF0bGFzIHtcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIGxvZzoge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBzZXJpYWxpemVyczogcGluby5zdGRTZXJpYWxpemVycyxcbiAgICB9LFxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgYSBicmFuZC1uZXcgYXRsYXMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2hvb2tzJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnYWxpYXNlcycsXG4gICAgXVxuICAgIGNvbnN0IHBhdGhzID0ge31cbiAgICBjb25zdCBtb2R1bGVzID0ge31cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcGF0aHNbdHlwZV0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBvcHRpb25zW3R5cGVdKVxuICAgICAgbW9kdWxlc1t0eXBlXSA9IGF0bGFzLnJlcXVpcmUob3B0aW9uc1t0eXBlXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIGFsaWFzZXM6IHtcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICAgIGhvb2tzOiB7fSxcbiAgICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgYXRsYXMubG9nLmRlYnVnKHtcbiAgICAgIGVudjogYXRsYXMuZW52LFxuICAgICAgcm9vdDogYXRsYXMucm9vdCxcbiAgICAgIHBhdGhzLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBhY3Rpb25zOiBPYmplY3Qua2V5cyhtb2R1bGVzLmFjdGlvbnMpLFxuICAgICAgICBob29rczogT2JqZWN0LmtleXMobW9kdWxlcy5ob29rcyksXG4gICAgICAgIHNlcnZpY2VzOiBPYmplY3Qua2V5cyhtb2R1bGVzLnNlcnZpY2VzKSxcbiAgICAgIH0sXG4gICAgfSwgJ2F0bGFzOmluaXQnKVxuXG4gICAgLy8gSG9va3NcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgSG9va10gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5ob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuaG9va3NbYWxpYXNdXG4gICAgICBhdGxhcy5ob29rKGFsaWFzLCBIb29rLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBTZXJ2aWNlXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLnNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGF0bGFzLnNlcnZpY2UoYWxpYXMsIFNlcnZpY2UsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIEFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgQWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmFjdGlvbnNbYWxpYXNdXG4gICAgICBhdGxhcy5hY3Rpb24oYWxpYXMsIEFjdGlvbiwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGF0bGFzXG4gIH1cblxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE5PREVfRU5WIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IGVudigpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuZW52XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJvb3QgZm9sZGVyIHdoZXJlIGFsbCBvdGhlciBwYXRocyBzaG91bGQgYmUgcmVsYXRpdmUgdG9cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc2V0IHRoaXMgdG8gdGhlIHByb2plY3QncyByb290IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5yb290XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHByZXBhcmVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwcmVwYXJlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucHJlcGFyZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgc3RhcnRlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuc3RhcnRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEF0bGFzIGNvbmZpZ3VyYXRpb24sIGFzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGNvbmZpZyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBzZXJ2aWNlcyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBzZXJ2aWNlcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3Rpb25zIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGFjdGlvbnMgPSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXM6OmhpZGRlbigpLmVudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpczo6aGlkZGVuKCkucm9vdCA9IG9wdGlvbnMucm9vdFxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nID0ge1xuICAgICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgICBhY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgfVxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy5lbnYpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcignZW52IG5vdCBzcGVjaWZpZWQgYW5kIE5PREVfRU5WIHdhcyBub3Qgc2V0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucm9vdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgcm9vdCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBnb3QgJHtvcHRpb25zLnJvb3R9YClcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHRoaXM6Om1rY29uZmlnKG9wdGlvbnMuY29uZmlnLCB7XG4gICAgICBhdGxhczoge30sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICB9KVxuICAgIHRoaXMuY29uZmlnLmF0bGFzID0gZGVmYXVsdHModGhpcy5jb25maWcuYXRsYXMsIEF0bGFzLmRlZmF1bHRzKVxuICAgIC8vIExvZ2dlciDwn4yyXG4gICAgdGhpcy5sb2cgPSBwaW5vKHRoaXMuY29uZmlnLmF0bGFzLmxvZylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgbW9kdWxlIGJ5IHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3RcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBsb2NhdGlvbiAgICAgICAgICBUaGUgbW9kdWxlJ3MgbG9jYXRpb24sIHJlbGF0aXZlIHRvIHJvb3RcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zPXt9ICAgICAgICBPcHRpb25zXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5vcHRpb25hbCAgSWYgdHJ1ZSwgd2lsbCBub3QgdGhyb3cgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBleGlzdFxuICAgKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICAgKi9cbiAgcmVxdWlyZShsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbG9jYXRpb24gPSBwYXRoLnJlc29sdmUodGhpcy5yb290LCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxvYWRlciA9IG9wdGlvbnMub3B0aW9uYWxcbiAgICAgID8gb3B0cmVxdWlyZVxuICAgICAgOiByZXF1aXJlXG5cbiAgICByZXR1cm4gbG9hZGVyKGxvY2F0aW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgc2VydmljZSAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UncyBBUEkgb24gdGhlIGF0bGFzLnNlcnZpY2VzIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBzZXJ2aWNlIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBzZXJ2aWNlKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ3NlcnZpY2UnLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpczo6aGlkZGVuKCkuY2F0YWxvZy5zZXJ2aWNlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgaW50byB0aGlzIGF0bGFzIHVzaW5nIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGhvb2sgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIHBhc3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBob29rIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGhvb2tcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBob29rKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpczo6aGlkZGVuKCkuY2F0YWxvZy5ob29rcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhY3Rpb24gaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGFjdGlvbiAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFjdGlvbidzIEFQSSBvbiB0aGUgYXRsYXMuYWN0aW9ucyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgYWN0aW9uIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGFjdGlvbihhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdhY3Rpb24nLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpczo6aGlkZGVuKCkuY2F0YWxvZy5hY3Rpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYWxsIHNlcnZpY2VzIGFuZCBob29rcyBmb3IgdXNlXG4gICAqXG4gICAqIEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSBgYXRsYXMuc3RhcnQoKWAgaW5zdGVhZCB0byBnZXQgeW91ciBpbnN0YW5jZSB1cCBhbmQgcnVubmluZy4gSG93ZXZlcixcbiAgICogc29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBzZXJ2aWNlcyBpbnRvIGEgXCJnZXQtcmVhZHlcIiBzdGF0ZSBiZWZvcmUgdGhleSBzdGFydFxuICAgKiBjb25uZWN0aW5nIHRvIHJlbW90ZSByZXNvdXJjZXMgb3IgZG9pbmcgYW55IGludGVuc2l2ZSBJL08gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIC8vIFByZXBhcmUgYWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBhY3Rpb25dIG9mIGFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9uc1thbGlhc10gPSBhY3Rpb24uY29tcG9uZW50XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhbGwgc2VydmljZXMsIGluIHBhcmFsbGVsIPCfkqpcbiAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHNlcnZpY2VzKS5tYXAoKFthbGlhcywgc2VydmljZV0pID0+XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHRoaXM6OmxpZmVjeWNsZS5zZXJ2aWNlLnByZXBhcmUoYWxpYXMsIHNlcnZpY2UuY29tcG9uZW50KSkpXG5cbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IHRydWVcbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYWZ0ZXJQcmVwYXJlJywgdGhpcywgaG9va3MpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGFsbCBzZXJ2aWNlc1xuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBjb25zdCBob29rcyA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuaG9va3NcblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2JlZm9yZVN0YXJ0JywgdGhpcywgaG9va3MpXG5cbiAgICBjb25zdCB7IHNlcnZpY2VzIH0gPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nXG5cbiAgICAvLyBTdGFydCBhbGwgc2VydmljZXMsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBPcmRlcmluZyBpcyBpbXBvcnRhbnQgaGVyZSEgU29tZSBzZXJ2aWNlcyBzaG91bGQgYmUgc3RhcnRlZCBhcyB0aGUgbGFzdCBvbmVzIGJlY2F1c2UgdGhleVxuICAgIC8vIGV4cG9zZSBzb21lIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG91dHNpZGUgd29ybGQgYW5kIHN0YXJ0aW5nIHRob3NlIGJlZm9yZSBpZS4gYSBkYXRhYmFzZVxuICAgIC8vIHNlcnZpY2UgaXMgc3RhcnRlZCBtaWdodCBicmVhayBzdHVmZiFcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgc2VydmljZV0gb2Ygc2VydmljZXMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgYXdhaXQgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2Uuc3RhcnQoYWxpYXMsIHNlcnZpY2UuY29tcG9uZW50KVxuICAgIH1cblxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzLCBob29rcylcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpyZWFkeScpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYWxsIHNlcnZpY2VzLCB1bnJlZ2lzdGVyIGFsbCBhY3Rpb25zIGFuZCBob29rcyBhbmQgdW5wdWJsaXNoIGFueSBBUElzIGV4cG9zZWQgYnkgdGhlbVxuICAgKlxuICAgKiBUaGlzIHB1dHMgdGhlIHdob2xlIGFwcGxpY2F0aW9uIGludG8gYSBzdGF0ZSBhcyBpdCB3YXMgYmVmb3JlIGBhdGxhcy5wcmVwYXJlKClgIGFuZC9vclxuICAgKiBgYXRsYXMuc3RhcnQoKWAgd2FzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcywgaG9va3MpXG5cbiAgICAvLyBTdG9wIGFsbCBzZXJ2aWNlcywgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgbW9zdCBpbXBvcnRhbnQgc2VydmljZXMgYXJlIHN0b3BwZWQgZmlyc3QuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIHNlcnZpY2VdIG9mIEFycmF5LmZyb20oc2VydmljZXMpLnJldmVyc2UoKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBhd2FpdCB0aGlzOjpsaWZlY3ljbGUuc2VydmljZS5zdG9wKGFsaWFzLCBzZXJ2aWNlLmNvbXBvbmVudClcbiAgICB9XG5cbiAgICAvLyBVbnJlZ2lzdGVyIGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhc10gb2YgYWN0aW9ucykge1xuICAgICAgZGVsZXRlIHRoaXMuYWN0aW9uc1thbGlhc11cbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZCA9IGZhbHNlXG5cbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYWZ0ZXJTdG9wJywgbnVsbCwgaG9va3MpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6c3RvcHBlZCcpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmNvbnN0IGxpZmVjeWNsZSA9IHtcbiAgc2VydmljZToge1xuICAgIC8qKlxuICAgICAqIFByZXBhcmUgYSBzZXJ2aWNlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgVGhlIFNlcnZpY2UncyBhbGlhc1xuICAgICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgc2VydmljZSAgICAgVGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHByZXBhcmUoYWxpYXMsIHNlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6cHJlcGFyZTpiZWZvcmUnKVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBzZXJ2aWNlLnByZXBhcmUoKVxuICAgICAgdGhpczo6ZXhwb3NlKCdzZXJ2aWNlcycsIGFsaWFzLCBpbnN0YW5jZSlcbiAgICAgIHRoaXMubG9nLmRlYnVnKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6cHJlcGFyZTphZnRlcicpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTdGFydCBhIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICBUaGUgU2VydmljZSdzIGFsaWFzXG4gICAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBzZXJ2aWNlICAgICBUaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIEByZXR1cm4gICAge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgYXN5bmMgc3RhcnQoYWxpYXMsIHNlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RhcnQ6YmVmb3JlJylcbiAgICAgIGF3YWl0IHNlcnZpY2Uuc3RhcnQodGhpcy5zZXJ2aWNlc1thbGlhc10pXG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0YXJ0OmFmdGVyJylcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0b3AgYSBzZXJ2aWNlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgVGhlIFNlcnZpY2UncyBhbGlhc1xuICAgICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgc2VydmljZSAgICAgVGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHN0b3AoYWxpYXMsIHNlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RvcDpiZWZvcmUnKVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgZGVsZXRlIHRoaXMuc2VydmljZXNbYWxpYXNdXG4gICAgICBhd2FpdCBzZXJ2aWNlLnN0b3AoaW5zdGFuY2UpXG4gICAgICB0aGlzLmxvZy5kZWJ1Zyh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YWZ0ZXInKVxuICAgIH0sXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0bGFzXG4iXX0=

@@ -10,6 +10,8 @@ "use strict";

try {
return require(module);
require.resolve(module);
} catch (err) {
return {};
}
return require(module);
}

@@ -19,2 +21,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wdHJlcXVpcmUubWpzIl0sIm5hbWVzIjpbIm9wdHJlcXVpcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZXJyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBT0EsU0FBU0EsVUFBVCxDQUFvQkMsTUFBcEIsRUFBNEI7QUFDMUIsTUFBSTtBQUVGLFdBQU9DLFFBQVFELE1BQVIsQ0FBUDtBQUNELEdBSEQsQ0FHRSxPQUFPRSxHQUFQLEVBQVk7QUFDWixXQUFPLEVBQVA7QUFDRDtBQUNGOztlQUVjSCxVIiwiZmlsZSI6Im9wdHJlcXVpcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbmFsbHkgcmVxdWlyZSBhIG1vZHVsZSwgcmV0dXJuaW5nIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSByZXF1aXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIG1vZHVsZSAgICBQYXRoIHRvIHRoZSBtb2R1bGUgdG8gcmVxdWlyZVxuICogQHJldHVybiAgICB7bWl4ZWR9ICAgICAgICAgICAgICAgVGhlIG1vZHVsZSdzIGNvbnRlbnRzXG4gKi9cbmZ1bmN0aW9uIG9wdHJlcXVpcmUobW9kdWxlKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgcmV0dXJuIHJlcXVpcmUobW9kdWxlKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBvcHRyZXF1aXJlXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wdHJlcXVpcmUubWpzIl0sIm5hbWVzIjpbIm9wdHJlcXVpcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwicmVzb2x2ZSIsImVyciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9BLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCO0FBQzFCLE1BQUk7QUFDRkMsWUFBUUMsT0FBUixDQUFnQkYsTUFBaEI7QUFDRCxHQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0FBQ1osV0FBTyxFQUFQO0FBQ0Q7O0FBR0QsU0FBT0YsUUFBUUQsTUFBUixDQUFQO0FBQ0Q7O2VBRWNELFUiLCJmaWxlIjoib3B0cmVxdWlyZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3B0aW9uYWxseSByZXF1aXJlIGEgbW9kdWxlLCByZXR1cm5pbmcgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBtb2R1bGUgICAgUGF0aCB0byB0aGUgbW9kdWxlIHRvIHJlcXVpcmVcbiAqIEByZXR1cm4gICAge21peGVkfSAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICovXG5mdW5jdGlvbiBvcHRyZXF1aXJlKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJlcXVpcmUucmVzb2x2ZShtb2R1bGUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gIHJldHVybiByZXF1aXJlKG1vZHVsZSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3B0cmVxdWlyZVxuIl19

@@ -105,14 +105,31 @@ "use strict";

});
it('does not throw when some of the modules do not exist', () => {
_.Atlas.init({
root: __dirname,
env: 'test',
config: 'lolconf',
services: 'lolserv',
actions: 'lolactions',
hooks: 'lolhooks',
aliases: 'lolaliases'
});
describe('Exception handling', () => {
const root = _path.default.resolve(__dirname, 'demoapp');
const types = ['config', 'services', 'actions', 'hooks', 'aliases'];
for (const type of types) {
it(`does not throw when ${type} module does not exist`, () => {
_.Atlas.init({
root,
env: 'test',
config: 'lolconf',
services: 'lolserv',
actions: 'lolactions',
hooks: 'lolhooks',
aliases: 'lolaliases'
});
});
it(`throws when ${type} module contains errors`, () => {
expect(() => {
_.Atlas.init({
root,
env: 'test',
[type]: 'will-throw'
});
}).to.throw();
});
}
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwic2FuZGJveCIsInN0dWIiLCJwcm90b3R5cGUiLCJyZXR1cm5zVGhpcyIsIml0IiwiZXhwZWN0IiwiaXRzZWxmIiwidG8iLCJyZXNwb25kVG8iLCJpbml0IiwiZW52IiwidGhyb3ciLCJub3QiLCJUeXBlRXJyb3IiLCJwcm90byIsInJvb3QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiYXRsYXMiLCJjb25maWciLCJob29rcyIsImFjdGlvbnMiLCJzZXJ2aWNlcyIsImFsaWFzZXMiLCJuYW1lIiwiQ29tcG9uZW50IiwiT2JqZWN0IiwiZW50cmllcyIsInRlc3RzZXJ2aWNlcyIsInRlc3RhbGlhc2VzIiwic2VydmljZSIsImhhdmUiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInRlc3RhY3Rpb25zIiwiYWN0aW9uIiwidGVzdGhvb2tzIiwiaG9vayIsImFsbCIsImtleXMiLCJpbmNsdWRlIiwiZXFsIiwiZHVtbXkiLCJ0ZXN0Iiwib3ZlcnJpZGUiLCJwcmVwYXJlIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUJDLGFBQVcsWUFBVztBQUNwQixTQUFLQyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsUUFBTUMsU0FBeEIsRUFBbUMsUUFBbkMsRUFBNkNDLFdBQTdDO0FBQ0EsU0FBS0gsT0FBTCxDQUFhQyxJQUFiLENBQWtCLFFBQU1DLFNBQXhCLEVBQW1DLE1BQW5DLEVBQTJDQyxXQUEzQztBQUNBLFNBQUtILE9BQUwsQ0FBYUMsSUFBYixDQUFrQixRQUFNQyxTQUF4QixFQUFtQyxTQUFuQyxFQUE4Q0MsV0FBOUM7QUFDRCxHQUpEO0FBT0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLG9CQUFjQyxNQUFkLENBQXFCQyxFQUFyQixDQUF3QkMsU0FBeEIsQ0FB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LGNBQU0sSUFEbUM7QUFFekNDLGtCQUFVO0FBRitCO0FBQVQsS0FBbEM7QUFJQXZDLFdBQU9hLE1BQU1DLE1BQU4sQ0FBYUUsT0FBcEIsRUFBNkJkLEVBQTdCLENBQWdDa0MsR0FBaEMsQ0FBb0M7QUFBRUMsYUFBTztBQUMzQ0MsY0FBTSxJQURxQztBQUUzQ0Msa0JBQVU7QUFGaUM7QUFBVCxLQUFwQztBQUlELEdBNUNEO0FBOENBeEMsS0FBRyxrRkFBSCxFQUF1RixNQUFNO0FBQzNGLFVBQU1XLE9BQU8sY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLFNBQXhCLENBQWI7O0FBQ0EsVUFBTUMsUUFBUSxRQUFNVCxJQUFOLENBQVc7QUFDdkJNLFVBRHVCO0FBRXZCTCxXQUFLO0FBRmtCLEtBQVgsQ0FBZDs7QUFNQSxXQUFPUSxNQUFNMkIsT0FBTixFQUFQO0FBQ0QsR0FURDtBQVdBekMsS0FBRyxzREFBSCxFQUEyRCxNQUFNO0FBQy9ELFlBQU1LLElBQU4sQ0FBVztBQUNUTSxZQUFNRSxTQURHO0FBRVRQLFdBQUssTUFGSTtBQUdUUyxjQUFRLFNBSEM7QUFJVEcsZ0JBQVUsU0FKRDtBQUtURCxlQUFTLFlBTEE7QUFNVEQsYUFBTyxVQU5FO0FBT1RHLGVBQVM7QUFQQSxLQUFYO0FBU0QsR0FWRDtBQVdELENBekZEIiwiZmlsZSI6ImluaXQudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uLy4uJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0ICogYXMgdGVzdHNlcnZpY2VzIGZyb20gJy4vZGVtb2FwcC9zZXJ2aWNlcydcbmltcG9ydCAqIGFzIHRlc3RhY3Rpb25zIGZyb20gJy4vZGVtb2FwcC9hY3Rpb25zJ1xuaW1wb3J0ICogYXMgdGVzdGhvb2tzIGZyb20gJy4vZGVtb2FwcC9ob29rcydcbmltcG9ydCAqIGFzIHRlc3RhbGlhc2VzIGZyb20gJy4vZGVtb2FwcC9hbGlhc2VzJ1xuXG5kZXNjcmliZSgnQXRsYXM6OmluaXQoKScsICgpID0+IHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdhY3Rpb24nKS5yZXR1cm5zVGhpcygpXG4gICAgdGhpcy5zYW5kYm94LnN0dWIoQXRsYXMucHJvdG90eXBlLCAnaG9vaycpLnJldHVybnNUaGlzKClcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdzZXJ2aWNlJykucmV0dXJuc1RoaXMoKVxuICB9KVxuXG5cbiAgaXQoJ2V4aXN0cycsICgpID0+IHtcbiAgICBleHBlY3QoQXRsYXMpLml0c2VsZi50by5yZXNwb25kVG8oJ2luaXQnKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBubyByb290IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBBdGxhcy5pbml0KHsgZW52OiAndGVzdCcgfSkpXG4gICAgICAudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9yb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQvKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCB0aHJvdyBUeXBlRXJyb3Igd2hlbiBvcHRpb25zIGlzIG5vdCBwcm92aWRlZCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gQXRsYXMuaW5pdCgpKS50by5ub3QudGhyb3coVHlwZUVycm9yKVxuICB9KVxuXG4gIGl0KCdsb2FkcyBhbGwgYWN0aW9ucywgaG9va3MgYW5kIHNlcnZpY2VzIGZyb20gdGhlIHNwZWNpZmllZCBsb2NhdGlvbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBBdGxhcy5wcm90b3R5cGVcbiAgICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2RlbW9hcHAnKVxuICAgIGNvbnN0IGF0bGFzID0gQXRsYXMuaW5pdCh7XG4gICAgICByb290LFxuICAgICAgZW52OiAndGVzdCcsXG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBhY3Rpb25zOiAnYWN0aW9ucycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgLy8gVGVzdCBzZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW25hbWUsIENvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXModGVzdHNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IHRlc3RhbGlhc2VzLnNlcnZpY2VzW25hbWVdXG4gICAgICBleHBlY3QocHJvdG8uc2VydmljZSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgobmFtZSwgQ29tcG9uZW50LCB7IGFsaWFzZXMgfSlcbiAgICB9XG4gICAgLy8gVGVzdCBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0YWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSB0ZXN0YWxpYXNlcy5hY3Rpb25zW25hbWVdXG4gICAgICBleHBlY3QocHJvdG8uYWN0aW9uKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cbiAgICAvLyBUZXN0IGhvb2tzXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0aG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gdGVzdGFsaWFzZXMuaG9va3NbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5ob29rKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIFN0dWZmIGRpcmVjdGx5IG9uIGF0bGFzXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZykudG8uaGF2ZS5hbGwua2V5cyhbJ2F0bGFzJywgJ3NlcnZpY2VzJywgJ2hvb2tzJywgJ2FjdGlvbnMnXSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmF0bGFzKS50by5pbmNsdWRlLmtleXMoWyd0ZXN0JywgJ292ZXJyaWRlJ10pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5zZXJ2aWNlcykudG8uZXFsKHsgZHVtbXk6IHtcbiAgICAgIHRlc3Q6IHRydWUsXG4gICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICB9IH0pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5ob29rcykudG8uZXFsKHsgZHVtbXk6IHtcbiAgICAgIHRlc3Q6IHRydWUsXG4gICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICB9IH0pXG4gICAgZXhwZWN0KGF0bGFzLmNvbmZpZy5hY3Rpb25zKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgZGVmYXVsdHMgZm9yIHBhdGhzIHRvIHNlcnZpY2VzLCBob29rcywgYWN0aW9ucywgYWxpYXNlcyBhbmQgY29uZmlnIGRpcnMnLCAoKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdkZW1vYXBwJylcbiAgICBjb25zdCBhdGxhcyA9IEF0bGFzLmluaXQoe1xuICAgICAgcm9vdCxcbiAgICAgIGVudjogJ3Rlc3QnLFxuICAgIH0pXG5cbiAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgcmV0dXJuIGF0bGFzLnByZXBhcmUoKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCB0aHJvdyB3aGVuIHNvbWUgb2YgdGhlIG1vZHVsZXMgZG8gbm90IGV4aXN0JywgKCkgPT4ge1xuICAgIEF0bGFzLmluaXQoe1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgZW52OiAndGVzdCcsXG4gICAgICBjb25maWc6ICdsb2xjb25mJyxcbiAgICAgIHNlcnZpY2VzOiAnbG9sc2VydicsXG4gICAgICBhY3Rpb25zOiAnbG9sYWN0aW9ucycsXG4gICAgICBob29rczogJ2xvbGhvb2tzJyxcbiAgICAgIGFsaWFzZXM6ICdsb2xhbGlhc2VzJyxcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQudGVzdC5tanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwic2FuZGJveCIsInN0dWIiLCJwcm90b3R5cGUiLCJyZXR1cm5zVGhpcyIsIml0IiwiZXhwZWN0IiwiaXRzZWxmIiwidG8iLCJyZXNwb25kVG8iLCJpbml0IiwiZW52IiwidGhyb3ciLCJub3QiLCJUeXBlRXJyb3IiLCJwcm90byIsInJvb3QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiYXRsYXMiLCJjb25maWciLCJob29rcyIsImFjdGlvbnMiLCJzZXJ2aWNlcyIsImFsaWFzZXMiLCJuYW1lIiwiQ29tcG9uZW50IiwiT2JqZWN0IiwiZW50cmllcyIsInRlc3RzZXJ2aWNlcyIsInRlc3RhbGlhc2VzIiwic2VydmljZSIsImhhdmUiLCJiZWVuIiwiY2FsbGVkV2l0aCIsInRlc3RhY3Rpb25zIiwiYWN0aW9uIiwidGVzdGhvb2tzIiwiaG9vayIsImFsbCIsImtleXMiLCJpbmNsdWRlIiwiZXFsIiwiZHVtbXkiLCJ0ZXN0Iiwib3ZlcnJpZGUiLCJwcmVwYXJlIiwidHlwZXMiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUJDLGFBQVcsWUFBVztBQUNwQixTQUFLQyxPQUFMLENBQWFDLElBQWIsQ0FBa0IsUUFBTUMsU0FBeEIsRUFBbUMsUUFBbkMsRUFBNkNDLFdBQTdDO0FBQ0EsU0FBS0gsT0FBTCxDQUFhQyxJQUFiLENBQWtCLFFBQU1DLFNBQXhCLEVBQW1DLE1BQW5DLEVBQTJDQyxXQUEzQztBQUNBLFNBQUtILE9BQUwsQ0FBYUMsSUFBYixDQUFrQixRQUFNQyxTQUF4QixFQUFtQyxTQUFuQyxFQUE4Q0MsV0FBOUM7QUFDRCxHQUpEO0FBT0FDLEtBQUcsUUFBSCxFQUFhLE1BQU07QUFDakJDLG9CQUFjQyxNQUFkLENBQXFCQyxFQUFyQixD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STtBQUdULGFBQUNxQyxJQUFELEdBQVE7QUFIQyxXQUFYO0FBS0QsU0FORCxFQU1HeEMsRUFOSCxDQU1NSSxLQU5OO0FBT0QsT0FSRDtBQVNEO0FBQ0YsR0FqQ0Q7QUFrQ0QsQ0FqSEQiLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4vLi4nXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgKiBhcyB0ZXN0c2VydmljZXMgZnJvbSAnLi9kZW1vYXBwL3NlcnZpY2VzJ1xuaW1wb3J0ICogYXMgdGVzdGFjdGlvbnMgZnJvbSAnLi9kZW1vYXBwL2FjdGlvbnMnXG5pbXBvcnQgKiBhcyB0ZXN0aG9va3MgZnJvbSAnLi9kZW1vYXBwL2hvb2tzJ1xuaW1wb3J0ICogYXMgdGVzdGFsaWFzZXMgZnJvbSAnLi9kZW1vYXBwL2FsaWFzZXMnXG5cbmRlc2NyaWJlKCdBdGxhczo6aW5pdCgpJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2FuZGJveC5zdHViKEF0bGFzLnByb3RvdHlwZSwgJ2FjdGlvbicpLnJldHVybnNUaGlzKClcbiAgICB0aGlzLnNhbmRib3guc3R1YihBdGxhcy5wcm90b3R5cGUsICdob29rJykucmV0dXJuc1RoaXMoKVxuICAgIHRoaXMuc2FuZGJveC5zdHViKEF0bGFzLnByb3RvdHlwZSwgJ3NlcnZpY2UnKS5yZXR1cm5zVGhpcygpXG4gIH0pXG5cblxuICBpdCgnZXhpc3RzJywgKCkgPT4ge1xuICAgIGV4cGVjdChBdGxhcykuaXRzZWxmLnRvLnJlc3BvbmRUbygnaW5pdCcpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIG5vIHJvb3QgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IEF0bGFzLmluaXQoeyBlbnY6ICd0ZXN0JyB9KSlcbiAgICAgIC50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL3Jvb3QgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZC8pXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IFR5cGVFcnJvciB3aGVuIG9wdGlvbnMgaXMgbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBBdGxhcy5pbml0KCkpLnRvLm5vdC50aHJvdyhUeXBlRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2xvYWRzIGFsbCBhY3Rpb25zLCBob29rcyBhbmQgc2VydmljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGxvY2F0aW9ucycsICgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IEF0bGFzLnByb3RvdHlwZVxuICAgIGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnZGVtb2FwcCcpXG4gICAgY29uc3QgYXRsYXMgPSBBdGxhcy5pbml0KHtcbiAgICAgIHJvb3QsXG4gICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICBob29rczogJ2hvb2tzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIHNlcnZpY2VzOiAnc2VydmljZXMnLFxuICAgICAgYWxpYXNlczogJ2FsaWFzZXMnLFxuICAgIH0pXG5cbiAgICAvLyBUZXN0IHNlcnZpY2VzXG4gICAgZm9yIChjb25zdCBbbmFtZSwgQ29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyh0ZXN0c2VydmljZXMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gdGVzdGFsaWFzZXMuc2VydmljZXNbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5zZXJ2aWNlKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChuYW1lLCBDb21wb25lbnQsIHsgYWxpYXNlcyB9KVxuICAgIH1cbiAgICAvLyBUZXN0IGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBDb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RhY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IHRlc3RhbGlhc2VzLmFjdGlvbnNbbmFtZV1cbiAgICAgIGV4cGVjdChwcm90by5hY3Rpb24pLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG5hbWUsIENvbXBvbmVudCwgeyBhbGlhc2VzIH0pXG4gICAgfVxuICAgIC8vIFRlc3QgaG9va3NcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBDb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3Rob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSB0ZXN0YWxpYXNlcy5ob29rc1tuYW1lXVxuICAgICAgZXhwZWN0KHByb3RvLmhvb2spLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKG5hbWUsIENvbXBvbmVudCwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU3R1ZmYgZGlyZWN0bHkgb24gYXRsYXNcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnKS50by5oYXZlLmFsbC5rZXlzKFsnYXRsYXMnLCAnc2VydmljZXMnLCAnaG9va3MnLCAnYWN0aW9ucyddKVxuICAgIGV4cGVjdChhdGxhcy5jb25maWcuYXRsYXMpLnRvLmluY2x1ZGUua2V5cyhbJ3Rlc3QnLCAnb3ZlcnJpZGUnXSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLnNlcnZpY2VzKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmhvb2tzKS50by5lcWwoeyBkdW1teToge1xuICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH0gfSlcbiAgICBleHBlY3QoYXRsYXMuY29uZmlnLmFjdGlvbnMpLnRvLmVxbCh7IGR1bW15OiB7XG4gICAgICB0ZXN0OiB0cnVlLFxuICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgfSB9KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBkZWZhdWx0cyBmb3IgcGF0aHMgdG8gc2VydmljZXMsIGhvb2tzLCBhY3Rpb25zLCBhbGlhc2VzIGFuZCBjb25maWcgZGlycycsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2RlbW9hcHAnKVxuICAgIGNvbnN0IGF0bGFzID0gQXRsYXMuaW5pdCh7XG4gICAgICByb290LFxuICAgICAgZW52OiAndGVzdCcsXG4gICAgfSlcblxuICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICByZXR1cm4gYXRsYXMucHJlcGFyZSgpXG4gIH0pXG5cblxuICBkZXNjcmliZSgnRXhjZXB0aW9uIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnZGVtb2FwcCcpXG4gICAgY29uc3QgdHlwZXMgPSBbXG4gICAgICAnY29uZmlnJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnaG9va3MnLFxuICAgICAgJ2FsaWFzZXMnLFxuICAgIF1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaXQoYGRvZXMgbm90IHRocm93IHdoZW4gJHt0eXBlfSBtb2R1bGUgZG9lcyBub3QgZXhpc3RgLCAoKSA9PiB7XG4gICAgICAgIEF0bGFzLmluaXQoe1xuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgICAgY29uZmlnOiAnbG9sY29uZicsXG4gICAgICAgICAgc2VydmljZXM6ICdsb2xzZXJ2JyxcbiAgICAgICAgICBhY3Rpb25zOiAnbG9sYWN0aW9ucycsXG4gICAgICAgICAgaG9va3M6ICdsb2xob29rcycsXG4gICAgICAgICAgYWxpYXNlczogJ2xvbGFsaWFzZXMnLFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgaXQoYHRocm93cyB3aGVuICR7dHlwZX0gbW9kdWxlIGNvbnRhaW5zIGVycm9yc2AsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICBBdGxhcy5pbml0KHtcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgICAgIFt0eXBlXTogJ3dpbGwtdGhyb3cnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLnRvLnRocm93KClcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSlcbiJdfQ==

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc