New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

abstract-type

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

abstract-type - npm Package Compare versions

Comparing version

to
2.0.0-alpha.6

7

CHANGELOG.md

@@ -5,2 +5,9 @@ # Changelog

## [2.0.0-alpha.6](https://github.com/snowyu/abstract-type.js/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2021-05-08)
### Bug Fixes
* should initializeTo instance after creating object ([d83fc28](https://github.com/snowyu/abstract-type.js/commit/d83fc285f71c51490f38a8f0e398c095d735603b))
## [2.0.0-alpha.5](https://github.com/snowyu/abstract-type.js/compare/v2.0.0-alpha.4...v2.0.0-alpha.5) (2021-05-08)

@@ -7,0 +14,0 @@

4

lib/abstract-type.js

@@ -237,3 +237,5 @@ "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.addItemToArray = addItemToArray;exports.defineProperties = exports.alias = exports.unregister = exports.register = exports.Type = void 0;

const $attributes = this.$attributes;
// merge the options from TheType
$attributes.initializeTo(aOptions, TheType, { skipUndefined: true });
$attributes.initializeTo(this, aOptions);
this._initialize(aValue, aOptions);

@@ -480,2 +482,2 @@ this.assign(aValue, aOptions);

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hYnN0cmFjdC10eXBlLnRzIl0sIm5hbWVzIjpbIm9iamVjdFRvU3RyaW5nIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJUeXBlIiwiQ3VzdG9tRmFjdG9yeSIsInJlZ2lzdGVyIiwiYUNsYXNzIiwiYVBhcmVudENsYXNzIiwiYU9wdGlvbnMiLCJ1bmRlZmluZWQiLCJwYXJlbnQiLCJyZXN1bHQiLCJ2UHJvdG90eXBlIiwiJGF0dHJpYnV0ZXMiLCJpbml0aWFsaXplVG8iLCJza2lwVW5kZWZpbmVkIiwidHJ5R2V0VHlwZU5hbWUiLCJ2YWx1ZSIsIm5hbWUiLCJjYWxsIiwiaSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJnZXQiLCJhVHlwZU5hbWUiLCJnZXRWYWx1ZSIsInRvT2JqZWN0IiwiYU5hbWVSZXF1aXJlZCIsInYiLCJ3aXRoVHlwZSIsInR5cGVPbmx5IiwidG9KU09OIiwiY29uc3RydWN0b3IiLCJhVmFsdWUiLCJhVHlwZSIsIm5ldyIsInRhcmdldCIsIlR5cGVFcnJvciIsImluaXRpYWxpemUiLCJUaGVUeXBlIiwiQ2xhc3MiLCJfaW5pdGlhbGl6ZSIsImFzc2lnbiIsImZpbmFsaXplIiwiZXJyb3JzIiwiX2ZpbmFsaXplIiwiYUV4Y2x1ZGUiLCJjaGVja1ZhbGlkaXR5IiwidG9WYWx1ZSIsInZhbHVlT2YiLCJ2YWxpZGF0ZSIsImV4Y2x1ZGUiLCJfX2Fzc2lnbiIsIl90b09iamVjdCIsInRvVHlwZU9iamVjdCIsImFkZEl0ZW1Ub0FycmF5IiwiZXhwb3J0VG8iLCJpc1JlcXVpcmVkIiwibWVyZ2VUbyIsInNraXBOdWxsIiwiX2lzUmVxdWlyZWQiLCJ2UmVxdWlyZWQiLCJfdmFsaWRhdGUiLCJlcnJvciIsImFNZXNzYWdlIiwicHVzaCIsIm1lc3NhZ2UiLCJ2YWxpZGF0ZVJlcXVpcmVkIiwicmFpc2VFcnJvciIsIl92YWxpZGF0ZVJlcXVpcmVkIiwiY3VzdG9tVmFsaWRhdGUiLCJpc1ZhbGlkIiwiYmluZCIsInVucmVnaXN0ZXIiLCJhbGlhcyIsInNldEFsaWFzZXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJlbnVtZXJhYmxlIiwiZXhwb3J0ZWQiLCJhc3NpZ25lZCIsInR5cGUiLCJpdGVtcyIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJpdGVtIiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtBQUNBOzs7OztBQUtBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsUUFBeEM7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQyxJQUFOLFNBQW1CQyw0QkFBbkIsQ0FBaUM7O0FBRXRDO0FBQ0Y7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCRTtBQUNGO0FBQ0E7Ozs7QUFJaUIsU0FBUkMsUUFBUTtBQUNiQyxFQUFBQSxNQURhO0FBRWJDLEVBQUFBLFlBRmE7QUFHYkMsRUFBQUEsUUFIYTtBQUlKO0FBQ1Q7QUFDQSxRQUFJLE9BQU9ELFlBQVAsS0FBd0IsUUFBNUIsRUFBc0M7QUFDcENDLE1BQUFBLFFBQVEsR0FBR0QsWUFBWDtBQUNBQSxNQUFBQSxZQUFZLEdBQUdFLFNBQWY7QUFDRCxLQUhELE1BR08sSUFBSSxpQ0FBYUYsWUFBYixDQUFKLEVBQWdDO0FBQ3JDQyxNQUFBQSxRQUFRLEdBQUdELFlBQVg7QUFDQUEsTUFBQUEsWUFBWSxHQUFHQyxRQUFRLENBQUVFLE1BQXpCO0FBQ0Q7O0FBRUQsVUFBTUMsTUFBTSxHQUFHLE1BQU1OLFFBQU4sQ0FBZUMsTUFBZixFQUF1QkMsWUFBdkIsRUFBcUNDLFFBQXJDLENBQWY7QUFDQTtBQUNBLFFBQUlHLE1BQUosRUFBWTtBQUNWLFlBQU1DLFVBQVUsR0FBR04sTUFBTSxDQUFDTCxTQUExQjtBQUNB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LXZhcnMgKi9cbmltcG9ydCB7XG4gIEN1c3RvbUZhY3RvcnksXG4gIElCYXNlRmFjdG9yeU9wdGlvbnMsXG4gIGlzUHVyZU9iamVjdCxcbn0gZnJvbSAnY3VzdG9tLWZhY3RvcnknXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdwcm9wZXJ0eS1tYW5hZ2VyL2xpYi9hYmlsaXR5J1xuaW1wb3J0IHsgSU1lcmdlT3B0aW9ucywgUHJvcERlc2NyaXB0b3JzIH0gZnJvbSAncHJvcGVydHktbWFuYWdlci9saWIvYWJzdHJhY3QnXG5pbXBvcnQgUHJvcGVydGllcyBmcm9tICdwcm9wZXJ0eS1tYW5hZ2VyL2xpYi9wcm9wZXJ0aWVzJ1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJ3V0aWwtZXgvbGliL2lzL3R5cGUvb2JqZWN0J1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAndXRpbC1leC9saWIvaXMvdHlwZS9mdW5jdGlvbidcbmltcG9ydCBpc1N0cmluZyBmcm9tICd1dGlsLWV4L2xpYi9pcy90eXBlL3N0cmluZydcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICd1dGlsLWV4L2xpYi9kZWZpbmVQcm9wZXJ0eSdcbmltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tICdpbmhlcml0cy1leC9saWIvZ2V0UHJvdG90eXBlT2YnXG4vLyBpbXBvcnQgY3JlYXRlQ3RvciBmcm9tICdpbmhlcml0cy1leC9saWIvY3JlYXRlQ3Rvcidcbi8vIGltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1leC9saWIvaW5oZXJpdHMnXG5cbi8vIGNvbnN0IGV4dGVuZCAgICAgICAgICA9IHJlcXVpcmUoJ3V0aWwtZXgvbGliL19leHRlbmQnKVxuXG5jb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbi8vIGNvbnN0IGdldE9iamVjdEtleXMgICA9IE9iamVjdC5rZXlzXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVR5cGVPcHRpb25zIGV4dGVuZHMgSUJhc2VGYWN0b3J5T3B0aW9ucyB7XG4gIFtuYW1lOiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHlwZU9iamVjdE9wdGlvbnMgZXh0ZW5kcyBJTWVyZ2VPcHRpb25zIHtcbiAgdHlwZU9ubHk/OiBib29sZWFuXG4gIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFcnJvck1lc3NhZ2Uge1xuICBuYW1lOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG4gIFtpeDogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GbiA9ICh0aGlzOiBUeXBlLCB2YWx1ZTogYW55LCBvcHRpb25zPykgPT4gYm9vbGVhblxuZXhwb3J0IHR5cGUgVG9WYWx1ZUZuID0gKHRoaXM6IHR5cGVvZiBUeXBlLCB2YWx1ZTogYW55LCBvcHRpb25zPykgPT4gYW55XG5leHBvcnQgdHlwZSBEZWZpbmVQcm9wZXJ0aWVzRm4gPSAoXG4gIGFUYXJnZXQsXG4gIGFQcm9wZXJ0aWVzOiBQcm9wRGVzY3JpcHRvcnMsXG4gIHJlY3JlYXRlPzogYm9vbGVhblxuKSA9PiBQcm9wZXJ0aWVzXG5leHBvcnQgdHlwZSBDbG9uZUZuID0gKHRoaXM6IFR5cGUsIG9wdGlvbnM/OiBJVHlwZU9iamVjdE9wdGlvbnMpID0+IFR5cGVcbmV4cG9ydCB0eXBlIEV4cG9ydFRvRm4gPSAodGhpczogVHlwZSwgZGVzdCwgb3B0aW9ucz86IElUeXBlT2JqZWN0T3B0aW9ucykgPT4gYW55XG4vKipcbiAqIFRoZSBBYnN0cmFjdCBUeXBlIGluZm9ybWF0aW9uIGNsYXNzXG4gKlxuICovXG5leHBvcnQgY2xhc3MgVHlwZSBleHRlbmRzIEN1c3RvbUZhY3Rvcnkge1xuICBkZWNsYXJlIHN0YXRpYyBkZWZpbmVQcm9wZXJ0aWVzOiBEZWZpbmVQcm9wZXJ0aWVzRm5cbiAgLyoqXG4gICAqIGdldCBhbGwgcHJvcGVydHkgZGVzY3JpcHRvcnMgaW5jbHVkZSBpbmhlcml0ZWQuXG4gICAqL1xuICBkZWNsYXJlIHN0YXRpYyBnZXRQcm9wZXJ0aWVzOiAoKSA9PiBQcm9wRGVzY3JpcHRvcnNcbiAgZGVjbGFyZSBzdGF0aWMgJGF0dHJpYnV0ZXM6IFByb3BlcnRpZXNcblxuICBkZWNsYXJlIHN0YXRpYyB2YWx1ZTogYW55XG4gIGRlY2xhcmUgc3RhdGljIHJlcXVpcmVkOiBib29sZWFuXG4gIGRlY2xhcmUgc3RhdGljIGN1c3RvbVZhbGlkYXRlOiB1bmRlZmluZWQgfCBWYWxpZGF0aW9uRm5cblxuICBkZWNsYXJlIG5hbWU6IHN0cmluZ1xuICBkZWNsYXJlIHZhbHVlOiBhbnlcbiAgZGVjbGFyZSByZXF1aXJlZDogYm9vbGVhblxuICBkZWNsYXJlIGN1c3RvbVZhbGlkYXRlOiB1bmRlZmluZWQgfCBWYWxpZGF0aW9uRm5cblxuICBkZWNsYXJlIENsYXNzOiB0eXBlb2YgVHlwZVxuICBkZWNsYXJlICRhdHRyaWJ1dGVzOiBQcm9wZXJ0aWVzXG4gIGRlY2xhcmUgZ2V0UHJvcGVydGllczogKCkgPT4gUHJvcGVydGllc1xuICBkZWNsYXJlIG1lcmdlVG86IEV4cG9ydFRvRm5cbiAgZGVjbGFyZSBleHBvcnRUbzogRXhwb3J0VG9GblxuICBkZWNsYXJlIGNsb25lVG86IEV4cG9ydFRvRm5cbiAgZGVjbGFyZSBhc3NpZ25UbzogRXhwb3J0VG9GblxuICBkZWNsYXJlIF9fYXNzaWduOiBGdW5jdGlvblxuICBkZWNsYXJlIGNsb25lOiBDbG9uZUZuXG4gIGRlY2xhcmUgaXNTYW1lOiAoc3JjLCBvcHRpb25zPzogSVR5cGVPYmplY3RPcHRpb25zKSA9PiBib29sZWFuXG4gIGRlY2xhcmUgdG9KU09OOiAoKSA9PiBhbnlcblxuICBkZWNsYXJlIHN0YXRpYyB0b1ZhbHVlOiBUb1ZhbHVlRm5cbiAgZGVjbGFyZSBlcnJvcnM6IG51bGwgfCBJRXJyb3JNZXNzYWdlW11cblxuICAvKipcbiAgICogdGhlIHJvb3QgbmFtZVxuICAgKi9cbiAgc3RhdGljIFJPT1RfTkFNRSA9ICd0eXBlJ1xuXG4gIHN0YXRpYyByZWdpc3RlcihhQ2xhc3MsIGFPcHRpb25zPzogc3RyaW5nIHwgSVR5cGVPcHRpb25zKTogYm9vbGVhblxuICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAgYUNsYXNzLFxuICAgIGFQYXJlbnRDbGFzcz86IHR5cGVvZiBUeXBlIHwgc3RyaW5nIHwgSVR5cGVPcHRpb25zLFxuICAgIGFPcHRpb25zPzogc3RyaW5nIHwgSVR5cGVPcHRpb25zXG4gICk6IGJvb2xlYW4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBhUGFyZW50Q2xhc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhT3B0aW9ucyA9IGFQYXJlbnRDbGFzc1xuICAgICAgYVBhcmVudENsYXNzID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChpc1B1cmVPYmplY3QoYVBhcmVudENsYXNzKSkge1xuICAgICAgYU9wdGlvbnMgPSBhUGFyZW50Q2xhc3NcbiAgICAgIGFQYXJlbnRDbGFzcyA9IGFPcHRpb25zIS5wYXJlbnRcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBzdXBlci5yZWdpc3RlcihhQ2xhc3MsIGFQYXJlbnRDbGFzcywgYU9wdGlvbnMpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBjb25zdCB2UHJvdG90eXBlID0gYUNsYXNzLnByb3RvdHlwZVxuICAgICAgY29uc3QgJGF0dHJpYnV0ZXMgPSB2UHJvdG90eXBlLiRhdHRyaWJ1dGVzXG4gICAgICBpZiAoIWFPcHRpb25zIHx8IGlzU3RyaW5nKGFPcHRpb25zKSkgYU9wdGlvbnMgPSB7fVxuICAgICAgJGF0dHJpYnV0ZXMuaW5pdGlhbGl6ZVRvKGFDbGFzcywgYU9wdGlvbnMsIHsgc2tpcFVuZGVmaW5lZDogdHJ1ZSB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogdHJ5IHRvIGdldCB0aGUgdHlwZSBuYW1lIGZyb20gYSB2YWx1ZVxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSB0aGUgdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgdHJ5R2V0VHlwZU5hbWUodmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0XG4gICAgaWYgKGlzUHVyZU9iamVjdCh2YWx1ZSkpIHZhbHVlID0gdmFsdWUudmFsdWVcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICByZXN1bHQgPSBnZXRQcm90b3R5cGVPZih2YWx1ZSkubmFtZVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpXG4gICAgICBjb25zdCBpID0gcmVzdWx0Lmxhc3RJbmRleE9mKCcgJylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoaSArIDEsIHJlc3VsdC5sZW5ndGggLSAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0ID0gdHlwZW9mIHZhbHVlXG4gICAgICByZXN1bHQgPSByZXN1bHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN1bHQuc3Vic3RyaW5nKDEpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdGhlIFR5cGUgaW5mbyBjbGFzcyBmcm9tIHRoZSB0eXBlIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBhVHlwZU5hbWUgdGhlIHR5cGUgbmFtZSBvciB2YWx1ZSB3aXRoIHR5cGUgb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYU9wdGlvbnNcbiAgICogQHJldHVybnMge3R5cGVvZiBUeXBlfHVuZGVmaW5lZH1cbiAgICovXG4gIHN0YXRpYyBnZXQoYVR5cGVOYW1lLCBhT3B0aW9ucz8pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChhVHlwZU5hbWUpIHtcbiAgICAgIGlmIChpc09iamVjdChhVHlwZU5hbWUpIHx8ICFpc1N0cmluZyhhVHlwZU5hbWUpKSB7XG4gICAgICAgIGFPcHRpb25zID0gYVR5cGVOYW1lXG4gICAgICAgIGNvbnN0ICRhdHRyaWJ1dGVzID0gdGhpcy5wcm90b3R5cGUuJGF0dHJpYnV0ZXNcbiAgICAgICAgLy8gZ2V0IHRoZSB0eXBlIG5hbWUgZm9yIHRoZSB2YWx1ZSB3aXRoIHR5cGUuXG4gICAgICAgIGFUeXBlTmFtZSA9ICRhdHRyaWJ1dGVzLmdldFZhbHVlKGFPcHRpb25zLCAnbmFtZScpXG4gICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGFUeXBlTmFtZSkgcmV0dXJuIHN1cGVyLmdldChhVHlwZU5hbWUpXG4gIH1cblxuICBzdGF0aWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5uYW1lIHx8IHRoaXMubmFtZVxuICB9XG5cbiAgc3RhdGljIHRvT2JqZWN0KGFPcHRpb25zPywgYU5hbWVSZXF1aXJlZD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCB2ID0gbmV3IHRoaXModW5kZWZpbmVkLCBhT3B0aW9ucylcbiAgICBpZiAoIWFPcHRpb25zKSBhT3B0aW9ucyA9IHt9XG4gICAgYU9wdGlvbnMud2l0aFR5cGUgPSB0cnVlXG4gICAgaWYgKGFPcHRpb25zLnR5cGVPbmx5ID09IG51bGwpIGFPcHRpb25zLnR5cGVPbmx5ID0gdHJ1ZVxuICAgIC8vIGlmIChhT3B0aW9ucy5za2lwRGVmYXVsdCA9PSBudWxsKSBhT3B0aW9ucy5za2lwRGVmYXVsdCA9IGZhbHNlXG4gICAgY29uc3QgcmVzdWx0ID0gdi50b09iamVjdChhT3B0aW9ucywgYU5hbWVSZXF1aXJlZClcbiAgICBpZiAoXG4gICAgICBhT3B0aW9ucyAmJlxuICAgICAgYU9wdGlvbnMudHlwZU9ubHkgPT09IGZhbHNlICYmXG4gICAgICBhT3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXN1bHQudmFsdWUgPSBhT3B0aW9ucy52YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBzdGF0aWMgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KClcbiAgfVxuXG4gIC8vIHN0YXRpYyBjcmVhdGVUeXBlKGFUeXBlPywgYU9wdGlvbnM/KTogdHlwZW9mIFR5cGUge1xuICAvLyAgIGlmIChpc1B1cmVPYmplY3QoYVR5cGUpKSB7XG4gIC8vICAgICBhT3B0aW9ucyA9IGFUeXBlXG4gIC8vICAgICBhVHlwZSA9IGFPcHRpb25zLm5hbWVcbiAgLy8gICB9XG4gIC8vICAgaWYgKHR5cGVvZiBhVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgLy8gICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUN0b3IoYVR5cGUpXG4gIC8vICAgICBpZiAodGhpcy5yZWdpc3RlcihyZXN1bHQsIGFPcHRpb25zKSkge1xuICAvLyAgICAgICByZXR1cm4gcmVzdWx0XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB2YWx1ZSBpbnN0YW5jZSBvZiB0aGUgdHlwZVxuICAgKiBAcGFyYW0geyp9IGFWYWx1ZSB0aGUgdmFsdWUgdG8gY2xvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBhVHlwZSB0aGUgdHlwZSBuYW1lIG9yIHRoZSB0eXBlIG9wdGlvbnMgb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhT3B0aW9ucyB0aGUgdHlwZSBvcHRpb25zIG9iamVjdFxuICAgKiBAcmV0dXJucyB7VHlwZX0gdGhlIHZhbHVlIG9mIHRoZSB0eXBlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhVmFsdWU/LCBhT3B0aW9ucz8pXG4gIGNvbnN0cnVjdG9yKGFWYWx1ZT8sIGFUeXBlPywgYU9wdGlvbnM/KSB7XG4gICAgLy8gc3VwZXIoKSAvLyBvbmx5IGZvciBnZW5lcmF0ZSBkZWNsYXJhdGlvbiBmaWxlXG4gICAgaWYgKGlzUHVyZU9iamVjdChhVHlwZSkpIHtcbiAgICAgIGFPcHRpb25zID0gYVR5cGVcbiAgICAgIGFUeXBlID0gYU9wdGlvbnMubmFtZVxuICAgIH1cblxuICAgIGlmIChuZXcudGFyZ2V0ID09PSBUeXBlKSB7XG4gICAgICBpZiAoIWFUeXBlKSB7XG4gICAgICAgIGFUeXBlID0gKGFPcHRpb25zICYmIGFPcHRpb25zLm5hbWUpIHx8IFR5cGUudHJ5R2V0VHlwZU5hbWUoYVZhbHVlKVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcoYVR5cGUpKSB7XG4gICAgICAgIGFUeXBlID0gVHlwZS5nZXQoYVR5cGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYVR5cGUpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NhbiBub3QgZGV0ZXJtaW5lIHRoZSB2YWx1ZSB0eXBlLicpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFUeXBlICE9PSBUeXBlKSByZXR1cm4gbmV3IGFUeXBlKGFWYWx1ZSwgYU9wdGlvbnMpXG4gICAgfVxuICAgIHN1cGVyKGFWYWx1ZSwgYU9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBpbml0aWFsaXplKGFWYWx1ZT8sIGFPcHRpb25zID0ge30pIHtcbiAgICAvLyBhT3B0aW9ucyA9IGFPcHRpb25zID09IG51bGwgPyB7fSA6IE9iamVjdC5hc3NpZ24oe30sIGFPcHRpb25zKVxuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdlcnJvcnMnLCBudWxsKVxuICAgIGNvbnN0IFRoZVR5cGUgPSB0aGlzLkNsYXNzIHx8IHRoaXMuY29uc3RydWN0b3JcbiAgICBjb25zdCAkYXR0cmlidXRlcyA9IHRoaXMuJGF0dHJpYnV0ZXNcbiAgICAkYXR0cmlidXRlcy5pbml0aWFsaXplVG8oYU9wdGlvbnMsIFRoZVR5cGUsIHsgc2tpcFVuZGVmaW5lZDogdHJ1ZSB9KVxuICAgIHRoaXMuX2luaXRpYWxpemUoYVZhbHVlLCBhT3B0aW9ucylcbiAgICB0aGlzLmFzc2lnbihhVmFsdWUsIGFPcHRpb25zKVxuICAgIHJldHVybiAnb2snXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmaW5hbGl6ZShhT3B0aW9ucz8pIHtcbiAgICBpZiAodGhpcy5lcnJvcnMpIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgIGlmICh0aGlzLnZhbHVlKSB0aGlzLnZhbHVlID0gbnVsbFxuICAgIHRoaXMuX2ZpbmFsaXplKGFPcHRpb25zKVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfZmluYWxpemUoYU9wdGlvbnM/KSB7fVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9pbml0aWFsaXplKGFWYWx1ZT8sIGFPcHRpb25zPykge31cblxuICBhc3NpZ24oYVZhbHVlLCBhT3B0aW9ucz8sIGFFeGNsdWRlPykge1xuICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICBpZiAoIWFPcHRpb25zKSBhT3B0aW9ucyA9IHt9XG4gICAgY29uc3QgY2hlY2tWYWxpZGl0eSA9IGFPcHRpb25zLmNoZWNrVmFsaWRpdHlcbiAgICBjb25zdCBUaGVUeXBlID0gdGhpcy5DbGFzcyB8fCB0aGlzLmNvbnN0cnVjdG9yXG5cbiAgICBpZiAoYVZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgYVZhbHVlID0gYVZhbHVlLnRvT2JqZWN0KHsgd2l0aFR5cGU6IHRydWUgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1B1cmVPYmplY3QoYVZhbHVlKSkge1xuICAgICAgYVZhbHVlID0geyB2YWx1ZTogYVZhbHVlIH1cbiAgICB9XG5cbiAgICBjb25zdCAkYXR0cmlidXRlcyA9IHRoaXMuJGF0dHJpYnV0ZXNcbiAgICAkYXR0cmlidXRlcy5pbml0aWFsaXplVG8oYVZhbHVlLCBhT3B0aW9ucywge1xuICAgICAgc2tpcFVuZGVmaW5lZDogdHJ1ZSxcbiAgICB9KVxuXG4gICAgbGV0IHZhbHVlID0gYVZhbHVlLnZhbHVlXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKFRoZVR5cGUudG9WYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBUaGVUeXBlLnRvVmFsdWUodmFsdWUsIGFWYWx1ZSkgPz8gdmFsdWVcbiAgICAgIH0gLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZS52YWx1ZU9mKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgfVxuICAgICAgYVZhbHVlLnZhbHVlID0gdmFsdWVcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tWYWxpZGl0eSAhPT0gZmFsc2UpIHRoaXMudmFsaWRhdGUoYVZhbHVlLCBjaGVja1ZhbGlkaXR5KVxuICAgIGlmIChhRXhjbHVkZSkge1xuICAgICAgYU9wdGlvbnMuZXhjbHVkZSA9IGFFeGNsdWRlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9fYXNzaWduKGFWYWx1ZSwgYU9wdGlvbnMpXG4gIH1cblxuICB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSArICcnXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF90b09iamVjdChhT3B0aW9ucz8pIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKClcbiAgfVxuXG4gIHRvVHlwZU9iamVjdCh0aGlzOiBhbnksIGFPcHRpb25zPzogSVR5cGVPYmplY3RPcHRpb25zLCBhTmFtZVJlcXVpcmVkID0gdHJ1ZSkge1xuICAgIGNvbnN0IGV4Y2x1ZGUgPSBhTmFtZVJlcXVpcmVkID8gWyd2YWx1ZSddIDogWyduYW1lJywgJ3ZhbHVlJ11cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghYU9wdGlvbnMpIGFPcHRpb25zID0ge31cbiAgICBhT3B0aW9ucy5leGNsdWRlID0gYWRkSXRlbVRvQXJyYXkoZXhjbHVkZSwgYU9wdGlvbnMuZXhjbHVkZSlcbiAgICByZXR1cm4gdGhpcy5leHBvcnRUbyh7fSwgYU9wdGlvbnMpXG4gIH1cblxuICB0b09iamVjdCh0aGlzOiBhbnksIGFPcHRpb25zPywgYU5hbWVSZXF1aXJlZD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0eXBlT25seSA9IGFPcHRpb25zICYmIGFPcHRpb25zLnR5cGVPbmx5XG4gICAgY29uc3Qgd2l0aFR5cGUgPSB0eXBlT25seSB8fCAoYU9wdGlvbnMgJiYgYU9wdGlvbnMud2l0aFR5cGUpXG5cbiAgICBsZXQgcmVzdWx0XG4gICAgaWYgKHR5cGVPbmx5IHx8IHdpdGhUeXBlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRvVHlwZU9iamVjdChhT3B0aW9ucywgYU5hbWVSZXF1aXJlZClcbiAgICAgIGlmICghdHlwZU9ubHkpIHtcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gdGhpcy5fdG9PYmplY3QoYU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX3RvT2JqZWN0KGFPcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2YWx1ZSBjYW4gcGFzcyB0aGUgYHJlcXVpcmVkYCBydWxlIGNoZWNrXG4gICAqIEBwYXJhbSBhT3B0aW9uc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaXNSZXF1aXJlZChhT3B0aW9ucz8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KGFPcHRpb25zKSkge1xuICAgICAgYU9wdGlvbnMgPSB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIGFPcHRpb25zID0gdGhpcy5tZXJnZVRvKGFPcHRpb25zLCB7XG4gICAgICAgIHNraXBOdWxsOiB0cnVlLFxuICAgICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgICAgICBleGNsdWRlOiAnbmFtZScsXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faXNSZXF1aXJlZChhT3B0aW9ucy52YWx1ZSwgYU9wdGlvbnMpXG4gIH1cblxuICBfaXNSZXF1aXJlZChhVmFsdWUsIGFPcHRpb25zKSB7XG4gICAgY29uc3QgdlJlcXVpcmVkID0gdGhpcy4kYXR0cmlidXRlcy5nZXRWYWx1ZShhT3B0aW9ucywgJ3JlcXVpcmVkJylcbiAgICBjb25zdCByZXN1bHQgPSAhdlJlcXVpcmVkIHx8ICh2UmVxdWlyZWQgPT09IHRydWUgJiYgYVZhbHVlICE9IG51bGwpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfdmFsaWRhdGUoYVZhbHVlLCBhT3B0aW9ucykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBlcnJvcih0aGlzOiBhbnksIGFNZXNzYWdlLCBhT3B0aW9ucz8pIHtcbiAgICBjb25zdCBuYW1lOiBzdHJpbmcgPVxuICAgICAgKGFPcHRpb25zICYmIHRoaXMuJGF0dHJpYnV0ZXMuZ2V0VmFsdWUoYU9wdGlvbnMsICduYW1lJykpIHx8IHRoaXMubmFtZVxuICAgIHRoaXMuZXJyb3JzPy5wdXNoKHsgbmFtZSwgbWVzc2FnZTogYU1lc3NhZ2UgfSlcbiAgfVxuXG4gIHZhbGlkYXRlUmVxdWlyZWQoYU9wdGlvbnM/KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5pc1JlcXVpcmVkKGFPcHRpb25zKVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICBpZiAoYU9wdGlvbnM/LnJhaXNlRXJyb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiJyArIHRoaXMubmFtZSArICdcIiBpcyByZXF1aXJlZCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yKCdpcyByZXF1aXJlZCcsIGFPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBfdmFsaWRhdGVSZXF1aXJlZChhVmFsdWUsIGFPcHRpb25zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5faXNSZXF1aXJlZChhVmFsdWUsIGFPcHRpb25zKVxuICAgIGlmICghcmVzdWx0KSB0aGlzLmVycm9yKCdpcyByZXF1aXJlZCcsIGFPcHRpb25zKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIHZhbGlkYXRlKGFWYWx1ZSwgYU9wdGlvbnN8cmFpc2VFcnJvcj8pXG4gIHZhbGlkYXRlKHRoaXM6IGFueSwgYU9wdGlvbnM/LCByYWlzZUVycm9yPykge1xuICAgIGxldCBjdXN0b21WYWxpZGF0ZSE6IEZ1bmN0aW9uXG4gICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgIGlmIChhT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpZiAoIShhT3B0aW9ucyBpbnN0YW5jZW9mIFR5cGUpICYmICFpc1B1cmVPYmplY3QoYU9wdGlvbnMpKSB7XG4gICAgICAgIGFPcHRpb25zID0geyB2YWx1ZTogYU9wdGlvbnMgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhT3B0aW9ucyA9IHt9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHJhaXNlRXJyb3IpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGFPcHRpb25zLCByYWlzZUVycm9yKVxuICAgICAgcmFpc2VFcnJvciA9IGFPcHRpb25zLnJhaXNlRXJyb3JcbiAgICB9XG4gICAgaWYgKHJhaXNlRXJyb3IgPT09IHVuZGVmaW5lZCkgcmFpc2VFcnJvciA9IGFPcHRpb25zLnJhaXNlRXJyb3JcblxuICAgIGNvbnN0ICRhdHRyaWJ1dGVzID0gdGhpcy4kYXR0cmlidXRlc1xuICAgIC8vIGFsbG93IHVzZSB0aGUgcHJvcGVydHkgYWxpYXMgb2YgY3VzdG9tVmFsaWRhdGVcbiAgICBjdXN0b21WYWxpZGF0ZSA9ICRhdHRyaWJ1dGVzLmdldFZhbHVlKGFPcHRpb25zLCAnY3VzdG9tVmFsaWRhdGUnKVxuXG4gICAgYU9wdGlvbnMgPSB0aGlzLm1lcmdlVG8oYU9wdGlvbnMsIHtcbiAgICAgIHNraXBOdWxsOiB0cnVlLFxuICAgICAgc2tpcFVuZGVmaW5lZDogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGU6ICduYW1lJyxcbiAgICB9KVxuICAgIGlmICghY3VzdG9tVmFsaWRhdGUpIGN1c3RvbVZhbGlkYXRlID0gYU9wdGlvbnMuY3VzdG9tVmFsaWRhdGVcbiAgICAvLyBpZiAocmFpc2VFcnJvciAhPT0gZmFsc2UpIGFPcHRpb25zLnJhaXNlRXJyb3IgPSB0cnVlXG5cbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5fdmFsaWRhdGVSZXF1aXJlZChhT3B0aW9ucy52YWx1ZSwgYU9wdGlvbnMpXG4gICAgaWYgKHJlc3VsdCAmJiBpc0Z1bmN0aW9uKGN1c3RvbVZhbGlkYXRlKSkge1xuICAgICAgcmVzdWx0ID0gY3VzdG9tVmFsaWRhdGUuY2FsbCh0aGlzLCBhT3B0aW9ucy52YWx1ZSwgYU9wdGlvbnMpXG4gICAgfVxuICAgIGlmIChyZXN1bHQgJiYgYU9wdGlvbnMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fdmFsaWRhdGUoYU9wdGlvbnMudmFsdWUsIGFPcHRpb25zKVxuICAgIH1cbiAgICBpZiAocmFpc2VFcnJvciAhPT0gZmFsc2UgJiYgIXJlc3VsdCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCInICsgYU9wdGlvbnMudmFsdWUgKyAnXCIgaXMgYW4gaW52YWxpZCAnICsgdGhpcy5uYW1lKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpc1ZhbGlkKGFPcHRpb25zPykge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGFPcHRpb25zLCBmYWxzZSlcbiAgfVxufVxucHJvcGVydGllcyhUeXBlLCB7IG5hbWU6ICdhZHZhbmNlJywgZXhjbHVkZTogJ3RvT2JqZWN0JyB9KVxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSBUeXBlLnJlZ2lzdGVyLmJpbmQoVHlwZSlcbmV4cG9ydCBjb25zdCB1bnJlZ2lzdGVyID0gVHlwZS51bnJlZ2lzdGVyLmJpbmQoVHlwZSlcbmV4cG9ydCBjb25zdCBhbGlhcyA9IFR5cGUuc2V0QWxpYXNlcy5iaW5kKFR5cGUpXG5leHBvcnQgY29uc3QgZGVmaW5lUHJvcGVydGllcyA9IFR5cGUuZGVmaW5lUHJvcGVydGllc1xuXG5kZWZpbmVQcm9wZXJ0aWVzKFR5cGUsIHtcbiAgbmFtZToge1xuICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGV4cG9ydGVkOiB0cnVlLFxuICAgIGFzc2lnbmVkOiB0cnVlLFxuICAgIHR5cGU6ICdTdHJpbmcnLFxuICB9LFxuICByZXF1aXJlZDoge1xuICAgIHR5cGU6ICdCb29sZWFuJyxcbiAgfSxcbiAgY3VzdG9tVmFsaWRhdGU6IHtcbiAgICBhbGlhczogWydjdXN0b20tdmFsaWRhdGUnLCAndmFsaWRhdGUnXSxcbiAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICB9LFxuICB2YWx1ZToge1xuICAgIHR5cGU6ICdhbnknLFxuICB9LFxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEl0ZW1Ub0FycmF5KFxuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sXG4gIGl0ZW1zOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICh0eXBlb2YgaXRlbXMgPT09ICdzdHJpbmcnKSB7XG4gICAgaXRlbXMgPSBbaXRlbXNdXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gW3ZhbHVlXVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IGl0ZW1zID8/IHZhbHVlID8/IFtdXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgaWYgKHZhbHVlKVxuICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hYnN0cmFjdC10eXBlLnRzIl0sIm5hbWVzIjpbIm9iamVjdFRvU3RyaW5nIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJUeXBlIiwiQ3VzdG9tRmFjdG9yeSIsInJlZ2lzdGVyIiwiYUNsYXNzIiwiYVBhcmVudENsYXNzIiwiYU9wdGlvbnMiLCJ1bmRlZmluZWQiLCJwYXJlbnQiLCJyZXN1bHQiLCJ2UHJvdG90eXBlIiwiJGF0dHJpYnV0ZXMiLCJpbml0aWFsaXplVG8iLCJza2lwVW5kZWZpbmVkIiwidHJ5R2V0VHlwZU5hbWUiLCJ2YWx1ZSIsIm5hbWUiLCJjYWxsIiwiaSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJnZXQiLCJhVHlwZU5hbWUiLCJnZXRWYWx1ZSIsInRvT2JqZWN0IiwiYU5hbWVSZXF1aXJlZCIsInYiLCJ3aXRoVHlwZSIsInR5cGVPbmx5IiwidG9KU09OIiwiY29uc3RydWN0b3IiLCJhVmFsdWUiLCJhVHlwZSIsIm5ldyIsInRhcmdldCIsIlR5cGVFcnJvciIsImluaXRpYWxpemUiLCJUaGVUeXBlIiwiQ2xhc3MiLCJfaW5pdGlhbGl6ZSIsImFzc2lnbiIsImZpbmFsaXplIiwiZXJyb3JzIiwiX2ZpbmFsaXplIiwiYUV4Y2x1ZGUiLCJjaGVja1ZhbGlkaXR5IiwidG9WYWx1ZSIsInZhbHVlT2YiLCJ2YWxpZGF0ZSIsImV4Y2x1ZGUiLCJfX2Fzc2lnbiIsIl90b09iamVjdCIsInRvVHlwZU9iamVjdCIsImFkZEl0ZW1Ub0FycmF5IiwiZXhwb3J0VG8iLCJpc1JlcXVpcmVkIiwibWVyZ2VUbyIsInNraXBOdWxsIiwiX2lzUmVxdWlyZWQiLCJ2UmVxdWlyZWQiLCJfdmFsaWRhdGUiLCJlcnJvciIsImFNZXNzYWdlIiwicHVzaCIsIm1lc3NhZ2UiLCJ2YWxpZGF0ZVJlcXVpcmVkIiwicmFpc2VFcnJvciIsIl92YWxpZGF0ZVJlcXVpcmVkIiwiY3VzdG9tVmFsaWRhdGUiLCJpc1ZhbGlkIiwiYmluZCIsInVucmVnaXN0ZXIiLCJhbGlhcyIsInNldEFsaWFzZXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJlbnVtZXJhYmxlIiwiZXhwb3J0ZWQiLCJhc3NpZ25lZCIsInR5cGUiLCJpdGVtcyIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJpdGVtIiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtBQUNBOzs7OztBQUtBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsUUFBeEM7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQyxJQUFOLFNBQW1CQyw0QkFBbkIsQ0FBaUM7O0FBRXRDO0FBQ0Y7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCRTtBQUNGO0FBQ0E7Ozs7QUFJaUIsU0FBUkMsUUFBUTtBQUNiQyxFQUFBQSxNQURhO0FBRWJDLEVBQUFBLFlBRmE7QUFHYkMsRUFBQUEsUUFIYTtBQUlKO0FBQ1Q7QUFDQSxRQUFJLE9BQU9ELFlBQVAsS0FBd0IsUUFBNUIsRUFBc0M7QUFDcENDLE1BQUFBLFFBQVEsR0FBR0QsWUFBWDtBQUNBQSxNQUFBQSxZQUFZLEdBQUdFLFNBQWY7QUFDRCxLQUhELE1BR08sSUFBSSxpQ0FBYUYsWUFBYixDQUFKLEVBQWdDO0FBQ3JDQyxNQUFBQSxRQUFRLEdBQUdELFlBQVg7QUFDQUEsTUFBQUEsWUFBWSxHQUFHQyxRQUFRLENBQUVFLE1BQXpCO0FBQ0Q7O0FBRUQsVUFBTUMsTUFBTSxHQUFHLE1BQU1OLFFBQU4sQ0FBZUMsTUFBZixFQUF1QkMsWUFBdkIsRUFBcUNDLFFBQXJDLENBQWY7QUFDQTtBQUNBLFFBQUlHLE1BQUosRUFBWTtBQUNWLFlBQU1DLFVBQVUsR0FBR04sTUFBTSxDQUFDTCxTQUExQjtBQUNB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LE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQge1xuICBDdXN0b21GYWN0b3J5LFxuICBJQmFzZUZhY3RvcnlPcHRpb25zLFxuICBpc1B1cmVPYmplY3QsXG59IGZyb20gJ2N1c3RvbS1mYWN0b3J5J1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAncHJvcGVydHktbWFuYWdlci9saWIvYWJpbGl0eSdcbmltcG9ydCB7IElNZXJnZU9wdGlvbnMsIFByb3BEZXNjcmlwdG9ycyB9IGZyb20gJ3Byb3BlcnR5LW1hbmFnZXIvbGliL2Fic3RyYWN0J1xuaW1wb3J0IFByb3BlcnRpZXMgZnJvbSAncHJvcGVydHktbWFuYWdlci9saWIvcHJvcGVydGllcydcbmltcG9ydCBpc09iamVjdCBmcm9tICd1dGlsLWV4L2xpYi9pcy90eXBlL29iamVjdCdcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJ3V0aWwtZXgvbGliL2lzL3R5cGUvZnVuY3Rpb24nXG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAndXRpbC1leC9saWIvaXMvdHlwZS9zdHJpbmcnXG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAndXRpbC1leC9saWIvZGVmaW5lUHJvcGVydHknXG5pbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSAnaW5oZXJpdHMtZXgvbGliL2dldFByb3RvdHlwZU9mJ1xuLy8gaW1wb3J0IGNyZWF0ZUN0b3IgZnJvbSAnaW5oZXJpdHMtZXgvbGliL2NyZWF0ZUN0b3InXG4vLyBpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtZXgvbGliL2luaGVyaXRzJ1xuXG4vLyBjb25zdCBleHRlbmQgICAgICAgICAgPSByZXF1aXJlKCd1dGlsLWV4L2xpYi9fZXh0ZW5kJylcblxuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4vLyBjb25zdCBnZXRPYmplY3RLZXlzICAgPSBPYmplY3Qua2V5c1xuXG5leHBvcnQgaW50ZXJmYWNlIElUeXBlT3B0aW9ucyBleHRlbmRzIElCYXNlRmFjdG9yeU9wdGlvbnMge1xuICBbbmFtZTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVR5cGVPYmplY3RPcHRpb25zIGV4dGVuZHMgSU1lcmdlT3B0aW9ucyB7XG4gIHR5cGVPbmx5PzogYm9vbGVhblxuICBba2V5OiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXJyb3JNZXNzYWdlIHtcbiAgbmFtZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBbaXg6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRm4gPSAodGhpczogVHlwZSwgdmFsdWU6IGFueSwgb3B0aW9ucz8pID0+IGJvb2xlYW5cbmV4cG9ydCB0eXBlIFRvVmFsdWVGbiA9ICh0aGlzOiB0eXBlb2YgVHlwZSwgdmFsdWU6IGFueSwgb3B0aW9ucz8pID0+IGFueVxuZXhwb3J0IHR5cGUgRGVmaW5lUHJvcGVydGllc0ZuID0gKFxuICBhVGFyZ2V0LFxuICBhUHJvcGVydGllczogUHJvcERlc2NyaXB0b3JzLFxuICByZWNyZWF0ZT86IGJvb2xlYW5cbikgPT4gUHJvcGVydGllc1xuZXhwb3J0IHR5cGUgQ2xvbmVGbiA9ICh0aGlzOiBUeXBlLCBvcHRpb25zPzogSVR5cGVPYmplY3RPcHRpb25zKSA9PiBUeXBlXG5leHBvcnQgdHlwZSBFeHBvcnRUb0ZuID0gKHRoaXM6IFR5cGUsIGRlc3QsIG9wdGlvbnM/OiBJVHlwZU9iamVjdE9wdGlvbnMpID0+IGFueVxuLyoqXG4gKiBUaGUgQWJzdHJhY3QgVHlwZSBpbmZvcm1hdGlvbiBjbGFzc1xuICpcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGUgZXh0ZW5kcyBDdXN0b21GYWN0b3J5IHtcbiAgZGVjbGFyZSBzdGF0aWMgZGVmaW5lUHJvcGVydGllczogRGVmaW5lUHJvcGVydGllc0ZuXG4gIC8qKlxuICAgKiBnZXQgYWxsIHByb3BlcnR5IGRlc2NyaXB0b3JzIGluY2x1ZGUgaW5oZXJpdGVkLlxuICAgKi9cbiAgZGVjbGFyZSBzdGF0aWMgZ2V0UHJvcGVydGllczogKCkgPT4gUHJvcERlc2NyaXB0b3JzXG4gIGRlY2xhcmUgc3RhdGljICRhdHRyaWJ1dGVzOiBQcm9wZXJ0aWVzXG5cbiAgZGVjbGFyZSBzdGF0aWMgdmFsdWU6IGFueVxuICBkZWNsYXJlIHN0YXRpYyByZXF1aXJlZDogYm9vbGVhblxuICBkZWNsYXJlIHN0YXRpYyBjdXN0b21WYWxpZGF0ZTogdW5kZWZpbmVkIHwgVmFsaWRhdGlvbkZuXG5cbiAgZGVjbGFyZSBuYW1lOiBzdHJpbmdcbiAgZGVjbGFyZSB2YWx1ZTogYW55XG4gIGRlY2xhcmUgcmVxdWlyZWQ6IGJvb2xlYW5cbiAgZGVjbGFyZSBjdXN0b21WYWxpZGF0ZTogdW5kZWZpbmVkIHwgVmFsaWRhdGlvbkZuXG5cbiAgZGVjbGFyZSBDbGFzczogdHlwZW9mIFR5cGVcbiAgZGVjbGFyZSAkYXR0cmlidXRlczogUHJvcGVydGllc1xuICBkZWNsYXJlIGdldFByb3BlcnRpZXM6ICgpID0+IFByb3BlcnRpZXNcbiAgZGVjbGFyZSBtZXJnZVRvOiBFeHBvcnRUb0ZuXG4gIGRlY2xhcmUgZXhwb3J0VG86IEV4cG9ydFRvRm5cbiAgZGVjbGFyZSBjbG9uZVRvOiBFeHBvcnRUb0ZuXG4gIGRlY2xhcmUgYXNzaWduVG86IEV4cG9ydFRvRm5cbiAgZGVjbGFyZSBfX2Fzc2lnbjogRnVuY3Rpb25cbiAgZGVjbGFyZSBjbG9uZTogQ2xvbmVGblxuICBkZWNsYXJlIGlzU2FtZTogKHNyYywgb3B0aW9ucz86IElUeXBlT2JqZWN0T3B0aW9ucykgPT4gYm9vbGVhblxuICBkZWNsYXJlIHRvSlNPTjogKCkgPT4gYW55XG5cbiAgZGVjbGFyZSBzdGF0aWMgdG9WYWx1ZTogVG9WYWx1ZUZuXG4gIGRlY2xhcmUgZXJyb3JzOiBudWxsIHwgSUVycm9yTWVzc2FnZVtdXG5cbiAgLyoqXG4gICAqIHRoZSByb290IG5hbWVcbiAgICovXG4gIHN0YXRpYyBST09UX05BTUUgPSAndHlwZSdcblxuICBzdGF0aWMgcmVnaXN0ZXIoYUNsYXNzLCBhT3B0aW9ucz86IHN0cmluZyB8IElUeXBlT3B0aW9ucyk6IGJvb2xlYW5cbiAgc3RhdGljIHJlZ2lzdGVyKFxuICAgIGFDbGFzcyxcbiAgICBhUGFyZW50Q2xhc3M/OiB0eXBlb2YgVHlwZSB8IHN0cmluZyB8IElUeXBlT3B0aW9ucyxcbiAgICBhT3B0aW9ucz86IHN0cmluZyB8IElUeXBlT3B0aW9uc1xuICApOiBib29sZWFuIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0eXBlb2YgYVBhcmVudENsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgYU9wdGlvbnMgPSBhUGFyZW50Q2xhc3NcbiAgICAgIGFQYXJlbnRDbGFzcyA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoaXNQdXJlT2JqZWN0KGFQYXJlbnRDbGFzcykpIHtcbiAgICAgIGFPcHRpb25zID0gYVBhcmVudENsYXNzXG4gICAgICBhUGFyZW50Q2xhc3MgPSBhT3B0aW9ucyEucGFyZW50XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gc3VwZXIucmVnaXN0ZXIoYUNsYXNzLCBhUGFyZW50Q2xhc3MsIGFPcHRpb25zKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgdlByb3RvdHlwZSA9IGFDbGFzcy5wcm90b3R5cGVcbiAgICAgIGNvbnN0ICRhdHRyaWJ1dGVzID0gdlByb3RvdHlwZS4kYXR0cmlidXRlc1xuICAgICAgaWYgKCFhT3B0aW9ucyB8fCBpc1N0cmluZyhhT3B0aW9ucykpIGFPcHRpb25zID0ge31cbiAgICAgICRhdHRyaWJ1dGVzLmluaXRpYWxpemVUbyhhQ2xhc3MsIGFPcHRpb25zLCB7IHNraXBVbmRlZmluZWQ6IHRydWUgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIHRyeSB0byBnZXQgdGhlIHR5cGUgbmFtZSBmcm9tIGEgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgdGhlIHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIHRyeUdldFR5cGVOYW1lKHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdFxuICAgIGlmIChpc1B1cmVPYmplY3QodmFsdWUpKSB2YWx1ZSA9IHZhbHVlLnZhbHVlXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgcmVzdWx0ID0gZ2V0UHJvdG90eXBlT2YodmFsdWUpLm5hbWVcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICByZXN1bHQgPSBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKVxuICAgICAgY29uc3QgaSA9IHJlc3VsdC5sYXN0SW5kZXhPZignICcpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKGkgKyAxLCByZXN1bHQubGVuZ3RoIC0gMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHR5cGVvZiB2YWx1ZVxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnN1YnN0cmluZygxKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBUeXBlIGluZm8gY2xhc3MgZnJvbSB0aGUgdHlwZSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gYVR5cGVOYW1lIHRoZSB0eXBlIG5hbWUgb3IgdmFsdWUgd2l0aCB0eXBlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdD19IGFPcHRpb25zXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgVHlwZXx1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgZ2V0KGFUeXBlTmFtZSwgYU9wdGlvbnM/KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoYVR5cGVOYW1lKSB7XG4gICAgICBpZiAoaXNPYmplY3QoYVR5cGVOYW1lKSB8fCAhaXNTdHJpbmcoYVR5cGVOYW1lKSkge1xuICAgICAgICBhT3B0aW9ucyA9IGFUeXBlTmFtZVxuICAgICAgICBjb25zdCAkYXR0cmlidXRlcyA9IHRoaXMucHJvdG90eXBlLiRhdHRyaWJ1dGVzXG4gICAgICAgIC8vIGdldCB0aGUgdHlwZSBuYW1lIGZvciB0aGUgdmFsdWUgd2l0aCB0eXBlLlxuICAgICAgICBhVHlwZU5hbWUgPSAkYXR0cmlidXRlcy5nZXRWYWx1ZShhT3B0aW9ucywgJ25hbWUnKVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChhVHlwZU5hbWUpIHJldHVybiBzdXBlci5nZXQoYVR5cGVOYW1lKVxuICB9XG5cbiAgc3RhdGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdGhpcy5wcm90b3R5cGUubmFtZSB8fCB0aGlzLm5hbWVcbiAgfVxuXG4gIHN0YXRpYyB0b09iamVjdChhT3B0aW9ucz8sIGFOYW1lUmVxdWlyZWQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgdiA9IG5ldyB0aGlzKHVuZGVmaW5lZCwgYU9wdGlvbnMpXG4gICAgaWYgKCFhT3B0aW9ucykgYU9wdGlvbnMgPSB7fVxuICAgIGFPcHRpb25zLndpdGhUeXBlID0gdHJ1ZVxuICAgIGlmIChhT3B0aW9ucy50eXBlT25seSA9PSBudWxsKSBhT3B0aW9ucy50eXBlT25seSA9IHRydWVcbiAgICAvLyBpZiAoYU9wdGlvbnMuc2tpcERlZmF1bHQgPT0gbnVsbCkgYU9wdGlvbnMuc2tpcERlZmF1bHQgPSBmYWxzZVxuICAgIGNvbnN0IHJlc3VsdCA9IHYudG9PYmplY3QoYU9wdGlvbnMsIGFOYW1lUmVxdWlyZWQpXG4gICAgaWYgKFxuICAgICAgYU9wdGlvbnMgJiZcbiAgICAgIGFPcHRpb25zLnR5cGVPbmx5ID09PSBmYWxzZSAmJlxuICAgICAgYU9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmVzdWx0LnZhbHVlID0gYU9wdGlvbnMudmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgc3RhdGljIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpXG4gIH1cblxuICAvLyBzdGF0aWMgY3JlYXRlVHlwZShhVHlwZT8sIGFPcHRpb25zPyk6IHR5cGVvZiBUeXBlIHtcbiAgLy8gICBpZiAoaXNQdXJlT2JqZWN0KGFUeXBlKSkge1xuICAvLyAgICAgYU9wdGlvbnMgPSBhVHlwZVxuICAvLyAgICAgYVR5cGUgPSBhT3B0aW9ucy5uYW1lXG4gIC8vICAgfVxuICAvLyAgIGlmICh0eXBlb2YgYVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gIC8vICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVDdG9yKGFUeXBlKVxuICAvLyAgICAgaWYgKHRoaXMucmVnaXN0ZXIocmVzdWx0LCBhT3B0aW9ucykpIHtcbiAgLy8gICAgICAgcmV0dXJuIHJlc3VsdFxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdmFsdWUgaW5zdGFuY2Ugb2YgdGhlIHR5cGVcbiAgICogQHBhcmFtIHsqfSBhVmFsdWUgdGhlIHZhbHVlIHRvIGNsb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gYVR5cGUgdGhlIHR5cGUgbmFtZSBvciB0aGUgdHlwZSBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gYU9wdGlvbnMgdGhlIHR5cGUgb3B0aW9ucyBvYmplY3RcbiAgICogQHJldHVybnMge1R5cGV9IHRoZSB2YWx1ZSBvZiB0aGUgdHlwZVxuICAgKi9cbiAgY29uc3RydWN0b3IoYVZhbHVlPywgYU9wdGlvbnM/KVxuICBjb25zdHJ1Y3RvcihhVmFsdWU/LCBhVHlwZT8sIGFPcHRpb25zPykge1xuICAgIC8vIHN1cGVyKCkgLy8gb25seSBmb3IgZ2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZVxuICAgIGlmIChpc1B1cmVPYmplY3QoYVR5cGUpKSB7XG4gICAgICBhT3B0aW9ucyA9IGFUeXBlXG4gICAgICBhVHlwZSA9IGFPcHRpb25zLm5hbWVcbiAgICB9XG5cbiAgICBpZiAobmV3LnRhcmdldCA9PT0gVHlwZSkge1xuICAgICAgaWYgKCFhVHlwZSkge1xuICAgICAgICBhVHlwZSA9IChhT3B0aW9ucyAmJiBhT3B0aW9ucy5uYW1lKSB8fCBUeXBlLnRyeUdldFR5cGVOYW1lKGFWYWx1ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3RyaW5nKGFUeXBlKSkge1xuICAgICAgICBhVHlwZSA9IFR5cGUuZ2V0KGFUeXBlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFUeXBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW4gbm90IGRldGVybWluZSB0aGUgdmFsdWUgdHlwZS4nKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhVHlwZSAhPT0gVHlwZSkgcmV0dXJuIG5ldyBhVHlwZShhVmFsdWUsIGFPcHRpb25zKVxuICAgIH1cbiAgICBzdXBlcihhVmFsdWUsIGFPcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaW5pdGlhbGl6ZShhVmFsdWU/LCBhT3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gYU9wdGlvbnMgPSBhT3B0aW9ucyA9PSBudWxsID8ge30gOiBPYmplY3QuYXNzaWduKHt9LCBhT3B0aW9ucylcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZXJyb3JzJywgbnVsbClcbiAgICBjb25zdCBUaGVUeXBlID0gdGhpcy5DbGFzcyB8fCB0aGlzLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgJGF0dHJpYnV0ZXMgPSB0aGlzLiRhdHRyaWJ1dGVzXG4gICAgLy8gbWVyZ2UgdGhlIG9wdGlvbnMgZnJvbSBUaGVUeXBlXG4gICAgJGF0dHJpYnV0ZXMuaW5pdGlhbGl6ZVRvKGFPcHRpb25zLCBUaGVUeXBlLCB7IHNraXBVbmRlZmluZWQ6IHRydWUgfSlcbiAgICAkYXR0cmlidXRlcy5pbml0aWFsaXplVG8odGhpcywgYU9wdGlvbnMpXG4gICAgdGhpcy5faW5pdGlhbGl6ZShhVmFsdWUsIGFPcHRpb25zKVxuICAgIHRoaXMuYXNzaWduKGFWYWx1ZSwgYU9wdGlvbnMpXG4gICAgcmV0dXJuICdvaydcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZpbmFsaXplKGFPcHRpb25zPykge1xuICAgIGlmICh0aGlzLmVycm9ycykgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgaWYgKHRoaXMudmFsdWUpIHRoaXMudmFsdWUgPSBudWxsXG4gICAgdGhpcy5fZmluYWxpemUoYU9wdGlvbnMpXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9maW5hbGl6ZShhT3B0aW9ucz8pIHt9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2luaXRpYWxpemUoYVZhbHVlPywgYU9wdGlvbnM/KSB7fVxuXG4gIGFzc2lnbihhVmFsdWUsIGFPcHRpb25zPywgYUV4Y2x1ZGU/KSB7XG4gICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgIGlmICghYU9wdGlvbnMpIGFPcHRpb25zID0ge31cbiAgICBjb25zdCBjaGVja1ZhbGlkaXR5ID0gYU9wdGlvbnMuY2hlY2tWYWxpZGl0eVxuICAgIGNvbnN0IFRoZVR5cGUgPSB0aGlzLkNsYXNzIHx8IHRoaXMuY29uc3RydWN0b3JcblxuICAgIGlmIChhVmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICBhVmFsdWUgPSBhVmFsdWUudG9PYmplY3QoeyB3aXRoVHlwZTogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAoIWlzUHVyZU9iamVjdChhVmFsdWUpKSB7XG4gICAgICBhVmFsdWUgPSB7IHZhbHVlOiBhVmFsdWUgfVxuICAgIH1cblxuICAgIGNvbnN0ICRhdHRyaWJ1dGVzID0gdGhpcy4kYXR0cmlidXRlc1xuICAgICRhdHRyaWJ1dGVzLmluaXRpYWxpemVUbyhhVmFsdWUsIGFPcHRpb25zLCB7XG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgIH0pXG5cbiAgICBsZXQgdmFsdWUgPSBhVmFsdWUudmFsdWVcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzRnVuY3Rpb24oVGhlVHlwZS50b1ZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IFRoZVR5cGUudG9WYWx1ZSh2YWx1ZSwgYVZhbHVlKSA/PyB2YWx1ZVxuICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlLnZhbHVlT2YpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVPZigpXG4gICAgICB9XG4gICAgICBhVmFsdWUudmFsdWUgPSB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChjaGVja1ZhbGlkaXR5ICE9PSBmYWxzZSkgdGhpcy52YWxpZGF0ZShhVmFsdWUsIGNoZWNrVmFsaWRpdHkpXG4gICAgaWYgKGFFeGNsdWRlKSB7XG4gICAgICBhT3B0aW9ucy5leGNsdWRlID0gYUV4Y2x1ZGVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX19hc3NpZ24oYVZhbHVlLCBhT3B0aW9ucylcbiAgfVxuXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpICsgJydcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX3RvT2JqZWN0KGFPcHRpb25zPykge1xuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKVxuICB9XG5cbiAgdG9UeXBlT2JqZWN0KHRoaXM6IGFueSwgYU9wdGlvbnM/OiBJVHlwZU9iamVjdE9wdGlvbnMsIGFOYW1lUmVxdWlyZWQgPSB0cnVlKSB7XG4gICAgY29uc3QgZXhjbHVkZSA9IGFOYW1lUmVxdWlyZWQgPyBbJ3ZhbHVlJ10gOiBbJ25hbWUnLCAndmFsdWUnXVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFhT3B0aW9ucykgYU9wdGlvbnMgPSB7fVxuICAgIGFPcHRpb25zLmV4Y2x1ZGUgPSBhZGRJdGVtVG9BcnJheShleGNsdWRlLCBhT3B0aW9ucy5leGNsdWRlKVxuICAgIHJldHVybiB0aGlzLmV4cG9ydFRvKHt9LCBhT3B0aW9ucylcbiAgfVxuXG4gIHRvT2JqZWN0KHRoaXM6IGFueSwgYU9wdGlvbnM/LCBhTmFtZVJlcXVpcmVkPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHR5cGVPbmx5ID0gYU9wdGlvbnMgJiYgYU9wdGlvbnMudHlwZU9ubHlcbiAgICBjb25zdCB3aXRoVHlwZSA9IHR5cGVPbmx5IHx8IChhT3B0aW9ucyAmJiBhT3B0aW9ucy53aXRoVHlwZSlcblxuICAgIGxldCByZXN1bHRcbiAgICBpZiAodHlwZU9ubHkgfHwgd2l0aFR5cGUpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMudG9UeXBlT2JqZWN0KGFPcHRpb25zLCBhTmFtZVJlcXVpcmVkKVxuICAgICAgaWYgKCF0eXBlT25seSkge1xuICAgICAgICByZXN1bHQudmFsdWUgPSB0aGlzLl90b09iamVjdChhT3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fdG9PYmplY3QoYU9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZhbHVlIGNhbiBwYXNzIHRoZSBgcmVxdWlyZWRgIHJ1bGUgY2hlY2tcbiAgICogQHBhcmFtIGFPcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBpc1JlcXVpcmVkKGFPcHRpb25zPykge1xuICAgIGlmICghaXNPYmplY3QoYU9wdGlvbnMpKSB7XG4gICAgICBhT3B0aW9ucyA9IHRoaXNcbiAgICB9IGVsc2Uge1xuICAgICAgYU9wdGlvbnMgPSB0aGlzLm1lcmdlVG8oYU9wdGlvbnMsIHtcbiAgICAgICAgc2tpcE51bGw6IHRydWUsXG4gICAgICAgIHNraXBVbmRlZmluZWQ6IHRydWUsXG4gICAgICAgIGV4Y2x1ZGU6ICduYW1lJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pc1JlcXVpcmVkKGFPcHRpb25zLnZhbHVlLCBhT3B0aW9ucylcbiAgfVxuXG4gIF9pc1JlcXVpcmVkKGFWYWx1ZSwgYU9wdGlvbnMpIHtcbiAgICBjb25zdCB2UmVxdWlyZWQgPSB0aGlzLiRhdHRyaWJ1dGVzLmdldFZhbHVlKGFPcHRpb25zLCAncmVxdWlyZWQnKVxuICAgIGNvbnN0IHJlc3VsdCA9ICF2UmVxdWlyZWQgfHwgKHZSZXF1aXJlZCA9PT0gdHJ1ZSAmJiBhVmFsdWUgIT0gbnVsbClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF92YWxpZGF0ZShhVmFsdWUsIGFPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGVycm9yKHRoaXM6IGFueSwgYU1lc3NhZ2UsIGFPcHRpb25zPykge1xuICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9XG4gICAgICAoYU9wdGlvbnMgJiYgdGhpcy4kYXR0cmlidXRlcy5nZXRWYWx1ZShhT3B0aW9ucywgJ25hbWUnKSkgfHwgdGhpcy5uYW1lXG4gICAgdGhpcy5lcnJvcnM/LnB1c2goeyBuYW1lLCBtZXNzYWdlOiBhTWVzc2FnZSB9KVxuICB9XG5cbiAgdmFsaWRhdGVSZXF1aXJlZChhT3B0aW9ucz8pIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmlzUmVxdWlyZWQoYU9wdGlvbnMpXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIGlmIChhT3B0aW9ucz8ucmFpc2VFcnJvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCInICsgdGhpcy5uYW1lICsgJ1wiIGlzIHJlcXVpcmVkJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXJyb3IoJ2lzIHJlcXVpcmVkJywgYU9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIF92YWxpZGF0ZVJlcXVpcmVkKGFWYWx1ZSwgYU9wdGlvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pc1JlcXVpcmVkKGFWYWx1ZSwgYU9wdGlvbnMpXG4gICAgaWYgKCFyZXN1bHQpIHRoaXMuZXJyb3IoJ2lzIHJlcXVpcmVkJywgYU9wdGlvbnMpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gdmFsaWRhdGUoYVZhbHVlLCBhT3B0aW9uc3xyYWlzZUVycm9yPylcbiAgdmFsaWRhdGUodGhpczogYW55LCBhT3B0aW9ucz8sIHJhaXNlRXJyb3I/KSB7XG4gICAgbGV0IGN1c3RvbVZhbGlkYXRlITogRnVuY3Rpb25cbiAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgaWYgKGFPcHRpb25zICE9IG51bGwpIHtcbiAgICAgIGlmICghKGFPcHRpb25zIGluc3RhbmNlb2YgVHlwZSkgJiYgIWlzUHVyZU9iamVjdChhT3B0aW9ucykpIHtcbiAgICAgICAgYU9wdGlvbnMgPSB7IHZhbHVlOiBhT3B0aW9ucyB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFPcHRpb25zID0ge31cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QocmFpc2VFcnJvcikpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYU9wdGlvbnMsIHJhaXNlRXJyb3IpXG4gICAgICByYWlzZUVycm9yID0gYU9wdGlvbnMucmFpc2VFcnJvclxuICAgIH1cbiAgICBpZiAocmFpc2VFcnJvciA9PT0gdW5kZWZpbmVkKSByYWlzZUVycm9yID0gYU9wdGlvbnMucmFpc2VFcnJvclxuXG4gICAgY29uc3QgJGF0dHJpYnV0ZXMgPSB0aGlzLiRhdHRyaWJ1dGVzXG4gICAgLy8gYWxsb3cgdXNlIHRoZSBwcm9wZXJ0eSBhbGlhcyBvZiBjdXN0b21WYWxpZGF0ZVxuICAgIGN1c3RvbVZhbGlkYXRlID0gJGF0dHJpYnV0ZXMuZ2V0VmFsdWUoYU9wdGlvbnMsICdjdXN0b21WYWxpZGF0ZScpXG5cbiAgICBhT3B0aW9ucyA9IHRoaXMubWVyZ2VUbyhhT3B0aW9ucywge1xuICAgICAgc2tpcE51bGw6IHRydWUsXG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgICAgZXhjbHVkZTogJ25hbWUnLFxuICAgIH0pXG4gICAgaWYgKCFjdXN0b21WYWxpZGF0ZSkgY3VzdG9tVmFsaWRhdGUgPSBhT3B0aW9ucy5jdXN0b21WYWxpZGF0ZVxuICAgIC8vIGlmIChyYWlzZUVycm9yICE9PSBmYWxzZSkgYU9wdGlvbnMucmFpc2VFcnJvciA9IHRydWVcblxuICAgIGxldCByZXN1bHQgPSB0aGlzLl92YWxpZGF0ZVJlcXVpcmVkKGFPcHRpb25zLnZhbHVlLCBhT3B0aW9ucylcbiAgICBpZiAocmVzdWx0ICYmIGlzRnVuY3Rpb24oY3VzdG9tVmFsaWRhdGUpKSB7XG4gICAgICByZXN1bHQgPSBjdXN0b21WYWxpZGF0ZS5jYWxsKHRoaXMsIGFPcHRpb25zLnZhbHVlLCBhT3B0aW9ucylcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAmJiBhT3B0aW9ucy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLl92YWxpZGF0ZShhT3B0aW9ucy52YWx1ZSwgYU9wdGlvbnMpXG4gICAgfVxuICAgIGlmIChyYWlzZUVycm9yICE9PSBmYWxzZSAmJiAhcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcIicgKyBhT3B0aW9ucy52YWx1ZSArICdcIiBpcyBhbiBpbnZhbGlkICcgKyB0aGlzLm5hbWUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGlzVmFsaWQoYU9wdGlvbnM/KSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoYU9wdGlvbnMsIGZhbHNlKVxuICB9XG59XG5wcm9wZXJ0aWVzKFR5cGUsIHsgbmFtZTogJ2FkdmFuY2UnLCBleGNsdWRlOiAndG9PYmplY3QnIH0pXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IFR5cGUucmVnaXN0ZXIuYmluZChUeXBlKVxuZXhwb3J0IGNvbnN0IHVucmVnaXN0ZXIgPSBUeXBlLnVucmVnaXN0ZXIuYmluZChUeXBlKVxuZXhwb3J0IGNvbnN0IGFsaWFzID0gVHlwZS5zZXRBbGlhc2VzLmJpbmQoVHlwZSlcbmV4cG9ydCBjb25zdCBkZWZpbmVQcm9wZXJ0aWVzID0gVHlwZS5kZWZpbmVQcm9wZXJ0aWVzXG5cbmRlZmluZVByb3BlcnRpZXMoVHlwZSwge1xuICBuYW1lOiB7XG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZXhwb3J0ZWQ6IHRydWUsXG4gICAgYXNzaWduZWQ6IHRydWUsXG4gICAgdHlwZTogJ1N0cmluZycsXG4gIH0sXG4gIHJlcXVpcmVkOiB7XG4gICAgdHlwZTogJ0Jvb2xlYW4nLFxuICB9LFxuICBjdXN0b21WYWxpZGF0ZToge1xuICAgIGFsaWFzOiBbJ2N1c3RvbS12YWxpZGF0ZScsICd2YWxpZGF0ZSddLFxuICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gIH0sXG4gIHZhbHVlOiB7XG4gICAgdHlwZTogJ2FueScsXG4gIH0sXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkSXRlbVRvQXJyYXkoXG4gIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgaXRlbXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKHR5cGVvZiBpdGVtcyA9PT0gJ3N0cmluZycpIHtcbiAgICBpdGVtcyA9IFtpdGVtc11cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBbdmFsdWVdXG4gIH1cblxuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gaXRlbXMgPz8gdmFsdWUgPz8gW11cblxuICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICBpZiAodmFsdWUpXG4gICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiJdfQ==
{
"name": "abstract-type",
"description": "The abstract-type library includes the abstract `Type` class for streamable type info and validating value.",
"version": "2.0.0-alpha.5",
"version": "2.0.0-alpha.6",
"homepage": "https://github.com/snowyu/abstract-type.js",

@@ -6,0 +6,0 @@ "repository": {

@@ -50,4 +50,16 @@ import 'jest-extended'

defineProperties(NumberType, {
min: { type: 'number' },
max: { type: 'number' },
min: {
type: 'Number',
assigned: '_min',
assign(value) {
return value
},
},
max: {
type: 'Number',
assigned: '_max',
assign(value) {
return value
},
},
})

@@ -109,2 +121,7 @@

})
it('should create number value with range options', () => {
const result = new NumberType({ min: 2, max: 10 })
expect(result).toHaveProperty('_min', 2)
expect(result).toHaveProperty('_max', 10)
})
})

@@ -111,0 +128,0 @@

@@ -237,3 +237,5 @@ /* eslint-disable no-unused-vars */

const $attributes = this.$attributes
// merge the options from TheType
$attributes.initializeTo(aOptions, TheType, { skipUndefined: true })
$attributes.initializeTo(this, aOptions)
this._initialize(aValue, aOptions)

@@ -240,0 +242,0 @@ this.assign(aValue, aOptions)