piper-utils 1.0.1 → 1.0.2

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/bin/main.js CHANGED
@@ -243,14 +243,14 @@ const createSort = exports.createSort = function (event, defaultFilter) {
243
243
  \*****************************************************************/
244
244
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
245
245
 
246
- Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOverRideTypes = undefined;exports.defaultFilters = defaultFilters;exports.addFiltersFromSchema = addFiltersFromSchema;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _sequelize = __webpack_require__(/*! sequelize */ "sequelize");var _sequelize2 = _interopRequireDefault(_sequelize);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
246
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.defaultFilters = defaultFilters;exports.addFiltersFromSchema = addFiltersFromSchema;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _sequelize = __webpack_require__(/*! sequelize */ "sequelize");var _sequelize2 = _interopRequireDefault(_sequelize);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
247
247
  * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas
248
248
  *
249
- * @param {{type:{}, filterOverRide:string}} schema - type is sequelize data type filterOverRide is used to overide default filterType implied by type
249
+ * @param {object} schema - type is sequelize data type
250
250
  * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define
251
251
  * sub schema can be {location: locationSchema} or {location: {as: "asAlias", schema: schema}}
252
252
  * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.
253
- */function defaultFilters(schema, subSchemas = {}) {schema = _lodash2.default.clone(schema);const filters = {};addFiltersFromSchema(schema, filters);Object.keys(subSchemas).forEach((key) => {addFiltersFromSchema(subSchemas[key], filters, key);});return filters;}const filterOverRideTypes = exports.filterOverRideTypes = { equal: 'equal' };function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {const asLinkAlias = _lodash2.default.get(schema, 'as', null);schema = _lodash2.default.get(schema, 'schema') || schema;return Object.keys(schema).reduce((acc, item) => {let key = item;if (asLinkAlias) {
253
+ */function defaultFilters(schema, subSchemas = {}) {schema = _lodash2.default.clone(schema);const filters = {};addFiltersFromSchema(schema, filters);Object.keys(subSchemas).forEach((key) => {addFiltersFromSchema(subSchemas[key], filters, key);});return filters;}function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {const asLinkAlias = _lodash2.default.get(schema, 'as', null);schema = _lodash2.default.get(schema, 'schema') || schema;return Object.keys(schema).reduce((acc, item) => {let key = item;if (asLinkAlias) {
254
254
  acc[asLinkAlias] = { type: _sequelize2.default.STRING, filterType: _sequelize2.default.Op.eq };
255
255
  }
256
256
 
@@ -264,9 +264,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOv
264
264
  return acc;
265
265
  }
266
266
 
267
- //create a custom filter to overrider defaults implied by the db value
268
- const filterTypeOverRide = _lodash2.default.get(schema, `[${item}].filterOverRide`);
269
-
270
267
  const itemType = filterTypeOverRide || schema[item].type;
271
268
 
272
269
  //todo these should be removed, there are just here for sort tests
@@ -315,11 +312,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOv
315
312
  acc['updatedAt'] = { type: _sequelize2.default.DATE, filterType: _sequelize2.default.Op.lt };
316
313
  acc['id'] = { type: _sequelize2.default.INTEGER, filterType: _sequelize2.default.Op.eq };
317
314
 
318
- //filter overRides
319
- if (itemType === filterOverRideTypes.equal) {
320
- acc[key] = { filterType: _sequelize2.default.Op.eq };
321
- }
322
-
323
315
  return acc;
324
316
  }, accumulator);
325
317
  }
@@ -1000,4 +992,4 @@ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_expor
1000
992
  if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
1001
993
  /******/ })()
1002
994
  ;
1003
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDekMsTUFBTTlRLGFBQWEsR0FBQXRELHFCQUFBLEdBQUdxVSw0QkFBbUI7QUFDekMsTUFBTXhPLFVBQVUsR0FBQTdGLGtCQUFBLEdBQUdzVSxzQkFBZ0I7QUFDbkMsTUFBTW5NLE9BQU8sR0FBQW5JLGVBQUEsR0FBR3VVLGdCQUFhO0FBQzdCLE1BQU1uVSxXQUFXLEdBQUFKLG1CQUFBLEdBQUd3VSw4QkFBaUI7QUFDckMsTUFBTWpELE9BQU8sR0FBQXZSLGVBQUEsR0FBR3lVLHdCQUFhO0FBQzdCLE1BQU10RCxPQUFPLEdBQUFuUixlQUFBLEdBQUcwVSx3QkFBYTtBQUM3QixNQUFNdlgsYUFBYSxHQUFBNkMscUJBQUEsR0FBRzJVLHlCQUFtQjtBQUN6QyxNQUFNckQsY0FBYyxHQUFBdFIsc0JBQUEsR0FBRzRVLCtCQUFvQjtBQUMzQyxNQUFNeEQsV0FBVyxHQUFBcFIsbUJBQUEsR0FBRzZVLDRCQUFpQjtBQUNyQyxNQUFNeEQsa0NBQWtDLEdBQUFyUiwwQ0FBQSxHQUFHOFUsbURBQXdDO0FBQ25GLE1BQU1yTyxjQUFjLEdBQUF6RyxzQkFBQSxHQUFHK1UsOEJBQW9CO0FBQzNDLE1BQU1oVixpQkFBaUIsR0FBQUMseUJBQUEsR0FBR2dWLG9DQUF1QjtBQUNqRCxNQUFNdFMsU0FBUyxHQUFBMUMsaUJBQUEsR0FBR2lWLDBCQUFlO0FBQ2pDLE1BQU16RCxVQUFVLEdBQUF4UixrQkFBQSxHQUFHa1YsMkJBQWdCO0FBQ25DLE1BQU1oVixpQkFBaUIsR0FBQUYseUJBQUEsR0FBR21WLG9DQUF1QjtBQUNqRCxNQUFNbFYsY0FBYyxHQUFBRCxzQkFBQSxHQUFHb1YsaUNBQW9CO0FBQzNDLE1BQU0vVSxnQkFBZ0IsR0FBQUwsd0JBQUEsR0FBR3FWLG1DQUFzQixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlU29ydC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZGVmYXVsdEZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZHluYW1vL2R5bmFtb1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zbnMvU05TVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJibHVlYmlyZFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIm1vbWVudC9tb21lbnQuanNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInNlcXVlbGl6ZVwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwidW16dWdcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VxdWVsaXplU3RvcmFnZSwgVW16dWcgfSBmcm9tICd1bXp1Zyc7XG5cbi8qKlxuICogRXhlY3V0ZSBkYXRhYmFzZSBtaWdyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gbmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUgKG9yIHZlcmlmeSBleGlzdGVuY2UpXG4gKiBAcGFyYW0ge29iamVjdH0gc2VxdWVsaXplSW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpbml0aWFsaXplTW9kZWxzIC0gZnVuY3Rpb24gdG8gcnVuIHRvIHN5bmMgU2VxdWVsaXplIG1vZGVscyB3aXRoIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvTWlncmF0aW9uRm9sZGVyIC0gcGFzcyBpbiB0aGUgcGF0aCBpZiB1c2luZyB3aW5kb3dzLiB3aW5kb3dzIGFuZCBsaW51eCBQV0Qgd2lsbCBiZSBkaWZmZXJlbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bk1pZ3JhdGlvbnMoZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVsaXplSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kZWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvTWlncmF0aW9uRm9sZGVyID0gYCR7cHJvY2Vzcy5lbnYuUFdEfS9taWdyYXRpb25zLyouanNgKSB7XG4gICAgY29uc3QgdW16dWcgPSBuZXcgVW16dWcoe1xuICAgICAgICBtaWdyYXRpb25zOiB7IGdsb2I6IHBhdGhUb01pZ3JhdGlvbkZvbGRlciB9LFxuICAgICAgICBjb250ZXh0OiBzZXF1ZWxpemVJbnN0YW5jZS5nZXRRdWVyeUludGVyZmFjZSgpLFxuICAgICAgICBzdG9yYWdlOiBuZXcgU2VxdWVsaXplU3RvcmFnZSh7IHNlcXVlbGl6ZTogc2VxdWVsaXplSW5zdGFuY2UgfSksXG4gICAgICAgIGxvZ2dlcjogY29uc29sZVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVuZGluZ01pZ3JhdGlvbnMgPSBhd2FpdCB1bXp1Zy5wZW5kaW5nKCk7XG4gICAgY29uc29sZS5sb2coJy0tLS0tLS0+VVRJTCBQZW5kaW5nIE1pZ3JhdGlvbnM6JywgcGVuZGluZ01pZ3JhdGlvbnMsIHBhdGhUb01pZ3JhdGlvbkZvbGRlcik7XG4gICAgYXdhaXQgdW16dWcudXAoKS5jYXRjaCgodXBFcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gdW16dWcuZG93bih7XG4gICAgICAgICAgICBtaWdyYXRpb25zOiBfLmNoYWluKHBlbmRpbmdNaWdyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVVElMIEVycm9yOiBFcnJvciB3aXRoIG1pZ3JhdGluZyB1cDonICsgdXBFcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9LCAoZG93bkVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgZG93bjonICsgZG93bkVycm9yO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBzeW5jIChjcmVhdGUpIHRhYmxlcywgYnV0IG5vdCB0byBkYXRhYmFzZSB1cGRhdGVzXG4gICAgLy8gaW4gdGhlIHBhc3QgaXQgd29ya2VkIHRvIGxlYXZlIGl0IGluLCBidXQgbm93IHRoZSB0YWdzIG1vZHVsZSBjYXVzZXMgZm9yZWlnbiBrZXkgcHJvYmxlbXNcbiAgICAvLyBUaGUgdGFibGVzIGFyZSBzdGlsbCBpbml0aWF0ZWQgYnkgYmVpbmcgcGFzc2VkIGluIHRvIHJ1biBtaWdyYXRpb25zXG4gICAgYXdhaXQgaW5pdGlhbGl6ZU1vZGVscygpO1xufSIsImltcG9ydCBfLCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gdGhlIGxhbWJkYSBldmVudCwgY29tcGFyZSBpdCB0byBidXNpbmVzc0lkcywgcmV0dXJuIHdoYXQgdXNlciBoYXMgYWNjZXNzIHRvLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBBICBsaXN0IG9mIGJ1c2luZXNzSWRzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCBhbmQgYXJlIGFsbG93ZWQgdG8gZm9yIHNvbWUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KSB7XG4gICAgY29uc3QgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyhldmVudCk7XG4gICAgY29uc3QgYWxsb3dlZEJ1c2luZXNzSWRzID0gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50KTtcbiAgICBjb25zdCBsb2NhbEJpZExpc3QgPSBbJzEnXTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBsb2NhbCByZXR1cm4gZm9yIGFsbCBiaWRzIGluIGFjY2VzcyByaWdodHNcbiAgICBpZiAoXy5pc0VtcHR5KGFsbG93ZWRCdXNpbmVzc0lkcykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMnKSAmJlxuICAgICAgICAhXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3N0YWdpbmcnKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEJpZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGxvY2FsQmlkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZEJ1c2luZXNzSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWxsb3dlZEJ1c2luZXNzSWRzO1xuICAgIH1cblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1ZXN0ZWRCdXNpbmVzc0lkcywgYWxsb3dlZEJ1c2luZXNzSWRzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1c2luZXNzSUQgc2V0IGluIGNvZ25pdG8gYXMgY3VzdG9tOkRCSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQklcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEZWZhdWx0QmlkKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206REJJJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpEQkknKSB8fFxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgZGJpID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KGRiaSwgJ2RlZmF1bHRCaWQnLCAnJykgfHwgJzEnO1xufVxuXG4vKipcbiAqIEdldCAgcmVxdWVzdGVkIGJ1c2luZXNzSWRzIGZyb20gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpIHtcbiAgICBsZXQgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5idXNpbmVzc0lkcycsIG51bGwpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RlZEJ1c2luZXNzSWRzID8gcmVxdWVzdGVkQnVzaW5lc3NJZHMuc3BsaXQoJywnKSA6IFtdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gY29nbml0byBjdXN0b206QVIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBidXNpbmVzc0lEIHJlcXVlc3RlZCBieSB0aGUgcXVlcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEFsbG93ZWRCdXNpbmVzc0lkcyhldmVudCkge1xuICAgIGNvbnN0IGJ1c2luZXNzZXMgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGJ1c2luZXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuICAgICAgICAne30nO1xuICAgIGNvbnN0IGFjY2Vzc1JpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICBpZiAoIWlzRW1wdHkoYWNjZXNzUmlnaHRzKSkge1xuICAgICAgICAgICAgY29uc3QgYmlkcyA9IF8uZ2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywge30pO1xuICAgICAgICAgICAgY29uc3Qgd2l0aExvY2FsID0geyAuLi5iaWRzLCAnMSc6ICdBJyB9O1xuICAgICAgICAgICAgXy5zZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB3aXRoTG9jYWwpO1xuXG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhciA9IHsgJ2J1c2luZXNzSWRzJzogeyAnMSc6ICdBJyB9IH07XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYXIsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfLmdldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHt9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIGN1c3RvbTpNT0QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBNb2R1bGUgYWNjZXNzIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZHVsZUluZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPVxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpNT0QnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOk1PRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOkFSJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpIHx8XG5cbiAgICAgICAgJ3t9JztcblxuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuICAgIHJldHVybiBfLmdldChtb2R1bGVSaWdodHMsICdtb2R1bGUnLCB7fSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2R1bGVzIGxpc3RlZCBpbiBjdXN0b206TU9ELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIC0gQSBzdGluZyBuYW1lIGZvciBhIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBUaGUgTW9kdWxlIGFjY2VzcyBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01vZHVsZShtb2R1bGVOYW1lLCBldmVudCkge1xuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IGdldE1vZHVsZUluZm8oZXZlbnQpO1xuICAgIGxldCBhbGxvd0FjY2VzcyA9IF8uZ2V0KG1vZHVsZVJpZ2h0cywgbW9kdWxlTmFtZSwgZmFsc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWxsb3dBY2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VyUm9sZXMgPSB7XG4gICAgYWRtaW46ICdBJyxcbiAgICByZWFkOiAnUicsXG4gICAgd3JpdGU6ICdXJ1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3tib2R5OiBzdHJpbmd9fSBldmVudFxuICogQHJldHVybnMge3N0cmluZ30gYnVzaW5lc3NJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tXcml0ZUFjY2VzcyhldmVudCkge1xuICAgIGNvbnN0IGV2ZW50Qm9keSA9IHBhcnNlQm9keShldmVudCk7XG4gICAgY29uc3QgYnVzaW5lc3NJZHMgPSBhY2Nlc3NSaWdodHNVdGlscyhldmVudCkgfHwgW107XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IGJ1c2luZXNzSWRzLmZpbmQoKGlkKSA9PiBpZCA9PT0gZXZlbnRCb2R5LmJ1c2luZXNzSWQpO1xuICAgIGNvbnN0IHJhdyA9IGdldEJ1c2luZXNzZXNJbmZvKGV2ZW50KTtcbiAgICBjb25zdCB1c2VyUmlnaHQgPSByYXdbYnVzaW5lc3NJZF07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfRU5WID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybiBldmVudEJvZHkuYnVzaW5lc3NJZDtcbiAgICB9XG5cbiAgICBpZiAoKHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLmFkbWluICYmIHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLndyaXRlKSB8fCAoIXVzZXJSaWdodCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1c2luZXNzSWQ7XG59XG5cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgREIgZnJvbSAnc2VxdWVsaXplJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudC5qcyc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9lcnJvckNvZGVzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIH0gZnJvbSAnLi9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIHNlcXVlbGl6ZSB3aGVyZSBjbGF1c2UgZnJvbSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgZGVmYXVsdCBzb3J0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIGV2ZW50IHBhc3NlZCBieSBsYW1iZGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHJldHVybnMge29iamVjdH0gQW4gc2VxdWVsaXplIHdoZXJlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsdGVycyA9IGZ1bmN0aW9uIChldmVudCwgb2JqZWN0RmlsdGVycyl7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgY29uc3Qgc3RhcnREYXRlID0gXy5nZXQocXVlcnksICdzdGFydERhdGUnKTtcbiAgICBjb25zdCBlbmREYXRlID0gXy5nZXQocXVlcnksICdlbmREYXRlJyk7XG4gICAgY29uc3Qgd2hlcmUgPSBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gXy5nZXQob2JqZWN0RmlsdGVycywgaXRlbSwgbnVsbCk7XG5cbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpdGVtLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IGAkJHtpdGVtfSRgXG4gICAgICAgICAgICAgICAgOiBpdGVtO1xuXG4gICAgICAgICAgICBhY2NbaXRlbU5hbWVdID0ge307XG4gICAgICAgICAgICBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmlMaWtlKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBgJSR7cXVlcnlbaXRlbV19JWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5vcikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gWy0xICogK3F1ZXJ5W2l0ZW1dLCArcXVlcnlbaXRlbV1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaW4pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHF1ZXJ5W2l0ZW1dLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pbikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcXVlcnlbaXRlbV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZEpzb247XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgSlNPTiwgcGFyc2UgaXRcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2UocXVlcnlbaXRlbV0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgbm90IEpTT04sIHBhc3MgdGhyb3VnaCBhcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRKc29uID0gcXVlcnlbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcGFyc2VkSnNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbC50eXBlID09PSBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IF8uZ2V0KHF1ZXJ5LCBpdGVtLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5NYXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmYWxzZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAnbnVsbCc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICd0cnVlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IGJvb2xlYW5NYXBbcXVlcnlWYWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGlmIChvYmplY3RGaWx0ZXJzPy5hY3RpdmUgJiYgIXdoZXJlPy5hY3RpdmUpIHtcbiAgICAgICAgd2hlcmUuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBidXNpbmVzc0lkcyA9IGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KTtcbiAgICBjb25zdCBmaWx0ZXJBZGRzID0ge1xuICAgICAgICBidXNpbmVzc0lkOiBidXNpbmVzc0lkc1xuICAgIH07XG5cbiAgICBpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcbiAgICAgICAgY29uc3QgcyA9IG1vbWVudC51dGMoc3RhcnREYXRlKTtcbiAgICAgICAgY29uc3QgZSA9IG1vbWVudC51dGMoZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVzID0ge1xuICAgICAgICAgICAgW0RCLk9wLmJldHdlZW5dOiBbcy50b0RhdGUoKSwgZS50b0RhdGUoKV1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZFN0YXJ0RGF0ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZEVuZERhdGUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckFkZHMuY3JlYXRlZEF0ID0gZGF0ZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aERhdGUgPSBPYmplY3QuYXNzaWduKHdoZXJlLCBmaWx0ZXJBZGRzKTtcblxuICAgIHJldHVybiB3aXRoRGF0ZTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIENyZWF0ZSBzZXF1ZWxpemUgb3JkZXIgY2xhdXNlIGZyb20gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgc29ydCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSB0aGUgZXZlbnQgY3JlYXRlZCBBV1MgbGFtYmRhLCBpdCB3aWxsIGNvbnRhaW4gcXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHdpdGggc29ydCBwcm9wZXJ0eSBhIGNvbW1hIHNlcGVyYXRlZCBsaXN0IG9mIHNvcnRhYmxlIGZpZWxkcyAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWx0ZXIgLSBBIGRlZmF1bHQgZmlsdGVyIG9iamVjdCBhcyBidWlsdCBieSBjcmVhdGVEZWZhdWx0IEZpbHRlcnMsIGlmIGl0ZW1zIGFyZSBub3Qgb24gdGhlIHNjaGVtYSB0aGV5IHdpbGwgbm90IGJlIGluIHRoZSBvcmRlciBieVxuICogQHJldHVybnMge29iamVjdH0gIEFuIHNlcXVlbGl6ZSBvcmRlciBieSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBmdW5jdGlvbiAoZXZlbnQsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICBsZXQgY29weU9mRGVmYXVsdEZpbHRlciA9IF8uY2xvbmUoZGVmYXVsdEZpbHRlcik7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgbGV0IHNvcnQgPSBfLmdldChxdWVyeSwgJ3NvcnQnLCAnLXVwZGF0ZWRBdCcpIHx8ICctdXBkYXRlZEF0JztcblxuICAgIHJldHVybiBzb3J0LnNwbGl0KCcsJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcblxuICAgICAgICBjb25zdCB0ZXN0SXRlbSA9IGl0ZW0uaW5kZXhPZignLScpID09PSAwID8gaXRlbS5zdWJzdHIoMSkgOiBpdGVtO1xuXG4gICAgICAgIGlmIChfLmdldChjb3B5T2ZEZWZhdWx0RmlsdGVyLCB0ZXN0SXRlbSwgbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRJdGVtID0gW107XG5cbiAgICAgICAgICAgIHRlc3RJdGVtLnNwbGl0KCcuJykuZm9yRWFjaCgocGFyZW50Q2hpbGRMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaChwYXJlbnRDaGlsZExpc3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmluZGV4T2YoJy0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2goJ0RFU0MnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaCgnQVNDJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaChzb3J0SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERCIGZyb20gJ3NlcXVlbGl6ZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB3aXRoIGRlZmF1bHQgZmlsdGVycyBmb3IgYSBnaXZlbiBzZXF1ZWxpYXplIFNjaGVtYSBPYmplY3QsIGFuZCBzZXQgb2Ygc3ViIHNjaGVtYXNcbiAqXG4gKiBAcGFyYW0ge3t0eXBlOnt9LCBmaWx0ZXJPdmVyUmlkZTpzdHJpbmd9fSBzY2hlbWEgLSB0eXBlIGlzIHNlcXVlbGl6ZSBkYXRhIHR5cGUgZmlsdGVyT3ZlclJpZGUgaXMgdXNlZCB0byBvdmVyaWRlIGRlZmF1bHQgZmlsdGVyVHlwZSBpbXBsaWVkIGJ5IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJTY2hlbWFzIC0gQW4gb2JqZWN0IHdpdGggYWxpYXMgYXMgdGhlIGtleSBhbmQgc2VxdWVsaXplIHNjaGVtYSBhcyB0aGUgdmFsdWUgaHR0cDovL2RvY3Muc2VxdWVsaXplanMuY29tL2NsYXNzL2xpYi9zZXF1ZWxpemUuanN+U2VxdWVsaXplLmh0bWwjaW5zdGFuY2UtbWV0aG9kLWRlZmluZVxuICogc3ViIHNjaGVtYSBjYW4gYmUge2xvY2F0aW9uOiBsb2NhdGlvblNjaGVtYX0gb3Ige2xvY2F0aW9uOiB7YXM6IFwiYXNBbGlhc1wiLCBzY2hlbWE6IHNjaGVtYX19XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBPYmplY3Qgd2l0aCBhIGRlZmF1bHQgZmlsdGVyIGZvciBlYWNoIGRhdGFUeXBlIENIQVIgYW5kIFRFWFQgd2lsbCBnZXQgYSAkbGlrZSBvcGVyYXRvciwgSU5URUdFUiwgREVDSU1BTCBhbmQgQk9PTEVBTiB3aWxsIGdldCBhICRlcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXJzKHNjaGVtYSwgc3ViU2NoZW1hcyA9IHt9KSB7XG4gICAgc2NoZW1hID0gXy5jbG9uZShzY2hlbWEpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHt9O1xuXG4gICAgYWRkRmlsdGVyc0Zyb21TY2hlbWEoc2NoZW1hLCBmaWx0ZXJzKTtcbiAgICBPYmplY3Qua2V5cyhzdWJTY2hlbWFzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgYWRkRmlsdGVyc0Zyb21TY2hlbWEoc3ViU2NoZW1hc1trZXldLCBmaWx0ZXJzLCBrZXkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJPdmVyUmlkZVR5cGVzID0ge1xuICAgIGVxdWFsOidlcXVhbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHNjaGVtYSwgYWNjdW11bGF0b3IsIGtleVByZWZpeCA9ICcnKSB7XG4gICAgY29uc3QgYXNMaW5rQWxpYXMgPSBfLmdldChzY2hlbWEsICdhcycsIG51bGwpO1xuICAgIHNjaGVtYSA9IF8uZ2V0KHNjaGVtYSwgJ3NjaGVtYScpIHx8IHNjaGVtYTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpdGVtO1xuXG4gICAgICAgIGlmIChhc0xpbmtBbGlhcykge1xuICAgICAgICAgICAgYWNjW2FzTGlua0FsaWFzXSA9IHsgdHlwZTogREIuU1RSSU5HLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleVByZWZpeCkge1xuICAgICAgICAgICAga2V5ID0gYCR7a2V5UHJlZml4fS4ke2l0ZW19YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWFbaXRlbV0uZmlsdGVyVHlwZSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IHNjaGVtYVtpdGVtXS5maWx0ZXJUeXBlIH07XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NyZWF0ZSBhIGN1c3RvbSBmaWx0ZXIgdG8gb3ZlcnJpZGVyIGRlZmF1bHRzIGltcGxpZWQgYnkgdGhlIGRiIHZhbHVlXG4gICAgICAgIGNvbnN0IGZpbHRlclR5cGVPdmVyUmlkZSA9IF8uZ2V0KHNjaGVtYSxgWyR7aXRlbX1dLmZpbHRlck92ZXJSaWRlYCk7XG5cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBmaWx0ZXJUeXBlT3ZlclJpZGUgfHwgc2NoZW1hW2l0ZW1dLnR5cGU7XG5cbiAgICAgICAgLy90b2RvIHRoZXNlIHNob3VsZCBiZSByZW1vdmVkLCB0aGVyZSBhcmUganVzdCBoZXJlIGZvciBzb3J0IHRlc3RzXG4gICAgICAgIHN3aXRjaCAoaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgREIuQ0hBUjpcbiAgICAgICAgICAgIGNhc2UgREIuU1RSSU5HOlxuICAgICAgICAgICAgY2FzZSBEQi5URVhUOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5pTGlrZSB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkRFQ0lNQUw6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgREIuQklHSU5UOlxuICAgICAgICAgICAgY2FzZSBEQi5JTlRFR0VSOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5EQVRFOlxuICAgICAgICAgICAgY2FzZSBEQi5EQVRFT05MWTpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AubHQgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vbmV3IHNlcXVlbGl6ZSB1c2VzIGNsYXNzZXMgaW5zdGVhZCBvZiBvYmplY3RzXG4gICAgICAgIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLlNUUklORykge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmlMaWtlIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5ERUNJTUFMKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSAgZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSAgIGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuQklHSU5UKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkpTT05CKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmNvbnRhaW5zIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5EQVRFT05MWSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy90aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIG1vZGVscyBzbyBhZGQgdGhlbSBhbHdheXNcbiAgICAgICAgYWNjWydjcmVhdGVkQXQnXSA9IHsgdHlwZTogREIuREFURSwgZmlsdGVyVHlwZTogREIuT3AubHQgfTtcbiAgICAgICAgYWNjWyd1cGRhdGVkQXQnXSA9IHsgdHlwZTogREIuREFURSwgZmlsdGVyVHlwZTogREIuT3AubHQgfTtcbiAgICAgICAgYWNjWydpZCddID0geyB0eXBlOiBEQi5JTlRFR0VSLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuXG4gICAgICAgIC8vZmlsdGVyIG92ZXJSaWRlc1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IGZpbHRlck92ZXJSaWRlVHlwZXMuZXF1YWwpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBhY2N1bXVsYXRvcik7XG59XG4iLCIvKipcbiAqIGNyZWF0ZSBwYWdpbmF0aW9uIG9iamVjdCBmcm9tIFNlcXVlbGl6ZSBmaW5kQWxsXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0IC0gc2VxdWVsaXplIHJlc3VsdFxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gbWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIHBhZ2Ugb2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdpbmF0aW9uRnJvbUZpbmRBbGwocmVzdWx0LCBsaW1pdCwgb2Zmc2V0KSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IFtdO1xuICAgIGxpbWl0ID0gbGltaXQgfHwgMDtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQubGVuZ3RoID4gbGltaXQ7XG4gICAgaWYgKGhhc01vcmUpIHtcbiAgICAgICAgcmVzdWx0LnNwbGljZSgtMSwgMSk7XG4gICAgfVxuICAgIGNvbnN0IHBhZ2VPYmplY3QgPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBsaW1pdDogbGltaXQsXG4gICAgICAgIHJvd3M6IHJlc3VsdCxcbiAgICAgICAgaGFzTW9yZTogaGFzTW9yZVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFnZU9iamVjdDtcbn1cblxuLyoqXG4gKiB3cmFwcGVyIGZvciBTZXF1ZWxpemUgZmluZEFsbFxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gaW5zdGFuY2Ugb2YgU2VxdWVsaXplIChtdXN0IGJlIGluaXRpYWxpemVkKVxuICogQHBhcmFtIHsqJntpbmNsdWRlOiBbe21vZGVsOiAqfV0sIHdoZXJlOiB7YnVzaW5lc3NJZDogQXJyYXl9LCBvcmRlcjogW3N0cmluZ1tdXX19IG9wdGlvbnMgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kQWxsKG1vZGVsLCBvcHRpb25zKSB7XG5cbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgfHwgMDtcbiAgICBjb25zdCBmaW5kQXJncyA9IE9iamVjdC5hc3NpZ24oe2luY2x1ZGU6IHsgYWxsOiB0cnVlLCBuZXN0ZWQ6IHRydWUgfX0sIG9wdGlvbnMsIHsgbGltaXQ6IGxpbWl0ICsgMSB9KTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgbW9kZWwuZmluZEFsbChmaW5kQXJncyk7XG4gICAgcmV0dXJuIGdldFBhZ2luYXRpb25Gcm9tRmluZEFsbChyZXN1bHRzLCBsaW1pdCwgb3B0aW9ucy5vZmZzZXQpO1xufVxuXG5jb25zdCBmaW5kVXRpbHMgPSB7XG4gICAgZmluZEFsbFxufTtcbmV4cG9ydCBkZWZhdWx0IGZpbmRVdGlsczsiLCJpbXBvcnQgeyBEeW5hbW9EQkRvY3VtZW50IH0gZnJvbSAnQGF3cy1zZGsvbGliLWR5bmFtb2RiJztcclxuaW1wb3J0IHsgRHluYW1vREIgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xyXG5cclxuY29uc3QgZHluYW1vVXRpbCA9IHtcclxuICAgIGdldDogKHBhcmFtcykgPT4gZ2V0KHBhcmFtcylcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3tUYWJsZU5hbWU6c3RyaW5nLCBLZXk6e2tleTpzdHJpbmd9fX0gcGFyYW1zXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBnZXQocGFyYW1zKSB7XHJcbiAgICBjb25zdCBkeW5hbW9EYiA9IER5bmFtb0RCRG9jdW1lbnQuZnJvbShuZXcgRHluYW1vREIoKSk7XHJcbiAgICByZXR1cm4gZHluYW1vRGIuZ2V0KHBhcmFtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGR5bmFtb1V0aWw7IiwiaW1wb3J0IHsgaGFuZGxlRmlsZSB9IGZyb20gJy4vaGFuZGxlRmlsZS5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXZlbnRzKGV2ZW50LCB0cmFuc2Zvcm1lciwgZXJyb3JIYW5kbGVyUGVyRmlsZSwgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMgPSBmYWxzZSwgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuUmVjb3Jkcykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKGV2ZW50LlJlY29yZHMsIChyZWNvcmQpID0+IHtcbiAgICAgICAgY29uc3Qgc25zSW5mbyA9IEpTT04ucGFyc2UoXy5nZXQocmVjb3JkLCAnU25zLk1lc3NhZ2UnLCAne30nKSk7XG4gICAgICAgIGNvbnN0IHMzQnVja2V0ID0gc25zSW5mby5idWNrZXQ7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gc25zSW5mby5maWxlcyB8fCBbXTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoZmlsZXMsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlKTtcbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUZpbGUocGF0aCwgczNCdWNrZXQsIHRyYW5zZm9ybWVyLCB7IHNob3VsZFNraXBGYWlsZWRGb2xkZXJzLCB1c2VySW1wb3J0VHlwZXMgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JIYW5kbGVyUGVyRmlsZSAmJiAhZXJyb3JIYW5kbGVyUGVyRmlsZShlcnIsIHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyAnRXJyb3JzIHByb2Nlc3Npbmcgb25lIG9yIG1vcmUgZmlsZXMuIFNlZSBlcnJvciBsb2dzIGZvciBkZXRhaWwgb24gZWFjaCBlcnJvci4nO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFMzVXRpbCBmcm9tICcuLi9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlRmlsZShwYXRoLCBzM0J1Y2tldCwgdHJhbnNmb3JtZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IF8uZ2V0KG9wdGlvbnMsICdzaG91bGRTa2lwRmFpbGVkRm9sZGVycycpO1xuICAgIGNvbnN0IHVzZXJJbXBvcnRUeXBlcyA9IF8uZ2V0KG9wdGlvbnMsICd1c2VySW1wb3J0VHlwZXMnKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgICAgIEtleTogcGF0aFxuICAgIH07XG4gICAgbGV0IGJvZHkgPSAne30nXG4gICAgdHJ5IHtcbiAgICAgICAgYm9keSA9IGF3YWl0IFMzVXRpbC5nZXRPYmplY3QocGFyYW1zKTtcbiAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgIGNvbnN0IHJldHVybmVkVmFsdWUgPSBhd2FpdCB0cmFuc2Zvcm1lcihwYXJzZWRCb2R5KTtcbiAgICAgICAgYXdhaXQgUzNVdGlsLmRlbGV0ZU9iamVjdChwYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5lZFZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hhbmRsZS1maWxlLWVycm9yJywgZXJyb3IpO1xuXG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnTm9TdWNoS2V5JyB8fCAhYm9keSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld1BhdGggPSAnJztcblxuICAgICAgICBpZiAodXNlckltcG9ydFR5cGVzKSB7XG4gICAgICAgICAgICAvLyBsb29rIGZvciBpdGVtcyBpbiB0aGUgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICBjb25zdCB1c2Vyc0ltcG9ydHMgPSBPYmplY3QudmFsdWVzKHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gXy5sYXN0KGl0ZW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlck5hbWUgPSBfLmZpcnN0KGl0ZW1zKTtcblxuICAgICAgICAgICAgaWYgKHVzZXJzSW1wb3J0cy5pbmRleE9mKGZvbGRlck5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IGAke2ZvbGRlck5hbWV9L2Vycm9yLyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtb25jZS9gKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlL2AsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtdHdpY2UvYCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtdHdpY2UvYCwgYCR7Zm9sZGVyTmFtZX0vZXJyb3IvYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlLyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgcGF0aEFuZEV2ZW50TWlzTWF0Y2hFcnJvci8ke3BhdGh9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNraXBGYWlsZWRGb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBlcnJvci8ke3BhdGh9YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsICdmYWlsZWQtb25jZS8nKSkge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgJ2ZhaWxlZC1vbmNlLycsICdmYWlsZWQtdHdpY2UvJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCAnZmFpbGVkLXR3aWNlLycpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCAnZmFpbGVkLXR3aWNlLycsICdlcnJvci8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMocGF0aCwgJ2RlbGF5VW50aWwvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IF8ubGFzdChwYXRoLnNwbGl0KCcvJykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgZmFpbGVkLW9uY2UvJHtwYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSB7XG4gICAgICAgICAgICBCdWNrZXQ6IHMzQnVja2V0LFxuICAgICAgICAgICAgS2V5OiBuZXdQYXRoLFxuICAgICAgICAgICAgQm9keTogYm9keVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IFMzVXRpbC5wdXRPYmplY3QobmV3UGFyYW1zKTtcbiAgICAgICAgYXdhaXQgUzNVdGlsLmRlbGV0ZU9iamVjdChwYXJhbXMpO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUzNVdGlscyBmcm9tICcuLi9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMnO1xuaW1wb3J0IFNOU1V0aWwgZnJvbSAnLi4vc25zL1NOU1V0aWxzLmpzJztcbmltcG9ydCBkeW5hbW9VdGlsIGZyb20gJy4uL2R5bmFtby9keW5hbW9VdGlscy5qcyc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGJ1Y2tldFxuICogQHBhcmFtIHtudW1iZXJ9IG1heEtleXNcbiAqIEBwYXJhbSB7T2JqZWN0fSB1c2VySW1wb3J0VHlwZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvb3AoYnVja2V0LCBtYXhLZXlzLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBsZXQgYnVja2V0UmVzdWx0ID0ge307XG4gICAgbGV0IGZpbGVMaXN0ID0gW107XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG1vbWVudCgpO1xuXG4gICAgZG8ge1xuICAgICAgICBidWNrZXRSZXN1bHQgPSBhd2FpdCBTM1V0aWxzLmxpc3RPYmplY3RzVjIoe1xuICAgICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgICBNYXhLZXlzOiBtYXhLZXlzLFxuICAgICAgICAgICAgQ29udGludWF0aW9uVG9rZW46IF8uZ2V0KGJ1Y2tldFJlc3VsdCwgJ05leHRDb250aW51YXRpb25Ub2tlbicpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBuZXdGaWxlcyA9IF8uZmlsdGVyKGJ1Y2tldFJlc3VsdC5Db250ZW50cywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoXy5nZXQoZmlsZSwgJ0tleScpLCAnZGVsYXlVbnRpbC8nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEZWxheVRpbWUgPSBfLmdldChmaWxlLCAnS2V5Jykuc3BsaXQoJy8nKVsxXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGZpbGVEZWxheVRpbWUsICdZWVlZTU1EREhIbW0nKS5pc1NhbWVPckJlZm9yZShjdXJyZW50VGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlckltcG9ydFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgaXRlbXMgaW4gdGhlIHVzZXJJbXBvcnRUeXBlc1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJzSW1wb3J0cyA9IE9iamVjdC52YWx1ZXModXNlckltcG9ydFR5cGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGZpbGUuS2V5LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoaXRlbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlck5hbWUgPSBfLmZpcnN0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc0VtcHR5KGZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJzSW1wb3J0cy5pbmRleE9mKGZvbGRlck5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFfLnN0YXJ0c1dpdGgoZmlsZS5LZXksIGAke2ZvbGRlck5hbWV9L2Vycm9yYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIV8uc3RhcnRzV2l0aChmaWxlLktleSwgJ2Vycm9yJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbGVMaXN0ID0gXy5jb25jYXQoZmlsZUxpc3QsIG5ld0ZpbGVzKTtcbiAgICB9IHdoaWxlIChidWNrZXRSZXN1bHQuSXNUcnVuY2F0ZWQgJiYgYnVja2V0UmVzdWx0Lk5leHRDb250aW51YXRpb25Ub2tlbiAmJiBmaWxlTGlzdC5sZW5ndGggPCBtYXhLZXlzKTtcblxuICAgIHJldHVybiBmaWxlTGlzdDtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZWQgU05TIGV2ZW50cyBhdCBhIHN0ZWFkeSBwYWNlIGZvciBkYXRhIGluIGEgcGFydGljdWxhciBidWNrZXQuIFNob3VsZCBiZSBleGVjdXRlZCB2aWEgYSBjbG91ZCB3YXRjaCBjcm9uIGpvYiBhcyBhIHBhcnQgb2YgYSBtaWNybyBzZXJ2aWNlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ1RhYmxlIC0gVGhlIER5bmFtbyBEQiB0YWJsZSB3aGVyZSB0byBnZXQgdGhlIGNodW5rLXNpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlS2V5IC0gVGhlIGtleSB0byB0aGUgaXRlbSBpbiB0aGUgRHluYW1vIERCIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGNodW5rLXNpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IGJ1Y2tldCAtIFRoZSBuYW1lIG9mIHRoZSBzMyBidWNrZXQgdG8gd2F0Y2gsIHdoZW4geW91IGRyb3AgaXRlbXMgaW50byB0aGlzIHRhYmxlIGV2ZW50cyB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzbnNUb3BpYyAtIFRoZSBuYW1lIG9mIHRoZSBzbnNFdmVudCB0byBwdWJsaXNoXG4gKiBAcGFyYW0ge29iamVjdH0gdXNlckltcG9ydFR5cGVzIC0gaW1wb3J0IHR5cGVzIHRvIGZpbHRlciBvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaEV2ZW50cyhjb25maWdUYWJsZSwgdGFibGVLZXksIGJ1Y2tldCwgc25zVG9waWMsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZHluYW1vVXRpbC5nZXQoe1xuICAgICAgICAgICAgVGFibGVOYW1lOiBjb25maWdUYWJsZSxcbiAgICAgICAgICAgIEtleTogeyBrZXk6IHRhYmxlS2V5IH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IGNvbmZpZyBmb3Iga2V5OiAke3RhYmxlS2V5fSB0YWJsZTogJHtjb25maWdUYWJsZX0gZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIG9mIDIgYW5kIDEwYCwgZSk7XG4gICAgfVxuICAgIGxldCBjaHVua1NpemUgPSBfLmdldChyZXN1bHQsICdJdGVtLnNuc0NodW5rU2l6ZScsIDIpO1xuICAgIGxldCBtYXhNZXNzYWdlcyA9IF8uZ2V0KHJlc3VsdCwgJ0l0ZW0uc25zTWF4TWVzc2FnZXMnLCAxMCk7XG5cbiAgICBjb25zdCBzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlID0gYXdhaXQgU05TVXRpbC5jcmVhdGVUb3BpYyh7IE5hbWU6IHNuc1RvcGljIH0pO1xuICAgIGNvbnN0IHRvcGljQXJuID0gc25zQ3JlYXRlVG9waWNSZXNwb25zZS5Ub3BpY0FybjtcbiAgICBjb25zdCBtYXhLZXlzID0gY2h1bmtTaXplICogbWF4TWVzc2FnZXM7XG5cbiAgICBjb25zdCBmaWxlTGlzdCA9IGF3YWl0IGxvb3AoYnVja2V0LCBtYXhLZXlzLCB1c2VySW1wb3J0VHlwZXMpO1xuXG4gICAgY29uc3QgbWVzc2FnZUxpc3QgPSBfLmNoYWluKGZpbGVMaXN0KVxuICAgICAgICAubWFwKCdLZXknKVxuICAgICAgICAuY2h1bmsoY2h1bmtTaXplKVxuICAgICAgICAuc2xpY2UoMCwgbWF4TWVzc2FnZXMpXG4gICAgICAgIC52YWx1ZSgpXG4gICAgO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKG1lc3NhZ2VMaXN0LCAoZmlsZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIFNOU1V0aWwucHVibGlzaCh7XG4gICAgICAgICAgICBNZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgYnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFRvcGljQXJuOiB0b3BpY0FyblxuICAgICAgICB9KTtcbiAgICB9KTtcbn0iLCJpbXBvcnQgeyBwdWJsaXNoRXZlbnRzIH0gZnJvbSAnLi9wdWJsaXNoRXZlbnRzLmpzJztcbmltcG9ydCB7IGhhbmRsZUV2ZW50cyB9IGZyb20gJy4vaGFuZGxlRXZlbnRzLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogYnVja2V0IHdhdGNoZXIgd2F0Y2hlcyBhIHMzIGJ1Y2tldCBhbmQgcHVibGlzaGVzIGV2ZW50cyB0byBhIHNucyB0b3BpYywgdGhpcyBhbGxvd3MgeW91IHRvIHByb2Nlc3MgZmlsZXMgaW4gczMgd2l0aCBhIHNvbWUgdHJhbnNmb3JtZXIgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHdhdGNoQnVja2V0LCBzZWUgYmVsb3dcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMuZXZlbnQgLSBUaGUgZXZlbnQgb2YgdGhlIGxhbWJkYVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5keW5hbW9Db25maWdUYWJsZSAtIFRoZSBEeW5hbW8gREIgdGFibGUgd2hlcmUgdG8gZ2V0IHRoZSBjaHVua1NpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5keW5hbW9Db25maWdLZXkgLSBUaGUga2V5IHRvIHRoZSBpdGVtIGluIHRoZSBEeW5hbW8gREIgdGFibGUgdGhhdCBob2xkcyB0aGUgY2h1bmtTaXplIGFuZCBtYXhNZXNzYWdlIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuczNCdWNrZXQgLSBUaGUgbmFtZSBvZiB0aGUgczMgYnVja2V0IHRvIHdhdGNoLCB3aGVuIHlvdSBkcm9wIGl0ZW1zIGludG8gdGhpcyB0YWJsZSBldmVudHMgd2lsbCBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnNuc1RvcGljIC0gVGhlIG5hbWUgb2YgdGhlIHNuc0V2ZW50IHRvIHB1Ymxpc2hcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy50cmFuc2Zvcm1lciAtIHRoZSBmdW5jdGlvbiB0byBydW4gb24gZWFjaCBmaWxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbcGFyYW1zLmVycm9ySGFuZGxlclBlckZpbGVdIC0gdGhlIGZ1bmN0aW9uIHRvIHJ1biBvbiBhcyBhIGNhdGNoIG9uIGVhY2ggZmlsZVxuICogQHBhcmFtIHtib29sZWFufSBbcGFyYW1zLnNob3VsZFNraXBGYWlsZWRGb2xkZXJzXSAtIHdoZXRoZXIgdG8gdXNlIHRoZSBmYWlsZWQtb25jZSwgZmFpbGVkLXR3aWNlLCBlcnJvciBvciBqdXN0IGVycm9yIGZvbGRlcnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zLnVzZXJJbXBvcnRUeXBlc10gLSB1c2VyIGltcG9ydCBzdWIgZGlyZWN0b3JpZXMgb2JqZWN0IG1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2hCdWNrZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1vQ29uZmlnVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtb0NvbmZpZ0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczNCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuc1RvcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyUGVyRmlsZSA9IF8ubm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuICAgIGlmICghZXZlbnQgfHwgIWR5bmFtb0NvbmZpZ1RhYmxlIHx8ICFkeW5hbW9Db25maWdLZXkgfHwgIXMzQnVja2V0IHx8ICFzbnNUb3BpYyB8fCAhdHJhbnNmb3JtZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnMuIE5lZWQgZXZlbnQsIGR5bmFtb0NvbmZpZ1RhYmxlLCBkeW5hbW9Db25maWdLZXksIHMzQnVja2V0LCBzbnNUb3BpYywgdHJhbnNmb3JtZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBFdmVudFNvdXJjZSA9IF8uZ2V0KGV2ZW50LCAnUmVjb3Jkc1swXS5FdmVudFNvdXJjZScpO1xuICAgIGlmIChfLmlzRXF1YWwoRXZlbnRTb3VyY2UsICdhd3M6c25zJykpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUV2ZW50cyhldmVudCwgdHJhbnNmb3JtZXIsIGVycm9ySGFuZGxlclBlckZpbGUsIHNob3VsZFNraXBGYWlsZWRGb2xkZXJzLCB1c2VySW1wb3J0VHlwZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBydW4gZnJvbSB0aGUgY3JvbiBqb2Igc28gcHVibGlzaCBTTlMgZXZlbnRzXG4gICAgICAgIHJldHVybiBwdWJsaXNoRXZlbnRzKGR5bmFtb0NvbmZpZ1RhYmxlLCBkeW5hbW9Db25maWdLZXksIHMzQnVja2V0LCBzbnNUb3BpYywgdXNlckltcG9ydFR5cGVzKTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgZXJyb3JMaXN0ID0ge1xuICAgIGludmFsaWRJbnZlbnRvcnlSZWxlYXNlUmVxdWVzdDoge1xuICAgICAgICBtZXNzYWdlOiAnTk9UIEVOT1VHSCBJTlZFTlRPUlkgVE8gRlVMRklMTCBSRUxFQVNFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgYWxyZWFkeVJlbGVhc2VkOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBTFJFQURZIFJFTEVBU0VEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgYWxyZWFkeVJlY2VpdmVkOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdSRUNFSVZBQkxFIEFMUkVBRFkgUkVDRUlWRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEyJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSXRlbXNSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdWQUxJRCBJVEVNUyBNVVNUIEJFIElOQ0xVREVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZElEOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJRCBpcyBpbnZhbGlkJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlY2VpdmFibGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ01VU1QgQ09OVEFJTiBBVCBMRUFTVCBPTkUgUkVDRUlWQUJMRScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTUnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFJFUVVFU1QgREFUQScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTYnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRBUElLZXk6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgUkVRVUVTVCAtIEFQSSBNQVkgS0VZIElOVkFMSUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE3JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBxYkNyZWF0aW9uRXJyb3I6IHtcbiAgICAgICAgbWVzc2FnZTogJ1FVSUNLQk9PS1MgRVJST1IgLSBFUlJPUiBDUkVBVElORyBPQkpFQ1QgSU4gUVVJQ0tCT09LUycsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGNhbm5vdFJlb3Blbjoge1xuICAgICAgICBtZXNzYWdlOiAnQ0FOTk9UIFJFT1BFTiAtIFRIRSBPUkRFUiBIQVMgQUxSRUFEWSBCRUVOIE9QRU5FRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWREYXRlRm9ybWF0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIERBVEUgRk9STUFUJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFN0YXJ0RGF0ZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBTVEFSVCBEQVRFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEVuZERhdGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgRU5EIERBVEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIxJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkT3JkZXJTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBFRElUIE9SREVSIElURU1TIFVOTEVTUyBUSEUgT1JERVIgSVMgSU4gRVNUSU1BVEUgU1RBVFVTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFBheW1lbnRTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgUEFZTUVOVCBTVEFUVVMgUEFZTUVOVCBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIzJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVsZWFzZVN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBSRUxFQVNFLCBTVEFUVVMgUkVMRUFTRSBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVjZWl2YWJsZVN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBSRUNFSVZBQkxFLCBTVEFUVVMgUkVDRUlWQUJMRSBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDAyNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEpzb246e1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBKU09OJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEZpbHRlcjp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEZJTFRFUicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjYnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRVc2VyTmFtZVVwZGF0ZTp7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFVTRVJOQU1FJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW1hZ2VTaXplTGltaXQ6e1xuICAgICAgICBtZXNzYWdlOiAnSU1BR0UgU0laRSBMSU1JVCAxMDBLQiBFWENFRURFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIHVuYXV0aG9yaXplZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFVVEhPUklaRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MTExJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAxXG4gICAgfSxcbiAgICBub3RGb3VuZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdJVEVNIE5PVCBGT1VORCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDRcbiAgICB9LFxuICAgIGVtYWlsUmVxdWlyZWQ6e1xuICAgICAgICBtZXNzYWdlOiAnTk8gRU1BSUwgUFJPVklERUQsIENIRUNLIENVU1RPTUVSIEVNQUlMJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgbW9iaWxlUGhvbmVSZXF1aXJlZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdOTyBNT0JJTEUgUEhPTkUgUFJPVklERUQsIENIRUNLIENVU1RPTUVSIENPTlRBQ1RTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgaW52YWxpZENhZGVuY2VUeXBlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIENBREVOQ0UgVFlQRScsXG4gICAgICAgIGVycm9yQ29kZTogJzUwMDEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA1MDBcbiAgICB9LFxufTsiLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi9lcnJvckNvZGVzLmpzJztcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHt7fX0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzcyhib2R5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcbiAgICBkYkNsb3NlKCk7XG5cbiAgICByZXR1cm4gYnVpbGRSZXNwb25zZSgyMDAsIGJvZHkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcGFyYW0ge3tkYkNsb3NlOmZ1bmN0aW9ufHVuZGVmaW5lZH19IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3NIdG1sKGh0bWwsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuXG4gICAgZGJDbG9zZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L2h0bWwnLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogaHRtbFxuICAgIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0LnVzZXJBdHRyaWJ1dGVzJyk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1snY29nbml0bzplbWFpbF9hbGlhcyddIHx8ICdVTktOT1dOIFVTRVInO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdXNlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gZXZlbnQge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3VzZXJuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpVSUQnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOlVJRCcpIHx8XG4gICAgICAgICcwJztcblxuICAgIGNvbnN0IGlkID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG5cbiAgICBjb25zdCB1c2VybmFtZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuZW1haWwnKSB8fCBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuZW1haWwnKSB8fCAnTE9DQUwgVEVTVCBVU0VSJztcblxuICAgIHJldHVybiB7XG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBpZFxuICAgIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFpbHVyZSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSBib2R5IHtPYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMge09iamVjdH0gYW4gb3B0aW9ucyBvYmplY3RcbiAqIEByZXR1cm5zIHt7c3RhdHVzQ29kZTpudW1iZXIsIGhlYWRlcnM6b2JqZWN0LCBib2R5OnN0cmluZ319IGEgcmVzcG9uc2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlKGJvZHkgPSB7fSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG4gICAgZGJDbG9zZSgpO1xuICAgIGxldCBjbGVhbmVkRXJyb3JCb2R5O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LlVUSUxfTE9HID09PSAnTE9HX0FMTCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignLS0tLS0tLT5VVElMIEVSUk9SOicsIGJvZHkpO1xuICAgIH1cblxuICAgIGNvbnN0IE5PUk1BTF9FUlJPUiA9IHsgc3RhdHVzQ29kZTogNTAwLCBlcnJvckNvZGU6ICc1WFgnLCBtZXNzYWdlOiAnSU5URVJOQUwgVVRJTCBFUlJPUicgfTtcbiAgICBjbGVhbmVkRXJyb3JCb2R5ID0gYm9keTtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoYm9keS5kZXRhaWxzKSkge1xuICAgICAgICBjbGVhbmVkRXJyb3JCb2R5ID0gZGV0ZWN0Sm95RXJyb3IoYm9keSk7XG4gICAgfSBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKGJvZHkuZXJyb3JDb2RlKSB8fCBfLmlzVW5kZWZpbmVkKGJvZHkuc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgY2xlYW5lZEVycm9yQm9keSA9IGRldGVjdFNlcXVlbGl6ZUVycm9yKGJvZHkpO1xuICAgIH1cbiAgICBpZihfLmdldChib2R5LCAncmVzcG9uc2UuZGF0YS5tZXNzYWdlJykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignLS0tLS0tLT5VVElMIEVSUk9SOiAnK18uZ2V0KGJvZHksICdyZXNwb25zZS5kYXRhLm1lc3NhZ2UnKSlcbiAgICB9XG5cbiAgICBjb25zdCBuZXdCb2R5ID0gXy5tZXJnZShOT1JNQUxfRVJST1IsIGNsZWFuZWRFcnJvckJvZHkpO1xuXG4gICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UobmV3Qm9keS5zdGF0dXNDb2RlLCBuZXdCb2R5KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsdXJlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBzdGF0dXNDb2RlIHtOdW1iZXJ9IGEgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSBib2R5IHtPYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMge3tzdGF0dXNDb2RlOm51bWJlciwgaGVhZGVyczpvYmplY3QsIGJvZHk6c3RyaW5nfX0gYSByZXNwb25zZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYnVpbGRSZXNwb25zZShzdGF0dXNDb2RlLCBib2R5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcbiAgICB9O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEV2ZW50IHt7Ym9keTpzdHJpbmd9fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIGV2ZW50IHsqfSB0aGUganNvbiBvYmplY3Qgb2YgdGhlIGJvZHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQm9keShyZXF1ZXN0RXZlbnQpIHtcblxuICAgIGxldCBldmVudEJvZHkgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhyZXF1ZXN0RXZlbnQuYm9keSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV2ZW50Qm9keSA9IEpTT04ucGFyc2UocmVxdWVzdEV2ZW50LmJvZHkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIEpTT05cbiAgICAgICAgICAgIGV2ZW50Qm9keSA9IG51bGw7XG5cbiAgICAgICAgICAgIHRocm93IGVycm9yTGlzdC5pbnZhbGlkSnNvbjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyZXF1ZXN0RXZlbnQuYm9keSkpIHtcbiAgICAgICAgZXZlbnRCb2R5ID0gcmVxdWVzdEV2ZW50LmJvZHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50Qm9keTtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHJlcXVlc3RFdmVudCB7c3RyaW5nfG9iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IHVuZGVmaW5lZCBhIGNhbGwgYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgZXZlbnQgeyp9IHRoZSBqc29uIG9iamVjdCBvZiB0aGUgYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFdmVudChyZXF1ZXN0RXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IGV2ZW50ID0ge307XG4gICAgaWYgKF8uaXNTdHJpbmcocmVxdWVzdEV2ZW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnQgPSBKU09OLnBhcnNlKHJlcXVlc3RFdmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgSlNPTlxuICAgICAgICAgICAgZXZlbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhFcnJvcihlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QocmVxdWVzdEV2ZW50KSkge1xuICAgICAgICBldmVudCA9IHJlcXVlc3RFdmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICogbG9vayBmb3Igc2VxdWVsaXplIGVycm9ycyBhbmQgcmV0dXJuIGEgbWVzc2FnZVxuICogRVJST1JTIHNob3VsZCBub3QgYmUgY2F1Z2h0IGhlcmUgdGhpcyBpcyBhIGZhbGxiYWNrIGZvciB1bmtub3duIGRhdGFiYXNlIGVycm9yc1xuICpcbiAqIEBwYXJhbSBib2R5IHtvYmplY3R9IHBhcnQgb2YgYSBib2R5IHJlc3BvbnNlXG4gKiBAcmV0dXJucyBlcnJvciBtZXNzYWdlIG9iamVjdCB7bWVzc2FnZTpzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RTZXF1ZWxpemVFcnJvcihib2R5KSB7XG4gICAgY29uc3QgZXJyb3JCb2R5ID0ge307XG5cbiAgICBsZXQgc2VxdWVsaXplRXJyb3IgPSBfLmdldChib2R5LCAnZXJyb3JzJywgW10pLnJlZHVjZSgoYWNjLCBlcnIpID0+IHtcbiAgICAgICAgYWNjID0gYWNjICsgJyAnICsgXy5nZXQoZXJyLCAnbWVzc2FnZScpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sICcnKTtcbiAgICBjb25zdCBwYXJlbnRFcnJvciA9IF8uZ2V0KGJvZHksICdwYXJlbnQnLCAnJyk7XG5cbiAgICBzZXF1ZWxpemVFcnJvciA9IHNlcXVlbGl6ZUVycm9yICsgXy5nZXQoYm9keSwgJ29yaWdpbmFsLmRldGFpbCcsICcnKSArIF8uZ2V0KGJvZHksICdUeXBlRXJyb3InLCAnJykgKyBwYXJlbnRFcnJvcjtcbiAgICBlcnJvckJvZHkubWVzc2FnZSA9IHNlcXVlbGl6ZUVycm9yLnRyaW0oKTtcbiAgICByZXR1cm4gZXJyb3JCb2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0Sm95RXJyb3IoYm9keSkge1xuICAgIGNvbnN0IGVycm9yQm9keSA9IHt9O1xuICAgIGNvbnN0IGpveUVycm9yID0gXy5nZXQoYm9keSwgJ2RldGFpbHNbMF0nLCB7fSk7XG4gICAgY29uc29sZS5lcnJvcignVVNFUiBWQUxJREFUSU9OIEVSUk9SOicsIGJvZHkpO1xuXG4gICAgZXJyb3JCb2R5Lm1lc3NhZ2UgPSBqb3lFcnJvci5tZXNzYWdlO1xuICAgIGVycm9yQm9keS5zdGF0dXNDb2RlID0gNDAwO1xuICAgIGVycm9yQm9keS5lcnJvckNvZGUgPSAnNDAwMCc7XG4gICAgcmV0dXJuIGVycm9yQm9keTtcbn0iLCJpbXBvcnQgeyBTMyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gczNVdGlscyhhY3Rpb24sIHBhcmFtcykge1xyXG4gICAgY29uc3QgczMgPSBuZXcgUzMoKTtcclxuICAgIHJldHVybiBzM1thY3Rpb25dKHBhcmFtcyk7XHJcbn1cclxuXHJcbmNvbnN0IFMzVXRpbCA9IHtcclxuICAgIGdldE9iamVjdDogKHBhcmFtcykgPT4gZ2V0UzMocGFyYW1zKSxcclxuICAgIGRlbGV0ZU9iamVjdDogKHBhcmFtcykgPT4gczNVdGlscygnZGVsZXRlT2JqZWN0JywgcGFyYW1zKSxcclxuICAgIHB1dE9iamVjdDogKHBhcmFtcykgPT4gczNVdGlscygncHV0T2JqZWN0JywgcGFyYW1zKSxcclxuICAgIGxpc3RPYmplY3RzVjI6IChwYXJhbXMpID0+IHMzVXRpbHMoJ2xpc3RPYmplY3RzVjInLCBwYXJhbXMpXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IFMzVXRpbDtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFMzKHBhcmFtcykge1xyXG4gICAgY29uc3QgczMgPSBuZXcgUzMoKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgczMuZ2V0T2JqZWN0KHBhcmFtcyk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuQm9keS50cmFuc2Zvcm1Ub1N0cmluZygndXRmLTgnKTtcclxufSIsImltcG9ydCB7IFNOUyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xyXG5cclxuY29uc3QgU05TVXRpbCA9IHtcclxuICAgIHB1Ymxpc2g6IChwYXJhbXMpID0+IHB1Ymxpc2gocGFyYW1zKSxcclxuICAgIGNyZWF0ZVRvcGljOiAocGFyYW1zKSA9PiBjcmVhdGVUb3BpYyhwYXJhbXMpXHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwdWJsaXNoKHBhcmFtcykge1xyXG4gICAgY29uc3Qgc25zID0gbmV3IFNOUygpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHNucy5wdWJsaXNoKHBhcmFtcyk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRvcGljKHBhcmFtcykge1xyXG4gICAgY29uc3Qgc25zID0gbmV3IFNOUygpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHNucy5jcmVhdGVUb3BpYyhwYXJhbXMpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTTlNVdGlsO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zbnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJsdWViaXJkXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50L21vbWVudC5qc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzZXF1ZWxpemVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidW16dWdcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImltcG9ydCB7IGhhbmRsZUZpbGUgYXMgaGFuZGxlRmlsZUltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMnO1xuaW1wb3J0IHsgd2F0Y2hCdWNrZXQgYXMgd2F0Y2hCdWNrZXRJbXBvcnQgfSBmcm9tICcuL2V2ZW50TWFuYWdlci93YXRjaEJ1Y2tldC5qcyc7XG5pbXBvcnQgeyBwdWJsaXNoRXZlbnRzIGFzIHB1Ymxpc2hFdmVudHNJbXBvcnQgfSBmcm9tICcuL2V2ZW50TWFuYWdlci9wdWJsaXNoRXZlbnRzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnMgYXMgY3JlYXRlRmlsdGVyc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2NyZWF0ZUZpbHRlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU29ydCBhcyBjcmVhdGVTb3J0SW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlU29ydC5qcyc7XG5pbXBvcnQgeyBmaW5kQWxsIGFzIGZpbmRBbGxJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9maW5kQWxsLmpzJztcbmltcG9ydCB7IGNoZWNrTW9kdWxlIGFzIGNoZWNrTW9kdWxlSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgZmFpbHVyZSBhcyBmYWlsdXJlSW1wb3J0LCBzdWNjZXNzIGFzIHN1Y2Nlc3NJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBydW5NaWdyYXRpb25zIGFzIHJ1bk1pZ3JhdGlvbnNJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiU2V0dXAvbWlncmF0aW9ucy5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlciBhcyBnZXRDdXJyZW50VXNlckltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHN1Y2Nlc3NIdG1sIGFzIHN1Y2Nlc3NIdG1sSW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudCBhcyBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdEZpbHRlcnMgYXMgZGVmYXVsdEZpbHRlcnNJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9kZWZhdWx0RmlsdGVycy5qcyc7XG5pbXBvcnQgeyBhY2Nlc3NSaWdodHNVdGlscyBhcyBhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlQm9keSBhcyBwYXJzZUJvZHlJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUV2ZW50IGFzIHBhcnNlRXZlbnRJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBnZXRCdXNpbmVzc2VzSW5mbyBhcyBnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcbmltcG9ydCB7IHVzZXJEZWZhdWx0QmlkIGFzIHVzZXJEZWZhdWx0QmlkSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgY2hlY2tXcml0ZUFjY2VzcyBhcyBjaGVja1dyaXRlQWNjZXNzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlRmlsZSA9IGhhbmRsZUZpbGVJbXBvcnQ7XG5leHBvcnQgY29uc3Qgd2F0Y2hCdWNrZXQgPSB3YXRjaEJ1Y2tldEltcG9ydDtcbmV4cG9ydCBjb25zdCBwdWJsaXNoRXZlbnRzID0gcHVibGlzaEV2ZW50c0ltcG9ydDtcbmV4cG9ydCBjb25zdCBjcmVhdGVGaWx0ZXJzID0gY3JlYXRlRmlsdGVyc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBjcmVhdGVTb3J0ID0gY3JlYXRlU29ydEltcG9ydDtcbmV4cG9ydCBjb25zdCBmaW5kQWxsID0gZmluZEFsbEltcG9ydDtcbmV4cG9ydCBjb25zdCBjaGVja01vZHVsZSA9IGNoZWNrTW9kdWxlSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGZhaWx1cmUgPSBmYWlsdXJlSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3MgPSBzdWNjZXNzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHJ1bk1pZ3JhdGlvbnMgPSBydW5NaWdyYXRpb25zSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyID0gZ2V0Q3VycmVudFVzZXJJbXBvcnQ7XG5leHBvcnQgY29uc3Qgc3VjY2Vzc0h0bWwgPSBzdWNjZXNzSHRtbEltcG9ydDtcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50ID0gZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudEltcG9ydDtcbmV4cG9ydCBjb25zdCBkZWZhdWx0RmlsdGVycyA9IGRlZmF1bHRGaWx0ZXJzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGFjY2Vzc1JpZ2h0c1V0aWxzID0gYWNjZXNzUmlnaHRzVXRpbHNJbXBvcnQ7XG5leHBvcnQgY29uc3QgcGFyc2VCb2R5ID0gcGFyc2VCb2R5SW1wb3J0O1xuZXhwb3J0IGNvbnN0IHBhcnNlRXZlbnQgPSBwYXJzZUV2ZW50SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGdldEJ1c2luZXNzZXNJbmZvID0gZ2V0QnVzaW5lc3Nlc0luZm9JbXBvcnQ7XG5leHBvcnQgY29uc3QgdXNlckRlZmF1bHRCaWQgPSB1c2VyRGVmYXVsdEJpZEltcG9ydDtcbmV4cG9ydCBjb25zdCBjaGVja1dyaXRlQWNjZXNzID0gY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydDtcbiJdLCJuYW1lcyI6WyJydW5NaWdyYXRpb25zIiwiX2xvZGFzaCIsInJlcXVpcmUiLCJfbG9kYXNoMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW16dWciLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRhdGFiYXNlTmFtZSIsInNlcXVlbGl6ZUluc3RhbmNlIiwiaW5pdGlhbGl6ZU1vZGVscyIsInBhdGhUb01pZ3JhdGlvbkZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJQV0QiLCJ1bXp1ZyIsIlVtenVnIiwibWlncmF0aW9ucyIsImdsb2IiLCJjb250ZXh0IiwiZ2V0UXVlcnlJbnRlcmZhY2UiLCJzdG9yYWdlIiwiU2VxdWVsaXplU3RvcmFnZSIsInNlcXVlbGl6ZSIsImxvZ2dlciIsImNvbnNvbGUiLCJwZW5kaW5nTWlncmF0aW9ucyIsInBlbmRpbmciLCJsb2ciLCJ1cCIsImNhdGNoIiwidXBFcnJvciIsImRvd24iLCJfIiwiY2hhaW4iLCJtYXAiLCJyZXZlcnNlIiwidmFsdWUiLCJ0aGVuIiwibXNnIiwiZXJyb3IiLCJFcnJvciIsImRvd25FcnJvciIsImFjY2Vzc1JpZ2h0c1V0aWxzIiwiZXhwb3J0cyIsInVzZXJEZWZhdWx0QmlkIiwiZ2V0QnVzaW5lc3Nlc0luZm8iLCJnZXRNb2R1bGVJbmZvIiwiY2hlY2tNb2R1bGUiLCJjaGVja1dyaXRlQWNjZXNzIiwiX2Vycm9yQ29kZXMiLCJfcmVxdWVzdFJlc3BvbnNlIiwiZXZlbnQiLCJyZXF1ZXN0ZWRCdXNpbmVzc0lkcyIsImdldFJlcXVlc3RlZEJ1c2luZXNzSWRzIiwiYWxsb3dlZEJ1c2luZXNzSWRzIiwiZ2V0QWxsb3dlZEJ1c2luZXNzSWRzIiwibG9jYWxCaWRMaXN0IiwiaXNFbXB0eSIsImdldCIsIkJVSUxEX0VOViIsImxlbmd0aCIsImludGVyc2VjdGlvbiIsImpzb25Ub1BhcnNlIiwiZGJpIiwiSlNPTiIsInBhcnNlIiwic3BsaXQiLCJidXNpbmVzc2VzIiwiT2JqZWN0Iiwia2V5cyIsImFjY2Vzc1JpZ2h0cyIsImJpZHMiLCJ3aXRoTG9jYWwiLCJzZXQiLCJhciIsIm1vZHVsZVJpZ2h0cyIsIm1vZHVsZU5hbWUiLCJhbGxvd0FjY2VzcyIsImVycm9yTGlzdCIsInVuYXV0aG9yaXplZCIsInVzZXJSb2xlcyIsImFkbWluIiwicmVhZCIsIndyaXRlIiwiZXZlbnRCb2R5IiwicGFyc2VCb2R5IiwiYnVzaW5lc3NJZHMiLCJidXNpbmVzc0lkIiwiZmluZCIsImlkIiwicmF3IiwidXNlclJpZ2h0IiwiX3NlcXVlbGl6ZSIsIl9zZXF1ZWxpemUyIiwiX21vbWVudCIsIl9tb21lbnQyIiwiX2FjY2Vzc1JpZ2h0c1V0aWxzIiwiY3JlYXRlRmlsdGVycyIsIm9iamVjdEZpbHRlcnMiLCJxdWVyeSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJ3aGVyZSIsInJlZHVjZSIsImFjYyIsIml0ZW0iLCJ2YWwiLCJpdGVtTmFtZSIsImluY2x1ZGVzIiwiZmlsdGVyVHlwZSIsIkRCIiwiT3AiLCJpTGlrZSIsIm9yIiwiaW4iLCJwYXJzZWRKc29uIiwiZSIsInR5cGUiLCJCT09MRUFOIiwicXVlcnlWYWx1ZSIsInRvTG93ZXJDYXNlIiwiYm9vbGVhbk1hcCIsImFjdGl2ZSIsImZpbHRlckFkZHMiLCJzIiwibW9tZW50IiwidXRjIiwiZGF0ZXMiLCJiZXR3ZWVuIiwidG9EYXRlIiwiaXNWYWxpZCIsImludmFsaWRTdGFydERhdGUiLCJpbnZhbGlkRW5kRGF0ZSIsImNyZWF0ZWRBdCIsIndpdGhEYXRlIiwiYXNzaWduIiwiY3JlYXRlU29ydCIsImRlZmF1bHRGaWx0ZXIiLCJjb3B5T2ZEZWZhdWx0RmlsdGVyIiwiY2xvbmUiLCJzb3J0IiwidGVzdEl0ZW0iLCJpbmRleE9mIiwic3Vic3RyIiwic29ydEl0ZW0iLCJmb3JFYWNoIiwicGFyZW50Q2hpbGRMaXN0IiwicHVzaCIsImRlZmF1bHRGaWx0ZXJzIiwiYWRkRmlsdGVyc0Zyb21TY2hlbWEiLCJzY2hlbWEiLCJzdWJTY2hlbWFzIiwiZmlsdGVycyIsImtleSIsImZpbHRlck92ZXJSaWRlVHlwZXMiLCJlcXVhbCIsImFjY3VtdWxhdG9yIiwia2V5UHJlZml4IiwiYXNMaW5rQWxpYXMiLCJTVFJJTkciLCJlcSIsImZpbHRlclR5cGVPdmVyUmlkZSIsIml0ZW1UeXBlIiwiQ0hBUiIsIlRFWFQiLCJERUNJTUFMIiwiQklHSU5UIiwiSU5URUdFUiIsIkRBVEUiLCJEQVRFT05MWSIsImx0IiwiSlNPTkIiLCJjb250YWlucyIsImdldFBhZ2luYXRpb25Gcm9tRmluZEFsbCIsImZpbmRBbGwiLCJyZXN1bHQiLCJsaW1pdCIsIm9mZnNldCIsImhhc01vcmUiLCJzcGxpY2UiLCJwYWdlT2JqZWN0Iiwicm93cyIsIm1vZGVsIiwib3B0aW9ucyIsImZpbmRBcmdzIiwiaW5jbHVkZSIsImFsbCIsIm5lc3RlZCIsInJlc3VsdHMiLCJmaW5kVXRpbHMiLCJfbGliRHluYW1vZGIiLCJfY2xpZW50RHluYW1vZGIiLCJkeW5hbW9VdGlsIiwicGFyYW1zIiwiZHluYW1vRGIiLCJEeW5hbW9EQkRvY3VtZW50IiwiZnJvbSIsIkR5bmFtb0RCIiwiaGFuZGxlRXZlbnRzIiwiX2hhbmRsZUZpbGUiLCJfYmx1ZWJpcmQiLCJfYmx1ZWJpcmQyIiwidHJhbnNmb3JtZXIiLCJlcnJvckhhbmRsZXJQZXJGaWxlIiwic2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMiLCJ1c2VySW1wb3J0VHlwZXMiLCJSZWNvcmRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNFcnJvcnMiLCJyZWNvcmQiLCJzbnNJbmZvIiwiczNCdWNrZXQiLCJidWNrZXQiLCJmaWxlcyIsImZpbGUiLCJwYXRoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFuZGxlRmlsZSIsImVyciIsIl9TM1V0aWxzIiwiX1MzVXRpbHMyIiwiQnVja2V0IiwiS2V5IiwiYm9keSIsIlMzVXRpbCIsImdldE9iamVjdCIsInBhcnNlZEJvZHkiLCJyZXR1cm5lZFZhbHVlIiwiZGVsZXRlT2JqZWN0IiwiY29kZSIsIm5ld1BhdGgiLCJ1c2Vyc0ltcG9ydHMiLCJ2YWx1ZXMiLCJpdGVtcyIsImZpbGVOYW1lIiwibGFzdCIsImZvbGRlck5hbWUiLCJmaXJzdCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwibmV3UGFyYW1zIiwiQm9keSIsInB1dE9iamVjdCIsImxvb3AiLCJwdWJsaXNoRXZlbnRzIiwiX1NOU1V0aWxzIiwiX1NOU1V0aWxzMiIsIl9keW5hbW9VdGlscyIsIl9keW5hbW9VdGlsczIiLCJtYXhLZXlzIiwiYnVja2V0UmVzdWx0IiwiZmlsZUxpc3QiLCJjdXJyZW50VGltZSIsIlMzVXRpbHMiLCJsaXN0T2JqZWN0c1YyIiwiTWF4S2V5cyIsIkNvbnRpbnVhdGlvblRva2VuIiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJDb250ZW50cyIsImZpbGVEZWxheVRpbWUiLCJpc1NhbWVPckJlZm9yZSIsImNvbmNhdCIsIklzVHJ1bmNhdGVkIiwiTmV4dENvbnRpbnVhdGlvblRva2VuIiwiY29uZmlnVGFibGUiLCJ0YWJsZUtleSIsInNuc1RvcGljIiwiVGFibGVOYW1lIiwiY2h1bmtTaXplIiwibWF4TWVzc2FnZXMiLCJzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlIiwiU05TVXRpbCIsImNyZWF0ZVRvcGljIiwiTmFtZSIsInRvcGljQXJuIiwiVG9waWNBcm4iLCJtZXNzYWdlTGlzdCIsImNodW5rIiwic2xpY2UiLCJwdWJsaXNoIiwiTWVzc2FnZSIsInN0cmluZ2lmeSIsIndhdGNoQnVja2V0IiwiX3B1Ymxpc2hFdmVudHMiLCJfaGFuZGxlRXZlbnRzIiwiZHluYW1vQ29uZmlnVGFibGUiLCJkeW5hbW9Db25maWdLZXkiLCJub29wIiwiRXZlbnRTb3VyY2UiLCJpc0VxdWFsIiwiaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0IiwibWVzc2FnZSIsImVycm9yQ29kZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5UmVsZWFzZWQiLCJhbHJlYWR5UmVjZWl2ZWQiLCJpbnZhbGlkSXRlbXNSZXF1ZXN0IiwiaW52YWxpZElEIiwiaW52YWxpZFJlY2VpdmFibGUiLCJpbnZhbGlkUmVxdWVzdCIsImludmFsaWRBUElLZXkiLCJxYkNyZWF0aW9uRXJyb3IiLCJjYW5ub3RSZW9wZW4iLCJpbnZhbGlkRGF0ZUZvcm1hdCIsImludmFsaWRPcmRlclN0YXR1cyIsImludmFsaWRQYXltZW50U3RhdHVzIiwiaW52YWxpZFJlbGVhc2VTdGF0dXMiLCJpbnZhbGlkUmVjZWl2YWJsZVN0YXR1cyIsImludmFsaWRKc29uIiwiaW52YWxpZEZpbHRlciIsImludmFsaWRVc2VyTmFtZVVwZGF0ZSIsImltYWdlU2l6ZUxpbWl0Iiwibm90Rm91bmQiLCJlbWFpbFJlcXVpcmVkIiwibW9iaWxlUGhvbmVSZXF1aXJlZCIsImludmFsaWRDYWRlbmNlVHlwZSIsInN1Y2Nlc3MiLCJzdWNjZXNzSHRtbCIsImdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQiLCJnZXRDdXJyZW50VXNlciIsImZhaWx1cmUiLCJwYXJzZUV2ZW50IiwiZGV0ZWN0U2VxdWVsaXplRXJyb3IiLCJkZXRlY3RKb3lFcnJvciIsImRiQ2xvc2UiLCJidWlsZFJlc3BvbnNlIiwiaHRtbCIsImhlYWRlcnMiLCJhdHRyaWJ1dGVzIiwidXNlcm5hbWUiLCJjbGVhbmVkRXJyb3JCb2R5IiwiVVRJTF9MT0ciLCJOT1JNQUxfRVJST1IiLCJpc1VuZGVmaW5lZCIsImRldGFpbHMiLCJuZXdCb2R5IiwibWVyZ2UiLCJyZXF1ZXN0RXZlbnQiLCJpc1N0cmluZyIsImlzT2JqZWN0IiwiY2FsbGJhY2siLCJlcnJvckJvZHkiLCJzZXF1ZWxpemVFcnJvciIsInBhcmVudEVycm9yIiwidHJpbSIsImpveUVycm9yIiwiczNVdGlscyIsIl9jbGllbnRTIiwiYWN0aW9uIiwiczMiLCJTMyIsImdldFMzIiwicmVzcG9uc2UiLCJ0cmFuc2Zvcm1Ub1N0cmluZyIsIl9jbGllbnRTbnMiLCJzbnMiLCJTTlMiLCJfd2F0Y2hCdWNrZXQiLCJfY3JlYXRlRmlsdGVycyIsIl9jcmVhdGVTb3J0IiwiX2ZpbmRBbGwiLCJfbWlncmF0aW9ucyIsIl9kZWZhdWx0RmlsdGVycyIsImhhbmRsZUZpbGVJbXBvcnQiLCJ3YXRjaEJ1Y2tldEltcG9ydCIsInB1Ymxpc2hFdmVudHNJbXBvcnQiLCJjcmVhdGVGaWx0ZXJzSW1wb3J0IiwiY3JlYXRlU29ydEltcG9ydCIsImZpbmRBbGxJbXBvcnQiLCJjaGVja01vZHVsZUltcG9ydCIsImZhaWx1cmVJbXBvcnQiLCJzdWNjZXNzSW1wb3J0IiwicnVuTWlncmF0aW9uc0ltcG9ydCIsImdldEN1cnJlbnRVc2VySW1wb3J0Iiwic3VjY2Vzc0h0bWxJbXBvcnQiLCJnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0IiwiZGVmYXVsdEZpbHRlcnNJbXBvcnQiLCJhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydCIsInBhcnNlQm9keUltcG9ydCIsInBhcnNlRXZlbnRJbXBvcnQiLCJnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydCIsInVzZXJEZWZhdWx0QmlkSW1wb3J0IiwiY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydCJdLCJzb3VyY2VSb290IjoiIn0=
995
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxNQUFNckQsY0FBYyxHQUFBcFIsc0JBQUEsR0FBRzBVLCtCQUFvQjtBQUMzQyxNQUFNeEQsV0FBVyxHQUFBbFIsbUJBQUEsR0FBRzJVLDRCQUFpQjtBQUNyQyxNQUFNeEQsa0NBQWtDLEdBQUFuUiwwQ0FBQSxHQUFHNFUsbURBQXdDO0FBQ25GLE1BQU1uTyxjQUFjLEdBQUF6RyxzQkFBQSxHQUFHNlUsOEJBQW9CO0FBQzNDLE1BQU05VSxpQkFBaUIsR0FBQUMseUJBQUEsR0FBRzhVLG9DQUF1QjtBQUNqRCxNQUFNcFMsU0FBUyxHQUFBMUMsaUJBQUEsR0FBRytVLDBCQUFlO0FBQ2pDLE1BQU16RCxVQUFVLEdBQUF0UixrQkFBQSxHQUFHZ1YsMkJBQWdCO0FBQ25DLE1BQU05VSxpQkFBaUIsR0FBQUYseUJBQUEsR0FBR2lWLG9DQUF1QjtBQUNqRCxNQUFNaFYsY0FBYyxHQUFBRCxzQkFBQSxHQUFHa1YsaUNBQW9CO0FBQzNDLE1BQU03VSxnQkFBZ0IsR0FBQUwsd0JBQUEsR0FBR21WLG1DQUFzQixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlU29ydC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZGVmYXVsdEZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZHluYW1vL2R5bmFtb1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zbnMvU05TVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJibHVlYmlyZFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIm1vbWVudC9tb21lbnQuanNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInNlcXVlbGl6ZVwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwidW16dWdcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VxdWVsaXplU3RvcmFnZSwgVW16dWcgfSBmcm9tICd1bXp1Zyc7XG5cbi8qKlxuICogRXhlY3V0ZSBkYXRhYmFzZSBtaWdyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gbmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUgKG9yIHZlcmlmeSBleGlzdGVuY2UpXG4gKiBAcGFyYW0ge29iamVjdH0gc2VxdWVsaXplSW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpbml0aWFsaXplTW9kZWxzIC0gZnVuY3Rpb24gdG8gcnVuIHRvIHN5bmMgU2VxdWVsaXplIG1vZGVscyB3aXRoIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvTWlncmF0aW9uRm9sZGVyIC0gcGFzcyBpbiB0aGUgcGF0aCBpZiB1c2luZyB3aW5kb3dzLiB3aW5kb3dzIGFuZCBsaW51eCBQV0Qgd2lsbCBiZSBkaWZmZXJlbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bk1pZ3JhdGlvbnMoZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVsaXplSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kZWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvTWlncmF0aW9uRm9sZGVyID0gYCR7cHJvY2Vzcy5lbnYuUFdEfS9taWdyYXRpb25zLyouanNgKSB7XG4gICAgY29uc3QgdW16dWcgPSBuZXcgVW16dWcoe1xuICAgICAgICBtaWdyYXRpb25zOiB7IGdsb2I6IHBhdGhUb01pZ3JhdGlvbkZvbGRlciB9LFxuICAgICAgICBjb250ZXh0OiBzZXF1ZWxpemVJbnN0YW5jZS5nZXRRdWVyeUludGVyZmFjZSgpLFxuICAgICAgICBzdG9yYWdlOiBuZXcgU2VxdWVsaXplU3RvcmFnZSh7IHNlcXVlbGl6ZTogc2VxdWVsaXplSW5zdGFuY2UgfSksXG4gICAgICAgIGxvZ2dlcjogY29uc29sZVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVuZGluZ01pZ3JhdGlvbnMgPSBhd2FpdCB1bXp1Zy5wZW5kaW5nKCk7XG4gICAgY29uc29sZS5sb2coJy0tLS0tLS0+VVRJTCBQZW5kaW5nIE1pZ3JhdGlvbnM6JywgcGVuZGluZ01pZ3JhdGlvbnMsIHBhdGhUb01pZ3JhdGlvbkZvbGRlcik7XG4gICAgYXdhaXQgdW16dWcudXAoKS5jYXRjaCgodXBFcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gdW16dWcuZG93bih7XG4gICAgICAgICAgICBtaWdyYXRpb25zOiBfLmNoYWluKHBlbmRpbmdNaWdyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVVElMIEVycm9yOiBFcnJvciB3aXRoIG1pZ3JhdGluZyB1cDonICsgdXBFcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9LCAoZG93bkVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgZG93bjonICsgZG93bkVycm9yO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBzeW5jIChjcmVhdGUpIHRhYmxlcywgYnV0IG5vdCB0byBkYXRhYmFzZSB1cGRhdGVzXG4gICAgLy8gaW4gdGhlIHBhc3QgaXQgd29ya2VkIHRvIGxlYXZlIGl0IGluLCBidXQgbm93IHRoZSB0YWdzIG1vZHVsZSBjYXVzZXMgZm9yZWlnbiBrZXkgcHJvYmxlbXNcbiAgICAvLyBUaGUgdGFibGVzIGFyZSBzdGlsbCBpbml0aWF0ZWQgYnkgYmVpbmcgcGFzc2VkIGluIHRvIHJ1biBtaWdyYXRpb25zXG4gICAgYXdhaXQgaW5pdGlhbGl6ZU1vZGVscygpO1xufSIsImltcG9ydCBfLCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gdGhlIGxhbWJkYSBldmVudCwgY29tcGFyZSBpdCB0byBidXNpbmVzc0lkcywgcmV0dXJuIHdoYXQgdXNlciBoYXMgYWNjZXNzIHRvLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBBICBsaXN0IG9mIGJ1c2luZXNzSWRzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCBhbmQgYXJlIGFsbG93ZWQgdG8gZm9yIHNvbWUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KSB7XG4gICAgY29uc3QgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyhldmVudCk7XG4gICAgY29uc3QgYWxsb3dlZEJ1c2luZXNzSWRzID0gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50KTtcbiAgICBjb25zdCBsb2NhbEJpZExpc3QgPSBbJzEnXTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBsb2NhbCByZXR1cm4gZm9yIGFsbCBiaWRzIGluIGFjY2VzcyByaWdodHNcbiAgICBpZiAoXy5pc0VtcHR5KGFsbG93ZWRCdXNpbmVzc0lkcykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMnKSAmJlxuICAgICAgICAhXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3N0YWdpbmcnKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEJpZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGxvY2FsQmlkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZEJ1c2luZXNzSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWxsb3dlZEJ1c2luZXNzSWRzO1xuICAgIH1cblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1ZXN0ZWRCdXNpbmVzc0lkcywgYWxsb3dlZEJ1c2luZXNzSWRzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1c2luZXNzSUQgc2V0IGluIGNvZ25pdG8gYXMgY3VzdG9tOkRCSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQklcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEZWZhdWx0QmlkKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206REJJJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpEQkknKSB8fFxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgZGJpID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KGRiaSwgJ2RlZmF1bHRCaWQnLCAnJykgfHwgJzEnO1xufVxuXG4vKipcbiAqIEdldCAgcmVxdWVzdGVkIGJ1c2luZXNzSWRzIGZyb20gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpIHtcbiAgICBsZXQgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5idXNpbmVzc0lkcycsIG51bGwpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RlZEJ1c2luZXNzSWRzID8gcmVxdWVzdGVkQnVzaW5lc3NJZHMuc3BsaXQoJywnKSA6IFtdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gY29nbml0byBjdXN0b206QVIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBidXNpbmVzc0lEIHJlcXVlc3RlZCBieSB0aGUgcXVlcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEFsbG93ZWRCdXNpbmVzc0lkcyhldmVudCkge1xuICAgIGNvbnN0IGJ1c2luZXNzZXMgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGJ1c2luZXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuICAgICAgICAne30nO1xuICAgIGNvbnN0IGFjY2Vzc1JpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICBpZiAoIWlzRW1wdHkoYWNjZXNzUmlnaHRzKSkge1xuICAgICAgICAgICAgY29uc3QgYmlkcyA9IF8uZ2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywge30pO1xuICAgICAgICAgICAgY29uc3Qgd2l0aExvY2FsID0geyAuLi5iaWRzLCAnMSc6ICdBJyB9O1xuICAgICAgICAgICAgXy5zZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB3aXRoTG9jYWwpO1xuXG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhciA9IHsgJ2J1c2luZXNzSWRzJzogeyAnMSc6ICdBJyB9IH07XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYXIsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfLmdldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHt9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIGN1c3RvbTpNT0QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBNb2R1bGUgYWNjZXNzIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZHVsZUluZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPVxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpNT0QnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOk1PRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOkFSJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpIHx8XG5cbiAgICAgICAgJ3t9JztcblxuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuICAgIHJldHVybiBfLmdldChtb2R1bGVSaWdodHMsICdtb2R1bGUnLCB7fSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2R1bGVzIGxpc3RlZCBpbiBjdXN0b206TU9ELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIC0gQSBzdGluZyBuYW1lIGZvciBhIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBUaGUgTW9kdWxlIGFjY2VzcyBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01vZHVsZShtb2R1bGVOYW1lLCBldmVudCkge1xuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IGdldE1vZHVsZUluZm8oZXZlbnQpO1xuICAgIGxldCBhbGxvd0FjY2VzcyA9IF8uZ2V0KG1vZHVsZVJpZ2h0cywgbW9kdWxlTmFtZSwgZmFsc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWxsb3dBY2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VyUm9sZXMgPSB7XG4gICAgYWRtaW46ICdBJyxcbiAgICByZWFkOiAnUicsXG4gICAgd3JpdGU6ICdXJ1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3tib2R5OiBzdHJpbmd9fSBldmVudFxuICogQHJldHVybnMge3N0cmluZ30gYnVzaW5lc3NJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tXcml0ZUFjY2VzcyhldmVudCkge1xuICAgIGNvbnN0IGV2ZW50Qm9keSA9IHBhcnNlQm9keShldmVudCk7XG4gICAgY29uc3QgYnVzaW5lc3NJZHMgPSBhY2Nlc3NSaWdodHNVdGlscyhldmVudCkgfHwgW107XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IGJ1c2luZXNzSWRzLmZpbmQoKGlkKSA9PiBpZCA9PT0gZXZlbnRCb2R5LmJ1c2luZXNzSWQpO1xuICAgIGNvbnN0IHJhdyA9IGdldEJ1c2luZXNzZXNJbmZvKGV2ZW50KTtcbiAgICBjb25zdCB1c2VyUmlnaHQgPSByYXdbYnVzaW5lc3NJZF07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfRU5WID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybiBldmVudEJvZHkuYnVzaW5lc3NJZDtcbiAgICB9XG5cbiAgICBpZiAoKHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLmFkbWluICYmIHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLndyaXRlKSB8fCAoIXVzZXJSaWdodCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1c2luZXNzSWQ7XG59XG5cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgREIgZnJvbSAnc2VxdWVsaXplJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudC5qcyc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9lcnJvckNvZGVzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIH0gZnJvbSAnLi9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIHNlcXVlbGl6ZSB3aGVyZSBjbGF1c2UgZnJvbSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgZGVmYXVsdCBzb3J0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIGV2ZW50IHBhc3NlZCBieSBsYW1iZGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHJldHVybnMge29iamVjdH0gQW4gc2VxdWVsaXplIHdoZXJlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsdGVycyA9IGZ1bmN0aW9uIChldmVudCwgb2JqZWN0RmlsdGVycyl7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgY29uc3Qgc3RhcnREYXRlID0gXy5nZXQocXVlcnksICdzdGFydERhdGUnKTtcbiAgICBjb25zdCBlbmREYXRlID0gXy5nZXQocXVlcnksICdlbmREYXRlJyk7XG4gICAgY29uc3Qgd2hlcmUgPSBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gXy5nZXQob2JqZWN0RmlsdGVycywgaXRlbSwgbnVsbCk7XG5cbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpdGVtLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IGAkJHtpdGVtfSRgXG4gICAgICAgICAgICAgICAgOiBpdGVtO1xuXG4gICAgICAgICAgICBhY2NbaXRlbU5hbWVdID0ge307XG4gICAgICAgICAgICBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmlMaWtlKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBgJSR7cXVlcnlbaXRlbV19JWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5vcikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gWy0xICogK3F1ZXJ5W2l0ZW1dLCArcXVlcnlbaXRlbV1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaW4pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHF1ZXJ5W2l0ZW1dLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pbikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcXVlcnlbaXRlbV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZEpzb247XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgSlNPTiwgcGFyc2UgaXRcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2UocXVlcnlbaXRlbV0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgbm90IEpTT04sIHBhc3MgdGhyb3VnaCBhcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRKc29uID0gcXVlcnlbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcGFyc2VkSnNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbC50eXBlID09PSBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IF8uZ2V0KHF1ZXJ5LCBpdGVtLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5NYXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmYWxzZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAnbnVsbCc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICd0cnVlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IGJvb2xlYW5NYXBbcXVlcnlWYWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGlmIChvYmplY3RGaWx0ZXJzPy5hY3RpdmUgJiYgIXdoZXJlPy5hY3RpdmUpIHtcbiAgICAgICAgd2hlcmUuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBidXNpbmVzc0lkcyA9IGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KTtcbiAgICBjb25zdCBmaWx0ZXJBZGRzID0ge1xuICAgICAgICBidXNpbmVzc0lkOiBidXNpbmVzc0lkc1xuICAgIH07XG5cbiAgICBpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcbiAgICAgICAgY29uc3QgcyA9IG1vbWVudC51dGMoc3RhcnREYXRlKTtcbiAgICAgICAgY29uc3QgZSA9IG1vbWVudC51dGMoZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVzID0ge1xuICAgICAgICAgICAgW0RCLk9wLmJldHdlZW5dOiBbcy50b0RhdGUoKSwgZS50b0RhdGUoKV1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZFN0YXJ0RGF0ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZEVuZERhdGUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckFkZHMuY3JlYXRlZEF0ID0gZGF0ZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aERhdGUgPSBPYmplY3QuYXNzaWduKHdoZXJlLCBmaWx0ZXJBZGRzKTtcblxuICAgIHJldHVybiB3aXRoRGF0ZTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIENyZWF0ZSBzZXF1ZWxpemUgb3JkZXIgY2xhdXNlIGZyb20gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgc29ydCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSB0aGUgZXZlbnQgY3JlYXRlZCBBV1MgbGFtYmRhLCBpdCB3aWxsIGNvbnRhaW4gcXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHdpdGggc29ydCBwcm9wZXJ0eSBhIGNvbW1hIHNlcGVyYXRlZCBsaXN0IG9mIHNvcnRhYmxlIGZpZWxkcyAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWx0ZXIgLSBBIGRlZmF1bHQgZmlsdGVyIG9iamVjdCBhcyBidWlsdCBieSBjcmVhdGVEZWZhdWx0IEZpbHRlcnMsIGlmIGl0ZW1zIGFyZSBub3Qgb24gdGhlIHNjaGVtYSB0aGV5IHdpbGwgbm90IGJlIGluIHRoZSBvcmRlciBieVxuICogQHJldHVybnMge29iamVjdH0gIEFuIHNlcXVlbGl6ZSBvcmRlciBieSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBmdW5jdGlvbiAoZXZlbnQsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICBsZXQgY29weU9mRGVmYXVsdEZpbHRlciA9IF8uY2xvbmUoZGVmYXVsdEZpbHRlcik7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgbGV0IHNvcnQgPSBfLmdldChxdWVyeSwgJ3NvcnQnLCAnLXVwZGF0ZWRBdCcpIHx8ICctdXBkYXRlZEF0JztcblxuICAgIHJldHVybiBzb3J0LnNwbGl0KCcsJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcblxuICAgICAgICBjb25zdCB0ZXN0SXRlbSA9IGl0ZW0uaW5kZXhPZignLScpID09PSAwID8gaXRlbS5zdWJzdHIoMSkgOiBpdGVtO1xuXG4gICAgICAgIGlmIChfLmdldChjb3B5T2ZEZWZhdWx0RmlsdGVyLCB0ZXN0SXRlbSwgbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRJdGVtID0gW107XG5cbiAgICAgICAgICAgIHRlc3RJdGVtLnNwbGl0KCcuJykuZm9yRWFjaCgocGFyZW50Q2hpbGRMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaChwYXJlbnRDaGlsZExpc3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmluZGV4T2YoJy0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2goJ0RFU0MnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaCgnQVNDJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaChzb3J0SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERCIGZyb20gJ3NlcXVlbGl6ZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB3aXRoIGRlZmF1bHQgZmlsdGVycyBmb3IgYSBnaXZlbiBzZXF1ZWxpYXplIFNjaGVtYSBPYmplY3QsIGFuZCBzZXQgb2Ygc3ViIHNjaGVtYXNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIC0gdHlwZSBpcyBzZXF1ZWxpemUgZGF0YSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViU2NoZW1hcyAtIEFuIG9iamVjdCB3aXRoIGFsaWFzIGFzIHRoZSBrZXkgYW5kIHNlcXVlbGl6ZSBzY2hlbWEgYXMgdGhlIHZhbHVlIGh0dHA6Ly9kb2NzLnNlcXVlbGl6ZWpzLmNvbS9jbGFzcy9saWIvc2VxdWVsaXplLmpzflNlcXVlbGl6ZS5odG1sI2luc3RhbmNlLW1ldGhvZC1kZWZpbmVcbiAqIHN1YiBzY2hlbWEgY2FuIGJlIHtsb2NhdGlvbjogbG9jYXRpb25TY2hlbWF9IG9yIHtsb2NhdGlvbjoge2FzOiBcImFzQWxpYXNcIiwgc2NoZW1hOiBzY2hlbWF9fVxuICogQHJldHVybnMge29iamVjdH0gQW4gT2JqZWN0IHdpdGggYSBkZWZhdWx0IGZpbHRlciBmb3IgZWFjaCBkYXRhVHlwZSBDSEFSIGFuZCBURVhUIHdpbGwgZ2V0IGEgJGxpa2Ugb3BlcmF0b3IsIElOVEVHRVIsIERFQ0lNQUwgYW5kIEJPT0xFQU4gd2lsbCBnZXQgYSAkZXEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RmlsdGVycyhzY2hlbWEsIHN1YlNjaGVtYXMgPSB7fSkge1xuICAgIHNjaGVtYSA9IF8uY2xvbmUoc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcblxuICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHNjaGVtYSwgZmlsdGVycyk7XG4gICAgT2JqZWN0LmtleXMoc3ViU2NoZW1hcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHN1YlNjaGVtYXNba2V5XSwgZmlsdGVycywga2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWx0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRmlsdGVyc0Zyb21TY2hlbWEoc2NoZW1hLCBhY2N1bXVsYXRvciwga2V5UHJlZml4ID0gJycpIHtcbiAgICBjb25zdCBhc0xpbmtBbGlhcyA9IF8uZ2V0KHNjaGVtYSwgJ2FzJywgbnVsbCk7XG4gICAgc2NoZW1hID0gXy5nZXQoc2NoZW1hLCAnc2NoZW1hJykgfHwgc2NoZW1hO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYSkucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGl0ZW07XG5cbiAgICAgICAgaWYgKGFzTGlua0FsaWFzKSB7XG4gICAgICAgICAgICBhY2NbYXNMaW5rQWxpYXNdID0geyB0eXBlOiBEQi5TVFJJTkcsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBrZXkgPSBgJHtrZXlQcmVmaXh9LiR7aXRlbX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYVtpdGVtXS5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogc2NoZW1hW2l0ZW1dLmZpbHRlclR5cGUgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gZmlsdGVyVHlwZU92ZXJSaWRlIHx8IHNjaGVtYVtpdGVtXS50eXBlO1xuXG4gICAgICAgIC8vdG9kbyB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZCwgdGhlcmUgYXJlIGp1c3QgaGVyZSBmb3Igc29ydCB0ZXN0c1xuICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIERCLkNIQVI6XG4gICAgICAgICAgICBjYXNlIERCLlNUUklORzpcbiAgICAgICAgICAgIGNhc2UgREIuVEVYVDpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuaUxpa2UgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5ERUNJTUFMOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkJPT0xFQU46XG4gICAgICAgICAgICBjYXNlIERCLkJJR0lOVDpcbiAgICAgICAgICAgIGNhc2UgREIuSU5URUdFUjpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuREFURTpcbiAgICAgICAgICAgIGNhc2UgREIuREFURU9OTFk6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvL25ldyBzZXF1ZWxpemUgdXNlcyBjbGFzc2VzIGluc3RlYWQgb2Ygb2JqZWN0c1xuICAgICAgICBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5TVFJJTkcpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5pTGlrZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREVDSU1BTCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkJJR0lOVCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5KU09OQikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5jb250YWlucyB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREFURU9OTFkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vdGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBtb2RlbHMgc28gYWRkIHRoZW0gYWx3YXlzXG4gICAgICAgIGFjY1snY3JlYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1sndXBkYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1snaWQnXSA9IHsgdHlwZTogREIuSU5URUdFUiwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGFjY3VtdWxhdG9yKTtcbn1cbiIsIi8qKlxuICogY3JlYXRlIHBhZ2luYXRpb24gb2JqZWN0IGZyb20gU2VxdWVsaXplIGZpbmRBbGxcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXN1bHQgLSBzZXF1ZWxpemUgcmVzdWx0XG4gKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBtYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gcGFnZSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2luYXRpb25Gcm9tRmluZEFsbChyZXN1bHQsIGxpbWl0LCBvZmZzZXQpIHtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgW107XG4gICAgbGltaXQgPSBsaW1pdCB8fCAwO1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdC5sZW5ndGggPiBsaW1pdDtcbiAgICBpZiAoaGFzTW9yZSkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKC0xLCAxKTtcbiAgICB9XG4gICAgY29uc3QgcGFnZU9iamVjdCA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgcm93czogcmVzdWx0LFxuICAgICAgICBoYXNNb3JlOiBoYXNNb3JlXG4gICAgfTtcblxuICAgIHJldHVybiBwYWdlT2JqZWN0O1xufVxuXG4vKipcbiAqIHdyYXBwZXIgZm9yIFNlcXVlbGl6ZSBmaW5kQWxsXG4gKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0geyome2luY2x1ZGU6IFt7bW9kZWw6ICp9XSwgd2hlcmU6IHtidXNpbmVzc0lkOiBBcnJheX0sIG9yZGVyOiBbc3RyaW5nW11dfX0gb3B0aW9ucyAtIGluc3RhbmNlIG9mIFNlcXVlbGl6ZSAobXVzdCBiZSBpbml0aWFsaXplZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBbGwobW9kZWwsIG9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCAwO1xuICAgIGNvbnN0IGZpbmRBcmdzID0gT2JqZWN0LmFzc2lnbih7aW5jbHVkZTogeyBhbGw6IHRydWUsIG5lc3RlZDogdHJ1ZSB9fSwgb3B0aW9ucywgeyBsaW1pdDogbGltaXQgKyAxIH0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBtb2RlbC5maW5kQWxsKGZpbmRBcmdzKTtcbiAgICByZXR1cm4gZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsKHJlc3VsdHMsIGxpbWl0LCBvcHRpb25zLm9mZnNldCk7XG59XG5cbmNvbnN0IGZpbmRVdGlscyA9IHtcbiAgICBmaW5kQWxsXG59O1xuZXhwb3J0IGRlZmF1bHQgZmluZFV0aWxzOyIsImltcG9ydCB7IER5bmFtb0RCRG9jdW1lbnQgfSBmcm9tICdAYXdzLXNkay9saWItZHluYW1vZGInO1xyXG5pbXBvcnQgeyBEeW5hbW9EQiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYic7XHJcblxyXG5jb25zdCBkeW5hbW9VdGlsID0ge1xyXG4gICAgZ2V0OiAocGFyYW1zKSA9PiBnZXQocGFyYW1zKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7e1RhYmxlTmFtZTpzdHJpbmcsIEtleTp7a2V5OnN0cmluZ319fSBwYXJhbXNcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGdldChwYXJhbXMpIHtcclxuICAgIGNvbnN0IGR5bmFtb0RiID0gRHluYW1vREJEb2N1bWVudC5mcm9tKG5ldyBEeW5hbW9EQigpKTtcclxuICAgIHJldHVybiBkeW5hbW9EYi5nZXQocGFyYW1zKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZHluYW1vVXRpbDsiLCJpbXBvcnQgeyBoYW5kbGVGaWxlIH0gZnJvbSAnLi9oYW5kbGVGaWxlLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFdmVudHMoZXZlbnQsIHRyYW5zZm9ybWVyLCBlcnJvckhhbmRsZXJQZXJGaWxlLCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5SZWNvcmRzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAoZXZlbnQuUmVjb3JkcywgKHJlY29yZCkgPT4ge1xuICAgICAgICBjb25zdCBzbnNJbmZvID0gSlNPTi5wYXJzZShfLmdldChyZWNvcmQsICdTbnMuTWVzc2FnZScsICd7fScpKTtcbiAgICAgICAgY29uc3QgczNCdWNrZXQgPSBzbnNJbmZvLmJ1Y2tldDtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBzbnNJbmZvLmZpbGVzIHx8IFtdO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGUpO1xuICAgICAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRmlsZShwYXRoLCBzM0J1Y2tldCwgdHJhbnNmb3JtZXIsIHsgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckhhbmRsZXJQZXJGaWxlICYmICFlcnJvckhhbmRsZXJQZXJGaWxlKGVyciwgcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93ICdFcnJvcnMgcHJvY2Vzc2luZyBvbmUgb3IgbW9yZSBmaWxlcy4gU2VlIGVycm9yIGxvZ3MgZm9yIGRldGFpbCBvbiBlYWNoIGVycm9yLic7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUzNVdGlsIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVGaWxlKHBhdGgsIHMzQnVja2V0LCB0cmFuc2Zvcm1lciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNob3VsZFNraXBGYWlsZWRGb2xkZXJzID0gXy5nZXQob3B0aW9ucywgJ3Nob3VsZFNraXBGYWlsZWRGb2xkZXJzJyk7XG4gICAgY29uc3QgdXNlckltcG9ydFR5cGVzID0gXy5nZXQob3B0aW9ucywgJ3VzZXJJbXBvcnRUeXBlcycpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgQnVja2V0OiBzM0J1Y2tldCxcbiAgICAgICAgS2V5OiBwYXRoXG4gICAgfTtcbiAgICBsZXQgYm9keSA9ICd7fSdcbiAgICB0cnkge1xuICAgICAgICBib2R5ID0gYXdhaXQgUzNVdGlsLmdldE9iamVjdChwYXJhbXMpO1xuICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgY29uc3QgcmV0dXJuZWRWYWx1ZSA9IGF3YWl0IHRyYW5zZm9ybWVyKHBhcnNlZEJvZHkpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHJldHVybmVkVmFsdWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignaGFuZGxlLWZpbGUtZXJyb3InLCBlcnJvcik7XG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdOb1N1Y2hLZXknIHx8ICFib2R5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3UGF0aCA9ICcnO1xuXG4gICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgZm9yIGl0ZW1zIGluIHRoZSB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgIGNvbnN0IHVzZXJzSW1wb3J0cyA9IE9iamVjdC52YWx1ZXModXNlckltcG9ydFR5cGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoaXRlbXMpO1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuXG4gICAgICAgICAgICBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTa2lwRmFpbGVkRm9sZGVycykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZXJyb3IvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlL2ApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvYCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLXR3aWNlL2ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gLCBgJHtmb2xkZXJOYW1lfS9lcnJvci9gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBwYXRoQW5kRXZlbnRNaXNNYXRjaEVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gYGVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgJ2ZhaWxlZC1vbmNlLycpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCAnZmFpbGVkLW9uY2UvJywgJ2ZhaWxlZC10d2ljZS8nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsICdmYWlsZWQtdHdpY2UvJykpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsICdmYWlsZWQtdHdpY2UvJywgJ2Vycm9yLycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhwYXRoLCAnZGVsYXlVbnRpbC8nKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXy5sYXN0KHBhdGguc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBmYWlsZWQtb25jZS8ke3BhdGh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHtcbiAgICAgICAgICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgICAgICAgICBLZXk6IG5ld1BhdGgsXG4gICAgICAgICAgICBCb2R5OiBib2R5XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgUzNVdGlsLnB1dE9iamVjdChuZXdQYXJhbXMpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBTM1V0aWxzIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5pbXBvcnQgU05TVXRpbCBmcm9tICcuLi9zbnMvU05TVXRpbHMuanMnO1xuaW1wb3J0IGR5bmFtb1V0aWwgZnJvbSAnLi4vZHluYW1vL2R5bmFtb1V0aWxzLmpzJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4S2V5c1xuICogQHBhcmFtIHtPYmplY3R9IHVzZXJJbXBvcnRUeXBlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGxldCBidWNrZXRSZXN1bHQgPSB7fTtcbiAgICBsZXQgZmlsZUxpc3QgPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbW9tZW50KCk7XG5cbiAgICBkbyB7XG4gICAgICAgIGJ1Y2tldFJlc3VsdCA9IGF3YWl0IFMzVXRpbHMubGlzdE9iamVjdHNWMih7XG4gICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgIE1heEtleXM6IG1heEtleXMsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogXy5nZXQoYnVja2V0UmVzdWx0LCAnTmV4dENvbnRpbnVhdGlvblRva2VuJylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG5ld0ZpbGVzID0gXy5maWx0ZXIoYnVja2V0UmVzdWx0LkNvbnRlbnRzLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKF8uc3RhcnRzV2l0aChfLmdldChmaWxlLCAnS2V5JyksICdkZWxheVVudGlsLycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURlbGF5VGltZSA9IF8uZ2V0KGZpbGUsICdLZXknKS5zcGxpdCgnLycpWzFdO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoZmlsZURlbGF5VGltZSwgJ1lZWVlNTURESEhtbScpLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBpdGVtcyBpbiB0aGUgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcnNJbXBvcnRzID0gT2JqZWN0LnZhbHVlcyh1c2VySW1wb3J0VHlwZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZmlsZS5LZXkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IF8ubGFzdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRW1wdHkoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIV8uc3RhcnRzV2l0aChmaWxlLktleSwgYCR7Zm9sZGVyTmFtZX0vZXJyb3JgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhXy5zdGFydHNXaXRoKGZpbGUuS2V5LCAnZXJyb3InKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsZUxpc3QgPSBfLmNvbmNhdChmaWxlTGlzdCwgbmV3RmlsZXMpO1xuICAgIH0gd2hpbGUgKGJ1Y2tldFJlc3VsdC5Jc1RydW5jYXRlZCAmJiBidWNrZXRSZXN1bHQuTmV4dENvbnRpbnVhdGlvblRva2VuICYmIGZpbGVMaXN0Lmxlbmd0aCA8IG1heEtleXMpO1xuXG4gICAgcmV0dXJuIGZpbGVMaXN0O1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlZCBTTlMgZXZlbnRzIGF0IGEgc3RlYWR5IHBhY2UgZm9yIGRhdGEgaW4gYSBwYXJ0aWN1bGFyIGJ1Y2tldC4gU2hvdWxkIGJlIGV4ZWN1dGVkIHZpYSBhIGNsb3VkIHdhdGNoIGNyb24gam9iIGFzIGEgcGFydCBvZiBhIG1pY3JvIHNlcnZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnVGFibGUgLSBUaGUgRHluYW1vIERCIHRhYmxlIHdoZXJlIHRvIGdldCB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVLZXkgLSBUaGUga2V5IHRvIHRoZSBpdGVtIGluIHRoZSBEeW5hbW8gREIgdGFibGUgdGhhdCBob2xkcyB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0IC0gVGhlIG5hbWUgb2YgdGhlIHMzIGJ1Y2tldCB0byB3YXRjaCwgd2hlbiB5b3UgZHJvcCBpdGVtcyBpbnRvIHRoaXMgdGFibGUgZXZlbnRzIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IHNuc1RvcGljIC0gVGhlIG5hbWUgb2YgdGhlIHNuc0V2ZW50IHRvIHB1Ymxpc2hcbiAqIEBwYXJhbSB7b2JqZWN0fSB1c2VySW1wb3J0VHlwZXMgLSBpbXBvcnQgdHlwZXMgdG8gZmlsdGVyIG9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoRXZlbnRzKGNvbmZpZ1RhYmxlLCB0YWJsZUtleSwgYnVja2V0LCBzbnNUb3BpYywgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBkeW5hbW9VdGlsLmdldCh7XG4gICAgICAgICAgICBUYWJsZU5hbWU6IGNvbmZpZ1RhYmxlLFxuICAgICAgICAgICAgS2V5OiB7IGtleTogdGFibGVLZXkgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29uZmlnIGZvciBrZXk6ICR7dGFibGVLZXl9IHRhYmxlOiAke2NvbmZpZ1RhYmxlfSBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMgb2YgMiBhbmQgMTBgLCBlKTtcbiAgICB9XG4gICAgbGV0IGNodW5rU2l6ZSA9IF8uZ2V0KHJlc3VsdCwgJ0l0ZW0uc25zQ2h1bmtTaXplJywgMik7XG4gICAgbGV0IG1heE1lc3NhZ2VzID0gXy5nZXQocmVzdWx0LCAnSXRlbS5zbnNNYXhNZXNzYWdlcycsIDEwKTtcblxuICAgIGNvbnN0IHNuc0NyZWF0ZVRvcGljUmVzcG9uc2UgPSBhd2FpdCBTTlNVdGlsLmNyZWF0ZVRvcGljKHsgTmFtZTogc25zVG9waWMgfSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSBzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlLlRvcGljQXJuO1xuICAgIGNvbnN0IG1heEtleXMgPSBjaHVua1NpemUgKiBtYXhNZXNzYWdlcztcblxuICAgIGNvbnN0IGZpbGVMaXN0ID0gYXdhaXQgbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcyk7XG5cbiAgICBjb25zdCBtZXNzYWdlTGlzdCA9IF8uY2hhaW4oZmlsZUxpc3QpXG4gICAgICAgIC5tYXAoJ0tleScpXG4gICAgICAgIC5jaHVuayhjaHVua1NpemUpXG4gICAgICAgIC5zbGljZSgwLCBtYXhNZXNzYWdlcylcbiAgICAgICAgLnZhbHVlKClcbiAgICA7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAobWVzc2FnZUxpc3QsIChmaWxlcykgPT4ge1xuICAgICAgICByZXR1cm4gU05TVXRpbC5wdWJsaXNoKHtcbiAgICAgICAgICAgIE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBidWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgVG9waWNBcm46IHRvcGljQXJuXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSIsImltcG9ydCB7IHB1Ymxpc2hFdmVudHMgfSBmcm9tICcuL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgaGFuZGxlRXZlbnRzIH0gZnJvbSAnLi9oYW5kbGVFdmVudHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBidWNrZXQgd2F0Y2hlciB3YXRjaGVzIGEgczMgYnVja2V0IGFuZCBwdWJsaXNoZXMgZXZlbnRzIHRvIGEgc25zIHRvcGljLCB0aGlzIGFsbG93cyB5b3UgdG8gcHJvY2VzcyBmaWxlcyBpbiBzMyB3aXRoIGEgc29tZSB0cmFuc2Zvcm1lciBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igd2F0Y2hCdWNrZXQsIHNlZSBiZWxvd1xuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcy5ldmVudCAtIFRoZSBldmVudCBvZiB0aGUgbGFtYmRhXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ1RhYmxlIC0gVGhlIER5bmFtbyBEQiB0YWJsZSB3aGVyZSB0byBnZXQgdGhlIGNodW5rU2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ0tleSAtIFRoZSBrZXkgdG8gdGhlIGl0ZW0gaW4gdGhlIER5bmFtbyBEQiB0YWJsZSB0aGF0IGhvbGRzIHRoZSBjaHVua1NpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5zM0J1Y2tldCAtIFRoZSBuYW1lIG9mIHRoZSBzMyBidWNrZXQgdG8gd2F0Y2gsIHdoZW4geW91IGRyb3AgaXRlbXMgaW50byB0aGlzIHRhYmxlIGV2ZW50cyB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuc25zVG9waWMgLSBUaGUgbmFtZSBvZiB0aGUgc25zRXZlbnQgdG8gcHVibGlzaFxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1zLnRyYW5zZm9ybWVyIC0gdGhlIGZ1bmN0aW9uIHRvIHJ1biBvbiBlYWNoIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwYXJhbXMuZXJyb3JIYW5kbGVyUGVyRmlsZV0gLSB0aGUgZnVuY3Rpb24gdG8gcnVuIG9uIGFzIGEgY2F0Y2ggb24gZWFjaCBmaWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXJhbXMuc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnNdIC0gd2hldGhlciB0byB1c2UgdGhlIGZhaWxlZC1vbmNlLCBmYWlsZWQtdHdpY2UsIGVycm9yIG9yIGp1c3QgZXJyb3IgZm9sZGVyc1xuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXMudXNlckltcG9ydFR5cGVzXSAtIHVzZXIgaW1wb3J0IHN1YiBkaXJlY3RvcmllcyBvYmplY3QgbWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbW9Db25maWdUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1vQ29uZmlnS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM0J1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25zVG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJQZXJGaWxlID0gXy5ub29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgaWYgKCFldmVudCB8fCAhZHluYW1vQ29uZmlnVGFibGUgfHwgIWR5bmFtb0NvbmZpZ0tleSB8fCAhczNCdWNrZXQgfHwgIXNuc1RvcGljIHx8ICF0cmFuc2Zvcm1lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycy4gTmVlZCBldmVudCwgZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB0cmFuc2Zvcm1lcicpO1xuICAgIH1cblxuICAgIGNvbnN0IEV2ZW50U291cmNlID0gXy5nZXQoZXZlbnQsICdSZWNvcmRzWzBdLkV2ZW50U291cmNlJyk7XG4gICAgaWYgKF8uaXNFcXVhbChFdmVudFNvdXJjZSwgJ2F3czpzbnMnKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXZlbnRzKGV2ZW50LCB0cmFuc2Zvcm1lciwgZXJyb3JIYW5kbGVyUGVyRmlsZSwgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1biBmcm9tIHRoZSBjcm9uIGpvYiBzbyBwdWJsaXNoIFNOUyBldmVudHNcbiAgICAgICAgcmV0dXJuIHB1Ymxpc2hFdmVudHMoZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB1c2VySW1wb3J0VHlwZXMpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBlcnJvckxpc3QgPSB7XG4gICAgaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdOT1QgRU5PVUdIIElOVkVOVE9SWSBUTyBGVUxGSUxMIFJFTEVBU0UnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVsZWFzZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0FMUkVBRFkgUkVMRUFTRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDExJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVjZWl2ZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ1JFQ0VJVkFCTEUgQUxSRUFEWSBSRUNFSVZFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTInLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRJdGVtc1JlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ1ZBTElEIElURU1TIE1VU1QgQkUgSU5DTFVERUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEzJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSUQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lEIGlzIGludmFsaWQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVjZWl2YWJsZToge1xuICAgICAgICBtZXNzYWdlOiAnTVVTVCBDT05UQUlOIEFUIExFQVNUIE9ORSBSRUNFSVZBQkxFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgUkVRVUVTVCBEQVRBJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEFQSUtleToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBSRVFVRVNUIC0gQVBJIE1BWSBLRVkgSU5WQUxJRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTcnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIHFiQ3JlYXRpb25FcnJvcjoge1xuICAgICAgICBtZXNzYWdlOiAnUVVJQ0tCT09LUyBFUlJPUiAtIEVSUk9SIENSRUFUSU5HIE9CSkVDVCBJTiBRVUlDS0JPT0tTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgY2Fubm90UmVvcGVuOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdDQU5OT1QgUkVPUEVOIC0gVEhFIE9SREVSIEhBUyBBTFJFQURZIEJFRU4gT1BFTkVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZERhdGVGb3JtYXQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgREFURSBGT1JNQVQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE5JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkU3RhcnREYXRlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFNUQVJUIERBVEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRW5kRGF0ZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBFTkQgREFURScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRPcmRlclN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIEVESVQgT1JERVIgSVRFTVMgVU5MRVNTIFRIRSBPUkRFUiBJUyBJTiBFU1RJTUFURSBTVEFUVVMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIyJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUGF5bWVudFN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBQQVlNRU5UIFNUQVRVUyBQQVlNRU5UIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjMnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWxlYXNlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFTEVBU0UsIFNUQVRVUyBSRUxFQVNFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWNlaXZhYmxlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFQ0VJVkFCTEUsIFNUQVRVUyBSRUNFSVZBQkxFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDI1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSnNvbjp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEpTT04nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRmlsdGVyOntcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgRklMVEVSJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFVzZXJOYW1lVXBkYXRlOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgVVNFUk5BTUUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI3JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbWFnZVNpemVMaW1pdDp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTUFHRSBTSVpFIExJTUlUIDEwMEtCIEVYQ0VFREVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgdW5hdXRob3JpemVkOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQVVUSE9SSVpFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQxMTEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDFcbiAgICB9LFxuICAgIG5vdEZvdW5kOntcbiAgICAgICAgbWVzc2FnZTogJ0lURU0gTk9UIEZPVU5EJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgZW1haWxSZXF1aXJlZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdOTyBFTUFJTCBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgRU1BSUwnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBtb2JpbGVQaG9uZVJlcXVpcmVkOntcbiAgICAgICAgbWVzc2FnZTogJ05PIE1PQklMRSBQSE9ORSBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgQ09OVEFDVFMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBpbnZhbGlkQ2FkZW5jZVR5cGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgQ0FERU5DRSBUWVBFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNTAwMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgIH0sXG59OyIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuL2Vycm9yQ29kZXMuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge3t9fSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGJvZHksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuICAgIGRiQ2xvc2UoKTtcblxuICAgIHJldHVybiBidWlsZFJlc3BvbnNlKDIwMCwgYm9keSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBwYXJhbSB7e2RiQ2xvc2U6ZnVuY3Rpb258dW5kZWZpbmVkfX0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzc0h0bWwoaHRtbCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG5cbiAgICBkYkNsb3NlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbCcsXG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBodG1sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudChldmVudCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmdldChldmVudCwgJ3JlcXVlc3QudXNlckF0dHJpYnV0ZXMnKTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzWydjb2duaXRvOmVtYWlsX2FsaWFzJ10gfHwgJ1VOS05PV04gVVNFUic7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1c2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSBldmVudCB7T2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIHt7dXNlcm5hbWU6IHN0cmluZywgaWQ6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VXNlcihldmVudCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOlVJRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206VUlEJykgfHxcbiAgICAgICAgJzAnO1xuXG4gICAgY29uc3QgaWQgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcblxuICAgIGNvbnN0IHVzZXJuYW1lID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5lbWFpbCcpIHx8IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5lbWFpbCcpIHx8ICdMT0NBTCBURVNUIFVTRVInO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIGlkXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsdXJlIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyB7T2JqZWN0fSBhbiBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge3tzdGF0dXNDb2RlOm51bWJlciwgaGVhZGVyczpvYmplY3QsIGJvZHk6c3RyaW5nfX0gYSByZXNwb25zZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUoYm9keSA9IHt9LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcbiAgICBkYkNsb3NlKCk7XG4gICAgbGV0IGNsZWFuZWRFcnJvckJvZHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuVVRJTF9MT0cgPT09ICdMT0dfQUxMJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6JywgYm9keSk7XG4gICAgfVxuXG4gICAgY29uc3QgTk9STUFMX0VSUk9SID0geyBzdGF0dXNDb2RlOiA1MDAsIGVycm9yQ29kZTogJzVYWCcsIG1lc3NhZ2U6ICdJTlRFUk5BTCBVVElMIEVSUk9SJyB9O1xuICAgIGNsZWFuZWRFcnJvckJvZHkgPSBib2R5O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChib2R5LmRldGFpbHMpKSB7XG4gICAgICAgIGNsZWFuZWRFcnJvckJvZHkgPSBkZXRlY3RKb3lFcnJvcihib2R5KTtcbiAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQoYm9keS5lcnJvckNvZGUpIHx8IF8uaXNVbmRlZmluZWQoYm9keS5zdGF0dXNDb2RlKSkge1xuICAgICAgICBjbGVhbmVkRXJyb3JCb2R5ID0gZGV0ZWN0U2VxdWVsaXplRXJyb3IoYm9keSk7XG4gICAgfVxuICAgIGlmKF8uZ2V0KGJvZHksICdyZXNwb25zZS5kYXRhLm1lc3NhZ2UnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6ICcrXy5nZXQoYm9keSwgJ3Jlc3BvbnNlLmRhdGEubWVzc2FnZScpKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld0JvZHkgPSBfLm1lcmdlKE5PUk1BTF9FUlJPUiwgY2xlYW5lZEVycm9yQm9keSk7XG5cbiAgICByZXR1cm4gYnVpbGRSZXNwb25zZShuZXdCb2R5LnN0YXR1c0NvZGUsIG5ld0JvZHkpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWx1cmUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHN0YXR1c0NvZGUge051bWJlcn0gYSBzdGF0dXMgY29kZVxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3N0YXR1c0NvZGU6bnVtYmVyLCBoZWFkZXJzOm9iamVjdCwgYm9keTpzdHJpbmd9fSBhIHJlc3BvbnNlIG9iamVjdFxuICovXG5mdW5jdGlvbiBidWlsZFJlc3BvbnNlKHN0YXR1c0NvZGUsIGJvZHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgIH07XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0RXZlbnQge3tib2R5OnN0cmluZ319IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMgZXZlbnQgeyp9IHRoZSBqc29uIG9iamVjdCBvZiB0aGUgYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCb2R5KHJlcXVlc3RFdmVudCkge1xuXG4gICAgbGV0IGV2ZW50Qm9keSA9IHt9O1xuICAgIGlmIChfLmlzU3RyaW5nKHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnRCb2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0RXZlbnQuYm9keSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgSlNPTlxuICAgICAgICAgICAgZXZlbnRCb2R5ID0gbnVsbDtcblxuICAgICAgICAgICAgdGhyb3cgZXJyb3JMaXN0LmludmFsaWRKc29uO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICBldmVudEJvZHkgPSByZXF1ZXN0RXZlbnQuYm9keTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCb2R5O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEV2ZW50IHtzdHJpbmd8b2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gdW5kZWZpbmVkIGEgY2FsbCBiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBldmVudCB7Kn0gdGhlIGpzb24gb2JqZWN0IG9mIHRoZSBib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV2ZW50KHJlcXVlc3RFdmVudCwgY2FsbGJhY2spIHtcbiAgICBsZXQgZXZlbnQgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmVudCA9IEpTT04ucGFyc2UocmVxdWVzdEV2ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBKU09OXG4gICAgICAgICAgICBldmVudCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIGV2ZW50ID0gcmVxdWVzdEV2ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKiBsb29rIGZvciBzZXF1ZWxpemUgZXJyb3JzIGFuZCByZXR1cm4gYSBtZXNzYWdlXG4gKiBFUlJPUlMgc2hvdWxkIG5vdCBiZSBjYXVnaHQgaGVyZSB0aGlzIGlzIGEgZmFsbGJhY2sgZm9yIHVua25vd24gZGF0YWJhc2UgZXJyb3JzXG4gKlxuICogQHBhcmFtIGJvZHkge29iamVjdH0gcGFydCBvZiBhIGJvZHkgcmVzcG9uc2VcbiAqIEByZXR1cm5zIGVycm9yIG1lc3NhZ2Ugb2JqZWN0IHttZXNzYWdlOnN0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFNlcXVlbGl6ZUVycm9yKGJvZHkpIHtcbiAgICBjb25zdCBlcnJvckJvZHkgPSB7fTtcblxuICAgIGxldCBzZXF1ZWxpemVFcnJvciA9IF8uZ2V0KGJvZHksICdlcnJvcnMnLCBbXSkucmVkdWNlKChhY2MsIGVycikgPT4ge1xuICAgICAgICBhY2MgPSBhY2MgKyAnICcgKyBfLmdldChlcnIsICdtZXNzYWdlJyk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgJycpO1xuICAgIGNvbnN0IHBhcmVudEVycm9yID0gXy5nZXQoYm9keSwgJ3BhcmVudCcsICcnKTtcblxuICAgIHNlcXVlbGl6ZUVycm9yID0gc2VxdWVsaXplRXJyb3IgKyBfLmdldChib2R5LCAnb3JpZ2luYWwuZGV0YWlsJywgJycpICsgXy5nZXQoYm9keSwgJ1R5cGVFcnJvcicsICcnKSArIHBhcmVudEVycm9yO1xuICAgIGVycm9yQm9keS5tZXNzYWdlID0gc2VxdWVsaXplRXJyb3IudHJpbSgpO1xuICAgIHJldHVybiBlcnJvckJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RKb3lFcnJvcihib2R5KSB7XG4gICAgY29uc3QgZXJyb3JCb2R5ID0ge307XG4gICAgY29uc3Qgam95RXJyb3IgPSBfLmdldChib2R5LCAnZGV0YWlsc1swXScsIHt9KTtcbiAgICBjb25zb2xlLmVycm9yKCdVU0VSIFZBTElEQVRJT04gRVJST1I6JywgYm9keSk7XG5cbiAgICBlcnJvckJvZHkubWVzc2FnZSA9IGpveUVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3JCb2R5LnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgZXJyb3JCb2R5LmVycm9yQ29kZSA9ICc0MDAwJztcbiAgICByZXR1cm4gZXJyb3JCb2R5O1xufSIsImltcG9ydCB7IFMzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzM1V0aWxzKGFjdGlvbiwgcGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgcmV0dXJuIHMzW2FjdGlvbl0ocGFyYW1zKTtcclxufVxyXG5cclxuY29uc3QgUzNVdGlsID0ge1xyXG4gICAgZ2V0T2JqZWN0OiAocGFyYW1zKSA9PiBnZXRTMyhwYXJhbXMpLFxyXG4gICAgZGVsZXRlT2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdkZWxldGVPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgcHV0T2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdwdXRPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgbGlzdE9iamVjdHNWMjogKHBhcmFtcykgPT4gczNVdGlscygnbGlzdE9iamVjdHNWMicsIHBhcmFtcylcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgUzNVdGlsO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0UzMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRPYmplY3QocGFyYW1zKTtcclxuICAgIHJldHVybiByZXNwb25zZS5Cb2R5LnRyYW5zZm9ybVRvU3RyaW5nKCd1dGYtOCcpO1xyXG59IiwiaW1wb3J0IHsgU05TIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XHJcblxyXG5jb25zdCBTTlNVdGlsID0ge1xyXG4gICAgcHVibGlzaDogKHBhcmFtcykgPT4gcHVibGlzaChwYXJhbXMpLFxyXG4gICAgY3JlYXRlVG9waWM6IChwYXJhbXMpID0+IGNyZWF0ZVRvcGljKHBhcmFtcylcclxufTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLnB1Ymxpc2gocGFyYW1zKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVG9waWMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLmNyZWF0ZVRvcGljKHBhcmFtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNOU1V0aWw7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtczNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9saWItZHluYW1vZGJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQvbW9tZW50LmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlcXVlbGl6ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1bXp1Z1wiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgaGFuZGxlRmlsZSBhcyBoYW5kbGVGaWxlSW1wb3J0IH0gZnJvbSAnLi9ldmVudE1hbmFnZXIvaGFuZGxlRmlsZS5qcyc7XG5pbXBvcnQgeyB3YXRjaEJ1Y2tldCBhcyB3YXRjaEJ1Y2tldEltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzJztcbmltcG9ydCB7IHB1Ymxpc2hFdmVudHMgYXMgcHVibGlzaEV2ZW50c0ltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVycyBhcyBjcmVhdGVGaWx0ZXJzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTb3J0IGFzIGNyZWF0ZVNvcnRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9jcmVhdGVTb3J0LmpzJztcbmltcG9ydCB7IGZpbmRBbGwgYXMgZmluZEFsbEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMnO1xuaW1wb3J0IHsgY2hlY2tNb2R1bGUgYXMgY2hlY2tNb2R1bGVJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBmYWlsdXJlIGFzIGZhaWx1cmVJbXBvcnQsIHN1Y2Nlc3MgYXMgc3VjY2Vzc0ltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHJ1bk1pZ3JhdGlvbnMgYXMgcnVuTWlncmF0aW9uc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyIGFzIGdldEN1cnJlbnRVc2VySW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc3VjY2Vzc0h0bWwgYXMgc3VjY2Vzc0h0bWxJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50IGFzIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RmlsdGVycyBhcyBkZWZhdWx0RmlsdGVyc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIGFzIGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VCb2R5IGFzIHBhcnNlQm9keUltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHBhcnNlRXZlbnQgYXMgcGFyc2VFdmVudEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGdldEJ1c2luZXNzZXNJbmZvIGFzIGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgdXNlckRlZmF1bHRCaWQgYXMgdXNlckRlZmF1bHRCaWRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBjaGVja1dyaXRlQWNjZXNzIGFzIGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVGaWxlID0gaGFuZGxlRmlsZUltcG9ydDtcbmV4cG9ydCBjb25zdCB3YXRjaEJ1Y2tldCA9IHdhdGNoQnVja2V0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IHB1Ymxpc2hFdmVudHMgPSBwdWJsaXNoRXZlbnRzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBjcmVhdGVGaWx0ZXJzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBjcmVhdGVTb3J0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGZpbmRBbGwgPSBmaW5kQWxsSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrTW9kdWxlID0gY2hlY2tNb2R1bGVJbXBvcnQ7XG5leHBvcnQgY29uc3QgZmFpbHVyZSA9IGZhaWx1cmVJbXBvcnQ7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IHN1Y2Nlc3NJbXBvcnQ7XG5leHBvcnQgY29uc3QgcnVuTWlncmF0aW9ucyA9IHJ1bk1pZ3JhdGlvbnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXIgPSBnZXRDdXJyZW50VXNlckltcG9ydDtcbmV4cG9ydCBjb25zdCBzdWNjZXNzSHRtbCA9IHN1Y2Nlc3NIdG1sSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQgPSBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0gZGVmYXVsdEZpbHRlcnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgYWNjZXNzUmlnaHRzVXRpbHMgPSBhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBwYXJzZUJvZHkgPSBwYXJzZUJvZHlJbXBvcnQ7XG5leHBvcnQgY29uc3QgcGFyc2VFdmVudCA9IHBhcnNlRXZlbnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0QnVzaW5lc3Nlc0luZm8gPSBnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydDtcbmV4cG9ydCBjb25zdCB1c2VyRGVmYXVsdEJpZCA9IHVzZXJEZWZhdWx0QmlkSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrV3JpdGVBY2Nlc3MgPSBjaGVja1dyaXRlQWNjZXNzSW1wb3J0O1xuIl0sIm5hbWVzIjpbInJ1bk1pZ3JhdGlvbnMiLCJfbG9kYXNoIiwicmVxdWlyZSIsIl9sb2Rhc2gyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91bXp1ZyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGF0YWJhc2VOYW1lIiwic2VxdWVsaXplSW5zdGFuY2UiLCJpbml0aWFsaXplTW9kZWxzIiwicGF0aFRvTWlncmF0aW9uRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIlBXRCIsInVtenVnIiwiVW16dWciLCJtaWdyYXRpb25zIiwiZ2xvYiIsImNvbnRleHQiLCJnZXRRdWVyeUludGVyZmFjZSIsInN0b3JhZ2UiLCJTZXF1ZWxpemVTdG9yYWdlIiwic2VxdWVsaXplIiwibG9nZ2VyIiwiY29uc29sZSIsInBlbmRpbmdNaWdyYXRpb25zIiwicGVuZGluZyIsImxvZyIsInVwIiwiY2F0Y2giLCJ1cEVycm9yIiwiZG93biIsIl8iLCJjaGFpbiIsIm1hcCIsInJldmVyc2UiLCJ2YWx1ZSIsInRoZW4iLCJtc2ciLCJlcnJvciIsIkVycm9yIiwiZG93bkVycm9yIiwiYWNjZXNzUmlnaHRzVXRpbHMiLCJleHBvcnRzIiwidXNlckRlZmF1bHRCaWQiLCJnZXRCdXNpbmVzc2VzSW5mbyIsImdldE1vZHVsZUluZm8iLCJjaGVja01vZHVsZSIsImNoZWNrV3JpdGVBY2Nlc3MiLCJfZXJyb3JDb2RlcyIsIl9yZXF1ZXN0UmVzcG9uc2UiLCJldmVudCIsInJlcXVlc3RlZEJ1c2luZXNzSWRzIiwiZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMiLCJhbGxvd2VkQnVzaW5lc3NJZHMiLCJnZXRBbGxvd2VkQnVzaW5lc3NJZHMiLCJsb2NhbEJpZExpc3QiLCJpc0VtcHR5IiwiZ2V0IiwiQlVJTERfRU5WIiwibGVuZ3RoIiwiaW50ZXJzZWN0aW9uIiwianNvblRvUGFyc2UiLCJkYmkiLCJKU09OIiwicGFyc2UiLCJzcGxpdCIsImJ1c2luZXNzZXMiLCJPYmplY3QiLCJrZXlzIiwiYWNjZXNzUmlnaHRzIiwiYmlkcyIsIndpdGhMb2NhbCIsInNldCIsImFyIiwibW9kdWxlUmlnaHRzIiwibW9kdWxlTmFtZSIsImFsbG93QWNjZXNzIiwiZXJyb3JMaXN0IiwidW5hdXRob3JpemVkIiwidXNlclJvbGVzIiwiYWRtaW4iLCJyZWFkIiwid3JpdGUiLCJldmVudEJvZHkiLCJwYXJzZUJvZHkiLCJidXNpbmVzc0lkcyIsImJ1c2luZXNzSWQiLCJmaW5kIiwiaWQiLCJyYXciLCJ1c2VyUmlnaHQiLCJfc2VxdWVsaXplIiwiX3NlcXVlbGl6ZTIiLCJfbW9tZW50IiwiX21vbWVudDIiLCJfYWNjZXNzUmlnaHRzVXRpbHMiLCJjcmVhdGVGaWx0ZXJzIiwib2JqZWN0RmlsdGVycyIsInF1ZXJ5Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsIndoZXJlIiwicmVkdWNlIiwiYWNjIiwiaXRlbSIsInZhbCIsIml0ZW1OYW1lIiwiaW5jbHVkZXMiLCJmaWx0ZXJUeXBlIiwiREIiLCJPcCIsImlMaWtlIiwib3IiLCJpbiIsInBhcnNlZEpzb24iLCJlIiwidHlwZSIsIkJPT0xFQU4iLCJxdWVyeVZhbHVlIiwidG9Mb3dlckNhc2UiLCJib29sZWFuTWFwIiwiYWN0aXZlIiwiZmlsdGVyQWRkcyIsInMiLCJtb21lbnQiLCJ1dGMiLCJkYXRlcyIsImJldHdlZW4iLCJ0b0RhdGUiLCJpc1ZhbGlkIiwiaW52YWxpZFN0YXJ0RGF0ZSIsImludmFsaWRFbmREYXRlIiwiY3JlYXRlZEF0Iiwid2l0aERhdGUiLCJhc3NpZ24iLCJjcmVhdGVTb3J0IiwiZGVmYXVsdEZpbHRlciIsImNvcHlPZkRlZmF1bHRGaWx0ZXIiLCJjbG9uZSIsInNvcnQiLCJ0ZXN0SXRlbSIsImluZGV4T2YiLCJzdWJzdHIiLCJzb3J0SXRlbSIsImZvckVhY2giLCJwYXJlbnRDaGlsZExpc3QiLCJwdXNoIiwiZGVmYXVsdEZpbHRlcnMiLCJhZGRGaWx0ZXJzRnJvbVNjaGVtYSIsInNjaGVtYSIsInN1YlNjaGVtYXMiLCJmaWx0ZXJzIiwia2V5IiwiYWNjdW11bGF0b3IiLCJrZXlQcmVmaXgiLCJhc0xpbmtBbGlhcyIsIlNUUklORyIsImVxIiwiaXRlbVR5cGUiLCJmaWx0ZXJUeXBlT3ZlclJpZGUiLCJDSEFSIiwiVEVYVCIsIkRFQ0lNQUwiLCJCSUdJTlQiLCJJTlRFR0VSIiwiREFURSIsIkRBVEVPTkxZIiwibHQiLCJKU09OQiIsImNvbnRhaW5zIiwiZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsIiwiZmluZEFsbCIsInJlc3VsdCIsImxpbWl0Iiwib2Zmc2V0IiwiaGFzTW9yZSIsInNwbGljZSIsInBhZ2VPYmplY3QiLCJyb3dzIiwibW9kZWwiLCJvcHRpb25zIiwiZmluZEFyZ3MiLCJpbmNsdWRlIiwiYWxsIiwibmVzdGVkIiwicmVzdWx0cyIsImZpbmRVdGlscyIsIl9saWJEeW5hbW9kYiIsIl9jbGllbnREeW5hbW9kYiIsImR5bmFtb1V0aWwiLCJwYXJhbXMiLCJkeW5hbW9EYiIsIkR5bmFtb0RCRG9jdW1lbnQiLCJmcm9tIiwiRHluYW1vREIiLCJoYW5kbGVFdmVudHMiLCJfaGFuZGxlRmlsZSIsIl9ibHVlYmlyZCIsIl9ibHVlYmlyZDIiLCJ0cmFuc2Zvcm1lciIsImVycm9ySGFuZGxlclBlckZpbGUiLCJzaG91bGRTa2lwRmFpbGVkRm9sZGVycyIsInVzZXJJbXBvcnRUeXBlcyIsIlJlY29yZHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc0Vycm9ycyIsInJlY29yZCIsInNuc0luZm8iLCJzM0J1Y2tldCIsImJ1Y2tldCIsImZpbGVzIiwiZmlsZSIsInBhdGgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYW5kbGVGaWxlIiwiZXJyIiwiX1MzVXRpbHMiLCJfUzNVdGlsczIiLCJCdWNrZXQiLCJLZXkiLCJib2R5IiwiUzNVdGlsIiwiZ2V0T2JqZWN0IiwicGFyc2VkQm9keSIsInJldHVybmVkVmFsdWUiLCJkZWxldGVPYmplY3QiLCJjb2RlIiwibmV3UGF0aCIsInVzZXJzSW1wb3J0cyIsInZhbHVlcyIsIml0ZW1zIiwiZmlsZU5hbWUiLCJsYXN0IiwiZm9sZGVyTmFtZSIsImZpcnN0Iiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJuZXdQYXJhbXMiLCJCb2R5IiwicHV0T2JqZWN0IiwibG9vcCIsInB1Ymxpc2hFdmVudHMiLCJfU05TVXRpbHMiLCJfU05TVXRpbHMyIiwiX2R5bmFtb1V0aWxzIiwiX2R5bmFtb1V0aWxzMiIsIm1heEtleXMiLCJidWNrZXRSZXN1bHQiLCJmaWxlTGlzdCIsImN1cnJlbnRUaW1lIiwiUzNVdGlscyIsImxpc3RPYmplY3RzVjIiLCJNYXhLZXlzIiwiQ29udGludWF0aW9uVG9rZW4iLCJuZXdGaWxlcyIsImZpbHRlciIsIkNvbnRlbnRzIiwiZmlsZURlbGF5VGltZSIsImlzU2FtZU9yQmVmb3JlIiwiY29uY2F0IiwiSXNUcnVuY2F0ZWQiLCJOZXh0Q29udGludWF0aW9uVG9rZW4iLCJjb25maWdUYWJsZSIsInRhYmxlS2V5Iiwic25zVG9waWMiLCJUYWJsZU5hbWUiLCJjaHVua1NpemUiLCJtYXhNZXNzYWdlcyIsInNuc0NyZWF0ZVRvcGljUmVzcG9uc2UiLCJTTlNVdGlsIiwiY3JlYXRlVG9waWMiLCJOYW1lIiwidG9waWNBcm4iLCJUb3BpY0FybiIsIm1lc3NhZ2VMaXN0IiwiY2h1bmsiLCJzbGljZSIsInB1Ymxpc2giLCJNZXNzYWdlIiwic3RyaW5naWZ5Iiwid2F0Y2hCdWNrZXQiLCJfcHVibGlzaEV2ZW50cyIsIl9oYW5kbGVFdmVudHMiLCJkeW5hbW9Db25maWdUYWJsZSIsImR5bmFtb0NvbmZpZ0tleSIsIm5vb3AiLCJFdmVudFNvdXJjZSIsImlzRXF1YWwiLCJpbnZhbGlkSW52ZW50b3J5UmVsZWFzZVJlcXVlc3QiLCJtZXNzYWdlIiwiZXJyb3JDb2RlIiwic3RhdHVzQ29kZSIsImFscmVhZHlSZWxlYXNlZCIsImFscmVhZHlSZWNlaXZlZCIsImludmFsaWRJdGVtc1JlcXVlc3QiLCJpbnZhbGlkSUQiLCJpbnZhbGlkUmVjZWl2YWJsZSIsImludmFsaWRSZXF1ZXN0IiwiaW52YWxpZEFQSUtleSIsInFiQ3JlYXRpb25FcnJvciIsImNhbm5vdFJlb3BlbiIsImludmFsaWREYXRlRm9ybWF0IiwiaW52YWxpZE9yZGVyU3RhdHVzIiwiaW52YWxpZFBheW1lbnRTdGF0dXMiLCJpbnZhbGlkUmVsZWFzZVN0YXR1cyIsImludmFsaWRSZWNlaXZhYmxlU3RhdHVzIiwiaW52YWxpZEpzb24iLCJpbnZhbGlkRmlsdGVyIiwiaW52YWxpZFVzZXJOYW1lVXBkYXRlIiwiaW1hZ2VTaXplTGltaXQiLCJub3RGb3VuZCIsImVtYWlsUmVxdWlyZWQiLCJtb2JpbGVQaG9uZVJlcXVpcmVkIiwiaW52YWxpZENhZGVuY2VUeXBlIiwic3VjY2VzcyIsInN1Y2Nlc3NIdG1sIiwiZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudCIsImdldEN1cnJlbnRVc2VyIiwiZmFpbHVyZSIsInBhcnNlRXZlbnQiLCJkZXRlY3RTZXF1ZWxpemVFcnJvciIsImRldGVjdEpveUVycm9yIiwiZGJDbG9zZSIsImJ1aWxkUmVzcG9uc2UiLCJodG1sIiwiaGVhZGVycyIsImF0dHJpYnV0ZXMiLCJ1c2VybmFtZSIsImNsZWFuZWRFcnJvckJvZHkiLCJVVElMX0xPRyIsIk5PUk1BTF9FUlJPUiIsImlzVW5kZWZpbmVkIiwiZGV0YWlscyIsIm5ld0JvZHkiLCJtZXJnZSIsInJlcXVlc3RFdmVudCIsImlzU3RyaW5nIiwiaXNPYmplY3QiLCJjYWxsYmFjayIsImVycm9yQm9keSIsInNlcXVlbGl6ZUVycm9yIiwicGFyZW50RXJyb3IiLCJ0cmltIiwiam95RXJyb3IiLCJzM1V0aWxzIiwiX2NsaWVudFMiLCJhY3Rpb24iLCJzMyIsIlMzIiwiZ2V0UzMiLCJyZXNwb25zZSIsInRyYW5zZm9ybVRvU3RyaW5nIiwiX2NsaWVudFNucyIsInNucyIsIlNOUyIsIl93YXRjaEJ1Y2tldCIsIl9jcmVhdGVGaWx0ZXJzIiwiX2NyZWF0ZVNvcnQiLCJfZmluZEFsbCIsIl9taWdyYXRpb25zIiwiX2RlZmF1bHRGaWx0ZXJzIiwiaGFuZGxlRmlsZUltcG9ydCIsIndhdGNoQnVja2V0SW1wb3J0IiwicHVibGlzaEV2ZW50c0ltcG9ydCIsImNyZWF0ZUZpbHRlcnNJbXBvcnQiLCJjcmVhdGVTb3J0SW1wb3J0IiwiZmluZEFsbEltcG9ydCIsImNoZWNrTW9kdWxlSW1wb3J0IiwiZmFpbHVyZUltcG9ydCIsInN1Y2Nlc3NJbXBvcnQiLCJydW5NaWdyYXRpb25zSW1wb3J0IiwiZ2V0Q3VycmVudFVzZXJJbXBvcnQiLCJzdWNjZXNzSHRtbEltcG9ydCIsImdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQiLCJkZWZhdWx0RmlsdGVyc0ltcG9ydCIsImFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IiwicGFyc2VCb2R5SW1wb3J0IiwicGFyc2VFdmVudEltcG9ydCIsImdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IiwidXNlckRlZmF1bHRCaWRJbXBvcnQiLCJjaGVja1dyaXRlQWNjZXNzSW1wb3J0Il0sInNvdXJjZVJvb3QiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piper-utils",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "utility library for piper",
5
5
  "main": "bin/main.js",
6
6
  "scripts": {
@@ -4,7 +4,7 @@ import DB from 'sequelize';
4
4
  /**
5
5
  * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas
6
6
  *
7
- * @param {{type:{}, filterOverRide:string}} schema - type is sequelize data type filterOverRide is used to overide default filterType implied by type
7
+ * @param {object} schema - type is sequelize data type
8
8
  * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define
9
9
  * sub schema can be {location: locationSchema} or {location: {as: "asAlias", schema: schema}}
10
10
  * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.
@@ -22,10 +22,6 @@ export function defaultFilters(schema, subSchemas = {}) {
22
22
  return filters;
23
23
  }
24
24
 
25
- export const filterOverRideTypes = {
26
- equal:'equal'
27
- }
28
-
29
25
  export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
30
26
  const asLinkAlias = _.get(schema, 'as', null);
31
27
  schema = _.get(schema, 'schema') || schema;
@@ -47,9 +43,6 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
47
43
  return acc;
48
44
  }
49
45
 
50
- //create a custom filter to overrider defaults implied by the db value
51
- const filterTypeOverRide = _.get(schema,`[${item}].filterOverRide`);
52
-
53
46
  const itemType = filterTypeOverRide || schema[item].type;
54
47
 
55
48
  //todo these should be removed, there are just here for sort tests
@@ -81,9 +74,9 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
81
74
  acc[key] = { filterType: DB.Op.iLike };
82
75
  } else if (itemType instanceof DB.DECIMAL) {
83
76
  acc[key] = { filterType: DB.Op.or };
84
- } else if (itemType instanceof DB.INTEGER) {
77
+ } else if (itemType instanceof DB.INTEGER) {
85
78
  acc[key] = { filterType: DB.Op.or };
86
- } else if (itemType instanceof DB.BIGINT) {
79
+ } else if (itemType instanceof DB.BIGINT) {
87
80
  acc[key] = { filterType: DB.Op.or };
88
81
  } else if (itemType instanceof DB.BOOLEAN) {
89
82
  acc[key] = { type: itemType, filterType: DB.Op.eq };
@@ -98,11 +91,6 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
98
91
  acc['updatedAt'] = { type: DB.DATE, filterType: DB.Op.lt };
99
92
  acc['id'] = { type: DB.INTEGER, filterType: DB.Op.eq };
100
93
 
101
- //filter overRides
102
- if (itemType === filterOverRideTypes.equal) {
103
- acc[key] = { filterType: DB.Op.eq };
104
- }
105
-
106
94
  return acc;
107
95
  }, accumulator);
108
96
  }