@ditojs/server 0.273.0 → 0.274.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app/Application.js +10 -4
- package/lib/cli/console.js +4 -4
- package/lib/cli/db/createMigration.js +4 -4
- package/lib/cli/db/migrate.js +3 -3
- package/lib/cli/db/reset.js +3 -3
- package/lib/cli/db/rollback.js +3 -3
- package/lib/cli/db/seed.js +5 -5
- package/lib/cli/db/unlock.js +3 -3
- package/lib/cli/index.js +4 -4
- package/lib/controllers/Controller.js +4 -4
- package/lib/controllers/RelationController.js +3 -3
- package/lib/middleware/logRequests.js +4 -4
- package/package.json +9 -9
- package/src/app/Application.js +12 -6
- package/src/cli/console.js +3 -3
- package/src/cli/db/createMigration.js +3 -3
- package/src/cli/db/migrate.js +4 -4
- package/src/cli/db/reset.js +4 -4
- package/src/cli/db/rollback.js +4 -4
- package/src/cli/db/seed.js +6 -6
- package/src/cli/db/unlock.js +2 -2
- package/src/cli/index.js +3 -3
- package/src/controllers/Controller.js +8 -8
- package/src/controllers/RelationController.js +2 -2
- package/src/middleware/logRequests.js +9 -9
package/lib/app/Application.js
CHANGED
|
@@ -31,7 +31,7 @@ var _util = _interopRequireDefault(require("util"));
|
|
|
31
31
|
|
|
32
32
|
var _axios = _interopRequireDefault(require("axios"));
|
|
33
33
|
|
|
34
|
-
var
|
|
34
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
35
35
|
|
|
36
36
|
var _zlib = _interopRequireDefault(require("zlib"));
|
|
37
37
|
|
|
@@ -201,7 +201,7 @@ class Application extends _koa.default {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
if (Object.keys(data).length > 0) {
|
|
204
|
-
console.info(
|
|
204
|
+
console.info(_picocolors.default.yellow.bold(`\n${modelClass.name}:\n`), _util.default.inspect(data, {
|
|
205
205
|
colors: true,
|
|
206
206
|
depth: null,
|
|
207
207
|
maxArrayLength: null
|
|
@@ -659,6 +659,12 @@ class Application extends _koa.default {
|
|
|
659
659
|
|
|
660
660
|
this.knex = (0, _knex2.default)(knex);
|
|
661
661
|
|
|
662
|
+
if (knex.client === 'postgresql' && knex.typeParsers) {
|
|
663
|
+
for (const [type, parser] of Object.entries(knex.typeParsers)) {
|
|
664
|
+
this.knex.client.driver.types.setTypeParser(type, parser);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
|
|
662
668
|
if (log.sql) {
|
|
663
669
|
this.setupKnexLogging();
|
|
664
670
|
}
|
|
@@ -867,7 +873,7 @@ class Application extends _koa.default {
|
|
|
867
873
|
} = file;
|
|
868
874
|
|
|
869
875
|
if (!data) {
|
|
870
|
-
console.info(`${
|
|
876
|
+
console.info(`${_picocolors.default.red('INFO:')} Asset ${_picocolors.default.green(`'${file.name}'`)} is from a foreign source, fetching from ${_picocolors.default.green(`'${file.url}'`)} and adding to storage ${_picocolors.default.green(`'${storage.name}'`)}...`);
|
|
871
877
|
const response = await _axios.default.request({
|
|
872
878
|
method: 'get',
|
|
873
879
|
url: file.url,
|
|
@@ -952,4 +958,4 @@ _lib.EventEmitter.mixin(Application.prototype);
|
|
|
952
958
|
function getOptions(options) {
|
|
953
959
|
return (0, _utils2.isObject)(options) ? options : {};
|
|
954
960
|
}
|
|
955
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvQXBwbGljYXRpb24uanMiXSwibmFtZXMiOlsiQXBwbGljYXRpb24iLCJLb2EiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInZhbGlkYXRvciIsInJvdXRlciIsImV2ZW50cyIsIm1pZGRsZXdhcmUiLCJtb2RlbHMiLCJzZXJ2aWNlcyIsImNvbnRyb2xsZXJzIiwiX3NldHVwRW1pdHRlciIsImFwcCIsImtleXMiLCJsb2ciLCJyZXN0Iiwic2lsZW50IiwicHJvY2VzcyIsImVudiIsIkRJVE9fU0lMRU5UIiwicHJveHkiLCJWYWxpZGF0b3IiLCJSb3V0ZXIiLCJzdG9yYWdlcyIsIk9iamVjdCIsImNyZWF0ZSIsImhhc0NvbnRyb2xsZXJNaWRkbGV3YXJlIiwic2V0dXBMb2dnZXIiLCJzZXR1cEtuZXgiLCJzZXR1cEdsb2JhbE1pZGRsZXdhcmUiLCJ1c2UiLCJhZGRTdG9yYWdlcyIsImFkZE1vZGVscyIsImFkZFNlcnZpY2VzIiwiYWRkQ29udHJvbGxlcnMiLCJhZGRSb3V0ZSIsInZlcmIiLCJwYXRoIiwidHJhbnNhY3RlZCIsImhhbmRsZXJzIiwiY29udHJvbGxlciIsImFjdGlvbiIsImhhbmRsZXIiLCJsZW5ndGgiLCJyb3V0ZSIsIm1vZGVsQ2xhc3MiLCJ2YWx1ZXMiLCJhZGRNb2RlbCIsInNvcnRNb2RlbHMiLCJzb3J0ZWRNb2RlbHMiLCJmaWx0ZXIiLCJuYW1lIiwic2V0dXAiLCJrbmV4IiwiaW5pdGlhbGl6ZSIsImFkZFNjaGVtYSIsImdldEpzb25TY2hlbWEiLCJzY2hlbWEiLCJyZWxhdGlvbnMiLCJzaG91bGRMb2ciLCJvcHRpb24iLCJpbmNsdWRlcyIsImRhdGEiLCJyZWxhdGlvbk1hcHBpbmdzIiwidmFsdWUiLCJNb2RlbCIsImlzUHJvdG90eXBlT2YiLCJjb25zb2xlIiwiaW5mbyIsImNoYWxrIiwieWVsbG93IiwiYm9sZCIsInV0aWwiLCJpbnNwZWN0IiwiY29sb3JzIiwiZGVwdGgiLCJtYXhBcnJheUxlbmd0aCIsIkVycm9yIiwic29ydEJ5UmVsYXRpb25zIiwibGlzdCIsImNvbGxlY3RlZCIsImV4Y2x1ZGVkIiwicmVsYXRpb24iLCJnZXRSZWxhdGlvbnMiLCJCZWxvbmdzVG9PbmVSZWxhdGlvbiIsInJlbGF0ZWRNb2RlbENsYXNzIiwiam9pblRhYmxlTW9kZWxDbGFzcyIsInJlbGF0ZWQiLCJyZXZlcnNlIiwicmVkdWNlIiwiZ2V0TW9kZWwiLCJlbmRzV2l0aCIsImZpbmRNb2RlbCIsImNhbGxiYWNrIiwiZmluZCIsInNlcnZpY2UiLCJlbnRyaWVzIiwiYWRkU2VydmljZSIsIlNlcnZpY2UiLCJ1bmRlZmluZWQiLCJnZXRTZXJ2aWNlIiwiZmluZFNlcnZpY2UiLCJmb3JFYWNoU2VydmljZSIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJuYW1lc3BhY2UiLCJrZXkiLCJhZGRDb250cm9sbGVyIiwic2V0dXBDb250cm9sbGVyTWlkZGxld2FyZSIsIkNvbnRyb2xsZXIiLCJ1cmwiLCJjb21wb3NlIiwiZ2V0Q29udHJvbGxlciIsImZpbmRDb250cm9sbGVyIiwiZ2V0QWRtaW5Db250cm9sbGVyIiwiQWRtaW5Db250cm9sbGVyIiwiZ2V0QWRtaW5WdWVDb25maWciLCJnZXRWdWVDb25maWciLCJnZXRBc3NldENvbmZpZyIsIm5vcm1hbGl6ZURiTmFtZXMiLCJhc3NldENvbmZpZyIsIm1vZGVsTmFtZSIsImFzc2V0cyIsImRlZmluaXRpb24iLCJub3JtYWxpemVkTW9kZWxOYW1lIiwibm9ybWFsaXplSWRlbnRpZmllciIsImNvbnZlcnRlZEFzc2V0cyIsImFzc2V0RGF0YVBhdGgiLCJwcm9wZXJ0eSIsIm5lc3RlZERhdGFQYXRoIiwiaW5kZXgiLCJnZXRQcm9wZXJ0eU9yUmVsYXRpb25BdERhdGFQYXRoIiwibm9ybWFsaXplZE5hbWUiLCJkYXRhUGF0aCIsImFzc2V0Q29uZmlncyIsImFkZFN0b3JhZ2UiLCJzdG9yYWdlIiwic3RvcmFnZUNsYXNzIiwiU3RvcmFnZSIsImdldCIsInR5cGUiLCJnZXRTdG9yYWdlIiwiY29tcGlsZVZhbGlkYXRvciIsImpzb25TY2hlbWEiLCJvcHRpb25zIiwiY29tcGlsZSIsImNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yIiwicGFyYW1ldGVycyIsImRhdGFOYW1lIiwicHJvcGVydGllcyIsImFkZFBhcmFtZXRlciIsInB1c2giLCJtZW1iZXIiLCJhc09iamVjdCIsInZhbGlkYXRlIiwiY29lcmNlVHlwZXMiLCJjdHgiLCJjYWxsIiwiY3JlYXRlVmFsaWRhdGlvbkVycm9yIiwibWVzc2FnZSIsImVycm9ycyIsImpzb24iLCJWYWxpZGF0aW9uRXJyb3IiLCJwYXJzZUVycm9ycyIsImNyZWF0ZURhdGFiYXNlRXJyb3IiLCJlcnJvciIsInNxbCIsIm1hdGNoIiwiRGF0YWJhc2VFcnJvciIsImxvZ2dlciIsInJlc3BvbnNlVGltZSIsImdldE9wdGlvbnMiLCJyZXF1ZXN0cyIsImhlbG1ldCIsImNvcnMiLCJjb21wcmVzcyIsImJyIiwicGFyYW1zIiwiemxpYiIsImNvbnN0YW50cyIsIkJST1RMSV9QQVJBTV9RVUFMSVRZIiwiZXRhZyIsImJvZHlQYXJzZXIiLCJzZXNzaW9uIiwiQ29udGV4dFN0b3JlIiwicGFzc3BvcnQiLCJlcnIiLCJyZXEiLCJyZXMiLCJwaW5vIiwic3RkU2VyaWFsaXplcnMiLCJ1c2VyIiwiaWQiLCJzZXJpYWxpemVycyIsImxldmVsIiwicHJldHR5UHJpbnQiLCJpZ25vcmUiLCJ0cmFuc2xhdGVUaW1lIiwicmVkYWN0IiwiYmFzZSIsImNoaWxkIiwiY2xpZW50Iiwic25ha2VDYXNlT3B0aW9ucyIsInNldHVwS25leExvZ2dpbmciLCJzdGFydFRpbWVzIiwiZW5kIiwicXVlcnkiLCJyZXNwb25zZSIsIl9fa25leFF1ZXJ5VWlkIiwiZGlmZiIsImhydGltZSIsImR1cmF0aW9uIiwiYmluZGluZ3MiLCJmcm9tRW50cmllcyIsInN0YXJ0c1dpdGgiLCJvbiIsImlkZW50aWZpZXIiLCJ3cmFwSWRlbnRpZmllciIsInJlcGxhY2UiLCJkZW5vcm1hbGl6ZUlkZW50aWZpZXIiLCJvYmoiLCJwb3N0UHJvY2Vzc1Jlc3BvbnNlIiwibm9ybWFsaXplUGF0aCIsIm5vcm1hbGl6ZVBhdGhzIiwiZm9ybWF0RXJyb3IiLCJ0b0pTT04iLCJzdHIiLCJzdGFjayIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwib3MiLCJFT0wiLCJsb2dFcnJvciIsImV4cG9zZSIsInRleHQiLCJSZXNwb25zZUVycm9yIiwic3RhdHVzIiwiZSIsInN0YXJ0IiwiZW1pdCIsInNlcnZlciIsImhvc3QiLCJwb3J0IiwicmVzb2x2ZSIsInJlamVjdCIsImxpc3RlbiIsImFkZHJlc3MiLCJzdG9wIiwiY2xvc2UiLCJzZXRJbW1lZGlhdGUiLCJvZmYiLCJzdGFydE9yRXhpdCIsImV4aXQiLCJjcmVhdGVBc3NldHMiLCJmaWxlcyIsImNvdW50IiwidHJ4IiwiQXNzZXRNb2RlbCIsImZpbGUiLCJpbnNlcnQiLCJoYW5kbGVBZGRkZWRBbmRSZW1vdmVkQXNzZXRzIiwiYWRkZWRGaWxlcyIsInJlbW92ZWRGaWxlcyIsImNsZWFudXBUaW1lVGhyZXNob2xkIiwidGltZVRocmVzaG9sZCIsImltcG9ydGVkRmlsZXMiLCJhZGRGb3JlaWduQXNzZXRzIiwiY2hhbmdlQ291bnQiLCJpbmNyZW1lbnQiLCJ3aGVyZUluIiwic2V0VGltZW91dCIsInJlbGVhc2VVbnVzZWRBc3NldHMiLCJhc3NldCIsImZpbmRPbmUiLCJyZWQiLCJncmVlbiIsImF4aW9zIiwicmVxdWVzdCIsIm1ldGhvZCIsInJlc3BvbnNlVHlwZSIsImltcG9ydGVkRmlsZSIsImFkZEZpbGUiLCJhc3NpZ24iLCJBc3NldEVycm9yIiwiaGFuZGxlTW9kaWZpZWRBc3NldHMiLCJtb2RpZmllZEZpbGVzIiwiY2hhbmdlZEZpbGUiLCJ0cmFuc2FjdGlvbiIsImRhdGUiLCJEYXRlIiwic2V0TWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwib3JwaGFuZWRBc3NldHMiLCJ3aGVyZSIsImFuZFdoZXJlIiwib3JwaGFuZWRLZXlzIiwicmVtb3ZlRmlsZSIsImRlbGV0ZSIsIkV2ZW50RW1pdHRlciIsIm1peGluIiwicHJvdG90eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBU0E7O0FBSUE7Ozs7QUFPTyxNQUFNQSxXQUFOLFNBQTBCQyxZQUExQixDQUE4QjtBQUNuQ0MsRUFBQUEsV0FBVyxDQUFDO0FBQ1ZDLElBQUFBLE1BQU0sR0FBRyxFQURDO0FBRVZDLElBQUFBLFNBRlU7QUFHVkMsSUFBQUEsTUFIVTtBQUlWQyxJQUFBQSxNQUpVO0FBS1ZDLElBQUFBLFVBTFU7QUFNVkMsSUFBQUEsTUFOVTtBQU9WQyxJQUFBQSxRQVBVO0FBUVZDLElBQUFBO0FBUlUsTUFTUixFQVRPLEVBU0g7QUFDTjs7QUFDQSxTQUFLQyxhQUFMLENBQW1CTCxNQUFuQjs7QUFDQSxVQUFNO0FBRUpNLE1BQUFBLEdBQUcsRUFBRTtBQUFFQyxRQUFBQSxJQUFGO0FBQVEsV0FBR0Q7QUFBWCxVQUFtQixFQUZwQjtBQUdKRSxNQUFBQSxHQUFHLEdBQUcsRUFIRjtBQUlKLFNBQUdDO0FBSkMsUUFLRlosTUFMSjtBQU1BLFNBQUtBLE1BQUwsR0FBYztBQUNaUyxNQUFBQSxHQURZO0FBRVpFLE1BQUFBLEdBQUcsRUFBRUEsR0FBRyxDQUFDRSxNQUFKLElBQWNDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxXQUExQixHQUF3QyxFQUF4QyxHQUE2Q0wsR0FGdEM7QUFHWixTQUFHQztBQUhTLEtBQWQ7QUFLQSxTQUFLRixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLTyxLQUFMLEdBQWEsQ0FBQyxDQUFDUixHQUFHLENBQUNRLEtBQW5CO0FBQ0EsU0FBS2hCLFNBQUwsR0FBaUJBLFNBQVMsSUFBSSxJQUFJaUIsb0JBQUosRUFBOUI7QUFDQSxTQUFLaEIsTUFBTCxHQUFjQSxNQUFNLElBQUksSUFBSWlCLGVBQUosRUFBeEI7QUFDQSxTQUFLbEIsU0FBTCxDQUFlUSxHQUFmLEdBQXFCLElBQXJCO0FBQ0EsU0FBS1csUUFBTCxHQUFnQkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsSUFBZCxDQUFoQjtBQUNBLFNBQUtqQixNQUFMLEdBQWNnQixNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFkLENBQWQ7QUFDQSxTQUFLaEIsUUFBTCxHQUFnQmUsTUFBTSxDQUFDQyxNQUFQLENBQWMsSUFBZCxDQUFoQjtBQUNBLFNBQUtmLFdBQUwsR0FBbUJjLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLElBQWQsQ0FBbkI7QUFDQSxTQUFLQyx1QkFBTCxHQUErQixLQUEvQjtBQUNBLFNBQUtDLFdBQUw7QUFDQSxTQUFLQyxTQUFMO0FBQ0EsU0FBS0MscUJBQUw7O0FBQ0EsUUFBSXRCLFVBQUosRUFBZ0I7QUFDZCxXQUFLdUIsR0FBTCxDQUFTdkIsVUFBVDtBQUNEOztBQUNELFFBQUlKLE1BQU0sQ0FBQ29CLFFBQVgsRUFBcUI7QUFDbkIsV0FBS1EsV0FBTCxDQUFpQjVCLE1BQU0sQ0FBQ29CLFFBQXhCO0FBQ0Q7O0FBQ0QsUUFBSWYsTUFBSixFQUFZO0FBQ1YsV0FBS3dCLFNBQUwsQ0FBZXhCLE1BQWY7QUFDRDs7QUFDRCxRQUFJQyxRQUFKLEVBQWM7QUFDWixXQUFLd0IsV0FBTCxDQUFpQnhCLFFBQWpCO0FBQ0Q7O0FBQ0QsUUFBSUMsV0FBSixFQUFpQjtBQUNmLFdBQUt3QixjQUFMLENBQW9CeEIsV0FBcEI7QUFDRDtBQUNGOztBQUVEeUIsRUFBQUEsUUFBUSxDQUFDQyxJQUFELEVBQU9DLElBQVAsRUFBYUMsVUFBYixFQUF5QkMsUUFBekIsRUFBbUNDLFVBQVUsR0FBRyxJQUFoRCxFQUFzREMsTUFBTSxHQUFHLElBQS9ELEVBQXFFO0FBQzNFRixJQUFBQSxRQUFRLEdBQUcscUJBQVFBLFFBQVIsQ0FBWDtBQUNBLFVBQU1HLE9BQU8sR0FBR0gsUUFBUSxDQUFDSSxNQUFULEdBQWtCLENBQWxCLEdBQXNCLHlCQUFRSixRQUFSLENBQXRCLEdBQTBDQSxRQUFRLENBQUMsQ0FBRCxDQUFsRTtBQUdBLFVBQU1LLEtBQUssR0FBRztBQUNaUixNQUFBQSxJQURZO0FBRVpDLE1BQUFBLElBRlk7QUFHWkMsTUFBQUEsVUFIWTtBQUlaSSxNQUFBQSxPQUpZO0FBS1pGLE1BQUFBLFVBTFk7QUFNWkMsTUFBQUE7QUFOWSxLQUFkO0FBUUEsU0FBS3BDLE1BQUwsQ0FBWStCLElBQVosRUFBa0JDLElBQWxCLEVBQXdCTyxLQUF4QjtBQUNEOztBQUVEWixFQUFBQSxTQUFTLENBQUN4QixNQUFELEVBQVM7QUFHaEIsU0FBSyxNQUFNcUMsVUFBWCxJQUF5QnJCLE1BQU0sQ0FBQ3NCLE1BQVAsQ0FBY3RDLE1BQWQsQ0FBekIsRUFBZ0Q7QUFDOUMsV0FBS3VDLFFBQUwsQ0FBY0YsVUFBZDtBQUNEOztBQUVELFNBQUtyQyxNQUFMLEdBQWMsS0FBS3dDLFVBQUwsQ0FBZ0IsS0FBS3hDLE1BQXJCLENBQWQ7QUFFQSxVQUFNeUMsWUFBWSxHQUFHekIsTUFBTSxDQUFDc0IsTUFBUCxDQUFjLEtBQUt0QyxNQUFuQixFQUEyQjBDLE1BQTNCLENBQ25CTCxVQUFVLElBQUlyQyxNQUFNLENBQUNxQyxVQUFVLENBQUNNLElBQVosQ0FBTixLQUE0Qk4sVUFEdkIsQ0FBckI7O0FBS0EsU0FBSyxNQUFNQSxVQUFYLElBQXlCSSxZQUF6QixFQUF1QztBQUNyQyxVQUFJekMsTUFBTSxDQUFDcUMsVUFBVSxDQUFDTSxJQUFaLENBQU4sS0FBNEJOLFVBQWhDLEVBQTRDO0FBQzFDQSxRQUFBQSxVQUFVLENBQUNPLEtBQVgsQ0FBaUIsS0FBS0MsSUFBdEI7QUFHQVIsUUFBQUEsVUFBVSxDQUFDUyxVQUFYO0FBQ0EsYUFBS2xELFNBQUwsQ0FBZW1ELFNBQWYsQ0FBeUJWLFVBQVUsQ0FBQ1csYUFBWCxFQUF6QjtBQUNEO0FBQ0Y7O0FBQ0QsVUFBTTtBQUFFMUMsTUFBQUE7QUFBRixRQUFVLEtBQUtYLE1BQXJCOztBQUNBLFFBQUlXLEdBQUcsQ0FBQzJDLE1BQUosSUFBYzNDLEdBQUcsQ0FBQzRDLFNBQXRCLEVBQWlDO0FBQy9CLFdBQUssTUFBTWIsVUFBWCxJQUF5QkksWUFBekIsRUFBdUM7QUFDckMsY0FBTVUsU0FBUyxHQUFHQyxNQUFNLElBQ3RCQSxNQUFNLEtBQUssSUFBWCxJQUNBLHFCQUFRQSxNQUFSLEVBQWdCQyxRQUFoQixDQUF5QmhCLFVBQVUsQ0FBQ00sSUFBcEMsQ0FGRjs7QUFJQSxjQUFNVyxJQUFJLEdBQUcsRUFBYjs7QUFDQSxZQUFJSCxTQUFTLENBQUM3QyxHQUFHLENBQUMyQyxNQUFMLENBQWIsRUFBMkI7QUFDekJLLFVBQUFBLElBQUksQ0FBQ0wsTUFBTCxHQUFjWixVQUFVLENBQUNXLGFBQVgsRUFBZDtBQUNEOztBQUNELFlBQUlHLFNBQVMsQ0FBQzdDLEdBQUcsQ0FBQzRDLFNBQUwsQ0FBYixFQUE4QjtBQUM1QkksVUFBQUEsSUFBSSxDQUFDSixTQUFMLEdBQWlCLG1CQUFNYixVQUFVLENBQUNrQixnQkFBakIsRUFBbUNDLEtBQUssSUFDdkRDLGlCQUFNQyxhQUFOLENBQW9CRixLQUFwQixJQUE4QixXQUFVQSxLQUFLLENBQUNiLElBQUssR0FBbkQsR0FBd0RhLEtBRHpDLENBQWpCO0FBR0Q7O0FBQ0QsWUFBSXhDLE1BQU0sQ0FBQ1gsSUFBUCxDQUFZaUQsSUFBWixFQUFrQm5CLE1BQWxCLEdBQTJCLENBQS9CLEVBQWtDO0FBQ2hDd0IsVUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQ0VDLGVBQU1DLE1BQU4sQ0FBYUMsSUFBYixDQUFtQixLQUFJMUIsVUFBVSxDQUFDTSxJQUFLLEtBQXZDLENBREYsRUFFRXFCLGNBQUtDLE9BQUwsQ0FBYVgsSUFBYixFQUFtQjtBQUNqQlksWUFBQUEsTUFBTSxFQUFFLElBRFM7QUFFakJDLFlBQUFBLEtBQUssRUFBRSxJQUZVO0FBR2pCQyxZQUFBQSxjQUFjLEVBQUU7QUFIQyxXQUFuQixDQUZGO0FBUUQ7QUFDRjtBQUNGO0FBQ0Y7O0FBRUQ3QixFQUFBQSxRQUFRLENBQUNGLFVBQUQsRUFBYTtBQUNuQixRQUFJb0IsaUJBQU1DLGFBQU4sQ0FBb0JyQixVQUFwQixDQUFKLEVBQXFDO0FBQ25DQSxNQUFBQSxVQUFVLENBQUNqQyxHQUFYLEdBQWlCLElBQWpCO0FBQ0EsV0FBS0osTUFBTCxDQUFZcUMsVUFBVSxDQUFDTSxJQUF2QixJQUErQk4sVUFBL0I7QUFDRCxLQUhELE1BR087QUFDTCxZQUFNLElBQUlnQyxLQUFKLENBQVcsd0JBQXVCaEMsVUFBVyxFQUE3QyxDQUFOO0FBQ0Q7QUFDRjs7QUFFREcsRUFBQUEsVUFBVSxDQUFDeEMsTUFBRCxFQUFTO0FBQ2pCLFVBQU1zRSxlQUFlLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPQyxTQUFTLEdBQUcsRUFBbkIsRUFBdUJDLFFBQVEsR0FBRyxFQUFsQyxLQUF5QztBQUMvRCxXQUFLLE1BQU1wQyxVQUFYLElBQXlCa0MsSUFBekIsRUFBK0I7QUFDN0IsY0FBTTtBQUFFNUIsVUFBQUE7QUFBRixZQUFXTixVQUFqQjs7QUFDQSxZQUFJLENBQUNtQyxTQUFTLENBQUM3QixJQUFELENBQVYsSUFBb0IsQ0FBQzhCLFFBQVEsQ0FBQzlCLElBQUQsQ0FBakMsRUFBeUM7QUFDdkMsZUFBSyxNQUFNK0IsUUFBWCxJQUF1QjFELE1BQU0sQ0FBQ3NCLE1BQVAsQ0FBY0QsVUFBVSxDQUFDc0MsWUFBWCxFQUFkLENBQXZCLEVBQWlFO0FBQy9ELGdCQUFJLEVBQUVELFFBQVEsWUFBWUUsK0JBQXRCLENBQUosRUFBaUQ7QUFDL0Msb0JBQU07QUFBRUMsZ0JBQUFBLGlCQUFGO0FBQXFCQyxnQkFBQUE7QUFBckIsa0JBQTZDSixRQUFuRDs7QUFDQSxtQkFBSyxNQUFNSyxPQUFYLElBQXNCLENBQUNELG1CQUFELEVBQXNCRCxpQkFBdEIsQ0FBdEIsRUFBZ0U7QUFFOUQsb0JBQUlFLE9BQU8sSUFBSUEsT0FBTyxLQUFLMUMsVUFBdkIsSUFBcUNyQyxNQUFNLENBQUMrRSxPQUFPLENBQUNwQyxJQUFULENBQS9DLEVBQStEO0FBQzdEMkIsa0JBQUFBLGVBQWUsQ0FBQyxDQUFDUyxPQUFELENBQUQsRUFBWVAsU0FBWixFQUF1QjtBQUVwQyxxQkFBQzdCLElBQUQsR0FBUU4sVUFGNEI7QUFHcEMsdUJBQUdvQztBQUhpQyxtQkFBdkIsQ0FBZjtBQUtEO0FBQ0Y7QUFDRjtBQUNGOztBQUNERCxVQUFBQSxTQUFTLENBQUM3QixJQUFELENBQVQsR0FBa0JOLFVBQWxCO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPckIsTUFBTSxDQUFDc0IsTUFBUCxDQUFja0MsU0FBZCxDQUFQO0FBQ0QsS0F2QkQ7O0FBMkJBLFdBQU9GLGVBQWUsQ0FBQ3RELE1BQU0sQ0FBQ3NCLE1BQVAsQ0FBY3RDLE1BQWQsRUFBc0JnRixPQUF0QixFQUFELENBQWYsQ0FBaURBLE9BQWpELEdBQTJEQyxNQUEzRCxDQUNMLENBQUNqRixNQUFELEVBQVNxQyxVQUFULEtBQXdCO0FBQ3RCckMsTUFBQUEsTUFBTSxDQUFDcUMsVUFBVSxDQUFDTSxJQUFaLENBQU4sR0FBMEJOLFVBQTFCO0FBQ0EsYUFBT3JDLE1BQVA7QUFDRCxLQUpJLEVBS0xnQixNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFkLENBTEssQ0FBUDtBQU9EOztBQUVEaUUsRUFBQUEsUUFBUSxDQUFDdkMsSUFBRCxFQUFPO0FBQ2IsV0FDRSxLQUFLM0MsTUFBTCxDQUFZMkMsSUFBWixLQUNBLENBQUNBLElBQUksQ0FBQ3dDLFFBQUwsQ0FBYyxPQUFkLENBQUQsSUFBMkIsS0FBS25GLE1BQUwsQ0FBYSxHQUFFMkMsSUFBSyxPQUFwQixDQUQzQixJQUVBLElBSEY7QUFLRDs7QUFFRHlDLEVBQUFBLFNBQVMsQ0FBQ0MsUUFBRCxFQUFXO0FBQ2xCLFdBQU9yRSxNQUFNLENBQUNzQixNQUFQLENBQWMsS0FBS3RDLE1BQW5CLEVBQTJCc0YsSUFBM0IsQ0FBZ0NELFFBQWhDLENBQVA7QUFDRDs7QUFFRDVELEVBQUFBLFdBQVcsQ0FBQ3hCLFFBQUQsRUFBVztBQUNwQixTQUFLLE1BQU0sQ0FBQzBDLElBQUQsRUFBTzRDLE9BQVAsQ0FBWCxJQUE4QnZFLE1BQU0sQ0FBQ3dFLE9BQVAsQ0FBZXZGLFFBQWYsQ0FBOUIsRUFBd0Q7QUFFdEQsVUFBSTBDLElBQUksS0FBSyxTQUFULElBQXNCLDJCQUFjNEMsT0FBZCxDQUExQixFQUFrRDtBQUNoRCxhQUFLOUQsV0FBTCxDQUFpQjhELE9BQWpCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsYUFBS0UsVUFBTCxDQUFnQkYsT0FBaEIsRUFBeUI1QyxJQUF6QjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDhDLEVBQUFBLFVBQVUsQ0FBQ0YsT0FBRCxFQUFVNUMsSUFBVixFQUFnQjtBQUV4QixRQUFJK0Msa0JBQVFoQyxhQUFSLENBQXNCNkIsT0FBdEIsQ0FBSixFQUFvQztBQUVsQ0EsTUFBQUEsT0FBTyxHQUFHLElBQUlBLE9BQUosQ0FBWSxJQUFaLEVBQWtCNUMsSUFBbEIsQ0FBVjtBQUNEOztBQUNELFFBQUksRUFBRTRDLE9BQU8sWUFBWUcsaUJBQXJCLENBQUosRUFBbUM7QUFDakMsWUFBTSxJQUFJckIsS0FBSixDQUFXLG9CQUFtQmtCLE9BQVEsRUFBdEMsQ0FBTjtBQUNEOztBQUdELEtBQUM7QUFBRTVDLE1BQUFBO0FBQUYsUUFBVzRDLE9BQVo7QUFDQSxVQUFNNUYsTUFBTSxHQUFHLEtBQUtBLE1BQUwsQ0FBWU0sUUFBWixDQUFxQjBDLElBQXJCLENBQWY7O0FBQ0EsUUFBSWhELE1BQU0sS0FBS2dHLFNBQWYsRUFBMEI7QUFDeEIsWUFBTSxJQUFJdEIsS0FBSixDQUFXLHNDQUFxQzFCLElBQUssR0FBckQsQ0FBTjtBQUNEOztBQUdELFFBQUloRCxNQUFNLEtBQUssS0FBZixFQUFzQjtBQUNwQjRGLE1BQUFBLE9BQU8sQ0FBQzNDLEtBQVIsQ0FBY2pELE1BQWQ7QUFDQSxXQUFLTSxRQUFMLENBQWMwQyxJQUFkLElBQXNCNEMsT0FBdEI7QUFHQUEsTUFBQUEsT0FBTyxDQUFDekMsVUFBUjtBQUNEO0FBQ0Y7O0FBRUQ4QyxFQUFBQSxVQUFVLENBQUNqRCxJQUFELEVBQU87QUFDZixXQUFPLEtBQUsxQyxRQUFMLENBQWMwQyxJQUFkLEtBQXVCLElBQTlCO0FBQ0Q7O0FBRURrRCxFQUFBQSxXQUFXLENBQUNSLFFBQUQsRUFBVztBQUNwQixXQUFPckUsTUFBTSxDQUFDc0IsTUFBUCxDQUFjLEtBQUtyQyxRQUFuQixFQUE2QnFGLElBQTdCLENBQWtDRCxRQUFsQyxDQUFQO0FBQ0Q7O0FBRURTLEVBQUFBLGNBQWMsQ0FBQ1QsUUFBRCxFQUFXO0FBQ3ZCLFdBQU9VLE9BQU8sQ0FBQ0MsR0FBUixDQUFZaEYsTUFBTSxDQUFDc0IsTUFBUCxDQUFjLEtBQUtyQyxRQUFuQixFQUE2QmdHLEdBQTdCLENBQWlDWixRQUFqQyxDQUFaLENBQVA7QUFDRDs7QUFFRDNELEVBQUFBLGNBQWMsQ0FBQ3hCLFdBQUQsRUFBY2dHLFNBQWQsRUFBeUI7QUFDckMsU0FBSyxNQUFNLENBQUNDLEdBQUQsRUFBTTNDLEtBQU4sQ0FBWCxJQUEyQnhDLE1BQU0sQ0FBQ3dFLE9BQVAsQ0FBZXRGLFdBQWYsQ0FBM0IsRUFBd0Q7QUFDdEQsVUFBSSwyQkFBY3NELEtBQWQsQ0FBSixFQUEwQjtBQUN4QixhQUFLOUIsY0FBTCxDQUFvQjhCLEtBQXBCLEVBQTJCMEMsU0FBUyxHQUFJLEdBQUVBLFNBQVUsSUFBR0MsR0FBSSxFQUF2QixHQUEyQkEsR0FBL0Q7QUFDRCxPQUZELE1BRU87QUFDTCxhQUFLQyxhQUFMLENBQW1CNUMsS0FBbkIsRUFBMEIwQyxTQUExQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFREUsRUFBQUEsYUFBYSxDQUFDcEUsVUFBRCxFQUFha0UsU0FBYixFQUF3QjtBQUVuQyxTQUFLRyx5QkFBTDs7QUFFQSxRQUFJQyx3QkFBVzVDLGFBQVgsQ0FBeUIxQixVQUF6QixDQUFKLEVBQTBDO0FBRXhDQSxNQUFBQSxVQUFVLEdBQUcsSUFBSUEsVUFBSixDQUFlLElBQWYsRUFBcUJrRSxTQUFyQixDQUFiO0FBQ0Q7O0FBQ0QsUUFBSSxFQUFFbEUsVUFBVSxZQUFZc0UsdUJBQXhCLENBQUosRUFBeUM7QUFDdkMsWUFBTSxJQUFJakMsS0FBSixDQUFXLHVCQUFzQnJDLFVBQVcsRUFBNUMsQ0FBTjtBQUNEOztBQUdEQSxJQUFBQSxVQUFVLENBQUNZLEtBQVg7QUFDQSxTQUFLMUMsV0FBTCxDQUFpQjhCLFVBQVUsQ0FBQ3VFLEdBQTVCLElBQW1DdkUsVUFBbkM7QUFHQUEsSUFBQUEsVUFBVSxDQUFDYyxVQUFYO0FBR0EsVUFBTS9DLFVBQVUsR0FBR2lDLFVBQVUsQ0FBQ3dFLE9BQVgsRUFBbkI7O0FBQ0EsUUFBSXpHLFVBQUosRUFBZ0I7QUFDZCxXQUFLdUIsR0FBTCxDQUFTdkIsVUFBVDtBQUNEO0FBQ0Y7O0FBRUQwRyxFQUFBQSxhQUFhLENBQUNGLEdBQUQsRUFBTTtBQUNqQixXQUFPLEtBQUtyRyxXQUFMLENBQWlCcUcsR0FBakIsS0FBeUIsSUFBaEM7QUFDRDs7QUFFREcsRUFBQUEsY0FBYyxDQUFDckIsUUFBRCxFQUFXO0FBQ3ZCLFdBQU9yRSxNQUFNLENBQUNzQixNQUFQLENBQWMsS0FBS3BDLFdBQW5CLEVBQWdDb0YsSUFBaEMsQ0FBcUNELFFBQXJDLENBQVA7QUFDRDs7QUFFRHNCLEVBQUFBLGtCQUFrQixHQUFHO0FBQ25CLFdBQU8sS0FBS0QsY0FBTCxDQUNMMUUsVUFBVSxJQUFJQSxVQUFVLFlBQVk0RSw0QkFEL0IsQ0FBUDtBQUdEOztBQUVEQyxFQUFBQSxpQkFBaUIsR0FBRztBQUFBOztBQUNsQixXQUFPLCtCQUFLRixrQkFBTCw2Q0FBMkJHLFlBQTNCLE9BQTZDLElBQXBEO0FBQ0Q7O0FBRURDLEVBQUFBLGNBQWMsQ0FBQztBQUNiL0csSUFBQUEsTUFBTSxHQUFHZ0IsTUFBTSxDQUFDWCxJQUFQLENBQVksS0FBS0wsTUFBakIsQ0FESTtBQUViZ0gsSUFBQUEsZ0JBQWdCLEdBQUcsS0FBS3JILE1BQUwsQ0FBWWtELElBQVosQ0FBaUJtRTtBQUZ2QixNQUdYLEVBSFUsRUFHTjtBQUNOLFVBQU1DLFdBQVcsR0FBRyxFQUFwQjs7QUFDQSxTQUFLLE1BQU1DLFNBQVgsSUFBd0JsSCxNQUF4QixFQUFnQztBQUM5QixZQUFNcUMsVUFBVSxHQUFHLEtBQUtyQyxNQUFMLENBQVlrSCxTQUFaLENBQW5CO0FBQ0EsWUFBTTtBQUFFQyxRQUFBQTtBQUFGLFVBQWE5RSxVQUFVLENBQUMrRSxVQUE5Qjs7QUFDQSxVQUFJRCxNQUFKLEVBQVk7QUFDVixjQUFNRSxtQkFBbUIsR0FBR0wsZ0JBQWdCLEdBQ3hDLEtBQUtNLG1CQUFMLENBQXlCSixTQUF6QixDQUR3QyxHQUV4Q0EsU0FGSjtBQUdBLGNBQU1LLGVBQWUsR0FBRyxFQUF4Qjs7QUFDQSxhQUFLLE1BQU0sQ0FBQ0MsYUFBRCxFQUFnQjdILE1BQWhCLENBQVgsSUFBc0NxQixNQUFNLENBQUN3RSxPQUFQLENBQWUyQixNQUFmLENBQXRDLEVBQThEO0FBQzVELGdCQUFNO0FBQ0pNLFlBQUFBLFFBREk7QUFFSkMsWUFBQUEsY0FGSTtBQUdKL0UsWUFBQUEsSUFISTtBQUlKZ0YsWUFBQUE7QUFKSSxjQUtGdEYsVUFBVSxDQUFDdUYsK0JBQVgsQ0FBMkNKLGFBQTNDLENBTEo7O0FBTUEsY0FBSUMsUUFBUSxJQUFJRSxLQUFLLEtBQUssQ0FBMUIsRUFBNkI7QUFDM0Isa0JBQU1FLGNBQWMsR0FBR2IsZ0JBQWdCLEdBQ25DLEtBQUtNLG1CQUFMLENBQXlCM0UsSUFBekIsQ0FEbUMsR0FFbkNBLElBRko7QUFHQSxrQkFBTW1GLFFBQVEsR0FBRywrQkFBa0IsQ0FDakNELGNBRGlDLEVBRWpDLEdBQUcsMkJBQWNILGNBQWQsQ0FGOEIsQ0FBbEIsQ0FBakI7QUFJQSxrQkFBTUssWUFBWSxHQUFHUixlQUFlLENBQUNNLGNBQUQsQ0FBbEIsS0FBR04sZUFBZSxDQUFDTSxjQUFELENBQWxCLEdBQXVDLEVBQXZDLENBQWxCO0FBQ0FFLFlBQUFBLFlBQVksQ0FBQ0QsUUFBRCxDQUFaLEdBQXlCbkksTUFBekI7QUFDRCxXQVZELE1BVU87QUFDTCxrQkFBTSxJQUFJMEUsS0FBSixDQUFVLCtDQUFWLENBQU47QUFDRDtBQUNGOztBQUNENEMsUUFBQUEsV0FBVyxDQUFDSSxtQkFBRCxDQUFYLEdBQW1DRSxlQUFuQztBQUNEO0FBQ0Y7O0FBQ0QsV0FBT04sV0FBUDtBQUNEOztBQUVEMUYsRUFBQUEsV0FBVyxDQUFDUixRQUFELEVBQVc7QUFDcEIsU0FBSyxNQUFNLENBQUM0QixJQUFELEVBQU9oRCxNQUFQLENBQVgsSUFBNkJxQixNQUFNLENBQUN3RSxPQUFQLENBQWV6RSxRQUFmLENBQTdCLEVBQXVEO0FBQ3JELFdBQUtpSCxVQUFMLENBQWdCckksTUFBaEIsRUFBd0JnRCxJQUF4QjtBQUNEO0FBQ0Y7O0FBRURxRixFQUFBQSxVQUFVLENBQUNySSxNQUFELEVBQVNnRCxJQUFULEVBQWU7QUFDdkIsUUFBSXNGLE9BQU8sR0FBRyxJQUFkOztBQUNBLFFBQUksMkJBQWN0SSxNQUFkLENBQUosRUFBMkI7QUFDekIsWUFBTXVJLFlBQVksR0FBR0MsaUJBQVFDLEdBQVIsQ0FBWXpJLE1BQU0sQ0FBQzBJLElBQW5CLENBQXJCOztBQUNBLFVBQUksQ0FBQ0gsWUFBTCxFQUFtQjtBQUNqQixjQUFNLElBQUk3RCxLQUFKLENBQVcsd0JBQXVCMUUsTUFBTyxFQUF6QyxDQUFOO0FBQ0Q7O0FBRURzSSxNQUFBQSxPQUFPLEdBQUcsSUFBSUMsWUFBSixDQUFpQixJQUFqQixFQUF1QnZJLE1BQXZCLENBQVY7QUFDRCxLQVBELE1BT08sSUFBSUEsTUFBTSxZQUFZd0ksZ0JBQXRCLEVBQStCO0FBQ3BDRixNQUFBQSxPQUFPLEdBQUd0SSxNQUFWO0FBQ0Q7O0FBQ0QsUUFBSXNJLE9BQUosRUFBYTtBQUNYLFVBQUl0RixJQUFKLEVBQVU7QUFDUnNGLFFBQUFBLE9BQU8sQ0FBQ3RGLElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUNELFdBQUs1QixRQUFMLENBQWNrSCxPQUFPLENBQUN0RixJQUF0QixJQUE4QnNGLE9BQTlCO0FBQ0Q7O0FBQ0QsV0FBT0EsT0FBUDtBQUNEOztBQUVESyxFQUFBQSxVQUFVLENBQUMzRixJQUFELEVBQU87QUFDZixXQUFPLEtBQUs1QixRQUFMLENBQWM0QixJQUFkLEtBQXVCLElBQTlCO0FBQ0Q7O0FBRUQ0RixFQUFBQSxnQkFBZ0IsQ0FBQ0MsVUFBRCxFQUFhQyxPQUFiLEVBQXNCO0FBQ3BDLFdBQU9ELFVBQVUsR0FDYixLQUFLNUksU0FBTCxDQUFlOEksT0FBZixDQUF1QkYsVUFBdkIsRUFBbUNDLE9BQW5DLENBRGEsR0FFYixJQUZKO0FBR0Q7O0FBRURFLEVBQUFBLDBCQUEwQixDQUFDQyxVQUFELEVBQWFILE9BQU8sR0FBRyxFQUF2QixFQUEyQjtBQUNuRCxVQUFNbEUsSUFBSSxHQUFHLEVBQWI7QUFDQSxVQUFNO0FBQUVzRSxNQUFBQSxRQUFRLEdBQUc7QUFBYixRQUF3QkosT0FBOUI7QUFFQSxRQUFJSyxVQUFVLEdBQUcsSUFBakI7O0FBQ0EsVUFBTUMsWUFBWSxHQUFHLENBQUNwRyxJQUFELEVBQU9NLE1BQVAsS0FBa0I7QUFDckNzQixNQUFBQSxJQUFJLENBQUN5RSxJQUFMLENBQVU7QUFDUnJHLFFBQUFBLElBQUksRUFBRUEsSUFBRixXQUFFQSxJQUFGLEdBQVUsSUFETjtBQUVSLFdBQUdNO0FBRkssT0FBVjs7QUFJQSxVQUFJLENBQUNBLE1BQU0sQ0FBQ2dHLE1BQVosRUFBb0I7QUFDbEJILFFBQUFBLFVBQVUsS0FBVkEsVUFBVSxHQUFLLEVBQUwsQ0FBVjtBQUNBQSxRQUFBQSxVQUFVLENBQUNuRyxJQUFJLElBQUlrRyxRQUFULENBQVYsR0FBK0I1RixNQUEvQjtBQUNEO0FBQ0YsS0FURDs7QUFtQkEsUUFBSWlHLFFBQVEsR0FBRyxLQUFmOztBQUNBLFFBQUkscUJBQVFOLFVBQVIsQ0FBSixFQUF5QjtBQUN2QixXQUFLLE1BQU07QUFBRWpHLFFBQUFBLElBQUY7QUFBUSxXQUFHTTtBQUFYLE9BQVgsSUFBa0MyRixVQUFsQyxFQUE4QztBQUM1Q0csUUFBQUEsWUFBWSxDQUFDcEcsSUFBRCxFQUFPTSxNQUFQLENBQVo7QUFDRDtBQUNGLEtBSkQsTUFJTyxJQUFJLHNCQUFTMkYsVUFBVCxDQUFKLEVBQTBCO0FBQy9CTSxNQUFBQSxRQUFRLEdBQUcsSUFBWDs7QUFDQSxXQUFLLE1BQU0sQ0FBQ3ZHLElBQUQsRUFBT00sTUFBUCxDQUFYLElBQTZCakMsTUFBTSxDQUFDd0UsT0FBUCxDQUFlb0QsVUFBZixDQUE3QixFQUF5RDtBQUN2RCxZQUFJM0YsTUFBSixFQUFZO0FBQ1Y4RixVQUFBQSxZQUFZLENBQUNwRyxJQUFELEVBQU9NLE1BQVAsQ0FBWjtBQUNEO0FBQ0Y7QUFDRixLQVBNLE1BT0EsSUFBSTJGLFVBQUosRUFBZ0I7QUFDckIsWUFBTSxJQUFJdkUsS0FBSixDQUFXLGtDQUFpQ3VFLFVBQVcsRUFBdkQsQ0FBTjtBQUNEOztBQUdELFVBQU0zRixNQUFNLEdBQUcsMkJBQWM2RixVQUFkLEVBQTBCTCxPQUExQixDQUFmO0FBQ0EsVUFBTVUsUUFBUSxHQUFHLEtBQUtaLGdCQUFMLENBQXNCdEYsTUFBdEIsRUFBOEI7QUFFN0NtRyxNQUFBQSxXQUFXLEVBQUUsT0FGZ0M7QUFHN0MsU0FBR1g7QUFIMEMsS0FBOUIsQ0FBakI7QUFLQSxVQUFNWSxHQUFHLEdBQUc7QUFDVmpKLE1BQUFBLEdBQUcsRUFBRSxJQURLO0FBRVZSLE1BQUFBLFNBQVMsRUFBRSxLQUFLQSxTQUZOO0FBR1Y2SSxNQUFBQTtBQUhVLEtBQVo7QUFLQSxXQUFPO0FBQ0xsRSxNQUFBQSxJQURLO0FBRUx0QixNQUFBQSxNQUZLO0FBR0xpRyxNQUFBQSxRQUhLO0FBSUxMLE1BQUFBLFFBSks7QUFLTE0sTUFBQUEsUUFBUSxFQUFFQSxRQUFRLEdBRWQ3RixJQUFJLElBQUk2RixRQUFRLENBQUNHLElBQVQsQ0FBY0QsR0FBZCxFQUFtQi9GLElBQW5CLENBRk0sR0FHZDtBQVJDLEtBQVA7QUFVRDs7QUFFRGlHLEVBQUFBLHFCQUFxQixDQUFDO0FBQUVsQixJQUFBQSxJQUFGO0FBQVFtQixJQUFBQSxPQUFSO0FBQWlCQyxJQUFBQSxNQUFqQjtBQUF5QmhCLElBQUFBLE9BQXpCO0FBQWtDaUIsSUFBQUE7QUFBbEMsR0FBRCxFQUEyQztBQUFBOztBQUM5RCxXQUFPLElBQUlDLHVCQUFKLENBQW9CO0FBQ3pCdEIsTUFBQUEsSUFEeUI7QUFFekJtQixNQUFBQSxPQUZ5QjtBQUd6QkMsTUFBQUEsTUFBTSxFQUFFLEtBQUs3SixTQUFMLENBQWVnSyxXQUFmLENBQTJCSCxNQUEzQixFQUFtQ2hCLE9BQW5DLENBSGlCO0FBS3pCaUIsTUFBQUEsSUFBSSxFQUFFLDhCQUFLL0osTUFBTCxDQUFZVyxHQUFaLENBQWdCbUosTUFBaEIsbUNBQXdCQyxJQUF4QixHQUErQkEsSUFBL0IsR0FBc0MvRDtBQUxuQixLQUFwQixDQUFQO0FBT0Q7O0FBRURrRSxFQUFBQSxtQkFBbUIsQ0FBQ0MsS0FBRCxFQUFRO0FBQUE7O0FBSXpCLFVBQU0sR0FBR0MsR0FBSCxFQUFRUCxPQUFSLElBQW1CTSxLQUFLLENBQUNOLE9BQU4sQ0FBY1EsS0FBZCxDQUFvQiwwQkFBcEIsS0FDdkIsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhRixLQUFLLENBQUNOLE9BQW5CLENBREY7QUFFQSxXQUFPLElBQUlTLHFCQUFKLENBQWtCSCxLQUFsQixFQUF5QjtBQUM5Qk4sTUFBQUEsT0FEOEI7QUFHOUJPLE1BQUFBLEdBQUcsRUFBRSwrQkFBS3BLLE1BQUwsQ0FBWVcsR0FBWixDQUFnQm1KLE1BQWhCLG9DQUF3Qk0sR0FBeEIsR0FBOEJBLEdBQTlCLEdBQW9DcEU7QUFIWCxLQUF6QixDQUFQO0FBS0Q7O0FBRUR0RSxFQUFBQSxxQkFBcUIsR0FBRztBQUN0QixVQUFNO0FBQUVqQixNQUFBQSxHQUFGO0FBQU9FLE1BQUFBO0FBQVAsUUFBZSxLQUFLWCxNQUExQjtBQUVBLFNBQUsyQixHQUFMLENBQVMsOEJBQWEsS0FBSzRJLE1BQWxCLENBQVQ7O0FBRUEsUUFBSTlKLEdBQUcsQ0FBQytKLFlBQUosS0FBcUIsS0FBekIsRUFBZ0M7QUFDOUIsV0FBSzdJLEdBQUwsQ0FBUyw4QkFBYThJLFVBQVUsQ0FBQ2hLLEdBQUcsQ0FBQytKLFlBQUwsQ0FBdkIsQ0FBVDtBQUNEOztBQUNELFFBQUk3SixHQUFHLENBQUMrSixRQUFSLEVBQWtCO0FBQ2hCLFdBQUsvSSxHQUFMLENBQVMsOEJBQVQ7QUFDRDs7QUFHRCxTQUFLQSxHQUFMLENBQVMsOEJBQVQ7O0FBQ0EsUUFBSWxCLEdBQUcsQ0FBQ2tLLE1BQUosS0FBZSxLQUFuQixFQUEwQjtBQUN4QixXQUFLaEosR0FBTCxDQUFTLHdCQUFPOEksVUFBVSxDQUFDaEssR0FBRyxDQUFDa0ssTUFBTCxDQUFqQixDQUFUO0FBQ0Q7O0FBQ0QsUUFBSWxLLEdBQUcsQ0FBQ21LLElBQUosS0FBYSxLQUFqQixFQUF3QjtBQUN0QixXQUFLakosR0FBTCxDQUFTLG1CQUFLOEksVUFBVSxDQUFDaEssR0FBRyxDQUFDbUssSUFBTCxDQUFmLENBQVQ7QUFDRDs7QUFDRCxRQUFJbkssR0FBRyxDQUFDb0ssUUFBSixLQUFpQixLQUFyQixFQUE0QjtBQUMxQixXQUFLbEosR0FBTCxDQUFTLDBCQUFTLG1CQUNoQjtBQUdFbUosUUFBQUEsRUFBRSxFQUFFO0FBQ0ZDLFVBQUFBLE1BQU0sRUFBRTtBQUNOLGFBQUNDLGNBQUtDLFNBQUwsQ0FBZUMsb0JBQWhCLEdBQXVDO0FBRGpDO0FBRE47QUFITixPQURnQixFQVVoQlQsVUFBVSxDQUFDaEssR0FBRyxDQUFDb0ssUUFBTCxDQVZNLENBQVQsQ0FBVDtBQVlEOztBQUNELFFBQUlwSyxHQUFHLENBQUMwSyxJQUFKLEtBQWEsS0FBakIsRUFBd0I7QUFDdEIsV0FBS3hKLEdBQUwsQ0FBUyxpQ0FBVDtBQUNBLFdBQUtBLEdBQUwsQ0FBUyx1QkFBVDtBQUNEO0FBQ0Y7O0FBRUQrRSxFQUFBQSx5QkFBeUIsR0FBRztBQUsxQixRQUFJLENBQUMsS0FBS25GLHVCQUFWLEVBQW1DO0FBQ2pDLFlBQU07QUFBRWQsUUFBQUE7QUFBRixVQUFVLEtBQUtULE1BQXJCO0FBR0EsV0FBSzJCLEdBQUwsQ0FBUyw0QkFBVzhJLFVBQVUsQ0FBQ2hLLEdBQUcsQ0FBQzJLLFVBQUwsQ0FBckIsQ0FBVDtBQUVBLFdBQUt6SixHQUFMLENBQVMsMkJBQVUsS0FBS3pCLE1BQWYsQ0FBVDtBQUVBLFdBQUt5QixHQUFMLENBQVMsb0NBQVQ7O0FBRUEsVUFBSWxCLEdBQUcsQ0FBQzRLLE9BQVIsRUFBaUI7QUFDZixjQUFNO0FBQ0ozSSxVQUFBQSxVQURJO0FBRUosYUFBR29HO0FBRkMsWUFHRjJCLFVBQVUsQ0FBQ2hLLEdBQUcsQ0FBQzRLLE9BQUwsQ0FIZDs7QUFJQSxZQUFJM0ksVUFBSixFQUFnQjtBQUtkb0csVUFBQUEsT0FBTyxDQUFDd0MsWUFBUixHQUF1QiwyQkFBYTVJLFVBQWIsQ0FBdkI7QUFDRDs7QUFDRCxhQUFLZixHQUFMLENBQVMseUJBQVFtSCxPQUFSLEVBQWlCLElBQWpCLENBQVQ7QUFDRDs7QUFFRCxVQUFJckksR0FBRyxDQUFDOEssUUFBUixFQUFrQjtBQUNoQixhQUFLNUosR0FBTCxDQUFTNEoscUJBQVNwSSxVQUFULEVBQVQ7O0FBQ0EsWUFBSTFDLEdBQUcsQ0FBQzRLLE9BQVIsRUFBaUI7QUFDZixlQUFLMUosR0FBTCxDQUFTNEoscUJBQVNGLE9BQVQsRUFBVDtBQUNEOztBQUNELGFBQUsxSixHQUFMLENBQVMsNkJBQVQ7QUFDRDs7QUFHRCxXQUFLQSxHQUFMLENBQVMsOEJBQVQ7QUFDQSxXQUFLSix1QkFBTCxHQUErQixJQUEvQjtBQUNEO0FBQ0Y7O0FBRURDLEVBQUFBLFdBQVcsR0FBRztBQUNaLFVBQU07QUFBRWdLLE1BQUFBLEdBQUY7QUFBT0MsTUFBQUEsR0FBUDtBQUFZQyxNQUFBQTtBQUFaLFFBQW9CQyxjQUFLQyxjQUEvQjs7QUFFQSxVQUFNQyxJQUFJLEdBQUdBLElBQUksS0FBSztBQUFFQyxNQUFBQSxFQUFFLEVBQUVELElBQUksQ0FBQ0M7QUFBWCxLQUFMLENBQWpCOztBQUNBLFVBQU1DLFdBQVcsR0FBRztBQUFFUCxNQUFBQSxHQUFGO0FBQU9DLE1BQUFBLEdBQVA7QUFBWUMsTUFBQUEsR0FBWjtBQUFpQkcsTUFBQUE7QUFBakIsS0FBcEI7QUFFQSxVQUFNdEIsTUFBTSxHQUFHLG1CQUFLLG1CQUNsQjtBQUNFeUIsTUFBQUEsS0FBSyxFQUFFLE1BRFQ7QUFFRUQsTUFBQUEsV0FGRjtBQUdFRSxNQUFBQSxXQUFXLEVBQUU7QUFFWEMsUUFBQUEsTUFBTSxFQUFFLG1DQUZHO0FBSVhDLFFBQUFBLGFBQWEsRUFBRTtBQUpKLE9BSGY7QUFVRUMsTUFBQUEsTUFBTSxFQUFFLENBQ04scUJBRE0sRUFFTix5QkFGTSxFQUdOLDRCQUhNLENBVlY7QUFlRUMsTUFBQUEsSUFBSSxFQUFFO0FBZlIsS0FEa0IsRUFrQmxCNUIsVUFBVSxDQUFDLEtBQUt6SyxNQUFMLENBQVl1SyxNQUFiLENBbEJRLENBQUwsQ0FBZjtBQXFCQSxTQUFLQSxNQUFMLEdBQWNBLE1BQU0sQ0FBQytCLEtBQVAsQ0FBYTtBQUFFdEosTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FBYixDQUFkO0FBQ0Q7O0FBRUR2QixFQUFBQSxTQUFTLEdBQUc7QUFBQTs7QUFDVixRQUFJO0FBQUV5QixNQUFBQSxJQUFGO0FBQVF2QyxNQUFBQTtBQUFSLFFBQWdCLEtBQUtYLE1BQXpCOztBQUNBLGlCQUFJa0QsSUFBSixhQUFJLE1BQU1xSixNQUFWLEVBQWtCO0FBQ2hCLFlBQU1DLGdCQUFnQixHQUFHdEosSUFBSSxDQUFDbUUsZ0JBQUwsS0FBMEIsSUFBMUIsR0FDckIsRUFEcUIsR0FFckJuRSxJQUFJLENBQUNtRSxnQkFGVDs7QUFHQSxVQUFJbUYsZ0JBQUosRUFBc0I7QUFDcEJ0SixRQUFBQSxJQUFJLEdBQUcsRUFDTCxHQUFHQSxJQURFO0FBRUwsYUFBRyxxQ0FBcUJzSixnQkFBckI7QUFGRSxTQUFQO0FBSUQ7O0FBQ0QsV0FBS3RKLElBQUwsR0FBWSxvQkFBS0EsSUFBTCxDQUFaOztBQUNBLFVBQUl2QyxHQUFHLENBQUN5SixHQUFSLEVBQWE7QUFDWCxhQUFLcUMsZ0JBQUw7QUFDRDtBQUNGO0FBQ0Y7O0FBRURBLEVBQUFBLGdCQUFnQixHQUFHO0FBQ2pCLFVBQU1DLFVBQVUsR0FBRyxFQUFuQjtBQUNBLFVBQU1uQyxNQUFNLEdBQUcsS0FBS0EsTUFBTCxDQUFZK0IsS0FBWixDQUFrQjtBQUFFdEosTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FBbEIsQ0FBZjs7QUFDQSxhQUFTMkosR0FBVCxDQUFhQyxLQUFiLEVBQW9CO0FBQUVDLE1BQUFBLFFBQUY7QUFBWTFDLE1BQUFBO0FBQVosS0FBcEIsRUFBeUM7QUFDdkMsWUFBTTJCLEVBQUUsR0FBR2MsS0FBSyxDQUFDRSxjQUFqQjtBQUNBLFlBQU1DLElBQUksR0FBR2pNLE9BQU8sQ0FBQ2tNLE1BQVIsQ0FBZU4sVUFBVSxDQUFDWixFQUFELENBQXpCLENBQWI7QUFDQSxZQUFNbUIsUUFBUSxHQUFHRixJQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVUsR0FBVixHQUFnQkEsSUFBSSxDQUFDLENBQUQsQ0FBSixHQUFVLEdBQTNDO0FBQ0EsYUFBT0wsVUFBVSxDQUFDWixFQUFELENBQWpCO0FBQ0EsWUFBTTtBQUFFMUIsUUFBQUEsR0FBRjtBQUFPOEMsUUFBQUE7QUFBUCxVQUFvQk4sS0FBMUI7QUFDQUMsTUFBQUEsUUFBUSxHQUFHeEwsTUFBTSxDQUFDOEwsV0FBUCxDQUNUOUwsTUFBTSxDQUFDd0UsT0FBUCxDQUFlZ0gsUUFBZixFQUF5QjlKLE1BQXpCLENBQ0UsQ0FBQyxDQUFDeUQsR0FBRCxDQUFELEtBQVcsQ0FBQ0EsR0FBRyxDQUFDNEcsVUFBSixDQUFlLEdBQWYsQ0FEZCxDQURTLENBQVg7QUFLQTdDLE1BQUFBLE1BQU0sQ0FBQ3RHLElBQVAsQ0FBWTtBQUFFZ0osUUFBQUEsUUFBRjtBQUFZQyxRQUFBQSxRQUFaO0FBQXNCTCxRQUFBQSxRQUF0QjtBQUFnQzFDLFFBQUFBO0FBQWhDLE9BQVosRUFBcURDLEdBQXJEO0FBQ0Q7O0FBRUQsU0FBS2xILElBQUwsQ0FDR21LLEVBREgsQ0FDTSxPQUROLEVBQ2VULEtBQUssSUFBSTtBQUNwQkYsTUFBQUEsVUFBVSxDQUFDRSxLQUFLLENBQUNFLGNBQVAsQ0FBVixHQUFtQ2hNLE9BQU8sQ0FBQ2tNLE1BQVIsRUFBbkM7QUFDRCxLQUhILEVBSUdLLEVBSkgsQ0FJTSxnQkFKTixFQUl3QixDQUFDUixRQUFELEVBQVdELEtBQVgsS0FBcUI7QUFDekNELE1BQUFBLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRO0FBQUVDLFFBQUFBO0FBQUYsT0FBUixDQUFIO0FBQ0QsS0FOSCxFQU9HUSxFQVBILENBT00sYUFQTixFQU9xQixDQUFDbEQsS0FBRCxFQUFReUMsS0FBUixLQUFrQjtBQUNuQ0QsTUFBQUEsR0FBRyxDQUFDQyxLQUFELEVBQVE7QUFBRXpDLFFBQUFBO0FBQUYsT0FBUixDQUFIO0FBQ0QsS0FUSDtBQVVEOztBQUVEeEMsRUFBQUEsbUJBQW1CLENBQUMyRixVQUFELEVBQWE7QUFDOUIsV0FBTyxLQUFLcEssSUFBTCxDQUFVcUosTUFBVixDQUFpQmdCLGNBQWpCLENBQWdDRCxVQUFoQyxFQUE0Q0UsT0FBNUMsQ0FBb0QsUUFBcEQsRUFBOEQsRUFBOUQsQ0FBUDtBQUNEOztBQUVEQyxFQUFBQSxxQkFBcUIsQ0FBQ0gsVUFBRCxFQUFhO0FBQ2hDLFVBQU1JLEdBQUcsR0FBRyxLQUFLeEssSUFBTCxDQUFVcUosTUFBVixDQUFpQm9CLG1CQUFqQixDQUFxQztBQUFFLE9BQUNMLFVBQUQsR0FBYztBQUFoQixLQUFyQyxDQUFaO0FBQ0EsV0FBT2pNLE1BQU0sQ0FBQ1gsSUFBUCxDQUFZZ04sR0FBWixFQUFpQixDQUFqQixDQUFQO0FBQ0Q7O0FBRURFLEVBQUFBLGFBQWEsQ0FBQzFMLElBQUQsRUFBTztBQUNsQixXQUFPLEtBQUtsQyxNQUFMLENBQVlTLEdBQVosQ0FBZ0JvTixjQUFoQixHQUFpQyx1QkFBVTNMLElBQVYsQ0FBakMsR0FBbURBLElBQTFEO0FBQ0Q7O0FBRUQ0TCxFQUFBQSxXQUFXLENBQUN0QyxHQUFELEVBQU07QUFBQTs7QUFDZixVQUFNM0IsT0FBTyxHQUFHMkIsR0FBRyxDQUFDdUMsTUFBSixHQUNaLHVCQUFXdkMsR0FBRyxDQUFDdUMsTUFBSixFQUFYLENBRFksR0FFWnZDLEdBQUcsQ0FBQzNCLE9BQUosSUFBZTJCLEdBRm5CO0FBR0EsVUFBTXdDLEdBQUcsR0FBSSxHQUFFeEMsR0FBRyxDQUFDeEksSUFBSyxLQUFJNkcsT0FBUSxFQUFwQztBQUNBLFdBQU8yQixHQUFHLENBQUN5QyxLQUFKLElBQWEsZ0NBQUtqTyxNQUFMLENBQVlXLEdBQVosQ0FBZ0JtSixNQUFoQiw0Q0FBd0JtRSxLQUF4QixNQUFrQyxLQUEvQyxHQUNGLEdBQUVELEdBQUksS0FBSXhDLEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVUMsS0FBVixDQUFnQixZQUFoQixFQUE4QkMsS0FBOUIsQ0FBb0MsQ0FBcEMsRUFBdUNDLElBQXZDLENBQTRDQyxZQUFHQyxHQUEvQyxDQUFvRCxFQUQ1RCxHQUVITixHQUZKO0FBR0Q7O0FBRURPLEVBQUFBLFFBQVEsQ0FBQy9DLEdBQUQsRUFBTTlCLEdBQU4sRUFBVztBQUNqQixRQUFJLENBQUM4QixHQUFHLENBQUNnRCxNQUFMLElBQWUsQ0FBQyxLQUFLM04sTUFBekIsRUFBaUM7QUFDL0IsVUFBSTtBQUNGLGNBQU00TixJQUFJLEdBQUcsS0FBS1gsV0FBTCxDQUFpQnRDLEdBQWpCLENBQWI7QUFDQSxjQUFNUSxLQUFLLEdBQ1RSLEdBQUcsWUFBWWtELHFCQUFmLElBQWdDbEQsR0FBRyxDQUFDbUQsTUFBSixHQUFhLEdBQTdDLEdBQW1ELE1BQW5ELEdBQTRELE9BRDlEO0FBRUEsY0FBTXBFLE1BQU0sR0FBRyxDQUFBYixHQUFHLFFBQUgsWUFBQUEsR0FBRyxDQUFFYSxNQUFMLEtBQWUsS0FBS0EsTUFBbkM7QUFDQUEsUUFBQUEsTUFBTSxDQUFDeUIsS0FBRCxDQUFOLENBQWN5QyxJQUFkO0FBQ0QsT0FORCxDQU1FLE9BQU9HLENBQVAsRUFBVTtBQUNWNUssUUFBQUEsT0FBTyxDQUFDbUcsS0FBUixDQUFjLHFCQUFkLEVBQXFDeUUsQ0FBckM7QUFDRDtBQUNGO0FBQ0Y7O0FBRVUsUUFBTEMsS0FBSyxHQUFHO0FBQ1osUUFBSSxLQUFLN08sTUFBTCxDQUFZVyxHQUFaLENBQWdCbUosTUFBaEIsS0FBMkIsS0FBL0IsRUFBc0M7QUFDcEMsV0FBS3VELEVBQUwsQ0FBUSxPQUFSLEVBQWlCLEtBQUtrQixRQUF0QjtBQUNEOztBQUNELFVBQU0sS0FBS08sSUFBTCxDQUFVLGNBQVYsQ0FBTjtBQUNBLFVBQU0sS0FBSzNJLGNBQUwsQ0FBb0JQLE9BQU8sSUFBSUEsT0FBTyxDQUFDaUosS0FBUixFQUEvQixDQUFOO0FBQ0EsVUFBTTtBQUNKRSxNQUFBQSxNQUFNLEVBQUU7QUFBRUMsUUFBQUEsSUFBRjtBQUFRQyxRQUFBQTtBQUFSLE9BREo7QUFFSmxPLE1BQUFBO0FBRkksUUFHRixLQUFLZixNQUhUO0FBSUEsU0FBSytPLE1BQUwsR0FBYyxNQUFNLElBQUkzSSxPQUFKLENBQVksQ0FBQzhJLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNuRCxZQUFNSixNQUFNLEdBQUcsS0FBS0ssTUFBTCxDQUFZSCxJQUFaLEVBQWtCRCxJQUFsQixFQUF3QixNQUFNO0FBQzNDLGNBQU07QUFBRUMsVUFBQUE7QUFBRixZQUFXRixNQUFNLENBQUNNLE9BQVAsRUFBakI7QUFDQXJMLFFBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUNHLEdBQUVsRCxHQUFJLDZCQUE0QmlPLElBQUssSUFBR0MsSUFBSyxFQURsRDtBQUdBQyxRQUFBQSxPQUFPLENBQUNILE1BQUQsQ0FBUDtBQUNELE9BTmMsQ0FBZjs7QUFPQSxVQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNYSSxRQUFBQSxNQUFNLENBQUMsSUFBSXpLLEtBQUosQ0FBVyxvQ0FBbUNzSyxJQUFLLElBQUdDLElBQUssRUFBM0QsQ0FBRCxDQUFOO0FBQ0Q7QUFDRixLQVhtQixDQUFwQjtBQVlBLFVBQU0sS0FBS0gsSUFBTCxDQUFVLGFBQVYsQ0FBTjtBQUNEOztBQUVTLFFBQUpRLElBQUksR0FBRztBQUNYLFVBQU0sS0FBS1IsSUFBTCxDQUFVLGFBQVYsQ0FBTjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxNQUFNLElBQUkzSSxPQUFKLENBQVksQ0FBQzhJLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNuRCxZQUFNO0FBQUVKLFFBQUFBO0FBQUYsVUFBYSxJQUFuQjs7QUFDQSxVQUFJQSxNQUFKLEVBQVk7QUFDVkEsUUFBQUEsTUFBTSxDQUFDUSxLQUFQLENBQWEvRCxHQUFHLElBQUk7QUFDbEIsY0FBSUEsR0FBSixFQUFTO0FBQ1AyRCxZQUFBQSxNQUFNLENBQUMzRCxHQUFELENBQU47QUFDRCxXQUZELE1BRU87QUFDTDBELFlBQUFBLE9BQU8sQ0FBQyxJQUFELENBQVA7QUFDRDtBQUNGLFNBTkQ7QUFXQU0sUUFBQUEsWUFBWSxDQUFDLE1BQU1ULE1BQU0sQ0FBQ0QsSUFBUCxDQUFZLE9BQVosQ0FBUCxDQUFaO0FBQ0QsT0FiRCxNQWFPO0FBQ0xLLFFBQUFBLE1BQU0sQ0FBQyxJQUFJekssS0FBSixDQUFVLHVCQUFWLENBQUQsQ0FBTjtBQUNEO0FBQ0YsS0FsQm1CLENBQXBCO0FBbUJBLFVBQU0sS0FBS3lCLGNBQUwsQ0FBb0JQLE9BQU8sSUFBSUEsT0FBTyxDQUFDMEosSUFBUixFQUEvQixDQUFOO0FBQ0EsVUFBTSxLQUFLUixJQUFMLENBQVUsWUFBVixDQUFOOztBQUNBLFFBQUksS0FBSzlPLE1BQUwsQ0FBWVcsR0FBWixDQUFnQm1KLE1BQWhCLEtBQTJCLEtBQS9CLEVBQXNDO0FBQ3BDLFdBQUsyRixHQUFMLENBQVMsT0FBVCxFQUFrQixLQUFLbEIsUUFBdkI7QUFDRDtBQUNGOztBQUVnQixRQUFYbUIsV0FBVyxHQUFHO0FBQ2xCLFFBQUk7QUFDRixZQUFNLEtBQUtiLEtBQUwsRUFBTjtBQUNELEtBRkQsQ0FFRSxPQUFPckQsR0FBUCxFQUFZO0FBQ1osV0FBSytDLFFBQUwsQ0FBYy9DLEdBQWQ7QUFDQTFLLE1BQUFBLE9BQU8sQ0FBQzZPLElBQVIsQ0FBYSxDQUFDLENBQWQ7QUFDRDtBQUNGOztBQUlpQixRQUFaQyxZQUFZLENBQUN0SCxPQUFELEVBQVV1SCxLQUFWLEVBQWlCQyxLQUFLLEdBQUcsQ0FBekIsRUFBNEJDLEdBQUcsR0FBRyxJQUFsQyxFQUF3QztBQUN4RCxVQUFNQyxVQUFVLEdBQUcsS0FBS3pLLFFBQUwsQ0FBYyxPQUFkLENBQW5COztBQUNBLFFBQUl5SyxVQUFKLEVBQWdCO0FBQ2QsWUFBTXhJLE1BQU0sR0FBR3FJLEtBQUssQ0FBQ3ZKLEdBQU4sQ0FBVTJKLElBQUksS0FBSztBQUNoQ3pKLFFBQUFBLEdBQUcsRUFBRXlKLElBQUksQ0FBQ3pKLEdBRHNCO0FBRWhDeUosUUFBQUEsSUFGZ0M7QUFHaEMzSCxRQUFBQSxPQUFPLEVBQUVBLE9BQU8sQ0FBQ3RGLElBSGU7QUFJaEM4TSxRQUFBQTtBQUpnQyxPQUFMLENBQWQsQ0FBZjtBQU1BLGFBQU9FLFVBQVUsQ0FDZHBELEtBREksQ0FDRW1ELEdBREYsRUFFSkcsTUFGSSxDQUVHMUksTUFGSCxDQUFQO0FBR0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBRWlDLFFBQTVCMkksNEJBQTRCLENBQ2hDN0gsT0FEZ0MsRUFFaEM4SCxVQUZnQyxFQUdoQ0MsWUFIZ0MsRUFJaENOLEdBQUcsR0FBRyxJQUowQixFQUtoQztBQUNBLFVBQU07QUFDSnZJLE1BQUFBLE1BQU0sRUFBRTtBQUNOOEksUUFBQUEsb0JBQW9CLEdBQUc7QUFEakIsVUFFSjtBQUhBLFFBSUYsS0FBS3RRLE1BSlQ7QUFNQSxVQUFNdVEsYUFBYSxHQUFHLHNCQUFTRCxvQkFBVCxJQUNsQiw0QkFBY0Esb0JBQWQsQ0FEa0IsR0FFbEJBLG9CQUZKO0FBSUEsVUFBTUUsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsVUFBTVIsVUFBVSxHQUFHLEtBQUt6SyxRQUFMLENBQWMsT0FBZCxDQUFuQjs7QUFDQSxRQUFJeUssVUFBSixFQUFnQjtBQUNkUSxNQUFBQSxhQUFhLENBQUNuSCxJQUFkLENBQ0UsSUFBRyxNQUFNLEtBQUtvSCxnQkFBTCxDQUFzQm5JLE9BQXRCLEVBQStCOEgsVUFBL0IsRUFBMkNMLEdBQTNDLENBQVQsQ0FERjs7QUFHQSxVQUNFSyxVQUFVLENBQUM1TixNQUFYLEdBQW9CLENBQXBCLElBQ0E2TixZQUFZLENBQUM3TixNQUFiLEdBQXNCLENBRnhCLEVBR0U7QUFDQSxjQUFNa08sV0FBVyxHQUFHLENBQUNiLEtBQUQsRUFBUWMsU0FBUixLQUNsQmQsS0FBSyxDQUFDck4sTUFBTixHQUFlLENBQWYsSUFDQXdOLFVBQVUsQ0FBQ3BELEtBQVgsQ0FBaUJtRCxHQUFqQixFQUNHYSxPQURILENBQ1csS0FEWCxFQUNrQmYsS0FBSyxDQUFDdkosR0FBTixDQUFVMkosSUFBSSxJQUFJQSxJQUFJLENBQUN6SixHQUF2QixDQURsQixFQUVHbUssU0FGSCxDQUVhLE9BRmIsRUFFc0JBLFNBRnRCLENBRkY7O0FBTUEsY0FBTXZLLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLENBQ2hCcUssV0FBVyxDQUFDTixVQUFELEVBQWEsQ0FBYixDQURLLEVBRWhCTSxXQUFXLENBQUNMLFlBQUQsRUFBZSxDQUFDLENBQWhCLENBRkssQ0FBWixDQUFOOztBQUlBLFlBQUlFLGFBQWEsR0FBRyxDQUFwQixFQUF1QjtBQUNyQk0sVUFBQUEsVUFBVSxDQUdSLE1BQU0sS0FBS0MsbUJBQUwsQ0FBeUJQLGFBQXpCLENBSEUsRUFJUkEsYUFKUSxDQUFWO0FBTUQ7QUFDRjs7QUFHRCxZQUFNLEtBQUtPLG1CQUFMLENBQXlCUCxhQUF6QixFQUF3Q1IsR0FBeEMsQ0FBTjtBQUNBLGFBQU9TLGFBQVA7QUFDRDtBQUNGOztBQUVxQixRQUFoQkMsZ0JBQWdCLENBQUNuSSxPQUFELEVBQVV1SCxLQUFWLEVBQWlCRSxHQUFHLEdBQUcsSUFBdkIsRUFBNkI7QUFDakQsVUFBTVMsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsVUFBTVIsVUFBVSxHQUFHLEtBQUt6SyxRQUFMLENBQWMsT0FBZCxDQUFuQjs7QUFDQSxRQUFJeUssVUFBSixFQUFnQjtBQUVkLFlBQU01SixPQUFPLENBQUNDLEdBQVIsQ0FDSndKLEtBQUssQ0FBQ3ZKLEdBQU4sQ0FBVSxNQUFNMkosSUFBTixJQUFjO0FBQ3RCLGNBQU1jLEtBQUssR0FBRyxNQUFNZixVQUFVLENBQUNwRCxLQUFYLENBQWlCbUQsR0FBakIsRUFBc0JpQixPQUF0QixDQUE4QixLQUE5QixFQUFxQ2YsSUFBSSxDQUFDekosR0FBMUMsQ0FBcEI7O0FBQ0EsWUFBSSxDQUFDdUssS0FBTCxFQUFZO0FBQ1YsY0FBSWQsSUFBSSxDQUFDdE0sSUFBTCxJQUFhc00sSUFBSSxDQUFDckosR0FBdEIsRUFBMkI7QUFDekIsZ0JBQUk7QUFBRWpELGNBQUFBO0FBQUYsZ0JBQVdzTSxJQUFmOztBQUNBLGdCQUFJLENBQUN0TSxJQUFMLEVBQVc7QUFDVEssY0FBQUEsT0FBTyxDQUFDQyxJQUFSLENBQ0csR0FDQ0MsZUFBTStNLEdBQU4sQ0FBVSxPQUFWLENBQ0QsVUFDQy9NLGVBQU1nTixLQUFOLENBQWEsSUFBR2pCLElBQUksQ0FBQ2pOLElBQUssR0FBMUIsQ0FDRCw0Q0FDQ2tCLGVBQU1nTixLQUFOLENBQWEsSUFBR2pCLElBQUksQ0FBQ3JKLEdBQUksR0FBekIsQ0FDRCwwQkFDQzFDLGVBQU1nTixLQUFOLENBQWEsSUFBRzVJLE9BQU8sQ0FBQ3RGLElBQUssR0FBN0IsQ0FDRCxLQVRIO0FBV0Esb0JBQU02SixRQUFRLEdBQUcsTUFBTXNFLGVBQU1DLE9BQU4sQ0FBYztBQUNuQ0MsZ0JBQUFBLE1BQU0sRUFBRSxLQUQyQjtBQUVuQ3pLLGdCQUFBQSxHQUFHLEVBQUVxSixJQUFJLENBQUNySixHQUZ5QjtBQUduQzBLLGdCQUFBQSxZQUFZLEVBQUU7QUFIcUIsZUFBZCxDQUF2QjtBQUtBM04sY0FBQUEsSUFBSSxHQUFHa0osUUFBUSxDQUFDbEosSUFBaEI7QUFDRDs7QUFDRCxrQkFBTTROLFlBQVksR0FBRyxNQUFNakosT0FBTyxDQUFDa0osT0FBUixDQUFnQnZCLElBQWhCLEVBQXNCdE0sSUFBdEIsQ0FBM0I7QUFDQSxrQkFBTSxLQUFLaU0sWUFBTCxDQUFrQnRILE9BQWxCLEVBQTJCLENBQUNpSixZQUFELENBQTNCLEVBQTJDLENBQTNDLEVBQThDeEIsR0FBOUMsQ0FBTjtBQUlBMU8sWUFBQUEsTUFBTSxDQUFDb1EsTUFBUCxDQUFjeEIsSUFBZCxFQUFvQnNCLFlBQXBCO0FBQ0FmLFlBQUFBLGFBQWEsQ0FBQ25ILElBQWQsQ0FBbUJrSSxZQUFuQjtBQUNELFdBNUJELE1BNEJPO0FBQ0wsa0JBQU0sSUFBSUcsa0JBQUosQ0FDSCxnREFDQ3pCLElBQUksQ0FBQ2pOLElBQ04sT0FDQ2lOLElBQUksQ0FBQ3pKLEdBQ04sSUFMRyxDQUFOO0FBT0Q7QUFDRixTQXRDRCxNQXNDTztBQUdMbkYsVUFBQUEsTUFBTSxDQUFDb1EsTUFBUCxDQUFjeEIsSUFBZCxFQUFvQmMsS0FBSyxDQUFDZCxJQUExQjtBQUdEO0FBQ0YsT0EvQ0QsQ0FESSxDQUFOO0FBa0REOztBQUNELFdBQU9PLGFBQVA7QUFDRDs7QUFFeUIsUUFBcEJtQixvQkFBb0IsQ0FBQ3JKLE9BQUQsRUFBVXVILEtBQVYsRUFBaUJFLEdBQUcsR0FBRyxJQUF2QixFQUE2QjtBQUNyRCxVQUFNNkIsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsVUFBTTVCLFVBQVUsR0FBRyxLQUFLekssUUFBTCxDQUFjLE9BQWQsQ0FBbkI7O0FBQ0EsUUFBSXlLLFVBQUosRUFBZ0I7QUFDZCxZQUFNNUosT0FBTyxDQUFDQyxHQUFSLENBQ0p3SixLQUFLLENBQUN2SixHQUFOLENBQVUsTUFBTTJKLElBQU4sSUFBYztBQUN0QixZQUFJQSxJQUFJLENBQUN0TSxJQUFULEVBQWU7QUFDYixnQkFBTW9OLEtBQUssR0FBRyxNQUFNZixVQUFVLENBQUNwRCxLQUFYLENBQWlCbUQsR0FBakIsRUFBc0JpQixPQUF0QixDQUE4QixLQUE5QixFQUFxQ2YsSUFBSSxDQUFDekosR0FBMUMsQ0FBcEI7O0FBQ0EsY0FBSXVLLEtBQUosRUFBVztBQUNULGtCQUFNYyxXQUFXLEdBQUcsTUFBTXZKLE9BQU8sQ0FBQ2tKLE9BQVIsQ0FBZ0J2QixJQUFoQixFQUFzQkEsSUFBSSxDQUFDdE0sSUFBM0IsQ0FBMUI7QUFJQXRDLFlBQUFBLE1BQU0sQ0FBQ29RLE1BQVAsQ0FBY3hCLElBQWQsRUFBb0I0QixXQUFwQjtBQUNBRCxZQUFBQSxhQUFhLENBQUN2SSxJQUFkLENBQW1Cd0ksV0FBbkI7QUFDRCxXQVBELE1BT087QUFDTCxrQkFBTSxJQUFJSCxrQkFBSixDQUNILHdEQUNDekIsSUFBSSxDQUFDak4sSUFDTixPQUNDaU4sSUFBSSxDQUFDekosR0FDTixJQUxHLENBQU47QUFPRDtBQUNGO0FBQ0YsT0FwQkQsQ0FESSxDQUFOO0FBdUJEOztBQUNELFdBQU9vTCxhQUFQO0FBQ0Q7O0FBRXdCLFFBQW5CZCxtQkFBbUIsQ0FBQ1AsYUFBYSxHQUFHLENBQWpCLEVBQW9CUixHQUFHLEdBQUcsSUFBMUIsRUFBZ0M7QUFDdkQsVUFBTUMsVUFBVSxHQUFHLEtBQUt6SyxRQUFMLENBQWMsT0FBZCxDQUFuQjs7QUFDQSxRQUFJeUssVUFBSixFQUFnQjtBQUNkLGFBQU9BLFVBQVUsQ0FBQzhCLFdBQVgsQ0FBdUIvQixHQUF2QixFQUE0QixNQUFNQSxHQUFOLElBQWE7QUFHOUMsY0FBTWdDLElBQUksR0FBRyxJQUFJQyxJQUFKLEVBQWI7QUFDQUQsUUFBQUEsSUFBSSxDQUFDRSxlQUFMLENBQXFCRixJQUFJLENBQUNHLGVBQUwsS0FBeUIzQixhQUE5QztBQUNBLGNBQU00QixjQUFjLEdBQUcsTUFBTW5DLFVBQVUsQ0FDcENwRCxLQUQwQixDQUNwQm1ELEdBRG9CLEVBRTFCcUMsS0FGMEIsQ0FFcEIsT0FGb0IsRUFFWCxDQUZXLEVBRzFCQyxRQUgwQixDQUdqQixXQUhpQixFQUdKLElBSEksRUFHRU4sSUFIRixFQU0xQk0sUUFOMEIsQ0FNakIsV0FOaUIsRUFNSixHQU5JLEVBTUMsb0JBQUksV0FBSixDQU5ELENBQTdCOztBQU9BLFlBQUlGLGNBQWMsQ0FBQzNQLE1BQWYsR0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsZ0JBQU04UCxZQUFZLEdBQUcsTUFBTWxNLE9BQU8sQ0FBQ0MsR0FBUixDQUN6QjhMLGNBQWMsQ0FBQzdMLEdBQWYsQ0FBbUIsTUFBTXlLLEtBQU4sSUFBZTtBQUNoQyxnQkFBSTtBQUNGLG9CQUFNLEtBQUtwSSxVQUFMLENBQWdCb0ksS0FBSyxDQUFDekksT0FBdEIsRUFBK0JpSyxVQUEvQixDQUEwQ3hCLEtBQUssQ0FBQ2QsSUFBaEQsQ0FBTjtBQUNELGFBRkQsQ0FFRSxPQUFPOUYsS0FBUCxFQUFjO0FBQ2QsbUJBQUsyRSxJQUFMLENBQVUsT0FBVixFQUFtQjNFLEtBQW5CO0FBQ0E0RyxjQUFBQSxLQUFLLENBQUM1RyxLQUFOLEdBQWNBLEtBQWQ7QUFDRDs7QUFDRCxtQkFBTzRHLEtBQUssQ0FBQ3ZLLEdBQWI7QUFDRCxXQVJELENBRHlCLENBQTNCO0FBV0EsZ0JBQU13SixVQUFVLENBQ2JwRCxLQURHLENBQ0dtRCxHQURILEVBRUh5QyxNQUZHLEdBR0g1QixPQUhHLENBR0ssS0FITCxFQUdZMEIsWUFIWixDQUFOO0FBSUQ7O0FBQ0QsZUFBT0gsY0FBUDtBQUNELE9BOUJNLENBQVA7QUErQkQ7QUFDRjs7QUF6NEJrQzs7OztBQTg0QnJDTSxrQkFBYUMsS0FBYixDQUFtQjdTLFdBQVcsQ0FBQzhTLFNBQS9COztBQUVBLFNBQVNsSSxVQUFULENBQW9CM0IsT0FBcEIsRUFBNkI7QUFDM0IsU0FBTyxzQkFBU0EsT0FBVCxJQUFvQkEsT0FBcEIsR0FBOEIsRUFBckM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBLb2EgZnJvbSAna29hJ1xuaW1wb3J0IEtuZXggZnJvbSAna25leCdcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgemxpYiBmcm9tICd6bGliJ1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubydcbmltcG9ydCBvcyBmcm9tICdvcydcbmltcG9ydCBwYXJzZUR1cmF0aW9uIGZyb20gJ3BhcnNlLWR1cmF0aW9uJ1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAna29hLWJvZHlwYXJzZXInXG5pbXBvcnQgY29ycyBmcm9tICdAa29hL2NvcnMnXG5pbXBvcnQgY29tcG9zZSBmcm9tICdrb2EtY29tcG9zZSdcbmltcG9ydCBjb21wcmVzcyBmcm9tICdrb2EtY29tcHJlc3MnXG5pbXBvcnQgY29uZGl0aW9uYWwgZnJvbSAna29hLWNvbmRpdGlvbmFsLWdldCdcbmltcG9ydCBwYXNzcG9ydCBmcm9tICdrb2EtcGFzc3BvcnQnXG5pbXBvcnQgc2Vzc2lvbiBmcm9tICdrb2Etc2Vzc2lvbidcbmltcG9ydCBldGFnIGZyb20gJ2tvYS1ldGFnJ1xuaW1wb3J0IGhlbG1ldCBmcm9tICdrb2EtaGVsbWV0J1xuaW1wb3J0IHJlc3BvbnNlVGltZSBmcm9tICdrb2EtcmVzcG9uc2UtdGltZSdcbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGRpdG9qcy9yb3V0ZXInXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAL2xpYidcbmltcG9ydCB7IENvbnRyb2xsZXIsIEFkbWluQ29udHJvbGxlciB9IGZyb20gJ0AvY29udHJvbGxlcnMnXG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnQC9zZXJ2aWNlcydcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAL3N0b3JhZ2UnXG5pbXBvcnQgeyBjb252ZXJ0U2NoZW1hIH0gZnJvbSAnQC9zY2hlbWEnXG5pbXBvcnQgeyBmb3JtYXRKc29uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgRGF0YWJhc2VFcnJvcixcbiAgQXNzZXRFcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCBTZXNzaW9uU3RvcmUgZnJvbSAnLi9TZXNzaW9uU3RvcmUnXG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICcuL1ZhbGlkYXRvcidcbmltcG9ydCB7XG4gIGF0dGFjaExvZ2dlcixcbiAgY3JlYXRlVHJhbnNhY3Rpb24sXG4gIGZpbmRSb3V0ZSxcbiAgaGFuZGxlRXJyb3IsXG4gIGhhbmRsZVJvdXRlLFxuICBoYW5kbGVVc2VyLFxuICBsb2dSZXF1ZXN0c1xufSBmcm9tICdAL21pZGRsZXdhcmUnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXksIGlzUGxhaW5PYmplY3QsIGh5cGhlbmF0ZSwgY2xvbmUsIG1lcmdlLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIEJlbG9uZ3NUb09uZVJlbGF0aW9uLFxuICBrbmV4U25ha2VDYXNlTWFwcGVycyxcbiAgcmVmXG59IGZyb20gJ29iamVjdGlvbidcblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uIGV4dGVuZHMgS29hIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNvbmZpZyA9IHt9LFxuICAgIHZhbGlkYXRvcixcbiAgICByb3V0ZXIsXG4gICAgZXZlbnRzLFxuICAgIG1pZGRsZXdhcmUsXG4gICAgbW9kZWxzLFxuICAgIHNlcnZpY2VzLFxuICAgIGNvbnRyb2xsZXJzXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLl9zZXR1cEVtaXR0ZXIoZXZlbnRzKVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIFBsdWNrIGtleXMgb3V0IG9mIGBjb25maWcuYXBwYCB0byBrZWVwIHRoZW0gc2VjcmV0XG4gICAgICBhcHA6IHsga2V5cywgLi4uYXBwIH0gPSB7fSxcbiAgICAgIGxvZyA9IHt9LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSBjb25maWdcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGFwcCxcbiAgICAgIGxvZzogbG9nLnNpbGVudCB8fCBwcm9jZXNzLmVudi5ESVRPX1NJTEVOVCA/IHt9IDogbG9nLFxuICAgICAgLi4ucmVzdFxuICAgIH1cbiAgICB0aGlzLmtleXMgPSBrZXlzXG4gICAgdGhpcy5wcm94eSA9ICEhYXBwLnByb3h5XG4gICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3IgfHwgbmV3IFZhbGlkYXRvcigpXG4gICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXIgfHwgbmV3IFJvdXRlcigpXG4gICAgdGhpcy52YWxpZGF0b3IuYXBwID0gdGhpc1xuICAgIHRoaXMuc3RvcmFnZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5tb2RlbHMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5zZXJ2aWNlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB0aGlzLmNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIHRoaXMuaGFzQ29udHJvbGxlck1pZGRsZXdhcmUgPSBmYWxzZVxuICAgIHRoaXMuc2V0dXBMb2dnZXIoKVxuICAgIHRoaXMuc2V0dXBLbmV4KClcbiAgICB0aGlzLnNldHVwR2xvYmFsTWlkZGxld2FyZSgpXG4gICAgaWYgKG1pZGRsZXdhcmUpIHtcbiAgICAgIHRoaXMudXNlKG1pZGRsZXdhcmUpXG4gICAgfVxuICAgIGlmIChjb25maWcuc3RvcmFnZXMpIHtcbiAgICAgIHRoaXMuYWRkU3RvcmFnZXMoY29uZmlnLnN0b3JhZ2VzKVxuICAgIH1cbiAgICBpZiAobW9kZWxzKSB7XG4gICAgICB0aGlzLmFkZE1vZGVscyhtb2RlbHMpXG4gICAgfVxuICAgIGlmIChzZXJ2aWNlcykge1xuICAgICAgdGhpcy5hZGRTZXJ2aWNlcyhzZXJ2aWNlcylcbiAgICB9XG4gICAgaWYgKGNvbnRyb2xsZXJzKSB7XG4gICAgICB0aGlzLmFkZENvbnRyb2xsZXJzKGNvbnRyb2xsZXJzKVxuICAgIH1cbiAgfVxuXG4gIGFkZFJvdXRlKHZlcmIsIHBhdGgsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCBjb250cm9sbGVyID0gbnVsbCwgYWN0aW9uID0gbnVsbCkge1xuICAgIGhhbmRsZXJzID0gYXNBcnJheShoYW5kbGVycylcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMubGVuZ3RoID4gMSA/IGNvbXBvc2UoaGFuZGxlcnMpIDogaGFuZGxlcnNbMF1cbiAgICAvLyBJbnN0ZWFkIG9mIGRpcmVjdGx5IHBhc3NpbmcgYGhhbmRsZXJgLCBwYXNzIGEgYHJvdXRlYCBvYmplY3QgdGhhdCBhbHNvXG4gICAgLy8gd2lsbCBiZSBleHBvc2VkIHRocm91Z2ggYGN0eC5yb3V0ZWAsIHNlZSBgcm91dGVySGFuZGxlcigpYDpcbiAgICBjb25zdCByb3V0ZSA9IHtcbiAgICAgIHZlcmIsXG4gICAgICBwYXRoLFxuICAgICAgdHJhbnNhY3RlZCxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgYWN0aW9uXG4gICAgfVxuICAgIHRoaXMucm91dGVyW3ZlcmJdKHBhdGgsIHJvdXRlKVxuICB9XG5cbiAgYWRkTW9kZWxzKG1vZGVscykge1xuICAgIC8vIEZpcnN0IGFkZCBhbGwgbW9kZWxzIHRoZW4gY2FsbCBpbml0aWFsaXplKCkgZm9yIGVhY2ggaW4gYSBzZWNvbmQgbG9vcCxcbiAgICAvLyBzaW5jZSB0aGV5IG1heSBiZSByZWZlcmVuY2luZyBlYWNoIG90aGVyIGluIHJlbGF0aW9ucy5cbiAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgT2JqZWN0LnZhbHVlcyhtb2RlbHMpKSB7XG4gICAgICB0aGlzLmFkZE1vZGVsKG1vZGVsQ2xhc3MpXG4gICAgfVxuICAgIC8vIE5vdyAocmUtKXNvcnQgYWxsIG1vZGVscyBiYXNlZCBvbiB0aGVpciByZWxhdGlvbnMuXG4gICAgdGhpcy5tb2RlbHMgPSB0aGlzLnNvcnRNb2RlbHModGhpcy5tb2RlbHMpXG4gICAgLy8gRmlsdGVyIHRocm91Z2ggYWxsIHNvcnRlZCBtb2RlbHMsIGtlZXBpbmcgb25seSB0aGUgbmV3bHkgYWRkZWQgb25lcy5cbiAgICBjb25zdCBzb3J0ZWRNb2RlbHMgPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxzKS5maWx0ZXIoXG4gICAgICBtb2RlbENsYXNzID0+IG1vZGVsc1ttb2RlbENsYXNzLm5hbWVdID09PSBtb2RlbENsYXNzXG4gICAgKVxuICAgIC8vIEluaXRpYWxpemUgdGhlIGFkZGVkIG1vZGVscyBpbiBjb3JyZWN0IHNvcnRlZCBzZXF1ZW5jZSwgc28gdGhhdCBmb3IgZXZlcnlcbiAgICAvLyBtb2RlbCwgZ2V0UmVsYXRlZFJlbGF0aW9ucygpIHJldHVybnMgdGhlIGZ1bGwgbGlzdCBvZiByZWxhdGluZyByZWxhdGlvbnMuXG4gICAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIHNvcnRlZE1vZGVscykge1xuICAgICAgaWYgKG1vZGVsc1ttb2RlbENsYXNzLm5hbWVdID09PSBtb2RlbENsYXNzKSB7XG4gICAgICAgIG1vZGVsQ2xhc3Muc2V0dXAodGhpcy5rbmV4KVxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgbW9kZWxDbGFzcyBpcyBzZXQgdXAsIGNhbGwgYGluaXRpYWxpemUoKWAsIHdoaWNoIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLHdpdGhvdXQgaGF2aW5nIHRvIGNhbGwgYHN1cGVyLmluaXRpYWxpemUoKWBcbiAgICAgICAgbW9kZWxDbGFzcy5pbml0aWFsaXplKClcbiAgICAgICAgdGhpcy52YWxpZGF0b3IuYWRkU2NoZW1hKG1vZGVsQ2xhc3MuZ2V0SnNvblNjaGVtYSgpKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5jb25maWdcbiAgICBpZiAobG9nLnNjaGVtYSB8fCBsb2cucmVsYXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2Ygc29ydGVkTW9kZWxzKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZExvZyA9IG9wdGlvbiA9PiAoXG4gICAgICAgICAgb3B0aW9uID09PSB0cnVlIHx8XG4gICAgICAgICAgYXNBcnJheShvcHRpb24pLmluY2x1ZGVzKG1vZGVsQ2xhc3MubmFtZSlcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBkYXRhID0ge31cbiAgICAgICAgaWYgKHNob3VsZExvZyhsb2cuc2NoZW1hKSkge1xuICAgICAgICAgIGRhdGEuc2NoZW1hID0gbW9kZWxDbGFzcy5nZXRKc29uU2NoZW1hKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkTG9nKGxvZy5yZWxhdGlvbnMpKSB7XG4gICAgICAgICAgZGF0YS5yZWxhdGlvbnMgPSBjbG9uZShtb2RlbENsYXNzLnJlbGF0aW9uTWFwcGluZ3MsIHZhbHVlID0+XG4gICAgICAgICAgICBNb2RlbC5pc1Byb3RvdHlwZU9mKHZhbHVlKSA/IGBbTW9kZWw6ICR7dmFsdWUubmFtZX1dYCA6IHZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93LmJvbGQoYFxcbiR7bW9kZWxDbGFzcy5uYW1lfTpcXG5gKSxcbiAgICAgICAgICAgIHV0aWwuaW5zcGVjdChkYXRhLCB7XG4gICAgICAgICAgICAgIGNvbG9yczogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVwdGg6IG51bGwsXG4gICAgICAgICAgICAgIG1heEFycmF5TGVuZ3RoOiBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZE1vZGVsKG1vZGVsQ2xhc3MpIHtcbiAgICBpZiAoTW9kZWwuaXNQcm90b3R5cGVPZihtb2RlbENsYXNzKSkge1xuICAgICAgbW9kZWxDbGFzcy5hcHAgPSB0aGlzXG4gICAgICB0aGlzLm1vZGVsc1ttb2RlbENsYXNzLm5hbWVdID0gbW9kZWxDbGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgY2xhc3M6ICR7bW9kZWxDbGFzc31gKVxuICAgIH1cbiAgfVxuXG4gIHNvcnRNb2RlbHMobW9kZWxzKSB7XG4gICAgY29uc3Qgc29ydEJ5UmVsYXRpb25zID0gKGxpc3QsIGNvbGxlY3RlZCA9IHt9LCBleGNsdWRlZCA9IHt9KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgbGlzdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUgfSA9IG1vZGVsQ2xhc3NcbiAgICAgICAgaWYgKCFjb2xsZWN0ZWRbbmFtZV0gJiYgIWV4Y2x1ZGVkW25hbWVdKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBPYmplY3QudmFsdWVzKG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKCkpKSB7XG4gICAgICAgICAgICBpZiAoIShyZWxhdGlvbiBpbnN0YW5jZW9mIEJlbG9uZ3NUb09uZVJlbGF0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IHJlbGF0ZWRNb2RlbENsYXNzLCBqb2luVGFibGVNb2RlbENsYXNzIH0gPSByZWxhdGlvblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWQgb2YgW2pvaW5UYWJsZU1vZGVsQ2xhc3MsIHJlbGF0ZWRNb2RlbENsYXNzXSkge1xuICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgc2VsZi1yZWZlcmVuY2VzIGFuZCBnZW5lcmF0ZWQgam9pbiBtb2RlbHM6XG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWQgJiYgcmVsYXRlZCAhPT0gbW9kZWxDbGFzcyAmJiBtb2RlbHNbcmVsYXRlZC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgc29ydEJ5UmVsYXRpb25zKFtyZWxhdGVkXSwgY29sbGVjdGVkLCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgbW9kZWxDbGFzcyB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdOiBtb2RlbENsYXNzLFxuICAgICAgICAgICAgICAgICAgICAuLi5leGNsdWRlZFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29sbGVjdGVkW25hbWVdID0gbW9kZWxDbGFzc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb2xsZWN0ZWQpXG4gICAgfVxuICAgIC8vIFJldHVybiBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgc29ydGVkIG1vZGVscyBhcyBpdHMga2V5L3ZhbHVlIHBhaXJzLlxuICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gcmV2ZXJzZSBmb3IgdGhlIGFib3ZlIGFsZ29yaXRobSB0byBzb3J0IHByb3Blcmx5LFxuICAgIC8vIGFuZCB0aGVuIHJldmVyc2UgdGhlIHJlc3VsdCBiYWNrLlxuICAgIHJldHVybiBzb3J0QnlSZWxhdGlvbnMoT2JqZWN0LnZhbHVlcyhtb2RlbHMpLnJldmVyc2UoKSkucmV2ZXJzZSgpLnJlZHVjZShcbiAgICAgIChtb2RlbHMsIG1vZGVsQ2xhc3MpID0+IHtcbiAgICAgICAgbW9kZWxzW21vZGVsQ2xhc3MubmFtZV0gPSBtb2RlbENsYXNzXG4gICAgICAgIHJldHVybiBtb2RlbHNcbiAgICAgIH0sXG4gICAgICBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgKVxuICB9XG5cbiAgZ2V0TW9kZWwobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1vZGVsc1tuYW1lXSB8fFxuICAgICAgIW5hbWUuZW5kc1dpdGgoJ01vZGVsJykgJiYgdGhpcy5tb2RlbHNbYCR7bmFtZX1Nb2RlbGBdIHx8XG4gICAgICBudWxsXG4gICAgKVxuICB9XG5cbiAgZmluZE1vZGVsKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tb2RlbHMpLmZpbmQoY2FsbGJhY2spXG4gIH1cblxuICBhZGRTZXJ2aWNlcyhzZXJ2aWNlcykge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHNlcnZpY2VdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2VzKSkge1xuICAgICAgLy8gSGFuZGxlIEVTNiBtb2R1bGUgd2VpcmRuZXNzIHRoYXQgY2FuIGhhcHBlbiwgYXBwYXJlbnRseTpcbiAgICAgIGlmIChuYW1lID09PSAnZGVmYXVsdCcgJiYgaXNQbGFpbk9iamVjdChzZXJ2aWNlKSkge1xuICAgICAgICB0aGlzLmFkZFNlcnZpY2VzKHNlcnZpY2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZFNlcnZpY2Uoc2VydmljZSwgbmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRTZXJ2aWNlKHNlcnZpY2UsIG5hbWUpIHtcbiAgICAvLyBBdXRvLWluc3RhbnRpYXRlIGNvbnRyb2xsZXIgY2xhc3NlczpcbiAgICBpZiAoU2VydmljZS5pc1Byb3RvdHlwZU9mKHNlcnZpY2UpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgc2VydmljZSA9IG5ldyBzZXJ2aWNlKHRoaXMsIG5hbWUpXG4gICAgfVxuICAgIGlmICghKHNlcnZpY2UgaW5zdGFuY2VvZiBTZXJ2aWNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlcnZpY2U6ICR7c2VydmljZX1gKVxuICAgIH1cbiAgICAvLyBPbmx5IGFmdGVyIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQsIGBzZXJ2aWNlLm5hbWVgIGlzIGd1YXJhbnRlZWQgdG8gYmVcbiAgICAvLyBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUsIGUuZy4gd2l0aCBhbiBhZnRlci1jb25zdHJ1Y3RvciBjbGFzcyBwcm9wZXJ0eS5cbiAgICAoeyBuYW1lIH0gPSBzZXJ2aWNlKVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnLnNlcnZpY2VzW25hbWVdXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb24gbWlzc2luZyBmb3Igc2VydmljZSAnJHtuYW1lfSdgKVxuICAgIH1cbiAgICAvLyBBcyBhIGNvbnZlbnRpb24sIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgc2VydmljZSBjYW4gYmUgc2V0IHRvIGBmYWxzZWBcbiAgICAvLyBpbiBvcmRlciB0byBlbnRpcmVseSBkZWFjdGl2YXRlIHRoZSBzZXJ2aWNlLlxuICAgIGlmIChjb25maWcgIT09IGZhbHNlKSB7XG4gICAgICBzZXJ2aWNlLnNldHVwKGNvbmZpZylcbiAgICAgIHRoaXMuc2VydmljZXNbbmFtZV0gPSBzZXJ2aWNlXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgc2VydmljZSBpcyBzZXQgdXAsIGNhbGwgYGluaXRpYWxpemUoKWAgd2hpY2ggY2FuIGJlXG4gICAgICAvLyBvdmVycmlkZGVuIGJ5IHNlcnZpY2VzLlxuICAgICAgc2VydmljZS5pbml0aWFsaXplKClcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc1tuYW1lXSB8fCBudWxsXG4gIH1cblxuICBmaW5kU2VydmljZShjYWxsYmFjaykge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VydmljZXMpLmZpbmQoY2FsbGJhY2spXG4gIH1cblxuICBmb3JFYWNoU2VydmljZShjYWxsYmFjaykge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHRoaXMuc2VydmljZXMpLm1hcChjYWxsYmFjaykpXG4gIH1cblxuICBhZGRDb250cm9sbGVycyhjb250cm9sbGVycywgbmFtZXNwYWNlKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29udHJvbGxlcnMpKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hZGRDb250cm9sbGVycyh2YWx1ZSwgbmFtZXNwYWNlID8gYCR7bmFtZXNwYWNlfS8ke2tleX1gIDoga2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRDb250cm9sbGVyKHZhbHVlLCBuYW1lc3BhY2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29udHJvbGxlcihjb250cm9sbGVyLCBuYW1lc3BhY2UpIHtcbiAgICAvLyBDb250cm9sbGVycyByZXF1aXJlIGFkZGl0aW9uYWwgbWlkZGxld2FyZSB0byBiZSBpbnN0YWxsZWQgb25jZS5cbiAgICB0aGlzLnNldHVwQ29udHJvbGxlck1pZGRsZXdhcmUoKVxuICAgIC8vIEF1dG8taW5zdGFudGlhdGUgY29udHJvbGxlciBjbGFzc2VzOlxuICAgIGlmIChDb250cm9sbGVyLmlzUHJvdG90eXBlT2YoY29udHJvbGxlcikpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICBjb250cm9sbGVyID0gbmV3IGNvbnRyb2xsZXIodGhpcywgbmFtZXNwYWNlKVxuICAgIH1cbiAgICBpZiAoIShjb250cm9sbGVyIGluc3RhbmNlb2YgQ29udHJvbGxlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb250cm9sbGVyOiAke2NvbnRyb2xsZXJ9YClcbiAgICB9XG4gICAgLy8gSW5oZXJpdGFuY2Ugb2YgYWN0aW9uIG1ldGhvZHMgY2Fubm90IGhhcHBlbiBpbiB0aGUgY29uc3RydWN0b3IgaXRzZWxmLFxuICAgIC8vIHNvIGNhbGwgc2VwYXJhdGUgYHNldHVwKClgIG1ldGhvZCBhZnRlciBpbiBvcmRlciB0byB0YWtlIGNhcmUgb2YgaXQuXG4gICAgY29udHJvbGxlci5zZXR1cCgpXG4gICAgdGhpcy5jb250cm9sbGVyc1tjb250cm9sbGVyLnVybF0gPSBjb250cm9sbGVyXG4gICAgLy8gTm93IHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgc2V0IHVwLCBjYWxsIGBpbml0aWFsaXplKClgIHdoaWNoIGNhbiBiZVxuICAgIC8vIG92ZXJyaWRkZW4gYnkgY29udHJvbGxlcnMuXG4gICAgY29udHJvbGxlci5pbml0aWFsaXplKClcbiAgICAvLyBFYWNoIGNvbnRyb2xsZXIgY2FuIGFsc28gcHJvdmlkZSBmdXJ0aGVyIG1pZGRsZXdhcmUsIGUuZy5cbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYDpcbiAgICBjb25zdCBtaWRkbGV3YXJlID0gY29udHJvbGxlci5jb21wb3NlKClcbiAgICBpZiAobWlkZGxld2FyZSkge1xuICAgICAgdGhpcy51c2UobWlkZGxld2FyZSlcbiAgICB9XG4gIH1cblxuICBnZXRDb250cm9sbGVyKHVybCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJzW3VybF0gfHwgbnVsbFxuICB9XG5cbiAgZmluZENvbnRyb2xsZXIoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbnRyb2xsZXJzKS5maW5kKGNhbGxiYWNrKVxuICB9XG5cbiAgZ2V0QWRtaW5Db250cm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLmZpbmRDb250cm9sbGVyKFxuICAgICAgY29udHJvbGxlciA9PiBjb250cm9sbGVyIGluc3RhbmNlb2YgQWRtaW5Db250cm9sbGVyXG4gICAgKVxuICB9XG5cbiAgZ2V0QWRtaW5WdWVDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWRtaW5Db250cm9sbGVyKCk/LmdldFZ1ZUNvbmZpZygpIHx8IG51bGxcbiAgfVxuXG4gIGdldEFzc2V0Q29uZmlnKHtcbiAgICBtb2RlbHMgPSBPYmplY3Qua2V5cyh0aGlzLm1vZGVscyksXG4gICAgbm9ybWFsaXplRGJOYW1lcyA9IHRoaXMuY29uZmlnLmtuZXgubm9ybWFsaXplRGJOYW1lc1xuICB9ID0ge30pIHtcbiAgICBjb25zdCBhc3NldENvbmZpZyA9IHt9XG4gICAgZm9yIChjb25zdCBtb2RlbE5hbWUgb2YgbW9kZWxzKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gdGhpcy5tb2RlbHNbbW9kZWxOYW1lXVxuICAgICAgY29uc3QgeyBhc3NldHMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuICAgICAgaWYgKGFzc2V0cykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTW9kZWxOYW1lID0gbm9ybWFsaXplRGJOYW1lc1xuICAgICAgICAgID8gdGhpcy5ub3JtYWxpemVJZGVudGlmaWVyKG1vZGVsTmFtZSlcbiAgICAgICAgICA6IG1vZGVsTmFtZVxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRBc3NldHMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFthc3NldERhdGFQYXRoLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGFzc2V0cykpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfSA9IG1vZGVsQ2xhc3MuZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aChhc3NldERhdGFQYXRoKVxuICAgICAgICAgIGlmIChwcm9wZXJ0eSAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVEYk5hbWVzXG4gICAgICAgICAgICAgID8gdGhpcy5ub3JtYWxpemVJZGVudGlmaWVyKG5hbWUpXG4gICAgICAgICAgICAgIDogbmFtZVxuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBub3JtYWxpemVEYXRhUGF0aChbXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAuLi5wYXJzZURhdGFQYXRoKG5lc3RlZERhdGFQYXRoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0Q29uZmlncyA9IGNvbnZlcnRlZEFzc2V0c1tub3JtYWxpemVkTmFtZV0gfHw9IHt9XG4gICAgICAgICAgICBhc3NldENvbmZpZ3NbZGF0YVBhdGhdID0gY29uZmlnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGVkIGdyYXBoIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXRDb25maWdbbm9ybWFsaXplZE1vZGVsTmFtZV0gPSBjb252ZXJ0ZWRBc3NldHNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFzc2V0Q29uZmlnXG4gIH1cblxuICBhZGRTdG9yYWdlcyhzdG9yYWdlcykge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmFnZXMpKSB7XG4gICAgICB0aGlzLmFkZFN0b3JhZ2UoY29uZmlnLCBuYW1lKVxuICAgIH1cbiAgfVxuXG4gIGFkZFN0b3JhZ2UoY29uZmlnLCBuYW1lKSB7XG4gICAgbGV0IHN0b3JhZ2UgPSBudWxsXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoY29uZmlnKSkge1xuICAgICAgY29uc3Qgc3RvcmFnZUNsYXNzID0gU3RvcmFnZS5nZXQoY29uZmlnLnR5cGUpXG4gICAgICBpZiAoIXN0b3JhZ2VDbGFzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHN0b3JhZ2U6ICR7Y29uZmlnfWApXG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgc3RvcmFnZSA9IG5ldyBzdG9yYWdlQ2xhc3ModGhpcywgY29uZmlnKVxuICAgIH0gZWxzZSBpZiAoY29uZmlnIGluc3RhbmNlb2YgU3RvcmFnZSkge1xuICAgICAgc3RvcmFnZSA9IGNvbmZpZ1xuICAgIH1cbiAgICBpZiAoc3RvcmFnZSkge1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgc3RvcmFnZS5uYW1lID0gbmFtZVxuICAgICAgfVxuICAgICAgdGhpcy5zdG9yYWdlc1tzdG9yYWdlLm5hbWVdID0gc3RvcmFnZVxuICAgIH1cbiAgICByZXR1cm4gc3RvcmFnZVxuICB9XG5cbiAgZ2V0U3RvcmFnZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZXNbbmFtZV0gfHwgbnVsbFxuICB9XG5cbiAgY29tcGlsZVZhbGlkYXRvcihqc29uU2NoZW1hLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGpzb25TY2hlbWFcbiAgICAgID8gdGhpcy52YWxpZGF0b3IuY29tcGlsZShqc29uU2NoZW1hLCBvcHRpb25zKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBjb21waWxlUGFyYW1ldGVyc1ZhbGlkYXRvcihwYXJhbWV0ZXJzLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBsaXN0ID0gW11cbiAgICBjb25zdCB7IGRhdGFOYW1lID0gJ2RhdGEnIH0gPSBvcHRpb25zXG5cbiAgICBsZXQgcHJvcGVydGllcyA9IG51bGxcbiAgICBjb25zdCBhZGRQYXJhbWV0ZXIgPSAobmFtZSwgc2NoZW1hKSA9PiB7XG4gICAgICBsaXN0LnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lID8/IG51bGwsXG4gICAgICAgIC4uLnNjaGVtYVxuICAgICAgfSlcbiAgICAgIGlmICghc2NoZW1hLm1lbWJlcikge1xuICAgICAgICBwcm9wZXJ0aWVzIHx8PSB7fVxuICAgICAgICBwcm9wZXJ0aWVzW25hbWUgfHwgZGF0YU5hbWVdID0gc2NoZW1hXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBvZiBwYXJhbWV0ZXJzIGRlZmluaXRpb25zOlxuICAgIC8vIC0gQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHNjaGVtYXMsIG5hbWVkIGJ5IHRoZWlyIGBuYW1lYCBrZXkuXG4gICAgLy8gLSBBbiBvYmplY3Qgb2YgcGFyYW1ldGVyIHNjaGVtYXMsIG5hbWVkIGJ5IHRoZSBrZXkgdW5kZXIgd2hpY2ggZWFjaFxuICAgIC8vICAgc2NoZW1hIGlzIHN0b3JlZCBpbiB0aGUgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgYW4gYXJyYXkgaXMgcGFzc2VkLCB0aGVuIHRoZSBjb250cm9sbGVyIGFjdGlvbnMgcmVjZWl2ZXMgdGhlXG4gICAgLy8gcGFyYW1ldGVycyBhcyBzZXBhcmF0ZSBhcmd1bWVudHMuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZW4gdGhlXG4gICAgLy8gYWN0aW9ucyByZWNlaXZlcyBvbmUgcGFyYW1ldGVyIG9iamVjdCB3aGVyZSB1bmRlciB0aGUgc2FtZSBrZXlzIHRoZVxuICAgIC8vIHNwZWNpZmllZCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBzdG9yZWQuXG4gICAgbGV0IGFzT2JqZWN0ID0gZmFsc2VcbiAgICBpZiAoaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIC4uLnNjaGVtYSB9IG9mIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgYWRkUGFyYW1ldGVyKG5hbWUsIHNjaGVtYSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBhcmFtZXRlcnMpKSB7XG4gICAgICBhc09iamVjdCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycykpIHtcbiAgICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICAgIGFkZFBhcmFtZXRlcihuYW1lLCBzY2hlbWEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXJzIGRlZmluaXRpb246ICR7cGFyYW1ldGVyc31gKVxuICAgIH1cbiAgICAvLyBOT1RFOiBJZiBwcm9wZXJ0aWVzIGlzIG51bGwsIHNjaGVtYSBhbmQgdmFsaWRhdGUgd2lsbCBiZWNvbWUgbnVsbCB0b28uXG4gICAgLy8gTk9URTogSWYgaXQgaXMgbm90IG51bGwsIGl0IHdpbGwgZ2V0IGV4cGFuZGVkIHRvIGFuIG9iamVjdCBzY2hlbWEuXG4gICAgY29uc3Qgc2NoZW1hID0gY29udmVydFNjaGVtYShwcm9wZXJ0aWVzLCBvcHRpb25zKVxuICAgIGNvbnN0IHZhbGlkYXRlID0gdGhpcy5jb21waWxlVmFsaWRhdG9yKHNjaGVtYSwge1xuICAgICAgLy8gRm9yIHBhcmFtZXRlcnMsIGFsd2F5cyBjb2VyY2UgdHlwZXMsIGluY2x1ZGluZyBhcnJheXMuXG4gICAgICBjb2VyY2VUeXBlczogJ2FycmF5JyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KVxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIGFwcDogdGhpcyxcbiAgICAgIHZhbGlkYXRvcjogdGhpcy52YWxpZGF0b3IsXG4gICAgICBvcHRpb25zXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsaXN0LFxuICAgICAgc2NoZW1hLFxuICAgICAgYXNPYmplY3QsXG4gICAgICBkYXRhTmFtZSxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxuICAgICAgICAvLyBVc2UgYGNhbGwoKWAgdG8gcGFzcyBjdHggYXMgY29udGV4dCB0byBBanYsIHNlZSBwYXNzQ29udGV4dDpcbiAgICAgICAgPyBkYXRhID0+IHZhbGlkYXRlLmNhbGwoY3R4LCBkYXRhKVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cblxuICBjcmVhdGVWYWxpZGF0aW9uRXJyb3IoeyB0eXBlLCBtZXNzYWdlLCBlcnJvcnMsIG9wdGlvbnMsIGpzb24gfSkge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgIHR5cGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZXJyb3JzOiB0aGlzLnZhbGlkYXRvci5wYXJzZUVycm9ycyhlcnJvcnMsIG9wdGlvbnMpLFxuICAgICAgLy8gT25seSBpbmNsdWRlIHRoZSBKU09OIGRhdGEgaW4gdGhlIGVycm9yIGlmIGBsb2cuZXJyb3JzLmpzb25gaXMgc2V0LlxuICAgICAganNvbjogdGhpcy5jb25maWcubG9nLmVycm9ycz8uanNvbiA/IGpzb24gOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgY3JlYXRlRGF0YWJhc2VFcnJvcihlcnJvcikge1xuICAgIC8vIFJlbW92ZSBrbmV4IFNRTCBxdWVyeSBhbmQgbW92ZSB0byBzZXBhcmF0ZSBgc3FsYCBwcm9wZXJ0eS5cbiAgICAvLyBUT0RPOiBGaXggdGhpcyBwcm9wZXJseSBpbiBLbmV4IC8gT2JqZWN0aW9uIGluc3RlYWQsIHNlZTpcbiAgICAvLyBodHRwczovL2dpdHRlci5pbS9WaW5jaXQvb2JqZWN0aW9uLmpzP2F0PTVhNjg3MjhmNWE5ZWJlNGY3NWNhNDBiMFxuICAgIGNvbnN0IFssIHNxbCwgbWVzc2FnZV0gPSBlcnJvci5tZXNzYWdlLm1hdGNoKC9eKFtcXHNcXFNdKikgLSAoW1xcc1xcU10qPykkLykgfHxcbiAgICAgIFtudWxsLCBudWxsLCBlcnJvci5tZXNzYWdlXVxuICAgIHJldHVybiBuZXcgRGF0YWJhc2VFcnJvcihlcnJvciwge1xuICAgICAgbWVzc2FnZSxcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSB0aGUgU1FMIHF1ZXJ5IGluIHRoZSBlcnJvciBpZiBgbG9nLmVycm9ycy5zcWxgaXMgc2V0LlxuICAgICAgc3FsOiB0aGlzLmNvbmZpZy5sb2cuZXJyb3JzPy5zcWwgPyBzcWwgOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgc2V0dXBHbG9iYWxNaWRkbGV3YXJlKCkge1xuICAgIGNvbnN0IHsgYXBwLCBsb2cgfSA9IHRoaXMuY29uZmlnXG5cbiAgICB0aGlzLnVzZShhdHRhY2hMb2dnZXIodGhpcy5sb2dnZXIpKVxuXG4gICAgaWYgKGFwcC5yZXNwb25zZVRpbWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVzZShyZXNwb25zZVRpbWUoZ2V0T3B0aW9ucyhhcHAucmVzcG9uc2VUaW1lKSkpXG4gICAgfVxuICAgIGlmIChsb2cucmVxdWVzdHMpIHtcbiAgICAgIHRoaXMudXNlKGxvZ1JlcXVlc3RzKCkpXG4gICAgfVxuICAgIC8vIE5lZWRzIHRvIGJlIHBvc2l0aW9uZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgbG9nZ2VyIHRvIGxvZyB0aGUgY29ycmVjdFxuICAgIC8vIHJlc3BvbnNlIHN0YXR1cy5cbiAgICB0aGlzLnVzZShoYW5kbGVFcnJvcigpKVxuICAgIGlmIChhcHAuaGVsbWV0ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy51c2UoaGVsbWV0KGdldE9wdGlvbnMoYXBwLmhlbG1ldCkpKVxuICAgIH1cbiAgICBpZiAoYXBwLmNvcnMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVzZShjb3JzKGdldE9wdGlvbnMoYXBwLmNvcnMpKSlcbiAgICB9XG4gICAgaWYgKGFwcC5jb21wcmVzcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXNlKGNvbXByZXNzKG1lcmdlKFxuICAgICAgICB7XG4gICAgICAgICAgLy8gVXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0IGZvciBCcm90bGkgY29tcHJlc3Npb24uXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rb2Fqcy9jb21wcmVzcy9pc3N1ZXMvMTI2XG4gICAgICAgICAgYnI6IHtcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICBbemxpYi5jb25zdGFudHMuQlJPVExJX1BBUkFNX1FVQUxJVFldOiA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRPcHRpb25zKGFwcC5jb21wcmVzcylcbiAgICAgICkpKVxuICAgIH1cbiAgICBpZiAoYXBwLmV0YWcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVzZShjb25kaXRpb25hbCgpKVxuICAgICAgdGhpcy51c2UoZXRhZygpKVxuICAgIH1cbiAgfVxuXG4gIHNldHVwQ29udHJvbGxlck1pZGRsZXdhcmUoKSB7XG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgYXV0b21hdGljIGBzZXR1cEdsb2JhbE1pZGRsZXdhcmUoKWAgc28gdGhhdFxuICAgIC8vIGFwcHMgY2FuIHNldCB1cCB0aGUgc3RhdGljIHNlcnZpbmcgb2YgYXNzZXRzIGJlZm9yZSBpbnN0YWxsaW5nIHRoZVxuICAgIC8vIHNlc3Npb24gYW5kIHBhc3Nwb3J0IG1pZGRsZXdhcmUuIEl0IGlzIGNhbGxlZCBmcm9tIGBhZGRDb250cm9sbGVyKClgLlxuICAgIC8vIFVzZSBhIGZsYWcgdG8gb25seSBpbnN0YWxsIHRoZSBtaWRkbGV3YXJlIG9uY2U6XG4gICAgaWYgKCF0aGlzLmhhc0NvbnRyb2xsZXJNaWRkbGV3YXJlKSB7XG4gICAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5jb25maWdcbiAgICAgIC8vIFNlcXVlbmNlIGlzIGltcG9ydGFudDpcbiAgICAgIC8vIDEuIGJvZHkgcGFyc2VyXG4gICAgICB0aGlzLnVzZShib2R5UGFyc2VyKGdldE9wdGlvbnMoYXBwLmJvZHlQYXJzZXIpKSlcbiAgICAgIC8vIDIuIGZpbmQgcm91dGUgZnJvbSByb3V0ZXMgaW5zdGFsbGVkIGJ5IGNvbnRyb2xsZXJzLlxuICAgICAgdGhpcy51c2UoZmluZFJvdXRlKHRoaXMucm91dGVyKSlcbiAgICAgIC8vIDMuIHJlc3BlY3QgdHJhbnNhY3RlZCBzZXR0aW5ncywgY3JlYXRlIGFuZCBoYW5kbGUgdHJhbnNhY3Rpb25zLlxuICAgICAgdGhpcy51c2UoY3JlYXRlVHJhbnNhY3Rpb24oKSlcbiAgICAgIC8vIDQuIHNlc3Npb25cbiAgICAgIGlmIChhcHAuc2Vzc2lvbikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0gPSBnZXRPcHRpb25zKGFwcC5zZXNzaW9uKVxuICAgICAgICBpZiAobW9kZWxDbGFzcykge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIENvbnRleHRTdG9yZSB0aGF0IHJlc29sdmVkIHRoZSBzcGVjaWZpZWQgbW9kZWwgY2xhc3MsXG4gICAgICAgICAgLy8gdXNlcyBpdCB0byBwZXJzaXN0IGFuZCByZXRyaWV2ZSB0aGUgc2Vzc2lvbiwgYW5kIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICAvLyBiaW5kcyBhbGwgZGIgb3BlcmF0aW9ucyB0byBgY3R4LnRyYW5zYWN0aW9uYCwgaWYgaXQgaXMgc2V0LlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgICAgb3B0aW9ucy5Db250ZXh0U3RvcmUgPSBTZXNzaW9uU3RvcmUobW9kZWxDbGFzcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZShzZXNzaW9uKG9wdGlvbnMsIHRoaXMpKVxuICAgICAgfVxuICAgICAgLy8gNS4gcGFzc3BvcnRcbiAgICAgIGlmIChhcHAucGFzc3BvcnQpIHtcbiAgICAgICAgdGhpcy51c2UocGFzc3BvcnQuaW5pdGlhbGl6ZSgpKVxuICAgICAgICBpZiAoYXBwLnNlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLnVzZShwYXNzcG9ydC5zZXNzaW9uKCkpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2UoaGFuZGxlVXNlcigpKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBmaW5hbGx5IGhhbmRsZSB0aGUgZm91bmQgcm91dGUsIG9yIHNldCBzdGF0dXMgLyBhbGxvdyBhY2NvcmRpbmdseS5cbiAgICAgIHRoaXMudXNlKGhhbmRsZVJvdXRlKCkpXG4gICAgICB0aGlzLmhhc0NvbnRyb2xsZXJNaWRkbGV3YXJlID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHNldHVwTG9nZ2VyKCkge1xuICAgIGNvbnN0IHsgZXJyLCByZXEsIHJlcyB9ID0gcGluby5zdGRTZXJpYWxpemVyc1xuICAgIC8vIE9ubHkgaW5jbHVkZSBgaWRgIGZyb20gdGhlIHVzZXIsIHRvIG5vdCBpbmFkdmVydGVudGx5IGxvZyBQSUkuXG4gICAgY29uc3QgdXNlciA9IHVzZXIgPT4gKHsgaWQ6IHVzZXIuaWQgfSlcbiAgICBjb25zdCBzZXJpYWxpemVycyA9IHsgZXJyLCByZXEsIHJlcywgdXNlciB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBwaW5vKG1lcmdlKFxuICAgICAge1xuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBzZXJpYWxpemVycyxcbiAgICAgICAgcHJldHR5UHJpbnQ6IHtcbiAgICAgICAgICAvLyBMaXN0IG9mIGtleXMgdG8gaWdub3JlIGluIHByZXR0eSBtb2RlLlxuICAgICAgICAgIGlnbm9yZTogJ3JlcSxyZXMsZHVyYXRpb25Ncyx1c2VyLHJlcXVlc3RJZCcsXG4gICAgICAgICAgLy8gU1lTIHRvIHVzZSBzeXN0ZW0gdGltZSBhbmQgbm90IFVUQy5cbiAgICAgICAgICB0cmFuc2xhdGVUaW1lOiAnU1lTOkhIOk1NOnNzLmwnXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJlZGFjdCBjb21tb24gc2Vuc2l0aXZlIGhlYWRlcnMuXG4gICAgICAgIHJlZGFjdDogW1xuICAgICAgICAgICcqLmhlYWRlcnNbXCJjb29raWVcIl0nLFxuICAgICAgICAgICcqLmhlYWRlcnNbXCJzZXQtY29va2llXCJdJyxcbiAgICAgICAgICAnKi5oZWFkZXJzW1wiYXV0aG9yaXphdGlvblwiXSdcbiAgICAgICAgXSxcbiAgICAgICAgYmFzZTogbnVsbCAvLyBubyBwaWQsaG9zdG5hbWUsbmFtZVxuICAgICAgfSxcbiAgICAgIGdldE9wdGlvbnModGhpcy5jb25maWcubG9nZ2VyKVxuICAgICkpXG5cbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlci5jaGlsZCh7IG5hbWU6ICdhcHAnIH0pXG4gIH1cblxuICBzZXR1cEtuZXgoKSB7XG4gICAgbGV0IHsga25leCwgbG9nIH0gPSB0aGlzLmNvbmZpZ1xuICAgIGlmIChrbmV4Py5jbGllbnQpIHtcbiAgICAgIGNvbnN0IHNuYWtlQ2FzZU9wdGlvbnMgPSBrbmV4Lm5vcm1hbGl6ZURiTmFtZXMgPT09IHRydWVcbiAgICAgICAgPyB7fVxuICAgICAgICA6IGtuZXgubm9ybWFsaXplRGJOYW1lc1xuICAgICAgaWYgKHNuYWtlQ2FzZU9wdGlvbnMpIHtcbiAgICAgICAga25leCA9IHtcbiAgICAgICAgICAuLi5rbmV4LFxuICAgICAgICAgIC4uLmtuZXhTbmFrZUNhc2VNYXBwZXJzKHNuYWtlQ2FzZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua25leCA9IEtuZXgoa25leClcbiAgICAgIGlmIChsb2cuc3FsKSB7XG4gICAgICAgIHRoaXMuc2V0dXBLbmV4TG9nZ2luZygpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0dXBLbmV4TG9nZ2luZygpIHtcbiAgICBjb25zdCBzdGFydFRpbWVzID0ge31cbiAgICBjb25zdCBsb2dnZXIgPSB0aGlzLmxvZ2dlci5jaGlsZCh7IG5hbWU6ICdzcWwnIH0pXG4gICAgZnVuY3Rpb24gZW5kKHF1ZXJ5LCB7IHJlc3BvbnNlLCBlcnJvciB9KSB7XG4gICAgICBjb25zdCBpZCA9IHF1ZXJ5Ll9fa25leFF1ZXJ5VWlkXG4gICAgICBjb25zdCBkaWZmID0gcHJvY2Vzcy5ocnRpbWUoc3RhcnRUaW1lc1tpZF0pXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGRpZmZbMF0gKiAxZTMgKyBkaWZmWzFdIC8gMWU2XG4gICAgICBkZWxldGUgc3RhcnRUaW1lc1tpZF1cbiAgICAgIGNvbnN0IHsgc3FsLCBiaW5kaW5ncyB9ID0gcXVlcnlcbiAgICAgIHJlc3BvbnNlID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZSkuZmlsdGVyKFxuICAgICAgICAgIChba2V5XSkgPT4gIWtleS5zdGFydHNXaXRoKCdfJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgbG9nZ2VyLmluZm8oeyBkdXJhdGlvbiwgYmluZGluZ3MsIHJlc3BvbnNlLCBlcnJvciB9LCBzcWwpXG4gICAgfVxuXG4gICAgdGhpcy5rbmV4XG4gICAgICAub24oJ3F1ZXJ5JywgcXVlcnkgPT4ge1xuICAgICAgICBzdGFydFRpbWVzW3F1ZXJ5Ll9fa25leFF1ZXJ5VWlkXSA9IHByb2Nlc3MuaHJ0aW1lKClcbiAgICAgIH0pXG4gICAgICAub24oJ3F1ZXJ5LXJlc3BvbnNlJywgKHJlc3BvbnNlLCBxdWVyeSkgPT4ge1xuICAgICAgICBlbmQocXVlcnksIHsgcmVzcG9uc2UgfSlcbiAgICAgIH0pXG4gICAgICAub24oJ3F1ZXJ5LWVycm9yJywgKGVycm9yLCBxdWVyeSkgPT4ge1xuICAgICAgICBlbmQocXVlcnksIHsgZXJyb3IgfSlcbiAgICAgIH0pXG4gIH1cblxuICBub3JtYWxpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LmNsaWVudC53cmFwSWRlbnRpZmllcihpZGVudGlmaWVyKS5yZXBsYWNlKC9bJ2BcIl0vZywgJycpXG4gIH1cblxuICBkZW5vcm1hbGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMua25leC5jbGllbnQucG9zdFByb2Nlc3NSZXNwb25zZSh7IFtpZGVudGlmaWVyXTogMSB9KVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopWzBdXG4gIH1cblxuICBub3JtYWxpemVQYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXBwLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlKHBhdGgpIDogcGF0aFxuICB9XG5cbiAgZm9ybWF0RXJyb3IoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyci50b0pTT05cbiAgICAgID8gZm9ybWF0SnNvbihlcnIudG9KU09OKCkpXG4gICAgICA6IGVyci5tZXNzYWdlIHx8IGVyclxuICAgIGNvbnN0IHN0ciA9IGAke2Vyci5uYW1lfTogJHttZXNzYWdlfWBcbiAgICByZXR1cm4gZXJyLnN0YWNrICYmIHRoaXMuY29uZmlnLmxvZy5lcnJvcnM/LnN0YWNrICE9PSBmYWxzZVxuICAgICAgPyBgJHtzdHJ9XFxuJHtlcnIuc3RhY2suc3BsaXQoL1xcbnxcXHJcXG58XFxyLykuc2xpY2UoMSkuam9pbihvcy5FT0wpfWBcbiAgICAgIDogc3RyXG4gIH1cblxuICBsb2dFcnJvcihlcnIsIGN0eCkge1xuICAgIGlmICghZXJyLmV4cG9zZSAmJiAhdGhpcy5zaWxlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmZvcm1hdEVycm9yKGVycilcbiAgICAgICAgY29uc3QgbGV2ZWwgPVxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgJiYgZXJyLnN0YXR1cyA8IDUwMCA/ICdpbmZvJyA6ICdlcnJvcidcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gY3R4Py5sb2dnZXIgfHwgdGhpcy5sb2dnZXJcbiAgICAgICAgbG9nZ2VyW2xldmVsXSh0ZXh0KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbG9nIGVycm9yJywgZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcubG9nLmVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub24oJ2Vycm9yJywgdGhpcy5sb2dFcnJvcilcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmU6c3RhcnQnKVxuICAgIGF3YWl0IHRoaXMuZm9yRWFjaFNlcnZpY2Uoc2VydmljZSA9PiBzZXJ2aWNlLnN0YXJ0KCkpXG4gICAgY29uc3Qge1xuICAgICAgc2VydmVyOiB7IGhvc3QsIHBvcnQgfSxcbiAgICAgIGVudlxuICAgIH0gPSB0aGlzLmNvbmZpZ1xuICAgIHRoaXMuc2VydmVyID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gdGhpcy5saXN0ZW4ocG9ydCwgaG9zdCwgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHBvcnQgfSA9IHNlcnZlci5hZGRyZXNzKClcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIGAke2Vudn0gc2VydmVyIHN0YXJ0ZWQgYXQgaHR0cDovLyR7aG9zdH06JHtwb3J0fWBcbiAgICAgICAgKVxuICAgICAgICByZXNvbHZlKHNlcnZlcilcbiAgICAgIH0pXG4gICAgICBpZiAoIXNlcnZlcikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBVbmFibGUgdG8gc3RhcnQgc2VydmVyIGF0IGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuZW1pdCgnYWZ0ZXI6c3RhcnQnKVxuICB9XG5cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZTpzdG9wJylcbiAgICB0aGlzLnNlcnZlciA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHsgc2VydmVyIH0gPSB0aGlzXG4gICAgICBpZiAoc2VydmVyKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZShlcnIgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2xvc2UgdGhlIHNlcnZlcixcbiAgICAgICAgLy8gIGV2ZW4gaWYgc29ja2V0cyBhcmUgc3RpbGwgb3Blbi5cbiAgICAgICAgLy8gIFRha2VuIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2ODMwMDcyLlxuICAgICAgICAvLyAgQSBwcm9wZXIgc29sdXRpb24gd291bGQgYmUgdG8gdXNlIGEgbGlicmFyeSwgZXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9nb2RhZGR5L3Rlcm1pbnVzXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiBzZXJ2ZXIuZW1pdCgnY2xvc2UnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1NlcnZlciBpcyBub3QgcnVubmluZycpKVxuICAgICAgfVxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5mb3JFYWNoU2VydmljZShzZXJ2aWNlID0+IHNlcnZpY2Uuc3RvcCgpKVxuICAgIGF3YWl0IHRoaXMuZW1pdCgnYWZ0ZXI6c3RvcCcpXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvZy5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9mZignZXJyb3InLCB0aGlzLmxvZ0Vycm9yKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0T3JFeGl0KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nRXJyb3IoZXJyKVxuICAgICAgcHJvY2Vzcy5leGl0KC0xKVxuICAgIH1cbiAgfVxuXG4gIC8vIEFzc2V0cyBoYW5kbGluZ1xuXG4gIGFzeW5jIGNyZWF0ZUFzc2V0cyhzdG9yYWdlLCBmaWxlcywgY291bnQgPSAwLCB0cnggPSBudWxsKSB7XG4gICAgY29uc3QgQXNzZXRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoJ0Fzc2V0JylcbiAgICBpZiAoQXNzZXRNb2RlbCkge1xuICAgICAgY29uc3QgYXNzZXRzID0gZmlsZXMubWFwKGZpbGUgPT4gKHtcbiAgICAgICAga2V5OiBmaWxlLmtleSxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgc3RvcmFnZTogc3RvcmFnZS5uYW1lLFxuICAgICAgICBjb3VudFxuICAgICAgfSkpXG4gICAgICByZXR1cm4gQXNzZXRNb2RlbFxuICAgICAgICAucXVlcnkodHJ4KVxuICAgICAgICAuaW5zZXJ0KGFzc2V0cylcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUFkZGRlZEFuZFJlbW92ZWRBc3NldHMoXG4gICAgc3RvcmFnZSxcbiAgICBhZGRlZEZpbGVzLFxuICAgIHJlbW92ZWRGaWxlcyxcbiAgICB0cnggPSBudWxsXG4gICkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFzc2V0czoge1xuICAgICAgICBjbGVhbnVwVGltZVRocmVzaG9sZCA9IDBcbiAgICAgIH0gPSB7fVxuICAgIH0gPSB0aGlzLmNvbmZpZ1xuICAgIC8vIE9ubHkgcmVtb3ZlIHVudXNlZCBhc3NldHMgdGhhdCBoYXZlbid0IHNlZW4gY2hhbmdlcyBmb3IgZ2l2ZW4gdGltZWZyYW1lLlxuICAgIGNvbnN0IHRpbWVUaHJlc2hvbGQgPSBpc1N0cmluZyhjbGVhbnVwVGltZVRocmVzaG9sZClcbiAgICAgID8gcGFyc2VEdXJhdGlvbihjbGVhbnVwVGltZVRocmVzaG9sZClcbiAgICAgIDogY2xlYW51cFRpbWVUaHJlc2hvbGRcblxuICAgIGNvbnN0IGltcG9ydGVkRmlsZXMgPSBbXVxuICAgIGNvbnN0IEFzc2V0TW9kZWwgPSB0aGlzLmdldE1vZGVsKCdBc3NldCcpXG4gICAgaWYgKEFzc2V0TW9kZWwpIHtcbiAgICAgIGltcG9ydGVkRmlsZXMucHVzaChcbiAgICAgICAgLi4uYXdhaXQgdGhpcy5hZGRGb3JlaWduQXNzZXRzKHN0b3JhZ2UsIGFkZGVkRmlsZXMsIHRyeClcbiAgICAgIClcbiAgICAgIGlmIChcbiAgICAgICAgYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgIHJlbW92ZWRGaWxlcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hhbmdlQ291bnQgPSAoZmlsZXMsIGluY3JlbWVudCkgPT4gKFxuICAgICAgICAgIGZpbGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBBc3NldE1vZGVsLnF1ZXJ5KHRyeClcbiAgICAgICAgICAgIC53aGVyZUluKCdrZXknLCBmaWxlcy5tYXAoZmlsZSA9PiBmaWxlLmtleSkpXG4gICAgICAgICAgICAuaW5jcmVtZW50KCdjb3VudCcsIGluY3JlbWVudClcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY2hhbmdlQ291bnQoYWRkZWRGaWxlcywgMSksXG4gICAgICAgICAgY2hhbmdlQ291bnQocmVtb3ZlZEZpbGVzLCAtMSlcbiAgICAgICAgXSlcbiAgICAgICAgaWYgKHRpbWVUaHJlc2hvbGQgPiAwKSB7XG4gICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgIC8vIERvbid0IHBhc3MgYHRyeGAgaGVyZSwgYXMgd2Ugd2FudCB0aGlzIGRlbGF5ZWQgZXhlY3V0aW9uIHRvXG4gICAgICAgICAgICAvLyBjcmVhdGUgaXRzIG93biB0cmFuc2FjdGlvbi5cbiAgICAgICAgICAgICgpID0+IHRoaXMucmVsZWFzZVVudXNlZEFzc2V0cyh0aW1lVGhyZXNob2xkKSxcbiAgICAgICAgICAgIHRpbWVUaHJlc2hvbGRcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gZXhlY3V0ZSByZWxlYXNlVW51c2VkQXNzZXRzKCkgaW1tZWRpYXRlbHkgaW4gdGhlIHNhbWVcbiAgICAgIC8vIHRyYW5zYWN0aW9uLCB0byBwb3RlbnRpYWxseSBjbGVhbiB1cCBvdGhlciBwZW5kaW5nIGFzc2V0cy5cbiAgICAgIGF3YWl0IHRoaXMucmVsZWFzZVVudXNlZEFzc2V0cyh0aW1lVGhyZXNob2xkLCB0cngpXG4gICAgICByZXR1cm4gaW1wb3J0ZWRGaWxlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZEZvcmVpZ25Bc3NldHMoc3RvcmFnZSwgZmlsZXMsIHRyeCA9IG51bGwpIHtcbiAgICBjb25zdCBpbXBvcnRlZEZpbGVzID0gW11cbiAgICBjb25zdCBBc3NldE1vZGVsID0gdGhpcy5nZXRNb2RlbCgnQXNzZXQnKVxuICAgIGlmIChBc3NldE1vZGVsKSB7XG4gICAgICAvLyBGaW5kIG1pc3NpbmcgYXNzZXRzIChjb3BpZWQgZnJvbSBhbm90aGVyIHN5c3RlbSksIGFuZCBhZGQgdGhlbS5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlcy5tYXAoYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBBc3NldE1vZGVsLnF1ZXJ5KHRyeCkuZmluZE9uZSgna2V5JywgZmlsZS5rZXkpXG4gICAgICAgICAgaWYgKCFhc3NldCkge1xuICAgICAgICAgICAgaWYgKGZpbGUuZGF0YSB8fCBmaWxlLnVybCkge1xuICAgICAgICAgICAgICBsZXQgeyBkYXRhIH0gPSBmaWxlXG4gICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgICAgIGAke1xuICAgICAgICAgICAgICAgICAgICBjaGFsay5yZWQoJ0lORk86JylcbiAgICAgICAgICAgICAgICAgIH0gQXNzZXQgJHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbGsuZ3JlZW4oYCcke2ZpbGUubmFtZX0nYClcbiAgICAgICAgICAgICAgICAgIH0gaXMgZnJvbSBhIGZvcmVpZ24gc291cmNlLCBmZXRjaGluZyBmcm9tICR7XG4gICAgICAgICAgICAgICAgICAgIGNoYWxrLmdyZWVuKGAnJHtmaWxlLnVybH0nYClcbiAgICAgICAgICAgICAgICAgIH0gYW5kIGFkZGluZyB0byBzdG9yYWdlICR7XG4gICAgICAgICAgICAgICAgICAgIGNoYWxrLmdyZWVuKGAnJHtzdG9yYWdlLm5hbWV9J2ApXG4gICAgICAgICAgICAgICAgICB9Li4uYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgICAgICAgIHVybDogZmlsZS51cmwsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgaW1wb3J0ZWRGaWxlID0gYXdhaXQgc3RvcmFnZS5hZGRGaWxlKGZpbGUsIGRhdGEpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIFtpbXBvcnRlZEZpbGVdLCAwLCB0cngpXG4gICAgICAgICAgICAgIC8vIE1lcmdlIGJhY2sgdGhlIGNoYW5nZWQgZmlsZSBwcm9wZXJ0aWVzIGludG8gdGhlIGFjdHVhbCBmaWxlc1xuICAgICAgICAgICAgICAvLyBvYmplY3QsIHNvIHRoYXQgdGhlIGRhdGEgZnJvbSB0aGUgc3RhdGljIG1vZGVsIGhvb2sgY2FuIGJlIHVzZWRcbiAgICAgICAgICAgICAgLy8gZGlyZWN0bHkgZm9yIHRoZSBhY3R1YWwgcnVubmluZyBxdWVyeS5cbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlLCBpbXBvcnRlZEZpbGUpXG4gICAgICAgICAgICAgIGltcG9ydGVkRmlsZXMucHVzaChpbXBvcnRlZEZpbGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXRFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIGltcG9ydCBhc3NldCBmcm9tIGZvcmVpZ24gc291cmNlOiAnJHtcbiAgICAgICAgICAgICAgICAgIGZpbGUubmFtZVxuICAgICAgICAgICAgICAgIH0nICgnJHtcbiAgICAgICAgICAgICAgICAgIGZpbGUua2V5XG4gICAgICAgICAgICAgICAgfScpYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFzc2V0IGlzIGZyb20gYSBmb3JlaWduIHNvdXJjZSwgYnV0IHdhcyBhbHJlYWR5IGltcG9ydGVkIGFuZCBjYW5cbiAgICAgICAgICAgIC8vIGJlIHJldXNlZC4gU2VlIGFib3ZlIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGlzIG1lcmdlLlxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlLCBhc3NldC5maWxlKVxuICAgICAgICAgICAgLy8gTk9URTogTm8gbmVlZCB0byBhZGQgYGZpbGVgIHRvIGBpbXBvcnRlZEZpbGVzYCwgc2luY2UgaXQnc1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWVuIGltcG9ydGVkIHRvIHRoZSBzdG9yYWdlIGJlZm9yZS5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBpbXBvcnRlZEZpbGVzXG4gIH1cblxuICBhc3luYyBoYW5kbGVNb2RpZmllZEFzc2V0cyhzdG9yYWdlLCBmaWxlcywgdHJ4ID0gbnVsbCkge1xuICAgIGNvbnN0IG1vZGlmaWVkRmlsZXMgPSBbXVxuICAgIGNvbnN0IEFzc2V0TW9kZWwgPSB0aGlzLmdldE1vZGVsKCdBc3NldCcpXG4gICAgaWYgKEFzc2V0TW9kZWwpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlcy5tYXAoYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgICAgaWYgKGZpbGUuZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBBc3NldE1vZGVsLnF1ZXJ5KHRyeCkuZmluZE9uZSgna2V5JywgZmlsZS5rZXkpXG4gICAgICAgICAgICBpZiAoYXNzZXQpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZEZpbGUgPSBhd2FpdCBzdG9yYWdlLmFkZEZpbGUoZmlsZSwgZmlsZS5kYXRhKVxuICAgICAgICAgICAgICAvLyBNZXJnZSBiYWNrIHRoZSBjaGFuZ2VkIGZpbGUgcHJvcGVydGllcyBpbnRvIHRoZSBhY3R1YWwgZmlsZXNcbiAgICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGF0IHRoZSBkYXRhIGZyb20gdGhlIHN0YXRpYyBtb2RlbCBob29rIGNhbiBiZSB1c2VkXG4gICAgICAgICAgICAgIC8vIGRpcmVjdGx5IGZvciB0aGUgYWN0dWFsIHJ1bm5pbmcgcXVlcnkuXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZSwgY2hhbmdlZEZpbGUpXG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMucHVzaChjaGFuZ2VkRmlsZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NldEVycm9yKFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gdXBkYXRlIG1vZGlmaWVkIGFzc2V0IGZyb20gbWVtb3J5IHNvdXJjZTogJyR7XG4gICAgICAgICAgICAgICAgICBmaWxlLm5hbWVcbiAgICAgICAgICAgICAgICB9JyAoJyR7XG4gICAgICAgICAgICAgICAgICBmaWxlLmtleVxuICAgICAgICAgICAgICAgIH0nKWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkRmlsZXNcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VVbnVzZWRBc3NldHModGltZVRocmVzaG9sZCA9IDAsIHRyeCA9IG51bGwpIHtcbiAgICBjb25zdCBBc3NldE1vZGVsID0gdGhpcy5nZXRNb2RlbCgnQXNzZXQnKVxuICAgIGlmIChBc3NldE1vZGVsKSB7XG4gICAgICByZXR1cm4gQXNzZXRNb2RlbC50cmFuc2FjdGlvbih0cngsIGFzeW5jIHRyeCA9PiB7XG4gICAgICAgIC8vIERldGVybWluZSB0aGUgdGltZSB0aHJlc2hvbGQgaW4gSlMgaW5zdGVhZCBvZiBTUUwsIGFzIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIGVhc3kgY3Jvc3MtU1FMIHdheSB0byBkbyBgbm93KCkgLSBpbnRlcnZhbCBYIGhvdXJzYDpcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIHRpbWVUaHJlc2hvbGQpXG4gICAgICAgIGNvbnN0IG9ycGhhbmVkQXNzZXRzID0gYXdhaXQgQXNzZXRNb2RlbFxuICAgICAgICAgIC5xdWVyeSh0cngpXG4gICAgICAgICAgLndoZXJlKCdjb3VudCcsIDApXG4gICAgICAgICAgLmFuZFdoZXJlKCd1cGRhdGVkQXQnLCAnPD0nLCBkYXRlKVxuICAgICAgICAgIC8vIFByb3RlY3QgZnJlc2hseSBjcmVhdGVkIGFzc2V0cyBmcm9tIGJlaW5nIGRlbGV0ZWQgYWdhaW4gcmlnaHQgYXdheSxcbiAgICAgICAgICAvLyAuZS5nLiB3aGVuIGBjb25maWcuYXNzZXRzLmNsZWFudXBUaW1lVGhyZXNob2xkID0gMGBcbiAgICAgICAgICAuYW5kV2hlcmUoJ3VwZGF0ZWRBdCcsICc+JywgcmVmKCdjcmVhdGVkQXQnKSlcbiAgICAgICAgaWYgKG9ycGhhbmVkQXNzZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBvcnBoYW5lZEtleXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG9ycGhhbmVkQXNzZXRzLm1hcChhc3luYyBhc3NldCA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRTdG9yYWdlKGFzc2V0LnN0b3JhZ2UpLnJlbW92ZUZpbGUoYXNzZXQuZmlsZSlcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgICAgICAgYXNzZXQuZXJyb3IgPSBlcnJvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBhc3NldC5rZXlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIGF3YWl0IEFzc2V0TW9kZWxcbiAgICAgICAgICAgIC5xdWVyeSh0cngpXG4gICAgICAgICAgICAuZGVsZXRlKClcbiAgICAgICAgICAgIC53aGVyZUluKCdrZXknLCBvcnBoYW5lZEtleXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9ycGhhbmVkQXNzZXRzXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG4vLyBPdmVycmlkZSBLb2EncyBldmVudHMgd2l0aCBvdXIgb3duIEV2ZW50RW1pdHRlciB0aGF0IGFkZHMgc3VwcG9ydCBmb3Jcbi8vIGFzeW5jaHJvbm91cyBldmVudHMuXG5FdmVudEVtaXR0ZXIubWl4aW4oQXBwbGljYXRpb24ucHJvdG90eXBlKVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbnMpID8gb3B0aW9ucyA6IHt9XG59XG4iXX0=
|
|
961
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvQXBwbGljYXRpb24uanMiXSwibmFtZXMiOlsiQXBwbGljYXRpb24iLCJLb2EiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInZhbGlkYXRvciIsInJvdXRlciIsImV2ZW50cyIsIm1pZGRsZXdhcmUiLCJtb2RlbHMiLCJzZXJ2aWNlcyIsImNvbnRyb2xsZXJzIiwiX3NldHVwRW1pdHRlciIsImFwcCIsImtleXMiLCJsb2ciLCJyZXN0Iiwic2lsZW50IiwicHJvY2VzcyIsImVudiIsIkRJVE9fU0lMRU5UIiwicHJveHkiLCJWYWxpZGF0b3IiLCJSb3V0ZXIiLCJzdG9yYWdlcyIsIk9iamVjdCIsImNyZWF0ZSIsImhhc0NvbnRyb2xsZXJNaWRkbGV3YXJlIiwic2V0dXBMb2dnZXIiLCJzZXR1cEtuZXgiLCJzZXR1cEdsb2JhbE1pZGRsZXdhcmUiLCJ1c2UiLCJhZGRTdG9yYWdlcyIsImFkZE1vZGVscyIsImFkZFNlcnZpY2VzIiwiYWRkQ29udHJvbGxlcnMiLCJhZGRSb3V0ZSIsInZlcmIiLCJwYXRoIiwidHJhbnNhY3RlZCIsImhhbmRsZXJzIiwiY29udHJvbGxlciIsImFjdGlvbiIsImhhbmRsZXIiLCJsZW5ndGgiLCJyb3V0ZSIsIm1vZGVsQ2xhc3MiLCJ2YWx1ZXMiLCJhZGRNb2RlbCIsInNvcnRNb2RlbHMiLCJzb3J0ZWRNb2RlbHMiLCJmaWx0ZXIiLCJuYW1lIiwic2V0dXAiLCJrbmV4IiwiaW5pdGlhbGl6ZSIsImFkZFNjaGVtYSIsImdldEpzb25TY2hlbWEiLCJzY2hlbWEiLCJyZWxhdGlvbnMiLCJzaG91bGRMb2ciLCJvcHRpb24iLCJpbmNsdWRlcyIsImRhdGEiLCJyZWxhdGlvbk1hcHBpbmdzIiwidmFsdWUiLCJNb2RlbCIsImlzUHJvdG90eXBlT2YiLCJjb25zb2xlIiwiaW5mbyIsInBpY28iLCJ5ZWxsb3ciLCJib2xkIiwidXRpbCIsImluc3BlY3QiLCJjb2xvcnMiLCJkZXB0aCIsIm1heEFycmF5TGVuZ3RoIiwiRXJyb3IiLCJzb3J0QnlSZWxhdGlvbnMiLCJsaXN0IiwiY29sbGVjdGVkIiwiZXhjbHVkZWQiLCJyZWxhdGlvbiIsImdldFJlbGF0aW9ucyIsIkJlbG9uZ3NUb09uZVJlbGF0aW9uIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJqb2luVGFibGVNb2RlbENsYXNzIiwicmVsYXRlZCIsInJldmVyc2UiLCJyZWR1Y2UiLCJnZXRNb2RlbCIsImVuZHNXaXRoIiwiZmluZE1vZGVsIiwiY2FsbGJhY2siLCJmaW5kIiwic2VydmljZSIsImVudHJpZXMiLCJhZGRTZXJ2aWNlIiwiU2VydmljZSIsInVuZGVmaW5lZCIsImdldFNlcnZpY2UiLCJmaW5kU2VydmljZSIsImZvckVhY2hTZXJ2aWNlIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsIm5hbWVzcGFjZSIsImtleSIsImFkZENvbnRyb2xsZXIiLCJzZXR1cENvbnRyb2xsZXJNaWRkbGV3YXJlIiwiQ29udHJvbGxlciIsInVybCIsImNvbXBvc2UiLCJnZXRDb250cm9sbGVyIiwiZmluZENvbnRyb2xsZXIiLCJnZXRBZG1pbkNvbnRyb2xsZXIiLCJBZG1pbkNvbnRyb2xsZXIiLCJnZXRBZG1pblZ1ZUNvbmZpZyIsImdldFZ1ZUNvbmZpZyIsImdldEFzc2V0Q29uZmlnIiwibm9ybWFsaXplRGJOYW1lcyIsImFzc2V0Q29uZmlnIiwibW9kZWxOYW1lIiwiYXNzZXRzIiwiZGVmaW5pdGlvbiIsIm5vcm1hbGl6ZWRNb2RlbE5hbWUiLCJub3JtYWxpemVJZGVudGlmaWVyIiwiY29udmVydGVkQXNzZXRzIiwiYXNzZXREYXRhUGF0aCIsInByb3BlcnR5IiwibmVzdGVkRGF0YVBhdGgiLCJpbmRleCIsImdldFByb3BlcnR5T3JSZWxhdGlvbkF0RGF0YVBhdGgiLCJub3JtYWxpemVkTmFtZSIsImRhdGFQYXRoIiwiYXNzZXRDb25maWdzIiwiYWRkU3RvcmFnZSIsInN0b3JhZ2UiLCJzdG9yYWdlQ2xhc3MiLCJTdG9yYWdlIiwiZ2V0IiwidHlwZSIsImdldFN0b3JhZ2UiLCJjb21waWxlVmFsaWRhdG9yIiwianNvblNjaGVtYSIsIm9wdGlvbnMiLCJjb21waWxlIiwiY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IiLCJwYXJhbWV0ZXJzIiwiZGF0YU5hbWUiLCJwcm9wZXJ0aWVzIiwiYWRkUGFyYW1ldGVyIiwicHVzaCIsIm1lbWJlciIsImFzT2JqZWN0IiwidmFsaWRhdGUiLCJjb2VyY2VUeXBlcyIsImN0eCIsImNhbGwiLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3IiLCJtZXNzYWdlIiwiZXJyb3JzIiwianNvbiIsIlZhbGlkYXRpb25FcnJvciIsInBhcnNlRXJyb3JzIiwiY3JlYXRlRGF0YWJhc2VFcnJvciIsImVycm9yIiwic3FsIiwibWF0Y2giLCJEYXRhYmFzZUVycm9yIiwibG9nZ2VyIiwicmVzcG9uc2VUaW1lIiwiZ2V0T3B0aW9ucyIsInJlcXVlc3RzIiwiaGVsbWV0IiwiY29ycyIsImNvbXByZXNzIiwiYnIiLCJwYXJhbXMiLCJ6bGliIiwiY29uc3RhbnRzIiwiQlJPVExJX1BBUkFNX1FVQUxJVFkiLCJldGFnIiwiYm9keVBhcnNlciIsInNlc3Npb24iLCJDb250ZXh0U3RvcmUiLCJwYXNzcG9ydCIsImVyciIsInJlcSIsInJlcyIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsInVzZXIiLCJpZCIsInNlcmlhbGl6ZXJzIiwibGV2ZWwiLCJwcmV0dHlQcmludCIsImlnbm9yZSIsInRyYW5zbGF0ZVRpbWUiLCJyZWRhY3QiLCJiYXNlIiwiY2hpbGQiLCJjbGllbnQiLCJzbmFrZUNhc2VPcHRpb25zIiwidHlwZVBhcnNlcnMiLCJwYXJzZXIiLCJkcml2ZXIiLCJ0eXBlcyIsInNldFR5cGVQYXJzZXIiLCJzZXR1cEtuZXhMb2dnaW5nIiwic3RhcnRUaW1lcyIsImVuZCIsInF1ZXJ5IiwicmVzcG9uc2UiLCJfX2tuZXhRdWVyeVVpZCIsImRpZmYiLCJocnRpbWUiLCJkdXJhdGlvbiIsImJpbmRpbmdzIiwiZnJvbUVudHJpZXMiLCJzdGFydHNXaXRoIiwib24iLCJpZGVudGlmaWVyIiwid3JhcElkZW50aWZpZXIiLCJyZXBsYWNlIiwiZGVub3JtYWxpemVJZGVudGlmaWVyIiwib2JqIiwicG9zdFByb2Nlc3NSZXNwb25zZSIsIm5vcm1hbGl6ZVBhdGgiLCJub3JtYWxpemVQYXRocyIsImZvcm1hdEVycm9yIiwidG9KU09OIiwic3RyIiwic3RhY2siLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIm9zIiwiRU9MIiwibG9nRXJyb3IiLCJleHBvc2UiLCJ0ZXh0IiwiUmVzcG9uc2VFcnJvciIsInN0YXR1cyIsImUiLCJzdGFydCIsImVtaXQiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInJlc29sdmUiLCJyZWplY3QiLCJsaXN0ZW4iLCJhZGRyZXNzIiwic3RvcCIsImNsb3NlIiwic2V0SW1tZWRpYXRlIiwib2ZmIiwic3RhcnRPckV4aXQiLCJleGl0IiwiY3JlYXRlQXNzZXRzIiwiZmlsZXMiLCJjb3VudCIsInRyeCIsIkFzc2V0TW9kZWwiLCJmaWxlIiwiaW5zZXJ0IiwiaGFuZGxlQWRkZGVkQW5kUmVtb3ZlZEFzc2V0cyIsImFkZGVkRmlsZXMiLCJyZW1vdmVkRmlsZXMiLCJjbGVhbnVwVGltZVRocmVzaG9sZCIsInRpbWVUaHJlc2hvbGQiLCJpbXBvcnRlZEZpbGVzIiwiYWRkRm9yZWlnbkFzc2V0cyIsImNoYW5nZUNvdW50IiwiaW5jcmVtZW50Iiwid2hlcmVJbiIsInNldFRpbWVvdXQiLCJyZWxlYXNlVW51c2VkQXNzZXRzIiwiYXNzZXQiLCJmaW5kT25lIiwicmVkIiwiZ3JlZW4iLCJheGlvcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNwb25zZVR5cGUiLCJpbXBvcnRlZEZpbGUiLCJhZGRGaWxlIiwiYXNzaWduIiwiQXNzZXRFcnJvciIsImhhbmRsZU1vZGlmaWVkQXNzZXRzIiwibW9kaWZpZWRGaWxlcyIsImNoYW5nZWRGaWxlIiwidHJhbnNhY3Rpb24iLCJkYXRlIiwiRGF0ZSIsInNldE1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsIm9ycGhhbmVkQXNzZXRzIiwid2hlcmUiLCJhbmRXaGVyZSIsIm9ycGhhbmVkS2V5cyIsInJlbW92ZUZpbGUiLCJkZWxldGUiLCJFdmVudEVtaXR0ZXIiLCJtaXhpbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQVNBOztBQUlBOzs7O0FBT08sTUFBTUEsV0FBTixTQUEwQkMsWUFBMUIsQ0FBOEI7QUFDbkNDLEVBQUFBLFdBQVcsQ0FBQztBQUNWQyxJQUFBQSxNQUFNLEdBQUcsRUFEQztBQUVWQyxJQUFBQSxTQUZVO0FBR1ZDLElBQUFBLE1BSFU7QUFJVkMsSUFBQUEsTUFKVTtBQUtWQyxJQUFBQSxVQUxVO0FBTVZDLElBQUFBLE1BTlU7QUFPVkMsSUFBQUEsUUFQVTtBQVFWQyxJQUFBQTtBQVJVLE1BU1IsRUFUTyxFQVNIO0FBQ047O0FBQ0EsU0FBS0MsYUFBTCxDQUFtQkwsTUFBbkI7O0FBQ0EsVUFBTTtBQUVKTSxNQUFBQSxHQUFHLEVBQUU7QUFBRUMsUUFBQUEsSUFBRjtBQUFRLFdBQUdEO0FBQVgsVUFBbUIsRUFGcEI7QUFHSkUsTUFBQUEsR0FBRyxHQUFHLEVBSEY7QUFJSixTQUFHQztBQUpDLFFBS0ZaLE1BTEo7QUFNQSxTQUFLQSxNQUFMLEdBQWM7QUFDWlMsTUFBQUEsR0FEWTtBQUVaRSxNQUFBQSxHQUFHLEVBQUVBLEdBQUcsQ0FBQ0UsTUFBSixJQUFjQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkNMLEdBRnRDO0FBR1osU0FBR0M7QUFIUyxLQUFkO0FBS0EsU0FBS0YsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS08s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N0I7O0FBT0EsWUFBSUYsY0FBYyxDQUFDaFEsTUFBZixHQUF3QixDQUE1QixFQUErQjtBQUM3QixnQkFBTW1RLFlBQVksR0FBRyxNQUFNdk0sT0FBTyxDQUFDQyxHQUFSLENBQ3pCbU0sY0FBYyxDQUFDbE0sR0FBZixDQUFtQixNQUFNOEssS0FBTixJQUFlO0FBQ2hDLGdCQUFJO0FBQ0Ysb0JBQU0sS0FBS3pJLFVBQUwsQ0FBZ0J5SSxLQUFLLENBQUM5SSxPQUF0QixFQUErQnNLLFVBQS9CLENBQTBDeEIsS0FBSyxDQUFDZCxJQUFoRCxDQUFOO0FBQ0QsYUFGRCxDQUVFLE9BQU9uRyxLQUFQLEVBQWM7QUFDZCxtQkFBS2dGLElBQUwsQ0FBVSxPQUFWLEVBQW1CaEYsS0FBbkI7QUFDQWlILGNBQUFBLEtBQUssQ0FBQ2pILEtBQU4sR0FBY0EsS0FBZDtBQUNEOztBQUNELG1CQUFPaUgsS0FBSyxDQUFDNUssR0FBYjtBQUNELFdBUkQsQ0FEeUIsQ0FBM0I7QUFXQSxnQkFBTTZKLFVBQVUsQ0FDYnBELEtBREcsQ0FDR21ELEdBREgsRUFFSHlDLE1BRkcsR0FHSDVCLE9BSEcsQ0FHSyxLQUhMLEVBR1kwQixZQUhaLENBQU47QUFJRDs7QUFDRCxlQUFPSCxjQUFQO0FBQ0QsT0E5Qk0sQ0FBUDtBQStCRDtBQUNGOztBQS80QmtDOzs7O0FBbzVCckNNLGtCQUFhQyxLQUFiLENBQW1CbFQsV0FBVyxDQUFDbVQsU0FBL0I7O0FBRUEsU0FBU3ZJLFVBQVQsQ0FBb0IzQixPQUFwQixFQUE2QjtBQUMzQixTQUFPLHNCQUFTQSxPQUFULElBQW9CQSxPQUFwQixHQUE4QixFQUFyQztBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEtvYSBmcm9tICdrb2EnXG5pbXBvcnQgS25leCBmcm9tICdrbmV4J1xuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgemxpYiBmcm9tICd6bGliJ1xuaW1wb3J0IHBpbm8gZnJvbSAncGlubydcbmltcG9ydCBvcyBmcm9tICdvcydcbmltcG9ydCBwYXJzZUR1cmF0aW9uIGZyb20gJ3BhcnNlLWR1cmF0aW9uJ1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAna29hLWJvZHlwYXJzZXInXG5pbXBvcnQgY29ycyBmcm9tICdAa29hL2NvcnMnXG5pbXBvcnQgY29tcG9zZSBmcm9tICdrb2EtY29tcG9zZSdcbmltcG9ydCBjb21wcmVzcyBmcm9tICdrb2EtY29tcHJlc3MnXG5pbXBvcnQgY29uZGl0aW9uYWwgZnJvbSAna29hLWNvbmRpdGlvbmFsLWdldCdcbmltcG9ydCBwYXNzcG9ydCBmcm9tICdrb2EtcGFzc3BvcnQnXG5pbXBvcnQgc2Vzc2lvbiBmcm9tICdrb2Etc2Vzc2lvbidcbmltcG9ydCBldGFnIGZyb20gJ2tvYS1ldGFnJ1xuaW1wb3J0IGhlbG1ldCBmcm9tICdrb2EtaGVsbWV0J1xuaW1wb3J0IHJlc3BvbnNlVGltZSBmcm9tICdrb2EtcmVzcG9uc2UtdGltZSdcbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGRpdG9qcy9yb3V0ZXInXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAL2xpYidcbmltcG9ydCB7IENvbnRyb2xsZXIsIEFkbWluQ29udHJvbGxlciB9IGZyb20gJ0AvY29udHJvbGxlcnMnXG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnQC9zZXJ2aWNlcydcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAL3N0b3JhZ2UnXG5pbXBvcnQgeyBjb252ZXJ0U2NoZW1hIH0gZnJvbSAnQC9zY2hlbWEnXG5pbXBvcnQgeyBmb3JtYXRKc29uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgRGF0YWJhc2VFcnJvcixcbiAgQXNzZXRFcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCBTZXNzaW9uU3RvcmUgZnJvbSAnLi9TZXNzaW9uU3RvcmUnXG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICcuL1ZhbGlkYXRvcidcbmltcG9ydCB7XG4gIGF0dGFjaExvZ2dlcixcbiAgY3JlYXRlVHJhbnNhY3Rpb24sXG4gIGZpbmRSb3V0ZSxcbiAgaGFuZGxlRXJyb3IsXG4gIGhhbmRsZVJvdXRlLFxuICBoYW5kbGVVc2VyLFxuICBsb2dSZXF1ZXN0c1xufSBmcm9tICdAL21pZGRsZXdhcmUnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXksIGlzUGxhaW5PYmplY3QsIGh5cGhlbmF0ZSwgY2xvbmUsIG1lcmdlLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIEJlbG9uZ3NUb09uZVJlbGF0aW9uLFxuICBrbmV4U25ha2VDYXNlTWFwcGVycyxcbiAgcmVmXG59IGZyb20gJ29iamVjdGlvbidcblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uIGV4dGVuZHMgS29hIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNvbmZpZyA9IHt9LFxuICAgIHZhbGlkYXRvcixcbiAgICByb3V0ZXIsXG4gICAgZXZlbnRzLFxuICAgIG1pZGRsZXdhcmUsXG4gICAgbW9kZWxzLFxuICAgIHNlcnZpY2VzLFxuICAgIGNvbnRyb2xsZXJzXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLl9zZXR1cEVtaXR0ZXIoZXZlbnRzKVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIFBsdWNrIGtleXMgb3V0IG9mIGBjb25maWcuYXBwYCB0byBrZWVwIHRoZW0gc2VjcmV0XG4gICAgICBhcHA6IHsga2V5cywgLi4uYXBwIH0gPSB7fSxcbiAgICAgIGxvZyA9IHt9LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSBjb25maWdcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGFwcCxcbiAgICAgIGxvZzogbG9nLnNpbGVudCB8fCBwcm9jZXNzLmVudi5ESVRPX1NJTEVOVCA/IHt9IDogbG9nLFxuICAgICAgLi4ucmVzdFxuICAgIH1cbiAgICB0aGlzLmtleXMgPSBrZXlzXG4gICAgdGhpcy5wcm94eSA9ICEhYXBwLnByb3h5XG4gICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3IgfHwgbmV3IFZhbGlkYXRvcigpXG4gICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXIgfHwgbmV3IFJvdXRlcigpXG4gICAgdGhpcy52YWxpZGF0b3IuYXBwID0gdGhpc1xuICAgIHRoaXMuc3RvcmFnZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5tb2RlbHMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdGhpcy5zZXJ2aWNlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB0aGlzLmNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIHRoaXMuaGFzQ29udHJvbGxlck1pZGRsZXdhcmUgPSBmYWxzZVxuICAgIHRoaXMuc2V0dXBMb2dnZXIoKVxuICAgIHRoaXMuc2V0dXBLbmV4KClcbiAgICB0aGlzLnNldHVwR2xvYmFsTWlkZGxld2FyZSgpXG4gICAgaWYgKG1pZGRsZXdhcmUpIHtcbiAgICAgIHRoaXMudXNlKG1pZGRsZXdhcmUpXG4gICAgfVxuICAgIGlmIChjb25maWcuc3RvcmFnZXMpIHtcbiAgICAgIHRoaXMuYWRkU3RvcmFnZXMoY29uZmlnLnN0b3JhZ2VzKVxuICAgIH1cbiAgICBpZiAobW9kZWxzKSB7XG4gICAgICB0aGlzLmFkZE1vZGVscyhtb2RlbHMpXG4gICAgfVxuICAgIGlmIChzZXJ2aWNlcykge1xuICAgICAgdGhpcy5hZGRTZXJ2aWNlcyhzZXJ2aWNlcylcbiAgICB9XG4gICAgaWYgKGNvbnRyb2xsZXJzKSB7XG4gICAgICB0aGlzLmFkZENvbnRyb2xsZXJzKGNvbnRyb2xsZXJzKVxuICAgIH1cbiAgfVxuXG4gIGFkZFJvdXRlKHZlcmIsIHBhdGgsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCBjb250cm9sbGVyID0gbnVsbCwgYWN0aW9uID0gbnVsbCkge1xuICAgIGhhbmRsZXJzID0gYXNBcnJheShoYW5kbGVycylcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMubGVuZ3RoID4gMSA/IGNvbXBvc2UoaGFuZGxlcnMpIDogaGFuZGxlcnNbMF1cbiAgICAvLyBJbnN0ZWFkIG9mIGRpcmVjdGx5IHBhc3NpbmcgYGhhbmRsZXJgLCBwYXNzIGEgYHJvdXRlYCBvYmplY3QgdGhhdCBhbHNvXG4gICAgLy8gd2lsbCBiZSBleHBvc2VkIHRocm91Z2ggYGN0eC5yb3V0ZWAsIHNlZSBgcm91dGVySGFuZGxlcigpYDpcbiAgICBjb25zdCByb3V0ZSA9IHtcbiAgICAgIHZlcmIsXG4gICAgICBwYXRoLFxuICAgICAgdHJhbnNhY3RlZCxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgYWN0aW9uXG4gICAgfVxuICAgIHRoaXMucm91dGVyW3ZlcmJdKHBhdGgsIHJvdXRlKVxuICB9XG5cbiAgYWRkTW9kZWxzKG1vZGVscykge1xuICAgIC8vIEZpcnN0IGFkZCBhbGwgbW9kZWxzIHRoZW4gY2FsbCBpbml0aWFsaXplKCkgZm9yIGVhY2ggaW4gYSBzZWNvbmQgbG9vcCxcbiAgICAvLyBzaW5jZSB0aGV5IG1heSBiZSByZWZlcmVuY2luZyBlYWNoIG90aGVyIGluIHJlbGF0aW9ucy5cbiAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgT2JqZWN0LnZhbHVlcyhtb2RlbHMpKSB7XG4gICAgICB0aGlzLmFkZE1vZGVsKG1vZGVsQ2xhc3MpXG4gICAgfVxuICAgIC8vIE5vdyAocmUtKXNvcnQgYWxsIG1vZGVscyBiYXNlZCBvbiB0aGVpciByZWxhdGlvbnMuXG4gICAgdGhpcy5tb2RlbHMgPSB0aGlzLnNvcnRNb2RlbHModGhpcy5tb2RlbHMpXG4gICAgLy8gRmlsdGVyIHRocm91Z2ggYWxsIHNvcnRlZCBtb2RlbHMsIGtlZXBpbmcgb25seSB0aGUgbmV3bHkgYWRkZWQgb25lcy5cbiAgICBjb25zdCBzb3J0ZWRNb2RlbHMgPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxzKS5maWx0ZXIoXG4gICAgICBtb2RlbENsYXNzID0+IG1vZGVsc1ttb2RlbENsYXNzLm5hbWVdID09PSBtb2RlbENsYXNzXG4gICAgKVxuICAgIC8vIEluaXRpYWxpemUgdGhlIGFkZGVkIG1vZGVscyBpbiBjb3JyZWN0IHNvcnRlZCBzZXF1ZW5jZSwgc28gdGhhdCBmb3IgZXZlcnlcbiAgICAvLyBtb2RlbCwgZ2V0UmVsYXRlZFJlbGF0aW9ucygpIHJldHVybnMgdGhlIGZ1bGwgbGlzdCBvZiByZWxhdGluZyByZWxhdGlvbnMuXG4gICAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIHNvcnRlZE1vZGVscykge1xuICAgICAgaWYgKG1vZGVsc1ttb2RlbENsYXNzLm5hbWVdID09PSBtb2RlbENsYXNzKSB7XG4gICAgICAgIG1vZGVsQ2xhc3Muc2V0dXAodGhpcy5rbmV4KVxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgbW9kZWxDbGFzcyBpcyBzZXQgdXAsIGNhbGwgYGluaXRpYWxpemUoKWAsIHdoaWNoIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLHdpdGhvdXQgaGF2aW5nIHRvIGNhbGwgYHN1cGVyLmluaXRpYWxpemUoKWBcbiAgICAgICAgbW9kZWxDbGFzcy5pbml0aWFsaXplKClcbiAgICAgICAgdGhpcy52YWxpZGF0b3IuYWRkU2NoZW1hKG1vZGVsQ2xhc3MuZ2V0SnNvblNjaGVtYSgpKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5jb25maWdcbiAgICBpZiAobG9nLnNjaGVtYSB8fCBsb2cucmVsYXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2Ygc29ydGVkTW9kZWxzKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZExvZyA9IG9wdGlvbiA9PiAoXG4gICAgICAgICAgb3B0aW9uID09PSB0cnVlIHx8XG4gICAgICAgICAgYXNBcnJheShvcHRpb24pLmluY2x1ZGVzKG1vZGVsQ2xhc3MubmFtZSlcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBkYXRhID0ge31cbiAgICAgICAgaWYgKHNob3VsZExvZyhsb2cuc2NoZW1hKSkge1xuICAgICAgICAgIGRhdGEuc2NoZW1hID0gbW9kZWxDbGFzcy5nZXRKc29uU2NoZW1hKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkTG9nKGxvZy5yZWxhdGlvbnMpKSB7XG4gICAgICAgICAgZGF0YS5yZWxhdGlvbnMgPSBjbG9uZShtb2RlbENsYXNzLnJlbGF0aW9uTWFwcGluZ3MsIHZhbHVlID0+XG4gICAgICAgICAgICBNb2RlbC5pc1Byb3RvdHlwZU9mKHZhbHVlKSA/IGBbTW9kZWw6ICR7dmFsdWUubmFtZX1dYCA6IHZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgcGljby55ZWxsb3cuYm9sZChgXFxuJHttb2RlbENsYXNzLm5hbWV9OlxcbmApLFxuICAgICAgICAgICAgdXRpbC5pbnNwZWN0KGRhdGEsIHtcbiAgICAgICAgICAgICAgY29sb3JzOiB0cnVlLFxuICAgICAgICAgICAgICBkZXB0aDogbnVsbCxcbiAgICAgICAgICAgICAgbWF4QXJyYXlMZW5ndGg6IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkTW9kZWwobW9kZWxDbGFzcykge1xuICAgIGlmIChNb2RlbC5pc1Byb3RvdHlwZU9mKG1vZGVsQ2xhc3MpKSB7XG4gICAgICBtb2RlbENsYXNzLmFwcCA9IHRoaXNcbiAgICAgIHRoaXMubW9kZWxzW21vZGVsQ2xhc3MubmFtZV0gPSBtb2RlbENsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb2RlbCBjbGFzczogJHttb2RlbENsYXNzfWApXG4gICAgfVxuICB9XG5cbiAgc29ydE1vZGVscyhtb2RlbHMpIHtcbiAgICBjb25zdCBzb3J0QnlSZWxhdGlvbnMgPSAobGlzdCwgY29sbGVjdGVkID0ge30sIGV4Y2x1ZGVkID0ge30pID0+IHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiBsaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gbW9kZWxDbGFzc1xuICAgICAgICBpZiAoIWNvbGxlY3RlZFtuYW1lXSAmJiAhZXhjbHVkZWRbbmFtZV0pIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIE9iamVjdC52YWx1ZXMobW9kZWxDbGFzcy5nZXRSZWxhdGlvbnMoKSkpIHtcbiAgICAgICAgICAgIGlmICghKHJlbGF0aW9uIGluc3RhbmNlb2YgQmVsb25nc1RvT25lUmVsYXRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgcmVsYXRlZE1vZGVsQ2xhc3MsIGpvaW5UYWJsZU1vZGVsQ2xhc3MgfSA9IHJlbGF0aW9uXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcmVsYXRlZCBvZiBbam9pblRhYmxlTW9kZWxDbGFzcywgcmVsYXRlZE1vZGVsQ2xhc3NdKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBzZWxmLXJlZmVyZW5jZXMgYW5kIGdlbmVyYXRlZCBqb2luIG1vZGVsczpcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRlZCAmJiByZWxhdGVkICE9PSBtb2RlbENsYXNzICYmIG1vZGVsc1tyZWxhdGVkLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBzb3J0QnlSZWxhdGlvbnMoW3JlbGF0ZWRdLCBjb2xsZWN0ZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBtb2RlbENsYXNzIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb25zOlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV06IG1vZGVsQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4Y2x1ZGVkXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb2xsZWN0ZWRbbmFtZV0gPSBtb2RlbENsYXNzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvbGxlY3RlZClcbiAgICB9XG4gICAgLy8gUmV0dXJuIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzb3J0ZWQgbW9kZWxzIGFzIGl0cyBrZXkvdmFsdWUgcGFpcnMuXG4gICAgLy8gTk9URTogV2UgbmVlZCB0byByZXZlcnNlIGZvciB0aGUgYWJvdmUgYWxnb3JpdGhtIHRvIHNvcnQgcHJvcGVybHksXG4gICAgLy8gYW5kIHRoZW4gcmV2ZXJzZSB0aGUgcmVzdWx0IGJhY2suXG4gICAgcmV0dXJuIHNvcnRCeVJlbGF0aW9ucyhPYmplY3QudmFsdWVzKG1vZGVscykucmV2ZXJzZSgpKS5yZXZlcnNlKCkucmVkdWNlKFxuICAgICAgKG1vZGVscywgbW9kZWxDbGFzcykgPT4ge1xuICAgICAgICBtb2RlbHNbbW9kZWxDbGFzcy5uYW1lXSA9IG1vZGVsQ2xhc3NcbiAgICAgICAgcmV0dXJuIG1vZGVsc1xuICAgICAgfSxcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbClcbiAgICApXG4gIH1cblxuICBnZXRNb2RlbChuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubW9kZWxzW25hbWVdIHx8XG4gICAgICAhbmFtZS5lbmRzV2l0aCgnTW9kZWwnKSAmJiB0aGlzLm1vZGVsc1tgJHtuYW1lfU1vZGVsYF0gfHxcbiAgICAgIG51bGxcbiAgICApXG4gIH1cblxuICBmaW5kTW9kZWwoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVscykuZmluZChjYWxsYmFjaylcbiAgfVxuXG4gIGFkZFNlcnZpY2VzKHNlcnZpY2VzKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc2VydmljZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmljZXMpKSB7XG4gICAgICAvLyBIYW5kbGUgRVM2IG1vZHVsZSB3ZWlyZG5lc3MgdGhhdCBjYW4gaGFwcGVuLCBhcHBhcmVudGx5OlxuICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0JyAmJiBpc1BsYWluT2JqZWN0KHNlcnZpY2UpKSB7XG4gICAgICAgIHRoaXMuYWRkU2VydmljZXMoc2VydmljZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkU2VydmljZShzZXJ2aWNlLCBuYW1lKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFNlcnZpY2Uoc2VydmljZSwgbmFtZSkge1xuICAgIC8vIEF1dG8taW5zdGFudGlhdGUgY29udHJvbGxlciBjbGFzc2VzOlxuICAgIGlmIChTZXJ2aWNlLmlzUHJvdG90eXBlT2Yoc2VydmljZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICBzZXJ2aWNlID0gbmV3IHNlcnZpY2UodGhpcywgbmFtZSlcbiAgICB9XG4gICAgaWYgKCEoc2VydmljZSBpbnN0YW5jZW9mIFNlcnZpY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VydmljZTogJHtzZXJ2aWNlfWApXG4gICAgfVxuICAgIC8vIE9ubHkgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGlzIGNhbGxlZCwgYHNlcnZpY2UubmFtZWAgaXMgZ3VhcmFudGVlZCB0byBiZVxuICAgIC8vIHNldCB0byB0aGUgY29ycmVjdCB2YWx1ZSwgZS5nLiB3aXRoIGFuIGFmdGVyLWNvbnN0cnVjdG9yIGNsYXNzIHByb3BlcnR5LlxuICAgICh7IG5hbWUgfSA9IHNlcnZpY2UpXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcuc2VydmljZXNbbmFtZV1cbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uZmlndXJhdGlvbiBtaXNzaW5nIGZvciBzZXJ2aWNlICcke25hbWV9J2ApXG4gICAgfVxuICAgIC8vIEFzIGEgY29udmVudGlvbiwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBzZXJ2aWNlIGNhbiBiZSBzZXQgdG8gYGZhbHNlYFxuICAgIC8vIGluIG9yZGVyIHRvIGVudGlyZWx5IGRlYWN0aXZhdGUgdGhlIHNlcnZpY2UuXG4gICAgaWYgKGNvbmZpZyAhPT0gZmFsc2UpIHtcbiAgICAgIHNlcnZpY2Uuc2V0dXAoY29uZmlnKVxuICAgICAgdGhpcy5zZXJ2aWNlc1tuYW1lXSA9IHNlcnZpY2VcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSBzZXJ2aWNlIGlzIHNldCB1cCwgY2FsbCBgaW5pdGlhbGl6ZSgpYCB3aGljaCBjYW4gYmVcbiAgICAgIC8vIG92ZXJyaWRkZW4gYnkgc2VydmljZXMuXG4gICAgICBzZXJ2aWNlLmluaXRpYWxpemUoKVxuICAgIH1cbiAgfVxuXG4gIGdldFNlcnZpY2UobmFtZSkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2VzW25hbWVdIHx8IG51bGxcbiAgfVxuXG4gIGZpbmRTZXJ2aWNlKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZXJ2aWNlcykuZmluZChjYWxsYmFjaylcbiAgfVxuXG4gIGZvckVhY2hTZXJ2aWNlKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModGhpcy5zZXJ2aWNlcykubWFwKGNhbGxiYWNrKSlcbiAgfVxuXG4gIGFkZENvbnRyb2xsZXJzKGNvbnRyb2xsZXJzLCBuYW1lc3BhY2UpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb250cm9sbGVycykpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFkZENvbnRyb2xsZXJzKHZhbHVlLCBuYW1lc3BhY2UgPyBgJHtuYW1lc3BhY2V9LyR7a2V5fWAgOiBrZXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZENvbnRyb2xsZXIodmFsdWUsIG5hbWVzcGFjZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRDb250cm9sbGVyKGNvbnRyb2xsZXIsIG5hbWVzcGFjZSkge1xuICAgIC8vIENvbnRyb2xsZXJzIHJlcXVpcmUgYWRkaXRpb25hbCBtaWRkbGV3YXJlIHRvIGJlIGluc3RhbGxlZCBvbmNlLlxuICAgIHRoaXMuc2V0dXBDb250cm9sbGVyTWlkZGxld2FyZSgpXG4gICAgLy8gQXV0by1pbnN0YW50aWF0ZSBjb250cm9sbGVyIGNsYXNzZXM6XG4gICAgaWYgKENvbnRyb2xsZXIuaXNQcm90b3R5cGVPZihjb250cm9sbGVyKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgY29udHJvbGxlcih0aGlzLCBuYW1lc3BhY2UpXG4gICAgfVxuICAgIGlmICghKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBDb250cm9sbGVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbnRyb2xsZXI6ICR7Y29udHJvbGxlcn1gKVxuICAgIH1cbiAgICAvLyBJbmhlcml0YW5jZSBvZiBhY3Rpb24gbWV0aG9kcyBjYW5ub3QgaGFwcGVuIGluIHRoZSBjb25zdHJ1Y3RvciBpdHNlbGYsXG4gICAgLy8gc28gY2FsbCBzZXBhcmF0ZSBgc2V0dXAoKWAgbWV0aG9kIGFmdGVyIGluIG9yZGVyIHRvIHRha2UgY2FyZSBvZiBpdC5cbiAgICBjb250cm9sbGVyLnNldHVwKClcbiAgICB0aGlzLmNvbnRyb2xsZXJzW2NvbnRyb2xsZXIudXJsXSA9IGNvbnRyb2xsZXJcbiAgICAvLyBOb3cgdGhhdCB0aGUgY29udHJvbGxlciBpcyBzZXQgdXAsIGNhbGwgYGluaXRpYWxpemUoKWAgd2hpY2ggY2FuIGJlXG4gICAgLy8gb3ZlcnJpZGRlbiBieSBjb250cm9sbGVycy5cbiAgICBjb250cm9sbGVyLmluaXRpYWxpemUoKVxuICAgIC8vIEVhY2ggY29udHJvbGxlciBjYW4gYWxzbyBwcm92aWRlIGZ1cnRoZXIgbWlkZGxld2FyZSwgZS5nLlxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgOlxuICAgIGNvbnN0IG1pZGRsZXdhcmUgPSBjb250cm9sbGVyLmNvbXBvc2UoKVxuICAgIGlmIChtaWRkbGV3YXJlKSB7XG4gICAgICB0aGlzLnVzZShtaWRkbGV3YXJlKVxuICAgIH1cbiAgfVxuXG4gIGdldENvbnRyb2xsZXIodXJsKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcnNbdXJsXSB8fCBudWxsXG4gIH1cblxuICBmaW5kQ29udHJvbGxlcihjYWxsYmFjaykge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbGxlcnMpLmZpbmQoY2FsbGJhY2spXG4gIH1cblxuICBnZXRBZG1pbkNvbnRyb2xsZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZENvbnRyb2xsZXIoXG4gICAgICBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBBZG1pbkNvbnRyb2xsZXJcbiAgICApXG4gIH1cblxuICBnZXRBZG1pblZ1ZUNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBZG1pbkNvbnRyb2xsZXIoKT8uZ2V0VnVlQ29uZmlnKCkgfHwgbnVsbFxuICB9XG5cbiAgZ2V0QXNzZXRDb25maWcoe1xuICAgIG1vZGVscyA9IE9iamVjdC5rZXlzKHRoaXMubW9kZWxzKSxcbiAgICBub3JtYWxpemVEYk5hbWVzID0gdGhpcy5jb25maWcua25leC5ub3JtYWxpemVEYk5hbWVzXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IGFzc2V0Q29uZmlnID0ge31cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBtb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSB0aGlzLm1vZGVsc1ttb2RlbE5hbWVdXG4gICAgICBjb25zdCB7IGFzc2V0cyB9ID0gbW9kZWxDbGFzcy5kZWZpbml0aW9uXG4gICAgICBpZiAoYXNzZXRzKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNb2RlbE5hbWUgPSBub3JtYWxpemVEYk5hbWVzXG4gICAgICAgICAgPyB0aGlzLm5vcm1hbGl6ZUlkZW50aWZpZXIobW9kZWxOYW1lKVxuICAgICAgICAgIDogbW9kZWxOYW1lXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZEFzc2V0cyA9IHt9XG4gICAgICAgIGZvciAoY29uc3QgW2Fzc2V0RGF0YVBhdGgsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoYXNzZXRzKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICB9ID0gbW9kZWxDbGFzcy5nZXRQcm9wZXJ0eU9yUmVsYXRpb25BdERhdGFQYXRoKGFzc2V0RGF0YVBhdGgpXG4gICAgICAgICAgaWYgKHByb3BlcnR5ICYmIGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZURiTmFtZXNcbiAgICAgICAgICAgICAgPyB0aGlzLm5vcm1hbGl6ZUlkZW50aWZpZXIobmFtZSlcbiAgICAgICAgICAgICAgOiBuYW1lXG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IG5vcm1hbGl6ZURhdGFQYXRoKFtcbiAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgIC4uLnBhcnNlRGF0YVBhdGgobmVzdGVkRGF0YVBhdGgpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgY29uc3QgYXNzZXRDb25maWdzID0gY29udmVydGVkQXNzZXRzW25vcm1hbGl6ZWROYW1lXSB8fD0ge31cbiAgICAgICAgICAgIGFzc2V0Q29uZmlnc1tkYXRhUGF0aF0gPSBjb25maWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXN0ZWQgZ3JhcGggcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3NldENvbmZpZ1tub3JtYWxpemVkTW9kZWxOYW1lXSA9IGNvbnZlcnRlZEFzc2V0c1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRDb25maWdcbiAgfVxuXG4gIGFkZFN0b3JhZ2VzKHN0b3JhZ2VzKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhzdG9yYWdlcykpIHtcbiAgICAgIHRoaXMuYWRkU3RvcmFnZShjb25maWcsIG5hbWUpXG4gICAgfVxuICB9XG5cbiAgYWRkU3RvcmFnZShjb25maWcsIG5hbWUpIHtcbiAgICBsZXQgc3RvcmFnZSA9IG51bGxcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjb25maWcpKSB7XG4gICAgICBjb25zdCBzdG9yYWdlQ2xhc3MgPSBTdG9yYWdlLmdldChjb25maWcudHlwZSlcbiAgICAgIGlmICghc3RvcmFnZUNsYXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc3RvcmFnZTogJHtjb25maWd9YClcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICBzdG9yYWdlID0gbmV3IHN0b3JhZ2VDbGFzcyh0aGlzLCBjb25maWcpXG4gICAgfSBlbHNlIGlmIChjb25maWcgaW5zdGFuY2VvZiBTdG9yYWdlKSB7XG4gICAgICBzdG9yYWdlID0gY29uZmlnXG4gICAgfVxuICAgIGlmIChzdG9yYWdlKSB7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBzdG9yYWdlLm5hbWUgPSBuYW1lXG4gICAgICB9XG4gICAgICB0aGlzLnN0b3JhZ2VzW3N0b3JhZ2UubmFtZV0gPSBzdG9yYWdlXG4gICAgfVxuICAgIHJldHVybiBzdG9yYWdlXG4gIH1cblxuICBnZXRTdG9yYWdlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlc1tuYW1lXSB8fCBudWxsXG4gIH1cblxuICBjb21waWxlVmFsaWRhdG9yKGpzb25TY2hlbWEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4ganNvblNjaGVtYVxuICAgICAgPyB0aGlzLnZhbGlkYXRvci5jb21waWxlKGpzb25TY2hlbWEsIG9wdGlvbnMpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yKHBhcmFtZXRlcnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGxpc3QgPSBbXVxuICAgIGNvbnN0IHsgZGF0YU5hbWUgPSAnZGF0YScgfSA9IG9wdGlvbnNcblxuICAgIGxldCBwcm9wZXJ0aWVzID0gbnVsbFxuICAgIGNvbnN0IGFkZFBhcmFtZXRlciA9IChuYW1lLCBzY2hlbWEpID0+IHtcbiAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgIG5hbWU6IG5hbWUgPz8gbnVsbCxcbiAgICAgICAgLi4uc2NoZW1hXG4gICAgICB9KVxuICAgICAgaWYgKCFzY2hlbWEubWVtYmVyKSB7XG4gICAgICAgIHByb3BlcnRpZXMgfHw9IHt9XG4gICAgICAgIHByb3BlcnRpZXNbbmFtZSB8fCBkYXRhTmFtZV0gPSBzY2hlbWFcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIG9mIHBhcmFtZXRlcnMgZGVmaW5pdGlvbnM6XG4gICAgLy8gLSBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgc2NoZW1hcywgbmFtZWQgYnkgdGhlaXIgYG5hbWVgIGtleS5cbiAgICAvLyAtIEFuIG9iamVjdCBvZiBwYXJhbWV0ZXIgc2NoZW1hcywgbmFtZWQgYnkgdGhlIGtleSB1bmRlciB3aGljaCBlYWNoXG4gICAgLy8gICBzY2hlbWEgaXMgc3RvcmVkIGluIHRoZSByb290IG9iamVjdC5cbiAgICAvLyBJZiBhbiBhcnJheSBpcyBwYXNzZWQsIHRoZW4gdGhlIGNvbnRyb2xsZXIgYWN0aW9ucyByZWNlaXZlcyB0aGVcbiAgICAvLyBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy4gSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCwgdGhlbiB0aGVcbiAgICAvLyBhY3Rpb25zIHJlY2VpdmVzIG9uZSBwYXJhbWV0ZXIgb2JqZWN0IHdoZXJlIHVuZGVyIHRoZSBzYW1lIGtleXMgdGhlXG4gICAgLy8gc3BlY2lmaWVkIHBhcmFtZXRlciB2YWx1ZXMgYXJlIHN0b3JlZC5cbiAgICBsZXQgYXNPYmplY3QgPSBmYWxzZVxuICAgIGlmIChpc0FycmF5KHBhcmFtZXRlcnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgLi4uc2NoZW1hIH0gb2YgcGFyYW1ldGVycykge1xuICAgICAgICBhZGRQYXJhbWV0ZXIobmFtZSwgc2NoZW1hKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocGFyYW1ldGVycykpIHtcbiAgICAgIGFzT2JqZWN0ID0gdHJ1ZVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKSkge1xuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgYWRkUGFyYW1ldGVyKG5hbWUsIHNjaGVtYSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcnMgZGVmaW5pdGlvbjogJHtwYXJhbWV0ZXJzfWApXG4gICAgfVxuICAgIC8vIE5PVEU6IElmIHByb3BlcnRpZXMgaXMgbnVsbCwgc2NoZW1hIGFuZCB2YWxpZGF0ZSB3aWxsIGJlY29tZSBudWxsIHRvby5cbiAgICAvLyBOT1RFOiBJZiBpdCBpcyBub3QgbnVsbCwgaXQgd2lsbCBnZXQgZXhwYW5kZWQgdG8gYW4gb2JqZWN0IHNjaGVtYS5cbiAgICBjb25zdCBzY2hlbWEgPSBjb252ZXJ0U2NoZW1hKHByb3BlcnRpZXMsIG9wdGlvbnMpXG4gICAgY29uc3QgdmFsaWRhdGUgPSB0aGlzLmNvbXBpbGVWYWxpZGF0b3Ioc2NoZW1hLCB7XG4gICAgICAvLyBGb3IgcGFyYW1ldGVycywgYWx3YXlzIGNvZXJjZSB0eXBlcywgaW5jbHVkaW5nIGFycmF5cy5cbiAgICAgIGNvZXJjZVR5cGVzOiAnYXJyYXknLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYXBwOiB0aGlzLFxuICAgICAgdmFsaWRhdG9yOiB0aGlzLnZhbGlkYXRvcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3QsXG4gICAgICBzY2hlbWEsXG4gICAgICBhc09iamVjdCxcbiAgICAgIGRhdGFOYW1lLFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgICAgIC8vIFVzZSBgY2FsbCgpYCB0byBwYXNzIGN0eCBhcyBjb250ZXh0IHRvIEFqdiwgc2VlIHBhc3NDb250ZXh0OlxuICAgICAgICA/IGRhdGEgPT4gdmFsaWRhdGUuY2FsbChjdHgsIGRhdGEpXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVZhbGlkYXRpb25FcnJvcih7IHR5cGUsIG1lc3NhZ2UsIGVycm9ycywgb3B0aW9ucywganNvbiB9KSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgdHlwZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBlcnJvcnM6IHRoaXMudmFsaWRhdG9yLnBhcnNlRXJyb3JzKGVycm9ycywgb3B0aW9ucyksXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgdGhlIEpTT04gZGF0YSBpbiB0aGUgZXJyb3IgaWYgYGxvZy5lcnJvcnMuanNvbmBpcyBzZXQuXG4gICAgICBqc29uOiB0aGlzLmNvbmZpZy5sb2cuZXJyb3JzPy5qc29uID8ganNvbiA6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICBjcmVhdGVEYXRhYmFzZUVycm9yKGVycm9yKSB7XG4gICAgLy8gUmVtb3ZlIGtuZXggU1FMIHF1ZXJ5IGFuZCBtb3ZlIHRvIHNlcGFyYXRlIGBzcWxgIHByb3BlcnR5LlxuICAgIC8vIFRPRE86IEZpeCB0aGlzIHByb3Blcmx5IGluIEtuZXggLyBPYmplY3Rpb24gaW5zdGVhZCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vZ2l0dGVyLmltL1ZpbmNpdC9vYmplY3Rpb24uanM/YXQ9NWE2ODcyOGY1YTllYmU0Zjc1Y2E0MGIwXG4gICAgY29uc3QgWywgc3FsLCBtZXNzYWdlXSA9IGVycm9yLm1lc3NhZ2UubWF0Y2goL14oW1xcc1xcU10qKSAtIChbXFxzXFxTXSo/KSQvKSB8fFxuICAgICAgW251bGwsIG51bGwsIGVycm9yLm1lc3NhZ2VdXG4gICAgcmV0dXJuIG5ldyBEYXRhYmFzZUVycm9yKGVycm9yLCB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgLy8gT25seSBpbmNsdWRlIHRoZSBTUUwgcXVlcnkgaW4gdGhlIGVycm9yIGlmIGBsb2cuZXJyb3JzLnNxbGBpcyBzZXQuXG4gICAgICBzcWw6IHRoaXMuY29uZmlnLmxvZy5lcnJvcnM/LnNxbCA/IHNxbCA6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICBzZXR1cEdsb2JhbE1pZGRsZXdhcmUoKSB7XG4gICAgY29uc3QgeyBhcHAsIGxvZyB9ID0gdGhpcy5jb25maWdcblxuICAgIHRoaXMudXNlKGF0dGFjaExvZ2dlcih0aGlzLmxvZ2dlcikpXG5cbiAgICBpZiAoYXBwLnJlc3BvbnNlVGltZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXNlKHJlc3BvbnNlVGltZShnZXRPcHRpb25zKGFwcC5yZXNwb25zZVRpbWUpKSlcbiAgICB9XG4gICAgaWYgKGxvZy5yZXF1ZXN0cykge1xuICAgICAgdGhpcy51c2UobG9nUmVxdWVzdHMoKSlcbiAgICB9XG4gICAgLy8gTmVlZHMgdG8gYmUgcG9zaXRpb25lZCBhZnRlciB0aGUgcmVxdWVzdCBsb2dnZXIgdG8gbG9nIHRoZSBjb3JyZWN0XG4gICAgLy8gcmVzcG9uc2Ugc3RhdHVzLlxuICAgIHRoaXMudXNlKGhhbmRsZUVycm9yKCkpXG4gICAgaWYgKGFwcC5oZWxtZXQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVzZShoZWxtZXQoZ2V0T3B0aW9ucyhhcHAuaGVsbWV0KSkpXG4gICAgfVxuICAgIGlmIChhcHAuY29ycyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXNlKGNvcnMoZ2V0T3B0aW9ucyhhcHAuY29ycykpKVxuICAgIH1cbiAgICBpZiAoYXBwLmNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy51c2UoY29tcHJlc3MobWVyZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBVc2UgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIEJyb3RsaSBjb21wcmVzc2lvbi5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2tvYWpzL2NvbXByZXNzL2lzc3Vlcy8xMjZcbiAgICAgICAgICBicjoge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIFt6bGliLmNvbnN0YW50cy5CUk9UTElfUEFSQU1fUVVBTElUWV06IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldE9wdGlvbnMoYXBwLmNvbXByZXNzKVxuICAgICAgKSkpXG4gICAgfVxuICAgIGlmIChhcHAuZXRhZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXNlKGNvbmRpdGlvbmFsKCkpXG4gICAgICB0aGlzLnVzZShldGFnKCkpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBDb250cm9sbGVyTWlkZGxld2FyZSgpIHtcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBhdXRvbWF0aWMgYHNldHVwR2xvYmFsTWlkZGxld2FyZSgpYCBzbyB0aGF0XG4gICAgLy8gYXBwcyBjYW4gc2V0IHVwIHRoZSBzdGF0aWMgc2VydmluZyBvZiBhc3NldHMgYmVmb3JlIGluc3RhbGxpbmcgdGhlXG4gICAgLy8gc2Vzc2lvbiBhbmQgcGFzc3BvcnQgbWlkZGxld2FyZS4gSXQgaXMgY2FsbGVkIGZyb20gYGFkZENvbnRyb2xsZXIoKWAuXG4gICAgLy8gVXNlIGEgZmxhZyB0byBvbmx5IGluc3RhbGwgdGhlIG1pZGRsZXdhcmUgb25jZTpcbiAgICBpZiAoIXRoaXMuaGFzQ29udHJvbGxlck1pZGRsZXdhcmUpIHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSB0aGlzLmNvbmZpZ1xuICAgICAgLy8gU2VxdWVuY2UgaXMgaW1wb3J0YW50OlxuICAgICAgLy8gMS4gYm9keSBwYXJzZXJcbiAgICAgIHRoaXMudXNlKGJvZHlQYXJzZXIoZ2V0T3B0aW9ucyhhcHAuYm9keVBhcnNlcikpKVxuICAgICAgLy8gMi4gZmluZCByb3V0ZSBmcm9tIHJvdXRlcyBpbnN0YWxsZWQgYnkgY29udHJvbGxlcnMuXG4gICAgICB0aGlzLnVzZShmaW5kUm91dGUodGhpcy5yb3V0ZXIpKVxuICAgICAgLy8gMy4gcmVzcGVjdCB0cmFuc2FjdGVkIHNldHRpbmdzLCBjcmVhdGUgYW5kIGhhbmRsZSB0cmFuc2FjdGlvbnMuXG4gICAgICB0aGlzLnVzZShjcmVhdGVUcmFuc2FjdGlvbigpKVxuICAgICAgLy8gNC4gc2Vzc2lvblxuICAgICAgaWYgKGFwcC5zZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSA9IGdldE9wdGlvbnMoYXBwLnNlc3Npb24pXG4gICAgICAgIGlmIChtb2RlbENsYXNzKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgQ29udGV4dFN0b3JlIHRoYXQgcmVzb2x2ZWQgdGhlIHNwZWNpZmllZCBtb2RlbCBjbGFzcyxcbiAgICAgICAgICAvLyB1c2VzIGl0IHRvIHBlcnNpc3QgYW5kIHJldHJpZXZlIHRoZSBzZXNzaW9uLCBhbmQgYXV0b21hdGljYWxseVxuICAgICAgICAgIC8vIGJpbmRzIGFsbCBkYiBvcGVyYXRpb25zIHRvIGBjdHgudHJhbnNhY3Rpb25gLCBpZiBpdCBpcyBzZXQuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgICAgICBvcHRpb25zLkNvbnRleHRTdG9yZSA9IFNlc3Npb25TdG9yZShtb2RlbENsYXNzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlKHNlc3Npb24ob3B0aW9ucywgdGhpcykpXG4gICAgICB9XG4gICAgICAvLyA1LiBwYXNzcG9ydFxuICAgICAgaWYgKGFwcC5wYXNzcG9ydCkge1xuICAgICAgICB0aGlzLnVzZShwYXNzcG9ydC5pbml0aWFsaXplKCkpXG4gICAgICAgIGlmIChhcHAuc2Vzc2lvbikge1xuICAgICAgICAgIHRoaXMudXNlKHBhc3Nwb3J0LnNlc3Npb24oKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZShoYW5kbGVVc2VyKCkpXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIGZpbmFsbHkgaGFuZGxlIHRoZSBmb3VuZCByb3V0ZSwgb3Igc2V0IHN0YXR1cyAvIGFsbG93IGFjY29yZGluZ2x5LlxuICAgICAgdGhpcy51c2UoaGFuZGxlUm91dGUoKSlcbiAgICAgIHRoaXMuaGFzQ29udHJvbGxlck1pZGRsZXdhcmUgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgc2V0dXBMb2dnZXIoKSB7XG4gICAgY29uc3QgeyBlcnIsIHJlcSwgcmVzIH0gPSBwaW5vLnN0ZFNlcmlhbGl6ZXJzXG4gICAgLy8gT25seSBpbmNsdWRlIGBpZGAgZnJvbSB0aGUgdXNlciwgdG8gbm90IGluYWR2ZXJ0ZW50bHkgbG9nIFBJSS5cbiAgICBjb25zdCB1c2VyID0gdXNlciA9PiAoeyBpZDogdXNlci5pZCB9KVxuICAgIGNvbnN0IHNlcmlhbGl6ZXJzID0geyBlcnIsIHJlcSwgcmVzLCB1c2VyIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IHBpbm8obWVyZ2UoXG4gICAgICB7XG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIHNlcmlhbGl6ZXJzLFxuICAgICAgICBwcmV0dHlQcmludDoge1xuICAgICAgICAgIC8vIExpc3Qgb2Yga2V5cyB0byBpZ25vcmUgaW4gcHJldHR5IG1vZGUuXG4gICAgICAgICAgaWdub3JlOiAncmVxLHJlcyxkdXJhdGlvbk1zLHVzZXIscmVxdWVzdElkJyxcbiAgICAgICAgICAvLyBTWVMgdG8gdXNlIHN5c3RlbSB0aW1lIGFuZCBub3QgVVRDLlxuICAgICAgICAgIHRyYW5zbGF0ZVRpbWU6ICdTWVM6SEg6TU06c3MubCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmVkYWN0IGNvbW1vbiBzZW5zaXRpdmUgaGVhZGVycy5cbiAgICAgICAgcmVkYWN0OiBbXG4gICAgICAgICAgJyouaGVhZGVyc1tcImNvb2tpZVwiXScsXG4gICAgICAgICAgJyouaGVhZGVyc1tcInNldC1jb29raWVcIl0nLFxuICAgICAgICAgICcqLmhlYWRlcnNbXCJhdXRob3JpemF0aW9uXCJdJ1xuICAgICAgICBdLFxuICAgICAgICBiYXNlOiBudWxsIC8vIG5vIHBpZCxob3N0bmFtZSxuYW1lXG4gICAgICB9LFxuICAgICAgZ2V0T3B0aW9ucyh0aGlzLmNvbmZpZy5sb2dnZXIpXG4gICAgKSlcblxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLmNoaWxkKHsgbmFtZTogJ2FwcCcgfSlcbiAgfVxuXG4gIHNldHVwS25leCgpIHtcbiAgICBsZXQgeyBrbmV4LCBsb2cgfSA9IHRoaXMuY29uZmlnXG4gICAgaWYgKGtuZXg/LmNsaWVudCkge1xuICAgICAgY29uc3Qgc25ha2VDYXNlT3B0aW9ucyA9IGtuZXgubm9ybWFsaXplRGJOYW1lcyA9PT0gdHJ1ZVxuICAgICAgICA/IHt9XG4gICAgICAgIDoga25leC5ub3JtYWxpemVEYk5hbWVzXG4gICAgICBpZiAoc25ha2VDYXNlT3B0aW9ucykge1xuICAgICAgICBrbmV4ID0ge1xuICAgICAgICAgIC4uLmtuZXgsXG4gICAgICAgICAgLi4ua25leFNuYWtlQ2FzZU1hcHBlcnMoc25ha2VDYXNlT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rbmV4ID0gS25leChrbmV4KVxuICAgICAgLy8gU3VwcG9ydCBQb3N0Z3JlU1FMIHR5cGUgcGFyc2VyIG1hcHBpbmdzIGluIHRoZSBjb25maWcuXG4gICAgICBpZiAoa25leC5jbGllbnQgPT09ICdwb3N0Z3Jlc3FsJyAmJiBrbmV4LnR5cGVQYXJzZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIHBhcnNlcl0gb2YgT2JqZWN0LmVudHJpZXMoa25leC50eXBlUGFyc2VycykpIHtcbiAgICAgICAgICB0aGlzLmtuZXguY2xpZW50LmRyaXZlci50eXBlcy5zZXRUeXBlUGFyc2VyKHR5cGUsIHBhcnNlcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvZy5zcWwpIHtcbiAgICAgICAgdGhpcy5zZXR1cEtuZXhMb2dnaW5nKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXR1cEtuZXhMb2dnaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0VGltZXMgPSB7fVxuICAgIGNvbnN0IGxvZ2dlciA9IHRoaXMubG9nZ2VyLmNoaWxkKHsgbmFtZTogJ3NxbCcgfSlcbiAgICBmdW5jdGlvbiBlbmQocXVlcnksIHsgcmVzcG9uc2UsIGVycm9yIH0pIHtcbiAgICAgIGNvbnN0IGlkID0gcXVlcnkuX19rbmV4UXVlcnlVaWRcbiAgICAgIGNvbnN0IGRpZmYgPSBwcm9jZXNzLmhydGltZShzdGFydFRpbWVzW2lkXSlcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGlmZlswXSAqIDFlMyArIGRpZmZbMV0gLyAxZTZcbiAgICAgIGRlbGV0ZSBzdGFydFRpbWVzW2lkXVxuICAgICAgY29uc3QgeyBzcWwsIGJpbmRpbmdzIH0gPSBxdWVyeVxuICAgICAgcmVzcG9uc2UgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlKS5maWx0ZXIoXG4gICAgICAgICAgKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKVxuICAgICAgICApXG4gICAgICApXG4gICAgICBsb2dnZXIuaW5mbyh7IGR1cmF0aW9uLCBiaW5kaW5ncywgcmVzcG9uc2UsIGVycm9yIH0sIHNxbClcbiAgICB9XG5cbiAgICB0aGlzLmtuZXhcbiAgICAgIC5vbigncXVlcnknLCBxdWVyeSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZXNbcXVlcnkuX19rbmV4UXVlcnlVaWRdID0gcHJvY2Vzcy5ocnRpbWUoKVxuICAgICAgfSlcbiAgICAgIC5vbigncXVlcnktcmVzcG9uc2UnLCAocmVzcG9uc2UsIHF1ZXJ5KSA9PiB7XG4gICAgICAgIGVuZChxdWVyeSwgeyByZXNwb25zZSB9KVxuICAgICAgfSlcbiAgICAgIC5vbigncXVlcnktZXJyb3InLCAoZXJyb3IsIHF1ZXJ5KSA9PiB7XG4gICAgICAgIGVuZChxdWVyeSwgeyBlcnJvciB9KVxuICAgICAgfSlcbiAgfVxuXG4gIG5vcm1hbGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgIHJldHVybiB0aGlzLmtuZXguY2xpZW50LndyYXBJZGVudGlmaWVyKGlkZW50aWZpZXIpLnJlcGxhY2UoL1snYFwiXS9nLCAnJylcbiAgfVxuXG4gIGRlbm9ybWFsaXplSWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5rbmV4LmNsaWVudC5wb3N0UHJvY2Vzc1Jlc3BvbnNlKHsgW2lkZW50aWZpZXJdOiAxIH0pXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailbMF1cbiAgfVxuXG4gIG5vcm1hbGl6ZVBhdGgocGF0aCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hcHAubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUocGF0aCkgOiBwYXRoXG4gIH1cblxuICBmb3JtYXRFcnJvcihlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyLnRvSlNPTlxuICAgICAgPyBmb3JtYXRKc29uKGVyci50b0pTT04oKSlcbiAgICAgIDogZXJyLm1lc3NhZ2UgfHwgZXJyXG4gICAgY29uc3Qgc3RyID0gYCR7ZXJyLm5hbWV9OiAke21lc3NhZ2V9YFxuICAgIHJldHVybiBlcnIuc3RhY2sgJiYgdGhpcy5jb25maWcubG9nLmVycm9ycz8uc3RhY2sgIT09IGZhbHNlXG4gICAgICA/IGAke3N0cn1cXG4ke2Vyci5zdGFjay5zcGxpdCgvXFxufFxcclxcbnxcXHIvKS5zbGljZSgxKS5qb2luKG9zLkVPTCl9YFxuICAgICAgOiBzdHJcbiAgfVxuXG4gIGxvZ0Vycm9yKGVyciwgY3R4KSB7XG4gICAgaWYgKCFlcnIuZXhwb3NlICYmICF0aGlzLnNpbGVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuZm9ybWF0RXJyb3IoZXJyKVxuICAgICAgICBjb25zdCBsZXZlbCA9XG4gICAgICAgICAgZXJyIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvciAmJiBlcnIuc3RhdHVzIDwgNTAwID8gJ2luZm8nIDogJ2Vycm9yJ1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBjdHg/LmxvZ2dlciB8fCB0aGlzLmxvZ2dlclxuICAgICAgICBsb2dnZXJbbGV2ZWxdKHRleHQpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBsb2cgZXJyb3InLCBlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5sb2cuZXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5vbignZXJyb3InLCB0aGlzLmxvZ0Vycm9yKVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZTpzdGFydCcpXG4gICAgYXdhaXQgdGhpcy5mb3JFYWNoU2VydmljZShzZXJ2aWNlID0+IHNlcnZpY2Uuc3RhcnQoKSlcbiAgICBjb25zdCB7XG4gICAgICBzZXJ2ZXI6IHsgaG9zdCwgcG9ydCB9LFxuICAgICAgZW52XG4gICAgfSA9IHRoaXMuY29uZmlnXG4gICAgdGhpcy5zZXJ2ZXIgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmxpc3Rlbihwb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcG9ydCB9ID0gc2VydmVyLmFkZHJlc3MoKVxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgYCR7ZW52fSBzZXJ2ZXIgc3RhcnRlZCBhdCBodHRwOi8vJHtob3N0fToke3BvcnR9YFxuICAgICAgICApXG4gICAgICAgIHJlc29sdmUoc2VydmVyKVxuICAgICAgfSlcbiAgICAgIGlmICghc2VydmVyKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuYWJsZSB0byBzdGFydCBzZXJ2ZXIgYXQgaHR0cDovLyR7aG9zdH06JHtwb3J0fWApKVxuICAgICAgfVxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5lbWl0KCdhZnRlcjpzdGFydCcpXG4gIH1cblxuICBhc3luYyBzdG9wKCkge1xuICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlOnN0b3AnKVxuICAgIHRoaXMuc2VydmVyID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgeyBzZXJ2ZXIgfSA9IHRoaXNcbiAgICAgIGlmIChzZXJ2ZXIpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGFjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBjbG9zZSB0aGUgc2VydmVyLFxuICAgICAgICAvLyAgZXZlbiBpZiBzb2NrZXRzIGFyZSBzdGlsbCBvcGVuLlxuICAgICAgICAvLyAgVGFrZW4gZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzY4MzAwNzIuXG4gICAgICAgIC8vICBBIHByb3BlciBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgYSBsaWJyYXJ5LCBleDogaHR0cHM6Ly9naXRodWIuY29tL2dvZGFkZHkvdGVybWludXNcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHNlcnZlci5lbWl0KCdjbG9zZScpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU2VydmVyIGlzIG5vdCBydW5uaW5nJykpXG4gICAgICB9XG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmZvckVhY2hTZXJ2aWNlKHNlcnZpY2UgPT4gc2VydmljZS5zdG9wKCkpXG4gICAgYXdhaXQgdGhpcy5lbWl0KCdhZnRlcjpzdG9wJylcbiAgICBpZiAodGhpcy5jb25maWcubG9nLmVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub2ZmKCdlcnJvcicsIHRoaXMubG9nRXJyb3IpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRPckV4aXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2dFcnJvcihlcnIpXG4gICAgICBwcm9jZXNzLmV4aXQoLTEpXG4gICAgfVxuICB9XG5cbiAgLy8gQXNzZXRzIGhhbmRsaW5nXG5cbiAgYXN5bmMgY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCBjb3VudCA9IDAsIHRyeCA9IG51bGwpIHtcbiAgICBjb25zdCBBc3NldE1vZGVsID0gdGhpcy5nZXRNb2RlbCgnQXNzZXQnKVxuICAgIGlmIChBc3NldE1vZGVsKSB7XG4gICAgICBjb25zdCBhc3NldHMgPSBmaWxlcy5tYXAoZmlsZSA9PiAoe1xuICAgICAgICBrZXk6IGZpbGUua2V5LFxuICAgICAgICBmaWxlLFxuICAgICAgICBzdG9yYWdlOiBzdG9yYWdlLm5hbWUsXG4gICAgICAgIGNvdW50XG4gICAgICB9KSlcbiAgICAgIHJldHVybiBBc3NldE1vZGVsXG4gICAgICAgIC5xdWVyeSh0cngpXG4gICAgICAgIC5pbnNlcnQoYXNzZXRzKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQWRkZGVkQW5kUmVtb3ZlZEFzc2V0cyhcbiAgICBzdG9yYWdlLFxuICAgIGFkZGVkRmlsZXMsXG4gICAgcmVtb3ZlZEZpbGVzLFxuICAgIHRyeCA9IG51bGxcbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXNzZXRzOiB7XG4gICAgICAgIGNsZWFudXBUaW1lVGhyZXNob2xkID0gMFxuICAgICAgfSA9IHt9XG4gICAgfSA9IHRoaXMuY29uZmlnXG4gICAgLy8gT25seSByZW1vdmUgdW51c2VkIGFzc2V0cyB0aGF0IGhhdmVuJ3Qgc2VlbiBjaGFuZ2VzIGZvciBnaXZlbiB0aW1lZnJhbWUuXG4gICAgY29uc3QgdGltZVRocmVzaG9sZCA9IGlzU3RyaW5nKGNsZWFudXBUaW1lVGhyZXNob2xkKVxuICAgICAgPyBwYXJzZUR1cmF0aW9uKGNsZWFudXBUaW1lVGhyZXNob2xkKVxuICAgICAgOiBjbGVhbnVwVGltZVRocmVzaG9sZFxuXG4gICAgY29uc3QgaW1wb3J0ZWRGaWxlcyA9IFtdXG4gICAgY29uc3QgQXNzZXRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoJ0Fzc2V0JylcbiAgICBpZiAoQXNzZXRNb2RlbCkge1xuICAgICAgaW1wb3J0ZWRGaWxlcy5wdXNoKFxuICAgICAgICAuLi5hd2FpdCB0aGlzLmFkZEZvcmVpZ25Bc3NldHMoc3RvcmFnZSwgYWRkZWRGaWxlcywgdHJ4KVxuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICBhZGRlZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgcmVtb3ZlZEZpbGVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGFuZ2VDb3VudCA9IChmaWxlcywgaW5jcmVtZW50KSA9PiAoXG4gICAgICAgICAgZmlsZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIEFzc2V0TW9kZWwucXVlcnkodHJ4KVxuICAgICAgICAgICAgLndoZXJlSW4oJ2tleScsIGZpbGVzLm1hcChmaWxlID0+IGZpbGUua2V5KSlcbiAgICAgICAgICAgIC5pbmNyZW1lbnQoJ2NvdW50JywgaW5jcmVtZW50KVxuICAgICAgICApXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBjaGFuZ2VDb3VudChhZGRlZEZpbGVzLCAxKSxcbiAgICAgICAgICBjaGFuZ2VDb3VudChyZW1vdmVkRmlsZXMsIC0xKVxuICAgICAgICBdKVxuICAgICAgICBpZiAodGltZVRocmVzaG9sZCA+IDApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgLy8gRG9uJ3QgcGFzcyBgdHJ4YCBoZXJlLCBhcyB3ZSB3YW50IHRoaXMgZGVsYXllZCBleGVjdXRpb24gdG9cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpdHMgb3duIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgKCkgPT4gdGhpcy5yZWxlYXNlVW51c2VkQXNzZXRzKHRpbWVUaHJlc2hvbGQpLFxuICAgICAgICAgICAgdGltZVRocmVzaG9sZFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBleGVjdXRlIHJlbGVhc2VVbnVzZWRBc3NldHMoKSBpbW1lZGlhdGVseSBpbiB0aGUgc2FtZVxuICAgICAgLy8gdHJhbnNhY3Rpb24sIHRvIHBvdGVudGlhbGx5IGNsZWFuIHVwIG90aGVyIHBlbmRpbmcgYXNzZXRzLlxuICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlVW51c2VkQXNzZXRzKHRpbWVUaHJlc2hvbGQsIHRyeClcbiAgICAgIHJldHVybiBpbXBvcnRlZEZpbGVzXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkRm9yZWlnbkFzc2V0cyhzdG9yYWdlLCBmaWxlcywgdHJ4ID0gbnVsbCkge1xuICAgIGNvbnN0IGltcG9ydGVkRmlsZXMgPSBbXVxuICAgIGNvbnN0IEFzc2V0TW9kZWwgPSB0aGlzLmdldE1vZGVsKCdBc3NldCcpXG4gICAgaWYgKEFzc2V0TW9kZWwpIHtcbiAgICAgIC8vIEZpbmQgbWlzc2luZyBhc3NldHMgKGNvcGllZCBmcm9tIGFub3RoZXIgc3lzdGVtKSwgYW5kIGFkZCB0aGVtLlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGZpbGVzLm1hcChhc3luYyBmaWxlID0+IHtcbiAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEFzc2V0TW9kZWwucXVlcnkodHJ4KS5maW5kT25lKCdrZXknLCBmaWxlLmtleSlcbiAgICAgICAgICBpZiAoIWFzc2V0KSB7XG4gICAgICAgICAgICBpZiAoZmlsZS5kYXRhIHx8IGZpbGUudXJsKSB7XG4gICAgICAgICAgICAgIGxldCB7IGRhdGEgfSA9IGZpbGVcbiAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgICAgIHBpY28ucmVkKCdJTkZPOicpXG4gICAgICAgICAgICAgICAgICB9IEFzc2V0ICR7XG4gICAgICAgICAgICAgICAgICAgIHBpY28uZ3JlZW4oYCcke2ZpbGUubmFtZX0nYClcbiAgICAgICAgICAgICAgICAgIH0gaXMgZnJvbSBhIGZvcmVpZ24gc291cmNlLCBmZXRjaGluZyBmcm9tICR7XG4gICAgICAgICAgICAgICAgICAgIHBpY28uZ3JlZW4oYCcke2ZpbGUudXJsfSdgKVxuICAgICAgICAgICAgICAgICAgfSBhbmQgYWRkaW5nIHRvIHN0b3JhZ2UgJHtcbiAgICAgICAgICAgICAgICAgICAgcGljby5ncmVlbihgJyR7c3RvcmFnZS5uYW1lfSdgKVxuICAgICAgICAgICAgICAgICAgfS4uLmBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgICAgICAgICAgICB1cmw6IGZpbGUudXJsLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydGVkRmlsZSA9IGF3YWl0IHN0b3JhZ2UuYWRkRmlsZShmaWxlLCBkYXRhKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUFzc2V0cyhzdG9yYWdlLCBbaW1wb3J0ZWRGaWxlXSwgMCwgdHJ4KVxuICAgICAgICAgICAgICAvLyBNZXJnZSBiYWNrIHRoZSBjaGFuZ2VkIGZpbGUgcHJvcGVydGllcyBpbnRvIHRoZSBhY3R1YWwgZmlsZXNcbiAgICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGF0IHRoZSBkYXRhIGZyb20gdGhlIHN0YXRpYyBtb2RlbCBob29rIGNhbiBiZSB1c2VkXG4gICAgICAgICAgICAgIC8vIGRpcmVjdGx5IGZvciB0aGUgYWN0dWFsIHJ1bm5pbmcgcXVlcnkuXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZSwgaW1wb3J0ZWRGaWxlKVxuICAgICAgICAgICAgICBpbXBvcnRlZEZpbGVzLnB1c2goaW1wb3J0ZWRGaWxlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2V0RXJyb3IoXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBpbXBvcnQgYXNzZXQgZnJvbSBmb3JlaWduIHNvdXJjZTogJyR7XG4gICAgICAgICAgICAgICAgICBmaWxlLm5hbWVcbiAgICAgICAgICAgICAgICB9JyAoJyR7XG4gICAgICAgICAgICAgICAgICBmaWxlLmtleVxuICAgICAgICAgICAgICAgIH0nKWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBc3NldCBpcyBmcm9tIGEgZm9yZWlnbiBzb3VyY2UsIGJ1dCB3YXMgYWxyZWFkeSBpbXBvcnRlZCBhbmQgY2FuXG4gICAgICAgICAgICAvLyBiZSByZXVzZWQuIFNlZSBhYm92ZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBtZXJnZS5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZSwgYXNzZXQuZmlsZSlcbiAgICAgICAgICAgIC8vIE5PVEU6IE5vIG5lZWQgdG8gYWRkIGBmaWxlYCB0byBgaW1wb3J0ZWRGaWxlc2AsIHNpbmNlIGl0J3NcbiAgICAgICAgICAgIC8vIGFscmVhZHkgYmVlbiBpbXBvcnRlZCB0byB0aGUgc3RvcmFnZSBiZWZvcmUuXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gaW1wb3J0ZWRGaWxlc1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTW9kaWZpZWRBc3NldHMoc3RvcmFnZSwgZmlsZXMsIHRyeCA9IG51bGwpIHtcbiAgICBjb25zdCBtb2RpZmllZEZpbGVzID0gW11cbiAgICBjb25zdCBBc3NldE1vZGVsID0gdGhpcy5nZXRNb2RlbCgnQXNzZXQnKVxuICAgIGlmIChBc3NldE1vZGVsKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZXMubWFwKGFzeW5jIGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgQXNzZXRNb2RlbC5xdWVyeSh0cngpLmZpbmRPbmUoJ2tleScsIGZpbGUua2V5KVxuICAgICAgICAgICAgaWYgKGFzc2V0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWxlID0gYXdhaXQgc3RvcmFnZS5hZGRGaWxlKGZpbGUsIGZpbGUuZGF0YSlcbiAgICAgICAgICAgICAgLy8gTWVyZ2UgYmFjayB0aGUgY2hhbmdlZCBmaWxlIHByb3BlcnRpZXMgaW50byB0aGUgYWN0dWFsIGZpbGVzXG4gICAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhhdCB0aGUgZGF0YSBmcm9tIHRoZSBzdGF0aWMgbW9kZWwgaG9vayBjYW4gYmUgdXNlZFxuICAgICAgICAgICAgICAvLyBkaXJlY3RseSBmb3IgdGhlIGFjdHVhbCBydW5uaW5nIHF1ZXJ5LlxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbGUsIGNoYW5nZWRGaWxlKVxuICAgICAgICAgICAgICBtb2RpZmllZEZpbGVzLnB1c2goY2hhbmdlZEZpbGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXRFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIHVwZGF0ZSBtb2RpZmllZCBhc3NldCBmcm9tIG1lbW9yeSBzb3VyY2U6ICcke1xuICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lXG4gICAgICAgICAgICAgICAgfScgKCcke1xuICAgICAgICAgICAgICAgICAgZmlsZS5rZXlcbiAgICAgICAgICAgICAgICB9JylgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllZEZpbGVzXG4gIH1cblxuICBhc3luYyByZWxlYXNlVW51c2VkQXNzZXRzKHRpbWVUaHJlc2hvbGQgPSAwLCB0cnggPSBudWxsKSB7XG4gICAgY29uc3QgQXNzZXRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoJ0Fzc2V0JylcbiAgICBpZiAoQXNzZXRNb2RlbCkge1xuICAgICAgcmV0dXJuIEFzc2V0TW9kZWwudHJhbnNhY3Rpb24odHJ4LCBhc3luYyB0cnggPT4ge1xuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHRpbWUgdGhyZXNob2xkIGluIEpTIGluc3RlYWQgb2YgU1FMLCBhcyB0aGVyZSBpcyBub1xuICAgICAgICAvLyBlYXN5IGNyb3NzLVNRTCB3YXkgdG8gZG8gYG5vdygpIC0gaW50ZXJ2YWwgWCBob3Vyc2A6XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSB0aW1lVGhyZXNob2xkKVxuICAgICAgICBjb25zdCBvcnBoYW5lZEFzc2V0cyA9IGF3YWl0IEFzc2V0TW9kZWxcbiAgICAgICAgICAucXVlcnkodHJ4KVxuICAgICAgICAgIC53aGVyZSgnY291bnQnLCAwKVxuICAgICAgICAgIC5hbmRXaGVyZSgndXBkYXRlZEF0JywgJzw9JywgZGF0ZSlcbiAgICAgICAgICAvLyBQcm90ZWN0IGZyZXNobHkgY3JlYXRlZCBhc3NldHMgZnJvbSBiZWluZyBkZWxldGVkIGFnYWluIHJpZ2h0IGF3YXksXG4gICAgICAgICAgLy8gLmUuZy4gd2hlbiBgY29uZmlnLmFzc2V0cy5jbGVhbnVwVGltZVRocmVzaG9sZCA9IDBgXG4gICAgICAgICAgLmFuZFdoZXJlKCd1cGRhdGVkQXQnLCAnPicsIHJlZignY3JlYXRlZEF0JykpXG4gICAgICAgIGlmIChvcnBoYW5lZEFzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb3JwaGFuZWRLZXlzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBvcnBoYW5lZEFzc2V0cy5tYXAoYXN5bmMgYXNzZXQgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmFnZShhc3NldC5zdG9yYWdlKS5yZW1vdmVGaWxlKGFzc2V0LmZpbGUpXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKVxuICAgICAgICAgICAgICAgIGFzc2V0LmVycm9yID0gZXJyb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYXNzZXQua2V5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICBhd2FpdCBBc3NldE1vZGVsXG4gICAgICAgICAgICAucXVlcnkodHJ4KVxuICAgICAgICAgICAgLmRlbGV0ZSgpXG4gICAgICAgICAgICAud2hlcmVJbigna2V5Jywgb3JwaGFuZWRLZXlzKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcnBoYW5lZEFzc2V0c1xuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuLy8gT3ZlcnJpZGUgS29hJ3MgZXZlbnRzIHdpdGggb3VyIG93biBFdmVudEVtaXR0ZXIgdGhhdCBhZGRzIHN1cHBvcnQgZm9yXG4vLyBhc3luY2hyb25vdXMgZXZlbnRzLlxuRXZlbnRFbWl0dGVyLm1peGluKEFwcGxpY2F0aW9uLnByb3RvdHlwZSlcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHJldHVybiBpc09iamVjdChvcHRpb25zKSA/IG9wdGlvbnMgOiB7fVxufVxuIl19
|
package/lib/cli/console.js
CHANGED
|
@@ -19,7 +19,7 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
19
19
|
|
|
20
20
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
23
23
|
|
|
24
24
|
var _objection = _interopRequireDefault(require("objection"));
|
|
25
25
|
|
|
@@ -125,8 +125,8 @@ function displayUsage(app, config, details) {
|
|
|
125
125
|
Dito Console
|
|
126
126
|
|
|
127
127
|
Available references:
|
|
128
|
-
- Dito app: ${
|
|
129
|
-
${modelHandleNames.length > 0 ? ` - Dito models: ${modelHandleNames.map(m =>
|
|
128
|
+
- Dito app: ${_picocolors.default.cyan('app')}
|
|
129
|
+
${modelHandleNames.length > 0 ? ` - Dito models: ${modelHandleNames.map(m => _picocolors.default.cyan(m)).join(', ')}` : ''}
|
|
130
130
|
`);
|
|
131
131
|
|
|
132
132
|
if (details) {
|
|
@@ -172,4 +172,4 @@ function wrapEval({
|
|
|
172
172
|
function logError(error) {
|
|
173
173
|
console.info(`\x1b[31m${error}\x1b[0m`);
|
|
174
174
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvY29uc29sZS5qcyJdLCJuYW1lcyI6WyJzdGFydGVkIiwic2VydmVyIiwic3RhcnRDb25zb2xlIiwiYXBwIiwiY29uZmlnIiwicXVpZXQiLCJwcm9tcHQiLCJ1c2VDb2xvcnMiLCJpZ25vcmVVbmRlZmluZWQiLCJyZXBsIiwic3RhcnQiLCJwYXVzZSIsIk9iamVjdCIsImFzc2lnbiIsImNvbnRleHQiLCJvYmplY3Rpb24iLCJtb2RlbHMiLCJldmFsIiwid3JhcEV2YWwiLCJkZWZpbmVDb21tYW5kIiwiaGVscCIsImFjdGlvbiIsImRpc3BsYXlVc2FnZSIsImRpc3BsYXlQcm9tcHQiLCJjb25zb2xlIiwiaW5mbyIsImtleXMiLCJqb2luIiwiaGlzdG9yeUZpbGUiLCJwYXRoIiwicHJvY2VzcyIsImN3ZCIsImZzIiwic3RhdCIsImxpbmVzIiwicmVhZEZpbGUiLCJ0b1N0cmluZyIsInNwbGl0IiwicmV2ZXJzZSIsInNsaWNlIiwiaGlzdG9yeVNpemUiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsIm1hcCIsImhpc3RvcnkiLCJwdXNoIiwiZSIsInNldFByb21wdCIsInJlc3VtZSIsIndyaXRlIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwib25jZSIsInN0b3AiLCJlcnIiLCJsb2dFcnJvciIsIndyaXRlRmlsZSIsImRldGFpbHMiLCJtb2RlbEhhbmRsZU5hbWVzIiwiY2hhbGsiLCJjeWFuIiwibGVuZ3RoIiwibSIsImRlZmF1bHRFdmFsIiwiY29kZSIsImZpbGUiLCJjYiIsImNhbGwiLCJyZXN1bHQiLCJ0aGVuIiwicmVzb2x2ZWQiLCJrZXkiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFJQSxPQUFPLEdBQUcsS0FBZDtBQUNBLElBQUlDLE1BQU0sR0FBRyxJQUFiOztBQUVlLGVBQWVDLFlBQWYsQ0FBNEJDLEdBQTVCLEVBQWlD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RUFBT0ksUUFBUCxDQUFGO0FBQ0QsT0FURCxDQVNFLE9BQU9FLEtBQVAsRUFBYztBQUNkakIsUUFBQUEsUUFBUSxDQUFDaUIsS0FBRCxDQUFSO0FBQ0FOLFFBQUFBLEVBQUU7QUFDSDtBQUNGLEtBakJNLENBQVA7QUFrQkQsR0FuQkQ7QUFvQkQ7O0FBRUQsU0FBU1gsUUFBVCxDQUFrQmlCLEtBQWxCLEVBQXlCO0FBQ3ZCbEQsRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWMsV0FBVWlELEtBQU0sU0FBOUI7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXBsIGZyb20gJ3JlcGwnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IG9iamVjdGlvbiBmcm9tICdvYmplY3Rpb24nXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmxldCBzdGFydGVkID0gZmFsc2VcbmxldCBzZXJ2ZXIgPSBudWxsXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q29uc29sZShhcHAsIGNvbmZpZykge1xuICBjb25maWcgPSB7XG4gICAgcXVpZXQ6IGZhbHNlLFxuICAgIHByb21wdDogJ2RpdG8gPiAnLFxuICAgIHVzZUNvbG9yczogdHJ1ZSxcbiAgICBpZ25vcmVVbmRlZmluZWQ6IHRydWUsXG4gICAgLi4uY29uZmlnXG4gIH1cblxuICBpZiAoc3RhcnRlZCkge1xuICAgIHJldHVybiBzZXJ2ZXJcbiAgfVxuICBzdGFydGVkID0gdHJ1ZVxuXG4gIHNlcnZlciA9IHJlcGwuc3RhcnQoeyAuLi5jb25maWcsIHByb21wdDogJycgfSlcbiAgc2VydmVyLnBhdXNlKClcbiAgT2JqZWN0LmFzc2lnbihzZXJ2ZXIuY29udGV4dCwge1xuICAgIGFwcCxcbiAgICBvYmplY3Rpb24sXG4gICAgLi4uYXBwLm1vZGVsc1xuICB9KVxuICBzZXJ2ZXIuZXZhbCA9IHdyYXBFdmFsKHNlcnZlcilcblxuICBzZXJ2ZXIuZGVmaW5lQ29tbWFuZCgndXNhZ2UnLCB7XG4gICAgaGVscDogJ0RldGFpbGVkIERpdG8gQ29uc29sZSB1c2FnZSBpbmZvcm1hdGlvbicsXG4gICAgYWN0aW9uKCkge1xuICAgICAgZGlzcGxheVVzYWdlKGFwcCwgY29uZmlnLCB0cnVlKVxuICAgICAgdGhpcy5kaXNwbGF5UHJvbXB0KClcbiAgICB9XG4gIH0pXG5cbiAgc2VydmVyLmRlZmluZUNvbW1hbmQoJ21vZGVscycsIHtcbiAgICBoZWxwOiAnRGlzcGxheSBhdmFpbGFibGUgRGl0byBtb2RlbHMnLFxuICAgIGFjdGlvbigpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhPYmplY3Qua2V5cyhhcHAubW9kZWxzKS5qb2luKCcsICcpKVxuICAgICAgdGhpcy5kaXNwbGF5UHJvbXB0KClcbiAgICB9XG4gIH0pXG5cbiAgLy8gU2V0IHVwIGhpc3RvcnkgZmlsZVxuICBjb25zdCBoaXN0b3J5RmlsZSA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLmNvbnNvbGVfaGlzdG9yeScpXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuc3RhdChoaXN0b3J5RmlsZSlcbiAgICBjb25zdCBsaW5lcyA9IGF3YWl0IGZzLnJlYWRGaWxlKGhpc3RvcnlGaWxlKVxuICAgIGxpbmVzLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuc2xpY2UoMCwgY29uZmlnLmhpc3RvcnlTaXplKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgLm1hcChsaW5lID0+IHNlcnZlci5oaXN0b3J5LnB1c2gobGluZSkpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmluZm8oZGVpbmRlbnRgXG4gICAgICBVbmFibGUgdG8gUkVQTCBoaXN0b3J5IGZpbGUgYXQgJHtoaXN0b3J5RmlsZX0uXG4gICAgICBBIGhpc3RvcnkgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgb24gc2h1dGRvd25cbiAgICBgKVxuICB9XG5cbiAgYXdhaXQgYXBwLnN0YXJ0KClcbiAgaWYgKCFjb25maWcucXVpZXQpIHtcbiAgICBkaXNwbGF5VXNhZ2UoYXBwLCBjb25maWcpXG4gIH1cbiAgc2VydmVyLnNldFByb21wdChjb25maWcucHJvbXB0KVxuICBzZXJ2ZXIucmVzdW1lKClcbiAgc2VydmVyLndyaXRlKCcnLCB7IG5hbWU6ICdyZXR1cm4nIH0pXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXJ2ZXIub25jZSgnZXhpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwcC5zdG9wKClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dFcnJvcihlcnIpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IChzZXJ2ZXIuaGlzdG9yeSB8fCBbXSlcbiAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoaGlzdG9yeUZpbGUsIGxpbmVzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ0Vycm9yKGVycilcbiAgICAgIH1cbiAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBkaXNwbGF5VXNhZ2UoYXBwLCBjb25maWcsIGRldGFpbHMpIHtcbiAgY29uc3QgbW9kZWxIYW5kbGVOYW1lcyA9IE9iamVjdC5rZXlzKGFwcC5tb2RlbHMpXG4gIGNvbnNvbGUuaW5mbyhkZWluZGVudGBcblxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIERpdG8gQ29uc29sZVxuXG4gICAgQXZhaWxhYmxlIHJlZmVyZW5jZXM6XG4gICAgIC0gRGl0byBhcHA6ICR7Y2hhbGsuY3lhbignYXBwJyl9XG4gICAgJHtcbiAgICAgIG1vZGVsSGFuZGxlTmFtZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGAgLSBEaXRvIG1vZGVsczogJHtcbiAgICAgICAgICBtb2RlbEhhbmRsZU5hbWVzLm1hcChtID0+IGNoYWxrLmN5YW4obSkpLmpvaW4oJywgJylcbiAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgYClcbiAgaWYgKGRldGFpbHMpIHtcbiAgICBjb25zb2xlLmluZm8oZGVpbmRlbnRgXG4gICAgICBFeGFtcGxlczpcblxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyID0gVXNlci53aGVyZSh7IGxhc3ROYW1lOiAnRG9lJyB9KS5maXJzdCgpXG4gICAgICAke2NvbmZpZy5wcm9tcHR9IHVzZXIuJHBhdGNoKHsgZmlyc3ROYW1lOiAnSm9lJyB9KVxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyLiRjb21tZW50cy5pbnNlcnQoeyAuLi4gfSlcbiAgICBgKVxuICB9XG4gIGNvbnNvbGUuaW5mbygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbn1cblxuLy8gV3JhcHMgdGhlIGRlZmF1bHQgZXZhbCB3aXRoIGEgaGFuZGxlciB0aGF0IHJlc29sdmVzIHByb21pc2VzXG5mdW5jdGlvbiB3cmFwRXZhbCh7IGV2YWw6IGRlZmF1bHRFdmFsIH0pIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKGNvZGUsIGNvbnRleHQsIGZpbGUsIGNiKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRFdmFsLmNhbGwodGhpcywgY29kZSwgY29udGV4dCwgZmlsZSwgYXN5bmMgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZXJyIHx8ICEocmVzdWx0ICYmIGlzRnVuY3Rpb24ocmVzdWx0LnRoZW4pKSkge1xuICAgICAgICByZXR1cm4gY2IoZXJyLCByZXN1bHQpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc3VsdFxuICAgICAgICAvLyBSZXBsYWNlIGFueSBwcm9taXNlcyBpbiB0aGUgUkVQTCBjb250ZXh0IHdpdGggdGhlIHJlc29sdmVkIHByb21pc2UuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dFtrZXldID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnRleHRba2V5XSA9IHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNiKG51bGwsIHJlc29sdmVkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgICAgIGNiKCkgLy8gQXBwbGljYXRpb24gZXJyb3JzIGFyZSBub3QgUkVQTCBlcnJvcnNcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGVycm9yKSB7XG4gIGNvbnNvbGUuaW5mbyhgXFx4MWJbMzFtJHtlcnJvcn1cXHgxYlswbWApXG59XG4iXX0=
|
|
175
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvY29uc29sZS5qcyJdLCJuYW1lcyI6WyJzdGFydGVkIiwic2VydmVyIiwic3RhcnRDb25zb2xlIiwiYXBwIiwiY29uZmlnIiwicXVpZXQiLCJwcm9tcHQiLCJ1c2VDb2xvcnMiLCJpZ25vcmVVbmRlZmluZWQiLCJyZXBsIiwic3RhcnQiLCJwYXVzZSIsIk9iamVjdCIsImFzc2lnbiIsImNvbnRleHQiLCJvYmplY3Rpb24iLCJtb2RlbHMiLCJldmFsIiwid3JhcEV2YWwiLCJkZWZpbmVDb21tYW5kIiwiaGVscCIsImFjdGlvbiIsImRpc3BsYXlVc2FnZSIsImRpc3BsYXlQcm9tcHQiLCJjb25zb2xlIiwiaW5mbyIsImtleXMiLCJqb2luIiwiaGlzdG9yeUZpbGUiLCJwYXRoIiwicHJvY2VzcyIsImN3ZCIsImZzIiwic3RhdCIsImxpbmVzIiwicmVhZEZpbGUiLCJ0b1N0cmluZyIsInNwbGl0IiwicmV2ZXJzZSIsInNsaWNlIiwiaGlzdG9yeVNpemUiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsIm1hcCIsImhpc3RvcnkiLCJwdXNoIiwiZSIsInNldFByb21wdCIsInJlc3VtZSIsIndyaXRlIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwib25jZSIsInN0b3AiLCJlcnIiLCJsb2dFcnJvciIsIndyaXRlRmlsZSIsImRldGFpbHMiLCJtb2RlbEhhbmRsZU5hbWVzIiwicGljbyIsImN5YW4iLCJsZW5ndGgiLCJtIiwiZGVmYXVsdEV2YWwiLCJjb2RlIiwiZmlsZSIsImNiIiwiY2FsbCIsInJlc3VsdCIsInRoZW4iLCJyZXNvbHZlZCIsImtleSIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLElBQUlBLE9BQU8sR0FBRyxLQUFkO0FBQ0EsSUFBSUMsTUFBTSxHQUFHLElBQWI7O0FBRWUsZUFBZUMsWUFBZixDQUE0QkMsR0FBNUIsRUFBaUND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LEVBQU9JLFFBQVAsQ0FBRjtBQUNELE9BVEQsQ0FTRSxPQUFPRSxLQUFQLEVBQWM7QUFDZGpCLFFBQUFBLFFBQVEsQ0FBQ2lCLEtBQUQsQ0FBUjtBQUNBTixRQUFBQSxFQUFFO0FBQ0g7QUFDRixLQWpCTSxDQUFQO0FBa0JELEdBbkJEO0FBb0JEOztBQUVELFNBQVNYLFFBQVQsQ0FBa0JpQixLQUFsQixFQUF5QjtBQUN2QmxELEVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFjLFdBQVVpRCxLQUFNLFNBQTlCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVwbCBmcm9tICdyZXBsJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgb2JqZWN0aW9uIGZyb20gJ29iamVjdGlvbidcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxubGV0IHN0YXJ0ZWQgPSBmYWxzZVxubGV0IHNlcnZlciA9IG51bGxcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gc3RhcnRDb25zb2xlKGFwcCwgY29uZmlnKSB7XG4gIGNvbmZpZyA9IHtcbiAgICBxdWlldDogZmFsc2UsXG4gICAgcHJvbXB0OiAnZGl0byA+ICcsXG4gICAgdXNlQ29sb3JzOiB0cnVlLFxuICAgIGlnbm9yZVVuZGVmaW5lZDogdHJ1ZSxcbiAgICAuLi5jb25maWdcbiAgfVxuXG4gIGlmIChzdGFydGVkKSB7XG4gICAgcmV0dXJuIHNlcnZlclxuICB9XG4gIHN0YXJ0ZWQgPSB0cnVlXG5cbiAgc2VydmVyID0gcmVwbC5zdGFydCh7IC4uLmNvbmZpZywgcHJvbXB0OiAnJyB9KVxuICBzZXJ2ZXIucGF1c2UoKVxuICBPYmplY3QuYXNzaWduKHNlcnZlci5jb250ZXh0LCB7XG4gICAgYXBwLFxuICAgIG9iamVjdGlvbixcbiAgICAuLi5hcHAubW9kZWxzXG4gIH0pXG4gIHNlcnZlci5ldmFsID0gd3JhcEV2YWwoc2VydmVyKVxuXG4gIHNlcnZlci5kZWZpbmVDb21tYW5kKCd1c2FnZScsIHtcbiAgICBoZWxwOiAnRGV0YWlsZWQgRGl0byBDb25zb2xlIHVzYWdlIGluZm9ybWF0aW9uJyxcbiAgICBhY3Rpb24oKSB7XG4gICAgICBkaXNwbGF5VXNhZ2UoYXBwLCBjb25maWcsIHRydWUpXG4gICAgICB0aGlzLmRpc3BsYXlQcm9tcHQoKVxuICAgIH1cbiAgfSlcblxuICBzZXJ2ZXIuZGVmaW5lQ29tbWFuZCgnbW9kZWxzJywge1xuICAgIGhlbHA6ICdEaXNwbGF5IGF2YWlsYWJsZSBEaXRvIG1vZGVscycsXG4gICAgYWN0aW9uKCkge1xuICAgICAgY29uc29sZS5pbmZvKE9iamVjdC5rZXlzKGFwcC5tb2RlbHMpLmpvaW4oJywgJykpXG4gICAgICB0aGlzLmRpc3BsYXlQcm9tcHQoKVxuICAgIH1cbiAgfSlcblxuICAvLyBTZXQgdXAgaGlzdG9yeSBmaWxlXG4gIGNvbnN0IGhpc3RvcnlGaWxlID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuY29uc29sZV9oaXN0b3J5JylcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5zdGF0KGhpc3RvcnlGaWxlKVxuICAgIGNvbnN0IGxpbmVzID0gYXdhaXQgZnMucmVhZEZpbGUoaGlzdG9yeUZpbGUpXG4gICAgbGluZXMudG9TdHJpbmcoKS5zcGxpdCgnXFxuJylcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5zbGljZSgwLCBjb25maWcuaGlzdG9yeVNpemUpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAubWFwKGxpbmUgPT4gc2VydmVyLmhpc3RvcnkucHVzaChsaW5lKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuaW5mbyhkZWluZGVudGBcbiAgICAgIFVuYWJsZSB0byBSRVBMIGhpc3RvcnkgZmlsZSBhdCAke2hpc3RvcnlGaWxlfS5cbiAgICAgIEEgaGlzdG9yeSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBvbiBzaHV0ZG93blxuICAgIGApXG4gIH1cblxuICBhd2FpdCBhcHAuc3RhcnQoKVxuICBpZiAoIWNvbmZpZy5xdWlldCkge1xuICAgIGRpc3BsYXlVc2FnZShhcHAsIGNvbmZpZylcbiAgfVxuICBzZXJ2ZXIuc2V0UHJvbXB0KGNvbmZpZy5wcm9tcHQpXG4gIHNlcnZlci5yZXN1bWUoKVxuICBzZXJ2ZXIud3JpdGUoJycsIHsgbmFtZTogJ3JldHVybicgfSlcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNlcnZlci5vbmNlKCdleGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwLnN0b3AoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ0Vycm9yKGVycilcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gKHNlcnZlci5oaXN0b3J5IHx8IFtdKVxuICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShoaXN0b3J5RmlsZSwgbGluZXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyKVxuICAgICAgfVxuICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlVc2FnZShhcHAsIGNvbmZpZywgZGV0YWlscykge1xuICBjb25zdCBtb2RlbEhhbmRsZU5hbWVzID0gT2JqZWN0LmtleXMoYXBwLm1vZGVscylcbiAgY29uc29sZS5pbmZvKGRlaW5kZW50YFxuXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgRGl0byBDb25zb2xlXG5cbiAgICBBdmFpbGFibGUgcmVmZXJlbmNlczpcbiAgICAgLSBEaXRvIGFwcDogJHtwaWNvLmN5YW4oJ2FwcCcpfVxuICAgICR7XG4gICAgICBtb2RlbEhhbmRsZU5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgIC0gRGl0byBtb2RlbHM6ICR7XG4gICAgICAgICAgbW9kZWxIYW5kbGVOYW1lcy5tYXAobSA9PiBwaWNvLmN5YW4obSkpLmpvaW4oJywgJylcbiAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgYClcbiAgaWYgKGRldGFpbHMpIHtcbiAgICBjb25zb2xlLmluZm8oZGVpbmRlbnRgXG4gICAgICBFeGFtcGxlczpcblxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyID0gVXNlci53aGVyZSh7IGxhc3ROYW1lOiAnRG9lJyB9KS5maXJzdCgpXG4gICAgICAke2NvbmZpZy5wcm9tcHR9IHVzZXIuJHBhdGNoKHsgZmlyc3ROYW1lOiAnSm9lJyB9KVxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyLiRjb21tZW50cy5pbnNlcnQoeyAuLi4gfSlcbiAgICBgKVxuICB9XG4gIGNvbnNvbGUuaW5mbygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbn1cblxuLy8gV3JhcHMgdGhlIGRlZmF1bHQgZXZhbCB3aXRoIGEgaGFuZGxlciB0aGF0IHJlc29sdmVzIHByb21pc2VzXG5mdW5jdGlvbiB3cmFwRXZhbCh7IGV2YWw6IGRlZmF1bHRFdmFsIH0pIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKGNvZGUsIGNvbnRleHQsIGZpbGUsIGNiKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRFdmFsLmNhbGwodGhpcywgY29kZSwgY29udGV4dCwgZmlsZSwgYXN5bmMgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZXJyIHx8ICEocmVzdWx0ICYmIGlzRnVuY3Rpb24ocmVzdWx0LnRoZW4pKSkge1xuICAgICAgICByZXR1cm4gY2IoZXJyLCByZXN1bHQpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc3VsdFxuICAgICAgICAvLyBSZXBsYWNlIGFueSBwcm9taXNlcyBpbiB0aGUgUkVQTCBjb250ZXh0IHdpdGggdGhlIHJlc29sdmVkIHByb21pc2UuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dFtrZXldID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnRleHRba2V5XSA9IHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNiKG51bGwsIHJlc29sdmVkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgICAgIGNiKCkgLy8gQXBwbGljYXRpb24gZXJyb3JzIGFyZSBub3QgUkVQTCBlcnJvcnNcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGVycm9yKSB7XG4gIGNvbnNvbGUuaW5mbyhgXFx4MWJbMzFtJHtlcnJvcn1cXHgxYlswbWApXG59XG4iXX0=
|